SetAbilityUbertip('I000',1,"Test") ничего не изменил
А на счет оффсетов, где их глянуть можно?
GetAbilityStringParam2('I000',0x158,1) выдает null, при том что в полях записаны значения
Для цикла от 0 до 4000 (по +4) так же всегда null
PS: для абилок нормально выдает
Ах да, не пояснил, 'I000' - итем
GetAbilityUIDefAddr('I000') дает 0
PPS: предмет был создан на карте
Nelloy, ну тебе даже 1000 лвлов бы не хватило? У меня пассивка со 1000 уровнями спокойно прелоадится, очень тупо, значимо влияет на время загрузки карты, но очень легкореализуемо. А вообще при фантазии 100-200 лвлов хватить должно, если прям ппц предельной точности не должно быть.
Ну, офк, если через мемхак разберешься, будет лучше, это так, просто как альтернатива.
Допустим множитель точность 0.01 и шанс с точностью до 1%, 100 лвлов на каждый вариант множителя, от 1.0 до 3.0 нужно 20000 лвлов способности
Так что нет, спасибо
Вот именно предложенную тобой альтернативу решил переделать))
Стоит выложить наработку по генерации рельефа с помощью шумов Перлина?
Ничего особо примечательного там нет, и не подготовлена как наработка.
Спасибо велосипеду, разобрался. xgm.guru/p/wc3/181566
С критами и вовсе практически нереализуемо для критов, создать абилки с лвлас под все вариации шанс-множитель просто не реально.
В хаке есть замечательные функции
function SetAbilityRealParam takes integer id, integer off, real newVal returns boolean
function GetAbilityRealParam takes integer id, integer off returns real
И их аналоги для других типов, но, увы, никакой инфы по тому как ими пользоваться нет в природе... Ладно, id - понятно. off - предполагаю смещение в массиве полей абилки, буду вечером тестить, выводя все подряд и искать нужные поля
А отлавливать источник урона (атака или абилка) - не хочу, слишком много гемора
В перспективе много всего, для начала для каждого игрока сделать по способности на уклонения и во время игры динамически менять показатель шанса
Аналогично с критами, чтобы в процессе игры менять шанс и множитель
Думаю разобравшись с этими 1-2 примерами дальше смогу делать сам
В отсутствие примеров не могу понять как с vjass'ом динамически редактировать поля способностей
Решено, использовал перевод в Jass отсюда xgm.guru/p/wc3/dooandw3etojass, но там в базу пишутся радианы. PS: затея использовать динамический ланд пока жива
Не чудеса)) даже на твоем видео видно, после выбора области, вокруг кнопки навыка появляется зеленая рамочка, вот именно пока она горит, случайно кликнув можно сорвать приказ на применение
Ммм... Догадываюсь что не должен, но реагирует (Да, на простые клики ПКМ)
Суть в том что канал прерывается на этапе подготовки, а не применения ( подготовка заклинания стоит 0.00)
Порядок как только не менял, без паузы никак (ранее сделанное не позволит), да и видно как текущая анимация прерывается, думал на команду анимации... А с паузой... наталкивает на мысль, что она может срывать текущую анимацию, надо проверить с таймером
Если вкратце, то хочу красиво отображать бафы и дебафы. Две абилки набирают стаки дебафов, третья, в зависимости от того что висит на юнитах вокруг, хилит, дамажит или бафает цель. Длительность можно прокачивать с лвлом, потому вариант с дамиком отпадает (не охота лишние срабатывания таймера плодить). Почти идеально подходит вариант ауры с радиусом 0.1, если бы не ее иконка в панели. Хочу вплести в эти функции:
function SpellChangeStats_Timer takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer ht = GetHandleId(t)
local string stat = LoadStr(udg_Hash_Table, ht, StringHash("Stat"))
local real Val = LoadReal(udg_Hash_Table, ht, StringHash(stat))
local integer hTarg = LoadInteger(udg_Hash_Table, ht, StringHash("hTarg"))
Есть мысли на счет глобалок с ~0 таймером жизни, которые бы перекрывали на этот промежуток времени срабатывание крита для игрока применившего спелл, но не оч элегантное решение. И исходя из этого другой вопрос: после нанесения урона, что сработает раньше, висящий после команды 0-й таймер или событие полученного урона?
Не очень удачно мыслишь, тут нужна динамика.
А так как у Jass-а возможностей мало, приходится действовать самыми изощренными методами, (как я ранее указал "сделать это не так просто")
Но если тебе очень нужно, то советую посмотреть наработки систем отлова урона, и внедриться в код что бы понять как это работает, и на этой основе лепить уже свое.
Не понял что не так с динамикой... имел ввиду следующее: спел героя после нанесения урона вешает буленовской флаг к юниту, пока флаг висит ~0сек, критов нет
Завтра надо будет потестить
Вопрос в том, как отличить урон с автоатаки от урона со спела
Не сложно отловить весь урон
Да и в будующем было бы полезно научиться их различать для реализации каких-нибудь мудреных пассивок
Есть мысли на счет глобалок с ~0 таймером жизни, которые бы перекрывали на этот промежуток времени срабатывание крита для игрока применившего спелл, но не оч элегантное решение. И исходя из этого другой вопрос: после нанесения урона, что сработает раньше, висящий после команды 0-й таймер или событие полученного урона?
Для проверки заполнял все соответсвующие массиву области. Если конкретнее, то 30 областей по 48 "деревьев" и 48 блокираторов. В конце гуишный триггер должен написать сообщение в чат. Собственно при заполнении примерно на половину, новые перестают выставляться, а сообщение не выводится
Скопипастил в другой триггер один из 2х циклов заполнения - заработало нормально
Но все же любопытно что это могло быть
Ред. Nelloy
» WarCraft 3 / Memory Hack
А на счет оффсетов, где их глянуть можно?
GetAbilityStringParam2('I000',0x158,1) выдает null, при том что в полях записаны значения
Для цикла от 0 до 4000 (по +4) так же всегда null
PS: для абилок нормально выдает
Ах да, не пояснил, 'I000' - итем
GetAbilityUIDefAddr('I000') дает 0
PPS: предмет был создан на карте
» WarCraft 3 / Memory Hack
Ред. Nelloy
» WarCraft 3 / Memory Hack
А, да. У итемов же 2 описания... Надеюсь получится менять оба
» WarCraft 3 / Memory Hack
Так что нет, спасибо
Вот именно предложенную тобой альтернативу решил переделать))
Стоит выложить наработку по генерации рельефа с помощью шумов Перлина?
Ничего особо примечательного там нет, и не подготовлена как наработка.
Спасибо велосипеду, разобрался. xgm.guru/p/wc3/181566
» WarCraft 3 / Memory Hack
В хаке есть замечательные функции
function SetAbilityRealParam takes integer id, integer off, real newVal returns boolean
function GetAbilityRealParam takes integer id, integer off returns real
И их аналоги для других типов, но, увы, никакой инфы по тому как ими пользоваться нет в природе... Ладно, id - понятно. off - предполагаю смещение в массиве полей абилки, буду вечером тестить, выводя все подряд и искать нужные поля
А отлавливать источник урона (атака или абилка) - не хочу, слишком много гемора
» WarCraft 3 / Memory Hack
Аналогично с критами, чтобы в процессе игры менять шанс и множитель
Думаю разобравшись с этими 1-2 примерами дальше смогу делать сам
В отсутствие примеров не могу понять как с vjass'ом динамически редактировать поля способностей
Ред. Nelloy
» WarCraft 3 / Декорации
» WarCraft 3 / Канал
» WarCraft 3 / Канал
Ред. Nelloy
» WarCraft 3 / Канал
» WarCraft 3 / Канал
Ред. Nelloy
» WarCraft 3 / Канал
» WarCraft 3 / Канал
» WarCraft 3 / Канал
Ред. Nelloy
» WarCraft 3 / Канал
Суть в том что канал прерывается на этапе подготовки, а не применения ( подготовка заклинания стоит 0.00)
» WarCraft 3 / Канал
Ред. Nelloy
» WarCraft 3 / Не отображается юнит
Ред. Nelloy
» WarCraft 3 / Анимации
» WarCraft 3 / Утечки
» WarCraft 3 / Баффы
Ред. Nelloy
» WarCraft 3 / Баффы
local timer t = GetExpiredTimer()
local integer ht = GetHandleId(t)
local string stat = LoadStr(udg_Hash_Table, ht, StringHash("Stat"))
local real Val = LoadReal(udg_Hash_Table, ht, StringHash(stat))
local integer hTarg = LoadInteger(udg_Hash_Table, ht, StringHash("hTarg"))
call SaveReal(udg_Hash_Table, hTarg, StringHash(stat), LoadReal(udg_Hash_Table, hTarg, StringHash(stat)) - Val)
call DestroyTimer(t)
set t = null
call FlushChildHashtable(udg_Hash_Table, ht)
endfunction
local integer ht = GetHandleId(t)
local integer hTarg = GetHandleId(Targ)
call SaveInteger(udg_Hash_Table, ht, StringHash("hTarg"), hTarg)
call SaveStr(udg_Hash_Table, ht, StringHash("Stat"), stat)
call SaveReal(udg_Hash_Table, ht, StringHash(stat), Val)
call SaveReal(udg_Hash_Table, hTarg, StringHash(stat), LoadReal(udg_Hash_Table, hTarg, StringHash(stat)) + Val)
call TimerStart(t, time, false, function SpellChangeStats_Timer)
set t = null
set Targ = null
endfunction
» WarCraft 3 / Триггерный крит
Завтра надо будет потестить
Ред. Nelloy
» WarCraft 3 / Триггерный крит
Не сложно отловить весь урон
Да и в будующем было бы полезно научиться их различать для реализации каких-нибудь мудреных пассивок
Есть мысли на счет глобалок с ~0 таймером жизни, которые бы перекрывали на этот промежуток времени срабатывание крита для игрока применившего спелл, но не оч элегантное решение. И исходя из этого другой вопрос: после нанесения урона, что сработает раньше, висящий после команды 0-й таймер или событие полученного урона?
» WarCraft 3 / WE limits
Скопипастил в другой триггер один из 2х циклов заполнения - заработало нормально
Но все же любопытно что это могло быть
» WarCraft 3 / WE limits