Когда разработчик передал в api объект другого warcraft типа теперь выводится сообщение об ошибке, вместо тихого обрыва потока;
Добавление возможности подключать скрипт из папки с варом, чтобы во время разработки после изменения кода карту не надо было даже пересохранять. Это актуально для всех больших проектов у которых карта сохраняется по 20+ секунд;
Добавляем возможность передавать данные из jass в lua и обратно через общую hashtable. Что даст возможность подключить lua без переписывания jass кода;
Делаем возможность добавить mix в карту без необходимости игрокам заранее класть его в папку вара.
Это открытый проект, а значит у вас есть возможность самому написать эти функции и предложить добавить их, чему мы будем рады.
Это некоммерческий проект, поэтому разработчик в первую очередь делает то что ему интересно. Но у вас всегда есть возможность заинтересовать его. Если вы хотите добавить lua к существующему проекту для каких то вычислений, или попробовать создать на нем новый проект или вы хотите вернуться на 1.26 чтобы показать всем как делать годноту и вам для этого нужны эта эта и эта функции, то мне кажется что автор не останется равнодушным к вам, пишите тут или лично
Надеюсь не сочтёшь за "понты", но если вы сделаете всё адекватно, то я готов вам помочь сорсами по фреймам и т.д. для расширения нативок и прочего. То бишь почти весь функционал и даже больше, я могу вам завести. Один нюанс, что моё "требование" будет таки сделать расширение джасс нативок тоже (с ним я тоже помогу), а не просто LUA и всё. Ну и ещё маленьки-маленький нюанс, сделать функции по дефолту с именами без тупых Blz, а Blz сделать врапперами на нативки.
Ибо интерес у меня к проекту есть, а данных игры я разобрал уже неистово много, как и кол-во функций в моей WFEDll в разы больше чем то, что я добавил в МемХак (ибо лень было дважды писать код, но теперь ещё и на джасс).
Bogdan Shmay
К несчастию или нет, у луа машины в рефорже и тут разные наборы доступных и реализованных функций, в том числе с разным именованием. Вероятно, проблемы возникают с использованием функций типа изменения описаний способностей и тому подобного.
С определенными изменениями код должен работать.
Честно говоря, я особо в этом не разбираюсь, всё таки что-то можео сделать, что бы w3c код работал с помощью данного мода на 1.26?
Либо это функции которые связаны исключительно с их лаунчером, который у них только с 1.32+
Либо это Blz-функций рефоржа, которых нет и не было на 1.26, и которые относятся к api игры, а не к lua. На 1.26 вместо них функции из мемхака
W3c код работает не только на рефордже, а на всех версиях варкрафта в которых есть lua (то-есть начиная с 1.31)
Их мод на версии 1.26а и в файле что ты загрузил есть отсылки на Blz нативки, которых нет в 1.26а. О чём Влод и писал.
так ты ж делал псевдо-группы для эффектов, предметов и прочего, вместо массива
Верно, но я не считаю её нужной-необходимой. Она даёт удобство работы с группировкой тех хендлов на которых нет стандартного API, но даже так оно имеет больше смысла, нежели расширение количества хештаблиц и всяких надстроек базированных на этом - имеют очень мало смысла, ибо достигнуть коллизии стрингхеша не так уж и легко, разве что только специально стараться это сделать.
По большей части, при особом желании, на всю карту хватит даже 1 хештаблицы, чёрт с ним пусть будет 10. Но куда больше 256? Молчу уже о 8000. В самой игре внутренних хеш таблиц всего 259 (по моей памяти, может и меньше). Потому я не пойму, что такого нужно сделать, чтобы код карты требовал больше хештаблиц, чем вся полноценная игра.
Ну и закончу тем, что моё псевдоАПИ в корне отличается по своему смыслу, потому их сравнивать немного неправильно, однако что моя, что та наработка - не являются де-факто обязательными.
Конечно я могу рассказать о том кто это использовал и где, но это не изменит тот факт, что вы сочли возможным оценить "применяемость" работы без объективных на то предпосылок, из чего следует:
Что на самом деле объективные предпосылки вам не нужны, иначе вы бы изначально поинтересовались у меня или у других компетентных людей по вопросу "применяемости".
Что упор был сделан на сугубо на личное мнение.
Потому предлагаю сначала изучить примеры в работе, которые были сделаны как раз для ознакомления начинающих, и только после этого мы сможем начать конструктивное обсуждение в соответствующей теме
Стрелка поворачивается и обратно, ну, скинь эти примеры, я посмотрю и я более чем уверен, что прямо необходимости превышать лимит хештаблиц в 256 имеет смысл (что я и писал выше). Если же тебя так задевает, что я не считаю твою наработку полезной, то уж извини, моё мнение в этом плане не измениться, ибо просто на просто захломлять карту псевдо API ещё и через cjass - ну нонсенс.
И где это в итоге применялось? Нигде? О чём и речь.
Если вы были бы автор этой работы, то имели бы представление о том где это используется. Так что призываю использовать те аргументы, за которые можете нести ответственность
Влод, не воспринимай в штыки, но кроме тебя это кто-то использует? Если да, то покажи мне пожалуйста карту или что-нибудь где это чудо-юдо имеет место быть. Утомляете вы оба "если что-то есть, значит оно нужно". Речь о распространении тех или иных систем и в целом их применении. Если же ты один сам и используешь свою систему - это не значит, что она "о том где это используется", если случай единичный. Я разобрал предостаточно карт и что-то нигде этой системы не увидел, хватит уже пытаться оправдать глупости.
Говоря проще, твой юзкейс - это полноценный бред, который не встречается нигде.
Так статья на то и нужна, что предупреждает людей так не делать. Ты ведь не думаешь, что зашедшие читать эту статью знают правильные юзкейсы?
Может там конечно не совсем ясно донесена мысль, но суть такая: не создавайте таблицы в больших количествах. Все остальное вы уже начинаете додумывать.
Ну, это уже другой юзкейс, я повторюсь "Я говорю, если локальные таблицы постоянно создавать." если ты имеешь ввиду local hashtable, то таких юзкейсов нет вообще. Если же ты просто про "каждая система - своя хештаблица", то даже так добраться до 256 надо очень и очень постараться. Но я тебя понял, ты делаешь акцент на совсем далёких от джасса, которые ещё и умудрились до хеша добраться. :D
Закончим тем, что фактической необходимости в удалении хештаблицы - нет, ибо за всё это время ещё никто не жаловался на лимит хештаблиц.
StringHash не менялась с самого её начала, единственная возможная проблема - это "столкновение" строк, когда хеш разных строк приводит к одинаковому результату (то бишь полученное хешированное число одинаковое), но это не так просто достичь и большинство этих проблем создано ограничением integer типа в Jass на int32_t (хотя само значение в памяти использует uint32_t). Но если ответить на твой вопрос и не затрагивать эти нюасны, то ответ - нет.
Не совсем по теме, но скажу так, патчить именно файл game.dll - всегда плохо, так как ломаются хеш суммы, да и аутентичность файла летит в урну. Правильный выход - патчить game.dll напрямую в памяти, что убирает вышеупомянутую проблему и позволяет \\\"на ходу\\\" патчить и снимать патчинг тех или иных данных, что по факту делает моя WFE. Альтернатива снятия 8 мб файла (которая и лучше) - это Map Size Limit Remover от Karaul0v, что позволяет не затрагивать сам game.dll но получить тот же эффект.
В остальном, любые дефолтные хаки/программы для War 3 как раз и делают то, что я описал выше, модифицируют память, в которой хранится game.dll, да и на деле это не \\\"хаки\\\" библиотеки, но это в целом и не важно. А набор программ, которые модифицируют игру - навалом (правда 99% из них - это мапхаки всякие).
Unryze, благодарю за замечание насчет хешсумм... Насколько хэшсуммы файлов важны в рамках движка warcraft-a? Спешу напомнить, что от перестановки мест слагаемых сумма не меняется. Поэтому если посчитать суммарное число, которое я отнял или прибавил в шестнадцатиричном коде модифицироаэванных ячеек, а потом компенсировать его в некоторый свободный регистр (или в текстовую информацию) в файле, то мы выравняем хешсумму.
Дам простой пример с картами Вар 3, любое изменение war3map.j или какого-либо файла, который сравнивается по хеш-суммам, карта считается \"новой\" и начинает качаться по-новой. Тот же эффект и тут, банально w3l или же всякие платформы типа Iccup или же RGC могут ввести проверку и там не получится поиграть, пока это не будет исправлено. Похожее было, когда я добавил иконку для war3.exe, оно напрочь отказывалось работать со всеми Battle.net (PVPGN) платформами как раз из-за разницы хеш-сумм.
В крайнее время задаю ряд вопросов на xgm, т.к. собираю информацию перед чисткой оригинальных mpq архивов и некоторых сопутствующих файлов (подробнее об этом позже). Так что даже замена одной единственной модели повлечет за собой несовместимость или несопостовимость данных при игре по сети, с игроком, который играет на чистой сборке. Не говоря уже о том что односторонняя модификация файлов будет результативна лишь для конкретной персоны. Но меня это не останавливает.
Замена моделей в MPQ ни на что не влияет, можешь их менять как твоей душе угодно. Исключение Рефордж (там вроде есть проверка CASC файлов на валидность и их автоматическое исправление), а на патчах-старичках такого нет и можно делать по факту что угодно. :)
Unryze, вы могучий кодер, и для меня честь читать ваши развернутые ответы в трэдах моих вопросов.
Благодарю за комплимент, но я лично себя считаю немного выше-среднего в этом плане (я строго критикую как других, так и себя точно так же). В остальном если у тебя будут ещё какие-то вопросы, можешь и напрямую мне в Дискорд писать, ибо оповещения в Дискорде таки удобнее, чем обновлять страницу на форуме. :D
Не совсем по теме, но скажу так, патчить именно файл game.dll - всегда плохо, так как ломаются хеш суммы, да и аутентичность файла летит в урну. Правильный выход - патчить game.dll напрямую в памяти, что убирает вышеупомянутую проблему и позволяет "на ходу" патчить и снимать патчинг тех или иных данных, что по факту делает моя WFE. Альтернатива снятия 8 мб файла (которая и лучше) - это Map Size Limit Remover от Karaul0v, что позволяет не затрагивать сам game.dll но получить тот же эффект.
В остальном, любые дефолтные хаки/программы для War 3 как раз и делают то, что я описал выше, модифицируют память, в которой хранится game.dll, да и на деле это не "хаки" библиотеки, но это в целом и не важно. А набор программ, которые модифицируют игру - навалом (правда 99% из них - это мапхаки всякие).
Unryze, ещё раз говорю: это подложка, а не само хп. Вот например какой результат дают
call SetCSimpleTextureTexture(pStatBarTexture, "ReplaceableTextures\\PassiveButtons\\PASBTNHumanArtilleryUpOne.blp", false)
"pStatBar — это чёрная подложка под зелёной полоской" не "pStatBarTexture", так что ты вообще не на то ответил, потому не надо всякие "ещё раз говорю", когда изначально ты тоже ответил неверно.
оффсет 0x134 - верхняя текстура, 0х144 нижняя, по памяти неправильно написал.
Для ХП баров ничего не завезли? Вообще как-то можно получить указатель на хп-бар юнита, или всё гораздо сложнее и нужна отдельная DLL?
pUnit = ConvertHandle( unit )
pPreselectUI = ReadRealMemory( pUnit + 0x50 )
pStatBar = ReadRealMemory( pPreselectUI + 0x0C ) это CStatBar, расширение CSimpleStatusBar
Так как pStatBar - это расширение симплфреймов, то большинство функций оттуда уже будет работать. Далее:
pStatBarTexture = ReadRealMemory( pStatBar + 0x144 ) Это CSimpleTexture.
Все хотелки реализуемы, было бы кому оно нужно и был бы он готов заплатить за моё время, мне уже лень делать больше, чем я уже сделал на одном энтузиазме. :)
pStatBar — это чёрная подложка под зелёной полоской, а саму зелёную полоску хп как получить?
pStatBarTexture = ReadRealMemory( pStatBar + 0x144 ) Это CSimpleTexture. Не ожидал, что и так доскональный разбор придётся пояснять. :D
У Cooldown UI в старых версиях отображался кулдаун в точности до десятых, если кулдаун меньше 10 сек, сейчас только если меньше 1 сек, в остальных случаях округляется, это как-то можно пофиксить?
Нет, нельзя, подавляющее большинство попросило это убрать, вот и убрал. Делать настраиваемой опцией слишком лень. :(
Increased Replay Panel priority, so it is no longer behind GameUI Console.
Note: this happened as I forgot to raise its priority to 1 higher than the console's.
Increased Quick Message Hotkey priority, so you can bind Numpad+ and Numpad-.
Note: if these binds are used, then it will no longer move camera.
Reworked KeyParser API, now it can support SYSKEY + +/NumPad+, previously it was skipping them due to '+' being present, while it originally served as a combination key.
Note: This does not (and previously did not) affect +/NumPad+ keys being used on their own.
*NEW FEATURE* Buff Bar in Interface Section, this allows you to show/hide buff bar separately, it is no longer attached to InfoBar.
*NEW FEATURE* Upgraded Buff Bar in Interface Section, this allows you to move the buff bar above Console (like it was previously by default in WFE).
*NEW FEATURE* Draw Buff Duration in Interface Section, this allows you to turn on/off Buff Duration drawing.
Fixed old Warcraft 3 bug with Item Cooldown Indicators that failed to hide, and would draw your cooldown on top of the items of your enemy.
In short, if you use let's say item 'shas' and enemy has item on the slot where you have cooldown indicator active, it will draw on top if, as if it's on cooldown.
*clap-clap* Blizzard. <_>"
Fixed Magic Resist printer not printing any values, now it's working again.
миф который я сам для себя придумал и даже не проверял: постоянно юзать Player( 0x00 ) медленее, чем обращаться к глобальной переменной этого игрока
может у кого-нибудь тоже такая мысль мелькала
Это не миф, тут опять же будет Player( 0 ) медленнее, ибо лишние действия:
GetHandleId берёт 2ms, push переменной ещё 2ms, потому pTemp (который Player( 0 ) присвоенный) по факту будет иметь нулевую задержку, так как getvar выполняется очень быстро.
А Player( 0 ) - это в начале вызов нативки, затем пуш числа, и затем уже setvar. Говоря проще, практически всегда, чем больше действий, тем больше выйдет байткода, в итоге потребуется больше времени на выполнение операции.
> Pow( a, a ) в сравнении с a * a
a * a = a^2, а не a^a.
Это был краткий пример, где квадрат убирают и ставят умножение, пример dx * dx вместо Pow( dx, 2 ). Хотя правильнее было бы взять в пример 2 * 2 = Pow( 2, 2 ) и было бы меньше путаницы. В итоге я хотел написать одно, а написал чуть ли не ересь. :D Спасибо, поправил на прямой пример.
Unryze, ты видимо как-то криво отвечаешь. Вот с твоей же цитаты.
Ты сам придумал про единожды, а я изначально сразу указал кейс.
Весь поинт сообщения как раз в том, что лучше создавать только ограниченное количество таблиц на карту. Потому что могут найтись уникумы, которые на каждый каст будут новую таблицу заводить. Так что я не знаю что там придумать пытаетесь.
Я не заметил если честно вот этого "Поэтому если в каком-то действии постоянно создаются таблицы, память будет течь.", но я опять же расписал дальше, что такие юзкейсы - не показатель и не встречаютяс нигде, хватит уже муслоить ересь, пожалуйста. Да и ссылаясь на твоё: "если люди умудряются память даже точками засрать", то твоя позиция имеет ещё меньше смысла, ибо невозможно вылечить тех, кто не умеют кодить или кодят на уровне "работает и пофиг".
Повторяю последний раз, то, что у нас нет возможности удалить Хештаблицу не меняет ровным счётом ничего, ибо нет адекватного юзкейса, где кто-то бы ударился даже в лимит хештаблиц или банально создавал бы их локально (хрен пойми зачем). Говоря проще, твой юзкейс - это полноценный бред, который не встречается нигде.
в остальных функциях оно обнуляется даже при условии что перед присвоением null оно и так будет null
Ну, 10 нс +- это затрагивает, если очень брезгует u_temp можно заменить на bj_lastCreatedUnit при желании или на свою глобалку. Но утечек там быть не должно и не может быть.
Но не суть, сейчас внесу правку.
ScorpioT1000, То есть возможно если юнит отсутствует или у него абилка/предмет/тип отсутствует, возвращается false?
Результат - функция выполнила действие или нет, и так очень у многих функций так, да и не только в Варкрафт 3 так. Почти весь API DirectX - это BOOL (uint32_t) значение, чтобы вернуть результат операции и т.д.
Я отвечал на это, "Я говорю, если локальные таблицы постоянно создавать" и "В цикле например или на каких-то событиях." В сообщении же вроде видны цитаты. :(
» Warcraft III - Lua / Warcraft III - Lua
» Warcraft III - Lua / Warcraft III - Lua
» WarCraft 3 / Hashtable - работаем с хеш-таблицей
» WarCraft 3 / Hashtable - работаем с хеш-таблицей
» WarCraft 3 / Hashtable - работаем с хеш-таблицей
» WarCraft 3 / Hashtable - работаем с хеш-таблицей
» WarCraft 3 / Hashtable - работаем с хеш-таблицей
» WarCraft 3 / native StringHash
» WarCraft 3 / Какие "хаки" библиотеки Game.dll вы знаете?
» WarCraft 3 / Какие "хаки" библиотеки Game.dll вы знаете?
» WarCraft 3 / MemoryHackAPI
оффсет 0x134 - верхняя текстура, 0х144 нижняя, по памяти неправильно написал.
» WarCraft 3 / MemoryHackAPI
» WarCraft 3 / Jass Pseudo Group API
» WarCraft 3 / WFE - Warcraft Feature Extender
» WarCraft 3 / MemoryHackAPI
Ред. Unryze
» WarCraft 3 / WFE - Warcraft Feature Extender
Github: github.com/UnryzeC/WFE-Release/releases
Note: this happened as I forgot to raise its priority to 1 higher than the console's.
Note: if these binds are used, then it will no longer move camera.
Note: This does not (and previously did not) affect +/NumPad+ keys being used on their own.
In short, if you use let's say item 'shas' and enemy has item on the slot where you have cooldown indicator active, it will draw on top if, as if it's on cooldown.
*clap-clap* Blizzard. <_>"
» WarCraft 3 / MemoryHackAPI
» WarCraft 3 / Jass Pseudo Group API
Ред. Unryze
» WarCraft 3 / Jass MythBusters
Ред. Unryze
» WarCraft 3 / Jass MythBusters
» WarCraft 3 / Hashtable - работаем с хеш-таблицей
» WarCraft 3 / Jass MythBusters
Ред. Unryze
» WarCraft 3 / Jass Pseudo Group API
Но не суть, сейчас внесу правку.
» WarCraft 3 / Странные функции в jass
» WarCraft 3 / Hashtable - работаем с хеш-таблицей