Pastebin

New pastes are no longer accepted · Stats

Latest Pastes

casino/harvs/mine/fish condensed fix

/* $Id: Attack.cpp 182 2010-01-08 10:35:27Z sausage $
 * EOSERV is released under the zlib license.
 * See LICENSE.txt for more info.
 */

#include "handlers.h"
#include "map.hpp"
#include <fstream>
#include <string>

#include <iostream>

using namespace std;

CLIENT_F_FUNC(Attack)
{
	PacketBuilder reply;
    PacketBuilder builder;
	switch (action)
	{
		case PACKET_USE: // Player attacking
		{
			if (this->state < EOClient::Playing) return false;
			CLIENT_QUEUE_ACTION(0.58)

			Direction direction = static_cast<Direction>(reader.GetChar());
			/*int timestamp = */reader.GetThree();

			if (this->player->character->sitting != SIT_STAND)
			{
				return true;
			}

			if (direction != this->player->character->direction)
			{
				if (direction >= 0 && direction <= 3)
				{
					this->player->character->map->Face(this->player->character, direction);
					CLIENT_FORCE_QUEUE_ACTION(0.67)
				}
				else
				{
					return false;
				}
			}

          if (this->player->character)
	      {
           int target_x = this->player->character->x;
           int target_y = this->player->character->y;

	       switch (this->player->character->direction)
	        {
		     case DIRECTION_UP:
			 target_y -= 1;
			 break;

		    case DIRECTION_RIGHT:
			target_x += 1;
			break;

		    case DIRECTION_DOWN:
			target_y += 1;
			break;

		    case DIRECTION_LEFT:
			target_x -= 1;
			break;
	    }
        if (this->player->character->map->GetSpec(target_x, target_y) == Map_Tile::Unknown2 || (this->player->character->x == target_x && this->player->character->y == target_y))
         {

          if (this->player->character->HasItem(1) < 1000)
            {
            this->player->character->map->Msg(this->player->character, " You dont have enough gold to play ", true);
            break;
            }

        if (this->player->character->HasItem(1) >= 1000)
         {
           short id = 1;
           int amount = 1000;

            if(this->player->character->DelItem(id, amount));
             {
              builder.SetID(PACKET_ITEM, PACKET_KICK);
              builder.AddShort(id);
              builder.AddInt(this->player->character->HasItem(id));
              builder.AddChar(this->player->character->weight);
              builder.AddChar(this->player->character->maxweight);
              this->player->character->player->client->SendBuilder(builder);

          int gold = 1;
          int amount1 = util::rand(1, 35000);
          int random = util::rand(0, 100);
          if (random < 10)
          {
          this->player->character->map->Msg(this->player->character," You won " + util::to_string(amount1), true);
           this->player->character->AddItem(gold, amount1);

            reply.SetID(PACKET_ITEM, PACKET_GET);
            reply.AddShort(0); // UID
            reply.AddShort(gold);
            reply.AddThree(amount1);
            reply.AddChar(this->player->character->weight);
            reply.AddChar(this->player->character->maxweight);
            this->player->character->player->client->SendBuilder(reply);
            break;
            }
            else if (random < 100 && random >= 10)
                {
                this->player->character->map->Msg(this->player->character," To bad, you lost! " + util::to_string(amount), true);
                break;
                }
            }
        }
    }
               this->player->character->Attack(direction);
               if(this->player->character->paperdoll[Character::Weapon] == 271)
                {
                                           //HARVESTING WEP 271  ITEM TO GAIN 667
				if (this->player->character->map->GetSpec(target_x, target_y) == Map_Tile::Unknown1 || (this->player->character->x == target_x && this->player->character->y == target_y))
				{
                  int id = 667;
                  int amount1 = util::rand(1, 4);
                  int random = util::rand(0, 150);
                if (random < 15)
                 {
                    this->player->character->AddItem(id, amount1);
                    reply.SetID(PACKET_ITEM, PACKET_GET);
                    reply.AddShort(0); // UID
                    reply.AddShort(id);
                    reply.AddThree(amount1);
                    reply.AddChar(this->player->character->weight);
                    reply.AddChar(this->player->character->maxweight);
                    this->player->character->player->client->SendBuilder(reply);
                    break;
                }
                else if (random < 150 && random >= 15)
                   {
                    break;
                   }
                 }
               }
                // MINEING WEP 225  ID YO GAIN 668
               this->player->character->Attack(direction);
               if(this->player->character->paperdoll[Character::Weapon] == 225)
                {
				if (this->player->character->map->GetSpec(target_x, target_y) == Map_Tile::Unknown5 || (this->player->character->x == target_x && this->player->character->y == target_y))
				{
                    int id = 668;
                    int amount1 = util::rand(1, 4);
                    int random = util::rand(0, 150);
                    if (random < 15)
                        {
                        this->player->character->AddItem(id, amount1);
                        reply.SetID(PACKET_ITEM, PACKET_GET);
                        reply.AddShort(0); // UID
                        reply.AddShort(id);
                        reply.AddThree(amount1);
                        reply.AddChar(this->player->character->weight);
                        reply.AddChar(this->player->character->maxweight);
                        this->player->character->player->client->SendBuilder(reply);
                        break;
                        }
                        else if (random < 150 && random >= 15)
                            {
                            break;
                            }
                        }
                    }
                      //WOOD CUTTING WEP 31 ID TO GAIN 669
                    this->player->character->Attack(direction);
                    if(this->player->character->paperdoll[Character::Weapon] == 31)
                     {
				    if (this->player->character->map->GetSpec(target_x, target_y) == Map_Tile::Unknown4 || (this->player->character->x == target_x && this->player->character->y == target_y))
				      {

                        int id = 669;
                        int amount1 = util::rand(1, 4);
                        int random = util::rand(0, 150);
                        if (random < 15)
                            {
                            this->player->character->AddItem(id, amount1);
                            reply.SetID(PACKET_ITEM, PACKET_GET);
                            reply.AddShort(0); // UID
                            reply.AddShort(id);
                            reply.AddThree(amount1);
                            reply.AddChar(this->player->character->weight);
                            reply.AddChar(this->player->character->maxweight);
                            this->player->character->player->client->SendBuilder(reply);
                            break;
                            }
                            else if (random < 150 && random >= 15)
                                {
                                 break;
                                }

                            }
                      }
                //
                 this->player->character->Attack(direction);
                 if(this->player->character->paperdoll[Character::Weapon] == 520)
                {
				if (this->player->character->map->GetSpec(target_x, target_y) == Map_Tile::Water || (this->player->character->x == target_x && this->player->character->y == target_y))
				{
                int id = 475;
                int amount1 = util::rand(1, 4);
                int random = util::rand(0, 150);
                if (random < 15)
                 {
                    this->player->character->AddItem(id, amount1);
                    reply.SetID(PACKET_ITEM, PACKET_GET);
                    reply.AddShort(0); // UID
                    reply.AddShort(id);
                    reply.AddThree(amount1);
                    reply.AddChar(this->player->character->weight);
                    reply.AddChar(this->player->character->maxweight);
                    this->player->character->player->client->SendBuilder(reply);
                    break;
                 }
                else if (random < 150 && random >= 15)
                    {
                        break;
                    }
                }
            }

			    this->player->character->Attack(direction);

                UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character)
                {
                    if (*character != this->player->character && this->player->character->InRange(*character))
                    {
                        character->player->client->SendBuilder(reply);
                    }
                }

                CLIENT_SEND(reply);
			}
		}
		break;

		default:
			return false;
	}

	return true;
}