示例#1
0
bool ChatHandler::HandleGPSCommand(uint8* args)
{
    wowWData data;
    Object *obj;

    const uint32 *guid = m_pClient->getCurrentChar()->getSelectionPtr();
    if (guid[0] != 0)
    {
        if(!(obj = (Object*)WorldServer::getSingleton().GetCreature(guid[0])) && !(obj = (Object*)WorldServer::getSingleton().GetCharacter(guid[0])))
 	    {
            FillMessageData(&data, 0x09, m_pClient, (uint8*)"You should select a character or a creature.");
            m_pClient->SendMsg( &data );
            return true;
 	    }
    }
    else
        obj = (Object*)m_pClient->getCurrentChar();

	uint8 buf[256];
    sprintf((char*)buf, "X: %f Y: %f Z %f Orientation: %f",
	obj->getPositionX(), obj->getPositionY(), obj->getPositionZ(),
	obj->getOrientation());
    FillMessageData(&data, 0x09, m_pClient, buf);
    m_pClient->SendMsg( &data );

	return true;
}
示例#2
0
//UINT32
void ChatHandler::Message(Character * pChar, char * nom, const uint32 Value)
{
	wowWData data;
	uint8 buf[256];

	if(strcmp(pChar->getName(),m_pClient->getCurrentChar()->getName())!=0)
	{
		// send message to user
		sprintf((char*)buf,"You change the %s to %i of %s.", nom, Value, pChar->getName());
		FillMessageData(&data, 0x09, m_pClient, buf);
		m_pClient->SendMsg( &data );

		// send message to player
		sprintf((char*)buf,"%s changed your %s to %i.", m_pClient->getCurrentChar()->getName(), nom, Value);
		FillMessageData(&data, 0x09, pChar->pClient, buf);
		pChar->pClient->SendMsg( &data );
	}
	else
	{
		// send message to user
		sprintf((char*)buf,"You change your %s to %i.", nom, Value, pChar->getName());
		FillMessageData(&data, 0x09, m_pClient, buf);
		m_pClient->SendMsg( &data );
	}
}
示例#3
0
void ChatHandler::Message(Character * pChar, char * nom)
{
	wowWData data;
	uint8 buf[256];

	if(strcmp(pChar->getName(),m_pClient->getCurrentChar()->getName())!=0)
	{
		// send message to user
		sprintf((char*)buf,"You %s %s.", nom, pChar->getName());
		FillMessageData(&data, 0x09, m_pClient, buf);
		m_pClient->SendMsg( &data );

		// send message to player
		sprintf((char*)buf,"%s %s you.", m_pClient->getCurrentChar()->getName(), nom);
		FillMessageData(&data, 0x09, pChar->pClient, buf);
		pChar->pClient->SendMsg( &data );
	}
	else
	{
		// send message to user
		sprintf((char*)buf,"You %s to you.", nom);
		FillMessageData(&data, 0x09, m_pClient, buf);
		m_pClient->SendMsg( &data );
	}
}
示例#4
0
bool ChatHandler::ExecuteCommandInTable(ChatCommand *table, uint8* text)
{
    char *cmd = (char*)text;
	uint32 AcctLvl = m_pClient->getAccountLvl();

    while (*text != ' ' && *text != '\0') text++; // skip command
    if(*text != '\0')
    {
        *text = '\0';
        text++;
    }

    while (*text == ' ') text++; // skip whitespace

    if(*cmd == '\0')
        return false;

    for(uint32 i = 0; table[i].Name != NULL; i++)
    {
        if(!hasStringAbbr(table[i].Name, cmd))
            continue;

        if(AcctLvl < table[i].SecurityLevel)
            continue;

		if(table[i].ChildCommands != NULL)
        {
            if(!ExecuteCommandInTable(table[i].ChildCommands, text))
            {
                if(table[i].Help != "")
                    SendMultilineMessage(table[i].Help.c_str());
                else
                {
                    wowWData data;
                    FillMessageData(&data, 0x09, m_pClient, (uint8*)"There is no such subcommand.");
                    m_pClient->SendMsg(&data);
                }
            }
            return true;
        }

		if(!(this->*(table[i].Handler))(text))
        {
            if(table[i].Help != "")
                SendMultilineMessage(table[i].Help.c_str());
            else
            {
                wowWData data;
                FillMessageData(&data, 0x09, m_pClient, (uint8*)"Incorrect syntax.");
                m_pClient->SendMsg(&data);
            }
        }
        return true;
    }
    return false;
}
示例#5
0
void ChatHandler::ChangeSelectedNPC(const uint16 &index, const uint32 Value, const uint32 max, const uint32 min)
{
	wowWData data;

	if(!TestValue(Value, max, min)) return;

	Unit * pUnit = getSelectedNPC();
	if(pUnit!=NULL)
	{
		pUnit->setUpdateValue(index , Value);
				
		DatabaseInterface *dbi = Database::getSingleton().createDatabaseInterface( );
		/*
		sprintf((char*)buf, "DELETE FROM creatures WHERE id=%u", pUnit->getGUID());
		dbi->doQuery((char*)buf);
		dbi->saveCreature(pUnit);
		*/
		dbi->updateCreature(pUnit);
		Database::getSingleton( ).removeDatabaseInterface(dbi);
		pUnit->UpdateObject();

		FillMessageData(&data, 0x09, m_pClient,(uint8*)"NPC updated.");
		m_pClient->SendMsg( &data );
	}
	return;
}
示例#6
0
void ChatHandler::MovePlayer(GameClient *pClient, float x, float y, float z)
{
    wowWData data;

    //Output new position to the console
    uint8 txtBuffer[512];
    sprintf((char*)txtBuffer,"WORLD: Moved player to (%f, %f, %f)",x,y,z );
    Log::getSingleton( ).outString( (char*)txtBuffer );

    sprintf((char*)txtBuffer,"You have been moved to (%f, %f, %f)",x,y,z );
    FillMessageData(&data, 0x09, pClient, txtBuffer);
    pClient->SendMsg( &data );

    ////////////////////////////////////////
    //Set the new position of the character
    Character *chr = pClient->getCurrentChar();

    //Send new position to client via MSG_MOVE_TELEPORT_ACK
    chr->TeleportAck(&data, x,y,z);
    pClient->SendMsg(&data);

    //////////////////////////////////
    //Now send new position of this player to all clients using MSG_MOVE_HEARTBEAT
    chr->BuildHeartBeat(&data);
    world.SendGlobalMessage(&data, pClient);
}
示例#7
0
bool ChatHandler::HandleSaveAllCommand(uint8* args)
{
    wowWData data;
	uint8 buf[256];
	sprintf((char*)buf,"Characters saved: %i/%i\n", WorldServer::getSingleton().Save(m_pClient->getCharacterName()),WorldServer::getSingleton().GetClientsConnected());
	FillMessageData(&data, 0x09, m_pClient, buf);
	m_pClient->SendMsg( &data );

	return true;
}
示例#8
0
//FLOAT
int32 ChatHandler::TestValue(const uint32 Value, const uint32 max, const uint32 min)
{
	if(Value<min || Value>max)
	{
		wowWData data;
		FillMessageData(&data, 0x09, m_pClient,(uint8*)"Invalid Value.");
		m_pClient->SendMsg( &data );
		return 0;
	}
	return 1;
}
示例#9
0
void ChatHandler::SendMultilineMessage(const char *str)
{
    char buf[256];
    wowWData data;

    const char* line = str;
    const char* pos = line;
    while((pos = strchr(line, '\n')) != NULL)
    {
        strncpy(buf, line, pos-line);
        buf[pos-line]=0;

        FillMessageData(&data, 0x09, m_pClient, (uint8*)buf);
        m_pClient->SendMsg(&data);

        line = pos+1;
    }

    FillMessageData(&data, 0x09, m_pClient, (uint8*)line);
    m_pClient->SendMsg(&data);
}
示例#10
0
//START OF LINA COMMAND BY PTR FONCTION PATCH 1.3
Character * ChatHandler::getSelectedChar()
{
	const uint32 *guid;
	wowWData data;
	Character *chr=NULL;
				
	guid = m_pClient->getCurrentChar()->getSelectionPtr();
	if (guid[0] != 0)
	{
		if(guid[1]==0) chr= WorldServer::getSingleton().GetCharacter(guid[0]);
		else
		{			
			FillMessageData(&data, 0x09, m_pClient,(uint8*) "Please select a User.");
			m_pClient->SendMsg( &data );
		}
	}
	else
	{
		chr=m_pClient->getCurrentChar();
		FillMessageData(&data, 0x09, m_pClient,(uint8*) "AutoSelection.");
		m_pClient->SendMsg( &data );
	}
	return chr;
}
示例#11
0
Unit * ChatHandler::getSelectedNPC()
{
	const uint32 *guid;
				
	guid = m_pClient->getCurrentChar()->getSelectionPtr();
	if (guid[0] != 0)
	{
		if(guid[1]==0xF0001000) return WorldServer::getSingleton().GetCreature(guid[0]);
	}

	wowWData data;
	FillMessageData(&data, 0x09, m_pClient,(uint8*) "Please select a NPC");
	m_pClient->SendMsg( &data );

	return NULL;
}
示例#12
0
//START OF LINA COMMAND BY NAME FONCTION PATCH
Character * ChatHandler::getCurrentCharByName(uint8 * pName)
{
	WorldServer::ClientSet::iterator itr;
	for (itr = world.mClients.begin(); itr != world.mClients.end(); itr++)
	{
		if( strcmp(((GameClient*)(*itr))->getCharacterName(), (char*)pName) == 0 )
		{
			return ((GameClient*)(*itr))->getCurrentChar();
		}
	}
	wowWData data;
	uint8 buf[256];
	sprintf((char*)buf,"Character (%s) does not exist or is not logged in.", (char*)pName);
	FillMessageData(&data, 0x09, m_pClient, buf);
	m_pClient->SendMsg( &data );
	return NULL;
}
示例#13
0
bool ChatHandler::HandleMonsterYellCommand(const char* args, WorldSession *m_session)
{
    Unit* crt = getSelectedUnit(m_session, false);
    if(!crt)
        return true;

    if(crt->IsPlayer())
    {
        WorldPacket * data = FillMessageData(CHAT_MSG_YELL, LANG_UNIVERSAL, args, crt->GetGUID(), 0);
        crt->SendMessageToSet(data, true);
        delete data;
    }
    else
        crt->SendChatMessage(CHAT_MSG_MONSTER_YELL, LANG_UNIVERSAL, args);
    sWorld.LogGM(m_session, "Used npc yell command on %s %s", crt->IsPlayer() ? "Player" : "Creature", crt->GetName());
    return true;
}
示例#14
0
int ChatHandler::ParseCommands(uint8* text, uint16 text_length)
{
    assert(text);
//    assert(*text);

    if(text[0] != '!' && text[0] != '.') // let's not confuse users
        return 0;
    text++;

    if(!ExecuteCommandInTable(LoadHelp(false), text))
    {
        wowWData data;
        FillMessageData(&data, 0x09, m_pClient, (uint8*)"There is no such command.");
        m_pClient->SendMsg(&data);
    }

    return 1;
}
示例#15
0
bool ChatHandler::HandleModifyMountCommand(uint8* args)
{
    wowWData data;

    if(!*args)
        return false;

    uint32 mId = 1147;
	float speed = (float)30;
    uint32 num = 0;

    num = atoi((char*)args);
	switch(num)
    {
	case 1:
		mId=1147;	//GRYPHON
		break;
	case 2: 
		mId=479;	//HYPOGRYPH
		break;
	case 3:
		mId=235;	//EVIL HORSE
		break;
	case 4:
		mId=236;	//WHITE HORSE
		break;
	case 5:
		mId=237;	//PALOMINO HORSE
		break;
	case 6:
		mId=238;	//PINTO HORSE
		break;
	case 7:
		mId=239;	//BLACK HORSE
		break;
	case 8:
		mId=908;	//CHESNUT HORSE
		break;
	case 9:
		mId=1531;	//ZEBRA
		break;
	case 10: 
		mId=2346;	//NIGHTMARE HORSE
		break;
	case 11:
		mId=5050;	//UNDEAD STEED
		break;
	case 12:
		mId=2784;	//BLACK RAMS
		break;
	case 13:
		mId=2787;	//BLUE RAMS
		break;
	case 14:
		mId=2785;	//BROWN RAMS
		break;
	case 15:
		mId=2736;	//GREY RAMS
		break;
	case 16:
		mId=2786;	//WHITE RAMS
		break;
	case 17:
		mId=180;	//ORANGE RAPTOR
		break;
	case 18:
		mId=322;	//DARK GREEN RAPTOR
		break;
	case 19:
		mId=675;	//BLUE RAPTOR
		break;
	case 20:
		mId=787;	//YELLOW RAPTOR
		break;
	case 21:
		mId=960;	//PURPLE RAPTOR
		break;
	case 22:
		mId=1960;	//RED RAPTOR
		break;
	case 23:
		mId=1337;	//DARK GREY RAPTOR
		break;
	case 24:
		mId=1041;	//BROWN STRIDER
		break;
	case 25:
		mId=1220;	//GREY STRIDER
		break;
	case 26:
		mId=1221;	//IVORY STRIDER
		break;
	case 27:		
		mId=1961;	//PING STRIDER
		break;
	case 28:
		mId=1281;	//PURPLE STRIDER
		break;
	case 29:
		mId=1040;	//TEAL STRIDER
		break;
	case 30:
		mId=321;	//BLACK TIGER
		break;
	case 31:
		mId=1056;	//BROWN TIGER
		break;
	case 32:
		mId=3029;	//DARK TIGER
		break;
	case 33:
		mId=320;	//RED TIGER
		break;
	case 34:
		mId=748;	//SNOW TIGER
		break;
	case 35:
		mId=616;	//WHITE TIGER
		break;
	case 36:
		mId=632;	//YELLOW TIGER
		break;
	case 37:
		mId=2187;	//STRIPED UNICORN
		break;
	case 38:
		mId=2185;	//EVIL UNICORN
		break;
	case 39:
		mId=2186;	//IVORY UNICORN
		break;
	case 40:
		mId=2189;	//BLAC STRIPES UNICORN
		break;
	case 41:
		mId=207;	//DARK BLACK WOLF
		break;
	case 42:
		mId=246;	//REDDISH BROWN WOLF
		break;
	case 43:
		mId=247;	//BROWN WOLF
		break;
	case 44:
		mId=720;	//LIGHT BLUE WOLF
		break;
	case 45:
		mId=2320;	//GREY WOLF
		break;
	case 46:
		mId=2327;	//DARK GREY WOLF
		break;
	case 47:
		mId=2328;	//DARK BROWN WOLF
		break;
	case 48:
		mId=295;	//WYVERN
		break;
	case 49:
		mId=6544;	//GRAY ROBOT STRIDER
		break;
	case 50:
		mId=6569;	//BROWN ROBOT STRIDER
		break;
	case 51:
		mId=6369;	//DARK BROWN DRAGON
		break;
	case 52:
		mId=6370;	//LIGHT BROWN DRAGON
		break;
	case 53:
		mId=6371;	//CHAMPAGNE DRAGON
		break;
	case 54:
		mId=6372;	//SNOW DRAGON
		break;
	case 55:
		mId=6373;	//BLUE DRAGON
		break;
	case 56:
		mId=6374;	//DARK BROWN DRAGON 2
		break;
	case 57:
		mId=6375;	//GREEN DRAGON
		break;
	case 58:
		mId=6376;	//CHAMPAGNE DRAGON 2
		break;
	case 59:
		mId=6377;	//DARK BROWN DRAGON 3
		break;
	case 60:
		mId=6378;	//DARK BROWN DRAGON 4
		break;
	case 61:
		mId=6379;	//LIGHT GREEN DRAGON
		break;
	case 62:
		mId=5145;	//BLOOD DRAGON
		break;
	case 63:	
		mId=1340;	//STRIDER
		break;
	case 64:	
		mId=1566;	//BAT
		break;
	default:		//NO ERROR OF MOUNT ;)
		FillMessageData(&data, 0x09, m_pClient, (uint8*)"There is no such mount.");
		m_pClient->SendMsg( &data );
        return true;
	}

	Character *pChar=getSelectedChar();
	if(pChar)
	{
		pChar->setUpdateValue( UNIT_FIELD_FLAGS , 0x001000 );
		ChangeSelectedChar(UNIT_FIELD_MOUNTDISPLAYID, mId, 8192, 1, "MOUNT");
		pChar->setUpdateValue( UNIT_FIELD_FLAGS , 0x003000 );

		ChangeSelectedCharMsg(SMSG_FORCE_SPEED_CHANGE, (float)30, 30, 1, "WALK SPEED");
		ChangeSelectedCharMsg(SMSG_FORCE_SWIM_SPEED_CHANGE, (float)30, 30, 1, "WATER SPEED");
	}

    return true;
}
示例#16
0
void ChatHandler::HandleMsg( wowWData & recv_data, GameClient *pClient )
{
    wowWData data;
    char f[256];
    sprintf(f, "WORLD: Chat Opcode 0x%.4X", recv_data.opcode);
    Log::getSingleton( ).outString( f );
    switch (recv_data.opcode)
    {
    case CMSG_MESSAGECHAT:
        {
            uint16 text_length = strlen((char*)recv_data.data+8)+1;

            m_pClient = pClient;
            if (ParseCommands(recv_data.data+8, text_length) > 0)
                return;

            uint8 text_mode = recv_data.data[0];
            FillMessageData( &data, text_mode, pClient, recv_data.data+8 );

            if (text_mode != CHAT_MSG_WHISPER) { // whisper message send in FillMessageData
                pClient->SendMsg( &data );
                world.SendGlobalMessage(&data, pClient);
            }
        }break;
    case CMSG_TEXT_EMOTE:
        {
            uint32 text_emote, guid1, guid2;
            recv_data.readData(text_emote);
            recv_data >> guid1 >> guid2;

            char *nam=0; uint16 namlen=0;
            WorldServer::CharacterMap::iterator chariter;
            WorldServer::CreatureMap::iterator npciter;
            if( ( npciter = world.mCreatures.find( guid1 ) ) != world.mCreatures.end( ) ) {
                nam = npciter->second->getCreatureName( );
                namlen = strlen( nam ) + 1;
            } else if( ( chariter = world.mCharacters.find( guid1 ) ) != world.mCharacters.end( ) ) {
                nam = chariter->second->getName( );
                namlen = strlen( nam ) + 1;
            }

            data.clear();
            data.Initialise(12, SMSG_EMOTE);

            uint8 emote_anim = world.mEmotes[uint8(text_emote&0xff)];

            data << (uint8)emote_anim;
            data << (uint8)0x00;
            data << (uint8)0x00;
            data << (uint8)0x00;

            uint32 guid = pClient->getCurrentChar()->getGUID();
            data << (uint32)guid << (uint8)0x00 << (uint8)0x00 << (uint8)0x00 << (uint8)0x00;
            world.SendGlobalMessage(&data);

            data.clear();
            data.setLength(12 + namlen);
            data.opcode = SMSG_TEXT_EMOTE;


            memcpy(data.data, &guid, 4);
            data.data[4] = 0x00;
            data.data[5] = 0x00;
            data.data[6] = 0x00;
            data.data[7] = 0x00;

            memcpy(data.data+8,recv_data.data,4);

            if( namlen > 0 )
                memcpy( data.data + 12, nam, namlen );

            pClient->SendMsg( &data );
            world.SendGlobalMessage(&data, pClient);
        } break;
    }
}