void Character::Logout() { if (!this->online) { if (this->guild) { this->guild->Release(); this->guild = 0; } return; } if (this->trading) { PacketBuilder builder(PACKET_TRADE, PACKET_CLOSE); builder.AddShort(this->id); this->trade_partner->player->client->SendBuilder(builder); this->player->client->state = EOClient::Playing; this->trading = false; this->trade_inventory.clear(); this->trade_agree = false; this->trade_partner->player->client->state = EOClient::Playing; this->trade_partner->trading = false; this->trade_partner->trade_inventory.clear(); this->trade_agree = false; this->trade_partner->trade_partner = 0; this->trade_partner = 0; } if (this->party) { this->party->Leave(this); } if (this->arena) { --this->arena->occupants; } UTIL_PTR_LIST_FOREACH(this->unregister_npc, NPC, npc) { UTIL_PTR_LIST_FOREACH(npc->damagelist, NPC_Opponent, checkopp) { if (checkopp->attacker == this) { npc->totaldamage -= checkopp->damage; npc->damagelist.erase(checkopp); break; } } } if(this->has_pet) { if (this->pet->Data()->id == 345) { erase_first(this->map->npcs, this->pet); this->pet->Release(); this->has_pet = false; this->con -= 500; this->str -= 500; this->CalculateStats(); this->StatSkill(); } if (this->pet->Data()->id == 344) { erase_first(this->map->npcs, this->pet); this->pet->Release(); this->has_pet = false; this->str -= 500; this->wis -= 500; this->agi -= 500; this->con -= 500; this->CalculateStats(); this->StatSkill(); } if (this->pet->Data()->id == 346) { erase_first(this->map->npcs, this->pet); this->pet->Release(); this->has_pet = false; this->con -= 300; this->CalculateStats(); this->StatSkill(); } if (this->pet->Data()->id == 347) { erase_first(this->map->npcs, this->pet); this->pet->Release(); this->has_pet = false; this->wis -= 400; this->CalculateStats(); this->StatSkill(); } if (this->pet->Data()->id == 348) { erase_first(this->map->npcs, this->pet); this->pet->Release(); this->has_pet = false; this->str -= 80; this->wis -= 80; this->con -= 80; this->CalculateStats(); this->StatSkill(); } if (this->pet->Data()->id == 349) { erase_first(this->map->npcs, this->pet); this->pet->Release(); this->has_pet = false; this->str -= 40; this->wis -= 40; this->con -= 40; this->CalculateStats(); this->StatSkill(); } if (this->pet->Data()->id == 350) { erase_first(this->map->npcs, this->pet); this->pet->Release(); this->has_pet = false; this->str -= 300; this->CalculateStats(); this->StatSkill(); } if (this->pet->Data()->id == 359) { erase_first(this->map->npcs, this->pet); this->pet->Release(); this->has_pet = false; this->con -= 5000; this->str -= 5000; this->CalculateStats(); this->StatSkill(); } } this->online = false; this->Save(); this->world->Logout(this); }