и так ,на ascent есть способы заставить кастовать мобов с помощью бд либо же через lua. И так первый способ через бд :
Code
- для начала открываем нашу базу данных через "мускул"-navicat for my SQL . - заходим в таблицу "ai_agents" - прописываем id нашего моба ( которого вы хотите заставить кастовать) - Event: 0 - chance- тут пишем шанс того что бос прокастует спел на игрока - Maxcount: 0 - Spell: ID спела который нпс должен кастовать - Spell Type: 8 - Targettype_overwrite: 1 - Cooldown_overwrite: кулдаун спела( время восстановления) в МС , то есть 1000= 1 секунда - FloatMisc1: 0 - Misc2: 0 это самый просто , а также по моему мнению самый не эффективный способ) подходит когда бос кастует максимум пару спелов))
второй способ не такойто и лёгкий =/ но всёже поддержка LUA это не " хухры-мухры" вам я покажу вам это уже на конкретном примере
Code
function Doomwalker_Enrage(Unit, event, miscunit, misc) if Unit:GetHealthPct() < 20 and Didthat == 0 then Unit:FullCastSpell(34670) Didthat = 1 else end end
function Doomwalker_Earthquake(Unit, event, miscunit, misc) print "Doomwalker Earthquake" Unit:FullCastSpellOnTarget(32686,Unit:GetClosestPlayer()) Unit:SendChatMessage(11, 0, "Earthquake...") end
function Doomwalker_Chain_Light(Unit, event, miscunit, misc) print "Doomwalker Chain_Light" Unit:FullCastSpellOnTarget(28167,Unit:GetRandomPlayer()) Unit:SendChatMessage(11, 0, "Now a Chain Lightning...") end
function Doomwalker_Overrun(Unit, event, miscunit, misc) print "Doomwalker Charge" Unit:FullCastSpellOnTarget(32637,Unit:GetRandomPlayer()) Unit:SendChatMessage(11, 0, "Now you will die...") end
function Doomwalker(unit, event, miscunit, misc) print "Doomwalker" unit:RegisterEvent("Doomwalker_Enrage",1000,1) unit:RegisterEvent("Doomwalker_Earthquake",10000,0) unit:RegisterEvent("Doomwalker_Chain_Light",17000,0) unit:RegisterEvent("Doomwalker_Overrun",23000,0) end
RegisterUnitEvent(17711,1,"Doomwalker")
вот это пример реализации кастов надеюсь всем известного нпс Doomwalker. А сейчас я поясню вам , что нужно менять чтобы сделать свой луа ( самый простой : каст-речь) для вашего боса /моба. и так приступим :
Code
function Doomwalker_Enrage(Unit, event, miscunit, misc) if Unit:GetHealthPct() < 20 and Didthat == 0 then Unit:FullCastSpell(34670) Didthat = 1 else end end
что мы видим тут? ответ прост. когда хп думвалкера опускаются ниже 20% он делает каст спела [url=http://old.wowhead.com/spell=34670]34670[/url] разбераемся дальше :
function Doomwalker_Earthquake(Unit, event, miscunit, misc) print "Doomwalker Earthquake" Unit:FullCastSpellOnTarget(32686,Unit:GetClosestPlayer()) Unit:SendChatMessage(11, 0, "Earthquake...") end
в чат отправляется сообщение которое сокрыт в кавычках "Earthquake..." , так же идёт каст спела [url=http://old.wowhead.com/spell=32686]32686[/url] ну тут вродебы всё понятно, также таргет спела идёт на танка не смотря на то что спел АОЕ- массовый)
идём дальше:
function Doomwalker_Chain_Light(Unit, event, miscunit, misc) print "Doomwalker Chain_Light" Unit:FullCastSpellOnTarget(28167,Unit:GetRandomPlayer()) Unit:SendChatMessage(11, 0, "Now a Chain Lightning...") end
ну тут тоже самое) он орёт "Now a Chain Lightning..." и кастует спел [url=http://old.wowhead.com/spell=28167]28167[/url] ( тут опять неправильный посравнению с вовхедом спел в близе другая молния кастуется)
function Doomwalker_Overrun(Unit, event, miscunit, misc) print "Doomwalker Charge" Unit:FullCastSpellOnTarget(32637,Unit:GetRandomPlayer()) Unit:SendChatMessage(11, 0, "Now you will die...") end
тут даже обьяснять не буду , думаю вы всё понимаете уже
function Doomwalker(unit, event, miscunit, misc) print "Doomwalker" unit:RegisterEvent("Doomwalker_Enrage",1000,1) unit:RegisterEvent("Doomwalker_Earthquake",10000,0) unit:RegisterEvent("Doomwalker_Chain_Light",17000,0) unit:RegisterEvent("Doomwalker_Overrun",23000,0) end
вот тут-то самое интерестное . выставляется таймер каста спелов вы видите unit:RegisterEvent("Doomwalker_Chain_Light",17000,0) тут написано что молния кастуется каждые 17 секунд !
RegisterUnitEvent(17711,1,"Doomwalker")
ну это собственно регистрация lua скрипта за нпс вписывается айдишник ( заместо 17711)
возможности LUA безграничны. госсип, вехиклы, квестинг, ачивы, модификации список можно продолжать бесконечно вот вики по lua конкретно для эмулятора ascent wiki ^_^ тут вы найдёте всю интересующую вас информацию. если что-то не понятно то пишите в темку)
Добавлено (13.01.2012, 14:30) --------------------------------------------- решил добавить ещё 1 скрипт, на его примере вы можете рассмотреть фазирование боса 3 фазы+ады с 1 фазой. расписывать что тут в скрипте я не буду. вы можете закинуть себе на сервер, слепить двух мобов и проверить что будет происходить сами, но всё-же если будут вопросы , то отписывайте
Code
function Bannok Grimaxe_OnCombat (pUnit, Event) -- Bannok Grimaxe enters combat pUnit:SendChatMessage(14,0, "Mmmm... more bones to gnaw on!") -- Bannok Grimaxe sends message when he begins fighting pUnit:FullCastSpell(61672) -- Bannok Grimaxe casts a spell with this id pUnit:RegisterEvent("Bannok Grimaxe_PhaseOne", 1000, 0) -- Bannok Grimaxe begins phase one. The '1000' part should always be '1000' when registering a new phase. end -- 1 function = 1 end
function Bannok Grimaxe_OnLeave (pUnit, event) -- Bannok Grimaxe leaves combat pUnit:SendChatMessage(14, 0, "The masters blade work wonders!") -- Sends chat message pUnit:RemoveEvents() -- Bannok Grimaxe removes events (spells, auras, etc...) end
function Bannok Grimaxe_KilledTarget (pUnit, event) -- Hogger killed something pUnit:SendChatMessage(14, 0, "Come Now filthy woman!") -- Summons his minion local x = pUnit:GetX(); -- The minion will spawn where hogger is at the time of this summon. local y = pUnit:GetY(); -- The minion will spawn where hogger is at the time of this summon. local z = pUnit:GetZ(); -- The minion will spawn where hogger is at the time of this summon. local o = pUnit:GetO(); -- The minion will spawn where hogger is at the time of this summon. pUnit:SpawnCreature (51008, x, y+5, z, o, 14 ,30000); -- Bannok Grimaxe spawns his minion end
function Bannok Grimaxe_OnDie (pUnit, event) -- Bannok Grimaxe dies pUnit:SendChatMessage(14, 0, "Not..possible......Bannok Grimaxe...is...ETERNAL!") -- Bannok Grimaxe sends chat when he dies pUnit:FullCastSpell(57381) -- Hogger casts this when he dies pUnit:RemoveEvents() -- Bannok Grimaxe doesn't do anything after he dies end -- 1 function = 1 end
RegisterUnitEvent (51007, 1, "Bannok Grimaxe_OnCombat") -- Blueteak uses his own scripting method of registering his basic hooks first. RegisterUnitEvent (51007, 2, "Bannok Grimaxe_OnLeave") RegisterUnitEvent (51007, 3, "Bannok Grimaxe_KilledTarget") RegisterUnitEvent (51007, 4, "Bannok Grimaxe_OnDie")
function Bannok Grimaxe_PhaseOne (pUnit, Event) -- Bannok Grimaxe is in phase 1. Phase 1 starts as soon as he enters combat. if pUnit:GetHealthPct() <= 100 then -- If hogger's health is at 100% then... pUnit:RemoveEvents() -- removes events in case of problems pUnit:RegisterEvent("Bannok Grimaxe_swarm", 20000, 0) -- Registering spell function for phase one. NOTE: 20000 = 20 SECOND INTERVALS. pUnit:RegisterEvent("Bannok Grimaxe_Unbalance", 5000, 0) -- 5000 = 5 SECOND INTERVALS pUnit:RegisterEvent("Bannok Grimaxe_ravage", 15000, 0) -- 15000 = 15 SECOND INTERVALS -- Yes, where big numbers are, is the interval (in msecs i think) that the boss will do the functions end -- closing the if pUnit:RegisterEvent("Bannok Grimaxe_PhaseTwo", 1000, 0) -- Registering phase 2 end -- closing PhaseOne
function Bannok Grimaxe_PhaseTwo (pUnit, Event) -- Needs Two Tanks because of wither strike... if pUnit:GetHealthPct() <=75 then -- When Hogger reaches 75% health, he will do... pUnit:RemoveEvents() -- removes any previous usage of spells pUnit:SendChatMessage(14, 0, "The master give me great power! You no take power!") -- sends message pUnit:SetScale(2.7) -- Bannok Grimaxe INCREASES IN SIZE pUnit:RegisterEvent("Bannok Grimaxe_Unrelenting", 5000, 0) -- Registering phase two spells pUnit:RegisterEvent("Bannok Grimaxe_Howl", math.random(11000, 31000), 0) -- Hogger will howl anywhere from 11 seconds to 31 second intervals (nice job Blueteak) pUnit:RegisterEvent("Bannok Grimaxe_Destroy", 21000, 0) pUnit:RegisterEvent("Bannok Grimaxe_Wither2", 1500, 0) -- Stacks 50x, 2% reduced stats, lasts 10 seconds <img src="http://s8.ucoz.net/sm/1/smile.gif" border="0" align="absmiddle" alt="smile" /> end pUnit:RegisterEvent("Bannok Grimaxe_PhaseThree", 1000, 0) -- Get ready for round 3 end
function Bannok Grimaxe_PhaseThree (pUnit, Event) if pUnit:GetHealthPct() <=50 then -- When Bannok Grimaxe has 50% health, then..... pUnit:RemoveEvents() -- removes any previous spells, auras, etc... pUnit:SendChatMessage(14, 0, "Master say I have IQ of murloc! I not know what that means... only know that you die!") pUnit:RegisterEvent("Bannok Grimaxe_Rampage", math.random(30000, 45000), 0) -- Spell is casted anywhere from 30 second to 45 second intervals pUnit:RegisterEvent("Bannok Grimaxe_jab", 8000, 0) pUnit:RegisterEvent("Bannok Grimaxe_Wither", math.random(90000, 1200000), 0) -- Casted anywhere from 1min 30 secs to 2mins end pUnit:RegisterEvent("Hogger_PhaseFour", 1000, 0) -- Uh oh... another phase. Take note of how he registers his phases end
function Bannok Grimaxe_PhaseFour (pUnit, Event) if pUnit:GetHealthPct() <=25 then -- When hogger has 25% health, he does... pUnit:RemoveEvents() pUnit:SendChatMessage(14, 0, "") -- Not sure why Blueteak has this to be honest. Useless. pUnit:SetScale(4) -- Bannok Grimaxe increases in size pUnit:RegisterEvent("Bannok Grimaxe_minienrage", 30000, 0) -- More spells for Phase 4 pUnit:RegisterEvent("Bannok Grimaxe_shred", 16000, 0) pUnit:RegisterEvent("Bannok Grimaxe_rend", 30000, 0) pUnit:RegisterEvent("Bannok Grimaxe_kick", 10000, 0) pUnit:RegisterEvent("Bannok Grimaxe_uppercut", 5000, 0) end -- Notice how there are no more phases, so he doesn't register another phase end
function Bannok Grimaxe_swarm (pUnit, Event) local plr = pUnit:GetRandomPlayer(0) if(plr ~= nil) then -- If there are no random players, then... pUnit:SendChatMessage(14, 0, "Master give me bugs to squish into gnomes' heads!") pUnit:FullCastSpellOnTarget(58852, plr) else end end
function Bannok Grimaxe_Destroy (pUnit, Event) local plr = pUnit:GetMainTank() -- Casts spell on the tank if(plr ~= nil) then pUnit:SendChatMessage(14, 0, "NO!") pUnit:FullCastSpellOnTarget(59151, plr) else end end
function Bannok Grimaxe_ravage (pUnit, Event) local plr = pUnit:GetMainTank() if(plr ~= nil) then pUnit:FullCastSpellOnTarget(29906, plr) else end end
function Bannok Grimaxe_Wither2 (pUnit, Event) local plr = pUnit:GetMainTank() if(plr ~= nil) then pUnit:FullCastSpellOnTarget(48585, plr) else end end
function Bannok Grimaxe_uppercut (pUnit, Event) local plr = pUnit:GetMainTank() if(plr ~= nil) then cut = math.random (1,3) -- More uses of randoms if (cut == 1) then pUnit:FullCastSpellOnTarget(32055, plr) -- Uppercut end if (cut == 2) then pUnit:FullCastSpellOnTarget(32055, plr) -- Uppercut end if (cut == 3) then pUnit:SendChatMessage(14, 0, "Bannok Grimaxe SMASH!") pUnit:FullCastSpellOnTarget(50084, plr) -- HULKING UPPERCUT end else end end
function Bannok Grimaxe_kick (pUnit, Event) local plr = pUnit:GetMainTank() if(plr ~= nil) then pUnit:FullCastSpellOnTarget(38625, plr) else end end
function Bannok Grimaxe_Unbalance (pUnit, Event) local plr = pUnit:GetRandomPlayer(0) if(plr ~= nil) then pUnit:FullCastSpellOnTarget(67237, plr) else end end
function Bannok Grimaxe_Unrelenting (pUnit, Event) local plr = pUnit:GetRandomPlayer(0) if(plr ~= nil) then pUnit:FullCastSpellOnTarget(51491, plr) else end end
function Bannok Grimaxe_Howl (pUnit, Event) local plr = pUnit:GetRandomPlayer(0) if(plr ~= nil) then pUnit:FullCastSpellOnTarget(10576, plr) else end end
function Bannok Grimaxe_Rampage (pUnit, Event) local plr = pUnit:GetRandomPlayer(7) if(plr ~= nil) then pUnit:FullCastSpellOnTarget(25744, plr) else end end
function Bannok Grimaxe_jab (pUnit, Event) local plr = pUnit:GetRandomPlayer(0) if(plr ~= nil) then pUnit:FullCastSpellOnTarget(31551, plr) else end end
function Bannok Grimaxe_minienrage (pUnit, Event) pUnit:SendChatMessage(14, 0, "No more play, now you die!") pUnit:FullCastSpell(54475) end
function Bannok Grimaxe_shred (pUnit, Event) local plr = pUnit:GetRandomPlayer(0) if(plr ~= nil) then pUnit:FullCastSpellOnTarget(40770, plr) else end end
function Bannok Grimaxe_rend (pUnit, Event) local plr = pUnit:GetRandomPlayer(0) if(plr ~= nil) then pUnit:FullCastSpellOnTarget(42397, plr) else end end
function Bannok Grimaxe_wither (pUnit, Event) local plr = pUnit:GetMainTank() if(plr ~= nil) then pUnit:FullCastSpellOnTarget(5337, plr) else end end
----- Mankirks Wife! ----------- -- Now this is the part where Blueteak scripts the minion Hogger spawns. function Wife_OnCombat (pUnit, Event) pUnit:SendChatMessage(14, 0, "p..please... no more beatings...") pUnit:RegisterEvent("Wife_PhaseOne", 1000, 0) -- Minion has to fight. Phase 1 woot end
function Wife_OnLeave (pUnit, event) pUnit:SendChatMessage(14, 0, "Mankrik! Save me!") -- When the minion leaves combat, this will happen pUnit:RemoveEvents() pUnit:Despawn(0, 0) -- Despawns the minion. (Delete this line if you want the minion to be looted) end
function Wife_KilledTarget (pUnit, event) -- When the minion kills a unit... pUnit:SendChatMessage(14, 0, "I will do what it takes to return to my husband!") end
function Wife_OnDie (pUnit, event) -- When the minion dies... pUnit:SendChatMessage(14, 0, "I must...return..to..the....Barrens.. MANKRIK!") end
function Wife_PhaseOne (pUnit, Event) -- Woot if pUnit:GetHealthPct() <= 100 then -- Explained already pUnit:RemoveEvents() pUnit:RegisterEvent("wife_drain", 5000, 0) -- Registering spells for phase 1, note that you have to use milliseconds when doing the intervals part. pUnit:RegisterEvent("wife_screech", 11000, 0) pUnit:RegisterEvent("wife_wail", 17000, 0) end end
function wife_drain (pUnit, Event) local plr = pUnit:GetRandomPlayer(0) if(plr ~= nil) then pUnit:FullCastSpellOnTarget(44294, plr) else end end
function wife_screech (pUnit, Event) local plr = pUnit:GetRandomPlayer(0) if(plr ~= nil) then pUnit:SendChatMessage(14, 0, "I will escape from here to my husband! Nothing you can do will stop me!") pUnit:FullCastSpellOnTarget(51897, plr) else end end
function wife_wail (pUnit, Event) local plr = pUnit:GetRandomPlayer(0) if(plr ~= nil) then pUnit:FullCastSpellOnTarget(41545, plr) else end end
Сообщение # 1 отредактировано moJitoice - Вторник, 17.01.2012, 17:25