void PetAI::DoAttack(Unit* target, bool chase, uint32 spellId) { // Handles attack with or without chase and also resets flags // for next update / creature kill if (me->Attack(target, true)) { // Play sound to let the player know the pet is attacking something it picked on its own if (me->HasReactState(REACT_AGGRESSIVE) && !me->GetCharmInfo()->IsCommandAttack()) me->SendPetAIReaction(me->GetGUID()); if (chase) { bool oldCmdAttack = me->GetCharmInfo()->IsCommandAttack(); // This needs to be reset after other flags are cleared ClearCharmInfoFlags(); me->GetCharmInfo()->SetIsCommandAttack(oldCmdAttack); // For passive pets commanded to attack so they will use spells me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MoveChase(target, GetAttackDistance(target), 0.0f, spellId); } else // (Stay && ((Aggressive || Defensive) && In Melee Range))) { ClearCharmInfoFlags(); me->GetCharmInfo()->SetIsAtStay(true); me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MoveIdle(); } } }
// set monster stats values bool CMonster::SetStats( ) { if(thisnpc==NULL) return false; Stats->Level = thisnpc->level; Stats->Attack_Power = GetAttackPower( ); Stats->Defense = GetDefense( ); Stats->Attack_Speed = GetAttackSpeed( ); Stats->Move_Speed = GetMoveSpeed( ); Stats->Dodge = GetDodge( ); Stats->Accury = GetAccury( ); Stats->Critical = GetCritical( ); Stats->Magic_Defense = GetMagicDefense( ); Stats->Attack_Distance = GetAttackDistance( ); Stats->MaxHP = GetMaxHP( ); Stats->MaxMP = GetMaxMP( ); //Stats->HP = Stats->MaxHP; //Stats->MP = Stats->MaxMP; for(int i=0; i<20; i++) { AIVar[i] = 0; } return true; }
//Set Monster Stats Values bool CMonster::SetStats(bool all) { if(thisnpc == NULL) return false; Stats->Level = thisnpc->level; Stats->Attack_Power = GetAttackPower( ); Stats->Defense = GetDefense( ); Stats->xprate = GetXPRate( ); Stats->itemdroprate = GetItemDropRate( ); Stats->zulydroprate = GetZulyDropRate( ); Stats->Attack_Speed = GetAttackSpeed( ); Stats->Move_Speed = GetMoveSpeed( ); Stats->Dodge = GetDodge( ); Stats->Accury = GetAccury( ); Stats->Critical = GetCritical( ); Stats->Magic_Defense = GetMagicDefense( ); Stats->magicattack = GetMagicAttack( ); Stats->Attack_Distance = GetAttackDistance( ); for(int i=0;i<20;i++) { AIVar[i] = 0; } return true; }
//Set Monster Stats Values bool CMonster::SetStats(bool all) { if(thisnpc == NULL) return false; Stats->Attack_Power = GetAttackPower( ); Stats->Defense = GetDefense( ); Stats->xprate = GetXPRate( ); Stats->itemdroprate = GetItemDropRate( ); //Stats->zulydroprate = GetZulyDropRate( ); //PY: pointless stat. It's always zero. Use thisnpc->money to get the value directly from the STB Stats->Attack_Speed = GetAttackSpeed( ); Stats->Move_Speed = GetMoveSpeed( ); Stats->Dodge = GetDodge( ); Stats->Accury = GetAccury( ); Stats->Critical = GetCritical( ); Stats->Magic_Defense = GetMagicDefense( ); Stats->magicattack = GetMagicAttack( ); Stats->Attack_Distance = GetAttackDistance( ); for(int i=0;i<20;i++) { AIVar[i] = 0; } return true; }
// set monster stats values bool CMonster::SetStats() { if(thisnpc == NULL) { return false; } Stats->Level = thisnpc->level; Stats->Attack_Power = GetAttackPower( ); Stats->Defense = GetDefense( ); Stats->Attack_Speed = GetAttackSpeed( ); Stats->Move_Speed = GetMoveSpeed( ); Stats->Dodge = GetDodge( ); Stats->Accury = GetAccury( ); Stats->Critical = GetCritical( ); Stats->Magic_Defense = GetMagicDefense( ); Stats->magicattack = GetMagicAttack( ); Stats->Attack_Distance = GetAttackDistance( ); //Stats->MaxHP = GetMaxHP( ); //Stats->HP = Stats->MaxHP; //Stats->MaxMP = GetMaxMP( ); //Stats->MP = Stats->MaxMP; return true; }