Войти на сайт

Авторизация, ждите ...
×
Правила раздела:
1 Задавайте конкретные вопросы. Для болтовни есть свободный раздел.
2 По возможности давайте конкретные ответы.
3 Один вопрос=одна тема. Если хотите задать ещё вопрос, то начинайте новую тему.
4 Название темы должно составлять сам вопрос, и быть максимально конкретным. Рекомендуется начинать тему словами "Как", "Что", "Почему". А первый пост повторяет вопрос и даёт расширенные сведения.
5 Рекомендуется указывать версию мейкера (2000, 2003, RMXP, RMVX, ACE, IGM, и.т.д.. Это важно, и всё равно ведь спросят.
6 Темы "Пара вопросов", "Помогите", и подобные им - самый лёгкий путь к бану.
7 Поиск находится вверху справа.
А. Названия подразделов этого раздела уточняются. Советы принимаются.

ТЕМА: Сократить количество переменных

Сократить количество переменных 3 года 5 мес. назад #122997

  • Eloth001
  • Eloth001 аватар
  • Вне сайта
  • Оседлый
  • Сообщений: 25
  • Спасибо получено: 34
С базовой частью разобрался, и теперь, коллеги, у меня к вам еще один вопрос по диалогам, ответ на который в Интернете мне не попался. Оно и неудивительно: вопрос весьма специфический.

Допустим, ГГ знакомится с НИПом.

Он может узнать имя НИПа сразу(знание1). А может потом.

В определенный момент разговора он узнает, что данный НИП является беглым преступником (знание2). А может, и не узнает.

Затем он, если поинтересуется, может узнать, что данный НИП является профессиональным взломщиком (знание3).

Опционально этот НИП присоединяется к партии.

В результате, наткнувшись на сложный замок, ГГ может попросить этого НИПа его взломать, если знает о его навыках.

Итого получается такая схема, что задействованы аж 3 переменных.

Вопрос: можно ли как-то оптимизировать этот момент, но без ущерба разнообразию?

Чуть ниже схематичный пример диалога (не обязательно, но для большей наглядности):

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: yuryol

Сократить количество переменных 3 года 5 мес. назад #122998

  • Alx_Yago
  • Alx_Yago аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1151
  • Спасибо получено: 2172
  • Проект месяца 1 местоПроект года 1 место3 место1 место в Обучающем конкурсеРазработчикПаладинУчительПроект года 3 место3 место в Обучающем конкурсеОратор
Можно обойтись и одной переменной, если герой узнаёт информацию постепенно:
Переменная=1 - узнал имя
Переменная=2 - узнал имя, а потом узнал профессию
Переменная=3 - узнал имя, потом узнал профессию, а потом - про навык взлома.

Если же все эти знания независимы, и герой может узнать про то, что этот человек обладает навыком взлома, а ни об имени, ни о преступных его наклонностях не ведать, то имеет смысл пользоваться не переменными, а переключателями: ВЫКЛ - не знает, ВКЛ - знает.

Ну и не вижу особого смысла на них экономить: что переменные, что переключатели абсолютно бесплатны, а какие-то хитрые костыли могут в итоге вылиться в кучу багов.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy, Eloth001

Сократить количество переменных 3 года 5 мес. назад #122999

  • Безликий
  • Безликий аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 315
  • Спасибо получено: 355
  • Даритель СтимкеяУчитель2 место в Обучающем конкурсеПоддержка Фонда
Ну и не вижу особого смысла на них экономить: что переменные, что переключатели абсолютно бесплатны, а какие-то хитрые костыли могут в итоге вылиться в кучу багов.

У переменных есть свойство заканчиваться и вопросом экономии переменных задается не только автор поста (8

В конкретно этом случае, экономить переменные будет сложно, так как ГГ может узнавать что-то про НПЦ в процессе игры. Но совершенно ни к чему использовать больше одной переменной, надо просто мыслить чуть-чуть шире и пойти в сложнейшую математику двухзначных чисел, а то и О УЖАС трёхзначных. Сча поясню.

Тут сразу же встает вопрос, а что конкретно будет узнаваться по ходу игры и вот примеры.

Допустим:
У нас есть 3 стартовых варианта:
  • ГГ просто взял его в пати узнав имя и мы даём переменной значение 10
  • ГГ узнал профессию, даём значение 20
  • ГГ узнал ещё и о навыке, даём значение 30

Далее мы ходим по жизни и не паримся, и вот настал момент мы должны узнать, допустим, о другом его навыке - варить кашу из топора. Если одно знание не может существовать без другого, ничего сложного в реализации не было с самого начала, но если могут, то всё опять же очень просто, если чуть-чуть подумать. Короче:
  • ГГ знал только имя и узнал кашеварение 100 лвл - мы даём значение переменной 11
  • ГГ знал и про профессию - даём значение 21
  • ГГ знал всё и узнал что-то новое - даём значение 31
  • ГГ ничего не узнал нового, оставляем 10\20\30


И вот настал момент, нам пора узнать, что наш НПЦ копрофил, что позволит нам выслужиться перед копро-батюшкой в храме. Че делаем:
  • ГГ знал только имя и узнал кашеварение 100 лвл, теперь догнал и про копрофилию - делаем 13
  • ГГ знал и про профессию, узнал и про любовь к калу - даём значение 23
  • ГГ знал всё и узнал что-то новое - даём значение 33
  • ГГ ничего не узнал нового, оставляем 10\20\30 или если знал про кашу 11\21\31
  • ГГ не знал про кашу, но узнал про любовь к извращениям с фикалиями делаем 12\22\32

Надеюсь далее объяснять логику не нужно? Да придется сразу продумать все возможные варианты и оставить для себя небольшое поле для манёвра. Но это не так сложно, как могло бы показаться.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Eloth001

Сократить количество переменных 3 года 5 мес. назад #123000

  • Alx_Yago
  • Alx_Yago аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1151
  • Спасибо получено: 2172
  • Проект месяца 1 местоПроект года 1 место3 место1 место в Обучающем конкурсеРазработчикПаладинУчительПроект года 3 место3 место в Обучающем конкурсеОратор
Ну ок, да лимит переменных 5000. Это ж до фига много! А если даже это кончится, то можно подрубить несложный плагин,
который даст ещё тонну. Дми вон недавно выкладывал плагин, который позволяет каждому событию присваивать локальную переменную, если вдруг это зачем-то надо.

Впрочем, вариант с использованием разрядов в числах я тоже рассматривал, но чисто теоретически, без шансов воплотить его в реальности.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy, SirAndriy

Сократить количество переменных 3 года 5 мес. назад #123002

  • Безликий
  • Безликий аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 315
  • Спасибо получено: 355
  • Даритель СтимкеяУчитель2 место в Обучающем конкурсеПоддержка Фонда
Ну ок, да лимит переменных 5000. Это ж до фига много!

Для крупного проекта, это не так уж много. Просто пара примеров.

В игре 10 фракций, у которых есть репутация, репутация влияет на реакцию каждого отдельного НПЦ, на реакцию каждого отельного НПЦ влияет ещё и его личная история, даже, настроение. НПЦ на 10 фракций у нас 200 человек (те, с которыми мы можем работать), чтобы суммировать всё это дело и грамотно проверять реакцию нам необходимо хотя бы по 1 переменной, а лучше по 2, на каждого НПЦ. Это уже 400 штук, ну и репа фракций 410.

У нас есть 10 навыков, каждый навык имеет свои бонусы от вещей, состояний и всего остального, так же и штрафы. Чтобы работать со всем этим было удобно, желательно выделить по 3 переменных на навык. Текущее значение\штраф\бонус. И вот ещё 30 штук.

А там еще квесты, где нужны переменные, ачивки, другие всякие механики, рандомы\погоды\строительство и крафты ну и т.д...

Набрать на 5к переменных можно довольно быстро и сам не заметишь как. Да, далеко не всем проектам это нужно, я не буду спорить, но ведь может случиться так, что и нужно (8 но всё это ведь не относится к вопросу, не так ли?
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Если же мы говорим о конкретном примере из вопроса, то зачем нам плодить переменные - это не так удобно. Куда удобнее когда за 1 персонажа будет отвечать 1 переменная, вместо 10. Ты будешь знать какое значение и где должно быть и проверить его будет намного проще, чем постоянно листать список переменных (очень уж это в тесте делать неудобно, стандартными средствами), особенно если НПЦ будет не 2-3, а штук 20.

По этому оптимизировать количество необходимых переключателей и переменных, по моему здравая идея (8 даже, если вопрос не тупой экономии числа переменных.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Плагины - дело совершенно другого порядка (8 да и зачем они, когда можно без них.
Администратор запретил публиковать записи гостям.

Сократить количество переменных 3 года 5 мес. назад #123003

  • Dmy
  • Dmy аватар
  • Вне сайта
  • Заблокирован
  • Сообщений: 1142
  • Спасибо получено: 2478
  • 2 место Программист RubyВетеранПаладинУчительПроект месяца 3 местоОраторПоддержка ФондаДаритель СтимкеяЗа 2 место на конкурсе маппинга
Лень спорить, поэтому скрою этот пост.
Старое содержание поста [ Нажмите, чтобы развернуть ]
Последнее редактирование: 3 года 5 мес. назад от Dmy.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Eloth001

Сократить количество переменных 3 года 5 мес. назад #123004

  • Безликий
  • Безликий аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 315
  • Спасибо получено: 355
  • Даритель СтимкеяУчитель2 место в Обучающем конкурсеПоддержка Фонда
Дми, ты на всё смотришь через призму скриптов. По тому как ты в них умеешь и могёшь. Человек же, буквально вчера пришёл в мукер и спросил о конкретном моменте. Зачем его грузить всем тем, до чего ему ещё рановато. Дайте ему разобраться с переменными, с тем, как ими можно оперировать, человек не смог сам дойти. до довольно очевидного решения, в силу отсутствия опыта. Потом Вы же начинаете ругать новичков за то, что они " не изучили основы "

Даже ответ на мой пример, ты приводишь массивы и вынос значений "за редактор", ну камон. Почему вы всё стараетесь перевести в понятные только вам места? (8 Не все могут в программирование (и открою тайну, очень многие даже не хотят туда мочь) и пойдут делать всё на переменных и переключателях, по тому как никакие скрипты для этого не нужны.

Опять же, сам себе кидаешь контраргумент, сначала "если у вас 200 переменных, то вы наверняка используете скрипты", а потом "дело вкуса, кому-то удобнее 1, кому-то 20". Так может я принципиально не использую скрипты? У меня вот есть пример, который принципиально не использует плагины... Дело вкуса же.
Администратор запретил публиковать записи гостям.

Сократить количество переменных 3 года 5 мес. назад #123006

  • Alx_Yago
  • Alx_Yago аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1151
  • Спасибо получено: 2172
  • Проект месяца 1 местоПроект года 1 место3 место1 место в Обучающем конкурсеРазработчикПаладинУчительПроект года 3 место3 место в Обучающем конкурсеОратор
Вот, кстати, ещё какая возможно штука: Если речь идёт о персонаже в пати, и надо знать, какие у него есть умения, связи, особенности, и всё такое, что может иметь два состояния (есть/нету), то можно реализовать это через навыки.

Создаём тип навыков "Скрытый" и навыки с этим типом: "Взлом", "Монгольский язык", "Тётка в Саратове", "Родинка на пятке"... Когда надо какую-то из особенностей получить, заставляем персонажа выучить этот навык и потом, когда понадобится, проверяем его наличие. При этом персонаж может вообще не иметь доступа к этой группе навыков, они не будут отображаться в меню навыков, но всё равно будут у него в наличии, будут изучаться и учитываться при проверке.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Eloth001

Сократить количество переменных 3 года 5 мес. назад #123009

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1704
  • Спасибо получено: 2731
  • Композитор1 место в ГотвОратор2 место Победитель конкурсаОрганизатор конкурсов3 место ГотвУчитель
не понимаю почему речь зашла о кол-ве переменных, автор вообще об этом не говорил. под оптимизацией тут скорее имеется в виду уменьшение кол-ва переменных для удобства и минимизации запутывания. например согласитесь, удобно когда один квест - одна переменная.

в данном случае у нас есть три хар-ки:
  1. знает или нет имя НИПа
  2. является ли беглым преступником
  3. является ли профессиональным взломщиком

все три пункта имеют два значения - "да" и "нет". а значит нам вообще незачем брать переменные и лучше взять переключатели. и всё.

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

про то, что следует пихать разные данные в одну переменную тоже лучше забыть - кроме путанницы это ничего не даст. также вполне может быть: ты чуть поменяешь квест и добавится четвертая хар-ка или изменится логика. а значит если одна переемнная то придется все координально переделывать. а если у тебя три отдельных переключателя то их вообще не трогаешь, просто добавляешь четвертый
Последнее редактирование: 3 года 5 мес. назад от yuryol.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: alexgunwork, Eloth001

Сократить количество переменных 3 года 5 мес. назад #123010

  • Eloth001
  • Eloth001 аватар
  • Вне сайта
  • Оседлый
  • Сообщений: 25
  • Спасибо получено: 34
В переключателях боюсь запутаться, много их надо будет очень. А вот идея с переменными и трехзначными числами мне показалась очень привлекательной. Так можно сочетать характеристики в любой последовательности. Так что попробую пока с переменными. Вроде бы хорошо начало получаться. Пока что мне кажется, что такой подход очень удобен в плане отыгрыша и того, как игра реагирует на действия игрока. Если найдутся какие-то недочеты, то мне, к сожалению, надо обязательно самому поковыряться, чтобы понять, в чем они.
К примеру, создал переменную и назвал ее Алрик (по имени ГГ). И нарисовал себе такую шпаргалку.

character.png


Буду тестить)))
Администратор запретил публиковать записи гостям.

Сократить количество переменных 3 года 5 мес. назад #123011

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 913
  • Спасибо получено: 566
  • Программист RubyОраторПрограммист JavaScript Даритель СтимкеяВетеран
Одна переменная:
1 - имя
2 - беглый преступник
3 - имя и преступник
4 - взломщик
5 - имя и взломщик
6 - беглый преступник и взломщик
7 - имя, преступник и взломщик
8 - быстро бегает
9 - имя и быстро бегает
10 - беглый преступник и быстро бегает
11 - имя беглый преступник и быстро бегает

Ну, и т д
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Eloth001

Сократить количество переменных 3 года 5 мес. назад #123012

  • Alx_Yago
  • Alx_Yago аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1151
  • Спасибо получено: 2172
  • Проект месяца 1 местоПроект года 1 место3 место1 место в Обучающем конкурсеРазработчикПаладинУчительПроект года 3 место3 место в Обучающем конкурсеОратор
Lekste пишет:
Одна переменная:

То есть, с полудесятком-десятком триггеров разбираться сложно, а с этой таблицей телефонных кодов - нет?
Я представил, сколько тут надо будет проверок, чтобы выяснить, является ли персонаж беглым преступником. Это же надо будет проверить, равна ли переменная 2, или 6, или 7, или 10, или 11...

Мне кажется, такое могло бы использоваться при жёсткой нехватке переменных, но вряд ли хоть кому-то добавит удобства.

Система Элофа-Безликого хотя бы может быть оптимизирована за счёт отбрасывания лишних разрядов, но и то мне интересно посмотреть, оправдает ли она себя на практике.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy, ZX_Lost_Soul

Сократить количество переменных 3 года 5 мес. назад #123017

  • Братец Лис
  • Братец Лис аватар
  • Вне сайта
  • Мастер
  • Злая неадекватная скотина
  • Сообщений: 157
  • Спасибо получено: 167
Eloth001 пишет:

character.png


Буду тестить)))

Я бы в данном случае заюзал переключатели, и не парился с переменными.
Меньше возни с проверками нужного свойства в будущем.
Администратор запретил публиковать записи гостям.

Сократить количество переменных 3 года 5 мес. назад #123018

  • Eloth001
  • Eloth001 аватар
  • Вне сайта
  • Оседлый
  • Сообщений: 25
  • Спасибо получено: 34
Это для ГГ))) для НИПов я подумал, что целесообразнее использовать вариант Lekste)))
Администратор запретил публиковать записи гостям.

Сократить количество переменных 3 года 5 мес. назад #123019

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 913
  • Спасибо получено: 566
  • Программист RubyОраторПрограммист JavaScript Даритель СтимкеяВетеран
Да. Его можно проверять через условие -> скрипт ($gameVariables[номер переменной] & (1 << номер флага)) :)
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Eloth001

Сократить количество переменных 3 года 5 мес. назад #123021

  • Братец Лис
  • Братец Лис аватар
  • Вне сайта
  • Мастер
  • Злая неадекватная скотина
  • Сообщений: 157
  • Спасибо получено: 167
Lekste пишет:
Одна переменная:
1 - имя
2 - беглый преступник
3 - имя и преступник
4 - взломщик
5 - имя и взломщик
6 - беглый преступник и взломщик
7 - имя, преступник и взломщик
8 - быстро бегает
9 - имя и быстро бегает
10 - беглый преступник и быстро бегает
11 - имя беглый преступник и быстро бегает

Ну, и т д

ну и как тут проверить не городя огород, является ли, например, беглым преступником? Я в скрипты не очень, мб потому не догоняю.
Последнее редактирование: 3 года 5 мес. назад от Братец Лис.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Eloth001

Сократить количество переменных 3 года 5 мес. назад #123022

  • Dmy
  • Dmy аватар
  • Вне сайта
  • Заблокирован
  • Сообщений: 1142
  • Спасибо получено: 2478
  • 2 место Программист RubyВетеранПаладинУчительПроект месяца 3 местоОраторПоддержка ФондаДаритель СтимкеяЗа 2 место на конкурсе маппинга
Братец Лис пишет:
ну и как тут проверить не городя лес, является ли, например, беглым преступником? Я в скрипты не очень, мб потому не догоняю.
Со скриптами так:
$gameVariables.value(1) & 2
(Вместо 1 нужно вставить номер переменной. Вместо 2 — нужную степень двойки: 1, 2, 4, 8, 16, 32, 64 и т.п.)

Как это работает [ Нажмите, чтобы развернуть ]

Пояснение варианта Lekste [ Нажмите, чтобы развернуть ]


Впрочем, если мы используем скрипты, то непонятно, зачем это вообще всё... Ведь со скриптами не нужно экономить переменные/переключатели.
Последнее редактирование: 3 года 5 мес. назад от Dmy.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Phileas, Alx_Yago, Братец Лис

Сократить количество переменных 3 года 5 мес. назад #123024

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 913
  • Спасибо получено: 566
  • Программист RubyОраторПрограммист JavaScript Даритель СтимкеяВетеран
Смысл в том, что не нужно в скрипте создавать переменную где-то.
А фрагменты скрипта, для изменения или проверки, можно вставлять в поле "Выполнить скрипт" в команде ивента или в поле скрипта в команде проверки условия.

+ в других местах эту переменную можно в ивенте менять или проверять, если почему-то оказалось надо.

Кстати, поставить флаг можно так (не знаю, как оно в JS делается):
gameVariables.value(номер_переменной) |= (1 << номер_флага)

А снять так:
gameVariables.value(номер_переменной) &= !(1 << номер_флага)
Последнее редактирование: 3 года 5 мес. назад от Lekste.
Администратор запретил публиковать записи гостям.

Сократить количество переменных 3 года 5 мес. назад #123028

  • Dmy
  • Dmy аватар
  • Вне сайта
  • Заблокирован
  • Сообщений: 1142
  • Спасибо получено: 2478
  • 2 место Программист RubyВетеранПаладинУчительПроект месяца 3 местоОраторПоддержка ФондаДаритель СтимкеяЗа 2 место на конкурсе маппинга
Lekste пишет:
Кстати, поставить флаг можно так (не знаю, как оно в JS делается):
gameVariables.value(номер_переменной) |= (1 << номер_флага)

А снять так:
gameVariables.value(номер_переменной) &= !(1 << номер_флага)

Это делается так:
$gameVariables.setValue(номер_переменной, $gameVariables.value(номер_переменной) | (1 << номер_флага))

А снять так:
$gameVariables.setValue(номер_переменной, $gameVariables.value(номер_переменной) & ~(1 << номер_флага))

По-моему это тяжеловесно и неудобно, я бы это не использовал без веской причины.

Lekste пишет:
Смысл в том, что не нужно в скрипте создавать переменную где-то.
Не понимаю, почему это проблема, ей-богу.

Если создать новое свойство в каком-нибудь стандартном объекте ($gameSystem или $gameVariables), то оно автоматически сохраняется при сохранении и всё такое, никаких дополнительных действий не нужно.

Если создавать новые переменные по принципу $gameVariables.myVarName, то и создавать ничего не надо. Главное какой-то префикс типа my выбрать, чтобы с добавленными плагинами названиями не было конфликта. Ну и стоит помнить, что по умолчанию в переменной не 0, а undefined, так что придётся писать что-то типа (s.myVar || 0) + 1.
Последнее редактирование: 3 года 5 мес. назад от Dmy.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Cabbit, Братец Лис, Eloth001
Время создания страницы: 0.447 секунд