15

» WarCraft 3 / Вопросы по мемхаку

DracoL1ch:
ссылаются на свою, меняй описание в завимисоти от выделенного юнита локальным игроком по таймеру
Благодарю.
15

» WarCraft 3 / Вопросы по мемхаку

quq_CCCP:
Ну и для всего прочего были, там не сложно. Смешения где лежат ссылки на строки. В мх анрайза вроде тоже было, покрайней мере для юнитов UnitNormalAPI и UnitBaseAPI, ну можно посмотреть в каких смещених относительно адресса итема лежат строки, предмет и юнит - оба виджеты, возможно прокатит с оффсетами юнита, но это неточно =)
Так, получить и изменить описание предметов из их кешированной структуры мне удалось.
Это уже совсем роскошь, но описание конкретных предметов можно изменять?) Или айтемы при создании не копируют строку, а напрямую ссылаются на строку из своей кешированной структуры?
15

» WarCraft 3 / Вопросы по мемхаку

quq_CCCP:
JackFastGame, они есть в мемхаке, SetObjectTip\ubertip или как то так, для всех полей есть функции.
В каком именно мемхаке? Можно ссылку? Хоть убейте, этих функций я не нашёл ни в карте из темы про детект физического урона, ни в мемхаке Анрайза.
15

» WarCraft 3 / Вопросы по мемхаку

quq_CCCP:
Новые функции для предметов завезли, лич вылечил проблемы с фаталами. Теперь можно менять описания у всего и вся.

Мемхак к себе в карту копируем, что надо - просим у лича или гуглим, что ненадо вырезаем.
Прошу прощения за некропостинг, а где можно найти функции для изменения описания предметов? Поиск по сайту самым релевантным выдаёт ресурс с детектом физического урона.
15

» WarCraft 3 / Вращающиеся модели

Bergi_Bear:
И период наверное лучше 0.03125.
Чем? В игре больше 32 кадров в секунду.
15

» WarCraft 3 / Как запретить возможность сохраняться?

Утилка Анрайза помогла, спасибо ему.
globals
		timer SaveBlockTimer = CreateTimer( )
		dialog PreventSave___Dialog = DialogCreate()
	endglobals
		
	function PreventSave___Exit takes nothing returns nothing
		call DialogDisplay(GetLocalPlayer(), PreventSave___Dialog, false)
	endfunction

	function PreventSave___StopSave takes nothing returns boolean
		local boolean GameAllowSave = false

		if GameAllowSave == false then
			call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, "Save Game is Disabled")
			call DialogDisplay(GetLocalPlayer(), PreventSave___Dialog, true)
		endif

		call TimerStart( SaveBlockTimer, 0.00, false, function PreventSave___Exit)

		return false
	endfunction

	function AntiSaveSystemInit takes nothing returns nothing
		local trigger AntiSaveLocalTrigger = CreateTrigger()
		call TriggerRegisterGameEvent( AntiSaveLocalTrigger, EVENT_GAME_SAVE )
		call TriggerAddCondition( AntiSaveLocalTrigger, Filter(function PreventSave___StopSave ) )
		set AntiSaveLocalTrigger = null
	endfunction
15

» WarCraft 3 / JNGP: Rebuild от PT153

PT153:
Если вкратце: новый pjass не сообщенает некоторые неошибки, которые сообщал старый. И наоборот сообщается те ошибки, которые всегда ведут к крашу, а старый pjass их не сообщал.
Новый pjass с мемхаком дружит?
Новый TESH имеет лучший функционал: можно добавлять свои функции и шаблоны.
А вот это уже интересно. Свои функции надо вручную добавлять или он сам ловит их сигнатуры в коде карты?
15

» WarCraft 3 / Движение без поворота

plllo2:
я так понимаю вот так хочешь сделать? www.youtube.com/watch?v=lAeT55AO2-Y
Призови бога вц3 Драколича, мб поможет )
Да, только юнит должен не атаковать, а просто анимацию атаки проигрывать)
Ну там как я понял он инструментами мемхака это сделал вроде SetUnitFacingInstant. Попробую что-нибудь придумать.

Так, поворот я сделал, SetUnitFacingInstant действительно свою работу выполняет. Осталось понять, как сделать так, чтобы анимация атаки не сбивалась анимацией передвижения.
15

» WarCraft 3 / Как узнать версию графики в Warcraft 3 Reforged?

Bergi_Bear:
И самые главный вопрос зачем всё это?
Например для изменения размера некоторых эффектов, которые слишком большие в HD режиме
Или же можно сделать полное отключение некоторых графических элементов в SD или HD графике, для повышения производительности на слабых компьютерах
Я не мог перенести Скиллшот Арену на Рефорджед из-за этого бага. Масштаб у всех юнитов разный, даже у снарядов. Из-за этого перенос карты невозможен, т.к. если делать масштаб под одну графику, на другой будет дикое несоответствие хитбоксов и визуала, что очень важно для карты. Делал этот багрепорт ещё когда бета Рефорджеда была. До сих пор не пофиксили.
15

» IrInA Host Bot / IrInA Host Bot

world_editor:
Подскажите с проблемой в картах орпг (любых), ввожу код сохранения персонажа и тут же разрывает соединение. В конекторе надпись: сервер удалил хоста, и такое только с игроками, до этого момента всё хорошо работало. Как можно исправить?
Походу на Ирине и локально ники разные у игроков. Из-за этого десинхрон возникает в картах при проверке на ник. У меня самого такая хрень: мой ник я вижу как JackFast..., у остальных он нормальный: JackFastGame. Странная фигня.
15

» WarCraft 3 / SetUnitName мемхак

DracoL1ch:
без восстановления памяти ты скатишься к рандомным крашам после игры, ставь актуальную версию хака
Я видел во второй версии хака функцию InitResoreMemoryOnExit, её надо юзать? У меня после попытки выйти из карты зависает Варкрафт с последующим бесконечным заполнением оперативки процессом War3.exe. Как правильно пользоваться восстановлением памяти?
Я правильно понимаю, что она должна выгружать все заинжекченные dll после выхода из карты?
15

» WarCraft 3 / Lua и ООП

Почему self = nil можно не делать, ведь удаляя объект из списка (таблицы) экземпляров, мы удаляем не сам объект, а ссылку на него из этого списка, разве нет?
Этого будет достаточно?
function Skillshot:Create (...)
    local this = {}
    
    table.insert(skillshotObjectList, this)

	...
end
function Skillshot:Destroy ()
    table.remove(skillshotObjectList, TableFindElement(skillshotObjectList, self))
end
15

» WarCraft 3 / Lua и ООП

prog:
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
15

» WarCraft 3 / Lua и ООП

PT153:
Я не спец, но разве не у obj нужно ставить переменную damage?
Ох, действительно, спасибо!
prog:
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
15

» WarCraft 3 / Lua и ООП

prog:
Хоть убейте, не нашёл. Как мне, к примеру, реализовать внутри метода "класса" цикл 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
15

» WarCraft 3 / Lua и ООП

PT153:
Никаких статей по этому поводу не нашёл
Плохо искали.
Хоть убейте, не нашёл. Как мне, к примеру, реализовать внутри метода "класса" цикл foreach, который пробегает по всем созданным объектам данного "класса"?
15

» WarCraft 3 / Lua и ООП

Hate:
луа не ооп, не нужно страдать в нем этим
Тогда какой самый адекватный способ реализации чего-то близкого к ООП? Не к Джассу же возвращаться.
15

» WarCraft 3 / Кулдаун спелов

quq_CCCP:
Bergi_Bear, кстати они таки сделали StartAbilityCooldown или нет?
К релизу должны подвезти.
15

» WarCraft 3 / Бета версия Warcraft III Reforged 1.32

Ребят, как кодить на Луа в Рефорджеде? Я подключил к VSCode плагин для Lua, как его в карту интегрировать?
15

» WarCraft 3 / Бета версия Warcraft III Reforged 1.32

Игровые скрины очень уж похожи на ВК3, в который импортнули модельки...