32

» WarCraft 3 / Воскрешение героя в триггерах

Принятый ответ
Искать нужно лучше.
Раздел герой на гуях, действие Revive (instanty)
32

» WarCraft 3 / Система отлова нанесённого урона

WakVellios:
Какая команда получает боевую еденицу получившую урон?
GetTriggerUnit()
JASS API в помощь.
32

» WarCraft 3 / Запомнить любую нужную точку на карте

Принятый ответ
Ну можно координаты камеры игрока. Но там нужен синк в кеше, чтобы небыло десинха, а это уже ни ГУИ.
Вот примитивный пример получение и сохранения координат камеры игрока:
scope PlayerRelated initializer InitPlayers

    globals
        force AllPlayers = null
        trigger gg_trg_PlayerLeft = null
        playerevent bj_enumPlayerEventId = null
        player array PL
        gamecache data
    endglobals

    function TriggerRegisterPlayerEventEnum takes nothing returns nothing
        call TriggerRegisterPlayerEvent( bj_destInRegionDiesTrig, GetEnumPlayer( ), bj_enumPlayerEventId )
    endfunction
    
    function TriggerRegisterForceEvent takes trigger trig, force forforce, playerevent id returns nothing
        set bj_destInRegionDiesTrig = trig
        set bj_enumPlayerEventId = id
        call ForForce( forforce, function TriggerRegisterPlayerEventEnum )
    endfunction
 
    function Trig_Player_Left_Actions takes nothing returns nothing
        call ForceRemovePlayer( AllPlayers, GetTriggerPlayer( ) )
    endfunction
    
    function IsSlotPlayer takes player pl returns boolean
        return GetPlayerSlotState( pl ) == PLAYER_SLOT_STATE_PLAYING and GetPlayerController( pl ) == MAP_CONTROL_USER
    endfunction
    

    function InitPlayers takes nothing returns nothing
        set AllPlayers = CreateForce( )
        set gg_trg_PlayerLeft = CreateTrigger( )
        set data = InitGameCache( "Data.w3v" )
        
        set bj_forLoopAIndex = 0
        
        loop
        
            exitwhen bj_forLoopAIndex > bj_MAX_PLAYERS
        
            set PL[bj_forLoopAIndex] = Player( bj_forLoopAIndex )
            if IsSlotPlayer( PL[bj_forLoopAIndex] ) then
                call ForceAddPlayer( AllPlayers, PL[bj_forLoopAIndex] )
                call TriggerRegisterPlayerEvent( gg_trg_PlayerLeft, PL[bj_forLoopAIndex] , EVENT_PLAYER_LEAVE )
            endif
        
            set bj_forLoopAIndex = bj_forLoopAIndex + 1
        endloop
    
        call TriggerAddAction( gg_trg_PlayerLeft, function Trig_Player_Left_Actions )
    
    endfunction
endscope

function Trig_Get_Player_Screen_Cord_Conditions takes nothing returns boolean
    return true
endfunction

function Trig_Get_Player_Screen_Cord_Actions takes nothing returns nothing
    local player pl = GetTriggerPlayer( )
    local real dx = 0.00
    local real dy = 0.00

    
    if GetLocalPlayer( ) == pl then
        set dx = GetCameraEyePositionX( )
        set dy = GetCameraEyePositionY( )
    else
        set dx = 0.00
        set dy = 0.00
    endif

    call StoreReal( data, "Cord", "X", dx )
    call StoreReal( data, "Cord", "Y", dy )
    
    call TriggerSyncStart( )
    
    if GetLocalPlayer( ) == pl then
        call SyncStoredReal( data, "Cord", "X" )
        call SyncStoredReal( data, "Cord", "Y" )
    endif
    
    call TriggerSleepAction( 2.00 )

    call TriggerSyncReady( )
    
    set dx = GetStoredReal( data, "Cord", "X" )
    set dy = GetStoredReal( data, "Cord", "Y" )
    
    // далее делаем с коорданатами камеры что хочется!
    call PingMinimapEx( dx, dy, 3.00, 255, 255, 255, true )

endfunction

//===========================================================================
function InitTrig_Get_Player_Screen_Cord takes nothing returns nothing
    set gg_trg_Get_Player_Screen_Cord = CreateTrigger( )
    
    set bj_forLoopAIndex = 0
    
    loop
        exitwhen bj_forLoopAIndex > bj_MAX_PLAYERS
    
        if IsPlayerInForce( PL[bj_forLoopAIndex], AllPlayers ) then
            call TriggerRegisterPlayerChatEvent( gg_trg_Get_Player_Screen_Cord, PL[bj_forLoopAIndex], "-GetCord", true )
        endif
    
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
    
    call TriggerAddCondition( gg_trg_Get_Player_Screen_Cord, Condition( function Trig_Get_Player_Screen_Cord_Conditions ) )
    call TriggerAddAction( gg_trg_Get_Player_Screen_Cord, function Trig_Get_Player_Screen_Cord_Actions )
endfunction
32

» WarCraft 3 / Передача параметров в Таймер

JaBeN_Симфер:
Нафиг это гомно, сразу хештаблицу и все, темболее этот эксплоит не работает с переодическими твймерами, а не малое количество паразиьных действий намекает на низкую скорость этого алгоритма.
32

» WarCraft 3 / Вопрос по поводу лагов

FarFacer:
quq_CCCP:
Не лагает, а загружается дольше - это да, лаги в мультиплеере связаны не с картой а с говвеным пингом до хоста, из за задержек и постоянных дисконектов.
А если лагает, то это скорее от хуёвого кода, моделей и т.д.?
Ну если начинает лагать через какое то время даже в сингле = код гомно.
Модели надо подгружать, ну неужели вы не слышали об этом?
32

» WarCraft 3 / Вопрос по поводу лагов

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

» WarCraft 3 / Инвиз у зданий.

Принятый ответ
Добавь инвиз мины - он не сбивается любыми действиями юнита - Мина Взрывается ( 'Amin' ) задержку срабатывания нужно только установить на бесконечную.
32

» WarCraft 3 / Как сделать стаки способностей?

Принятый ответ
Если охото сделать зарыды со счетчиком то тут 2 пути:
  1. Юзать стандартные абилки со счетчиком зарядов, а их только 2 совы охотницы и вспышки орудийного расчета гномов. Увы первая цель декор онли, вторая цель точка онли, на юнита никак, кстати хорошо подходит под кастом блинки, кастуется почти мгновенно, быстрее канала, без всяких рукомаханий.
  2. Использовать N способностей с разными иконками, на которых будет изображен счетчик, изменяя уровень способности или вовсе весть скилл через 'Eneg' (Техника, скилл механика, позволяет изменять поля скиллов) то можно создать скиллы со счетчиком, допустим пока есть заряды у скилла нету кулдауна, скилл последнего заряда имеет кулдаун.
Увы туча ипорта да и найти качественные иконки со счетчиком дело непростое.
32

» WarCraft 3 / Тип урона у способностей

Все скиллы наносят урон типом атаки Заклинание (ATTACK_TYPE_NORMAL) а тип урона влияет тока на блокираторы урона, негативные баффы наносят 0.00 ед. урона неизвестным типом урона (DAMAGE_TYPE_UNKNOWN или просто null), что ативирует событие - юнит получает урон, даже когда юнит неуязвим - нужно для агра юнитов к примеру.
Почти все DAMAGE_TYPE_FIRE\COLD и так далее одинаковы, их близзарды сделали для красоты - проверить на тип урона мы никак не можем, магический и магический а от холода он или огня никак, что собственно и не особо важно - результат один.
32

» WarCraft 3 / Как триггерно сделать бонус защиты

Принятый ответ
Ну тут только добавлать герою предметные абилки на повышение защиты, есть вроде же готовые системы добавления всего что только можно, хп-мп, защиту, скорость и так далее.
Гугли Custom Hero stat system.
Вот пример ссылочка
32

» WarCraft 3 / Блокировка урона

Я просто добавлял пассивку на 15000 хп, ставил хп макс, а через 0.00 сек. таймером ставил сколько было.
32

» WarCraft 3 / Иногда не срабатывают некоторые спеллы

IcE_PLayER:
quq_CCCP,
1 - id приказа и id магии, которую юзает дамик различные
2 - да, может отличаться, не думал что может повлиять (надо проверить)
3 - это касается всех скилов? (допустим у меня есть скилл буран (dummy) и просто буран) Если я сначало скастую буран, то у даммика буран (dummy) может не сработать? (мог неправильно понять)
Джасс почти не знаю, сорри...
Речь только если у тебя канал с настройками и базовым ид приказа бурана, то да.
32

» WarCraft 3 / Функция Preload

какой RemoveUnit с массивом, в прелоаде этот код не выполнится из за синтаксической ошибки, нету ни массива ни юнитов...
32

» WarCraft 3 / Иногда не срабатывают некоторые спеллы

Принятый ответ
Подробнее, что и как делалои?
Иногда бывает что канал мешает даммикам кастануть спелл, но это бывает если:
  1. У канала указан базовый ид приказа от другого, существующего и применяющегося дамми юнитом скилла.
  2. Тип цели у канала отличается от того скилла чье ид указано в настройках канала.
  3. Игрок должен кастануть канал до того как кто либо кастанет скилл оригинал.
    Этот баг связан с кешированием приказа абилок как описывал DracoLich, варкравт записывает типы целей для всех абилок с этим ид, а когда скилл кастуют проверяет.
Допустим у тебя 2 скилла, первый натуральная волна силы с приказом ShockWave а второй канал с тем же ид приказа ShockWave но типом цели мгновенное (без указания цели), стоит тебе кастануть канал как дамми юниты которые кастуют первый скилл (волну силы) откажутся её кастовать, ибо движек вара будет считать что это селф каст абилка (абилки без указания цели на самом деле кастуются в самого кастера).
Дебаг типа

if not IssueTargetOrder( u, некий приказ, target ) then
 
	call BJDebugMsg( "Ошибка невозможно выполнить приказ такойто на цель" +GetUniTName(targ))
	
	if IssueTargetOrder( u, некий приказ, u ) then
			call BJDebugMsg( "Баг канала - измени ид приказа на несуществующий в предалах твоей карты!"))
	endif
	
endif
32

» WarCraft 3 / Как запихнуть к карте обложку?

Принятый ответ
нужно импортировать в корневую папку карты ( это без пути, "war3mapPreview.tga а не "War3MapImported\war3mapPreview.tga") файл формата тга размером 128 на 128 точек или 256 на 256 точек.
Для конвертирования подойдет BLPlab
32

» WarCraft 3 / Unhide unit или Target of the ability being cast не работает

Конечно не видит - wait'ы юзать не нужно, кто же так делает!
Target ability begin cast - вернет юнита только до твоего вейта, а потом усе.
Такие вещи нужно обязательно заносить в переменные, но в гуях это все увы но будет не муи...
32

» WarCraft 3 / Как отключить способность

Насколько я помню у него способность выключатель, 1 раз кликнул скилл включился, второй раз кликнул выключился - нужно чтобы если юнит в "бою" (вероятно автор имеет виду что юнит получат урон и способность блокируется, как даггер в доте)
Нужно не дать юниту включить эту способность пока он в "Бою", я предложил требования - иконка способности затемняется, как будто скилл под сайленсом но кулдаун никуда не девается.
32

» WarCraft 3 / Как отключить способность

GetLocalPlayer:
Запихнуть жар преисподней в заблокированный спеллбук .
Дать способность с кд в 5 секунд.
При использовании способности давать/отнимать упомянутый выше спеллбук.
Какой спеллбук, у него скилл переключатель на основе жара, зачем ему спеллбук?
32

» WarCraft 3 / Как отключить способность

Принятый ответ
В требованиях к способности указать дамми юнита и создавать \ удалять его для игрока.
32

» WarCraft 3 / Спецэффекты способностей не работают

Принятый ответ
Было на вин 10, проверь апдейты винды и драйверов, переставь или откатись - должно помочь.
32

» WarCraft 3 / Время загрузки карты :(

Ну там много чем можно, слк оптимизатор один из способов - обычно виной долгой загрузки карты может стать 100500 юнитов сидящи на карте изначально ибо абилки по 100500 уровней.
32

» WarCraft 3 / Юнит не использует способность

Принятый ответ
ИИ написать, сами скиллы юзают тока крипы подконтрольные ИИ - к примеру нейтральновраждебные.
Так же можно юзать скилл - Сфера замедления, это орб эффект который срабатывая накладывает на цель атаки указанный в его настройках скилл, подойдет для карт типа Castle Fight.