Как сделать?
…
Stag_Beetle:
Спрашивается как такое вообще возможно?
У тебя ’10’ и ’8’ сравнились как строки (’8’ больше). Если это действительно происходит по-разному с каждым прогоном, то это баг плеера.
Попробуй использовать функцию VAL при сравнении:
$a=$a-$b
if VAL($c)>VAL($a) : $c=$a
А вообще - пользоваться строковыми переменными для чисел - это путь генерации багов…
vais:
Кто может мне помощь с боевой системой
Целый день мучаюсь, нечего лучше этого не написала
Здесь нужно плясать от игрока, что он должен видеть.
У тебя по коду каждое новое действие добавляется по нажатию предыдущего, причем предыдущее не пропадает. Тебе явно часть действий нужно написать в параллель.
if былпляж2=0
'Вы видите свою жену и дочерей. Это была хорошая новость, а вот новость плохая - их загнал на небольшую скалу большой краб, ни жена, ни дети еще вас пока не увидели'
act 'напасть на краба':
delact 'напасть на краба'
if 'кокосовый орех':
act 'бросить кокосом в краба':
крабкокос=rand(1,10)
if крабкокос=1:
молодойкрабжизнь=молодойкрабжизнь-5
'Вы попали кокосовым орехом в краба'
end
!Возможно здесь нужно удалить кокос из предметов
end
end
act 'ударить':
крабударить=rand(1,10)
крабатака1=rand(1,100)
крабатака2=rand(1,100)
if крабударить=1:
молодойкрабжизнь=молодойкрабжизнь-урон
end
if крабатака1=<15:
жизнь=жизнь-молодойкрабурон
end
if крабатака2=<15:
жизнь=жизнь-молодойкрабурон
end
end
end
end
Ну а с самой математикой боя я не могу ничего посоветовать. Возможно кто-нибудь сможет. :)
if ‘кокосовый орех’:
Это что вообще такое? “Если *отобразить надпись*, то делаем…” Или я что-то не понимаю или это ересь какая-то. Разве там не должно быть:
if кокосовыйорех=1:
vais, EL_RIO прав, скорее всего имелось в виду
if obj('кокосовый орех'):
newsash:
vais, EL_RIO прав, скорее всего имелось в виду
if obj('кокосовый орех'):
Да. Немного ошиблась.
Ну все равно что с этой надписью, что без, боевая система не тянет. Не могу сделать цикличность.
vais:
Да. Немного ошиблась.
Ну все равно что с этой надписью, что без, боевая система не тянет. Не могу сделать цикличность.
Какого рода цикличность? По идее в моём варианте действия ударить и бросок кокоса доступны, т.е. можно их тыкать до конца боя. Чем не цикличность?
Кстати, в каждое действие с уроном нужно прикрутить проверку здоровья с переходом на соответствующую локацию. Например:
.......
if крабатака2=<15:
жизнь=жизнь-молодойкрабурон
end
if жизнь <= 0: gt 'поражение'
if молодойкрабжизнь <= 0: gt 'победа'
end
Короче, по быстрому дописал код с минимальными изменениями. Система проста как два рубля, так что с циклами не стал даже заморачиваться. Они нужны для более сложных боевых систем. Вот код из редактора:
!Недостающая инфа
!---------------------------
addobj'кокосовый орех'
молодойкрабжизнь=15
молодойкрабурон=1
жизнь=15
урон=5
!---------------------------
'Краб: <<молодойкрабжизнь>>'
'Вы: <<жизнь>>'
*nl
if былпляж2=0:
'Вы видите свою жену и дочерей. Это была хорошая новость, а вот новость плохая - их загнал на небольшую скалу большой краб, ни жена, ни дети еще вас пока не увидели'
act 'напасть на краба':
delact $selact
if obj'Кокосовый орех':
act 'Бросить кокосом в краба':
delact $selact
delobj'кокосовый орех'
крабкокос=rand(1,10)
!10% шанс попадания
if крабкокос=1:
молодойкрабжизнь=молодойкрабжизнь-5
'Вы попали кокосовым орехом в краба'
'Краб: <<молодойкрабжизнь>>'
'Вы: <<жизнь>>'
else
'Вы бросили кокос и промахнулись.'
'Краб: <<молодойкрабжизнь>>'
'Вы: <<жизнь>>'
end
end
end
act 'Ударить':
крабударить=rand(1,10)
крабатака1=rand(1,100)
крабатака2=rand(1,100)
!10% шанс попадания по крабу
if крабударить=1:
молодойкрабжизнь=молодойкрабжизнь-урон
'Вы пинаете тварь и попадаете, нанеся <<урон>> ед. урона.'
'Краб: <<молодойкрабжизнь>>'
'Вы: <<жизнь>>'
else
'Вы пытаетесь пнуть тварь, но промахиваетесь.'
'Краб: <<молодойкрабжизнь>>'
'Вы: <<жизнь>>'
end
!15% шанс, что краб вас достанет 1й атакой
if крабатака1=<15:
жизнь=жизнь-молодойкрабурон
'Краб огрызается в ответ и первой же атакой наносит вам <<молодойкрабурон>> ед. урона.'
'Краб: <<молодойкрабжизнь>>'
'Вы: <<жизнь>>'
else
'В бешенстве краб бросается на вас, но промахивается'
'Краб: <<молодойкрабжизнь>>'
'Вы: <<жизнь>>'
end
!15% шанс, что краб вас достанет 2й атакой
if крабатака2=<15:
жизнь=жизнь-молодойкрабурон
'Краб переходит в контратаку и наносит вам <<молодойкрабурон>> ед. урона.'
'Краб: <<молодойкрабжизнь>>'
'Вы: <<жизнь>>'
else
'Пытаясь контратаковать, краб бросается на вас, но промахивается'
'Краб: <<молодойкрабжизнь>>'
'Вы: <<жизнь>>'
end
if молодойкрабжизнь<=0 and жизнь>0:msg'Вы победили'
if жизнь<=0:msg'Вы мертвы'
end
end
end
Сразу замечание по шансам попадания - это кошмар какой-то. Там что, инвалиды дерутся, что попадает только 1 из 10 или 1 из 6,[6] ударов? Подправить бы…
1) Про инвалидов, считайте это мое виденье игры) Не хочу что бы было как у всех. Раз раз и готово. И не хочу что бы было как в Дисах 3 которых убили большие цифры. ставить по 1000хп
2) Что то мне совсем не нравится такая система боя( А именно на ней и застряла(
проблема в том что у меня очень много монстров. есть те кто появляются по событию(после постройки лагеря, пока не уничтожишь 3 колонии крабов будут приходит по три краба от каждой колонии в поисках пищи) одних крабов пять видов. А это только один вид монстров. И писать для каждого код сложно. Может у кого есть готовый код боевой системы которым он может поделиться? Или мысли как упростить боевку
Эх… что-то я слишком добрый сегодня. В принципе, нет ничего особо сложного для начинающего в том, чтобы перевести эту боевку в обобщенный вид. Просто написать для неё самый примитивный “движок” на основе уже имеющейся логики.
Это вставляем на локацию (на тот же пляж, к примеру)
$loc=$curloc
act'Напасть на беззащитное существо':
!---------------------------
addobj'какос'
!---------------------------
!Параметры ГГ
hp=15
damage=5
!---------------------------
!Параметры врага
$vrag_name='Няшный краб'
vrag_hp=15
vrag_damage=1
!---------------------------
gt'battle'
end
А вот это в локацию “battle”:
cla
clr
*clr
if hp<=0 or vrag_hp<=0:
!Переход на локацию смерти
if hp<=0:msg'You Loose!'>'death'
!Выводим сабж и отправляем на локацию, хранящуюся в переменной $loc
if vrag_hp<=0:msg'You Win!'>'<<$loc>>'
else
'Ваша жизнь: <<hp>>'
'Жизнь врага (<<$vrag_name>>): <<vrag_hp>>'
''
if obj'какос':
act'Кинуть какосом':
cla
r=rand(1,10)
if r=1:
'Вы попали какосом во врага! Истинный папуас!'
vrag_hp=vrag_hp-5
else
'Вы ожидаемо промахнулись мимо врага'
end
delobj'какос'
act'Далее':gt'battle'
end
end
act'Удврить':
cla
r=rand(1,10)
if r=1:
'Вы попадаете и наносите <<damage>> урона'
vrag_hp-=damage
else
'Вы промахиваетесь'
end
r=rand(1,100)
if r<=15:
'Краб бьет вас и отнимает <<vrag_damage>> ед. вашей жалкой жизни.'
hp-=vrag_damage
else
'Враг промахивается'
end
r=rand(1,100)
if r<=15:
'Краб бьет вас и отнимает <<vrag_damage>> ед. вашей жалкой жизни.'
hp-=vrag_damage
else
'Враг промахивается'
end
act'Далее':gt'battle'
end
end
Все довольно просто, если потратить чуть-чуть времени и разобраться. И дополнительные “фичи” (в рамках разумного) добавляются без проблем. Если охота чего-то посложнее, то тут уже каждый сам пилит свой велосипед. Посмотрите как реализованы боевые системы в других играх (коих тут не мало) и выберите наиболее подходящую. А если такой вдруг(!) не найдется, так хотя бы будете знать что и как нужно делать, чтобы получить определенный результат.
EL_RIO:
Посмотрите как реализованы боевые системы в других играх (коих тут не мало) и выберите наиболее подходящую
Тринити :D
vais:
И не хочу что бы было как в Дисах 3 которых убили большие цифры. ставить по 1000хп
А если делать как во вторых дисах?
Игнор поленейший… неужели никто ни разу не пытался прикрутить бесплатный открытый синтезатор речи??? в паре с гарнитурой это же находка просто.
BECEJIb4AK_Y:
Игнор поленейший… неужели никто ни разу не пытался прикрутить бесплатный открытый синтезатор речи??? в паре с гарнитурой это же находка просто.
Чтобы ты не чувствовал себя в игноре: лично я никаких упоминаний синтезаторов речи в сообществе не видел, хотя слышал были попытки адаптировать плеер для слепых. Это всё, что я знаю по этой теме (хотя я тут недавно, могу чего-то не знать).
Байт делал версию классического плеера для консоли, пожалуй её легче всего было бы прикрутить к синтезатору речи. В общем репозитории я исходный код не нашёл, видимо за ним обращаться к Байту.
newsash:
Aleks Versus:
можно и нужно убрать лишние циклы:
Тогда уж и лишние условия убрать. И ошибки вылечить, которые появились от убирания циклов.
Spoiler
VIEW !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! hour_plus = minut / 60 &! сколько полных часов прошло minut = minut mod 60 &! приводим минуты в нормальный вид (от 0 до 59) hour = hour + hour_plus &! прибавляем к текущему времени, сколько полных часов прошло ! подсчитываем голод и усталость: golod = golod - hour_plus son = son - hour_plus day_plus = hour / 24 &! сколько полных дней прошло hour = hour mod 24 &! приводим часы в норму (от 0 до 23) daystart = daystart + day_plus &! количество дней от начала игры week = (week + day_plus) mod 7 &! выставляем день недели if week = 0:Set $week = 'Воскресенье' &! Счёт идёт от 0. if week = 1:Set $week = 'Понедельник' if week = 2:Set $week = 'Вторник' if week = 3:Set $week = 'Среда' if week = 4:Set $week = 'Четверг' if week = 5:Set $week = 'Пятница' if week = 6:Set $week = 'Суббота' day = day - 1 &! Хак для нормальной работы в диапазоне от 1 до 30 day = day + day_plus &! увеличиваем количество текущих дней month_plus = day/30 day = day mod 30 month = month + month_plus day = day + 1 &! Хак для нормальной работы в диапазоне от 1 до 30 if month = 0:Set month = 1 if month = 13:Set month = 1&set year = year + 1 If month = 1:set $month = 'Январь' If month = 2:set $month = 'Февраль' If month = 3:set $month = 'Март' If month = 4:set $month = 'Апрель' If month = 5:set $month = 'Май' If month = 6:set $month = 'Июнь' If month = 7:set $month = 'Июль' If month = 8:set $month = 'Август' If month = 9:set $month = 'Сентябрь' If month = 10:set $month = 'Октябрь' If month = 11:set $month = 'Ноябрь' If month = 12:set $month = 'Декабрь' if minut < 10:set $nilmin = '0' if minut >= 10:set $nilmin = '' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!КОНЕЦ РАЧЕТА ВРЕМЕНИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!НАЧАЛО ОПИСАНИЯ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! if opisanie=0:'<center>Время <B><<hour>></B> часов <B><<$nilmin>><<minut>></B> минут. Сейчас <<day>> <<$month>> <<year>>года, <<$week>></center>'Ну вы сейчас научите. Обращение к этому коду идет при каждом действии. И блоки с циклами нужны для того, что бы туда вставлять проверки действий. Не все может быть кратным часам или минутам. Но так то код рабочий конечно.
vais, в коде что у тебя, еще не хватает некоторых элементов
Spoiler
if sec >= 60:
:loopsec
minut+= 1
sec-=60
!сюда можно втыкать действия происходящие раз в минуту
if sec >= 60:jump 'loopsec'
end
if minut >= 60:
:loopmin
hour+=1
minut-=60
!отслеживание сна и голода в этом блоке происходит раз в час
if Peremotka=0:
!действия в жизни, блокируется перемоткой, если например захочешь дату сдвинуть, например игрок провел в коме несколько недель, а лень высчитывать, какая дата должна быть.
son-=1
!вот тут проверяется потребление воды и еды. При входе в сон inSleep=1, при выходе из сна inSleep=0, для того что бы игрок не склеивал ласты во время сна.
if inSleep=0:energy-=1
if inSleep=0:water-=1
end
if minut >= 60:jump 'loopmin'
end
if hour >= 24:
:loop
day+=1
!daystart сколько дней прошло с начала игры
daystart+=1
!vidageday сколько дней прожил игрок, вынесено отдельно, потому что, некоторые игровые ситуации могут старить игрока быстрее, чем положено
vidageday+=1
week+=1
hour-=24
!сюда втыкаем действия которые должны произойти раз в сутки
if hour >= 24:jump 'loop'
end
!эта фигня считает месяцы 30 и 31 день, а не только 30
if month=1 or month=3 or month=5 or month=7 or month=8 or month10 or month=12:
!31
if day > 31:day-=31&month+=1
elseif month=2:
!28
if day > 28:day-=28&month+=1
elseif month=0:
month=1
if day > 31:day-=31&month+=1
elseif month=13:
month=1
if day > 31:day-=31&month+=1
else
!30
if day > 30:day-=30&month+=1
end
if month = 5 and day=12 and drmark=0:
!установка дня рождения
!и не забыть обнулить drmark на следующий день
drmark=1
age+=1
vidage+=1
end
if day = 0:day = 1
if week > 7:
:loopweek
week-=7
if week > 7:
jump 'loopweek'
end
end
if week=0 or week=8:week=1
if week = 1:Set $week = 'Понедельник'
if week = 2:Set $week = 'Вторник'
if week = 3:Set $week = 'Среда'
if week = 4:Set $week = 'Четверг'
if week = 5:Set $week = 'Пятница'
if week = 6:Set $week = 'Суббота'
if week = 7:Set $week = 'Воскресенье'
if month = 0:Set month = 1
if month = 13:Set month = 1
If month = 1:set $month = 'Января'
If month = 2:set $month = 'Февраля'
If month = 3:set $month = 'Марта'
If month = 4:set $month = 'Апреля'
If month = 5:set $month = 'Мая'
If month = 6:set $month = 'Июня'
If month = 7:set $month = 'Июля'
If month = 8:set $month = 'Августа'
If month = 9:set $month = 'Сентября'
If month = 10:set $month = 'Октября'
If month = 11:set $month = 'Ноября'
If month = 12:set $month = 'Декабря'
if minut < 10:set $nilmin = '0'
if minut >= 10:set $nilmin = ''
Вообще, это я написал этот код времени для своей игры. Конечно ньюсаш и алекс версус написали в итоге рабочий код. Внешне он короче, нет циклов. Но дело в том, что циклы в этом коде редко срабатывают, и вообще никак не нагружают систему. Так же в моем расчете времени заранее предусмотрены места куда можно втыкать все, что угодно и не парится совмещением с временными величинами. Я внутри этой структуры даже авто бои рассчитывал с привязкой ко времени. Эта же фигня сделана не просто как счетчик времени, она служит для полного отслеживания всего происходящего в игре.