felix_ff 0 Жалоба Опубликовано: 9 июля 2007 Код канешно жесть, жрет много. можно оптимизировать раз в 10 Причем зачем каставать если можно через абычный триггер изменить мс юнита. думаю там тупо иконка, ну если они сделали через ускорение эт ТТ Зы. я тут арену делаю можите подкинуть идейку на героев/абилки и тп. фантазия уже закончилась. теоритически могу реализовать любую идею. про кредиты не забуду Зачем ламать открытая дота есть, хотя хз есть ли там мирка, непомню какая версия. Последняя которая у меня есть это 6.41, Мирана там есть, оттудова собсно код и брал. Хотел вчера привести код в более достойный вид но после изменения 2 функции энтузиазм выхохся :/ чета последнее время мну ломаед кодить. Фантазия кстати у мну тоге закончилась по полчаса придумываю спелл какойнить новый в своей карте ужос одним словом. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Magz88 0 Жалоба Опубликовано: 9 июля 2007 счас 6.44b есть там +6 новых геровев и тд. но это неважно блин вот как менять подпись в способностях? ну вот например как у невера в доте абилка есть которая прибавляет дмг, как там сделано так что подпись меняеца? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
felix_ff 0 Жалоба Опубликовано: 9 июля 2007 (изменено) счас 6.44b есть там +6 новых геровев и тд. но это неважно блин вот как менять подпись в способностях? ну вот например как у невера в доте абилка есть которая прибавляет дмг, как там сделано так что подпись меняеца? Скорее всего там абилка пустышка с кучей уровней на каждом свое описание. Когда герой убивает боевую единицу то там тригерно повышеается уровень данной абилки, поэтому изменяется и описние. Если что вечером проверю. щяс не дома редактора под рукой нету. Изменено 9 июля 2007 пользователем felix_ff Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Magz88 0 Жалоба Опубликовано: 10 июля 2007 Блин ну эт как то тупо -.- дожно же быть какнить попроще, т.е. получаеца что там у него 60 лвлов абилок. этож так все нагружает омг. уж проще ваще от этого отказаца... если тольлко так можнопопроще, т.е. получаеца что там у него 60 лвлов абилок. и еще эт жесть как все нагружает, проще если другова выхода нет отказаца от этого и например сделать счетчик там где еда или дерево.. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
felix_ff 0 Жалоба Опубликовано: 10 июля 2007 Блин ну эт как то тупо -.- дожно же быть какнить попроще, т.е. получаеца что там у него 60 лвлов абилок. этож так все нагружает омг. уж проще ваще от этого отказаца... если тольлко так можнопопроще, т.е. получаеца что там у него 60 лвлов абилок. и еще эт жесть как все нагружает, проще если другова выхода нет отказаца от этого и например сделать счетчик там где еда или дерево.. почему. моно сделать например 4 дамми абилки как раз по 8 увроней каждая, или еще больше абилок тогда гемора не будет. просто в карту добавиться чутка больше веса. адд: глянул в дотцу :/ ну да там у дамми абилки 31 уровень :/ Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Magz88 0 Жалоба Опубликовано: 11 июля 2007 т.е. только можно меняя уровень абилки? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
felix_ff 0 Жалоба Опубликовано: 11 июля 2007 т.е. только можно меняя уровень абилки? да. по другому никак. хотя в варе есть еще ссылки :/ т.е. можно указывать ссылку на определенную строку с .wts файле карты, но я точно не знаю как их использовать, ибо пробовал но работают они криво. Так что в данном случае идеальней всего использовать дамии абилку и смену ее уровней. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Magz88 0 Жалоба Опубликовано: 11 июля 2007 Если ссылку успользовать ее нельзя юзнать на переменную, а эт получаеца тоже самое Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Gekko 0 Жалоба Опубликовано: 17 июля 2007 (изменено) а как вставить его в карту? я на счет кода... Изменено 17 июля 2007 пользователем Gekko Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Magz88 0 Жалоба Опубликовано: 21 июля 2007 2Gekko просто в тириггерах, наверху нажимаешь на картинку карты и там будет нестандартый код, вот туда и вставляешь. 2felix_ff несложно было бы посматрель как сделан ульт ск? (sand king) я хочу сделать абилку что типа герой бежит и делает стан (ну в доте это реализованно как садер клап) я сделал через добавление абилки стана и каставания ее передочески, но пробема в том что при каставние он постоянно оставливается и появляеца еще иконка этого стана... Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
felix_ff 0 Жалоба Опубликовано: 24 июля 2007 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' ) что бы у него была мана (настроить в РО поля "максимальная мана" и "изначальное кол-во маны") вообщем все Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Magz88 0 Жалоба Опубликовано: 24 июля 2007 Спасибо, но я уже решил эту проблему только вот что - я сделал спеллкастера но када зажимаешь альт у него отображаются жизни( как это убрать, мож сделать ее зданием? все решил вот еще проблема, как сделать модель боевоей еденицы в виде трупа например голема? (т.е. куча камней) зарание спасибо Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Gekko 0 Жалоба Опубликовано: 24 июля 2007 (изменено) 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 скилл создал, а вот как его прицепить к коду?) (если не сложно, отметьте плиз эти места) (делаю из Стремительности) Изменено 24 июля 2007 пользователем Gekko Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Magz88 0 Жалоба Опубликовано: 24 июля 2007 2Gekko Блин ищи где упоминается прыжок и меняй на свою абилку, т.е. вписывай. я не хочу разбираца во всем коде, если ты не поймешь что вообще код делает и по какому принципу работает будешь всегда задавать вопросы тебе проще будет написать на триггерах спелл. 2felix_ff незнешь как сетка мепо (geomancer) сделана? там вообщем если незнаешь фишка такая, кидает сетку на зона и всех в сеть. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
felix_ff 0 Жалоба Опубликовано: 24 июля 2007 2Gekko Блин ищи где упоминается прыжок и меняй на свою абилку, т.е. вписывай. я не хочу разбираца во всем коде, если ты не поймешь что вообще код делает и по какому принципу работает будешь всегда задавать вопросы тебе проще будет написать на триггерах спелл. 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(, 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 смысл примерно таков... есть еще некоторые аспекты по настройке дамми абилок и дамми юнитов и некоторые еще проверки но это если поэксперементировать ничего сложного не составит. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Magz88 0 Жалоба Опубликовано: 25 июля 2007 блин я джазз еще изучаю... не все кароч понимаю, большинство пытаюсь на триггерах делать, т.е. как бы мне делать спелл кастера с абилкой сеткой и тупо ему приказывать на каждого кидать сеть? как можна заставить каставать на всех в области путем триггеров? и можна ли например взять первова юнита в группе? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
felix_ff 0 Жалоба Опубликовано: 25 июля 2007 блин я джазз еще изучаю... не все кароч понимаю, большинство пытаюсь на триггерах делать, т.е. как бы мне делать спелл кастера с абилкой сеткой и тупо ему приказывать на каждого кидать сеть? как можна заставить каставать на всех в области путем триггеров? и можна ли например взять первова юнита в группе? Да можно. На ГУИ (тригерах) цикл по группе звучит как: Отряд- 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 использующаяся в ГУИ тригерах. но при таком варианте можно устраивать циклы по группе не теряя локальных данных. Я прикрепил скриншот который несет почти одну и туже суть что я описал выше. используй пока такой метод как научишься нормально с тригерами обычными можно переходить и к джассу. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Magz88 0 Жалоба Опубликовано: 25 июля 2007 (изменено) а зачем ты выставляешь что бы взрывался на смерть и таймер? понял, зачем чтоб он потом исчезал блин у мя не работает почему то, хз мож потому что я делаю на основе огненного столба... счас попробую поменять. Все огромное спасибо, просто не думал что спелл кастер может каставать сразу на несколько целей, столько перспектив открывается Изменено 25 июля 2007 пользователем Magz88 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
felix_ff 0 Жалоба Опубликовано: 26 июля 2007 (изменено) а зачем ты выставляешь что бы взрывался на смерть и таймер? понял, зачем чтоб он потом исчезал блин у мя не работает почему то, хз мож потому что я делаю на основе огненного столба... счас попробую поменять. Все огромное спасибо, просто не думал что спелл кастер может каставать сразу на несколько целей, столько перспектив открывается Юнит ставиться на 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 Изменено 4 августа 2007 пользователем felix_ff Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Magz88 0 Жалоба Опубликовано: 27 июля 2007 да с дами я разобрался еще пост назад) но все равно спасибо, теперь новая проблема я делаю способность героя чтоб он "закапывался" т.е. менял модель, и я хочу чтобы было триггерно сделанно чтоб он становился прозрачным, а получаеца что на деле он меняет форму а потом когда он ее меняет почему то не становится прозрачным... вообщем счас скрин прикреплю. в способности стоит все по дефолту. вот еще почему то сеть не кидаеца больше чем на 6рых противников, время жизни кастера 0.5 сек Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
felix_ff 0 Жалоба Опубликовано: 28 июля 2007 да с дами я разобрался еще пост назад) но все равно спасибо, теперь новая проблема я делаю способность героя чтоб он "закапывался" т.е. менял модель, и я хочу чтобы было триггерно сделанно чтоб он становился прозрачным, а получаеца что на деле он меняет форму а потом когда он ее меняет почему то не становится прозрачным... вообщем счас скрин прикреплю. в способности стоит все по дефолту. вот еще почему то сеть не кидаеца больше чем на 6рых противников, время жизни кастера 0.5 сек Ты не установил прозрачность у тебя в действиее SetUnitVertexColor() значение прозрачности (transpersy) 0%... а надо ставить больше. 100% прозрачность - юнита не будет видно, 50 %- будет затемнен Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Magz88 0 Жалоба Опубликовано: 28 июля 2007 там просто не тот скрин, сори еслит ставить 100 (проверь сам) он не исчезает, просто мигает на пол секунды и все Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
felix_ff 0 Жалоба Опубликовано: 28 июля 2007 опиши мне пожалуйста точно что должен делать данный спелл. я тогда тебе код скину. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Magz88 0 Жалоба Опубликовано: 28 июля 2007 вообщем идея приколная этого спелла, галем рассыпается и как бы закапыватся (способность магильщика) становясь невидимым соот. и медленно ползает, потом када игрок хочет голем обратно собирается. модель при "закапывание" того же голема что и норм, и я решил обойти пробему рассыпания тем что прокручиваю анимацию рождения/смерти, сначала была пробема в том что рождения нужно делать из формы 2 и пришлось проставить туда галема, и тупо прятать его. вообщем все утыкается в то что он не изчезает... зы бес плагиата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
felix_ff 0 Жалоба Опубликовано: 29 июля 2007 вообщем идея приколная этого спелла, галем рассыпается и как бы закапыватся (способность магильщика) становясь невидимым соот. и медленно ползает, потом када игрок хочет голем обратно собирается. модель при "закапывание" того же голема что и норм, и я решил обойти пробему рассыпания тем что прокручиваю анимацию рождения/смерти, сначала была пробема в том что рождения нужно делать из формы 2 и пришлось проставить туда галема, и тупо прятать его. вообщем все утыкается в то что он не изчезает... зы бес плагиата тогда просто лечге добавлять герою переделанную способность: "постоянная невидимость". И проверять если способность есть то удалять ее (при касте) а если нету то наоборот добавлять Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Magz88 0 Жалоба Опубликовано: 29 июля 2007 нужно чтоб он был невидим для игрока тоже, а так типа рассыпался делаешь движение он опять появляеца и ваще ниочем ( Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Magz88 0 Жалоба Опубликовано: 31 июля 2007 вообщем нужно чтоб он был невидим как фатомка в доте, а для врагов у него еще будет "невидимость" а прозрачным он не становица ставил на разные значения уровень прозрачности ниче не работает, только на долю секунды он исчезает и потом опять появляеца. хм, попробовал поставить чтоб он становился прозрачным каждые 0.5 сек, в форме не работает. Наверно все дело из за того что он перерождаеца и в той форме неможет быть прозрачности... Блин придеца все переделывать зы, а где спопобность постоянная невидимость? и вот еще, как сделать чтобу него атаки не было Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
gold_lezka 0 Жалоба Опубликовано: 3 августа 2007 Как нахимичить с триггерами так, чтобы герой мог взять только один(два) предмет(а) определённого класса? как в компаниях некатарых? если инглиш знал бы сказалбы я раньше как то делал с друзями Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
felix_ff 0 Жалоба Опубликовано: 4 августа 2007 вообщем нужно чтоб он был невидим как фатомка в доте, а для врагов у него еще будет "невидимость" а прозрачным он не становица ставил на разные значения уровень прозрачности ниче не работает, только на долю секунды он исчезает и потом опять появляеца. хм, попробовал поставить чтоб он становился прозрачным каждые 0.5 сек, в форме не работает. Наверно все дело из за того что он перерождаеца и в той форме неможет быть прозрачности... Блин придеца все переделывать зы, а где спопобность постоянная невидимость? и вот еще, как сделать чтобу него атаки не было что бы небыло атаки тригерно кастуй дамми кастером измененную абилку "винные пары" (там у нее есть поле "зарпретить - ближнюю атаку" или дальнюю. все ясно... насчет твоей абилки так хитро все сделать не получится. выбирай что либо одно или полное затемнение боевой единицы или "невидимость" для врагов. просто когда даешь невидимость для единицы на нее срабатывает обычный фейд таймер, который сбрасывает все другие настройки. Способность постоянная невидимость (я точно не помню но вроде): Особые - Войска -постоянная невидимость. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Magz88 0 Жалоба Опубликовано: 5 августа 2007 Спасибо. Теперь следущий нуб вопрос, вот как сделать чтоб абилка была невидна для героя, ну например в доте это реализованно как добавляние мирке (ПОТМ) када она прыгает абилки друида "превратица в ворона" ну чтоб она там прыгала, но она не видна в меню героя. а возможно как ни будь тригерно сменить ему модель, тада можно сделать чтоб он был невидим и для врагов и для своих быть "прозрачным" Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах