Вот-вот, тоже хотелось бы узнать. Я сейчас использую vJass + cJass (пишу первый раз на них), т.к. после C# хочется писать код без особого синтаксического мусора.
ArhiMEN, а что за код, я чето не понял что это за триггер с переодическим таймером 100 раз в сек, чето делает. Каждый раз создается новая группа, зачем? Обьясни что собрался делать?
Я делал бенчмарк (на попугаях Анрайза) прохода по глобальной группе и локально создаваемой группе, разницы практически нет.
ссылаются на свою, меняй описание в завимисоти от выделенного юнита локальным игроком по таймеру
Я хочу реализовать систему, чтобы в описании предмета показывалось, сколько игрок нанёс этим предметом урона, сколько раз использовал и т.д.
В процессе вспомнил, что Варкрафт не чистит строки, а записывает их в какую-то таблицу со всеми строками, и при создании новой строки проверяет, существует ли такая же в таблице. Если да, то возвращает указатель на неё, если нет, то записывает новую строку в таблицу. Строки в таблице не удаляются до конца игры. Получается, если постоянно динамически менять описание предмета, то игра будет хранить кучу мусорных строк? Допустим у предмета за игру описание сменится 500 раз, и каждый раз строка будет уникальной, описание предмета весит 1 килобайт, значит на каждый такой предмет в процессе игры сгенерится 500 килобайт мусора. Я правильно рассуждаю? Есть лечение?
Привет. Интересно было почитать. А что можно сказать насчет юнитов? Решил провести свой эксперимент, но с юнитами.
Начал с гуишных функций и глобалок, закончил этим. Все возможные проделанные мною варианты утекают, включая этот
Знаю, что некропостинг, но тут локация p не удаляется.
Ну и для всего прочего были, там не сложно. Смешения где лежат ссылки на строки. В мх анрайза вроде тоже было, покрайней мере для юнитов UnitNormalAPI и UnitBaseAPI, ну можно посмотреть в каких смещених относительно адресса итема лежат строки, предмет и юнит - оба виджеты, возможно прокатит с оффсетами юнита, но это неточно =)
Так, получить и изменить описание предметов из их кешированной структуры мне удалось.
Это уже совсем роскошь, но описание конкретных предметов можно изменять?) Или айтемы при создании не копируют строку, а напрямую ссылаются на строку из своей кешированной структуры?
Новые функции для предметов завезли, лич вылечил проблемы с фаталами. Теперь можно менять описания у всего и вся.
Мемхак к себе в карту копируем, что надо - просим у лича или гуглим, что ненадо вырезаем.
Прошу прощения за некропостинг, а где можно найти функции для изменения описания предметов? Поиск по сайту самым релевантным выдаёт ресурс с детектом физического урона.
Если вкратце: новый pjass не сообщенает некоторые неошибки, которые сообщал старый. И наоборот сообщается те ошибки, которые всегда ведут к крашу, а старый pjass их не сообщал.
Новый pjass с мемхаком дружит?
Новый TESH имеет лучший функционал: можно добавлять свои функции и шаблоны.
А вот это уже интересно. Свои функции надо вручную добавлять или он сам ловит их сигнатуры в коде карты?
Да, только юнит должен не атаковать, а просто анимацию атаки проигрывать)
Ну там как я понял он инструментами мемхака это сделал вроде SetUnitFacingInstant. Попробую что-нибудь придумать.
Так, поворот я сделал, SetUnitFacingInstant действительно свою работу выполняет. Осталось понять, как сделать так, чтобы анимация атаки не сбивалась анимацией передвижения.
Подскажите с проблемой в картах орпг (любых), ввожу код сохранения персонажа и тут же разрывает соединение. В конекторе надпись: сервер удалил хоста, и такое только с игроками, до этого момента всё хорошо работало. Как можно исправить?
Походу на Ирине и локально ники разные у игроков. Из-за этого десинхрон возникает в картах при проверке на ник. У меня самого такая хрень: мой ник я вижу как JackFast..., у остальных он нормальный: JackFastGame. Странная фигня.
без восстановления памяти ты скатишься к рандомным крашам после игры, ставь актуальную версию хака
Я видел во второй версии хака функцию InitResoreMemoryOnExit, её надо юзать? У меня после попытки выйти из карты зависает Варкрафт с последующим бесконечным заполнением оперативки процессом War3.exe. Как правильно пользоваться восстановлением памяти?
Я правильно понимаю, что она должна выгружать все заинжекченные dll после выхода из карты?
Почему self = nil можно не делать, ведь удаляя объект из списка (таблицы) экземпляров, мы удаляем не сам объект, а ссылку на него из этого списка, разве нет?
Этого будет достаточно?
function Skillshot:Create (...)
local this = {}
table.insert(skillshotObjectList, this)
...
end
function Skillshot:Destroy ()
table.remove(skillshotObjectList, TableFindElement(skillshotObjectList, self))
end
JackFastGame, если не важен порядок, то практически в любом языке один из самых быстрых способов удаления чего-либо из списка это поменять его местами с последним элементом списка, занулить последний элемент и сократить длину списка на 1.
Тьфу, оказывается я неправильно вызывал функцию.
Это полностью очищает экземпляр из памяти?
function Skillshot:Destroy ()
skillshotObjectList[self.id] = skillshotObjectList[skillshotIndex]
skillshotObjectList[self.id].id = self.id
table.remove(skillshotObjectList)
self = nil
skillshotIndex = skillshotIndex - 1
end
Drulia_san, фигню понаписал, у тебя методы создаются для каждого экземпляра, а должны для индексной таблицы создаваться один раз, иначе зачем тебе метатаблица и индексная таблица тогда...
Да, сразу это заметил. Но это ведь для наглядности, ничего не мешает вынести эти методы.
В общем, всем спасибо, практически разобрался в принципе работы. Отдельная благодарность к Drulia_san.
Единственное, нужно уточнить один нюанс. Как реализовать деструктор? Имеется список skillshotObjectList, содержащий все создаваемые экземпляры. Необходимо реализовать удаление экземпляра из памяти и соотвественно очистку его из skillshotObjectList.
function Skillshot:Create (...)
local this = {}
skillshotIndex = skillshotIndex + 1
skillshotObjectList[skillshotIndex] = this
this.id = skillshotIndex
...
end
function Skillshot.Destroy (this)
???
skillshotIndex = skillshotIndex - 1
end
Хоть убейте, не нашёл. Как мне, к примеру, реализовать внутри метода "класса" цикл foreach, который пробегает по всем созданным объектам данного "класса"?
Хранить список созданных экземпляров где-нибудь, например в метатаблице, чтобы был простой доступ к этому списку. Создание экземпляров реализовать через метод-фабрику, который инициализирует экземпляр и назначает ему метатаблицу.
Для большего удобства - список экземпляров можно либо записывать в каждый экземпляр при его создании либо положить в индексную таблицу в метатаблице, чтобы до этого списка было еще проще добраться из экземпляров.
Почему-то в цикле он пробегает только по последнему созданному объекту, причём сколько всего объектов, столько раз по нему и проходит.
Реализовывал и через pairs, и через for i = 1, #list.
Для добавления в список я использую table.insert(list, object).
Что я делаю не так?
Вот фрагмент кода. В main loop выводит урон последнего созданного объекта.
Skillshot = {}
list = {}
function Skillshot:Create (damage)
local obj = {}
setmetatable(obj, self)
self.__index = self
table.insert(list, obj)
self.damage = damage
return obj
end
function Skillshot.Update ()
--Main loop
for i = 1, #list do
local obj = list[i]
Debug("i = " .. i .. " " .. list[i].damage)
end
end
do
local InitGlobalsOrigin = InitGlobals
function InitGlobals()
InitGlobalsOrigin()
function test()
local dmg = 5
TimerStart(CreateTimer(), 2.0, true, function ()
dmg = dmg + 5
local skillshot = Skillshot:Create(dmg)
end)
end
test()
end
end
Отредактирован JackFastGame
» WarCraft 3 / Как через условие подключить звуковой патч mix?
» WarCraft 3 / Как через условие подключить звуковой патч mix?
» WarCraft 3 / Хэш-таблицы в vJass
» WarCraft 3 / кое что о джассе
» WarCraft 3 / Утечки в коде
» WarCraft 3 / 20. Оптимизация
» WarCraft 3 / Вопросы по мемхаку
В процессе вспомнил, что Варкрафт не чистит строки, а записывает их в какую-то таблицу со всеми строками, и при создании новой строки проверяет, существует ли такая же в таблице. Если да, то возвращает указатель на неё, если нет, то записывает новую строку в таблицу. Строки в таблице не удаляются до конца игры. Получается, если постоянно динамически менять описание предмета, то игра будет хранить кучу мусорных строк? Допустим у предмета за игру описание сменится 500 раз, и каждый раз строка будет уникальной, описание предмета весит 1 килобайт, значит на каждый такой предмет в процессе игры сгенерится 500 килобайт мусора. Я правильно рассуждаю? Есть лечение?
» WarCraft 3 / Утекают ли не обнулённые переменные типа handle
» WarCraft 3 / Утекают ли не обнулённые переменные типа handle
» WarCraft 3 / Вопросы по мемхаку
Отредактирован JackFastGame
» WarCraft 3 / Вопросы по мемхаку
Это уже совсем роскошь, но описание конкретных предметов можно изменять?) Или айтемы при создании не копируют строку, а напрямую ссылаются на строку из своей кешированной структуры?
» WarCraft 3 / Вопросы по мемхаку
» WarCraft 3 / Вопросы по мемхаку
» WarCraft 3 / Вращающиеся модели
» WarCraft 3 / Как запретить возможность сохраняться?
» WarCraft 3 / JNGP: Rebuild от PT153
» WarCraft 3 / Движение без поворота
Ну там как я понял он инструментами мемхака это сделал вроде SetUnitFacingInstant. Попробую что-нибудь придумать.
Отредактирован JackFastGame
» IrInA Host Bot / Главная страница
Отредактирован JackFastGame
» WarCraft 3 / SetUnitName мемхак
Я правильно понимаю, что она должна выгружать все заинжекченные dll после выхода из карты?
» WarCraft 3 / [Reforged] Главное меню в стиле LK
» WarCraft 3 / Релиз Warcraft 3: Reforged
» WarCraft 3 / Lua и ООП
Этого будет достаточно?
Отредактирован JackFastGame
» WarCraft 3 / Lua и ООП
Это полностью очищает экземпляр из памяти?
» WarCraft 3 / Lua и ООП
Отредактирован JackFastGame
» WarCraft 3 / Lua и ООП
Реализовывал и через pairs, и через for i = 1, #list.
Для добавления в список я использую table.insert(list, object).
Что я делаю не так?