Pastebin

New pastes are no longer accepted · Stats

Latest Pastes

bool Map::AttackPKSpell

bool Map::AttackPKSpell(Character *from, int spellid, int targetid)
{
     ESF_Data *spell = this->world->esf->Get(spellid);

    PacketBuilder builder;

    UTIL_PTR_LIST_FOREACH(this->characters, Character, character)
    {
        if (character->mapid == this->id && !character->nowhere && targetid == character->player->id && from->player->id != character->player->id)
        {
            Character *character_ptr = *character;
            character_ptr->AddRef();

           if (from->clas == 9)
            {
                 int amount = util::rand(spell->mindam * 1.5, spell->maxdam * 1.5);
                //int amount = util::rand(from->mindam + 0, from->maxdam + 0);
                int limitamount = std::min(amount, int(character_ptr->hp));

                if (static_cast<int>(this->world->config["LimitDamage"]))
                {
                    amount = limitamount;
                }

                if (character_ptr->invincible == false)
                {
                    character_ptr->hp -= limitamount;

                    builder.SetID(PACKET_CLOTHES, PACKET_ADMIN);
                    builder.AddShort(from->player->id);
                    builder.AddShort(character_ptr->player->id);
                    builder.AddThree(amount);
                    builder.AddChar(from->direction);
                    builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0));
                    builder.AddChar(character_ptr->hp == 0);
                    builder.AddShort(spellid);

                    UTIL_PTR_LIST_FOREACH(this->characters, Character, checkchar)
                    {
                        if (character_ptr->InRange(*checkchar))
                        {
                            checkchar->player->client->SendBuilder(builder);
                        }
                    }
                }
                else
                {
                    builder.SetID(PACKET_CLOTHES, PACKET_ADMIN);
                    builder.AddShort(from->player->id);
                    builder.AddShort(character_ptr->player->id);
                    builder.AddThree(0);
                    builder.AddChar(from->direction);
                    builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0));
                    builder.AddChar(character_ptr->hp == 0);
                    builder.AddShort(spellid);

                    UTIL_PTR_LIST_FOREACH(this->characters, Character, checkchar)
                    {
                        if (character_ptr->InRange(*checkchar))
                        {
                            checkchar->player->client->SendBuilder(builder);
                        }
                    }
                }

                if (character_ptr->hp == 0)
                {
                 Quest *temp_quest = 0;
    State *state = 0;
    UTIL_PTR_LIST_FOREACH(from->quests, Character_Quest, quest)
        {
        temp_quest = this->world->GetQuest(quest->id);
        if (!temp_quest) continue;

        state = temp_quest->GetState(quest->state);
        if (!state) continue;

        UTIL_PTR_VECTOR_FOREACH(state->rules, Rule, rule)
        {
        if (rule->name.compare("killedplayers") == 0)
            {
            quest->killed++;
        if (quest->killed >= ((int)(*rule->args[0])))
            {
            quest->killed = 0;
            quest->state = rule->goto_state;
            from->PerformQuestActions(quest->id);
            }
            break;
            }
        }
    }

/*std::string msg(character->name + " got KnocKed tHE FuK ouT By ");
msg += from->name;
this->world->ServerMsg(msg);

int item = 1;
int amount = 2000;
UTIL_PTR_LIST_FOREACH(this->characters, Character, character)
            {
if (character->mapid == this->id && !character->nowhere && character->guild == from->guild)
			{
 Character *characterg = *character;
 characterg->AddRef();

    characterg->AddItem(item, amount);
    PacketBuilder builder(PACKET_ITEM, PACKET_GET);
    builder.AddShort(0); // UID
    builder.AddShort(item);
    builder.AddThree(amount);
    builder.AddChar(characterg->weight);
    builder.AddChar(characterg->maxweight);
    characterg->player->client->SendBuilder(builder);

 bool stats_updated = false;
characterg->exp += 1000;
stats_updated = true;
if (stats_updated)
    {
 bool level_up = false;
 while (characterg->level < static_cast<int>(this->world->config["MaxLevel"]) && characterg->exp >= this->world->exp_table[characterg->level+1])
        {
    level_up = true;
    ++from->level;
    characterg->statpoints += static_cast<int>(this->world->config["StatPerLevel"]);
    characterg->skillpoints += static_cast<int>(this->world->config["SkillPerLevel"]);
    characterg->CalculateStats();
        }

        PacketBuilder builder(PACKET_RECOVER, PACKET_REPLY);
        builder.AddInt(characterg->exp);
        builder.AddShort(characterg->karma);
        builder.AddChar(level_up ? characterg->level : 0);
        characterg->player->client->SendBuilder(builder);
       }
    }
  }*/
  std::string msg(character->name + " got KnocKed tHE FuK ouT By ");
msg += from->name;
this->world->ServerMsg(msg);

int item = 1;
int amount = 2000;
if (from->AddItem(item, amount))
            {
    PacketBuilder builder(PACKET_ITEM, PACKET_GET);
    builder.AddShort(0); // UID
    builder.AddShort(item);
    builder.AddThree(amount);
    builder.AddChar(from->weight);
    builder.AddChar(from->maxweight);
    from->player->client->SendBuilder(builder);
            }

bool stats_updated = false;
from->exp += 1000;
stats_updated = true;
if (stats_updated)
    {
 bool level_up = false;
 while (from->level < static_cast<int>(this->world->config["MaxLevel"]) && from->exp >= this->world->exp_table[from->level+1])
        {
    level_up = true;
    ++from->level;
    from->statpoints += static_cast<int>(this->world->config["StatPerLevel"]);
    from->skillpoints += static_cast<int>(this->world->config["SkillPerLevel"]);
    from->CalculateStats();
        }

    PacketBuilder builder(PACKET_RECOVER, PACKET_REPLY);
    builder.AddInt(from->exp);
    builder.AddShort(from->karma);
    builder.AddChar(level_up ? from->level : 0);
    from->player->client->SendBuilder(builder);
    }

                    character_ptr->hp = int(character_ptr->maxhp * static_cast<double>(this->world->config["DeathRecover"]) / 100.0);

                    if (this->world->config["Deadly"])
                    {
                        character_ptr->DropAll(from);
                    }
 character_ptr->PetTransfer();
                    character_ptr->map->Leave(character_ptr, WARP_ANIMATION_NONE, true);

                    character_ptr->nowhere = true;
                    character_ptr->map = this->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;
            }

            else if (from->clas != 9)
            {

            int amount = util::rand(spell->mindam, spell->maxdam);
               // int amount = util::rand(from->mindam, from->maxdam);
                int limitamount = std::min(amount, int(character_ptr->hp));

                if (static_cast<int>(this->world->config["LimitDamage"]))
                {
                    amount = limitamount;
                }

                if (character_ptr->invincible == false)
                {
                    character_ptr->hp -= limitamount;

                    builder.SetID(PACKET_CLOTHES, PACKET_ADMIN);
                    builder.AddShort(from->player->id);
                    builder.AddShort(character_ptr->player->id);
                    builder.AddThree(amount);
                    builder.AddChar(from->direction);
                    builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0));
                    builder.AddChar(character_ptr->hp == 0);
                    builder.AddShort(spellid);

                    UTIL_PTR_LIST_FOREACH(this->characters, Character, checkchar)
                    {
                        if (character_ptr->InRange(*checkchar))
                        {
                            checkchar->player->client->SendBuilder(builder);
                        }
                    }
                }
                else
                {
                    builder.SetID(PACKET_CLOTHES, PACKET_ADMIN);
                    builder.AddShort(from->player->id);
                    builder.AddShort(character_ptr->player->id);
                    builder.AddThree(0);
                    builder.AddChar(from->direction);
                    builder.AddChar(int(double(character_ptr->hp) / double(character_ptr->maxhp) * 100.0));
                    builder.AddChar(character_ptr->hp == 0);
                    builder.AddShort(spellid);

                    UTIL_PTR_LIST_FOREACH(this->characters, Character, checkchar)
                    {
                        if (character_ptr->InRange(*checkchar))
                        {
                            checkchar->player->client->SendBuilder(builder);
                        }
                    }
                }

                if (character_ptr->hp == 0)
                {

                    Quest *temp_quest = 0;
    State *state = 0;
    UTIL_PTR_LIST_FOREACH(from->quests, Character_Quest, quest)
        {
        temp_quest = this->world->GetQuest(quest->id);
        if (!temp_quest) continue;

        state = temp_quest->GetState(quest->state);
        if (!state) continue;

        UTIL_PTR_VECTOR_FOREACH(state->rules, Rule, rule)
        {
        if (rule->name.compare("killedplayers") == 0)
            {
            quest->killed++;
        if (quest->killed >= ((int)(*rule->args[0])))
            {
            quest->killed = 0;
            quest->state = rule->goto_state;
            from->PerformQuestActions(quest->id);
            }
            break;
            }
        }
    }

/*std::string msg(character->name + " got KnocKed tHE FuK ouT By ");
msg += from->name;
this->world->ServerMsg(msg);

int item = 1;
int amount = 2000;
UTIL_PTR_LIST_FOREACH(this->characters, Character, character)
            {
if (character->mapid == this->id && !character->nowhere && character->guild == from->guild)
			{
 Character *characterg = *character;
 characterg->AddRef();

    characterg->AddItem(item, amount);
    PacketBuilder builder(PACKET_ITEM, PACKET_GET);
    builder.AddShort(0); // UID
    builder.AddShort(item);
    builder.AddThree(amount);
    builder.AddChar(characterg->weight);
    builder.AddChar(characterg->maxweight);
    characterg->player->client->SendBuilder(builder);

 bool stats_updated = false;
characterg->exp += 1000;
stats_updated = true;
if (stats_updated)
    {
 bool level_up = false;
 while (characterg->level < static_cast<int>(this->world->config["MaxLevel"]) && characterg->exp >= this->world->exp_table[characterg->level+1])
        {
    level_up = true;
    ++from->level;
    characterg->statpoints += static_cast<int>(this->world->config["StatPerLevel"]);
    characterg->skillpoints += static_cast<int>(this->world->config["SkillPerLevel"]);
    characterg->CalculateStats();
        }

        PacketBuilder builder(PACKET_RECOVER, PACKET_REPLY);
        builder.AddInt(characterg->exp);
        builder.AddShort(characterg->karma);
        builder.AddChar(level_up ? characterg->level : 0);
        characterg->player->client->SendBuilder(builder);
       }
    }
  }*/
std::string msg(character->name + " got KnocKed tHE FuK ouT By ");
msg += from->name;
this->world->ServerMsg(msg);

int item = 1;
int amount = 2000;
if (from->AddItem(item, amount))
            {
    PacketBuilder builder(PACKET_ITEM, PACKET_GET);
    builder.AddShort(0); // UID
    builder.AddShort(item);
    builder.AddThree(amount);
    builder.AddChar(from->weight);
    builder.AddChar(from->maxweight);
    from->player->client->SendBuilder(builder);
            }

bool stats_updated = false;
from->exp += 1000;
stats_updated = true;
if (stats_updated)
    {
 bool level_up = false;
 while (from->level < static_cast<int>(this->world->config["MaxLevel"]) && from->exp >= this->world->exp_table[from->level+1])
        {
    level_up = true;
    ++from->level;
    from->statpoints += static_cast<int>(this->world->config["StatPerLevel"]);
    from->skillpoints += static_cast<int>(this->world->config["SkillPerLevel"]);
    from->CalculateStats();
        }

    PacketBuilder builder(PACKET_RECOVER, PACKET_REPLY);
    builder.AddInt(from->exp);
    builder.AddShort(from->karma);
    builder.AddChar(level_up ? from->level : 0);
    from->player->client->SendBuilder(builder);
    }

                    character_ptr->hp = int(character_ptr->maxhp * static_cast<double>(this->world->config["DeathRecover"]) / 100.0);

                    if (this->world->config["Deadly"])
                    {
                        character_ptr->DropAll(from);
                    }
 character_ptr->PetTransfer();
                    character_ptr->map->Leave(character_ptr, WARP_ANIMATION_NONE, true);

                    character_ptr->nowhere = true;
                    character_ptr->map = this->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;

}