Pastebin

New pastes are no longer accepted · Stats

Latest Pastes

mes

character.cpp rev 189

std::string InboxSerialize(const PtrList<Character_Inbox> &list)
{
    std::string serialized;

	for (PtrList<Character_Inbox>::ConstIterator ac(list); ac; ++ac)
	{
		serialized.append(util::to_string(ac->id));
		serialized.append(",");
        serialized.append(ac->message);
		serialized.append(";");
	}

	return serialized;
}

PtrList<Character_Inbox> InboxUnserialize(std::string serialized)
{
	PtrList<Character_Inbox> list;
	std::size_t p = 0;
	std::size_t lastp = std::numeric_limits<std::size_t>::max();

	if (!serialized.empty() && *(serialized.end()-1) != ';')
	{
		serialized.push_back(';');
	}

	while ((p = serialized.find_first_of(';', p+1)) != std::string::npos)
	{
		std::string part = serialized.substr(lastp+1, p-lastp-1);
		std::size_t pp = 0;
		pp = part.find_first_of(',', 0);

		if (pp == std::string::npos)
		{
			continue;
		}

		Character_Inbox *newinbox = new Character_Inbox;
		newinbox->id = util::to_int(part.substr(0, pp));
		newinbox->message = part.substr(pp+1);

		list.push_back(newinbox);
		newinbox->Release();

		lastp = p;
	}

	return list;
}



void Character::Load_Message(short id)
{
   UTIL_PTR_LIST_FOREACH(this->inbox, Character_Inbox, in)
    {
     if(in->id == id)
      {
        PacketBuilder r(PACKET_PING, PACKET_ACCEPT);
        r.AddString("Message # " + util::to_string(id));
        r.AddByte(255);
        r.AddString(in->message);
        this->SB(r);
      }
    }
}

int Character::HasMessage(short id)
{
	UTIL_PTR_LIST_FOREACH(this->inbox, Character_Inbox, in)
	{
		if (in->id == id)
		{
            return in->id;
        }
    }
	return 0;
}

bool Character::AddMessage(short id, std::string message)
{

	if(this->HasMessage(id))
	{
	 return false;
    }

    if(message.length() > 50)
    {
        this->ShowHint("Your message was to big and resized to fit in his in box!");
        message.substr(0, 50);
    }

	Character_Inbox *newinbox = new Character_Inbox;
    newinbox->id = id;
    newinbox->message = message;
	this->inbox.push_back(newinbox);
	return true;
}

bool Character::DelMessage(short id)
{
	UTIL_PTR_LIST_FOREACH(this->inbox, Character_Inbox, it)
	{
		if (it->id == id)
		{
            this->inbox.erase(it);
			return true;
		}
	}
    return false;
}


character.hpp

/**
 * Serialize a list of a messages in to a text format that can be restored with InboxUnserialize
 */
std::string InboxSerialize(const PtrList<Character_Inbox> &list);

/**
 * Convert a string generated by inboxSerialze back to a list of messages
 */
PtrList<Character_Inbox> InboxUnserialize(std::string serialized);


/**
 * One inbox message a Character has
 */
struct Character_Inbox : public Shared
{
	short id;
	std::string message;

    //Character_Achievement() : id(0), name(""){}

	SCRIPT_REGISTER_REF_DF(Character_Inbox)

	SCRIPT_REGISTER_END()
};


PtrList<Character_Inbox> inbox;

int HasMessage(short id);
bool AddMessage(short id, std::string message);
void Load_Message(short id);
bool DelMessage(short id);


Talk.cpp 

else if(command.length() == 7 && command.compare(0,7,"message") == 0 && arguments.size() > 0)
{
 std::string name = arguments[0];
 std::string message = arguments[1];

 UTIL_PTR_VECTOR_FOREACH(this->server->world->characters, Character, character)
   {
     if(character->name == name)
     {
        std::transform(arguments[1].begin(),arguments[1].end(),arguments[1].begin(),static_cast<int(*)(int)>(std::tolower));
        for(int i = 2; i < static_cast<int>(arguments.size()); i++)
        {
          if(message == "")
          {
             message = arguments[i];
          }
          else
          {
          message += " " + arguments[i];
         }
        }
        int id1 = 0;
        UTIL_PTR_LIST_FOREACH(character->inbox, Character_Inbox, in)
	    {
	      /*for(int i = 0; i < in->id; ++i)
	      {
	          //Console::Out(util::to_string(in->id) + " INID");

	      }*/
	      id1 = (in->id + 1);
	    }
      character->AddMessage(id1, "From " + this->player->character->name + ": " + message);
     }
         if(this->server->world->CharacterExists(name))
         //this->server->world->db.Query("UPDATE `characters` SET `inbox` = '$', WHERE `name` = '$'", 1, message.c_str());
         this->server->world->db.Query("UPDATE `characters` SET `inbox` = '$' WHERE `name` = '$'", 1, message.c_str());
   }
}

else if(command.length() == 9 && command.compare(0,9,"checkmess") == 0 && arguments.size() > 0)
{
    int id1 = util::to_int(arguments[0]);

    UTIL_PTR_LIST_FOREACH(this->player->character->inbox, Character_Inbox, in)
    {

        this->player->character->ShowHint("Your have " + util::to_string(in->id) + " messages" );

        if(this->player->character->HasMessage(id1))
        {
         this->player->character->Load_Message(id1);
        }
        else
        {
            this->player->character->ShowHint(" The message specified does not exist");
        }
    }
}


else if(command.length() == 6 && command.compare(0,6,"delmes") == 0 && arguments.size() > 0)
{
    int id1 = util::to_int(arguments[0]);
    if(this->player->character->HasMessage(id1))
    {
       this->player->character->DelMessage(id1);
       this->player->character->ShowHint("Message # " + util::to_string(id1) + " has been erased!");
    }
    else
    {
        this->player->character->ShowHint(" The message specified does not exist");
    }
}