27

» WarCraft 3 / Как сделать видимость за игроком?

Frosty102, ну конечно не работает. ты сначала делаешь "противника с общим полем зрением", а позже меняешь на "противника" я точно не могу сказать, мне кажется в этом и дело
вот ссылка
27

» WarCraft 3 / Как сделать видимость за игроком?

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

на карте есть туман войны, обычно у каждого юнита есть обзор, который рассеивает туман. он вот делится этим обзором со своим хозяином (игроком). еще может поделиться обзором со своими союзниками, если настроен союз "общее поле зрение". вражеский юнит тоже может отдать свой обзор (либо посредством союза или штукой на одного юнита, что описано выше)

можно еще настройки союза изменять, тогда у ваши все войска игрока видны
это все разделе игрок смотри (UnitShareVision и настройки союзы)
27

» WarCraft 3 / Как сделать видимость за игроком?

Принятый ответ
есть еще специальная нативка используйте UnitShareVision которая делает видимым для игрока. можно так включить, так и выключить. видит отдельно от остальных. обычно за видимость всех войск игрока отвечает аспект союза игрока. а если надо не всех, а одного то вот эта функция как раз. Еще дебафф волшебного огня можно диспелом снять, в этой функции таких проблем не должно быть.
27

» WarCraft 3 / math.ease

NazarPunk, безье интересная штука. видел в редакторе моделей в интерполяции безье, линейная интерполяция и др что это значит в самих моделях, я не понял
была тема в закладки оставил, можно попробовать по дуге. но сначала надо понять какие точки брать, и где еще можно применить кроме движения по дуге
27

» WarCraft 3 / Изменение количества урона

Daniil37, да. правда сам не пробовап. но читал что можно.
пробуй еще каменные доспехи, они снижают физический дамаг. просто укажи в абиле мин. урон = 1, отклоненный урон = 0
описание
Каменные доспехи 'Assk'/'Ansk' - снижает и отклоняет с шансом наносимый урон. "Минимальный урон" - допустимый урон, наносимый самому себе (вообще-то наносит противник). Можно убить себя за допустимого 9999к урона, если противник нанесет хотя бы единицу урона. А вот за ноль урон обнуляется. Отрицательное значение наносит ущерб врагу. "Отклоненный урон" - просто отклоняет урон (есть указан 12, а враг наносит 15, то носитель доспех получит 3 урона). Отклонить можно 9999к урона. Правда, поле "Отклоненный урон" зависима от "Минимальный урон". Если в минимальном уроне указано 9999к - носитель доспех умрет, а если в минимальном уроне указан ноль, то урон обнуляется, таким образом отклонить ничего не получится. В этой абилке указывают шанс, без шанса не работает отклонение и минимальный урон. Блочит только физический урон (магический не блочит). В каменных доспехах можно указать как блокировать (в ближнем бою, или в дальнем бою). Картечь пробивает каменные доспехи. Каменные доспехи не снижают нанесённый триггерно урон.
27

» WarCraft 3 / Изменение количества урона


или вам нужно изменить дамаг на 1 единицу? можно сделать 3 способами:
  1. в новом патче есть возможность изменять дамаг
  2. через мем хак, есть даже тема как отловить и изменить
  3. делаем систему урона: можно в момент урона дать макс. запас хп, вам наносится дамаг. потом через 0.00 сек вернуть хп, какое было до этого (триггерами подправляем хп), но на 1 единицу меньше. макс. запас хп убрать. макс. запас обычно даем чтобы юнит не умер, тк дамаг мб больше чем хп
27

» WarCraft 3 / Изменение количества урона

так понял вы хотите чтобы жертве наносился дамаг, и чтобы при этом ее не убив, оставив 1 хп. Это как у способности чума, там ежесекудно наносят дамаг, и вконце когда остается чуть-чуть, жертве оставляют 2 хп. Тебе тогда надо считать, проверяя сколько хп, и наносить чистый дамаг
27

» WarCraft 3 / math.ease

а чего он с разной скоростью летит, казалось бы

было бы прикольно сделать систему атаки с снарядом для ренжей, и чтобы от атаки можно было уклонятся (можно было подвинуть триггером на чуть-чуть вбок или проиграть анимацию уклонения. это уклонение не только в дальнем, но и ближнем бою) или блокировать щитами (взрыв об щит). и конусную систему снарядов по нескольким целям.
27

» WarCraft 3 / Система с Пилонами(Генераторами) как у Протоссов.

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

» WarCraft 3 / Получить физ. размер.

PT153:
IsUnitInRangeXY
Это учитывает.
для этого надо знать фикс физ размер, все равно нужно бд? нее?
этой функцией не пользуюсь, но так понимаю, проверяет попала ли точка в радиус юнита. на хгм только драколич упомянул что работает быстрее, чем аналоги. типа считать расстояние между точками. взял на приметку
27

» WarCraft 3 / Условие на неуязвимость

Принятый ответ
вроде Диод скидывал алгоритм на проверку неуязвимости. Находится в разделе алгоритмы
правда не знаю, насколько идеально работает
27

» WarCraft 3 / War3ModelEditor(1.07) не открывает модель.

Принятый ответ
  1. либо путь к папке с прогой Warcraft 3 Model Editor указана кириллица или путь к модели указана кириллица. В пути не должно быть русских букв. Это одна из причин не работы.
  2. также может блокировать программу система, требуя админ
  3. или антивирус. и всякие облачные системы ОС. в 10-ке например, надо добавлять в список исключении таких программ как jngp. У меня в этот список добавлена папка Рабочего стола. Я вот на рабочем столе кинул папку с прогой jngp. В других же местах будет блочить. War3ModelEditor вроде не имеет вирусов

скорее всего 1
27

» WarCraft 3 / Ауры

Принятый ответ
Такой ауры нету, есть аура на бонус атаки (наверн, это не то, что вам нужно). можешь посмотреть список
Можно сделать триггерно, делаешь ауру пустышку. Потом систему урона, в этой системе проверяешь наличие баффа ауры. Наносишь доп урон. Ну, и конечно, надо знать какой дамаг от магии, или физическ. Это тоже надо подумать. Вроде, столько систем на определения придумано

можно еще каждые 2-3 сек выделять всех вокруг кастера в группу и что-то делать с этими юнитами, добавляя им бонусы: реген, защита и пр

Если заклинания триггерные, то можно проверять висит ли на кастере бафф, и увеличивать дамаг. Многие стандартные способности можно сделать триггерно
27

» WarCraft 3 / World editor: Триггер, активирующися при отсутствии игрока.

чат, комманды
function CB2 takes nothing returns nothing
local integer i=1
local player p
local integer x=0
if RC0 then
loop
exitwhen i>5
set p=BO[i]
if NYI(p)and((TimerGetElapsed(M))-L[GetPlayerId(p)])/60>0.2 then
set x=x+1
call DisplayTimedTextToPlayer(GetTriggerPlayer(),0,U2,15.00,C0[GetPlayerId(p)]+(D30[GetPlayerId((p))])+"|r"+" "+GetObjectName(1848653124)+" "+R2S(((TimerGetElapsed(M))-L[GetPlayerId(p)])/60)+" "+GetObjectName(1311782214))
endif
set p=CO[i]
if NYI(p)and((TimerGetElapsed(M))-L[GetPlayerId(p)])/60>0.2 then
set x=x+1
call DisplayTimedTextToPlayer(GetTriggerPlayer(),0,U2,15.00,C0[GetPlayerId(p)]+(D30[GetPlayerId((p))])+"|r"+" "+GetObjectName(1848653124)+" "+R2S(((TimerGetElapsed(M))-L[GetPlayerId(p)])/60)+" "+GetObjectName(1311782214))
endif
set i=i+1
endloop
if x<1 then
call DisplayTimedTextToPlayer(GetTriggerPlayer(),0,U2,15.00,GetObjectName(1311782225))
else
call DisplayTimedTextToPlayer(GetTriggerPlayer(),0,U2,15.00," ")
endif
endif
endfunction

function CC2 takes nothing returns nothing
local integer L9I=S2I(SubString(GetEventPlayerChatString(),9,StringLength(GetEventPlayerChatString())))
local integer i=1
local player p
local string F21
if RC0 then
if(Z0<10)then
set F21=I2S(H0)+":0"+I2S(Z0)
else
set F21=I2S(H0)+":"+I2S(Z0)
endif
if L9I<1 or RD0[L9I]==false then
loop
exitwhen i>5
set p=BO[i]
if NYI(p)and((TimerGetElapsed(M))-L[GetPlayerId(p)])>300.0 and RD0[GetPlayerId(p)]==false then
set RD0[GetPlayerId(p)]=true
call DisplayTimedTextToPlayer(GetTriggerPlayer(),0,U2,15.00,C0[GetPlayerId(p)]+(D30[GetPlayerId((p))])+"|r"+" "+GetObjectName(1848653127)+" "+R2S(((TimerGetElapsed(M))-L[GetPlayerId(p)])/60)+" "+GetObjectName(1311782214))
call DisplayTimedTextToPlayer(GetTriggerPlayer(),0,U2,15.00,GetObjectName(1848653135)+" |cff99ccff-kickafk "+I2S(GetPlayerId(p))+" |r "+GetObjectName(1848653136))
call DisplayTimedTextToPlayer(GetTriggerPlayer(),0,U2,15.00," ")
endif
set p=CO[i]
if NYI(p)and((TimerGetElapsed(M))-L[GetPlayerId(p)])>300.0 and RD0[GetPlayerId(p)]==false then
set RD0[GetPlayerId(p)]=true
call DisplayTimedTextToPlayer(GetTriggerPlayer(),0,U2,15.00,C0[GetPlayerId(p)]+(D30[GetPlayerId((p))])+"|r"+" "+GetObjectName(1848653127)+" "+R2S(((TimerGetElapsed(M))-L[GetPlayerId(p)])/60)+" "+GetObjectName(1311782214))
call DisplayTimedTextToPlayer(GetTriggerPlayer(),0,U2,15.00,GetObjectName(1848653135)+" |cff99ccff-kickafk "+I2S(GetPlayerId(p))+" |r "+GetObjectName(1848653136))
call DisplayTimedTextToPlayer(GetTriggerPlayer(),0,U2,15.00," ")
endif
set i=i+1
endloop
call DisplayTimedTextToPlayer(GetTriggerPlayer(),0,U2,15.00," ")
elseif NYI(Player(L9I))==true and IsPlayerAlly(GetTriggerPlayer(),Player(L9I))==true then
call DisplayTimedTextToPlayer(Player(L9I),0,U2,3600,"|c00ff0303"+GetObjectName(1848653125)+"|r")
call Z51(Player(L9I))
set K3[GetPlayerId(Player(L9I))]="|c00555555"+F21+"|r"
call RemovePlayer(Player(L9I),PLAYER_GAME_RESULT_DEFEAT)
call F32(Player(L9I))
if ZL then
call OS1(Player(L9I))
endif
set EA0[GetPlayerId(Player(L9I))]=true
call Z41(Player(L9I))
call PDI(P2,30.00,"|c00ff0303"+(D30[GetPlayerId((Player(L9I)))])+" "+GetObjectName(1848653125)+"|r")
endif
endif
endfunction

//нас интересует только call R9I("CB2",BI2) и call R9I("CC2",B12)
function AC2 takes nothing returns nothing
local string AD2=StringCase(GetEventPlayerChatString(),false)
local boolean N7O=AD2=="-random"or AD2=="-random int"or AD2=="-random agi"or AD2=="-random str"
local boolean AE2=AD2=="-repick"
local boolean AF2=AD2=="-gameinfo"
local boolean AG2=SubString(AD2,0,5)=="-swap"
local boolean AH2=AD2=="-recreate"
local boolean AZ2=AD2=="-unstuck"
local boolean AV2=AD2=="-matchup"or AD2=="-ma"
local boolean AW2=AD2=="-movespeed"or AD2=="-ms"
local boolean AX2=AD2=="-msa"
local boolean AY2=AD2=="-disablehelp"
local boolean AJ2=AD2=="-enablehelp"
local boolean AK2=AD2=="-creepstats"or AD2=="-cs"
local boolean AL2=AD2=="-cson"or AD2=="-csoff"
local boolean AM2=AD2=="-hidemsg"
local boolean AN2=AD2=="-showmsg"
local boolean AS2=AD2=="-weather snow"or AD2=="-weather rain"or AD2=="-weather off"or AD2=="-weather random"or AD2=="-weather wind"or AD2=="-weather moonlight"
local boolean AT2=AD2=="-showdeny"or AD2=="-hidedeny"
local boolean AR2=AD2=="-denyinfo"or AD2=="-di"
local boolean AP2=AD2=="-don"or AD2=="-deathon"or AD2=="-doff"or AD2=="-deathoff"
local boolean AQ2=SubString(AD2,0,5)=="-roll"and AD2!="-rollhero"
local boolean AU2=AD2=="-hhn"or AD2=="-hideheronames"
local boolean B02=AD2=="-mute"
local boolean BI2=AD2=="-afk"
local boolean B12=SubString(AD2,0,8)=="-kickafk"
local boolean BO2=AD2=="-apm"
local boolean B22=AD2=="-clear"
local boolean OWO=AD2=="-courier"
local boolean AH=AD2=="-ah"
local boolean B32=AD2=="-invokelist"or AD2=="-il"
local boolean B42=AD2=="-list"
local boolean B52=AD2=="-rolloff"
local boolean B62=AD2=="-rollon"
local boolean B72=SubString(AD2,0,6)=="-music"
local boolean B82=SubString(AD2,0,6)=="-water"
local boolean B92=SubString(AD2,0,6)=="-quote"
local boolean BA2=SubString(AD2,0,3)=="-cm"
local boolean BB2=SubString(AD2,0,9)=="-itemswap"
local boolean BC2=AD2=="-bonus"
local boolean BD2=AD2=="-rollhero"or AD2=="-rh"
local boolean BE2=SubString(AD2,0,9)=="-rickroll"
local boolean NoSwitch=AD2=="-noswitch"
local boolean BF2=SubString(AD2,0,7)=="-switch"or AD2=="-ok"or AD2=="-no"
local boolean Terrain=AD2=="-terrain"or AD2=="-terrain default"or AD2=="-terrain snow"
local boolean BG2=AD2=="-tips"
local boolean BH2=AD2=="-ii"or AD2=="-iteminfo"
local boolean BZ2=AD2=="-center"or AD2=="-centeroff"or AD2=="-c"or AD2=="-co"
local boolean BV2=AD2=="-unlock"
local boolean BW2=AD2=="-disableselection"or AD2=="-ds"
local boolean BX2=AD2=="-enableselection"or AD2=="-es"
local boolean BY2=AD2=="-sleep"
local boolean BJ2=AD2=="-calm"
local boolean SJI=AD2=="-st"
local boolean BK2=AD2=="-nosanta"
call R9I("BL2",N7O)
call R9I("BM2",AE2)
call R9I("BN2",AF2)
call R9I("BS2",AG2)
call R9I("BT2",AH2)
call R9I("BR2",AZ2)
call R9I("BP2",AV2)
call R9I("BQ2",AW2)
call R9I("BU2",AX2)
call R9I("C02",AY2)
call R9I("CI2",AJ2)
call R9I("C12",AK2)
call R9I("CO2",AL2)
call R9I("C22",AM2)
call R9I("C32",AN2)
call R9I("C42",AS2)
call R9I("C52",AT2)
call R9I("C62",AR2)
call R9I("C72",AP2)
call R9I("C82",AQ2)
call R9I("C92",AU2)
call R9I("CA2",B02)
call R9I("CB2",BI2)
call R9I("CC2",B12)
call R9I("CD2",BO2)
call R9I("CE2",B22)
call R9I("CF2",OWO)
call R9I("CG2",AH)
call R9I("CH2",B32)
call R9I("CZ2",B42)
call R9I("CV2",B52)
call R9I("CW2",B62)
call R9I("CX2",B72)
call R9I("CY2",B82)
call R9I("CJ2",B92)
call R9I("CK2",BA2)
call R9I("CL2",BB2)
call R9I("CM2",BC2)
call R9I("CN2",BD2)
call R9I("CS2",BE2)
call R9I("CT2",BF2)
call R9I("CR2",BH2)
call R9I("CP2",BG2)
call R9I("CQ2",BZ2)
call R9I("CU2",BV2)
call R9I("D02",BW2)
call R9I("DI2",BX2)
call R9I("D12",BY2)
call R9I("DO2",SJI)
call R9I("D22",BJ2)
call R9I("D32",BK2)
endfunction
каждые 5 сек проверяет игроков на афк, и выводит сообщение что можно кикнуть
function F62 takes nothing returns boolean
local integer i=1
local player p
local real F21=(TimerGetElapsed(M))
if RC0 then
loop
exitwhen i>5
set p=BO[i]
if NYI(p)and(F21-L[GetPlayerId(p)])>300.0 and RD0[GetPlayerId(p)]==false then
set RD0[GetPlayerId(p)]=true
call PDI(OO,15,C0[GetPlayerId(p)]+(D30[GetPlayerId((p))])+"|r"+" "+GetObjectName(1848653127)+" "+R2S((F21-L[GetPlayerId(p)])/60)+" "+GetObjectName(1311782214))
call PDI(OO,15,GetObjectName(1848653135)+" |cff99ccff-kickafk "+I2S(GetPlayerId(p))+" |r "+GetObjectName(1848653136))
call PDI(OO,15," ")
endif
set p=CO[i]
if NYI(p)and(F21-L[GetPlayerId(p)])>300.0 and RD0[GetPlayerId(p)]==false then
set RD0[GetPlayerId(p)]=true
call PDI(AO,15,C0[GetPlayerId(p)]+(D30[GetPlayerId((p))])+"|r"+" "+GetObjectName(1848653127)+" "+R2S((F21-L[GetPlayerId(p)])/60)+" "+GetObjectName(1311782214))
call PDI(AO,15,GetObjectName(1848653135)+" |cff99ccff-kickafk "+I2S(GetPlayerId(p))+" |r "+GetObjectName(1848653136))
call PDI(AO,15," ")
endif
set i=i+1
endloop
endif
return false
endfunction
ловит приказы. Короче когда отдал последний приказ
function R6I takes unit R7I returns nothing
call PauseUnit(R7I,true)
call IssueImmediateOrder(R7I,"stop")
call PauseUnit(R7I,false)
endfunction
function R1I takes player ROI,string LNI returns nothing
local sound R3I=CreateSoundFromLabel("InterfaceError",false,false,false,10,10)
if(GetLocalPlayer()==ROI)then
if(LNI!="")and(LNI!=null)then
call ClearTextMessages()
call DisplayTimedTextToPlayer(ROI,0.50,-1.00,2.00,"|cffffcc00"+LNI+"|r")
endif
call StartSound(R3I)
endif
call KillSoundWhenDone(R3I)
endfunction

//ловим приказы (срабатываеи при событиях: юнит отдал приказ/отдал в цель/отдал в точку)
function F72 takes nothing returns boolean

//проверка: что юнит принадлежит только первой команде BO (1-5), или второй CO (1-5). Какая-то важная и непонятная проверка в доте.
if GetOwningPlayer(GetTriggerUnit())!=BO[0]and GetOwningPlayer(GetTriggerUnit())!=CO[0]then

	//счетчик приказов K, неизвестный параметр
	set K[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]=K[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]+1
	
	//если эта не приказ атаки, ....
	if GetIssuedOrderId()!=851983 then //attack=851983
		set L[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]=(TimerGetElapsed(M))
		set RD0[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]=false
	endif
	
	//вроде эта проверка на то, что нельзя подбирать или атаковать чужой предмет, который лежит на земле
	if(GetIssuedOrderId()==851983 or GetIssuedOrderId()==851971)and GetOrderTargetItem()!=null then //attack=851983, smart = 851971
		

		if GetIssuedOrderId()==851983 or(GetIssuedOrderId()==851971 and(LoadBoolean(XY,(GetHandleId(GetItemPlayer(GetOrderTargetItem()))),(139)))==true)then
			if GetItemPlayer(GetOrderTargetItem())!=GetOwningPlayer(GetTriggerUnit())and IsPointInRegion(SK,GetItemX(GetOrderTargetItem()),GetItemY(GetOrderTargetItem()))==true then
				call DisableTrigger(GetTriggeringTrigger())
				call R6I(GetTriggerUnit())
				call R1I(GetOwningPlayer(GetTriggerUnit()),GetObjectName(1848657719)) //выводит сообщение что нельзя атаковать или подбирать
				call EnableTrigger(GetTriggeringTrigger())
			endif
		endif
	endif
endif
return false
endfunction
функция main, инициирует триггеры
function main takes nothing returns nothing
local trigger t

//массив игроков. BO - первая команда, CO - вторая команда
set BO[0]=Player(0)
set BO[1]=Player(1)
set BO[2]=Player(2)
set BO[3]=Player(3)
set BO[4]=Player(4)
set BO[5]=Player(5)
set CO[0]=Player(6)
set CO[1]=Player(7)
set CO[2]=Player(8)
set CO[3]=Player(9)
set CO[4]=Player(10)
set CO[5]=Player(11)

//проверяет приказы игроков (в афк ли он или нет): если игрок отдал приказ, значит в игре
//еще проверяет и запрещает атаковать и подбирать чужие предметы
set t=CreateTrigger()
call QBI(t,EVENT_PLAYER_UNIT_ISSUED_ORDER) //регистр приказа без цели
call QBI(t,EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER) //регистр приказа в цель
call QBI(t,EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER) //регистр приказа в точку
call TriggerAddCondition(t,Condition(function F72))

//каждые 5 сек запускает. Проверяет каждого игрока, и сколько времени прошло с последнего действия
//Если прошло больше 300 сек (это 5 мин), значит игрока можно кикнуть (выгнать)
//сам триггер не кикает игрока, просто выводит сообщение игрокам, что его можно кикнуть
set t=CreateTrigger()
call TriggerRegisterTimerEvent(t,5,true)
call TriggerAddCondition(t,Condition(function F62))

//массив булеан. хранит информацию, эта штука дает инфу, что ушел ли игрок в афк на 5 мин.
//так понимаю эта логическая говорит, что показал сообщение. чтоб повторно его не показывать в функции F62
set RD0[GetPlayerId(BO[1])]=false
set RD0[GetPlayerId(BO[2])]=false
set RD0[GetPlayerId(BO[3])]=false
set RD0[GetPlayerId(BO[4])]=false
set RD0[GetPlayerId(BO[5])]=false
set RD0[GetPlayerId(CO[1])]=false
set RD0[GetPlayerId(CO[2])]=false
set RD0[GetPlayerId(CO[3])]=false
set RD0[GetPlayerId(CO[4])]=false
set RD0[GetPlayerId(CO[5])]=false
set t=null

//чат, включает настройки (команды) в доте. в том числе на -afk, -kickafk
set t=CreateTrigger()
call TriggerRegisterPlayerChatEvent(t,BO[1],"-",false)
call TriggerRegisterPlayerChatEvent(t,BO[2],"-",false)
call TriggerRegisterPlayerChatEvent(t,BO[3],"-",false)
call TriggerRegisterPlayerChatEvent(t,BO[4],"-",false)
call TriggerRegisterPlayerChatEvent(t,BO[5],"-",false)
call TriggerRegisterPlayerChatEvent(t,CO[1],"-",false)
call TriggerRegisterPlayerChatEvent(t,CO[2],"-",false)
call TriggerRegisterPlayerChatEvent(t,CO[3],"-",false)
call TriggerRegisterPlayerChatEvent(t,CO[4],"-",false)
call TriggerRegisterPlayerChatEvent(t,CO[5],"-",false)
call TriggerAddAction(t,function AC2)

//запускает таймер с начала игры, это связано с афк. все игроки в массив L сохраняют последнее действие
//потом сравнивают текущее время таймера M c временем L, короче проверяют сколько прошло.
//К примеру если прошло 60 сек, значит игрок не активен
set M=CreateTimer()
call TimerStart(M,99999.00,false,null)
endfunction
27

» WarCraft 3 / World editor: Триггер, активирующися при отсутствии игрока.

8gabriel8, мне просто интересно можно ли такой костыль на афк сделать или нет. Новые патчи вышли, мем хак есть.
27

» WarCraft 3 / World editor: Триггер, активирующися при отсутствии игрока.

Bergi_Bear, такое сложно отследить. Вернее невозможно отследить было ли у игрока действие. Мб надо отслеживать нажатие клавиш мыши и клавиатуры (а такое реально?).
Если нажатие клавиш реально отследить, тогда таймером можно отслеживать когда нажал последнюю клавишу. Если игрок последнюю клавишу нажал 1 минут назад, значит неактивен. Или как? Игрок живой не может больше 1 минуты ничего не делать, тем более просматривать карты.
Еще надо проверять смещение камеры или курсора мыши, игрок мб двигает мышкой камеру (при этом не нажимая ничего).
27

» WarCraft 3 / Как сделать состояние предмета вкл./выкл.?

8gabriel8:
quq_CCCP, но вейтом это лечил, когда багались.
это все равно багается. проверил вашу карту только что. я артефакт с бонусной защитой взял, и у меня бронька увеличивалась. думал найден рецепт, придется руной
27

» WarCraft 3 / Триггерная способность

Только двигаешь в центре конуса героя
тема <= конусные заклинания
27

» WarCraft 3 / Триггерная способность

Принятый ответ
Сделана как триггерная темная стая (гуи). Но с таким же успехом можно переделать под волну силы, огненное дыхание, девятый вал, ледяное дыхание. Все эти абилки похожие только спецэффекты разные.
27

» WarCraft 3 / Скорость постройки в зависимости от.....

можно сделать полностью триггерно как и сказал 8gabriel8
ссылка раздел "влияющие на здание", как бы я реализовал иммитацию стройки через эту функцию, есть и проблемы. когда 100% задаешь через эту функцию, то почему то не значит что оно достроено. короче рассчитал скорость стройки в зависимости от множителя. например 1.00 - 100% стандартная скорость, 1.20 - 120% на 20% быстрее станд скорости. ну и прочее
27

» WarCraft 3 / aRal как удалить точку сбора у дома/где ошибка?

Принятый ответ
способность можно удалить спокойно, так и добавить.
еще ее спрятать можно, но это гемор (тк нужно импортировать файл, прописывать координаты), таким образом на всю игру спрячешь xgm.guru/p/100/200277
видимо это одна из коммандных абил, поэтому и нельзя заблочить. все что ты пытаешься сделать - заблочить, а не удалить