UjAPI - AngelScript

Ресурс предназначенный для под-проекта UjAPI - AngelScript (это интерпретируемый язык программирования, разработанный специально для использования в качестве скриптового языка в приложениях).
В данном ресурсе будет вестись логирование изменений, а так же всяческие описания, примеры и прочее.
Программы
26 1 288
26
Unryze, к хорошему быстро привыкаешь, физически больно откатываться назад к менеджеру импорта и mpq редактору
20
Makeba, редактирование World Editor'a ужасно геморройное занятие, так что скорее нет, чем да. Ибо мне тяжко вообще оправдать трудочасы на него, учитывая все его проблемы, да и когда есть тот же w3x2lni.
26
Добавьте файл через менеджер импорта или же MPQ по пути Scripts\\war3map.as или же просто war3map.as.
Режим папки [как в рефе] возможен на 1.26-1.28? Что-нибудь такое в перспективе вообще планируется?

UjAPI

UjAPI — полноценная модификация для Warcraft III версий 1.24e/1.26а/1.27a/1.27b/1.28f кардинально расширяющая функционал игры, добавляющая новые native-функции и типы доступные в редакторе, исправляющая известные проблемы (утечки, неработающие функции и т.п.)
Дополнительно планируется интегрировать и другие проекты, такие как UjAPI - AngelScript, War3 LUA.
В данный момент для тестов и нахождения недочётов доступен альфа-релиз.
Лауреат премии 2023 года
347 7 867
20
PT153, потому что внутри игры функция правит всё на нулевой индекс, посылая 1 -> 0, а ниже 0 правятся до 0.
28
Unryze, ну индексация если что легко правится и юзером, но почему для 0 и ниже возвращается первое значение?
20
PT153, ты готов писать описания 2000 нативкам, которые по факту своими именами поясняю то, за что они отвечают? Или я должен работу целой компании (в которой людям ещё и платят) делать в одиночку ещё и за "а мы попросим, но потом не прочитаем". Толку от этого комьюнити, если оно само не хочет ничего делать?
20
PT153, GetHeroMaxLevelExperienceNeeded возвращает сколько нужно ещё опыта до достижения уровня.
GetHeroExperienceNeeded - внутри движка требует юнита, чтобы проверить данные и провести пересчёты, ибо юнит может иметь флаг RoC и просчёт опыта будет по-другому.
//----- (6F207760) --------------------------------------------------------
int __stdcall Game::Data::GetExperienceNeededForLevel(int a1)
{
  int v1; // esi
  unsigned int v2; // eax

  v1 = a1;
  v2 = (unsigned int)Engine::Config::ReadInteger((int)"Misc", (int)"MaxHeroLevel", 0) - 1;
  if ( a1 - 1 > v2 )
    v1 = (v2 & ~((a1 - 1) >> 31)) + 1;
  return sub_6F00B0E0(v1 - 1);
}

int __thiscall CUnit::GetLevelExperienceNeeded(uint32_t *this, int a1) // unit, level
{
  int result; // eax

  if ( this[124] )
    result = Game::Data::GetExperienceNeededForLevel(a1);
  else
    result = 0;
  return result;
}
int32_t CUnit::GetHeroExperienceNeeded( CUnit* unit, int32_t level )
{
	return ( pOffsets[ Enum::Offsets::GetHeroXPNeeded ] && CUnit::IsOkay( unit ) && CUnit::IsHero( unit ) && !CUnit::IsTower( unit ) ) ? this_call<int32_t>( pOffsets[ Enum::Offsets::GetHeroXPNeeded ], unit, level ) : NULL;
}
Индексации видать у них под капотом даже для уровней идут с нуля. Ты можешь идти оспаривать эту логику с Blizzard, мои ручки умыты.
Юнита в целом можно убрать, но нужно тогда менять оффсет, а мне немного лень, да и так в целом правильнее~.
28
То, я что ожидаю от функции GetHeroExperienceNeeded:
Значение level <= 1 - возвращает 0.
level = 2 - возвращает 200 или другое значение из таблицы в константах.
level = 3 - 500 или другое значение по формуле/из таблицы.
level = 4 - 900 или другое значение по формуле/из таблицы.
И так далее.