RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2425156 views

Aleks Versus Moderator 25.01.2016 16:12 (10 years ago)

DeathSpace,
что мешает увеличить все значения в сто раз и отнимать не 0.05 от значения, а 5, а при выводе на экран делить значения на 100?

здоровье=10000
!Выводим на экран
i=здоровье mod 100
if len(str(i))=1: $i='0'+str(i) else $i=str(i)
*P "<<здоровье/100>>.<<$i>>"

Мне нравится вот такая формула для вычисления урона, наносимого герою:

usherb = uron - (uron*block)/(uron+block)

, где usherb - конечный урон, который вычитается из здоровья героя, uron - значение текущей (силы) атаки монстра, block - сумма защиты против атаки (в т.ч. броня).

Aleks Versus,
Все спасибо,сделал

Ребят,мне нужно чтобы мой qsp файл сразу открывался во весь экран а не окошком т.е. чтобы мне не нужно было нажимать ALT+ENTER.
Можно так сделать?

DeathSpace,
можно в Навигаторе.

Флаг “startFullscreen” в файле настроек.

Доброго времени суток.

Не могу найти на форуме следующие. Как сделать что бы НПС передвигался по локациям? Ну допустим с 13 по 16 часов он в таверне, с 16 по 21 в кузнице за работой, с 21 по 06 он спит и лучше его не трогать, а то побьёт :-) Я понимаю что где то на форуме оно есть, может кто ткнёт пальцем? Спасибо.

Aleks Versus Moderator 27.01.2016 07:22 (10 years ago)

Lexon,
это достаточно ёмкое дело. Самый простой способ такой:
1. Создаёшь систему времени. Здесь на форуме полно информации, как это делается. Начиная с раздела “разработчикам” и заканчивая темами про Юлианский “календарь”.
2. Далее, создаёшь для персонажа какую-нибудь переменную, в которую помещаешь название локации, в которой он находится по-умолчанию, так сказать.

$сэр_личард_рвиное_сердце = 'Таверна'

3. Теперь тебе нужно написать код, который будет сравнивать текущее время (см. пункт 1) с конкретным значением и менять расположение героя, перезаписывая в эту переменную названия тех локаций, где он должен находиться. Пример:

if hour>12 and hour<17:
   $сэр_личард_рвиное_сердце = 'Таверна'
elseif hour>16 and hour<21:
   $сэр_личард_рвиное_сердце = 'Кузница'
elseif (hour>20 and hour<24) or (hour>-1 and hour<7):
   $сэр_личард_рвиное_сердце = 'Спит'
else
   $сэр_личард_рвиное_сердце = 'Неизвестно где'
end

Этот код должен выполняться в тот момент, когда изменяется текущее время в игре.
4. При посещении нужной локации, сравниваешь значение в $сэр_личард_рвиное_сердце и имя текущей локации и выполняешь необходимые процедуры в зависимости от результата.

В одной из игр, которые есть на сайте, мне попадалась система, где персонаж перемещался. Но я не помню, что это была за игра. Попробуй порыться в поиске по слову “календарь”.

Я быстро состругал из вашего примера QSP файлик, Сэр Личард отказывается двигаться у меня, чую что я что то не учёл, но не пойму что, вы не посмотрите? Спасибо.

primer.qsp

Есть пара вопросов.

slot=slot_num[npc]
memory['<<npc>>,<<slot>>,<<X[npc]>>,<<Y[npc]>>,<<Z[npc]>>,<<R[npc]>>']=total_minut

Есть массив такого типа. Это память нпс. Запоминает в какое время последний раз был на локации. Так вот вопрос первый, так как нпс около 2000-2500 и этот массив постоянно растет в какой момент будет слишком большой индекс массива, как тут хотя бы приблизительно прикинуть? В формате X[npc] понятно что когда npc станет равным 2147483647, то будет ошибка, а тут как прикинуть если индекс собирается из массивов и переменных.

Второй вопрос, а можно ли почисить многомерный массив лишь для определенного индекса. Например удалить все что относится к npc=175?

Lexon:

Я быстро состругал из вашего примера QSP файлик, Сэр Личард отказывается двигаться у меня, чую что я что то не учёл, но не пойму что, вы не посмотрите? Спасибо.

primer.qsp

Ну это элементарно. Вот твоя локация таверна

act "Идём на улицу":
time += 5 
gs 'календарь' 
GT "улица"
end


act "Выпить чарочку":
time += 60 
gs 'календарь' 
GT curloc
end

Можешь мне ответить, в каком месте тут у тебя идет проверка одна и та же локация у нпс и героя? И где вообще отображается, что нпс на одной локе с героем.

Таки надо хоть как то проверять.

if $curloc=$сэр_личард_рвиное_сердце:'Тут Ричард львиное сердце.'

Таки да, я проверял точно так же, но у меня почему то не появлялся мой кузнец.

if $curloc=$Кузнец_Андор: ‘Вы замечаете в таверне кузнеца’

Я быстро настругал чистый пример без (Если), что бы показали чего не хватает в нём, может я не так задаю примеры.
Вот я подставляю вашу строчку, и не появляется кузнец, вы можете в пример воткнуть и прикрепить файл,я уже здесь залезу.

Спасибо.

Lexon:

Таки да, я проверял точно так же, но у меня почему то не появлялся мой кузнец.

if $curloc=$Кузнец_Андор: ‘Вы замечаете в таверне кузнеца’

Я быстро настругал чистый пример без (Если), что бы показали чего не хватает в нём, может я не так задаю примеры.
Вот я подставляю вашу строчку, и не появляется кузнец, вы можете в пример воткнуть и прикрепить файл,я уже здесь залезу.

Спасибо.

Ну вот тебе твой пример.
primer.qsp
И кузнец и Ричард бродят куда положено и к ним можно обратится.

Вообще, ты меня конечно извини, но у тебя как то все через задницу сделано. Объясняю. Нет никаких нпс. Ты всего лишь сравниваешь текстовую переменную, с названием локации на которой находится герой. Если название этой переменной совпадает, то мы должны как то отобразить нпс, и как то войти в диалог, как отобразить и начать разговор я тебе сделал. А теперь ты ответь на вопрос, зачем делать локации спит и неизвестно где, для нпс, если можно тупо обнулить переменную перемещения нпс, ты же никогда не попадешь на локацию у которой нет названия.

Aleks Versus Moderator 27.01.2016 09:29 (10 years ago)

DaGrozz,
напиши игру с таким кодом:

! начало
$massiv['текстовый индекс']='Какой-то текст'
$massiv[0]

И посмотри что получится.
Почитай тему об ограничениях QSP. Я плохо помню, чем ограничен размер массива. Знаю только, что значение переменной не может превышать определённое число.

Выходом из этой ситуации может послужить разгрузка индекса. Переведи часть индекса в название переменной и генерируй переменные динамически.

dynamic "memory_<<npc>>['<<slot>>,<<X[npc]>>,<<Y[npc]>>,<<Z[npc]>>,<<R[npc]>>']=total_minut "

DaGrozz:

Второй вопрос, а можно ли почисить многомерный массив лишь для определенного индекса. Например удалить все что относится к npc=175?

Боюсь только перебором. Есть способ удаления элемента по текстовому индексу.

memory['текстовый индекс']=9999999 & ! если ты уверен, что в массиве такое значение больше нигде не встретится
killvar 'memory',arrpos('memory',9999999)

ооо, спасибо выручил нереально! Я теперь понял что я прощёлкал и почему не появлялись, перенёс в свою игруху.

Вот что я ещё хотел спросить, вот у тебя ($loc=$curloc), Я в некоторых играх видел $loc=1, ну то есть переменную Локация в как бы номеруют, есть в этом смысл или нет?

Локации спит и неизвестно где я сделал для диалога с Aleks’ом Versus’ом, что бы как бы быть на одной волне, у меня таких локаций нет. Чуть выше мой вопрос

Не могу найти на форуме следующие. Как сделать что бы НПС передвигался по локациям? Ну допустим с 13 по 16 часов он в таверне, с 16 по 21 в кузнице за работой, с 21 по 06 он спит и лучше его не трогать, а то побьёт :-) Я понимаю что где то на форуме оно есть, может кто ткнёт пальцем? Спасибо.

Lexon:

Вот что я ещё хотел спросить, вот у тебя ($loc=$curloc), Я в некоторых играх видел $loc=1, ну то есть переменную Локация в как бы номеруют, есть в этом смысл или нет?

$loc=$curloc это ты запоминаешь в переменной $loc название локации, для того, что бы ты мог выйти из диалога. Это самый легкий способ если нпс могут перемещаться. А $loc=1 не имеет никаого смысла, так как переменная текстовая, а ты ей число задаешь. Вообще смысла нумеровать локации не особенно много, все можно сделать через названия.

Не могу найти на форуме следующие. Как сделать что бы НПС передвигался по локациям? Ну допустим с 13 по 16 часов он в таверне, с 16 по 21 в кузнице за работой, с 21 по 06 он спит и лучше его не трогать, а то побьёт :-) Я понимаю что где то на форуме оно есть, может кто ткнёт пальцем? Спасибо.

Ну так у тебя Ричард двигается по локациям, что тебе еще надо? Все решается как ты задашь условия. Вот для кузнеца например.
Вот чистое перемещение.

$Кузнец_Андор=''
if hour>=16 and hour<21:$Кузнец_Андор='Кузница'
if hour>=13 and hour<16:$Кузнец_Андор='Таверна'

Если тебе надо, что бы у нпс была разная реакция в разное время и в разном месте, то это надо прописывать уже в коде нпс. Проще показать, чем объяснить. Сделал для кузнеца.

primer2.qsp

Log in or Register to post comments.