UjAPI

Добавлен , опубликован
Лауреат премии 2023 года


Данный ресурс работает ТОЛЬКО с патчами 1.24e/1.26а/1.27a/1.27b/1.28f

Как пользоваться?

  1. Распакуйте все файлы из архива, желательно в отдельную папку, вот так:
скриншоты
  1. Запустите UjAPI.exe.
    • Если же у вас приложение не запускается, то скачайте и установите: .NET Framework 4.7.2.
    • Если же ни в игре, ни в World Editor UjAPI не работает, то скачайте и установите: C++ Redistributable 2012
  2. Установите путь для Warcraft 3, вот так:
скриншоты
  • Можно указать и на Frozen Throne.exe или же на Warcraft III.exe (но рекомендуется использовать именно war3.exe для патчей 1.27б и ниже).
  • На патче 1.28.5(f) рекомендуется использовать непосредственно Warcraft III.exe.
  1. Установите путь для World Editor, вот так:
скриншоты
  • Рекомендуется использовать JNGP версии Прометея: скачать
  • Пароль от архива: JNGP
4.1 Для удобства, добавления подсветки/автозаполнения, скачайте: [UjAPI] TESH Подсветка (спасибо DevilVsLife и Nazarpunk) и просто положите его в папку tesh/data вот так:
скриношоты
  1. Готово, вы можете теперь смело запускать как игру, так и World Editor через UjAPI Launcher.
    • Для использования оконного режима в Warcraft III нажмите галочку на "Additional command line arguments" и в появившееся окно, пропишите -window, вот так:
скриншоты

Полезные файлы

`
ОЖИДАНИЕ РЕКЛАМЫ...
20
Unryze, а что с cjass не так? Совсем неюзабельный код выходит?
23
Unryze, О, замечательно! Да, для предметов тоже можно, но, правда, не представляю, в каких ситуациях это потребуется.
32
Unryze, а что с cjass не так? Совсем неюзабельный код выходит?
Кроме этого, зачастую фишечками cjass пользоватся не умеют норм народ, и делает только хуже код, не говоря про то что сжасс оптимизатор может ломать код, касаетсяв первую очередь карт с мемхаком - ибо считает функции тайпкасты и паразитные функции для смены типа - мусором и удаляет\оптимизирует, результат - ниче не работает на ровном месте.
30
Уже не раз писал, но анонимки
передачу переменных через замыкание ты решил не замечать...

а что с cjass не так?
Зависимость результата компиляции от фазы Луны.
20
Unryze, О, замечательно! Да, для предметов тоже можно, но, правда, не представляю, в каких ситуациях это потребуется.
Код имеет ту же логику, потому и решил добавить.
Kokomi:
Unryze, а что с cjass не так? Совсем неюзабельный код выходит?
Безбожное раздувание, которое заставит vJass прикурить, ну и в целом парсер, который мягко говоря конфликтует со всем, что дышит.
nazarpunk:
Уже не раз писал, но анонимки
передачу переменных через замыкание ты решил не замечать...
Я её заметил и я тебе с уверенностью скажу, что это даже близко не весомый аргумент, повторюсь, это удобно - да, но не является чем-то необходимым.
nazarpunk:

а что с cjass не так?
Зависимость результата компиляции от фазы Луны.
И с каждой фазой % успеха снижается. :D
20
Что-то меня занесло, но именно в ту самую сторону. Soon (tm).
23
Unryze, Да ладно, круто же! С такими нативками можно любые объекты на карте ловить и преобразовывать)
20
Вышла новая версия! Прокрутить к ресурсу

v1.0.15.67

  1. Новые Константы
constant abilityintegerfield ABILITY_IF_BUTTON_HOTKEY_ALL = ConvertAbilityIntegerField('ahtk') Set only
constant abilitybooleanfield ABILITY_BF_HOMING = ConvertAbilityBooleanField('amho')
constant itemintegerfield ITEM_IF_TINTING_COLOR = ConvertItemIntegerField('icol')
constant itemintegerfield ITEM_IF_LEVEL_UNCLASSIFIED = ConvertItemIntegerField('ilvo')
constant itemintegerfield ITEM_IF_GOLD_COST = ConvertItemIntegerField('igol')
constant itemintegerfield ITEM_IF_LUMBER_COST = ConvertItemIntegerField('ilum')
constant itemintegerfield ITEM_IF_PRIORITY = ConvertItemIntegerField('ipri')
constant itemintegerfield ITEM_IF_STOCK_REPLENISH_INTERVAL = ConvertItemIntegerField('istr')
constant itemintegerfield ITEM_IF_STOCK_START_DELAY = ConvertItemIntegerField('isst')
constant itembooleanfield ITEM_BF_IGNORE_COOLDOWN = ConvertItemBooleanField('iicd')
constant itembooleanfield ITEM_BF_VALID_FOR_TRANSFORMATION = ConvertItemBooleanField('imor')
constant itemrealfield ITEM_RF_SELECTION_SIZE = ConvertItemRealField('issc')
constant itemstringfield ITEM_SF_NAME = ConvertItemStringField('unam')
constant itemstringfield ITEM_SF_DESCRIPTION = ConvertItemStringField('ides')
constant itemstringfield ITEM_SF_TOOLTIP_NORMAL = ConvertItemStringField('utip')
constant itemstringfield ITEM_SF_TOOLTIP_EXTENDED = ConvertItemStringField('utub')
constant unitintegerfield ITEM_IF_GOLD_COST = ConvertItemIntegerField('igol')
constant unitintegerfield ITEM_IF_LUMBER_COST = ConvertItemIntegerField('ilum')
constant unitintegerfield ITEM_IF_STOCK_MAXIMUM = ConvertItemIntegerField('isto')
constant unitintegerfield UNIT_IF_TINTING_COLOR = ConvertUnitIntegerField('ucol')
constant unitintegerfield UNIT_IF_PROPER_NAMES_COUNT = ConvertUnitIntegerField('upru') Get Only
constant unitrealfield UNIT_RF_SIGHT_RADIUS_DAY = ConvertUnitRealField('usid')
constant unitrealfield UNIT_RF_SIGHT_RADIUS_NIGHT = ConvertUnitRealField('usin')
constant unitstringfield UNIT_SF_TOOLTIP_NORMAL = ConvertUnitStringField('utip')
constant unitstringfield UNIT_SF_TOOLTIP_EXTENDED = ConvertUnitStringField('utub')
constant unitstringfield UNIT_SF_PROPER_NAME = ConvertUnitStringField('uprn')
  1. Новые Нативные Функции:
native GetHandleReferenceCount takes handle whichHandle returns integer
native GetHandleBaseTypeId takes handle whichHandle returns integer this returns '+w3u' from unit, if it was passed as handle, and so on.
native GetHandleBaseTypeName takes handle whichHandle returns string this returns CUnit from unit, if it was passed as handle, and so on.
native GetFilterHandle takes nothing returns handle
native GetEnumHandle takes nothing returns handle
native EnumHandlesOfType takes integer handleBaseTypeId, boolexpr filter, code handlerFunc returns nothing
native SetImageOrigin takes image whichImage, real origin returns nothing
native SetAbilityRemainingCooldown takes ability whichAbility, real cooldown returns boolean
native SetUnitPointValueByType takes integer unitType, integer newPointValue returns nothing
native EnumDestructablesInRange takes real x, real y, real radius, boolexpr filter, code handlerFunc returns nothing
native EnumItemsInRange takes real x, real y, real radius, boolexpr filter, code handlerFunc returns nothing
native GetTriggerSpecialEffect takes nothing returns effect
native GetFilterSpecialEffect takes nothing returns effect
native GetEnumSpecialEffect takes nothing returns effect
native EnumSpecialEffectsInRange takes real x, real y, real radius, boolexpr filter, code handlerFunc returns nothing
native GetTriggerTrackable takes nothing returns trackable
native GetFilterTrackable takes nothing returns trackable
native GetEnumTrackable takes nothing returns trackable
native EnumTrackablesInRange takes real x, real y, real radius, boolexpr filter, code handlerFunc returns nothing
native IsMissileAlive takes missile whichMissile returns boolean
native GetFilterMissile takes nothing returns missile
native GetEnumMissile takes nothing returns missile
native EnumMissilesInRange takes real x, real y, real radius, boolexpr filter, code handlerFunc returns nothing
native ResetAbilityFieldData takes ability whichAbility returns boolean Restores original ability data, meaning it reverts any and all changes made by Field API. Returns true if reset was needed.
native GetUnitAttackRemainingDamagePoint takes unit whichUnit returns real
native SetUnitAttackRemainingDamagePoint takes unit whichUnit real time returns nothing
native GetUnitAttackRemainingBackswing takes unit whichUnit returns real
native SetUnitAttackRemainingBackswing takes unit whichUnit real time returns nothing
  1. Удалены все "дубликаты" нативных функций типа GetAbilityBaseManaCostById, они теперь заменены API инстанса/полей. Список удалённых нативных функций:
Ability API
native GetAbilityBaseManaCostById takes integer aid, integer level returns integer
native SetAbilityBaseManaCostById takes integer aid, integer level, integer manaCost returns nothing
native GetAbilityBaseCooldownById takes integer aid, integer level returns real
native SetAbilityBaseCooldownById takes integer aid, integer level, real cooldown returns nothing
native GetAbilityBaseHotkeyById takes integer aid returns oskeytype
native SetAbilityBaseHotkeyById takes integer aid, oskeytype whichKey returns nothing
native GetAbilityBaseUnHotkeyById takes integer aid returns oskeytype
native SetAbilityBaseUnHotkeyById takes integer aid, oskeytype whichKey returns nothing
native GetAbilityBaseResearchHotkeyById takes integer aid returns oskeytype
native SetAbilityBaseResearchHotkeyById takes integer aid, oskeytype whichKey returns nothing
native GetAbilityBaseEffectSoundById takes integer aid returns string
native SetAbilityBaseEffectSoundById takes integer aid, string text returns nothing
native GetAbilityBaseGlobalMessageById takes integer aid returns string
native SetAbilityBaseGlobalMessageById takes integer aid, string text returns nothing
native GetAbilityBaseGlobalSoundById takes integer aid returns string
native SetAbilityBaseGlobalSoundById takes integer aid, string text returns nothing
native GetAbilityBaseButtonXById takes integer aid returns integer
native SetAbilityBaseButtonXById takes integer aid, integer positionX returns nothing
native GetAbilityBaseButtonYById takes integer aid returns integer
native SetAbilityBaseButtonYById takes integer aid, integer positionY returns nothing
native GetAbilityBaseUnButtonXById takes integer aid returns integer
native SetAbilityBaseUnButtonXById takes integer aid, integer positionX returns nothing
native GetAbilityBaseUnButtonYById takes integer aid returns integer
native SetAbilityBaseUnButtonYById takes integer aid, integer positionY returns nothing
native GetAbilityBaseResearchButtonXById takes integer aid returns integer
native SetAbilityBaseResearchButtonXById takes integer aid, integer positionX returns nothing
native GetAbilityBaseResearchButtonYById takes integer aid returns integer
native SetAbilityBaseResearchButtonYById takes integer aid, integer positionY returns nothing
native GetAbilityBaseMissileSpeedById takes integer aid returns real
native SetAbilityBaseMissileSpeedById takes integer aid, real missileSpeed returns nothing
native GetAbilityBaseMissileArcById takes integer aid returns real
native SetAbilityBaseMissileArcById takes integer aid, real missileArc returns nothing
native GetAbilityBaseIsMissileHomingById takes integer aid returns boolean
native SetAbilityBaseIsMissileHomingById takes integer aid, boolean ishoming returns nothing
native GetAbilityBaseSpellDetailsById takes integer aid returns integer
native SetAbilityBaseSpellDetailsById takes integer aid, integer level returns nothing
native GetAbilityBaseTipById takes integer aid, integer level returns string
native SetAbilityBaseTipById takes integer aid, integer level, string text returns nothing
native GetAbilityBaseUnTipById takes integer aid, integer level returns string
native SetAbilityBaseUnTipById takes integer aid, integer level, string text returns nothing
native GetAbilityBaseUberTipById takes integer aid, integer level returns string
native SetAbilityBaseUberTipById takes integer aid, integer level, string text returns nothing
native GetAbilityBaseUnUberTipById takes integer aid, integer level returns string
native SetAbilityBaseUnUberTipById takes integer aid, integer level, string text returns nothing
native SetAbilityBaseHotkeyByIdEx takes integer aid, oskeytype whichKey returns nothing
Item API
native GetItemBaseNameById takes integer itemId returns string
native SetItemBaseNameById takes integer itemId, string name returns nothing
native GetItemBaseDescriptionById takes integer itemId returns string
native SetItemBaseDescriptionById takes integer itemId, string name returns nothing
native GetItemBaseIconById takes integer itemId returns string
native SetItemBaseIconById takes integer itemId, string path returns nothing
native GetItemBaseHotkeyById takes integer itemId returns oskeytype
native SetItemBaseHotkeyById takes integer itemId, oskeytype whichKey returns nothing
native GetItemBaseTipById takes integer itemId returns string
native SetItemBaseTipById takes integer itemId, string tip returns nothing
native GetItemBaseUberTipById takes integer itemId returns string
native SetItemBaseUberTipById takes integer itemId, string tip returns nothing
native GetItemBaseGoldCostById takes integer itemId returns integer
native SetItemBaseGoldCostById takes integer itemId, integer goldcost returns nothing
native GetItemBaseLumberCostById takes integer itemId returns integer
native SetItemBaseLumberCostById takes integer itemId, integer lumbercost returns nothing
native GetItemBaseStockMaximumById takes integer itemId returns integer
native SetItemBaseStockMaximumById takes integer itemId, integer stockMax returns nothing
native GetItemBaseStockReplenishIntervalById takes integer itemId returns real
native SetItemBaseStockReplenishIntervalById takes integer itemId, real replenishInterval returns nothing
native GetItemBaseStockStartDelayById takes integer itemId returns real
native SetItemBaseStockStartDelayById takes integer itemId, real stockStartDelay returns nothing
native GetItemBasePriorityById takes integer itemId returns integer
native SetItemBasePriorityById takes integer itemId, integer priority returns nothing
native GetItemBaseLevelById takes integer itemId returns integer
native SetItemBaseLevelById takes integer itemId, integer level returns nothing
native GetItemBaseOldLevelById takes integer itemId returns integer
native SetItemBaseOldLevelById takes integer itemId, integer oldlevel returns nothing
native GetItemBaseClassificationById takes integer itemId returns integer
native SetItemBaseClassificationById takes integer itemId, integer classifictaionId returns nothing
native GetItemBaseIsMorphById takes integer itemId returns boolean
native SetItemBaseIsMorphById takes integer itemId, boolean flag returns nothing
native GetItemBaseIsPickRandomById takes integer itemId returns boolean
native SetItemBaseIsPickRandomById takes integer itemId, boolean flag returns nothing
native GetItemBaseChargesById takes integer itemId returns integer
native SetItemBaseChargesById takes integer itemId, integer charges returns nothing
native GetItemBaseCooldownIdById takes integer itemId returns integer
native SetItemBaseCooldownIdById takes integer itemId, integer cooldownId returns nothing
native GetItemBaseIsIgnoreCooldownById takes integer itemId returns boolean
native SetItemBaseIsIgnoreCooldownById takes integer itemId, boolean flag returns nothing
native GetItemBaseIsPowerUpById takes integer itemId returns boolean
native SetItemBaseIsPowerUpById takes integer itemId, boolean flag returns nothing
native GetItemBaseIsPawnableById takes integer itemId returns boolean
native SetItemBaseIsPawnableById takes integer itemId, boolean flag returns nothing
native GetItemBaseIsUsableById takes integer itemId returns boolean
native SetItemBaseIsUsableById takes integer itemId, boolean flag returns nothing
native GetItemBaseIsPerishableById takes integer itemId returns boolean
native SetItemBaseIsPerishableById takes integer itemId, boolean flag returns nothing
native GetItemBaseIsDroppableById takes integer itemId returns boolean
native SetItemBaseIsDroppableById takes integer itemId, boolean flag returns nothing
native GetItemBaseIsDroppableOnDeathById takes integer itemId returns boolean
native SetItemBaseIsDroppableOnDeathById takes integer itemId, boolean flag returns nothing
native GetItemBaseIsSellableById takes integer itemId returns boolean
native SetItemBaseIsSellableById takes integer itemId, boolean flag returns nothing
Unit API
native GetUnitBasePrimaryStatById takes integer unitTypeId returns heroattribute
native SetUnitBasePrimaryStatById takes integer unitTypeId, heroattribute whichHeroAttribute returns nothing
native GetUnitBaseGoldCostById takes integer unitTypeId returns integer
native SetUnitBaseGoldCostById takes integer unitTypeId, integer goldCost returns nothing
native GetUnitBaseDaySightById takes integer unitTypeId returns real
native SetUnitBaseDaySightById takes integer unitTypeId, real daySight returns nothing
native GetUnitBaseNightSightById takes integer unitTypeId returns real
native SetUnitBaseNightSightById takes integer unitTypeId, real nightSight returns nothing
native GetUnitBaseColourById takes integer unitTypeId returns integer
native SetUnitBaseColourById takes integer unitTypeId, integer colour returns nothing
native GetUnitBaseColourAById takes integer unitTypeId returns integer
native SetUnitBaseColourAById takes integer unitTypeId, integer colourA returns nothing
native GetUnitBaseColourRById takes integer unitTypeId returns integer
native SetUnitBaseColourRById takes integer unitTypeId, integer colourR returns nothing
native GetUnitBaseColourGById takes integer unitTypeId returns integer
native SetUnitBaseColourGById takes integer unitTypeId, integer colourG returns nothing
native GetUnitBaseColourBById takes integer unitTypeId returns integer
native SetUnitBaseColourBById takes integer unitTypeId, integer colourB returns nothing
native GetUnitBaseNameById takes integer unitTypeId returns string
native SetUnitBaseNameById takes integer unitTypeId, string name returns nothing
native GetUnitBaseProperNameById takes integer unitTypeId, integer properNameIndex returns string
native SetUnitBaseProperNameById takes integer unitTypeId, integer properNameIndex, string properName returns nothing
native GetUnitBaseDescriptionById takes integer unitTypeId returns string
native SetUnitBaseDescriptionById takes integer unitTypeId, string name returns nothing
native GetUnitBaseModelById takes integer unitTypeId returns string
native SetUnitBaseModelById takes integer unitTypeId, string modelName returns nothing
native GetUnitBasePortraitById takes integer unitTypeId returns string
native SetUnitBasePortraitById takes integer unitTypeId, string portraitName returns nothing
native GetUnitBaseHotkeyById takes integer unitTypeId returns oskeytype
native SetUnitBaseHotkeyById takes integer unitTypeId, oskeytype whichKey returns nothing
native GetUnitBaseIconById takes integer unitTypeId returns string
native SetUnitBaseIconById takes integer unitTypeId, string name returns nothing
native GetUnitBaseAwakenTipById takes integer unitTypeId returns string
native SetUnitBaseAwakenTipById takes integer unitTypeId, string awakenTip returns nothing
native GetUnitBaseTipById takes integer unitTypeId returns string
native SetUnitBaseTipById takes integer unitTypeId, string tip returns nothing
native GetUnitBaseUberTipById takes integer unitTypeId returns string
native SetUnitBaseUberTipById takes integer unitTypeId, string uberTip returns nothing
native GetUnitBaseReviveTipById takes integer unitTypeId returns string
native SetUnitBaseReviveTipById takes integer unitTypeId, string reviveTip returns nothing
native GetUnitBaseShadowTexById takes integer unitTypeId returns string
native SetUnitBaseShadowTexById takes integer unitTypeId, string shadowTexture returns nothing
native GetUnitBaseMissileArtById takes integer unitTypeId, integer attackIndex returns string
native SetUnitBaseMissileArtById takes integer unitTypeId, integer attackIndex, string missleArt returns nothing
native GetUnitBaseMissileSpeedById takes integer unitTypeId, integer attackIndex returns real
native SetUnitBaseMissileSpeedById takes integer unitTypeId, integer attackIndex, real realValue returns nothing
native GetUnitBaseMissileArcById takes integer unitTypeId, integer attackIndex returns real
native SetUnitBaseMissileArcById takes integer unitTypeId, integer attackIndex, real realValue returns nothing
native GetUnitBaseSelectionScaleById takes integer unitTypeId returns real
native SetUnitBaseSelectionScaleById takes integer unitTypeId, real realValue returns nothing
  1. Все SetAbilityField теперь по-настоящему следуют логике инстансирования, что значит, что изменение любых данных, включая UI будут уникальны для этого заклинания, а не изменны для всх.
  2. Прошлая функция SetImageOrigin изменена на SetImageOriginEx.
  3. Исправлена не совсем рабочая нативная функция EXSetAbilityState.
  4. Исправлено сломанное отключение для переключаемых заклинаний.
    Пометка: эта проблема всё так же была связана с новым экспериментальным методом SetAbilityOrderId... :(
  5. Добавлена внутренняя обработка полей:
ABILITY_SLF_CASTER
ABILITY_SLF_TARGET
ABILITY_SLF_SPECIAL
ABILITY_SLF_EFFECT
ABILITY_SLF_AREA_EFFECT
ABILITY_SLF_LIGHTNING_EFFECTS
ABILITY_SLF_MISSILE_ART
ABILITY_SLF_TOOLTIP_LEARN
ABILITY_SLF_TOOLTIP_LEARN_EXTENDED
ABILITY_SLF_TOOLTIP_NORMAL
ABILITY_SLF_TOOLTIP_TURN_OFF
ABILITY_SLF_TOOLTIP_NORMAL_EXTENDED
ABILITY_SLF_TOOLTIP_TURN_OFF_EXTENDED
  1. Изменены нативные функции юнитов:
Удалены:
SetUnitAttackState
UnitCancelCurrentAttackByIndex
Изменены:
GetUnitNextAttackTimeStampByIndex -> GetUnitAttackRemainingCooldown | Now it returns actual remaining time.
SetUnitNextAttackTimeStampByIndex -> SetUnitAttackRemainingCooldown | Now it sets actual remaining time.
UnitResetAttackCooldownByIndex -> UnitResetAttack
UnitAddExtraAttackByIndex -> UnitFinishAttack
Добавлены:
native GetUnitAttackRemainingDamagePoint takes unit whichUnit returns real
native SetUnitAttackRemainingDamagePoint takes unit whichUnit real time returns nothing
native GetUnitAttackRemainingBackswing takes unit whichUnit returns real
native SetUnitAttackRemainingBackswing takes unit whichUnit real time returns nothing
  1. Добавлен новый "Dev Mode" режим для UjAPI.
    Пометка: включение этого режима, даст UjAPI возможность выписывать в консоль всевозможные Jass ошибки (если карта имеет синтаксические ошибки в Jass) или же ошибки с файлами.
23
Unryze, Предложение!
Возможно ли создать функцию
native GetArrayIndex takes string ArrayName, handle Object, integer IndexMin, integer IndexMax returns integer,
С помощью которой можно получить индекс объекта, записанного в массив ArrayName в диапазоне min-max при его наличии там? Например, для использования этого индекса, если в карте есть подобие базы данных, с несколькими массивами, или для определения номера игрока, итд, итп.
20
Unryze, Предложение!
Возможно ли создать функцию
native GetArrayIndex takes string ArrayName, handle Object, integer IndexMin, integer IndexMax returns integer,
С помощью которой можно получить индекс объекта, записанного в массив ArrayName в диапазоне min-max при его наличии там? Например, для использования этого индекса, если в карте есть подобие базы данных, с несколькими массивами, или для определения номера игрока, итд, итп.
Это ужасный велосипед, но да, реально. Но я не пойму зачем такие извращения, хоть убей.
Хештаблица - чем не угодила? :(
30
Это ужасный велосипед, но да, реально. Но я не пойму зачем такие извращения, хоть убей.
Потому что нельзя массив в функцию передать и посему для каждого массива придётся одинаковую функцию костылить.
20
Это ужасный велосипед, но да, реально. Но я не пойму зачем такие извращения, хоть убей.
Потому что нельзя массив в функцию передать и посему для каждого массива придётся одинаковую функцию костылить.
А можно пример, где нужно передавать массив в функцию, который реально применим в реалиях Вар 3. И я повторю вопрос, что мешает использовать хештаблицу, которую можно передавать в функции...
23
Unryze, Да, это велосипед, но он требуется. Допустим, у героя имеется комплект абилок, при этом каждая из абилок работает на коде и состоит из нескольких стандартных абилок. Для простого кода требуется бд, из нескольких массивов, в каждом из которых записаны равкоды абилок, в одинаковой последовательности. Код определяет индекс в одном массиве, а потом его использует для взятия данных из остальных массивов.
Хештаблица - да, она может, но если абилок таких 50? 50 раз по циклу придётся вызвать функцию извлечения данных из Хештаблицы, для сравнения. А вызовы более ресурсозатратные, чем просто обращение к переменным. А в случае нативки достаточно 1 раз её вызвать, и всё, в коде она больше не потребуется.
Да, на джассе можно сделать подобное, как сказал nazarpunk, но это костыльно.
20
Unryze, Да, это велосипед, но он требуется. Допустим, у героя имеется комплект абилок, при этом каждая из абилок работает на коде и состоит из нескольких стандартных абилок. Для простого кода требуется бд, из нескольких массивов, в каждом из которых записаны равкоды абилок, в одинаковой последовательности. Код определяет индекс в одном массиве, а потом его использует для взятия данных из остальных массивов.
Хештаблица - да, она может, но если абилок таких 50? 50 раз по циклу придётся вызвать функцию извлечения данных из Хештаблицы, для сравнения. А вызовы более ресурсозатратные, чем просто обращение к переменным. А в случае нативки достаточно 1 раз её вызвать, и всё, в коде она больше не потребуется.
Да, на джассе можно сделать подобное, как сказал nazarpunk, но это костыльно.
Разница будет не такая существенная, да и твой юзкейс возвращает элемент, что можно вернуть хештаблицей, и каждый вызов элемента из массива всё-равно нужно вызывать, так что ты сам не понял что попросил. :(
Поясняю, можно передать хештаблицу и родительский ключь, раз на то пошло и сократить количество вызовов, но на деле, эта «ресурсоёмкость» повлияет ровным счётом ни на что.
Прекратите уже извращаться и выдумывать псевдо-более-быстрые велосипеды, если бы это реально было бы существенно быстрее, я бы это уже сам форсировал бы, но это не так.
30
Для простого кода требуется бд, из нескольких массивов, в каждом из которых записаны равкоды абилок, в одинаковой последовательности.
Сделать из одномерного массива n-мерный религия не позволяет?
23
Unryze, ок, я просто предложил. Нет - нет, да - да.
nazarpunk, можно конечно, у себя так и сделал, но определять индекс всё равно требуется. А несколько массивов просто для примера описал.
30
EugeAl, при инициализаци проести индексацию и положить индексы в хт?
23
nazarpunk, но у меня нет хт, только "двумерный" массив ( не люблю хт) ). Что значит провести индексацию? Заполнить массив? так это вначале делается.
30
не люблю хт
Кто тебе дохтор?
Получать элемент за О(n) всяко лучше чем за O(1)
Что значит провести индексацию?
Это значит положить в хт индекс элемента в массиве, чтоб можно было достать его без перебора.
23
nazarpunk, ок, а как его привязать например к равкоду абилки? Чтобы при касте абилки код сразу распознал её индекс в массиве, ведь без перебора это не определить. Что тогда нужно загрузить/ выгружать в/из хт? Не скажется ли это на фпс/производительности?
30
ок, а как его привязать например к равкоду абилки?
Равкод это число.
SaveInteger(Таблица, Равкод, 0, ИндексМассива)
Не скажется ли это на фпс/производительности?
Перебор массива гораздо производительней получения значения таблицы.
23
nazarpunk, Что ж, интересная концепция. Пожалуй, можно пробовать. Но вот вопрос в рациональности - если требуется перебрать всего 60 значений максимум, имеет ли такая оптимизация смысл?
30
Но вот вопрос в рациональности - если требуется перебрать всего 60 значений максимум, имеет ли такая оптимизация смысл?
Если есть возможность не перебирать, то зачем перебирать?
23
nazarpunk, может быть там внутри хт идёт свой код перебора, который в случае с маленьким количеством значений ещё хуже перебора массива, хт ведь не волшебным образом определяет и ищет данные внутри себя.
20
nazarpunk, может быть там внутри хт идёт свой код перебора, который в случае с маленьким количеством значений ещё хуже перебора массива, хт ведь не волшебным образом определяет и ищет данные внутри себя.
500 нс разницы (700 против 200), если ты делаешь чтения хотя бы 1000 раз в 1 функции, тогда да, ты ощутишь это... Добавь StringHash, вот тогда уже 400 переборов будет проявляться хоть как-то. Но опять же, ты эту скорость почти нигде не почувствуешь, пока конкретно что-то не перегрузишь.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.