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 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(); } } }
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; }
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; }