Как сделать?
…
Нет у меня намного проще задумка, у меня всего до 10 модулей и они по отдельности влияют на состояние симуляции. Будут несколько факторов аварийной ситуации а так же множители переменных факторов по разному влияющие на каждый модуль а так же на субъекта.
То есть это не целая общая переменная HP и MHP (max_hp) а отдельные показатели как module_hp[], mod_capacity[] и подобные переменные и если damage_factor[] превысит mod_capacity[] то модуль станет разрушаться.
Я это все рассказываю наглядно для понимания, у меня попроще организация. Но мне к сожалению придется прописывать условия под каждый массив.
Прошу прощения за навязчивость, заинтересовало.
Модуль 7 стоял под таким же индексом, что и 6.
Spoiler
! Решил проверить ваш код. Вот без этого никуда:
x=0
: mark
modulehp[x]=modulemhp[x] &! производим назначение для mpdulehp из максимального.
If x<7: x+=1 & jump 'mark'
! Тут чисто для отображения
x=0
: marker
*nl $module[x]+':['+$modstat[x]+']'
If x<7: x+=1 & jump 'marker'
Далее, стоит сменить логику отображения статуса.
Из:
Spoiler
if modulehp[0]=modulemhp[0]: $modstat[0]='<font color=rgb(100,250,100)>Работает</font>'
if modulehp[0]<=modulemhp[0]/2: $modstat[0]='<font color=rgb(190,160,80)>Поврежден</font>'
if modulehp[0]=0: $modstat[0]='<font color=rgb(250,70,70)>Отсутствует</font>'
В:
Spoiler
! -------- локация счетчик -------
$modstat_norm = '<font color=rgb(100,250,100)>Работает</font>'
$modstat_cry = '<font color=rgb(190,160,80)>Поврежден</font>'
$modstat_destr = '<font color=rgb(250,70,70)>Отсутствует</font>'
if modulehp[0]=modulemhp[0]: $modstat[0]= $modstat_norm
if modulehp[0]<=modulemhp[0]/2: $modstat[0]= $modstat_cry
if modulehp[0]=0: $modstat[0]= $modstat_destr
Так же, можно добавить в локацию-счетчик цикл. Тогда это будет так:
Spoiler
! -------- локация счетчик -------
$modstat_norm = '<font color=rgb(100,250,100)>Работает</font>'
$modstat_cry = '<font color=rgb(190,160,80)>Поврежден</font>'
$modstat_destr = '<font color=rgb(250,70,70)>Отсутствует</font>'
x=0
:mark_cy
if modulehp[x]=modulemhp[x]: $modstat[x]= $modstat_norm
if modulehp[x]<=modulemhp[x]/2: $modstat[x]= $modstat_cry
If modulehp[x]<0: modulehp[x]=0
if modulehp[x]=0: $modstat[x]= $modstat_destr
if x<7: x+=1 & jump 'mark_cy'
Надеюсь, смог помочь в сокращении кода.
Базы данных, увы, как и говорил - только руками.
С уважением,
HronoS.
Дамир Белялов,
Чтоб не путаться с индексами можно инициализировать массив без него - массив[]. Тогда ты сможешь перемещать код по строкам для более удобного расположения без необходимости перебивать индексы и вспоминать, какой там был последний. Однако, тут возникают другие неудобства и подвохи. Потому надо применять с должной осмотрительностью.
ОООО спасибо, вот оно походу то самое решение что я искал!
В остальном примеры кода увлекательные
Дамир Белялов,
А то что я выше давал не ок?
Вот я и говорю тебе за это спасибо
a=0
a_max=arrsize’$module’
:mark
if modulehp[a]=modulemhp[a]: $modstat[a]=‘<font color=rgb(100,250,100)>Работает</font>’
if modulehp[a]<=modulemhp[a]/2: $modstat[a]=‘<font color=rgb(190,160,80)>Поврежден</font>’
if modulehp[a]=0: $modstat[a]=‘<font color=rgb(250,70,70)>Отсутствует</font>’
a+=1
if a<a_max:jump’mark’
оно работает!
Уважаемые знатоки, вопрос - необходимо прописать двумя способами рандомные события на разных локациях, причем пул событий зависит от определенного значения переменной.
Способ 1, запускаемое рандомное событие, через ссылку в выводе текста.
Стандартное описание локации, содержащее ссылку <a href=‘exec:goto ““СлучайноеСобытие””’> Событие</a></b>””.
Тут я реализовал это с помощью перехода на отдельную локацию СлучайноеСобытие, в которой прописана рандомизация события в зависимости от переменной:
If Слава<=20: Ивент = rand (1,2)
If Слава<=40: Ивент = rand (1,4)
If Слава<=60: Ивент = rand (1,6)
If Слава<=80: Ивент = rand (1,8)
If Слава<=100: Ивент = rand (1,10)
А затем уже, в зависимости от значения переменной Ивент, будет происходить какое либо событие, с последующим возращением в исходную локацию. *Соответственно вопрос по этому способу - 1. Есть ли возможность сделать это как то компактнее? 2. Возможно ли прописать рандомизацию в зависимости от переменной, непосредственно в ссылке <a href=‘exec:goto ““СлучайноеСобытие””’> Событие</a></b>””?
[b]Способ 2,* Способ описанный выше подразумевает что случайное событие, происходит в локации со 100% вероятностью, а рандомится только тип события. (Для этого и сделано через ссылку, что бы не было замкнутого круга ивент-возвращение-ивент). В способе 2, необходимо сделать лишь ШАНС на возникновение какого либо события, БЕЗ ПЕРЕХОДА на другую локацию.
Реализовано это таким способом. В локации в которой происходит событие, через команду rand (1,2) (Или больше, в зависимости от необходимого шанса события), генерируется возможность возникновения события, с последующей проверкой значения переменной, и последующим рандомизированием выпавшего ивента. Код:
Ивент2 = rand (1,2)
If Ивент2=1:
!И вот тут затык. Каким образом тут прописать проверку на значение переменной, для последующей рандомизации? (Если не понятно о чем я, см способ 1).
Соответственно вопрос- каким образом можно проще или лучше, реализовать мою идею? Либо продолжить то, что начал я?
Заранее спасибо за ответы
Piksha,
Я не понял, зачем нужна кликабельная ссылка.
Просто gs’СлучайноеСобытие’
И в локации СлучайноеСобытие убери переход.
Если ссылка все-таки нужна, замени goto на gs
Для второго варианта
Ивент2 = rand (1,2)
If Ивент2=1:gs'СлучайноеСобытие'
Если у тебя вероятность возникновения случайного события зависит от локации, то запиши в локации СлучайноеСобытие дополнительные условия.
if $curloc='НазваниеЛокации':Ивент2=1
if $curloc='НазваниеЛокации1':Ивент2 = rand (1,2)
if Ивент2=1:
If Слава<=20: Ивент = rand (1,2)
If Слава<=40: Ивент = rand (1,4)
If Слава<=60: Ивент = rand (1,6)
If Слава<=80: Ивент = rand (1,8)
If Слава<=100: Ивент = rand (1,10)
end
Тогда будет достаточно только перехода gs’СлучайноеСобытие’.
Сдается мне, что ты знаки < > перепутал ибо в текущем варианте последнее условие будет всегда выполняться.
Спасибо за ответ. Кликабельная ссылка нужна, что бы запускать ивент со 100% вероятностью, но только вручную. Теперь новые вопросы - если использовать gs, то это идеально для мелких ивентов - типа какого либо небольшого события и тд. В моем же случае - необходимо сделать ступенчатое событие с возможностями выбора, и тут упираюсь в уже описанную локацию с действиями. Решил проблему гениально - использовал gs для обработки отдельной локации с ивентом, перед этим очистив список действий и описание локации с которой стартует ивент (cla *clr)
Знаки больше меньше пофиксил, ошибка была.
Прошу обьяснить ваш кусок кода
if $curloc='НазваниеЛокации':Ивент2=1
if $curloc='НазваниеЛокации1':Ивент2 = rand (1,2)
Я так понимаю тут вы в локации, к которой обращается gs задаете условие, что если обращение осуществлено с локации “Название локации” устанавливается значение переменной Ивент2=1 и рандомизация возможности ивента не осуществляется.
В случае, если с локации НазваниеЛокации1 (Нужная локация) То происходит розыгрыш возможности ивента. Я правильно понял?
Т.е вы по сути, установили общий механизм ивентов для нескольких локаций, с которых теперь можно прописать обращение gs.
Piksha:
Т.е вы по сути, установили общий механизм ивентов для нескольких локаций, с которых теперь можно прописать обращение gs.
Ты просил проще и лучше.
Может так получше? Может изначально хотелось этого?
! чем больше славы тем больше ивентов становится доступно персонажу
if Ивент2=1:
If Слава<=20: Ивент = rand (1,2)
If Слава>20 and Слава<=40: Ивент = rand (1,4)
If Слава>40 and Слава<=60: Ивент = rand (1,6)
If Слава>60 and Слава<=80: Ивент = rand (1,8)
If Слава>80 and Слава<=100: Ивент = rand (1,10)
end
Снова возвращаюсь с рубрикой глупых вопросов. Необходимо прописать чуть более заковыристый возврат на предыдущую локацию. Описываю ситуацию:
Есть Локация 1 и Локация 2 в которой прописан следующий код:
Ивент=rand(1,2)
If Ивент=1:
gt "Ивент"
end
Это механизм создания случайного ивента при переходе между локациями. В случае возникновения ивента, он отсылает на новую локацию “Ивент”, с которого необходимо сделать возврат на Локацию 2.. Для этого был прописан следующий код:
На стартовой локации:
$onnewloc = "ОNNEWLOC"
На локации ОNNEWLOC:
$back_loc=$current_loc
$current_loc=$curloc
И в локации Ивент, с которой осуществляется возврат:
act "Вернуться":
goto $back_loc
end
В этом случае - возврат производится на Локацию 1, а не 2. (Видимо из за gt).
Прописал не как переход на локацию Ивент, а как её обработку (gs), с чисткой описания и списка действий.
Для того что бы все нормально чистилось, код рандомизации ивента поместил в конец локации.
Вопрос: Я конечно наколхозил как мог, и все как бы работает, но что то мне подсказывает что в будущем мне это аукнется, и это решение уровня “замотать изолентой и забыть”. Реквестирую способы изящно решить данную проблему.
ЗЫ: Парни, пожалуйста, если пишите что то сложнее камня и колеса (в масштабах qsp), особенно массивы, и хтмл, пожалуйста объясняйте попроще. Я вообще ветеринар-провизор, и в вашу отрасль не ногой, но все равно спасибо за то что помогаете
ЗЫ 2: Механизм ивентов простой как гайка с шурупом, но это максимум на что хватило моих знаний и воображения. Если вы имеете идеи, либо реализовывали как то данную вещь в своих проектах - я буду очень рад почитать ваши идеи!
Piksha, на локации ОNNEWLOC ты сохраняешь в переменные текущую локацию и предыдущую. Если ты делаешь переход с локации на локацию Б через gt, то А будет прошлой локацией, а Б текущей, $back_loc=‘А’, $current_loc=‘Б’. Если через gs, то ничего не поменяется, $current_loc=‘А’.
Если нужно запомнить 3 прошлых локации, то нужно в ОNNEWLOC добавить еще переменную.
Это нормальное решение. Только определись, нужно тебе gt или gs.
я совсем запутался и даже не понимаю что ему нужно. вот ты описал свою задачу в словах, напиши ее в коде.
Вот есть локация генератора ивентов, вот есть рандом, если выпадает ивент то просто вернись на задуманную тобой локацию, что сложного? Тебе нужно сохранить предыдущую локацию и текущую локацию? тогда перед переходом на другую локацию пиши:
act'перейти на другую локацию': $old_loc=$curloc & gt'Event_rand'
Если в генераторе ивентов надо будет вернуться обратно то просто пиши следующее:
Ивент=rand(1,2)
If Ивент=1: gt "Ивент"
if Ивент=2: gt $old_loc
Я не понимаю чего ты хочешь! Изъяснись доходчиво
Кто может подсказать в чем отличие отображения характеристик?
*pl'Здоровье: <<>>/<<>>'
*pl'Здоровье: '+str(hp)+'/'+str(mhp)