if(id == 9) { this->player->character->Save(); //this may be unnessasary this->player->character->AddItem(id, 1);//adds back the item after it's use this->player->character->Save(); if(!this->player->character->has_pet) { unsigned char index = this->player->character->map->GenerateNPCIndex(); if (index > 250) { break; } this->player->character->pet = new NPC(this->player->character->map, 345, this->player->character->x + 1,this->player->character->y, 1, 1, index, true, true); this->player->character->pet->Spawn(); this->player->character->pet->SetOwner(this->player->character); this->player->character->has_pet = true; //this->player->character->AddItem(682, 1); this->player->character->map->npcs.push_back(this->player->character->pet); this->player->character->str += 500; this->player->character->con += 500; this->player->character->CalculateStats(); this->player->character->StatSkill(); this->player->character->Save(); } else if(this->player->character->has_pet == true) { UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { if (this->player->character->InRange(*character)) { this->player->character->pet->RemoveFromView(*character); } } erase_first(this->player->character->map->npcs, this->player->character->pet); this->player->character->pet->Release(); this->player->character->has_pet = false; this->player->character->con -= 500; this->player->character->str -= 500; this->player->character->CalculateStats(); this->player->character->StatSkill(); } } if(id == 20)//10 { this->player->character->Save(); //this may be unnessasary this->player->character->AddItem(id, 1);//adds back the item after it's use this->player->character->Save(); if(!this->player->character->has_pet) { unsigned char index = this->player->character->map->GenerateNPCIndex(); if (index > 250) { break; } this->player->character->pet = new NPC(this->player->character->map, 344, this->player->character->x + 1,this->player->character->y, 1, 1, index, true, true); this->player->character->pet->Spawn(); this->player->character->pet->SetOwner(this->player->character); this->player->character->has_pet = true; //this->player->character->AddItem(682, 1); this->player->character->map->npcs.push_back(this->player->character->pet); this->player->character->str += 500; this->player->character->wis += 500; this->player->character->agi += 500; this->player->character->con += 500; this->player->character->CalculateStats(); this->player->character->StatSkill(); this->player->character->Save(); } else if(this->player->character->has_pet == true) { UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { if (this->player->character->InRange(*character)) { this->player->character->pet->RemoveFromView(*character); } } erase_first(this->player->character->map->npcs, this->player->character->pet); this->player->character->pet->Release(); this->player->character->has_pet = false; this->player->character->str -= 500; this->player->character->wis -= 500; this->player->character->agi -= 500; this->player->character->con -= 500; this->player->character->CalculateStats(); this->player->character->StatSkill(); } } if(id == 376) { this->player->character->Save(); //this may be unnessasary this->player->character->AddItem(id, 1);//adds back the item after it's use this->player->character->Save(); if(!this->player->character->has_pet) { unsigned char index = this->player->character->map->GenerateNPCIndex(); if (index > 250) { break; } this->player->character->pet = new NPC(this->player->character->map, 346, this->player->character->x + 1,this->player->character->y, 1, 1, index, true, true); this->player->character->pet->Spawn(); this->player->character->pet->SetOwner(this->player->character); this->player->character->has_pet = true; //this->player->character->AddItem(682, 1); this->player->character->map->npcs.push_back(this->player->character->pet); this->player->character->con += 300; this->player->character->CalculateStats(); this->player->character->StatSkill(); this->player->character->Save(); } else if(this->player->character->has_pet == true) { UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { if (this->player->character->InRange(*character)) { this->player->character->pet->RemoveFromView(*character); } } erase_first(this->player->character->map->npcs, this->player->character->pet); this->player->character->pet->Release(); this->player->character->has_pet = false; this->player->character->con -= 300; this->player->character->CalculateStats(); this->player->character->StatSkill(); } } if(id == 17) { this->player->character->Save(); //this may be unnessasary this->player->character->AddItem(id, 1);//adds back the item after it's use this->player->character->Save(); if(!this->player->character->has_pet) { unsigned char index = this->player->character->map->GenerateNPCIndex(); if (index > 250) { break; } this->player->character->pet = new NPC(this->player->character->map, 347, this->player->character->x + 1,this->player->character->y, 1, 1, index, true, true); this->player->character->pet->Spawn(); this->player->character->pet->SetOwner(this->player->character); this->player->character->has_pet = true; //this->player->character->AddItem(682, 1); this->player->character->map->npcs.push_back(this->player->character->pet); this->player->character->wis += 400; this->player->character->CalculateStats(); this->player->character->StatSkill(); this->player->character->Save(); } else if(this->player->character->has_pet == true) { UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { if (this->player->character->InRange(*character)) { this->player->character->pet->RemoveFromView(*character); } } erase_first(this->player->character->map->npcs, this->player->character->pet); this->player->character->pet->Release(); this->player->character->has_pet = false; this->player->character->wis -= 400; this->player->character->CalculateStats(); this->player->character->StatSkill(); } } if(id == 16) { this->player->character->Save(); //this may be unnessasary this->player->character->AddItem(id, 1);//adds back the item after it's use this->player->character->Save(); if(!this->player->character->has_pet) { unsigned char index = this->player->character->map->GenerateNPCIndex(); if (index > 250) { break; } this->player->character->pet = new NPC(this->player->character->map, 348, this->player->character->x + 1,this->player->character->y, 1, 1, index, true, true); this->player->character->pet->Spawn(); this->player->character->pet->SetOwner(this->player->character); this->player->character->has_pet = true; //this->player->character->AddItem(682, 1); this->player->character->map->npcs.push_back(this->player->character->pet); this->player->character->str += 80; this->player->character->wis += 80; this->player->character->con += 80; this->player->character->CalculateStats(); this->player->character->StatSkill(); this->player->character->Save(); } else if(this->player->character->has_pet == true) { UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { if (this->player->character->InRange(*character)) { this->player->character->pet->RemoveFromView(*character); } } erase_first(this->player->character->map->npcs, this->player->character->pet); this->player->character->pet->Release(); this->player->character->has_pet = false; this->player->character->str -= 80; this->player->character->wis -= 80; this->player->character->con -= 80; this->player->character->CalculateStats(); this->player->character->StatSkill(); } } if(id == 3) { this->player->character->Save(); //this may be unnessasary this->player->character->AddItem(id, 1);//adds back the item after it's use this->player->character->Save(); if(!this->player->character->has_pet) { unsigned char index = this->player->character->map->GenerateNPCIndex(); if (index > 250) { break; } this->player->character->pet = new NPC(this->player->character->map, 349, this->player->character->x + 1,this->player->character->y, 1, 1, index, true, true); this->player->character->pet->Spawn(); this->player->character->pet->SetOwner(this->player->character); this->player->character->has_pet = true; //this->player->character->AddItem(682, 1); this->player->character->map->npcs.push_back(this->player->character->pet); this->player->character->str += 40; this->player->character->wis += 40; this->player->character->con += 40; this->player->character->CalculateStats(); this->player->character->StatSkill(); this->player->character->Save(); } else if(this->player->character->has_pet == true) { UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { if (this->player->character->InRange(*character)) { this->player->character->pet->RemoveFromView(*character); } } erase_first(this->player->character->map->npcs, this->player->character->pet); this->player->character->pet->Release(); this->player->character->has_pet = false; this->player->character->str -= 40; this->player->character->wis -= 40; this->player->character->con -= 40; this->player->character->CalculateStats(); this->player->character->StatSkill(); } } if(id == 15) { this->player->character->Save(); //this may be unnessasary this->player->character->AddItem(id, 1);//adds back the item after it's use this->player->character->Save(); if(!this->player->character->has_pet) { unsigned char index = this->player->character->map->GenerateNPCIndex(); if (index > 250) { break; } this->player->character->pet = new NPC(this->player->character->map, 350, this->player->character->x + 1,this->player->character->y, 1, 1, index, true, true); this->player->character->pet->Spawn(); this->player->character->pet->SetOwner(this->player->character); this->player->character->has_pet = true; //this->player->character->AddItem(682, 1); this->player->character->map->npcs.push_back(this->player->character->pet); this->player->character->str += 300; this->player->character->CalculateStats(); this->player->character->StatSkill(); this->player->character->Save(); } else if(this->player->character->has_pet == true) { UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { if (this->player->character->InRange(*character)) { this->player->character->pet->RemoveFromView(*character); } } erase_first(this->player->character->map->npcs, this->player->character->pet); this->player->character->pet->Release(); this->player->character->has_pet = false; this->player->character->str -= 300; this->player->character->CalculateStats(); this->player->character->StatSkill(); } } if(id == 563) //pk fire { PacketBuilder builder; UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { if(this->player->character->has_pet) { if(this->player->character->map->pk == true) { Character *character_ptr = *character; character_ptr->AddRef(); int distance = util::path_length(character_ptr->x, character_ptr->y, this->player->character->x, this->player->character->y); if (distance >0 && distance <13) { Character *character_ptr = *character; character_ptr->AddRef(); int amount = util::rand(this->player->character->pet->Data()->mindam, this->player->character->pet->Data()->maxdam + static_cast<int>(this->server->world->config["NPCAdjustMaxDam"])); int limitamount = std::min(amount, int(character_ptr->hp)); if (static_cast<int>(this->server->world->config["LimitDamage"])) { amount = limitamount; } if (character_ptr->invincible == false) { character_ptr->hp -= limitamount; builder.SetID(PACKET_CLOTHES, PACKET_ADMIN); builder.AddShort(this->player->character->player->id); builder.AddShort(character_ptr->player->id); builder.AddThree(amount); builder.AddChar(this->player->character->direction); builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0)); builder.AddChar(character_ptr->hp == 0); builder.AddShort(17); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, checkchar) { if (character_ptr->InRange(*checkchar)) { checkchar->player->client->SendBuilder(builder); } } } else { builder.SetID(PACKET_CLOTHES, PACKET_ADMIN); builder.AddShort(this->player->character->player->id); builder.AddShort(character_ptr->player->id); builder.AddThree(0); builder.AddChar(this->player->character->direction); builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0)); builder.AddChar(character_ptr->hp == 0); builder.AddShort(17); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, checkchar) { if (character_ptr->InRange(*checkchar)) { checkchar->player->client->SendBuilder(builder); } } } if (character_ptr->hp == 0) { std::string msg(character_ptr->name + " got KnocKed tHE FuK ouT By "); msg += this->player->character->pet->owner->name; this->server->world->ServerMsg(msg); int item = 1; int amount = 2000; if (this->player->character->pet->owner->AddItem(item, amount)) { PacketBuilder builder(PACKET_ITEM, PACKET_GET); builder.AddShort(0); // UID builder.AddShort(item); builder.AddThree(amount); builder.AddChar(this->player->character->pet->owner->weight); builder.AddChar(this->player->character->pet->owner->maxweight); this->player->character->pet->owner->player->client->SendBuilder(builder); } bool stats_updated = false; this->player->character->pet->owner->exp += 1000; stats_updated = true; if (stats_updated) { bool level_up = false; while (this->player->character->pet->owner->level < static_cast<int>(this->server->world->config["MaxLevel"]) && this->player->character->pet->owner->exp >= this->server->world->exp_table[this->player->character->pet->owner->level+1]) { level_up = true; ++this->player->character->pet->owner->level; this->player->character->pet->owner->statpoints += static_cast<int>(this->server->world->config["StatPerLevel"]); this->player->character->pet->owner->skillpoints += static_cast<int>(this->server->world->config["SkillPerLevel"]); this->player->character->pet->owner->CalculateStats(); } PacketBuilder builder(PACKET_RECOVER, PACKET_REPLY); builder.AddInt(this->player->character->pet->owner->exp); builder.AddShort(this->player->character->pet->owner->karma); builder.AddChar(level_up ? this->player->character->pet->owner->level : 0); this->player->character->pet->owner->player->client->SendBuilder(builder); } character_ptr->hp = int(character_ptr->maxhp * static_cast<double>(this->server->world->config["DeathRecover"]) / 100.0); if (this->server->world->config["Deadly"]) { character_ptr->DropAll(this->player->character); } character_ptr->PetTransfer(); character_ptr->map->Leave(character_ptr, WARP_ANIMATION_NONE, true); character_ptr->nowhere = true; character_ptr->map = this->server->world->GetMap(character_ptr->SpawnMap()); character_ptr->mapid = character_ptr->SpawnMap(); character_ptr->x = character_ptr->SpawnX(); character_ptr->y = character_ptr->SpawnY(); character_ptr->PetTransfer(); PacketReader reader(""); character_ptr->player->client->queue.AddAction(PACKET_INTERNAL, PACKET_INTERNAL_NULL, reader, 1.5); character_ptr->player->client->queue.AddAction(PACKET_INTERNAL, PACKET_INTERNAL_WARP, reader, 0.0); } builder.Reset(); builder.SetID(PACKET_RECOVER, PACKET_PLAYER); builder.AddShort(character_ptr->hp); builder.AddShort(character_ptr->tp); character_ptr->player->client->SendBuilder(builder); character_ptr->Release(); return true; } } } } return false; } if(id == 638) //pk X Ray { PacketBuilder builder; UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { if(this->player->character->has_pet) { if(this->player->character->map->pk == true) { Character *character_ptr = *character; character_ptr->AddRef(); int distance = util::path_length(character_ptr->x, character_ptr->y, this->player->character->x, this->player->character->y); if (distance >0 && distance <13) { Character *character_ptr = *character; character_ptr->AddRef(); int amount = util::rand(this->player->character->pet->Data()->mindam, this->player->character->pet->Data()->maxdam + static_cast<int>(this->server->world->config["NPCAdjustMaxDam"])); int limitamount = std::min(amount, int(character_ptr->hp)); if (static_cast<int>(this->server->world->config["LimitDamage"])) { amount = limitamount; } if (character_ptr->invincible == false) { character_ptr->hp -= limitamount; builder.SetID(PACKET_CLOTHES, PACKET_ADMIN); builder.AddShort(this->player->character->player->id); builder.AddShort(character_ptr->player->id); builder.AddThree(amount); builder.AddChar(this->player->character->direction); builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0)); builder.AddChar(character_ptr->hp == 0); builder.AddShort(37); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, checkchar) { if (character_ptr->InRange(*checkchar)) { checkchar->player->client->SendBuilder(builder); } } } else { builder.SetID(PACKET_CLOTHES, PACKET_ADMIN); builder.AddShort(this->player->character->player->id); builder.AddShort(character_ptr->player->id); builder.AddThree(0); builder.AddChar(this->player->character->direction); builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0)); builder.AddChar(character_ptr->hp == 0); builder.AddShort(37); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, checkchar) { if (character_ptr->InRange(*checkchar)) { checkchar->player->client->SendBuilder(builder); } } } if (character_ptr->hp == 0) { std::string msg(character_ptr->name + " got KnocKed tHE FuK ouT By "); msg += this->player->character->pet->owner->name; this->server->world->ServerMsg(msg); int item = 1; int amount = 2000; if (this->player->character->pet->owner->AddItem(item, amount)) { PacketBuilder builder(PACKET_ITEM, PACKET_GET); builder.AddShort(0); // UID builder.AddShort(item); builder.AddThree(amount); builder.AddChar(this->player->character->pet->owner->weight); builder.AddChar(this->player->character->pet->owner->maxweight); this->player->character->pet->owner->player->client->SendBuilder(builder); } bool stats_updated = false; this->player->character->pet->owner->exp += 1000; stats_updated = true; if (stats_updated) { bool level_up = false; while (this->player->character->pet->owner->level < static_cast<int>(this->server->world->config["MaxLevel"]) && this->player->character->pet->owner->exp >= this->server->world->exp_table[this->player->character->pet->owner->level+1]) { level_up = true; ++this->player->character->pet->owner->level; this->player->character->pet->owner->statpoints += static_cast<int>(this->server->world->config["StatPerLevel"]); this->player->character->pet->owner->skillpoints += static_cast<int>(this->server->world->config["SkillPerLevel"]); this->player->character->pet->owner->CalculateStats(); } PacketBuilder builder(PACKET_RECOVER, PACKET_REPLY); builder.AddInt(this->player->character->pet->owner->exp); builder.AddShort(this->player->character->pet->owner->karma); builder.AddChar(level_up ? this->player->character->pet->owner->level : 0); this->player->character->pet->owner->player->client->SendBuilder(builder); } character_ptr->hp = int(character_ptr->maxhp * static_cast<double>(this->server->world->config["DeathRecover"]) / 100.0); if (this->server->world->config["Deadly"]) { character_ptr->DropAll(this->player->character); } character_ptr->PetTransfer(); character_ptr->map->Leave(character_ptr, WARP_ANIMATION_NONE, true); character_ptr->nowhere = true; character_ptr->map = this->server->world->GetMap(character_ptr->SpawnMap()); character_ptr->mapid = character_ptr->SpawnMap(); character_ptr->x = character_ptr->SpawnX(); character_ptr->y = character_ptr->SpawnY(); character_ptr->PetTransfer(); PacketReader reader(""); character_ptr->player->client->queue.AddAction(PACKET_INTERNAL, PACKET_INTERNAL_NULL, reader, 1.5); character_ptr->player->client->queue.AddAction(PACKET_INTERNAL, PACKET_INTERNAL_WARP, reader, 0.0); } builder.Reset(); builder.SetID(PACKET_RECOVER, PACKET_PLAYER); builder.AddShort(character_ptr->hp); builder.AddShort(character_ptr->tp); character_ptr->player->client->SendBuilder(builder); character_ptr->Release(); return true; } } } } return false; } if(id == 639) //Green Flame { PacketBuilder builder; UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { if(this->player->character->has_pet) { if(this->player->character->map->pk == true) { Character *character_ptr = *character; character_ptr->AddRef(); int distance = util::path_length(character_ptr->x, character_ptr->y, this->player->character->x, this->player->character->y); if (distance >0 && distance <13) { Character *character_ptr = *character; character_ptr->AddRef(); int amount = util::rand(this->player->character->pet->Data()->mindam, this->player->character->pet->Data()->maxdam + static_cast<int>(this->server->world->config["NPCAdjustMaxDam"])); int limitamount = std::min(amount, int(character_ptr->hp)); if (static_cast<int>(this->server->world->config["LimitDamage"])) { amount = limitamount; } if (character_ptr->invincible == false) { character_ptr->hp -= limitamount; builder.SetID(PACKET_CLOTHES, PACKET_ADMIN); builder.AddShort(this->player->character->player->id); builder.AddShort(character_ptr->player->id); builder.AddThree(amount); builder.AddChar(this->player->character->direction); builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0)); builder.AddChar(character_ptr->hp == 0); builder.AddShort(31); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, checkchar) { if (character_ptr->InRange(*checkchar)) { checkchar->player->client->SendBuilder(builder); } } } else { builder.SetID(PACKET_CLOTHES, PACKET_ADMIN); builder.AddShort(this->player->character->player->id); builder.AddShort(character_ptr->player->id); builder.AddThree(0); builder.AddChar(this->player->character->direction); builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0)); builder.AddChar(character_ptr->hp == 0); builder.AddShort(31); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, checkchar) { if (character_ptr->InRange(*checkchar)) { checkchar->player->client->SendBuilder(builder); } } } if (character_ptr->hp == 0) { std::string msg(character_ptr->name + " got KnocKed tHE FuK ouT By "); msg += this->player->character->pet->owner->name; this->server->world->ServerMsg(msg); int item = 1; int amount = 2000; if (this->player->character->pet->owner->AddItem(item, amount)) { PacketBuilder builder(PACKET_ITEM, PACKET_GET); builder.AddShort(0); // UID builder.AddShort(item); builder.AddThree(amount); builder.AddChar(this->player->character->pet->owner->weight); builder.AddChar(this->player->character->pet->owner->maxweight); this->player->character->pet->owner->player->client->SendBuilder(builder); } bool stats_updated = false; this->player->character->pet->owner->exp += 1000; stats_updated = true; if (stats_updated) { bool level_up = false; while (this->player->character->pet->owner->level < static_cast<int>(this->server->world->config["MaxLevel"]) && this->player->character->pet->owner->exp >= this->server->world->exp_table[this->player->character->pet->owner->level+1]) { level_up = true; ++this->player->character->pet->owner->level; this->player->character->pet->owner->statpoints += static_cast<int>(this->server->world->config["StatPerLevel"]); this->player->character->pet->owner->skillpoints += static_cast<int>(this->server->world->config["SkillPerLevel"]); this->player->character->pet->owner->CalculateStats(); } PacketBuilder builder(PACKET_RECOVER, PACKET_REPLY); builder.AddInt(this->player->character->pet->owner->exp); builder.AddShort(this->player->character->pet->owner->karma); builder.AddChar(level_up ? this->player->character->pet->owner->level : 0); this->player->character->pet->owner->player->client->SendBuilder(builder); } character_ptr->hp = int(character_ptr->maxhp * static_cast<double>(this->server->world->config["DeathRecover"]) / 100.0); if (this->server->world->config["Deadly"]) { character_ptr->DropAll(this->player->character); } character_ptr->PetTransfer(); character_ptr->map->Leave(character_ptr, WARP_ANIMATION_NONE, true); character_ptr->nowhere = true; character_ptr->map = this->server->world->GetMap(character_ptr->SpawnMap()); character_ptr->mapid = character_ptr->SpawnMap(); character_ptr->x = character_ptr->SpawnX(); character_ptr->y = character_ptr->SpawnY(); character_ptr->PetTransfer(); PacketReader reader(""); character_ptr->player->client->queue.AddAction(PACKET_INTERNAL, PACKET_INTERNAL_NULL, reader, 1.5); character_ptr->player->client->queue.AddAction(PACKET_INTERNAL, PACKET_INTERNAL_WARP, reader, 0.0); } builder.Reset(); builder.SetID(PACKET_RECOVER, PACKET_PLAYER); builder.AddShort(character_ptr->hp); builder.AddShort(character_ptr->tp); character_ptr->player->client->SendBuilder(builder); character_ptr->Release(); return true; } } } } return false; } if(id == 640) //pk Energy Ball { PacketBuilder builder; UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { if(this->player->character->has_pet) { if(this->player->character->map->pk == true) { Character *character_ptr = *character; character_ptr->AddRef(); int distance = util::path_length(character_ptr->x, character_ptr->y, this->player->character->x, this->player->character->y); if (distance >0 && distance <13) { Character *character_ptr = *character; character_ptr->AddRef(); int amount = util::rand(this->player->character->pet->Data()->mindam, this->player->character->pet->Data()->maxdam + static_cast<int>(this->server->world->config["NPCAdjustMaxDam"])); int limitamount = std::min(amount, int(character_ptr->hp)); if (static_cast<int>(this->server->world->config["LimitDamage"])) { amount = limitamount; } if (character_ptr->invincible == false) { character_ptr->hp -= limitamount; builder.SetID(PACKET_CLOTHES, PACKET_ADMIN); builder.AddShort(this->player->character->player->id); builder.AddShort(character_ptr->player->id); builder.AddThree(amount); builder.AddChar(this->player->character->direction); builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0)); builder.AddChar(character_ptr->hp == 0); builder.AddShort(15); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, checkchar) { if (character_ptr->InRange(*checkchar)) { checkchar->player->client->SendBuilder(builder); } } } else { builder.SetID(PACKET_CLOTHES, PACKET_ADMIN); builder.AddShort(this->player->character->player->id); builder.AddShort(character_ptr->player->id); builder.AddThree(0); builder.AddChar(this->player->character->direction); builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0)); builder.AddChar(character_ptr->hp == 0); builder.AddShort(15); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, checkchar) { if (character_ptr->InRange(*checkchar)) { checkchar->player->client->SendBuilder(builder); } } } if (character_ptr->hp == 0) { std::string msg(character_ptr->name + " got KnocKed tHE FuK ouT By "); msg += this->player->character->pet->owner->name; this->server->world->ServerMsg(msg); int item = 1; int amount = 2000; if (this->player->character->pet->owner->AddItem(item, amount)) { PacketBuilder builder(PACKET_ITEM, PACKET_GET); builder.AddShort(0); // UID builder.AddShort(item); builder.AddThree(amount); builder.AddChar(this->player->character->pet->owner->weight); builder.AddChar(this->player->character->pet->owner->maxweight); this->player->character->pet->owner->player->client->SendBuilder(builder); } bool stats_updated = false; this->player->character->pet->owner->exp += 1000; stats_updated = true; if (stats_updated) { bool level_up = false; while (this->player->character->pet->owner->level < static_cast<int>(this->server->world->config["MaxLevel"]) && this->player->character->pet->owner->exp >= this->server->world->exp_table[this->player->character->pet->owner->level+1]) { level_up = true; ++this->player->character->pet->owner->level; this->player->character->pet->owner->statpoints += static_cast<int>(this->server->world->config["StatPerLevel"]); this->player->character->pet->owner->skillpoints += static_cast<int>(this->server->world->config["SkillPerLevel"]); this->player->character->pet->owner->CalculateStats(); } PacketBuilder builder(PACKET_RECOVER, PACKET_REPLY); builder.AddInt(this->player->character->pet->owner->exp); builder.AddShort(this->player->character->pet->owner->karma); builder.AddChar(level_up ? this->player->character->pet->owner->level : 0); this->player->character->pet->owner->player->client->SendBuilder(builder); } character_ptr->hp = int(character_ptr->maxhp * static_cast<double>(this->server->world->config["DeathRecover"]) / 100.0); if (this->server->world->config["Deadly"]) { character_ptr->DropAll(this->player->character); } character_ptr->PetTransfer(); character_ptr->map->Leave(character_ptr, WARP_ANIMATION_NONE, true); character_ptr->nowhere = true; character_ptr->map = this->server->world->GetMap(character_ptr->SpawnMap()); character_ptr->mapid = character_ptr->SpawnMap(); character_ptr->x = character_ptr->SpawnX(); character_ptr->y = character_ptr->SpawnY(); character_ptr->PetTransfer(); PacketReader reader(""); character_ptr->player->client->queue.AddAction(PACKET_INTERNAL, PACKET_INTERNAL_NULL, reader, 1.5); character_ptr->player->client->queue.AddAction(PACKET_INTERNAL, PACKET_INTERNAL_WARP, reader, 0.0); } builder.Reset(); builder.SetID(PACKET_RECOVER, PACKET_PLAYER); builder.AddShort(character_ptr->hp); builder.AddShort(character_ptr->tp); character_ptr->player->client->SendBuilder(builder); character_ptr->Release(); return true; } } } } return false; } if(id == 641) //pk dark beam { PacketBuilder builder; UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { if(this->player->character->has_pet) { if(this->player->character->map->pk == true) { Character *character_ptr = *character; character_ptr->AddRef(); int distance = util::path_length(character_ptr->x, character_ptr->y, this->player->character->x, this->player->character->y); if (distance >0 && distance <13) { Character *character_ptr = *character; character_ptr->AddRef(); int amount = util::rand(this->player->character->pet->Data()->mindam, this->player->character->pet->Data()->maxdam + static_cast<int>(this->server->world->config["NPCAdjustMaxDam"])); int limitamount = std::min(amount, int(character_ptr->hp)); if (static_cast<int>(this->server->world->config["LimitDamage"])) { amount = limitamount; } if (character_ptr->invincible == false) { character_ptr->hp -= limitamount; builder.SetID(PACKET_CLOTHES, PACKET_ADMIN); builder.AddShort(this->player->character->player->id); builder.AddShort(character_ptr->player->id); builder.AddThree(amount); builder.AddChar(this->player->character->direction); builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0)); builder.AddChar(character_ptr->hp == 0); builder.AddShort(22); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, checkchar) { if (character_ptr->InRange(*checkchar)) { checkchar->player->client->SendBuilder(builder); } } } else { builder.SetID(PACKET_CLOTHES, PACKET_ADMIN); builder.AddShort(this->player->character->player->id); builder.AddShort(character_ptr->player->id); builder.AddThree(0); builder.AddChar(this->player->character->direction); builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0)); builder.AddChar(character_ptr->hp == 0); builder.AddShort(22); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, checkchar) { if (character_ptr->InRange(*checkchar)) { checkchar->player->client->SendBuilder(builder); } } } if (character_ptr->hp == 0) { std::string msg(character_ptr->name + " got KnocKed tHE FuK ouT By "); msg += this->player->character->pet->owner->name; this->server->world->ServerMsg(msg); int item = 1; int amount = 2000; if (this->player->character->pet->owner->AddItem(item, amount)) { PacketBuilder builder(PACKET_ITEM, PACKET_GET); builder.AddShort(0); // UID builder.AddShort(item); builder.AddThree(amount); builder.AddChar(this->player->character->pet->owner->weight); builder.AddChar(this->player->character->pet->owner->maxweight); this->player->character->pet->owner->player->client->SendBuilder(builder); } bool stats_updated = false; this->player->character->pet->owner->exp += 1000; stats_updated = true; if (stats_updated) { bool level_up = false; while (this->player->character->pet->owner->level < static_cast<int>(this->server->world->config["MaxLevel"]) && this->player->character->pet->owner->exp >= this->server->world->exp_table[this->player->character->pet->owner->level+1]) { level_up = true; ++this->player->character->pet->owner->level; this->player->character->pet->owner->statpoints += static_cast<int>(this->server->world->config["StatPerLevel"]); this->player->character->pet->owner->skillpoints += static_cast<int>(this->server->world->config["SkillPerLevel"]); this->player->character->pet->owner->CalculateStats(); } PacketBuilder builder(PACKET_RECOVER, PACKET_REPLY); builder.AddInt(this->player->character->pet->owner->exp); builder.AddShort(this->player->character->pet->owner->karma); builder.AddChar(level_up ? this->player->character->pet->owner->level : 0); this->player->character->pet->owner->player->client->SendBuilder(builder); } character_ptr->hp = int(character_ptr->maxhp * static_cast<double>(this->server->world->config["DeathRecover"]) / 100.0); if (this->server->world->config["Deadly"]) { character_ptr->DropAll(this->player->character); } character_ptr->PetTransfer(); character_ptr->map->Leave(character_ptr, WARP_ANIMATION_NONE, true); this->player->character->exp += 10000; character_ptr->nowhere = true; character_ptr->map = this->server->world->GetMap(character_ptr->SpawnMap()); character_ptr->mapid = character_ptr->SpawnMap(); character_ptr->x = character_ptr->SpawnX(); character_ptr->y = character_ptr->SpawnY(); character_ptr->PetTransfer(); PacketReader reader(""); character_ptr->player->client->queue.AddAction(PACKET_INTERNAL, PACKET_INTERNAL_NULL, reader, 1.5); character_ptr->player->client->queue.AddAction(PACKET_INTERNAL, PACKET_INTERNAL_WARP, reader, 0.0); } builder.Reset(); builder.SetID(PACKET_RECOVER, PACKET_PLAYER); builder.AddShort(character_ptr->hp); builder.AddShort(character_ptr->tp); character_ptr->player->client->SendBuilder(builder); character_ptr->Release(); return true; } } } } return false; } if(id == 642) //NPC Attack Fire { if(this->player->character->has_pet) { UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { UTIL_PTR_VECTOR_FOREACH(this->player->character->map->npcs, NPC, npc) { int distance = util::path_length(npc->x, npc->y, this->player->character->x, this->player->character->y); if (distance >2 && distance <13) { if ((npc->Data()->type == ENF::Aggressive || npc->Data()->type == ENF::Passive) && npc->alive) { int amount = util::rand(this->player->character->pet->Data()->mindam, this->player->character->pet->Data()->maxdam + static_cast<int>(this->server->world->config["NPCAdjustMaxDam"])); npc->SpellDamage(this->player->character, amount, 17, 0); } } } } } return false; } if(id == 643) //NPC Attack Dark Beam { if(this->player->character->has_pet) { UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { UTIL_PTR_VECTOR_FOREACH(this->player->character->map->npcs, NPC, npc) { int distance = util::path_length(npc->x, npc->y, this->player->character->x, this->player->character->y); if (distance >2 && distance <13) { if ((npc->Data()->type == ENF::Aggressive || npc->Data()->type == ENF::Passive) && npc->alive) { int amount = util::rand(this->player->character->pet->Data()->mindam, this->player->character->pet->Data()->maxdam + static_cast<int>(this->server->world->config["NPCAdjustMaxDam"])); npc->SpellDamage(this->player->character, amount, 22, 0); } } } } } return false; } if(id == 644) //NPC Attack Energy Ball { if(this->player->character->has_pet) { UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { UTIL_PTR_VECTOR_FOREACH(this->player->character->map->npcs, NPC, npc) { int distance = util::path_length(npc->x, npc->y, this->player->character->x, this->player->character->y); if (distance >2 && distance <13) { if ((npc->Data()->type == ENF::Aggressive || npc->Data()->type == ENF::Passive) && npc->alive) { int amount = util::rand(this->player->character->pet->Data()->mindam, this->player->character->pet->Data()->maxdam + static_cast<int>(this->server->world->config["NPCAdjustMaxDam"])); npc->SpellDamage(this->player->character, amount, 15, 0); } } } } } return false; } if(id == 645) //Pet Heal { PacketBuilder builder; if(this->player->character->has_pet) { UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { int hpgain = this->player->character->pet->owner->maxhp - this->player->character->pet->owner->hp; if(this->player->character->pet->owner->tp > 0) { this->player->character->pet->owner->tp -= 50; if (this->player->character->pet->owner->tp <= 0) { this->player->character->pet->owner->tp = 0; } this->player->character->pet->owner->hp += hpgain; reply.AddInt(hpgain); reply.AddShort(this->player->character->pet->owner->hp); { PacketBuilder builder; builder.SetID(PACKET_RECOVER, PACKET_AGREE); builder.AddShort(this->player->id); builder.AddInt(hpgain); builder.AddChar(int(double(this->player->character->pet->owner->hp) / double(this->player->character->pet->owner->maxhp) * 100.0)); UTIL_PTR_VECTOR_FOREACH(this->server->world->characters, Character, character) { this->player->character->pet->owner->player->client->SendBuilder(builder); } } PacketBuilder builder; builder.SetID(PACKET_RECOVER, PACKET_PLAYER); builder.AddShort(this->player->character->pet->owner->hp); builder.AddShort(this->player->character->pet->owner->tp); UTIL_PTR_VECTOR_FOREACH(this->server->world->characters, Character, character) { this->player->character->pet->owner->player->client->SendBuilder(builder); } } PacketBuilder builder; builder.SetID(PACKET_EFFECT, PACKET_PLAYER); builder.AddShort(this->player->id); builder.AddShort(21); builder.AddChar(0); UTIL_PTR_VECTOR_FOREACH(this->server->world->characters, Character, character) { character->player->client->SendBuilder(builder); } } } return false; } if(id == 646) //pk fire { PacketBuilder builder; UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { if(this->player->character->has_pet) { if(this->player->character->map->pk == true) { Character *character_ptr = *character; character_ptr->AddRef(); int distance = util::path_length(character_ptr->x, character_ptr->y, this->player->character->x, this->player->character->y); if (distance >0 && distance <13) { Character *character_ptr = *character; character_ptr->AddRef(); int amount = util::rand(this->player->character->pet->Data()->mindam, this->player->character->pet->Data()->maxdam + static_cast<int>(this->server->world->config["NPCAdjustMaxDam"])); int limitamount = std::min(amount, int(character_ptr->hp)); if (static_cast<int>(this->server->world->config["LimitDamage"])) { amount = limitamount; } if (character_ptr->invincible == false) { character_ptr->hp -= limitamount; builder.SetID(PACKET_CLOTHES, PACKET_ADMIN); builder.AddShort(this->player->character->player->id); builder.AddShort(character_ptr->player->id); builder.AddThree(amount); builder.AddChar(this->player->character->direction); builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0)); builder.AddChar(character_ptr->hp == 0); builder.AddShort(17); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, checkchar) { if (character_ptr->InRange(*checkchar)) { checkchar->player->client->SendBuilder(builder); } } } else { builder.SetID(PACKET_CLOTHES, PACKET_ADMIN); builder.AddShort(this->player->character->player->id); builder.AddShort(character_ptr->player->id); builder.AddThree(0); builder.AddChar(this->player->character->direction); builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0)); builder.AddChar(character_ptr->hp == 0); builder.AddShort(17); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, checkchar) { if (character_ptr->InRange(*checkchar)) { checkchar->player->client->SendBuilder(builder); } } } if (character_ptr->hp == 0) { std::string msg(character->name + " got KnocKed tHE FuK ouT By "); msg += this->player->character->name; this->server->world->ServerMsg(msg); if (this->player->character->AddItem(1, 2000)) { PacketBuilder builder(PACKET_ITEM, PACKET_GET); builder.AddShort(0); // UID builder.AddShort(1); builder.AddThree(2000); builder.AddChar(this->player->character->weight); builder.AddChar(this->player->character->maxweight); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { this->player->character->player->client->SendBuilder(builder); } } character_ptr->hp = int(character_ptr->maxhp * static_cast<double>(this->server->world->config["DeathRecover"]) / 100.0); if (this->server->world->config["Deadly"]) { character_ptr->DropAll(this->player->character); } character_ptr->PetTransfer(); character_ptr->map->Leave(character_ptr, WARP_ANIMATION_NONE, true); this->player->character->exp += 10000; character_ptr->nowhere = true; character_ptr->map = this->server->world->GetMap(character_ptr->SpawnMap()); character_ptr->mapid = character_ptr->SpawnMap(); character_ptr->x = character_ptr->SpawnX(); character_ptr->y = character_ptr->SpawnY(); character_ptr->PetTransfer(); PacketReader reader(""); character_ptr->player->client->queue.AddAction(PACKET_INTERNAL, PACKET_INTERNAL_NULL, reader, 1.5); character_ptr->player->client->queue.AddAction(PACKET_INTERNAL, PACKET_INTERNAL_WARP, reader, 0.0); } builder.Reset(); builder.SetID(PACKET_RECOVER, PACKET_PLAYER); builder.AddShort(character_ptr->hp); builder.AddShort(character_ptr->tp); character_ptr->player->client->SendBuilder(builder); character_ptr->Release(); return true; } } } } } if(id == 647) //pk X Ray { PacketBuilder builder; UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { if(this->player->character->has_pet) { if(this->player->character->map->pk == true) { Character *character_ptr = *character; character_ptr->AddRef(); int distance = util::path_length(character_ptr->x, character_ptr->y, this->player->character->x, this->player->character->y); if (distance >0 && distance <13) { Character *character_ptr = *character; character_ptr->AddRef(); int amount = util::rand(this->player->character->pet->Data()->mindam, this->player->character->pet->Data()->maxdam + static_cast<int>(this->server->world->config["NPCAdjustMaxDam"])); int limitamount = std::min(amount, int(character_ptr->hp)); if (static_cast<int>(this->server->world->config["LimitDamage"])) { amount = limitamount; } if (character_ptr->invincible == false) { character_ptr->hp -= limitamount; builder.SetID(PACKET_CLOTHES, PACKET_ADMIN); builder.AddShort(this->player->character->player->id); builder.AddShort(character_ptr->player->id); builder.AddThree(amount); builder.AddChar(this->player->character->direction); builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0)); builder.AddChar(character_ptr->hp == 0); builder.AddShort(37); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, checkchar) { if (character_ptr->InRange(*checkchar)) { checkchar->player->client->SendBuilder(builder); } } } else { builder.SetID(PACKET_CLOTHES, PACKET_ADMIN); builder.AddShort(this->player->character->player->id); builder.AddShort(character_ptr->player->id); builder.AddThree(0); builder.AddChar(this->player->character->direction); builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0)); builder.AddChar(character_ptr->hp == 0); builder.AddShort(37); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, checkchar) { if (character_ptr->InRange(*checkchar)) { checkchar->player->client->SendBuilder(builder); } } } if (character_ptr->hp == 0) { std::string msg(character->name + " got KnocKed tHE FuK ouT By "); msg += this->player->character->name; this->server->world->ServerMsg(msg); if (this->player->character->AddItem(1, 2000)) { PacketBuilder builder(PACKET_ITEM, PACKET_GET); builder.AddShort(0); // UID builder.AddShort(1); builder.AddThree(2000); builder.AddChar(this->player->character->weight); builder.AddChar(this->player->character->maxweight); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { this->player->character->player->client->SendBuilder(builder); } } character_ptr->hp = int(character_ptr->maxhp * static_cast<double>(this->server->world->config["DeathRecover"]) / 100.0); if (this->server->world->config["Deadly"]) { character_ptr->DropAll(this->player->character); } character_ptr->PetTransfer(); character_ptr->map->Leave(character_ptr, WARP_ANIMATION_NONE, true); this->player->character->exp += 10000; character_ptr->nowhere = true; character_ptr->map = this->server->world->GetMap(character_ptr->SpawnMap()); character_ptr->mapid = character_ptr->SpawnMap(); character_ptr->x = character_ptr->SpawnX(); character_ptr->y = character_ptr->SpawnY(); character_ptr->PetTransfer(); PacketReader reader(""); character_ptr->player->client->queue.AddAction(PACKET_INTERNAL, PACKET_INTERNAL_NULL, reader, 1.5); character_ptr->player->client->queue.AddAction(PACKET_INTERNAL, PACKET_INTERNAL_WARP, reader, 0.0); } builder.Reset(); builder.SetID(PACKET_RECOVER, PACKET_PLAYER); builder.AddShort(character_ptr->hp); builder.AddShort(character_ptr->tp); character_ptr->player->client->SendBuilder(builder); character_ptr->Release(); return true; } } } } } if(id == 648) //Green Flame { PacketBuilder builder; UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { if(this->player->character->has_pet) { if(this->player->character->map->pk == true) { Character *character_ptr = *character; character_ptr->AddRef(); int distance = util::path_length(character_ptr->x, character_ptr->y, this->player->character->x, this->player->character->y); if (distance >0 && distance <13) { Character *character_ptr = *character; character_ptr->AddRef(); int amount = util::rand(this->player->character->pet->Data()->mindam, this->player->character->pet->Data()->maxdam + static_cast<int>(this->server->world->config["NPCAdjustMaxDam"])); int limitamount = std::min(amount, int(character_ptr->hp)); if (static_cast<int>(this->server->world->config["LimitDamage"])) { amount = limitamount; } if (character_ptr->invincible == false) { character_ptr->hp -= limitamount; builder.SetID(PACKET_CLOTHES, PACKET_ADMIN); builder.AddShort(this->player->character->player->id); builder.AddShort(character_ptr->player->id); builder.AddThree(amount); builder.AddChar(this->player->character->direction); builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0)); builder.AddChar(character_ptr->hp == 0); builder.AddShort(31); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, checkchar) { if (character_ptr->InRange(*checkchar)) { checkchar->player->client->SendBuilder(builder); } } } else { builder.SetID(PACKET_CLOTHES, PACKET_ADMIN); builder.AddShort(this->player->character->player->id); builder.AddShort(character_ptr->player->id); builder.AddThree(0); builder.AddChar(this->player->character->direction); builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0)); builder.AddChar(character_ptr->hp == 0); builder.AddShort(31); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, checkchar) { if (character_ptr->InRange(*checkchar)) { checkchar->player->client->SendBuilder(builder); } } } if (character_ptr->hp == 0) { std::string msg(character->name + " got KnocKed tHE FuK ouT By "); msg += this->player->character->name; this->server->world->ServerMsg(msg); if (this->player->character->AddItem(1, 2000)) { PacketBuilder builder(PACKET_ITEM, PACKET_GET); builder.AddShort(0); // UID builder.AddShort(1); builder.AddThree(2000); builder.AddChar(this->player->character->weight); builder.AddChar(this->player->character->maxweight); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { this->player->character->player->client->SendBuilder(builder); } } character_ptr->hp = int(character_ptr->maxhp * static_cast<double>(this->server->world->config["DeathRecover"]) / 100.0); if (this->server->world->config["Deadly"]) { character_ptr->DropAll(this->player->character); } character_ptr->PetTransfer(); character_ptr->map->Leave(character_ptr, WARP_ANIMATION_NONE, true); this->player->character->exp += 10000; character_ptr->nowhere = true; character_ptr->map = this->server->world->GetMap(character_ptr->SpawnMap()); character_ptr->mapid = character_ptr->SpawnMap(); character_ptr->x = character_ptr->SpawnX(); character_ptr->y = character_ptr->SpawnY(); character_ptr->PetTransfer(); PacketReader reader(""); character_ptr->player->client->queue.AddAction(PACKET_INTERNAL, PACKET_INTERNAL_NULL, reader, 1.5); character_ptr->player->client->queue.AddAction(PACKET_INTERNAL, PACKET_INTERNAL_WARP, reader, 0.0); } builder.Reset(); builder.SetID(PACKET_RECOVER, PACKET_PLAYER); builder.AddShort(character_ptr->hp); builder.AddShort(character_ptr->tp); character_ptr->player->client->SendBuilder(builder); character_ptr->Release(); return true; } } } } } if(id == 649) //pk Energy Ball { PacketBuilder builder; UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { if(this->player->character->has_pet) { if(this->player->character->map->pk == true) { Character *character_ptr = *character; character_ptr->AddRef(); int distance = util::path_length(character_ptr->x, character_ptr->y, this->player->character->x, this->player->character->y); if (distance >0 && distance <13) { Character *character_ptr = *character; character_ptr->AddRef(); int amount = util::rand(this->player->character->pet->Data()->mindam, this->player->character->pet->Data()->maxdam + static_cast<int>(this->server->world->config["NPCAdjustMaxDam"])); int limitamount = std::min(amount, int(character_ptr->hp)); if (static_cast<int>(this->server->world->config["LimitDamage"])) { amount = limitamount; } if (character_ptr->invincible == false) { character_ptr->hp -= limitamount; builder.SetID(PACKET_CLOTHES, PACKET_ADMIN); builder.AddShort(this->player->character->player->id); builder.AddShort(character_ptr->player->id); builder.AddThree(amount); builder.AddChar(this->player->character->direction); builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0)); builder.AddChar(character_ptr->hp == 0); builder.AddShort(15); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, checkchar) { if (character_ptr->InRange(*checkchar)) { checkchar->player->client->SendBuilder(builder); } } } else { builder.SetID(PACKET_CLOTHES, PACKET_ADMIN); builder.AddShort(this->player->character->player->id); builder.AddShort(character_ptr->player->id); builder.AddThree(0); builder.AddChar(this->player->character->direction); builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0)); builder.AddChar(character_ptr->hp == 0); builder.AddShort(15); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, checkchar) { if (character_ptr->InRange(*checkchar)) { checkchar->player->client->SendBuilder(builder); } } } if (character_ptr->hp == 0) { std::string msg(character->name + " got KnocKed tHE FuK ouT By "); msg += this->player->character->name; this->server->world->ServerMsg(msg); if (this->player->character->AddItem(1, 2000)) { PacketBuilder builder(PACKET_ITEM, PACKET_GET); builder.AddShort(0); // UID builder.AddShort(1); builder.AddThree(2000); builder.AddChar(this->player->character->weight); builder.AddChar(this->player->character->maxweight); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { this->player->character->player->client->SendBuilder(builder); } } character_ptr->hp = int(character_ptr->maxhp * static_cast<double>(this->server->world->config["DeathRecover"]) / 100.0); if (this->server->world->config["Deadly"]) { character_ptr->DropAll(this->player->character); } character_ptr->PetTransfer(); character_ptr->map->Leave(character_ptr, WARP_ANIMATION_NONE, true); this->player->character->exp += 10000; character_ptr->nowhere = true; character_ptr->map = this->server->world->GetMap(character_ptr->SpawnMap()); character_ptr->mapid = character_ptr->SpawnMap(); character_ptr->x = character_ptr->SpawnX(); character_ptr->y = character_ptr->SpawnY(); character_ptr->PetTransfer(); PacketReader reader(""); character_ptr->player->client->queue.AddAction(PACKET_INTERNAL, PACKET_INTERNAL_NULL, reader, 1.5); character_ptr->player->client->queue.AddAction(PACKET_INTERNAL, PACKET_INTERNAL_WARP, reader, 0.0); } builder.Reset(); builder.SetID(PACKET_RECOVER, PACKET_PLAYER); builder.AddShort(character_ptr->hp); builder.AddShort(character_ptr->tp); character_ptr->player->client->SendBuilder(builder); character_ptr->Release(); return true; } } } } } if(id == 650) //pk dark beam { PacketBuilder builder; UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { if(this->player->character->has_pet) { if(this->player->character->map->pk == true) { Character *character_ptr = *character; character_ptr->AddRef(); int distance = util::path_length(character_ptr->x, character_ptr->y, this->player->character->x, this->player->character->y); if (distance >0 && distance <13) { Character *character_ptr = *character; character_ptr->AddRef(); int amount = util::rand(this->player->character->pet->Data()->mindam, this->player->character->pet->Data()->maxdam + static_cast<int>(this->server->world->config["NPCAdjustMaxDam"])); int limitamount = std::min(amount, int(character_ptr->hp)); if (static_cast<int>(this->server->world->config["LimitDamage"])) { amount = limitamount; } if (character_ptr->invincible == false) { character_ptr->hp -= limitamount; builder.SetID(PACKET_CLOTHES, PACKET_ADMIN); builder.AddShort(this->player->character->player->id); builder.AddShort(character_ptr->player->id); builder.AddThree(amount); builder.AddChar(this->player->character->direction); builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0)); builder.AddChar(character_ptr->hp == 0); builder.AddShort(22); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, checkchar) { if (character_ptr->InRange(*checkchar)) { checkchar->player->client->SendBuilder(builder); } } } else { builder.SetID(PACKET_CLOTHES, PACKET_ADMIN); builder.AddShort(this->player->character->player->id); builder.AddShort(character_ptr->player->id); builder.AddThree(0); builder.AddChar(this->player->character->direction); builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0)); builder.AddChar(character_ptr->hp == 0); builder.AddShort(22); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, checkchar) { if (character_ptr->InRange(*checkchar)) { checkchar->player->client->SendBuilder(builder); } } } if (character_ptr->hp == 0) { std::string msg(character->name + " got KnocKed tHE FuK ouT By "); msg += this->player->character->name; this->server->world->ServerMsg(msg); if (this->player->character->AddItem(1, 2000)) { PacketBuilder builder(PACKET_ITEM, PACKET_GET); builder.AddShort(0); // UID builder.AddShort(1); builder.AddThree(2000); builder.AddChar(this->player->character->weight); builder.AddChar(this->player->character->maxweight); UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { this->player->character->player->client->SendBuilder(builder); } } character_ptr->hp = int(character_ptr->maxhp * static_cast<double>(this->server->world->config["DeathRecover"]) / 100.0); if (this->server->world->config["Deadly"]) { character_ptr->DropAll(this->player->character); } character_ptr->PetTransfer(); character_ptr->map->Leave(character_ptr, WARP_ANIMATION_NONE, true); this->player->character->exp += 10000; character_ptr->nowhere = true; character_ptr->map = this->server->world->GetMap(character_ptr->SpawnMap()); character_ptr->mapid = character_ptr->SpawnMap(); character_ptr->x = character_ptr->SpawnX(); character_ptr->y = character_ptr->SpawnY(); character_ptr->PetTransfer(); PacketReader reader(""); character_ptr->player->client->queue.AddAction(PACKET_INTERNAL, PACKET_INTERNAL_NULL, reader, 1.5); character_ptr->player->client->queue.AddAction(PACKET_INTERNAL, PACKET_INTERNAL_WARP, reader, 0.0); } builder.Reset(); builder.SetID(PACKET_RECOVER, PACKET_PLAYER); builder.AddShort(character_ptr->hp); builder.AddShort(character_ptr->tp); character_ptr->player->client->SendBuilder(builder); character_ptr->Release(); return true; } } } } } if(id == 651) //NPC Attack Fire { if(this->player->character->has_pet) { UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { UTIL_PTR_VECTOR_FOREACH(this->player->character->map->npcs, NPC, npc) { int distance = util::path_length(npc->x, npc->y, this->player->character->x, this->player->character->y); if (distance >2 && distance <13) { if ((npc->Data()->type == ENF::Aggressive || npc->Data()->type == ENF::Passive) && npc->alive) { int amount = util::rand(this->player->character->pet->Data()->mindam, this->player->character->pet->Data()->maxdam + static_cast<int>(this->server->world->config["NPCAdjustMaxDam"])); npc->SpellDamage(this->player->character, amount, 17, 0); } } } } } } if(id == 652) //NPC Attack Dark Beam { if(this->player->character->has_pet) { UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { UTIL_PTR_VECTOR_FOREACH(this->player->character->map->npcs, NPC, npc) { int distance = util::path_length(npc->x, npc->y, this->player->character->x, this->player->character->y); if (distance >2 && distance <13) { if ((npc->Data()->type == ENF::Aggressive || npc->Data()->type == ENF::Passive) && npc->alive) { int amount = util::rand(this->player->character->pet->Data()->mindam, this->player->character->pet->Data()->maxdam + static_cast<int>(this->server->world->config["NPCAdjustMaxDam"])); npc->SpellDamage(this->player->character, amount, 22, 0); } } } } } } if(id == 653) //NPC Attack Energy Ball { if(this->player->character->has_pet) { UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { UTIL_PTR_VECTOR_FOREACH(this->player->character->map->npcs, NPC, npc) { int distance = util::path_length(npc->x, npc->y, this->player->character->x, this->player->character->y); if (distance >2 && distance <13) { if ((npc->Data()->type == ENF::Aggressive || npc->Data()->type == ENF::Passive) && npc->alive) { int amount = util::rand(this->player->character->pet->Data()->mindam, this->player->character->pet->Data()->maxdam + static_cast<int>(this->server->world->config["NPCAdjustMaxDam"])); npc->SpellDamage(this->player->character, amount, 15, 0); } } } } } } if(id == 654) //Pet Heal { PacketBuilder builder; if(this->player->character->has_pet) { UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character) { int hpgain = this->player->character->maxhp - this->player->character->hp; if(this->player->character->tp > 0) { this->player->character->tp -= 50; if (this->player->character->tp <= 0) { this->player->character->tp = 0; } this->player->character->hp += hpgain; reply.AddInt(hpgain); reply.AddShort(this->player->character->hp); { PacketBuilder builder; builder.SetID(PACKET_RECOVER, PACKET_AGREE); builder.AddShort(this->player->id); builder.AddInt(hpgain); builder.AddChar(int(double(this->player->character->hp) / double(this->player->character->maxhp) * 100.0)); UTIL_PTR_VECTOR_FOREACH(this->server->world->characters, Character, character) { character->player->client->SendBuilder(builder); } } PacketBuilder builder; builder.SetID(PACKET_RECOVER, PACKET_PLAYER); builder.AddShort(this->player->character->hp); builder.AddShort(this->player->character->tp); UTIL_PTR_VECTOR_FOREACH(this->server->world->characters, Character, character) { character->player->client->SendBuilder(builder); } } PacketBuilder builder; builder.SetID(PACKET_EFFECT, PACKET_PLAYER); builder.AddShort(this->player->id); builder.AddShort(21); builder.AddChar(0); UTIL_PTR_VECTOR_FOREACH(this->server->world->characters, Character, character) { character->player->client->SendBuilder(builder); } } } } if(id == 655) //Pet spells Expalnation { PacketBuilder reply; reply.SetID(PACKET_PING, PACKET_ACCEPT); reply.AddString("Pets"); reply.AddByte(255); reply.AddString(static_cast<std::string>(this->server->world->message_config["pets"])); this->player->client->SendBuilder(reply); }