Рейтинг темы:
  • Голосов: 0 - Средняя оценка: 0. Если голосов меньше 5 оценка не показывается.
  • 1
  • 2
  • 3
  • 4
  • 5
Вопрос по условиям срабатывания кода
#1
Что то голова не варит... может кто на свежую голову подскажет. в общем, есть код:
Код:
    <<if $Белье[0] eq 2 and $Белье[1] neq 2 and $Белье[2] neq 2 and $Белье[3] neq 2>>
    <<elseif $Белье[0] eq 2 and $Белье[1] eq 2 and $Белье[2] neq 2 and $Белье[3] neq 2>>
    <<elseif $Белье[0] eq 2 and $Белье[1] neq 2 and $Белье[2] eq 2 and $Белье[3] neq 2>>
    <<elseif $Белье[0] eq 2 and $Белье[1] eq 2 and $Белье[2] eq 2 and $Белье[3] neq 2>>

    <<elseif $Белье[0] eq 2 and $Белье[1] neq 2 and $Белье[2] neq 2 and $Белье[3] eq 2>>
    <<elseif $Белье[0] eq 2 and $Белье[1] eq 2 and $Белье[2] neq 2 and $Белье[3] eq 2>>
    <<elseif $Белье[0] eq 2 and $Белье[1] neq 2 and $Белье[2] eq 2 and $Белье[3] eq 2>>
    <<endif>>
он будет работать, только текст добавить. но он мне не нравится. однако есть сомнения в том, что простой вариант будет одежду отображать корректно:
Код:
    <<if $Белье[0] eq 2>>
    <<elseif $Белье[1] eq 2>>
    <<elseif $Белье[2] eq 2>>
    <<elseif $Белье[3] eq 2>>
    <<endif>>
не хочется, знаете ли, что бы при наличии более чем одного варианта одежды, на NPC отображались они все, а чего то такое у меня бывало помоему, давно правда. тем более что поначалу у неписи только 1 вариант, нулевой, а остальные дарятся, причем принятие подарка зависит только от разврата, и менять ситуацию на невозможность подарить более развратную вещь, не подарив менее... ну это так себе решение, к которому точно не прибегу. тем не менее, ладно тут 4 варианта, а если их 10, и перс будет ночью "решать", что одеть на следующий день? я ж neq и eq утону, да и длинна строки станет такая, что чтение кода станет для меня пыткой.


Пока что получается вот такая хренотень:
Свёрнутый текст:
Код:
#Белье днем и ночью:
<<if $время neq 4 and $разврат[1] lt 35>>
    <<if$Белье[1] eq 2>>
    <<set $красота_Ж[0] = $красота_Ж[0]+2>>
    <<endif>>
<<elseif $время neq 4 and ($разврат[1] gte 35 and $разврат[1] lt 75)>>
    #Кружевное
    <<if $Белье[1] eq 2 and $Белье[2] neq 2>>
    <<set $красота_Ж[0] = $красота_Ж[0]+2>>
    #Стринги
    <<elseif $Белье[1] neq 2 and $Белье[2] eq 2>>
    <<set $красота_Ж[0] = $красота_Ж[0]+3>>
    #Стринги
    <<elseif Белье[1] eq 2 and $Белье[2] eq 2>>
    <<set $красота_Ж[0] = $красота_Ж[0]+3>>
    <<endif>>
<<elseif $время neq 4 and $разврат[1] gte 75>>
    #Кружевное
    <<if $Белье[1] eq 2 and $Белье[2] neq 2 and $Белье[3] neq 2>>
    <<set $красота_Ж[0] = $красота_Ж[0]+2>>
    #Стринги
    <<elseif $Белье[1] neq 2 and $Белье[2] eq 2 and $Белье[3] neq 2>>
    <<set $красота_Ж[0] = $красота_Ж[0]+3>>
    #Стринги
    <<elseif $Белье[1] eq 2 and $Белье[2] eq 2 and $Белье[3] neq 2>>
    <<set $красота_Ж[0] = $красота_Ж[0]+3>>
    #без белья
    <<elseif $Белье[1] neq 2 and $Белье[2] neq 2 and $Белье[3] eq 2>>
    <<set $красота_Ж[0] = $красота_Ж[0]+4>>
    #без белья
    <<elseif $Белье[1] eq 2 and $Белье[2] neq 2 and $Белье[3] eq 2>>
    <<set $красота_Ж[0] = $красота_Ж[0]+4>>
    #без белья
    <<elseif $Белье[1] neq 2 and $Белье[2] eq 2 and $Белье[3] eq 2>>
    <<set $красота_Ж[0] = $красота_Ж[0]+4>>
    <<endif>>
<<elseif $время eq 4 and $разврат[1] lt 35>>
    <<if $Белье[0] eq 2 and $Белье[1] neq 2>>
    простенькие бюстгальтер и трусы.
    <<elseif $Белье[0] eq 2 and $Белье[1] eq 2>>
    <<set $красота_Ж[0] = 10>>
    стильные кружевные бюстгальтер и трусы
    <<endif>>
<<elseif $время eq 4 and ($разврат[1] gte 35 and $разврат[1] lt 75)>>
    <<if $Белье[0] eq 2 and $Белье[1] neq 2 and $Белье[2] neq 2>>
    простенькие бюстгальтер и трусы.
    <<elseif $Белье[0] eq 2 and $Белье[1] eq 2 and $Белье[2] neq 2>>
    <<set $красота_Ж[0] = 10>>
    стильные кружевные бюстгальтер и трусы
    <<elseif $Белье[0] eq 2 and $Белье[1] neq 2 and $Белье[2] eq 2>>
    <<set $красота_Ж[0] = 20>>
    стильный бюстгальтер, сквозь кружева которого просвечивают соски, и маленькие стринги, полностью открывающие попу.
    <<elseif $Белье[0] eq 2 and $Белье[1] eq 2 and $Белье[2] eq 2>>
    <<set $красота_Ж[0] = 20>>
    стильный бюстгальтер, сквозь кружева которого просвечивают соски, и маленькие стринги, полностью открывающие попу.
    <<endif>>
<<elseif $время eq 4 and $разврат[1] gte 75>>
    <<if $Белье[0] eq 2 and $Белье[1] neq 2 and $Белье[2] neq 2 and $Белье[3] neq 2>>
    простенькие бюстгальтер и трусы.
    <<elseif $Белье[0] eq 2 and $Белье[1] eq 2 and $Белье[2] neq 2 and $Белье[3] neq 2>>
    <<set $красота_Ж[0] = 10>>
    стильные кружевные бюстгальтер и трусы
    <<elseif $Белье[0] eq 2 and $Белье[1] neq 2 and $Белье[2] eq 2 and $Белье[3] neq 2>>
    <<set $красота_Ж[0] = 20>>
    стильный бюстгальтер, сквозь кружева которого просвечивают соски, и маленькие стринги, полностью открывающие попу.
    <<elseif $Белье[0] eq 2 and $Белье[1] eq 2 and $Белье[2] eq 2 and $Белье[3] neq 2>>
    <<set $красота_Ж[0] = 20>>
    стильный бюстгальтер, сквозь кружева которого просвечивают соски, и маленькие стринги, полностью открывающие попу.
    <<elseif $Белье[0] eq 2 and $Белье[1] neq 2 and $Белье[2] neq 2 and $Белье[3] eq 2>>
    <<set $красота_Ж[0] = 30>>
    не надето ничего. Девушка полностью голая.
    <<elseif $Белье[0] eq 2 and $Белье[1] eq 2 and $Белье[2] neq 2 and $Белье[3] eq 2>>
    <<set $красота_Ж[0] = 30>>
    не надето ничего. Девушка полностью голая.
    <<elseif $Белье[0] eq 2 and $Белье[1] neq 2 and $Белье[2] eq 2 and $Белье[3] eq 2>>
    <<set $красота_Ж[0] = 30>>
    не надето ничего. Девушка полностью голая.
    <<endif>>
<<endif>>
Есть ли варианты оптимизировать, но вместе с тем что бы хорошо читалось?

 
Однако, здравствуйте.
Ответить
#2
Что это за язык, если не секрет?

 
Ответить
#3
(10.10.2019, 19:05)bf318dad писал(а): Что это за язык, если не секрет?
Движок AXMA Story Maker 2.6. а уж какой там язык... джава скрипт мелькает в разделе "функции" а так не знаю, нигде не написано.

 
Однако, здравствуйте.
Ответить
#4
@d626527c, Что ты хочешь по итогу сделать? (я понял, что оптимизировать код и сделать его более читабельным, но я подразумеваю цель твоего алгоритма)
Чтобы твои НПС выбирали что одеть?

 
Ответить
#5
(10.10.2019, 20:27)bf318dad писал(а): Чтобы твои НПС выбирали что одеть?
не совсем. этот код проигрывается в параграфе неписи, когда игрок с ним взаимодействует, т.к. от уровня красоты зависит доступность действий общения и флирта. во что одет персонаж - зависит от наличия белья, разврата, времени суток и локации, на которой его встретил игрок. ночью (время=4) это только комната, в которой непись спит, и потому имя локации не указано - нет смысла, т.к. само наличие персонажа на локации определяется в другом параграфе.
сейчас массив белья - 4 варианта: простое, кружевное, стринги, без белья.
пришлось отказаться от пижамы, первоначально было: пижама, простое, кружевное, стринги, без белья.
Можно добавить: эротическое белье, белье рабыни, белье госпожи - в зависимости от доминантности и возбуждения неписи (то есть еще 2 условия, плюс к тем же времени, разврату, наличию конкретного белья). это еще больше увеличит, усложнит текущий код. А мне этого не надо.
мелькают мыслишки о функциях, применяемых к массиву и использовании цикла, но они пока еще не оформились. учитывая что массив одномерный, затык. был бы многомерный, было бы наверно проще, т.к. одежде можно было бы и свойства придать, но версия 2.6 не умеет в многомерность (зато абсолютно бесплатная).
можно в принципе оказаться от массива "белье" и прописать каждый из видов как отдельный массив, в который загнать наличие, порог разврата... еще не пробовал, но что то и этот вариант мне не нравится в первом приближении.
можно конечно на твайн или  QSP перейти, но там нет некоторых удобных штук, которые ускоряют написание и которые есть в аксме. тоже не вариант пока что.

 
Однако, здравствуйте.
Ответить
#6
@d626527c, Мне в голову приходит что-то такое:
Код:
<<set $i = 0>>
<<loop 3>>
    <<if $i gt 2>>
        <<if $Белье[$i-1] eq 2 and $Белье[$i] neq 2>>
    <<else>>
        <<if $Белье[$i] eq 2 and $Белье[$i+1] neq 2>>
    <<endif>>
    <<set $i++>>
<<endloop>>

А так, попробуй абстрагироваться от кода и просто описать, чего ты хочешь добиться, а-ля:
"Я хочу, чтобы персонажи определяли какую им одежду сегодня выбрать. Что им вовсе не одевать, а что обязательно должно быть на их теле". Желательно кратко и максимум по делу smile

 
Ответить
#7
@4d5da950, чего то я не вдупляю. в $Белье[] могут быть только цифры [0] [1] и т.д. эти цифры - номер позиции чего либо, находящегося внутри массива. массив может быть "$хрень= [10, палка]" и т.д. при этом 10 имеет номер 0, палка - 1 и т.д. а что бы прописать условие нужно что бы было написано: $хрень[0] eq 10. или neq и т.п.
в таком разе что это за [$i-1] и [$i]??? $Белье[$i] не будет работать от слова совсем! там могут быть только цифры. во всяком случает в рамках этого движка.

 
Однако, здравствуйте.
Ответить
#8
@d626527c, Кхем... <<set $i = 0>>, я установил переменную $i равную нулю. Дальше, открывается цикл и идёт проверка $Белье[0] == 2 and $Белье[1] != 2. Почему так? Потому что $i у нас 0, а $i+1 сколько будет? 0+1? Это будет 1. Выходит, что мы проверили 0 элемент массива и 1 элемент.
А ещё мы проверили, чтобы не было, когда $i = 3, $i + 1 = 4, ибо это будет выход за пределы массива. А выходить за пределы массива нельзя, ибо это уже правило такое. У тебя доступа к 4 ячейке нет, если ты её заранее не создал.

Проще говоря, $i - это числовая переменная. Она подставляет то число, которое сейчас внутри неё и происходит нужная тебе проверка. Не буду углубляться в дебри низкоуровневого программирования, но это всё, простая работа с памятью.

 
Ответить
#9
@d626527c, Мда... Древний AXMA сейчас и документацию не найдешь. Может, в нем можно использовать ассоциативные массивы? Или как-то обойти запрет на многомерные?

 
Ответить
#10
(13.10.2019, 16:20)2150f158 писал(а): @d626527c, Мда... Древний AXMA сейчас и документацию не найдешь. Может, в нем можно использовать ассоциативные массивы? Или как-то обойти запрет на многомерные?
А что такое "запрет на многомерные", а то народ постоянно жалуется что не могет, а я ржу и ржу уже который год!
Даже уже устал смеяться и подробно, не один раз, здесь, на форуме написал, разжевал и объяснил как, что, куда и как правильно приготовить и съесть, эту вашу "непобедимую многомерность"  beee 
А народ все плачет и плачет.

Может Вы хоть объясните что там такого сложного, что ну никак?
Я Вам помогу, чтобы объяснить было полегче, дам подсказку:
В компьютере, нету многомерных массивов, от слов: "совсем и никогда"!
А теперь объясните, очень Вас прошу, прям умоляю. lol

@d626527c, а в AXMA внутри квадратных скобок нельзя вычислять индекс?
Белье[x+3]
Надо сразу ставить число, типо только "константа"?


@d626527c, пока из того куска кода, что ты представил видно только одно:
красота определяется по шмотке с более старшим индексом, не зависимо от того, надета ли шмотка с меньшим индексом. Отсюда следует, что надо начинать проверку со старшего индекса и проверять только одета ли шмотка!
Ну и 2 простых, древних, как говно мамонта, правила, тоже никто не отменял:
1. "общее выносить за скобки"
2. не надо дублировать проверки, если проверили $разврат[1] lt 35 и получили что результат ложный, т.е. значение больше 35, то не надо в elseif проверять $разврат[1] gte 35. Это уже известно, мы эту проверку уже выполнили! Тоже  самое с другими дублями. Это не надо!
Вот что получилось из вашего кода в результате:
Свёрнутый текст:
Код:
<<if $время neq 4>>
   <<if $разврат[1] lt 35>>
        <<if$Белье[1] eq 2>>
            <<set $красота_Ж[0] = $красота_Ж[0]+2>>
       <<endif>>
    <<elseif $разврат[1] lt 75)>>
       #Стринги
       <<if $Белье[2] eq 2>>
           <<set $красота_Ж[0] = $красота_Ж[0]+3>>
       <<else>>
      #Кружевное
           <<set $красота_Ж[0] = $красота_Ж[0]+2>>
      <<endif>>
   <<elseif $разврат[1] gte 75>>
      #без белья
      <<if $Белье[3] eq 2>>
          <<set $красота_Ж[0] = $красота_Ж[0]+4>>
      #Стринги
      <<elseif $Белье[2] eq 2>>
          <<set $красота_Ж[0] = $красота_Ж[0]+3>>
      #Кружевное
       <<else>>
          <<set $красота_Ж[0] = $красота_Ж[0]+2>>
      <<endif>>
   <<endif>>
<<elseif $время eg 4>>
   <<if $разврат[1] lt 35>>
       <<if $Белье[1] eq 2>>
           <<set $красота_Ж[0] = 10>>
       <<else>>
           #простенькие бюстгальтер и трусы.
       <<endif>>
   <<elseif $разврат[1] lt 75>>
       <<if $Белье[2] eq 2>>
           <<set $красота_Ж[0] = 20>>
       <<elseif $Белье[1] eq 2>>
           <<set $красота_Ж[0] = 10>>
       <<else>>
           #простенькие бюстгальтер и трусы.
       <<endif>>
   <<elseif $разврат[1] gte 75>>
        <<if $Белье[3] eq 2>>
           <<set $красота_Ж[0] = 30>>
        <<elseif $Белье[2] eq 2>>
           <<set $красота_Ж[0] = 20>>
        <<elseif $Белье[1] eq 2>>
           <<set $красота_Ж[0] = 10>>
        <<else>>
           #простенькие бюстгальтер и трусы.
       <<endif>>
   <<endif>>
<<endif>>

Не знаю вашего алгоритма и других кусков кода, но мое мнение, что шмотка должна быть надета на персонажа и проверять надо его, а не Белье[]. Что надето на персонаже? Белья может быть 100, а вот на Персонаже может быть надето 3-4, это проверять проще. ;)
Т.е.
<<if Человек[Белье] eg 3>>
                <<set $красота_Ж[0] = 30>>
<<elseif Человек[Белье] eg 2>>
                <<set $красота_Ж[0] = 20>>
<<elseif Человек[Белье] eg 1>>
                <<set $красота_Ж[0] = 10>>
<<else>>
           #простенькие бюстгальтер и трусы.
<<endif>>
И не надо проверять разврат! Он проверяется, когда человек пытается надеть шмотку, если надел, то с развратом все ОК, он уже проверен и для определения красоты его проверять уже не надо. Просто проверим одежду и все. ;)

Подобную задачу тут уже спрашивали. поищите в разделе QSP.
Человека разделили на части, на каждую часть можно надеть 1 шмотку. Там указывается какая шмотка надета, просто индекс из массива данных "Одежда". А там может быть по десятку разных трусов, бюстгалтеров, чулок и прочего. А вот на человеке, только по 1. Проверяйте людей, шмотки пусть себе спокойно лежат. ;)

 
Ответить
#11
Извиняюсь, у меня монитор сгорел. поэтому долго молчал.
(14.10.2019, 12:55)6a4a4e7c писал(а): В компьютере, нету многомерных массивов, от слов: "совсем и никогда"!
А теперь объясните, очень Вас прошу, прям умоляю. lol
Я не большой спец в этом. по мне, многомерность - это возможность добавлять в массив переменные, тот самый злополучный "$i" от @4d5da950, и другие массивы - $i[]. массив в массив, как монитор на монитор, вот и вся многомерность.
2.6 версия в это не умеет, насколько я помню.
(14.10.2019, 12:55)6a4a4e7c писал(а): а в AXMA внутри квадратных скобок нельзя вычислять индекс?
Белье[x+3]
да. я конечно проверю еще на всякий случай, но по идее работать это не должно.

(14.10.2019, 12:55)6a4a4e7c писал(а): красота определяется по шмотке с более старшим индексом, не зависимо от того, надета ли шмотка с меньшим индексом. Отсюда следует, что надо начинать проверку со старшего индекса и проверять только одета ли шмотка!
Вот за эту мысль спасибо огромное, с такой стороны я не смотрел. действительно проще.
(14.10.2019, 12:55)6a4a4e7c писал(а): не надо дублировать проверки, если проверили $разврат[1] lt 35 и получили что результат ложный, т.е. значение больше 35, то не надо в elseif проверять $разврат[1] gte 35.
да был несколько лет назад, емнип, такой момент когда сработало сразу несколько условий одного ифа, написанного по такому принципу. вот и дую на воду. хотя дело было давно, может я там 3 разных ифа сделал, а не в одном три условия. проверю в общем.
(14.10.2019, 12:55)6a4a4e7c писал(а): <<if Человек[Белье] eg 3>>
подразумевается, что "Белье" это массив в массиве "Человек"? к сожалению движок в это не может.
вообще, в моем массиве каждый элемент может быть цифрой 0, 1, 2. при этом 0 - отсутствует. 1 - куплен, но еще не подарен 2 - подарен или сама купила. у меня ж ГГ - парень, ему это белье точно не нужно. а женщина непись всего одна. то есть вся игра про 2х человек.
В принципе, ты прав, нехорошо получается - прокачал лапаньем разврат, херакс - она переоделась прям в процессе. действительно над вывести всю эту хрень в отдельный параграф, что б обрабатывалась при действиях, завершающих текущую часть суток - типа сходила и переоделась. игрок не запалит, т.к. секс их не завершает, а только длительные действия - учеба, тренировка, загар...
добавить цифру 3 (надето) что ли?
Опять блин переписывать.

 
Однако, здравствуйте.
Ответить
#12
(18.10.2019, 16:24)2ae91071 писал(а): по мне, многомерность - это возможность добавлять в массив переменные, тот самый злополучный  "$i" от @4d5da950, и другие массивы - $i[]. массив в массив, как монитор на монитор, вот и вся многомерность.
2.6 версия в это не умеет, насколько я помню.
(14.10.2019, 12:55)6a4a4e7c писал(а): а в AXMA внутри квадратных скобок нельзя вычислять индекс?
Белье[x+3]
да. я конечно проверю еще на всякий случай, но по идее работать это не должно.
Проверьте.
Если только константа, тогда печаль-тоска, но если можно индекс вычислять внутри квадратных скобок, т.е. туда можно ставить "выражение", то ...
двумерный массив организуется очень просто и именно так как Вы сказали: "массив в массиве"! smile

 
Ответить


Переход:


Просматривают эту тему: 1 Гость(ей)