Наверняка большинство из вас сталкивалось с проблемой, что в хэш-таблицу невозможно занести тип боевой единицы. Один наш знакомый, а именно Мурадор, подсказал нам способ, которым можно обойти эту проблему: занести в данные строку, преобразованную от типа юнита, который нужно сохранить, а при извлечении данных для получения типа юнита преобразовать сохранённую к хэше строку в тип юнита. К сожалению, мы забыли спросить Мурадора, является ли это его идеей или он сам откуда-то это узнал, но это и не так важно. В последнее время мы шагаем в сторону теории, что люди получают данные с единого информационного поля, дело лишь в том, на сколько человек этому полю открыт. Так что неважно, каким образом он получил информацию, она является общей, хоть и не всегда люди находят в себе силы и желания её открывать. Но рано или поздно эти знания посредством информационного поля, откуда они были изъяты, всё равно станут доступными и другим людям. Те же типы переменных, которые нельзя преобразовать в текст, можно поместить в массив, а при необходимости сохранить информацию в ячейке хэша, содержащую ссылку на информацию массивной переменной. К примеру, необходимо, чтобы для каждого торговца была своя хэш-таблица, содержащая информацию о предметах, которые есть у торговца на выбор. Информацию о типе предмета нельзя хранить в хэше, а потому мы создаём массив переменной типа «тип предмета», в ячейках которого будут сохраненны все предметы, которые только могут быть у торговцев. В хэш торговца 0:0 мы сохраняем количество предоставленных предметов на выбор, в N:0 целочисленное значение, которое является индексом для массива списка предметов, в N:1 текстовое значение, предназначеное для отображения названия предмета с приставкой речи покупки аля «меня интересует огненный меч», в N:2 целочисленное значение, определяющее стоимость предмета. Каким образом эти данные заполняются — неважно, будь-то на то функция, регистрирующая торговцев и добавляющая для них предметы, ручное заполнение значений в хэш-таблицах и переменных или же некая генерация. Главное, что теперь эти данные есть, и их можно использовать в иных наработках как необходимую информацию. Таким образом, в хэше можно сохранять и другие значения (а точнее индекс на них), которые в нём сохранять нельзя.
В завершение мы приоткроем ещё одну маленькую, но приятную хитрость, конечно с такими вещами трудно разрушать единение, в полном смысле слова, но ревность к знаниям является приятной болезнью, от которой лучше лечиться, это один из способов сделать мир лучше. Конечно, если речь не идёт о секрете изготовления оружия массового поражения (именно по этим причинам мы не разглашаем секрет, как можно триггером убить игрока, сидящего перед монитором -)). Ну шутки в сторону, дело в том, что эта ревность к знаниям засела в нас до самых глубин сердца, до самых оснований костей, и мы надеемся, что мы сможем избавиться от ноши этой болезни и стать более открытыми миру, если постепенно, начиная с раскрытия маленьких знаний мы сможем избавиться от этой черни.. да, для нас это чернь. Но вам может показаться, что мы слишком разговорились для статьи, особенно вам может так показаться, если мы для вас глубоко неуважаемые форумчане, но мы не заставляем вас это читать, и изначально мы не тащили вас за уши, чтобы вы начали это читать, так что претензии к этому можете оставить на себя (не «при себе» а «на себя»), точно так же, как на себя вы оставили желание начать это читать и не прекращать это делать в первые моменты, когда вам перестало это нравиться.
Цель этой маленькой хитрости состоит в том, чтобы заставить всевозможные наработки, связанные с системой классификации предметов облегчить себе жизнь. Не знаем, какую логику вы им задавали для такой ситуации, но мы бедную наработку долгое время заставляли при каждом случае подбора предмета прочёсывать все данные о предметах, пока она не найдёт совпадение проверяемого типа предмета с типом подбираемого предмета и после этого, узнав индекс предмета в базе, извлекать данные подобранного предмета для дальнейших манипуляций наработкой. Но когда количество предметов переваливает за полторы сотни, на слабых машинах могут возникать маленькие такие «лажки». Чтобы облегчить работу подобных наработок, перед именем любого предмета (или юнита) можно вставлять неотображаемую строку |c00000001|r, точнее вместо последних чисел не 1, а номер предмета: |c00000001|r, |c00000002|r, … , |c00000010|r и т. д. В триггер регистрации предметов укажите все регистрируемые предметы, содержащие в начале названия эту строку, затем запускайте триггер автоматической регистрации, прочёсывающий все регистрируемые предметы и заставляйте его регистрировать предметы в массивах с индексом, соответствующим преобразованному в числовое значение преобразованное в текстовое значение название предмета с подстрокой от символа 3 до символа 10. Таким образом все ненужные нули при преобразовании строки автоматически отбросятся, и останется лишь необходимое число, будь то 1, 10, 1001 или 32000. Эти числа помогут наработке узнать индекс подобранного предмета, избежав поиск индекса методом чередования. По поводу наработок, связанных с юнитами, большинство из вас знает — просто даруйте юниту личное число, которое будет являться его личным индексом в массивах, а чтобы узнать, в каких системах юнит участвует, а в каких нет — даруйте ему способности, неотображаемые на игровой панели способностей. К примеру, способность «возрождаемый юнит» означает, что юнит принимает участие в системе возрождения после смерти, а способность «классифицированный инвентарь» означает, что он принимает участие в наработке, непозволяющей ему носить несколько мечей в одной руке (способность переносить множество оружий понадобится юнитам, не использующим предметы, к примеру, сундукам или мулам, а неспособность возрождаться после смерти может понадобиться босам или ключевым NPC).
Автор: Rehan