bool ChatHandler::HandleCastSpellCommand(const char* args, WorldSession *m_session) { UnitPointer caster = m_session->GetPlayer(); UnitPointer target = getSelectedChar(m_session, false); if(!target) target = getSelectedCreature(m_session, false); if(!target) { RedSystemMessage(m_session, "Must select a char or creature."); return false; } uint32 spellid = atol(args); SpellEntry *spellentry = dbcSpell.LookupEntry(spellid); if(!spellentry) { RedSystemMessage(m_session, "Invalid spell id!"); return false; } SpellPointer sp(new Spell(caster, spellentry, false, NULLAURA)); if(!sp) { RedSystemMessage(m_session, "Spell failed creation!"); sp->Destructor(); sp = NULLSPELL; return false; } BlueSystemMessage(m_session, "Casting spell %d on target.", spellid); SpellCastTargets targets; targets.m_unitTarget = target->GetGUID(); sp->prepare(&targets); return true; }
bool ChatHandler::HandleListAIAgentCommand(const char* args, WorldSession *m_session) { UnitPointer target = m_session->GetPlayer()->GetMapMgr()->GetCreature(GET_LOWGUID_PART(m_session->GetPlayer()->GetSelection())); if(!target) { RedSystemMessage(m_session, "You have to select a Creature!"); return false; } std::stringstream sstext; sstext << "agentlist of creature: " << target->GetGUID() << '\n'; std::stringstream ss; ss << "SELECT * FROM ai_agents where entry=" << target->GetUInt32Value(OBJECT_FIELD_ENTRY); QueryResult *result = WorldDatabase.Query( ss.str().c_str() ); if( !result ) return false; do { Field *fields = result->Fetch(); sstext << "agent: " << fields[1].GetUInt16() << " | spellId: " << fields[5].GetUInt32() << " | Event: " << fields[2].GetUInt32() << " | chance: " << fields[3].GetUInt32() << " | count: " << fields[4].GetUInt32() << '\n'; } while( result->NextRow() ); delete result; SendMultilineMessage(m_session, sstext.str().c_str()); return true; }
bool Execute(uint32 i, SpellPointer pSpell) { //uint32 uSpellId = pSpell->m_spellInfo->Id; uint32 base_dmg = pSpell->damage; /* Attempt to finish off a wounded foe, causing 125 damage and converting each extra point of rage into 3 additional damage. Only usable on enemies that have less than 20% health. */ UnitPointer target = pSpell->GetUnitTarget(); if(!target || !pSpell->u_caster) return true; // "Only usable on enemies that have less than 20% health." if(target->GetHealthPct() > 20) { // send failed pSpell->SendCastResult(SPELL_FAILED_BAD_TARGETS); return true; } // get the caster's rage points, and convert them // formula is 3 damage * spell rank * rage points uint32 add_damage = (3 * pSpell->m_spellInfo->RankNumber); add_damage *= pSpell->u_caster->GetUInt32Value(UNIT_FIELD_POWER2) / 10; // rage is *10 always // send spell damage log //pSpell->u_caster->SpellNonMeleeDamageLog(target, 20647, base_dmg + add_damage, false); SpellEntry *sp_for_the_logs = dbcSpell.LookupEntry(20647); pSpell->u_caster->Strike( target, MELEE, sp_for_the_logs, base_dmg + add_damage, 0, 0, true, true ); // zero rage pSpell->u_caster->SetUInt32Value(UNIT_FIELD_POWER2, 0); return true; }
bool ChatHandler::HandleRangeCheckCommand( const char *args , WorldSession *m_session ) { WorldPacket data; uint64 guid = m_session->GetPlayer()->GetSelection(); m_session->SystemMessage( "=== RANGE CHECK ===" ); if (guid == 0) { m_session->SystemMessage("No selection imo."); return true; } UnitPointer unit = m_session->GetPlayer()->GetMapMgr()->GetUnit( guid ); if(!unit) { m_session->SystemMessage("Invalid selection imo."); return true; } float DistSq = unit->GetDistanceSq( TO_OBJECT(m_session->GetPlayer()) ); m_session->SystemMessage( "GetDistanceSq : %u" , FL2UINT( DistSq ) ); LocationVector locvec( m_session->GetPlayer()->GetPositionX() , m_session->GetPlayer()->GetPositionY() , m_session->GetPlayer()->GetPositionZ() ); float DistReal = unit->CalcDistance( locvec ); m_session->SystemMessage( "CalcDistance : %u" , FL2UINT( DistReal ) ); float Dist2DSq = unit->GetDistance2dSq( TO_OBJECT(m_session->GetPlayer()) ); m_session->SystemMessage( "GetDistance2dSq: %u" , FL2UINT( Dist2DSq ) ); return true; }
void SpellCast(float val) { if(_unit->GetCurrentSpell() == NULL && _unit->GetAIInterface()->GetNextTarget()) { float comulativeperc = 0; UnitPointer target = NULLUNIT; for(int i=0;i<nrspells;i++) { if(!spells[i].perctrigger) continue; if(m_spellcheck[i]) { if (!spells[i].instant) _unit->GetAIInterface()->StopMovement(1); if (i == 3) { uint32 t = (uint32)time(NULL); if (t > spells[2].casttime && RandomUInt(2) == 1) { _unit->CastSpell(_unit, spells[2].info, spells[2].instant); spells[2].casttime = t + spells[2].cooldown; } } target = _unit->GetAIInterface()->GetNextTarget(); switch(spells[i].targettype) { case TARGET_SELF: case TARGET_VARIOUS: _unit->CastSpell(_unit, spells[i].info, spells[i].instant); break; case TARGET_ATTACKING: _unit->CastSpell(target, spells[i].info, spells[i].instant); break; case TARGET_DESTINATION: _unit->CastSpellAoF(target->GetPositionX(),target->GetPositionY(),target->GetPositionZ(), spells[i].info, spells[i].instant); break; case TARGET_RANDOM_FRIEND: case TARGET_RANDOM_SINGLE: case TARGET_RANDOM_DESTINATION: CastSpellOnRandomTarget(i, spells[i].mindist2cast, spells[i].maxdist2cast, spells[i].minhp2cast, spells[i].maxhp2cast); break; } m_spellcheck[i] = false; return; } uint32 t = (uint32)time(NULL); if(val > comulativeperc && val <= (comulativeperc + spells[i].perctrigger) && t > spells[i].casttime) { _unit->setAttackTimer(spells[i].attackstoptimer, false); spells[i].casttime = t + spells[i].cooldown; m_spellcheck[i] = true; } comulativeperc += spells[i].perctrigger; } } }
bool ChatHandler::HandleMonsterCastCommand(const char * args, WorldSession * m_session) { UnitPointer crt = getSelectedCreature(m_session, false); if(!crt) { RedSystemMessage(m_session, "Please select a creature before using this command."); return true; } uint32 spellId = (uint32)atoi(args); crt->CastSpell(m_session->GetPlayer()->GetGUID(),spellId,true); return true; }
void GuardsOnWave(PlayerPointer pPlayer, UnitPointer pUnit) { if ( pPlayer == NULLPLR || pUnit == NULLUNIT ) return; // Check if we are friendly with our Guards (they will wave only when You are) if (((pUnit->GetEntry() == 68 || pUnit->GetEntry() == 1976) && pPlayer->GetStandingRank(72) >= FRIENDLY) || (pUnit->GetEntry() == 3296 && pPlayer->GetStandingRank(76) >= FRIENDLY)) { uint32 EmoteChance = RandomUInt(100); if(EmoteChance < 33) // 1/3 chance to get Bow from Guard pUnit->Emote(EMOTE_ONESHOT_WAVE); } }
bool ChatHandler::HandleKillCommand(const char *args, WorldSession *m_session) { UnitPointer target = m_session->GetPlayer()->GetMapMgr()->GetUnit(m_session->GetPlayer()->GetSelection()); if(target == 0) { RedSystemMessage(m_session, "A valid selection is required."); return true; } switch(target->GetTypeId()) { case TYPEID_PLAYER: sGMLog.writefromsession(m_session, "used kill command on PLAYER %s", TO_PLAYER( target )->GetName() ); break; case TYPEID_UNIT: sGMLog.writefromsession(m_session, "used kill command on CREATURE %s", TO_CREATURE( target )->GetCreatureName() ? TO_CREATURE( target )->GetCreatureName()->Name : "unknown"); break; } // If we're killing a player, send a message indicating a gm killed them. if(target->IsPlayer()) { PlayerPointer plr = TO_PLAYER(target); m_session->GetPlayer()->DealDamage(plr, plr->GetUInt32Value(UNIT_FIELD_HEALTH),0,0,0); //plr->SetUInt32Value(UNIT_FIELD_HEALTH, 0); plr->KillPlayer(); BlueSystemMessageToPlr(plr, "%s killed you with a GM command.", m_session->GetPlayer()->GetName()); } else { // Cast insta-kill. SpellEntry * se = dbcSpell.LookupEntry(5); if(se == 0) return false; SpellCastTargets targets(target->GetGUID()); SpellPointer sp(new Spell(m_session->GetPlayer(), se, true, NULLAURA)); sp->prepare(&targets); /* SpellEntry * se = dbcSpell.LookupEntry(20479); if(se == 0) return false; SpellCastTargets targets(target->GetGUID()); SpellPointer sp(new Spell(target, se, true, NULLAURA)); sp->prepare(&targets);*/ } return true; }
void SpellCast(float val) { if(_unit->GetCurrentSpell() == NULL && _unit->GetAIInterface()->GetNextTarget()) { float comulativeperc = 0; UnitPointer target = NULLUNIT; for(int i=0;i<nrspells;i++) { if(!spells[i].perctrigger) continue; if(m_spellcheck[i]) { target = _unit->GetAIInterface()->GetNextTarget(); switch(spells[i].targettype) { case TARGET_SELF: case TARGET_VARIOUS: _unit->CastSpell(_unit, spells[i].info, spells[i].instant); break; case TARGET_ATTACKING: _unit->CastSpell(target, spells[i].info, spells[i].instant); break; case TARGET_DESTINATION: _unit->CastSpellAoF(target->GetPositionX(),target->GetPositionY(),target->GetPositionZ(), spells[i].info, spells[i].instant); break; } if (spells[i].speech != "") { _unit->SendChatMessage(CHAT_MSG_MONSTER_YELL, LANG_UNIVERSAL, spells[i].speech.c_str()); _unit->PlaySoundToSet(spells[i].soundid); } m_spellcheck[i] = false; return; } if(val > comulativeperc && val <= (comulativeperc + spells[i].perctrigger)) { _unit->setAttackTimer(spells[i].attackstoptimer, false); m_spellcheck[i] = true; } comulativeperc += spells[i].perctrigger; } } }
void WorldSession::HandleAddDynamicTargetOpcode(WorldPacket & recvPacket) { DEBUG_LOG( "WORLD"," got CMSG_PET_CAST_SPELL." ); uint64 guid; uint8 counter; uint32 spellid; uint8 flags; UnitPointer caster; SpellCastTargets targets; SpellEntry *sp; SpellPointer pSpell; list<AI_Spell*>::iterator itr; recvPacket >> guid >> counter >> spellid >> flags; sp = dbcSpell.LookupEntry(spellid); // Summoned Elemental's Freeze if (spellid == 33395) { caster = _player->m_Summon; if( caster && TO_PET(caster)->GetAISpellForSpellId(spellid) == NULL ) return; } else { caster = _player->m_CurrentCharm; if( caster != NULL ) { for(itr = caster->GetAIInterface()->m_spells.begin(); itr != caster->GetAIInterface()->m_spells.end(); ++itr) { if( (*itr)->spell->Id == spellid ) break; } if( itr == caster->GetAIInterface()->m_spells.end() ) return; } } if( caster == NULL || guid != caster->GetGUID() ) return; targets.read(recvPacket, _player->GetGUID()); pSpell = SpellPointer(new Spell(caster, sp, false, NULLAURA)); pSpell->prepare(&targets); }
void OnDied(UnitPointer mKiller) { if(!mKiller) return; if (mKiller->IsPlayer()) { QuestLogEntry *en = NULL; en = (TO_PLAYER(mKiller))->GetQuestLogForEntry(10703); if (en == NULL) { en = (TO_PLAYER(mKiller))->GetQuestLogForEntry(10702); if (en == NULL) { return; } } if(en->GetMobCount(0) < en->GetQuest()->required_mobcount[0]) { uint32 newcount = en->GetMobCount(0) + 1; en->SetMobCount(0, newcount); en->SendUpdateAddKill(0); en->UpdatePlayerFields(); } } return; }
void SpellFunc_CrystalSpikes( SpellDesc* pThis, MoonScriptCreatureAI* pCreatureAI, UnitPointer pTarget, TargetType pType ) { if(pCreatureAI != NULL) { if( pTarget == NULL ) return; for (int i = -2; i < 2; i++) { float x = pTarget->GetPositionX() + ( i * 3.0 ); float y = pTarget->GetPositionY() + ( i * 3.0 ); pCreatureAI->GetUnit()->GetMapMgr()->GetInterface()->SpawnCreature( CN_CRYSTAL_SPIKE, x, y, pTarget->GetPositionZ(), pTarget->GetOrientation(), true, true, NULL, NULL ); }; pCreatureAI->Emote( "Bleed!", Text_Yell, 13332 ); }; };
void OnCombatStart(UnitPointer mTarget) { _unit->GetAIInterface()->m_canMove = false; _unit->GetAIInterface()->disable_melee = true; _unit->SetUInt64Value(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); UnitPointer antusul = NULLUNIT; antusul = _unit->GetMapMgr()->GetInterface()->GetCreatureNearestCoords(1815.030029f, 686.817017f, 14.519000f, 8127); if(antusul) { if(antusul->isAlive()) { antusul->GetAIInterface()->AttackReaction(mTarget, 0, 0); antusul->SendChatMessage(CHAT_MSG_MONSTER_YELL, LANG_UNIVERSAL, "Lunch has arrived, my beutiful childern. Tear them to pieces!"); } } }
void ArathiBasin::HookOnPlayerKill(PlayerPointer plr, UnitPointer pVictim) { if(pVictim->IsPlayer()) { plr->m_bgScore.KillingBlows++; UpdatePvPData(); } }
void Arena::HookOnPlayerKill(PlayerPointer plr, UnitPointer pVictim) { if( !pVictim->IsPlayer() ) return; plr->m_bgScore.KillingBlows++; UpdatePlayerCounts(); }
void OnDied( UnitPointer pKiller ) { PlayerPointer QuestHolder = NULLPLR; if ( pKiller->IsPlayer() ) QuestHolder = TO_PLAYER( pKiller ); else if ( pKiller->IsPet() && TO_PET( pKiller )->GetPetOwner() != NULLPLR ) QuestHolder = TO_PET( pKiller )->GetPetOwner(); if ( QuestHolder == NULLPLR ) return; // M4ksiu: I don't think the method is correct, but it can stay the way it was until someone gives proper infos QuestLogEntry* Quest = QuestHolder->GetQuestLogForEntry( 9670 ); CreaturePointer RandomCreature = NULLCREATURE; if ( Quest == NULL ) { // Creatures from Bloodmyst Isle uint32 Id[ 51 ] = { 17681, 17887, 17550, 17323, 17338, 17341, 17333, 17340, 17353, 17320, 17339, 17337, 17715, 17322, 17494, 17654, 17342, 17328, 17331, 17325, 17321, 17330, 17522, 17329, 17524, 17327, 17661, 17352, 17334, 17326, 17324, 17673, 17336, 17346, 17589, 17609, 17608, 17345, 17527, 17344, 17347, 17525, 17713, 17523, 17348, 17606, 17604, 17607, 17610, 17358, 17588 }; RandomCreature = _unit->GetMapMgr()->GetInterface()->SpawnCreature( Id[ RandomUInt( 50 ) ], _unit->GetPositionX(), _unit->GetPositionY(), _unit->GetPositionZ(), _unit->GetOrientation(), true, false, 0, 0 ); if ( RandomCreature != NULLCREATURE ) { RandomCreature->m_noRespawn = true; RandomCreature->Despawn( 60000, 0 ); }; return; } else { uint32 Id[ 8 ] = { 17681, 17321, 17330, 17522, 17673, 17336, 17346, 17589 }; RandomCreature = _unit->GetMapMgr()->GetInterface()->SpawnCreature( Id[ RandomUInt( 7 ) ], _unit->GetPositionX(), _unit->GetPositionY(), _unit->GetPositionZ(), _unit->GetOrientation(), true, false, 0, 0 ); if ( RandomCreature != NULLCREATURE ) { RandomCreature->m_noRespawn = true; RandomCreature->Despawn( 60000, 0 ); if ( RandomCreature->GetEntry() == 17681 && Quest->GetMobCount( 0 ) < Quest->GetQuest()->required_mobcount[ 0 ] ) { Quest->SetMobCount( 0, Quest->GetMobCount( 0 ) + 1 ); Quest->SendUpdateAddKill( 0 ); Quest->UpdatePlayerFields(); }; }; }; };
void SpellCast(uint32 val) { if(_unit->GetCurrentSpell() == NULL && _unit->GetAIInterface()->GetNextTarget())//_unit->getAttackTarget()) { UnitPointer target = _unit->GetAIInterface()->GetNextTarget(); if(m_shadowbolt) { _unit->CastSpell(target, infoshadowbolt, true); m_shadowbolt = false; return; } if(m_gehennascurse) { _unit->CastSpell(_unit, infogehennascurse, false); m_gehennascurse = false; return; } if(m_rainoffire) { _unit->CastSpellAoF(target->GetPositionX(),target->GetPositionY(),target->GetPositionZ(), inforainoffire, false); m_rainoffire = false; return; } if(val >= 100 && val <= 180) { _unit->setAttackTimer(3000, false); m_shadowbolt = true; } if(val > 180 && val <= 260) { _unit->setAttackTimer(1000, false); m_gehennascurse = true; } if(val > 260 && val <= 300) { _unit->setAttackTimer(1000, false); m_rainoffire = true; } } }
void AIUpdate() { if (!HasSummoned && _unit->GetHealthPct() <= 8) { UnitPointer Warchief = NULLUNIT; Warchief =_unit->GetMapMgr()->GetInterface()->SpawnCreature(CN_REND_BLACKHAND, 157.366516f, -419.779358f, 110.472336f, 3.056772f, true, false, 0, 0); if (Warchief != NULL) { if (_unit->GetAIInterface()->GetNextTarget() != NULL) { Warchief->GetAIInterface()->AttackReaction(_unit->GetAIInterface()->GetNextTarget(), 1, 0); } } HasSummoned = true; } float val = (float)RandomFloat(100.0f); SpellCast(val); }
void AIUpdate() { if (!HasSummoned && _unit->GetHealthPct() <= 25) { UnitPointer cGizrul = NULLUNIT; cGizrul =_unit->GetMapMgr()->GetInterface()->SpawnCreature(CN_GIZRUL, -195.100006f, -321.970001f, 65.424400f, 0.016500f, true, false, 0, 0); if (cGizrul != NULL) { if (_unit->GetAIInterface()->GetNextTarget() != NULL) { cGizrul->GetAIInterface()->AttackReaction(_unit->GetAIInterface()->GetNextTarget(), 1, 0); } } HasSummoned = true; } float val = (float)RandomFloat(100.0f); SpellCast(val); }
void OnDamageTaken(UnitPointer mAttacker, float fAmount) { if( (int)( last_creation_hp - DISPARSE_HP ) >= _unit->GetHealthPct() ) { switch(rand()%2) { case 0: _unit->SendChatMessage( CHAT_MSG_MONSTER_YELL, LANG_UNIVERSAL, "The slightest spark shall be your undoing." ); break; case 1: _unit->SendChatMessage( CHAT_MSG_MONSTER_YELL, LANG_UNIVERSAL, "No one is safe!" ); break; } spark_timer = getMSTime() + SPARK_PHASE_DURATION; last_creation_hp = _unit->GetHealthPct(); _unit->CastSpell(_unit, 52770, true);//disperse, dummy _unit->Root(); _unit->GetAIInterface()->disable_combat = false; _unit->m_invisible = false; _unit->UpdateVisibility(); //disparse for( uint8 i=0; i<SPARKS_COUNT; i++) if( sparks[i] != 0 ) { UnitPointer Spark = _unit->GetMapMgr()->GetUnit( sparks[i] ); if( Spark ) { uint32 spellid = heroic ? 59833 : 52667; Spark->CastSpell(Spark, spellid, true); Spark->UnRoot(); _unit->GetAIInterface()->disable_combat = false; PlayerPointer p_target = GetRandomPlayerTarget(); if( p_target ) { Spark->GetAIInterface()->MoveTo(p_target->GetPositionX(),p_target->GetPositionY(), p_target->GetPositionZ(), p_target->GetOrientation()); } } } } }
void OnDied(UnitPointer mKiller) { if ( mKiller->IsPlayer() ) { QuestLogEntry *pQuest = TO_PLAYER(mKiller)->GetQuestLogForEntry( 9573 ); if ( pQuest != NULL && pQuest->GetMobCount( 1 ) < pQuest->GetQuest()->required_mobcount[1] ) { pQuest->SetMobCount( 1, pQuest->GetMobCount( 1 ) + 1 ); pQuest->SendUpdateAddKill( 1 ); pQuest->UpdatePlayerFields(); } } }
int32 HonorHandler::CalculateHonorPointsForKill( PlayerPointer pPlayer, UnitPointer pVictim ) { // this sucks.. ;p if( pVictim == NULL ) return 0; // Suicide lol if( pVictim == pPlayer ) return 0; if( pVictim->GetTypeId() != TYPEID_PLAYER ) return 0; // How dishonorable, you fiend! if( pVictim->HasActiveAura( PLAYER_HONORLESS_TARGET_SPELL ) ) return 0; uint32 k_level = pPlayer->GetUInt32Value( UNIT_FIELD_LEVEL ); uint32 v_level = pVictim->GetUInt32Value( UNIT_FIELD_LEVEL ); // formula guessed int32 honor_points = 6; if(k_level != v_level) { int32 diff = v_level - k_level; honor_points += diff; if(honor_points <= 0) return 0; if(honor_points >= 8) honor_points = 8; } honor_points = float2int32(float(honor_points) * World::getSingleton().getRate( RATE_HONOR )); //honor_points *= World::getSingleton().getRate( RATE_HONOR ); return honor_points; }
void SpellCast(float val) { if(_unit->GetCurrentSpell() == NULL && _unit->GetAIInterface()->GetNextTarget()) { float comulativeperc = 0; UnitPointer target = NULLUNIT; for(int i=0;i<nrspells;i++) { if(!spells[i].perctrigger) continue; if(m_spellcheck[i]) { if (!spells[i].instant) _unit->GetAIInterface()->StopMovement(1); target = _unit->GetAIInterface()->GetNextTarget(); switch(spells[i].targettype) { case TARGET_SELF: case TARGET_VARIOUS: _unit->CastSpell(_unit, spells[i].info, spells[i].instant); break; case TARGET_ATTACKING: _unit->CastSpell(target, spells[i].info, spells[i].instant); break; case TARGET_DESTINATION: _unit->CastSpellAoF(target->GetPositionX(),target->GetPositionY(),target->GetPositionZ(), spells[i].info, spells[i].instant); break; } m_spellcheck[i] = false; return; } if(val > comulativeperc && val <= (comulativeperc + spells[i].perctrigger)) { _unit->setAttackTimer(spells[i].attackstoptimer, false); m_spellcheck[i] = true; } comulativeperc += spells[i].perctrigger; } } }
void OnEmote(PlayerPointer pPlayer, uint32 Emote, UnitPointer pUnit) { pUnit = pPlayer->GetMapMgr()->GetUnit(pPlayer->GetSelection()); if (!pUnit || !pUnit->isAlive() || pUnit->GetAIInterface()->GetNextTarget()) return; // Switch For Emote Name (You do EmoteName to Script Name link). switch(Emote) { case EMOTE_ONESHOT_SALUTE: // <- Its EMOTE name. GuardsOnSalute(pPlayer, pUnit); // <- Its Link. break; case EMOTE_ONESHOT_KISS: GaurdsOnKiss(pPlayer, pUnit); break; case EMOTE_ONESHOT_WAVE: GuardsOnWave(pPlayer, pUnit); break; } }
bool ForceofNeltharakuSpell(uint32 i, SpellPointer pSpell) // Becoming a Shadoweave Tailor { if(pSpell->u_caster->IsPlayer() == false) return true; PlayerPointer pPlayer= TO_PLAYER(pSpell->u_caster); UnitPointer pUnit = TO_UNIT(pPlayer->GetMapMgr()->GetCreature(GET_LOWGUID_PART(pPlayer->GetSelection()))); if(pUnit == NULLUNIT) return true; if(!pUnit->IsCreature()) return true; CreaturePointer pTarget = TO_CREATURE(pUnit); QuestLogEntry *pQuest = pPlayer->GetQuestLogForEntry(10854); if(pQuest == NULL) return true; if(pTarget->GetEntry() == 21722 && pPlayer->CalcDistance(pUnit)<30) { if ( pQuest && pQuest->GetMobCount(0) < pQuest->GetQuest()->required_mobcount[0] ) { pTarget->CastSpell(pPlayer, dbcSpell.LookupEntry(38775), true); pQuest->SetMobCount(0, pQuest->GetMobCount(0)+1); pQuest->SendUpdateAddKill(0); pQuest->UpdatePlayerFields(); if ( pTarget->GetScript() != NULL ) { MoonScriptCreatureAI *pDrakeAI = static_cast<MoonScriptCreatureAI*>(pTarget->GetScript()); pDrakeAI->SetCanMove(true); pDrakeAI->SetWaypointToMove(0); } } } return true; }
void AIUpdate() { if( spark_timer < getMSTime() ) { spark_timer = 0; _unit->UnRoot(); _unit->GetAIInterface()->disable_combat = false; _unit->m_invisible = false; _unit->UpdateVisibility(); for( uint8 i=0; i<SPARKS_COUNT; i++) if( sparks[i] != 0 ) { UnitPointer Spark = _unit->GetMapMgr()->GetUnit( sparks[i] ); if( Spark ) { Spark->RemoveAllAuras(); Spark->GetAIInterface()->MoveTo(_unit->GetPositionX(), _unit->GetPositionY(), _unit->GetPositionZ(), _unit->GetOrientation()); Spark->Root(); Spark->GetAIInterface()->disable_combat = true; } } } if( spark_timer == 0 && spells.size() > 0 ) { for( uint8 i = 0; i<spells.size(); i++ ) { if( spells[i]->time < getMSTime() ) { if( Rand( spells[i]->chance ) ) { CastScriptSpell( spells[i] ); spells[i]->time = getMSTime() + spells[i]->timer; } } } } }
bool ChatHandler::HandleMonsterYellCommand(const char* args, WorldSession *m_session) { UnitPointer crt = getSelectedCreature(m_session, false); if(!crt) crt = getSelectedChar(m_session, false); if(!crt) { RedSystemMessage(m_session, "Please select a creature or player before using this command."); return true; } if(crt->GetTypeId() == TYPEID_PLAYER) { WorldPacket * data = this->FillMessageData(CHAT_MSG_YELL, LANG_UNIVERSAL, args, crt->GetGUID(), 0); crt->SendMessageToSet(data, true); delete data; } else { crt->SendChatMessage(CHAT_MSG_MONSTER_YELL, LANG_UNIVERSAL, args); } return true; }
void OnDamageTaken(UnitPointer mAttacker, float fAmount) { if(_unit->GetUInt32Value(UNIT_FIELD_HEALTH)- fAmount<=_unit->GetUInt32Value(UNIT_FIELD_MAXHEALTH)*0.2) { if(mAttacker->GetTypeId() == TYPEID_PLAYER) { _unit->SetUInt64Value(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); RegisterAIUpdateEvent(1000); QuestLogEntry *qle = (TO_PLAYER(mAttacker))->GetQuestLogForEntry( 1447 ); if(!qle) return; qle->SendQuestComplete(); } } }
void OnDied(UnitPointer mKiller) { fulborgskilled++; if(mKiller->IsPlayer()) { PlayerPointer mPlayer = TO_PLAYER(mKiller); if(fulborgskilled > 8&& mPlayer->GetQuestLogForEntry( 9667 )) { _unit->GetMapMgr()->GetInterface()->SpawnCreature(17702, -2419, -12166, 33, 3.45f, true, false, 0, 0)->Despawn(18000000, 0); fulborgskilled = 0; _unit->SendChatMessage(CHAT_MSG_MONSTER_YELL, LANG_UNIVERSAL, "Chief, we need your help!"); } } }
bool ChatHandler::HandleCastSpellNECommand(const char* args, WorldSession *m_session) { UnitPointer caster = m_session->GetPlayer(); UnitPointer target = getSelectedChar(m_session, false); if(!target) target = getSelectedCreature(m_session, false); if(!target) { RedSystemMessage(m_session, "Must select a char or creature."); return false; } uint32 spellId = atol(args); SpellEntry *spellentry = dbcSpell.LookupEntry(spellId); if(!spellentry) { RedSystemMessage(m_session, "Invalid spell id!"); return false; } BlueSystemMessage(m_session, "Casting spell %d on target.", spellId); WorldPacket data; data.Initialize( SMSG_SPELL_START ); data << caster->GetNewGUID(); data << caster->GetNewGUID(); data << spellId; data << uint8(0); data << uint16(0); data << uint32(0); data << uint16(2); data << target->GetGUID(); // WPAssert(data.size() == 36); m_session->SendPacket( &data ); data.Initialize( SMSG_SPELL_GO ); data << caster->GetNewGUID(); data << caster->GetNewGUID(); data << spellId; data << uint8(0) << uint8(1) << uint8(1); data << target->GetGUID(); data << uint8(0); data << uint16(2); data << target->GetGUID(); // WPAssert(data.size() == 42); m_session->SendPacket( &data ); return true; }