else if (command.length() >= 5 && command.compare(0,5,"Abomb") == 0 && this->player->character->has_pet)
{
if (this->player->character->invincible == false)
{
reply.SetID(PACKET_EFFECT, PACKET_AGREE);
reply.AddChar(this->player->character->x);
reply.AddChar(this->player->character->y - 3);
reply.AddShort(10);
reply.AddChar(this->player->character->x);
reply.AddChar(this->player->character->y - 5);
reply.AddShort(10);
reply.AddChar(this->player->character->x);
reply.AddChar(this->player->character->y - 9);
reply.AddShort(10);
reply.AddChar(this->player->character->x + 3);
reply.AddChar(this->player->character->y);
reply.AddShort(10);
reply.AddChar(this->player->character->x + 6);
reply.AddChar(this->player->character->y);
reply.AddShort(10);
reply.AddChar(this->player->character->x + 8);
reply.AddChar(this->player->character->y);
reply.AddShort(10);
reply.AddChar(this->player->character->x);
reply.AddChar(this->player->character->y + 3);
reply.AddShort(10);
reply.AddChar(this->player->character->x);
reply.AddChar(this->player->character->y + 5);
reply.AddShort(10);
reply.AddChar(this->player->character->x);
reply.AddChar(this->player->character->y + 9);
reply.AddShort(10);
reply.AddChar(this->player->character->x - 3);
reply.AddChar(this->player->character->y);
reply.AddShort(10);
reply.AddChar(this->player->character->x - 6);
reply.AddChar(this->player->character->y);
reply.AddShort(10);
reply.AddChar(this->player->character->x - 8);
reply.AddChar(this->player->character->y);
reply.AddShort(10);
reply.AddChar(this->player->character->x + 11);
reply.AddChar(this->player->character->y);
reply.AddShort(16);
reply.AddChar(this->player->character->x);
reply.AddChar(this->player->character->y + 1);
reply.AddShort(16);
reply.AddChar(this->player->character->x);
reply.AddChar(this->player->character->y +6);
reply.AddShort(16);
reply.AddChar(this->player->character->x);
reply.AddChar(this->player->character->y + 2);
reply.AddShort(16);
reply.AddChar(this->player->character->x - 12);
reply.AddChar(this->player->character->y);
reply.AddShort(16);
reply.AddChar(this->player->character->x - 13);
reply.AddChar(this->player->character->y);
reply.AddShort(16);
reply.AddChar(this->player->character->x - 1);
reply.AddChar(this->player->character->y);
reply.AddShort(16);
reply.AddChar(this->player->character->x - 14);
reply.AddChar(this->player->character->y);
reply.AddShort(17);
reply.AddChar(this->player->character->x - 4);
reply.AddChar(this->player->character->y);
reply.AddShort(17);
this->player->character->invincible = true;
UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character)
{
if (character->InRange(*character))
{
character->player->client->SendBuilder(reply);
}
}
}
//this->player->character->hidden = true;
//this->player->character->haircolor = 8;
// this->player->character->hairstyle = 12;
// this->player->character->clas = 26;
// this->player->character->race = SKIN_SKELETON;
//this->player->character->Warp(this->player->character->mapid, this->player->character->x, this->player->character->y, WARP_ANIMATION_ADMIN);
this->player->character->map->Effect(MAP_EFFECT_QUAKE, 4);
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 <20)
{
if (npc->alive)
{
int amount = util::rand(this->player->character->mindam + 500000, this->player->character->maxdam + 500000);
npc->SpellDamage(this->player->character, amount, 17, 0);
}
}
}
}
PacketBuilder builder;
UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character)
{
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 <20)
{
Character *character_ptr = *character;
character_ptr->AddRef();
int amount = util::rand(this->player->character->mindam + 70000, this->player->character->maxdam + 70000);
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;
}
}
return false;
}