felix_ff

Картострой и все что с ним связанно

Рекомендованные сообщения

Код канешно жесть, жрет много. можно оптимизировать раз в 10 :)

Причем зачем каставать если можно через абычный триггер изменить мс юнита. думаю там тупо иконка, ну если они сделали через ускорение эт ТТ

 

Зы. я тут арену делаю можите подкинуть идейку на героев/абилки и тп. фантазия уже закончилась. теоритически могу реализовать любую идею. про кредиты не забуду :)

 

Зачем ламать открытая дота есть, хотя хз есть ли там мирка, непомню какая версия.

 

 

Последняя которая у меня есть это 6.41, Мирана там есть, оттудова собсно код и брал. Хотел вчера привести код в более достойный вид но после изменения 2 функции энтузиазм выхохся :/ чета последнее время мну ломаед кодить.

 

Фантазия кстати у мну тоге закончилась по полчаса придумываю спелл какойнить новый в своей карте ;) ужос одним словом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

счас 6.44b есть там +6 новых геровев и тд. но это неважно блин вот как менять подпись в способностях? ну вот например как у невера в доте абилка есть которая прибавляет дмг, как там сделано так что подпись меняеца?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

счас 6.44b есть там +6 новых геровев и тд. но это неважно блин вот как менять подпись в способностях? ну вот например как у невера в доте абилка есть которая прибавляет дмг, как там сделано так что подпись меняеца?

 

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

 

Если что вечером проверю. щяс не дома редактора под рукой нету.

Изменено пользователем felix_ff

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Блин ну эт как то тупо -.- дожно же быть какнить попроще, т.е. получаеца что там у него 60 лвлов абилок. этож так все нагружает омг. уж проще ваще от этого отказаца... если тольлко так можнопопроще, т.е. получаеца что там у него 60 лвлов абилок. и еще эт жесть как все нагружает, проще если другова выхода нет отказаца от этого и например сделать счетчик там где еда или дерево..

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Блин ну эт как то тупо -.- дожно же быть какнить попроще, т.е. получаеца что там у него 60 лвлов абилок. этож так все нагружает омг. уж проще ваще от этого отказаца... если тольлко так можнопопроще, т.е. получаеца что там у него 60 лвлов абилок. и еще эт жесть как все нагружает, проще если другова выхода нет отказаца от этого и например сделать счетчик там где еда или дерево..

 

почему. моно сделать например 4 дамми абилки как раз по 8 увроней каждая, или еще больше абилок тогда гемора не будет. просто в карту добавиться чутка больше веса.

 

адд: глянул в дотцу :/ ну да там у дамми абилки 31 уровень :/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

т.е. только можно меняя уровень абилки?

 

 

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

 

Так что в данном случае идеальней всего использовать дамии абилку и смену ее уровней.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если ссылку успользовать ее нельзя юзнать на переменную, а эт получаеца тоже самое :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а как вставить его в карту?

я на счет кода...

Изменено пользователем Gekko

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

2Gekko

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

2felix_ff несложно было бы посматрель как сделан ульт ск? (sand king) я хочу сделать абилку что типа герой бежит и делает стан (ну в доте это реализованно как садер клап) я сделал через добавление абилки стана и каставания ее передочески, но пробема в том что при каставние он постоянно оставливается и появляеца еще иконка этого стана...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

2Gekko

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

2felix_ff несложно было бы посматрель как сделан ульт ск? (sand king) я хочу сделать абилку что типа герой бежит и делает стан (ну в доте это реализованно как садер клап) я сделал через добавление абилки стана и каставания ее передочески, но пробема в том что при каставние он постоянно оставливается и появляеца еще иконка этого стана...

 

Следовательно надо использовать дамми юнитов (невидимых кастеров)

приблизительно код выглядит так:

function Epicentre_Cond takes nothing returns boolean

return GetSpellAbilityId() == 'Axxx'

endfunction

 

function Epicentre_Effect takes nothing returns nothing

local unit u = GetTriggerUnit()

local unit v = null

local integer i = 0

loop

exitwhen i == 5

set v = CreateUnit(GetOwningPlayer(u), 'hpea', GetUnitX(u), GetUnitY(u), 0)

call UnitAddAbility(v, 'AXXX')

call SetUnitAbilityLevel(v, 'AXXX', GetUnitAbilityLevel(u, 'Axxx'))

call SetUnitExploded(v, true)

call UnitApplyTimedLife(v, 'BTLF', 1)

call IssueImmediateOrder(v, "thunderclap")

call TriggerSleepAction(0.25)

set i = i + 1

endloop

set u = null

set v = null

set i = 0

endfunction

 

function InitTrig_Epicentre takes nothing returns nothing

set gg_trg_Epicentre = CreateTrigger()

call TriggerRegisterAnyUnitEventBJ(gg_trg_Epicentre, EVENT_PLAYER_UNIT_SPELL_FINISH)

call TriggerAddCondition(gg_trg_Epicentre, Condition(function Epicentre_Cond) )

call TriggerAddAction(gg_trg_Epicentre, function Epicentre_Effect)

endfunction

 

//Cобсна 'Axxx' - это рау-код абилки которую кастует герой (в твоем случае тебе надо его изменить на рау-код твоей абилки)

// 'AXXX' - это дамми-абилка "Удар грома" (ее характеристики надо обнулить что бы дамми кастер смог ее кастовать (затрачиваемая мана и кулдаун)

// или поставить дамми юниту (в моем случае это работник альянса 'hpea' ) что бы у него была мана (настроить в РО поля "максимальная мана" и "изначальное кол-во маны")

 

вообщем все :lol:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо, но я уже решил эту проблему :lol: только вот что - я сделал спеллкастера но када зажимаешь альт у него отображаются жизни( как это убрать, мож сделать ее зданием?

 

все решил :D

 

вот еще проблема, как сделать модель боевоей еденицы в виде трупа например голема? (т.е. куча камней) зарание спасибо :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

2Gekko

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

спс

 

-------------------------------------------------------------------------

 

function Leap_Spell takes nothing returns boolean
return GetSpellAbilityId()=='A0LN'
endfunction

function Leap_ReturnOrder takes unit pfU returns nothing
local string lf5=H2Tx(pfU)
local string lpG=GetString(lf5,"OrderType")
local string lph=OrderId2String(GetInteger(lf5,"OrderId"))
local real lEv
local real lEV
local unit lFB
local trigger ltt=GetTrigger(lf5,"Trigger_TrackOrder")
local boolean lpH=not GetBoolean(lf5,"Idle")
local boolean lpi=GetBoolean(lf5,"SuperOrder")
call DisableTrigger(ltt)
call IssueImmediateOrderById(pfU,OrderId("stop"))
if lpG=="Target"and(lpH or lpi)then
	set lFB=GetUnit(lf5,"OrderTarget")
	call IssueTargetOrder(pfU,lph,lFB)
elseif lpG=="Point"and(lpH or lpi)then
	set lEv=GetReal(lf5,"OrderPointX")
	set lEV=GetReal(lf5,"OrderPointY")
	call IssuePointOrder(pfU,lph,lEv,lEV)
elseif(lpH or lpi)then
	call IssueImmediateOrder(pfU,"OrderString")
endif
call SetBoolean(lf5,"SuperOrder",false)
call EnableTrigger(ltt)
endfunction

function Leap_SpeedBonusCheck takes nothing returns boolean
return IsUnitType(GetFilterUnit(),UNIT_TYPE_HERO) and IsUnitAlly(GetFilterUnit(),GetOwningPlayer(udg_u_DTAX_temp))
endfunction

function Leap_DoSpeedBonus takes nothing returns nothing
local unit lfU=GetEnumUnit()
local unit lJV=CreateUnit(GetOwningPlayer(lfU),'e01R',0,0,0)
call UnitAddAbility(lJV,'A0LO')
call SetUnitAbilityLevel(lJV,'A0LO',GetUnitAbilityLevel(udg_u_DTAX_temp,'A0LN'))
call UnitApplyTimedLife(lJV,'BTLF',10)
endfunction

function Leap_EndRoar takes unit pfU returns nothing
local group lEw=CreateGroup()
local boolexpr lEW=Condition(function Leap_SpeedBonusCheck)
set udg_u_DTAX_temp=pfU
call GroupEnumUnitsInRange(lEw,GetUnitX(pfU),GetUnitY(pfU),800,lEW)
call ForGroup(lEw,function Leap_DoSpeedBonus)
call DestroyBoolExpr(lEW)
call DestroyGroup(lEw)
endfunction

function Leap_JumpMoving takes nothing returns nothing
local timer ltt=GetExpiredTimer()
local string lf5=H2Tx(ltt)
local unit lfU=GetUnit(lf5,"Hero")
local real lpj=GetReal(lf5,"DistanceRemaining")
local real lpJ=GetReal(lf5,"OriginalDistance")
local real lnM=GetReal(lf5,"Angle")
local real lpC=GetUnitX(lfU)+30*Cos(lnM*bj_DEGTORAD)
local real lpd=GetUnitY(lfU)+30*Sin(lnM*bj_DEGTORAD)
local real lpk=200
local real lpK=(1-lpj/lpJ)*lpk*2
if lpK>lpk then
	set lpK=lpk*2-lpK
endif
call SetUnitFlyHeight(lfU,ReturnMaxReal(lpK,0),0)
call SetUnitX(lfU,SafeX(lpC))
call SetUnitY(lfU,SafeY(lpd))
call SetUnitFacing(lfU,lnM)
call SetReal(lf5,"DistanceRemaining",lpj-20)
if lpK<1 and lpj-lpJ!=0 then
	call SetBoolean(H2Tx(lfU),"InAir",false)
	call SetUnitFacing(lfU,lnM)
	call SetUnitAnimation(lfU,"stand")
	call SetUnitPathing(lfU,true)
	call SetUnitInvulnerable(lfU,false)
	call Leap_ReturnOrder(lfU)
	call Leap_EndRoar(lfU)
	call PauseTimer(ltt)
	call FastFlush(lf5)
	call DestroyTimer(ltt)
endif
endfunction

function Leap_JumpSetting takes nothing returns nothing
local unit lfU=GetTriggerUnit()
local integer lmZ=GetUnitAbilityLevel(lfU,'A0LN')
local real lFc=350+50*lmZ
local real lnM=GetUnitFacing(lfU)
local real lFC=GetUnitX(lfU)
local real lFd=GetUnitY(lfU)
local real lEv=SafeX(lFC+lFc*Cos(lnM*bj_DEGTORAD))
local real lEV=SafeY(lFd+lFc*Sin(lnM*bj_DEGTORAD))
local timer ltt=CreateTimer()
local string lf5=H2Tx(ltt)
local trigger lpL=GetTrigger(H2Tx(lfU),"Trigger_TrackOrder")
set lFc=SquareRoot((lFC-lEv)*(lFC-lEv)+(lFd-lEV)*(lFd-lEV))
if lFc>100 then
	call UnitAddAbility(lfU,'Amrf')
	call UnitRemoveAbility(lfU,'Amrf')
	call SetUnitPathing(lfU,false)
	call SetUnitInvulnerable(lfU,true)
	call SetUnitAnimationByIndex(lfU,6)
	call DisableTrigger(lpL)
	call IssueImmediateOrderById(lfU,OrderId("stop"))
	call EnableTrigger(lpL)
	call SetReal(lf5,"DistanceRemaining",lFc)
	call SetReal(lf5,"OriginalDistance",lFc)
	call SetReal(lf5,"Angle",lnM)
	call SetHandle(lf5,"Hero",lfU)
	call TimerStart(ltt,.025,true,function Leap_JumpMoving)
	call SetBoolean(H2Tx(lfU),"Leap_InAir",true)
	call SetBoolean(H2Tx(lfU),"SuperOrder",false)
endif
call PolledWait(5)
call SetUnitPathing(lfU,true)
call SetUnitInvulnerable(lfU,false)
endfunction

function Leap_DoNothing takes nothing returns nothing
endfunction

function Leap_SaveOrders takes nothing returns nothing
local unit lfU=GetTriggerUnit()
local string lf5=H2Tx(lfU)
local boolean lpN=GetBoolean(lf5,"Leap_InAir")
call SetInteger(lf5,"OrderId",GetIssuedOrderId())
call SetBoolean(lf5,"Idle",false)
if GetTriggerEventId()==EVENT_UNIT_ISSUED_TARGET_ORDER then
	call SetString(lf5,"OrderType","Target")
	call SetHandle(lf5,"OrderTarget",GetOrderTarget())
elseif GetTriggerEventId()==EVENT_UNIT_ISSUED_POINT_ORDER then
	if lpN or GetRange(GetUnitX(lfU),GetUnitY(lfU),GetOrderPointX(),GetOrderPointY())>800 then
		call SetString(lf5,"OrderType","Point")
		call SetReal(lf5,"OrderPointX",GetOrderPointX())
		call SetReal(lf5,"OrderPointY",GetOrderPointY())
	else
		call SetBoolean(lf5,"Idle",true)
	endif
else
	call SetString(lf5,"OrderType","Instant")
endif
if lpN then
	call SetBoolean(lf5,"SuperOrder",true)
endif
endfunction

function Leap_SpellOrder takes nothing returns boolean
return OrderId2String(GetIssuedOrderId())!="windwalk"
endfunction

function Leap_IsHeroMoves takes nothing returns nothing
local unit lfU=GetUnit(H2Tx(GetExpiredTimer()),"Hero")
local string lf5=H2Tx(lfU)
local real lxx=GetUnitX(lfU)
local real lyy=GetUnitY(lfU)
local string lpG=GetString(lf5,"OrderType")
if lpG=="Point"and GetRange(GetUnitX(lfU),GetUnitY(lfU),GetReal(lf5,"OrderPointX"),GetReal(lf5,"OrderPointY"))<100 then
	call SetBoolean(lf5,"Idle",true)
endif
endfunction

function Leap_TrackOrdersStart takes nothing returns nothing
local unit lfU=GetTriggerUnit()
local trigger ltt=CreateTrigger()
local timer lt2
call TriggerRegisterUnitEvent(ltt,lfU,EVENT_UNIT_ISSUED_TARGET_ORDER)
call TriggerRegisterUnitEvent(ltt,lfU,EVENT_UNIT_ISSUED_POINT_ORDER)
call TriggerRegisterUnitEvent(ltt,lfU,EVENT_UNIT_ISSUED_ORDER)
call TriggerAddAction(ltt,function Leap_SaveOrders)
call TriggerAddCondition(ltt,Condition(function Leap_SpellOrder))
call SetHandle(H2Tx(lfU),"Trigger_TrackOrder",ltt)
set lt2=CreateTimer()
call SetHandle(H2Tx(lt2),"Hero",lfU)
call TimerStart(lt2,.3,true,function Leap_IsHeroMoves)
call SetHandle(H2Tx(lfU),"Timer_CheckIdle",lt2)
endfunction

function Leap_LearnFirst takes nothing returns nothing
if GetUnitAbilityLevel(GetTriggerUnit(),'A0LN')==1 then
	call Leap_TrackOrdersStart()
endif
endfunction

function Leap_Init takes nothing returns nothing
local trigger ltt=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(ltt,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(ltt,Condition(function Leap_Spell))
call TriggerAddAction(ltt,function Leap_JumpSetting)
set ltt=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(ltt,EVENT_PLAYER_UNIT_SPELL_CAST)
call TriggerAddCondition(ltt,Condition(function Leap_Spell))
call TriggerAddAction(ltt,function Leap_DoNothing)
set ltt=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(ltt,EVENT_PLAYER_HERO_SKILL)
call TriggerAddAction(ltt,function Leap_LearnFirst)
endfunction


function InitTrig_Leap takes nothing returns nothing
endfunction

 

скилл создал, а вот как его прицепить к коду?) (если не сложно, отметьте плиз эти места)

(делаю из Стремительности)

Изменено пользователем Gekko

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

2Gekko

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

 

тебе проще будет написать на триггерах спелл.

 

2felix_ff незнешь как сетка мепо (geomancer) сделана? там вообщем если незнаешь фишка такая, кидает сетку на зона и всех в сеть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

2Gekko

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

 

тебе проще будет написать на триггерах спелл.

 

2felix_ff незнешь как сетка мепо (geomancer) сделана? там вообщем если незнаешь фишка такая, кидает сетку на зона и всех в сеть.

 

 

1) Прыжок если будет у мну время я перепишу пооптимальней ибо в том коде что я доводил не хватает стандартных Return-Bug функций. Если уж действительно очень надо то завтра выложу

 

2) Сетка мипо делается по такому принципу:

Есть дамми-юнит с моделью "летящей сетки" и определенной заданной скоростью передвижения,

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

далее ждется время которое расчитывается по формуле: DistanceBetweenPoints(GetUnitLoc(GetTriggerUnit()), GetSpellTargetLoc())/x, где x - это скорость дамми юнита

(проще говоря дистанция между героем и точкой применения спелла делится на скорость дамми).

После вейта происходит пик юнитов по группе с последующим циклом по ней и кастованием дамми кастерами сетки на EnumUnit'ов.

 

aka часть кода выглядеть должна примерно так:

 

function X_Act takes nothing returns nothing

local unit u = CreateUnit(Player(12), 'hpea', 0,0,0)

call UnitAddAbility(u, 'Axxx')

call SetUnitAbilityLevel(u, 'Axxx', GetUnitAbilityLevel(udg_StackUnit, 'AXXX'))

call SetUnitExploded(u, true)

call UnitApplyTimedLife(u, 'BTLF', 0.75)

call IssueTargetOrder(u, "ensnare", GetEnumUnit())

set u = null

endfunction

 

function Setka takes nothing returns nothing

local unit a = GetTriggerUnit()

local location l = GetSpellTargetLoc()

local group g = CreateGroup()

local unit b = CreateUnit(GetOwningPlayer(a), 'xxxx', GetUnitX(a), GetUnitY(a), 0)

call IssuePointOrder(b, "move", GetLocationX(l), GetLocationY(l))

call TriggerSleepAction(DistanceBetweenPoints(GetUnitLoc(a), l)/350)

call GroupEnumUnitsInRange(g, GetUnitX(:drink:, GetUnitY(:), 300, Condition(function X_Cond))

set udg_StackUnit = a

call ForGroup(g, function X_Act)

call DestroyGtoup(g)

call RemoveLocation(l)

set udg_StackUnit = null

set g = null

set l = null

endfunction

 

смысл примерно таков... есть еще некоторые аспекты по настройке дамми абилок и дамми юнитов и некоторые еще проверки но это если поэксперементировать ничего сложного не составит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

как можна заставить каставать на всех в области путем триггеров?

 

и можна ли например взять первова юнита в группе?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

как можна заставить каставать на всех в области путем триггеров?

 

и можна ли например взять первова юнита в группе?

 

 

Да можно.

На ГУИ (тригерах) цикл по группе звучит как: Отряд- Pick every unit in group and do multiple actions

так вот там далее в цикле действия просто тупо делаешь действие как для одного каста. Т.е создаешь одного дамми юнита, даешь ему дамми абилку и заставляешь дамми кастовать ее на Picked Unit

 

вывести первого юнита из группы можно только на джассе.

функция отвечающая за такое действие

native function FirstOfGroup takes group g returns unit

 

кстати благодаря ей можно "эмулировать" цикл по группе

к примеру есть группа g, нам надо чтобы к примеру каждому юниту из этой группы нанесло 10 повреждений, то конструкция будет выглядеть как

 

function DamageGroup takes group g returns nothing

loop

exitwhen FirstOfGroup(g) == null

call SetUnitState(FirstOfGroup(g), UNIT_STATE_LIFE, GetUnitState(FirstOfGroup(g), UNIT_STATE_LIFE) - 10)

call GroupRemoveUnit(g, FirstOfGroup(g))

endloop

endfunction

 

пока юниты в данной группе не закончатся то цикл будет жить.. правда в такой конструкции есть 2 минуса: 1) юниты при таком переборе из группы удаляются

2) этот вариант медленней работает чем обычная функция ForGroup использующаяся в ГУИ тригерах. но при таком варианте можно устраивать циклы по группе не теряя локальных данных.

 

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

post-5552-1185359435_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а зачем ты выставляешь что бы взрывался на смерть и таймер?

 

понял, зачем чтоб он потом исчезал :pray: блин у мя не работает почему то, хз мож потому что я делаю на основе огненного столба... счас попробую поменять.

 

Все огромное спасибо, просто не думал что спелл кастер может каставать сразу на несколько целей, столько перспектив открывается :pray:

Изменено пользователем Magz88

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а зачем ты выставляешь что бы взрывался на смерть и таймер?

 

понял, зачем чтоб он потом исчезал :) блин у мя не работает почему то, хз мож потому что я делаю на основе огненного столба... счас попробую поменять.

 

Все огромное спасибо, просто не думал что спелл кастер может каставать сразу на несколько целей, столько перспектив открывается ;)

 

 

Юнит ставиться на explode что бы при смерти он взрывался (тем самым он отчишается из памяти варкрафта), потом ему ставится таймер жизни на нужное тебе время. (самый маленький период за который дамми кастер может сколдовать спелл это 0.3 секунды, я обычно ставлю на 0.75, (хотя в некоторых случаях надо ставить больше:

 

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

 

Собсна к чему это я все: конструкция вида:

SetUnitExploded(u, true)

ApplyTimedLife(u, 'BTLF', 1.00)

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

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

 

ака если действие будет

call IssueTargetOrder(u, "ensnare", v)

call RemoveUnit(u)

то ничего не произойдет так как юнит "u" не успеет ничего скастовать ибо будет удален раньше..

можно конечно делать так:

call IssueTargetOrder(u, "ensnare", v)

call TriggerSleepAction(0.30)

call RemoveUnit(u)

но такой вариант подвешивает поток... + в цикле по группе так делать нежелательно.

 

кстати про цикл:

Все огромное спасибо, просто не думал что спелл кастер может каставать сразу на несколько целей, столько перспектив открывается :)

дамми кастер не может кастовать сразу на нескольких целей...

Один дамми кастер кастует только на одного юнита (он кастует задержкой)

 

В цикле происходит следующее: представь у тебя есть 5 яблок. тебе надо что бы их съели. Так как ты только один ты можешь съесть только одно яблоко за раз (я надеюсь пять яблок ты себе в рот засунуть не можешь :))

но если вас будет пятеро то вы сможете за один раз съесть все пять яблок каждый берет по одному яблоку и засовывает его в рот :) но делается это настолько быстро что другим кажется что пять яблок просто взяли и съели.

 

конструкция вида:

 loop
	  exitwhen (boolean)


	  endloop

это цикличность. loop -открывает цикл - это значит что те действия которые находятся в теле цикла будут повторяться столько раз, пока не будет достигнуто определенное условие.

условие указывается в операторе exitwhen. если я напишу exitwhen true то цикл закончится сразуже потому что выражение истинно.

в exitwhen как я уже сказал можно передавать логические значения: т.е. сравнивать что ли, отрицать или указывать на логическую переменную

 

к примеру:

local integer i = 0

loop

exitwhen i == 3

//----------------------

//----------------------Тело

set i = i + 1 //----------------------Цикла

endloop

 

 

в теле цикла будет повторятся те действия пока локальная переменная i не станет равна 3.

Так вот в том же самом действии Pick Every Units And Do Multiple Actions

ты создаешь группу, и далее следуешь циклом по ней.

он длится до тех пор пока все юниты в группе не будут перебранны.

мы создаем одного дамми кастера в теле цикла и заставляем кастить его на Picked Unit

но нужно понимать что Picked Unit является локальным на каждый интервал цикла и 1 дамми кастер кастит только на того юнита который считается у цикла Enum-юнитом в данную интерацию цикла. вот так...

 

Криво я конечно объясняю но все равно думаю это внесет определенную ясность.

 

 

Add: Также учти что настройки дамми-кастера тоже должны быть особенными:

1) он должен быть неуязвим: дай ему в редакторе объектов способнсоть "Москиты", данная способнсоть крайне полезна, она делает так что юнит становится неуязвимым, также она делает юнита невыделаемым. но тригерно такому юниту все ранво можно отдавать приказы

2) его не должны видеть: просто сделай ему файл модели .mdl (это равносильно тому что модели у юнита просто нет)

3)у него должна быть мана на спеллы(если у спелов не ставить затрачиваемую ману на 0 то ставь у дамми юнита поле максимум маны так что бы тебе точно хватило ее хотя бы на один каст любого из спелов я предпочитаю ставить данное поле на 500(в моей карте столько маны мало какое заклинание требует)) и колпе изначальное кол-во маны на туже самую величину

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

5) и ему желательно не иметь атаки(что бы если он создавался рядом с врагами не сбивал себе приказы автоатакой)

 

Я тут щяс чутка помыслил и решил вам немножка помочь в освоении а то слова словами а так хоть наглядно продемонстрирую что и как надо.

 

Вот наклепал карту как использовать дамми абилки более менее.

+ как и обещал сделал спелл Leap (прыжок из доты)

что бы вставить Leap в свою карту необходимо создать 4 глобальные переменные:

LeapUnit - Боевая единица

LeapDistance - Целоисчислительная

LeapAngle - Реальная

LeapHeight - Целоисчислительная

 

Создать в своей карте тригер с названием Leap, далее конвертировать его в тексовую форму (Правка -> Конвертировать в текст), после чего копипастом заменить его содержание на то что есть в моей карте.

А ну и создать способность на основе чего не важно но главное в коде тогда поправить условие на срабатывание. Сейчас там строчка:

function Trig_Leap_Conditions takes nothing returns boolean

return GetSpellAbilityId() == 'A004'

endfunction

 

надо будет параметр 'A004' изменить на рау-код твоей абилки. Рау-код можно посмотреть в редакторе объектов нажав ctrl+D

Dummy_Manual.rar

Изменено пользователем felix_ff

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

да с дами я разобрался еще пост назад) но все равно спасибо, теперь новая проблема :)

я делаю способность героя чтоб он "закапывался" т.е. менял модель, и я хочу чтобы было триггерно сделанно чтоб он становился прозрачным, а получаеца что на деле он меняет форму а потом когда он ее меняет почему то не становится прозрачным... вообщем счас скрин прикреплю. в способности стоит все по дефолту.

 

вот еще почему то сеть не кидаеца больше чем на 6рых противников, время жизни кастера 0.5 сек

post-150681-1185573280_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

да с дами я разобрался еще пост назад) но все равно спасибо, теперь новая проблема :angry:

я делаю способность героя чтоб он "закапывался" т.е. менял модель, и я хочу чтобы было триггерно сделанно чтоб он становился прозрачным, а получаеца что на деле он меняет форму а потом когда он ее меняет почему то не становится прозрачным... вообщем счас скрин прикреплю. в способности стоит все по дефолту.

 

вот еще почему то сеть не кидаеца больше чем на 6рых противников, время жизни кастера 0.5 сек

 

 

Ты не установил прозрачность :angry: у тебя в действиее SetUnitVertexColor() значение прозрачности (transpersy) 0%... а надо ставить больше. 100% прозрачность - юнита не будет видно, 50 %- будет затемнен

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

там просто не тот скрин, сори еслит ставить 100 (проверь сам) он не исчезает, просто мигает на пол секунды и все

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

опиши мне пожалуйста точно что должен делать данный спелл. я тогда тебе код скину.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

зы бес плагиата :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

зы бес плагиата ;)

 

 

тогда просто лечге добавлять герою переделанную способность: "постоянная невидимость".

И проверять если способность есть то удалять ее (при касте) а если нету то наоборот добавлять

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

нужно чтоб он был невидим для игрока тоже, а так типа рассыпался делаешь движение он опять появляеца и ваще ниочем (

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вообщем нужно чтоб он был невидим как фатомка в доте, а для врагов у него еще будет "невидимость" а прозрачным он не становица ставил на разные значения уровень прозрачности ниче не работает, только на долю секунды он исчезает и потом опять появляеца.

 

хм, попробовал поставить чтоб он становился прозрачным каждые 0.5 сек, в форме не работает. Наверно все дело из за того что он перерождаеца и в той форме неможет быть прозрачности... Блин придеца все переделывать

 

 

зы, а где спопобность постоянная невидимость? :) и вот еще, как сделать чтобу него атаки не было

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как нахимичить с триггерами так, чтобы герой мог взять только один(два) предмет(а) определённого класса?

как в компаниях некатарых? если инглиш знал бы сказалбы я раньше как то делал с друзями

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вообщем нужно чтоб он был невидим как фатомка в доте, а для врагов у него еще будет "невидимость" а прозрачным он не становица ставил на разные значения уровень прозрачности ниче не работает, только на долю секунды он исчезает и потом опять появляеца.

 

хм, попробовал поставить чтоб он становился прозрачным каждые 0.5 сек, в форме не работает. Наверно все дело из за того что он перерождаеца и в той форме неможет быть прозрачности... Блин придеца все переделывать

зы, а где спопобность постоянная невидимость? :D и вот еще, как сделать чтобу него атаки не было

 

 

что бы небыло атаки тригерно кастуй дамми кастером измененную абилку "винные пары" (там у нее есть поле "зарпретить - ближнюю атаку" или дальнюю.

 

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

 

Способность постоянная невидимость (я точно не помню но вроде): Особые - Войска -постоянная невидимость.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо. Теперь следущий нуб вопрос, вот как сделать чтоб абилка была невидна для героя, ну например в доте это реализованно как добавляние мирке (ПОТМ) када она прыгает абилки друида "превратица в ворона" ну чтоб она там прыгала, но она не видна в меню героя.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас