32

» WarCraft 3 / Карта не запускается + проблемы с редактором

Принятый ответ
SirDragdord, никак, последние патчи баганые, там много чего не работает, играть там не вочто, хотите поиграть - 1.26а к вашим услугам, старшие патчи вара только для ознакомления и обучения, пока не вышел рефордж там нечего делать.
32

» WarCraft 3 / Вопрос по триггерам.

ssbbssc, ну а если базовый реген и реген от силы не считается, как тогда?
32

» WarCraft 3 / Хак на память Warcraft3

Naadir, ну для начала немного учимся работать с jass, то как бы ты не убил карту с такой манерой написания кода...
globals
    hashtable gamedata = InitHashtable( )
endglobals

function Trig_ToMelee_Conditions takes nothing returns boolean
    return ( GetSpellAbilityId() == 'A048' )
endfunction

function Timer_AddSilence_Expires takes nothing returns nothing
    local timer t  = GetExpiredTimer()
    local integer id = GetHandleId(t)
    local unit enemy = LoadUnitHandle( gamedata, id, 0 )
    local integer spellid = LoadInteger( gamedata, id, 1 )
    
    call StartAbilityCooldown( enemy,'A049', -1 )
    set spellid = GetUnitAbility(enemy,spellid) // для начала нам нужно убедится что у юнита есть такая абилка и её адресс коректный.
    if spellid > 1 then //всегда проверяй корректность адрессов, мы нашли адресс способности в памяьти игры, адресс обьекта а не просто РО кода.
       call AddSilenceToAbility(spellid) // функция сайленса, берет адресс способности и записывает по оффсету в структуру способности сведенья о сайленсе, подумай что будет если адресс не верен?
    endif
    set enemy = null 
    set t = null
endfunction

function Trig_ToMelee_Actions takes nothing returns nothing
    local unit enemy = GetSpellAbilityUnit() // создадим переменную чтобы не мучится гуи пережитками...
    local timer t = CreateTimer()
    local integer id = GetHandleId(t)
    call SetUnitArmor(enemy,GetUnitArmor(enemy)*2)
    // 2 = ranger, 1 = instante, 0 = melee, 5 = splash, 6 = mbounce,
    call SetUnitWeaponType(enemy,0)
    call SetUnitAttackRange1(enemy,128)
    call SaveUnitHandle( gamedata, id, 0, enemy )
    call SaveInteger( gamedata, id, 1, GetSpellAbilityId())
    call TimerStart( t, 0.00, false, function Timer_AddSilence_Expires)
    set t = null
    set enemy = null
endfunction

//===========================================================================
function InitTrig_ToMelee takes nothing returns nothing
    set gg_trg_ToMelee = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_ToMelee, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_ToMelee, Condition( function Trig_ToMelee_Conditions ) )
    call TriggerAddAction( gg_trg_ToMelee, function Trig_ToMelee_Actions )
endfunction
Зачем столько триггеров для такого простого спелла переключателя? Достаточно одного.
Ну вот выбор одного из двух состояний, правда хз нах так было заморачиватся, просто морфы и все.
Ну и для переключателей и механик каста лучше использовать не сайленс а мут абилок, от сайленса он отличается тем что не прирывает каста абилки но не дает применять её в ручную. Подробнее можно глянуть в моей карте.
Загруженные файлы
32

» WarCraft 3 / Вопрос по триггерам.

Сравнительно просто на мемхаке, ибо можно отследить и источники регенераций и прочее, но вот сам по себе мемхак сложная наработка на jass и для новичков не подходит, иначе много мороки.
32

» WarCraft 3 / Хак на память Warcraft3

Naadir, нужен таймер на 0.00 сек, после каста абилки, чтобы корректно накладывать на неё сайленс, снимать сайленс, то же самое с кулдауном, ибо триггер срабатывает немного раньше чем ты реально применил способность, и получается что сайленс прилетел до того как ты нажал кнопку абилки.
32

» WarCraft 3 / MemoryHack

ProximityCat, мда, строка... Строки асинхронные обьекты, их вывод на экран не вызовет дисинха.
32

» WarCraft 3 / Проверка кто нанёс урон

PT153, не ваще то могут, они его исправно получают, т.е он проходит как событие EVENT_UNIT_DAMAGED но с тех пор как у юнита хп меньше 0.405 урон перестает влиять на кол-во хп юнита, а так же отсекаются все модификаторы, не вешаются баффы и так далее.
Об этом писал еще Diod на форуме, баг яйца феникса, когда из за морфа бонус хп становился отрецательным и макс хп < 0.405, что делало юнита мертвым.
32

» WarCraft 3 / MemoryHack

  1. ну само собой есть, во первых свободное место, во вторых все строки в варе кешируются, очень, очень, много строк переполнят память выделенную под вар, но их надо настолько много что можно об этом забыть.
  2. Куда указанно, туда и сохраняется.
  3. Таких чудес разумеется не происходит, все делается ручками.
И так, если у вас прелоад експлоит и кешь не заработал, то мемхак и подавно не взлетит, ибо там все куда сложнее. Потом код в студию, что делали и что не получилось.
Ах да, синхронизацию данных никто не отменял, так что кешь или длл Караулова вам понадобится, чтобы как то синхронизировать данные, хоть длл и позволяет это сделать быстро, но тут работа с длл и возможно придется нанимать автора за звонкую монетку, ценник там не 100 руб.
32

» WarCraft 3 / wc3 1.31 и lua

NazarPunk, нужно отказыватся от луа и 1.31 до рефорджа и устранения всех проблем, то завтра близзарды сделают патч на котором будет утекать все и фаталить мили карты через 15 минут игры, будем как в том анекдоте, плакать, колоться и есть кактус?
32

» WarCraft 3 / Синхронизация строк в 1.26

Без кода твоей карты сказать сложно, где ты сел в лужу.
Алгоритм должен быть примерно такой, в архиве карты есть pld файл в котором нет установки имени игрока, но есть вызов ExecuteFunc.
Через GetLocalPlayer вы устанавливаете путь до файла для загрузки, у 1 игрока путь до файла на его компе, у всех остальных путь до файла в архиве карты. У всех игроков происходить Preloader одновременно, иначе будет дисинх. Далее, только синхронизируем строку между игроками и проверяем её на значение.
32

» WarCraft 3 / StartAbilityCD(integer, real)

Naadir, там все просто, Bergi_Bear, или в теме с детектом урона второй мемхак, там вылечены фаталы и прочие проблемы, о которых было известно. В теме с мемхаком задавай вопрос о том как пользоваться функциями, постараюсь помочь.
32

» WarCraft 3 / Fatal Eror

BladeInDoom, проверить весь импорт на наличе битых моделей, так же нет ли в карте создание 100500 эффектов, или когда юнитов слишком много (жар приесподней жарит сразу 50+ юнитов или что то такое)
32

» WarCraft 3 / Действия после wait'a не работают.

Esea, нехрен использовать вейты в группах, они там не работают. Вовсе нельзя использовать вейты, они для этого не предназначены - не можешь без вейтов - сразу же ниче не длаешь и точка и не слушай дурачков у которых в спеллах вейты работают и все норм, ниче не норм и работать нормально никогда не будет. Либо изучаешь все как надо, либо не делаешь ничего.
32

» WarCraft 3 / Перезарядка пассивных предметов

Bergi_Bear, ну там много чего сбивало инвиз, а учитывая кол-во багов, этот не самый страшный. Химик во время ульта уходит в инвиз от лотара, у него кончается ульт и он выходит из инвиза, т.к морф кастуется пассивным кастом, чтобы химик мог превратится обратно. В бложике лича читаем.
Эксгумацию я проверял лично - сбивает инвиз при каждом кд. По этому спеллнигейшин не надежный и баганый вариант.
32

» WarCraft 3 / DataManager

ProximityCat, насколько помню никто и не пытался особо, в основном сохраняли строки, тупо пасскоды, а из пасскодов уже извлекали данные и проверяли контрольные суммы и прочее.
32

» WarCraft 3 / DataManager

ProximityCat, Синхронизация не мгновенная, еще раз. Помни про это, Потом датаменеджер не очень надежен когда нужно передавать большие обьемы данных, там как правило вейты по 1 секунде, что порой мало, синхронизация может занимать больше времени.
Попробуй с синхом простых данных, по 1 строке, к примеру пасс когда как в рпг, а не по 100500 юнитов и их параметров.
32

» WarCraft 3 / Обнуление переменной в фильтрах

KaneThaumaturge, так же можно делать вот так:
function dwFolter takes nothing returns boolean
local unit u = GetTriggerUnit()
local integer id = GetUnitUserData(u)
local boolean b = (id==2) and not( IsUnitDead(u))... ну и так далее
set u = null
return b
endfunction
Обнуляя переменные до return, базовые типы обнулять ненужно.
Только непойму почему ты не можешь юзать глобалки? В них просто заносишь нужные данные перед условием как в локалки и все, но их обнулять ненужно.
32

» WarCraft 3 / Обнуление переменной в фильтрах

Но можно было сделать сразу проверку на типы, без IsUnitType ибо проверка на typeid быстрее и в "узких местах" лучше начинать с неё.
KaneThaumaturge, Почему не выйдет? Что собрался делать напиши, какое условие?
32

» WarCraft 3 / Обнуление переменной в фильтрах

Потом странная идиотия, создавать переменная к которой нужно обратится всего 1 раз...
function Trig_Kill_Conditions takes nothing returns boolean 
local unit u = GetTriggerUnit() 
local integer i = GetUnitTypeId(u) 
return IsUnitType(u, UNIT_TYPE_TOWNHALL) == false or \ 
i != 'hfoo' or \ 
i != 'n006' 
set u = null 
endfunction
Можно было сделать так:
function Trig_Kill_Conditions takes nothing returns boolean 
set bj_forLoopAIndex = GetUnitTypeId(GetTriggerUnit())
return not ( IsUnitType( GetTriggerUnit, UNIT_TYPE_TOWNHALL) or bj_forLoopAIndex ==  'hfoo' or bj_forLoopAIndex == 'n006' )
endfunction
32

» WarCraft 3 / Обнуление переменной в фильтрах

Принятый ответ
Эмм как насчет глобальных переменных, т.к в фильтрах ты не создаешь условия а только делаешь проверки, без разрыва потока вейтами, то глобалки доступное и изящное решение.
32

» WarCraft 3 / DataManager, GameCache

Принятый ответ
Для справки лимита в кеше нет, хоть всю память выделенную под процесс вара, пока игра не завершится с фаталом.
Вопрос в другом, как ты все это будешь синхронизировать? Для синхронизации куска ландшавта между игроками у тебя уйдет пару минут =) Все это время игроки будут вынуждены смотреть на черный экран.
Для всех остальных, наш юнный мапмейкер задумал сделать карту типа рпгшки с сохранением и героея и куска ландшавта, исковерканного данным героем. Сам это он несмог написать на форуме, зато я с большим трудом выудил это из него в лс. Помогите человеку идеями =).