Как сделать?
…
Bup0H,
Что я увидел… Достаточно жесткую структуру, что у меня выпали глаза, надеюсь в кугене всё иначе.
Структура как в посте #4330 =) ну уезжает все когда сюда вставляешь
Bup0H,
у тебя стоит cla перед тем, как вывести действие “уйти…”. Т.е. ты очищаешь список действий. Естественно, остаётся только одно действие. Если ты перенесёшь cla перед действием “разведать”, будут два действия: “разведать” и “посмотреть ещё”. Если же тебе нужно, чтобы действие “разведать” не появлялось, а появлялось первое действие “посмотреть ещё”, кое-что придётся переделать. В частности вытащить действия “посмотреть ещё” из действия “разведать” и определить переменную, по которой это действие будет появляться, как сделано с “уйти…”, например так:
Spoiler
if $args[0] = 'Баз1':
if args[1]=0:
act 'Разведать':
cla
'<center><img src="pic/baza1.jpg" ></center>'
minut += 5
stealth += 5
if stealth >= 20:
goto $curloc,$args[0],1
else
$marker_escape='уйти'
goto $curloc,$args[0],1
end
end
else
cla & ! очищаем список действий, хотя в принципе при переходе на локацию, он и так очистится
act 'Посмотреть еще':
*clr
cla
'<center><img src="pic/baza2.jpg" ></center>'
minut += 5
stealth +=5
if stealth >= 40:
act 'Посмотреть еще':
*clr
cla
'<center><img src="pic/baza3.jpg" ></center>'
minut += 5
stealth +=5
if stealth >= 60:
act 'Посмотреть еще':
*clr
cla
'<center><img src="pic/baza4.jpg" ></center>'
minut += 5
stealth +=5
if stealth >= 80:
act 'Посмотреть еще':
*clr
cla
'<center><img src="pic/baza5.jpg" ></center>'
minut += 5
stealth +=5
end
else
$marker_escape='уйти'
goto $curloc,$args[0],1
end
end
else
$marker_escape='уйти'
goto $curloc,$args[0],1
end
end
else
$marker_escape='уйти'
goto $curloc,$args[0],1
end
end
if $marker_escape='уйти':
act 'Уйти, меня могут заметить':
gt 'forest'
end
end
end
end
P.S.^ Чтобы отступы не сбивались, вкладывай код в теги код на форуме - кнопка код
. А если код длинный, то ещё и в спойлер.
Помогите разобраться с движением нпс, у меня все выглядит громоздко и не удобно, поскольку локаций очень много. это маленький пример кода. с локации двор. Смотрел пример с ричардом, вообще нечего не понял.
Spoiler
if week >=1 and week <=6:
if hour >=6 and hour < 7 and minute >=0 and minute <10:
*nl ‘<a href=“exec:GT ‘‘лис_лес’’”>Лисенок</a> направляется в лес’
elseif hour >=6 and hour < 7 and minute >=55:
*nl ‘<a href=“exec:GT ‘‘лис_дом’’”>Лисенок</a> направляется в дом’
end
end
и соответственно в каждой локации в зависимости от того что лис делает свои действия, в одной к примеру проверить что несет, в другой проследить… и т.д В ричарде непонятно то, что много лишнего (сильно путает) календарь и время у меня все на одной локации ‘время’
Это не ответ на ваш вопрос. Просто мне эти условия… не нравятся. Нет, в них нет ошибок. Просто не нравятся.
Смотрите сами.
[*] Переменная week может принимать значения от 1 до 7. Зачем тогда писать проверку week >= 1? Она всегда будет истинна. Проще записать одно условие: week <= 6 (человеческим языком: все дни недели, номер которых меньше либо равен 6). А если принять во внимание диапазон возможных значений week, то это выражение будет эквивалентно выражению week ! 7 (человеческим языком: не воскресенье).
[] Аналогичным образом выражение hour >=6 and hour < 7 эквивалентно выражению hour = 6. (Если не верите, то попробуйте найти другое *целое число, которое удовлетворит этому условию).
[*] Если у вас с кодом все в порядке, то minute никогда не будет отрицательным. Следовательно нет смысла городить проверку minute >= 0.
Spoiler
Если же у вас minute стало отрицательным, то вместо этого там должно стоять что-то подобное:
if minute < 0 : msg "Черт возьми, я индус, у меня минуты отрицательные!"
:)
Итак, ваш код чудесным образом сократился:
if week ! 7 and hour = 6:
if minute < 10:
*nl '<a href="exec:GT ''лис_лес''">Лисенок</a> направляется в лес'
elseif minute >= 55:
*nl '<a href="exec:GT ''лис_дом''">Нина</a> направляется в дом'
end
end
P.S. Когда вы используете код чужой игры всегда помните, что даже если игра работает, это не значит, что в ней идеальный код. Подходите к нему критически и включайте мозг.
спс что указал на ошибки, но вопрос был в другом. Я знаю что можно движение NPC прописать на одной локации с указанием где они будут в какой время, мне вот это нужно
А в чем проблема? Используйте $ONNEWLOC.
if $CURLOC = 'двор' and week ! 7 and hour = 6:
if minute < 10:
*nl '<a href="exec:GT ''лис_лес''">Лисенок</a> направляется в лес'
elseif minute >= 55:
*nl '<a href="exec:GT ''лис_дом''">Нина</a> направляется в дом'
end
end
Сделал, только проблема если на этой локации ждать, то НПС просто не уходит, а со временем и дублируется.
Все разобрался Спс
Подскажите, пожалуйста,как сделать так что-б локация была только одноразово посещаема ?
Или ,как сделать, что-б ,например, ключ можно было взять и использовать только один раз.
IF Ключ = 0:
'Старый, ржавый ключ Взять ключ?'
act 'Да':
Ключ = 1
ADDOBJ 'Ключ'
GOTO $CURLOC
end
end
act 'Нет': gt 'Зеркало'
ACT 'Странная дверь':
if Ключ = 1:
time += 1
DELOBJ 'Ключ'
gs 'calendar'
GT 'SD'
else
*nl 'Дверь заперта- надо найти ключ, что-б ее открыть.'
END
end
ключ=0
ACT 'Открыть дверь':
GT 'sm'
Но, так как, ключ снова =0 то его опять можно взять из зеркала.Это можно как-то пофиксить ?
Слишком громоздко получается. Хотелось бы покороче, т.к и так хотел пару If добавть а тут вообще лес получается. Попробую что нить сам покумекать(
Bup0H,
покумекай.)) Это правильно. Код действительно можно сократить, и в разы.
skunsss,
встрой проверку в само действие открывания двери. Т.е. сейчас ты проверяешь только наличие ключа, но это условие можно вложить в другое условие:
ACT 'Странная дверь':
if был_за_странной_дверью = 0:
if Ключ = 1:
time += 1
DELOBJ 'Ключ'
gs 'calendar'
GT 'SD'
else
*nl 'Дверь заперта- надо найти ключ, что-б ее открыть.'
END
else
"Дверь расползается под пальцами, превращаясь в плоский набросок."
end
end
а на локации “SD” пишешь:
был_за_странной_дверью = 1
Хочу сделать большую вариантность (хотя еще мало что умею). Ниже написанный код вроде бы работает вполне корректно. Но по структуре видно (про Pic1), что я его не грамотно написал, да и рандомность Pic2 и Pic3 после If A > 800 я ничего не придумал лучше. Как можно его изменить более правильно, при этом не увеличивая в размерах сильно?
B = rand (0,100)
if B => 50 and D = 1:
if A < 500:
'<center><img src="pic1.jpg" ></center>'
end
if A >= 500 and A < 800:
'<center><img src="pic2.jpg" ></center>'
end
if A >= 800:
C = rand (1,100)
if C <= 30:
'<center><img src="pic2.jpg" ></center>'
else
'<center><img src="pic3.jpg" ></center>'
end
end
else
'<center><img src="pic1.jpg" ></center>'
end
act 'Уйти':
gt '...'
end
Народ помогите новичку. Как сделать в бою что бы ход передавался?
ТО есть что бы ты ходишь одним персонажем(например воином). Сделал действие(например атаковал мечём) Потом ход(то есть панель вариантов действий меняется полностью) переходит к другому персонажу(например к Лекарю) уже им действуешь(например лечишь воина) и только потом отдаёшь ход противнику(панель действий меняется и появляется только одна кнопка “окончить ход”) и только после этого враг действует своими действиями?
вот код стандарной боёвки
if здоровье<=0:
'Вас убил <<$имя_врага>>.'
act 'Конец':gt 'смерть'
else
act 'Атаковать':
атака_текущая = атака+rand(0,4)
'Вы нанесли <<$имя_врага>> урон <<атака_текущая>>.'
здоровье_врага=здоровье_врага-атака_текущая
if здоровье_врага<=0:
'Вы убили <<$имя_врага>>.'
delact $selact
act 'Далее':gt $next
exit
end
атака_врага_текущая = атака_врага+rand(0,4)
'<<$имя_врага>> нанёс урон <<атака_врага_текущая>>.'
здоровье=здоровье-атака_врага_текущая
xgt $curloc
end
end
Меня смущяет xgt $curloc видимо именно он возвращяет всё к изначальному параметру “Атаковать”.
Bup0H, ловите и разбирайтесь в логике :)
Nimage = 1
if rand (0,-1) and D = 1:
if A >= 500 and A < 800:
Nimage = 2
elseif A >= 800:
if rand (1,10) <= 3:
Nimage = 2
else
Nimage = 3
end
end
end
'<center><img src="pic<<Nimage>>.jpg" ></center>'
А, по-хорошему, проверить правильность кода нет возможности, так как вы не указали что вы хотели получить. Желаемый конечный результат не известен. А строить догадки, что там за переменные A и D и каким образом они получаются мне лень.
Darvin432, пример ваш предполагает бой одного героя с одним противником. Точка. Пытаться его переделать под другое количество героев бессмысленно. Вы только усложните себе жизнь. Надо писать с нуля. Особенно, если вы хотите, чтобы состав героев менялся (другой напарник, не один, а больше напарников), то этот примитивный код вам не поможет.