示例#1
0
//-----------------------------------------------------------------------------------
// Packet parser from of map-server
//   You will found here only packet analyser
//   Packet length check is done before (inter.c) a,d inter.c includes RFIFOSKIP too.
//   Result is: 0 (invalid packet), 1�(right packet)
//-----------------------------------------------------------------------------------
int inter_party_parse_frommap(int fd) {
	switch(RFIFOW(fd,0)) {
	case 0x3020:
		mapif_parse_CreateParty(fd, RFIFOL(fd,2), RFIFOP(fd,6), RFIFOP(fd,30), RFIFOP(fd,54), RFIFOW(fd,70), RFIFOB(fd,72), RFIFOB(fd,73));
		return 1;
	case 0x3021: // 0x3021 <party_id>.L - ask for party
		mapif_parse_PartyInfo(fd, RFIFOL(fd,2));
		return 1;
	case 0x3022:
		mapif_parse_PartyAddMember(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOP(fd,10), RFIFOP(fd,34), RFIFOW(fd,50));
		return 1;
	case 0x3023:
		mapif_parse_PartyChangeOption(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOW(fd,10), RFIFOW(fd,12));
		return 1;
	case 0x3024:
		mapif_parse_PartyLeave(fd, RFIFOL(fd,2), RFIFOL(fd,6));
		return 1;
	case 0x3025:
		mapif_parse_PartyChangeMap(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOP(fd,10), RFIFOB(fd,26), RFIFOW(fd,27));
		return 1;
	case 0x3026:
		mapif_parse_BreakParty(fd, RFIFOL(fd,2));
		return 1;
	case 0x3027:
		mapif_parse_PartyMessage(fd, RFIFOL(fd,4), RFIFOL(fd,8), RFIFOP(fd,12), RFIFOW(fd,2)-12);
		return 1;
	case 0x3028:
		mapif_parse_PartyCheck(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOP(fd,10));
		return 1;
	default:
		return 0;
	}

	return 0;
}
示例#2
0
// map server からの通信
// ・1パケットのみ解析すること
// ・パケット長データはinter.cにセットしておくこと
// ・パケット長チェックや、RFIFOSKIPは呼び出し元で行われるので行ってはならない
// ・エラーなら0(false)、そうでないなら1(true)をかえさなければならない
int inter_party_parse_frommap (int fd)
{
	RFIFOHEAD (fd);

	switch (RFIFOW (fd, 0))
	{
		case 0x3020: mapif_parse_CreateParty (fd, (char *) RFIFOP (fd, 4), RFIFOB (fd, 28), RFIFOB (fd, 29), (struct party_member *) RFIFOP (fd, 30)); break;

		case 0x3021: mapif_parse_PartyInfo (fd, RFIFOL (fd, 2), RFIFOL (fd, 6)); break;

		case 0x3022: mapif_parse_PartyAddMember (fd, RFIFOL (fd, 4), (struct party_member *) RFIFOP (fd, 8)); break;

		case 0x3023: mapif_parse_PartyChangeOption (fd, RFIFOL (fd, 2), RFIFOL (fd, 6), RFIFOW (fd, 10), RFIFOW (fd, 12)); break;

		case 0x3024: mapif_parse_PartyLeave (fd, RFIFOL (fd, 2), RFIFOL (fd, 6), RFIFOL (fd, 10)); break;

		case 0x3025: mapif_parse_PartyChangeMap (fd, RFIFOL (fd, 2), RFIFOL (fd, 6), RFIFOL (fd, 10), RFIFOW (fd, 14), RFIFOB (fd, 16), RFIFOW (fd, 17)); break;

		case 0x3026: mapif_parse_BreakParty (fd, RFIFOL (fd, 2)); break;

		case 0x3027: mapif_parse_PartyMessage (fd, RFIFOL (fd, 4), RFIFOL (fd, 8), (char *) RFIFOP (fd, 12), RFIFOW (fd, 2) - 12); break;

		case 0x3029: mapif_parse_PartyLeaderChange (fd, RFIFOL (fd, 2), RFIFOL (fd, 6), RFIFOL (fd, 10)); break;

		default:
			return 0;
	}

	return 1;
}
示例#3
0
// map server からの通信
// ・1パケットのみ解析すること
// ・パケット長データはinter.cにセットしておくこと
// ・パケット長チェックや、RFIFOSKIPは呼び出し元で行われるので行ってはならない
// ・エラーなら0(false)、そうでないなら1(true)をかえさなければならない
int inter_party_parse_frommap(int fd)
{
	switch(RFIFOW(fd,0)){
	case 0x3020: mapif_parse_CreateParty(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOP(fd,10),RFIFOB(fd,34),RFIFOB(fd,35),RFIFOP(fd,36),RFIFOP(fd,60),RFIFOW(fd,76)); break;
	case 0x3021: mapif_parse_PartyInfo(fd,RFIFOL(fd,2)); break;
	case 0x3022: mapif_parse_PartyAddMember(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOP(fd,14),RFIFOP(fd,38),RFIFOW(fd,54)); break;
	case 0x3023: mapif_parse_PartyChangeOption(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14),RFIFOB(fd,15)); break;
	case 0x3024: mapif_parse_PartyLeave(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10)); break;
	case 0x3025: mapif_parse_PartyChangeMap(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOP(fd,14),RFIFOB(fd,30),RFIFOW(fd,31)); break;
	case 0x3026: mapif_parse_BreakParty(fd,RFIFOL(fd,2)); break;
	case 0x3027: mapif_parse_PartyMessage(fd,RFIFOL(fd,4),RFIFOL(fd,8),RFIFOP(fd,12),RFIFOW(fd,2)-12); break;
	case 0x3028: mapif_parse_PartyCheck(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10)); break;
	case 0x3029: mapif_parse_PartyLeaderChange(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10)); break;
	default:
		return 0;
	}
	return 1;
}
示例#4
0
// map server からの通信
// ・1パケットのみ解析すること
// ・パケット長データはinter.cにセットしておくこと
// ・パケット長チェックや、RFIFOSKIPは呼び出し元で行われるので行ってはならない
// ・エラーなら0(false)、そうでないなら1(true)をかえさなければならない
int inter_party_parse_frommap(int fd)
{
    switch (RFIFOW(fd, 0))
    {
        case 0x3020:
        {
            int account = RFIFOL(fd, 2);
            PartyName name = stringish<PartyName>(RFIFO_STRING<24>(fd, 6));
            CharName nick = stringish<CharName>(RFIFO_STRING<24>(fd, 30));
            MapName map = RFIFO_STRING<16>(fd, 54);
            uint16_t lv = RFIFOW(fd, 70);
            mapif_parse_CreateParty(fd,
                    account,
                    name,
                    nick,
                    map,
                    lv);
        }
            break;
        case 0x3021:
        {
            int party_id = RFIFOL(fd, 2);
            mapif_parse_PartyInfo(fd, party_id);
        }
            break;
        case 0x3022:
        {
            int party_id = RFIFOL(fd, 2);
            int account_id = RFIFOL(fd, 6);
            CharName nick = stringish<CharName>(RFIFO_STRING<24>(fd, 10));
            MapName map = RFIFO_STRING<16>(fd, 34);
            uint16_t lv = RFIFOW(fd, 50);
            mapif_parse_PartyAddMember(fd,
                    party_id,
                    account_id,
                    nick,
                    map,
                    lv);
        }
            break;
        case 0x3023:
        {
            int party_id = RFIFOL(fd, 2);
            int account_id = RFIFOL(fd, 6);
            uint16_t exp = RFIFOW(fd, 10);
            uint16_t item = RFIFOW(fd, 12);
            mapif_parse_PartyChangeOption(fd,
                    party_id,
                    account_id,
                    exp,
                    item);
        }
            break;
        case 0x3024:
        {
            int party_id = RFIFOL(fd, 2);
            int account_id = RFIFOL(fd, 6);
            mapif_parse_PartyLeave(fd,
                    party_id,
                    account_id);
        }
            break;
        case 0x3025:
        {
            int party_id = RFIFOL(fd, 2);
            int account_id = RFIFOL(fd, 6);
            MapName map = RFIFO_STRING<16>(fd, 10);
            uint8_t online = RFIFOB(fd, 26);
            uint16_t lv = RFIFOW(fd, 27);
            mapif_parse_PartyChangeMap(fd,
                    party_id,
                    account_id,
                    map,
                    online,
                    lv);
        }
            break;
        case 0x3026:
        {
            int party_id = RFIFOL(fd, 2);
            mapif_parse_BreakParty(fd, party_id);
        }
            break;
        case 0x3027:
        {
            size_t len = RFIFOW(fd, 2) - 12;
            int party_id = RFIFOL(fd, 4);
            int account_id = RFIFOL(fd, 8);
            FString mes = RFIFO_STRING(fd, 12, len);
            mapif_parse_PartyMessage(fd,
                    party_id,
                    account_id,
                    mes);
        }
            break;
        case 0x3028:
        {
            int party_id = RFIFOL(fd, 2);
            int account_id = RFIFOL(fd, 6);
            CharName nick = stringish<CharName>(RFIFO_STRING<24>(fd, 10));
            mapif_parse_PartyCheck(fd,
                    party_id,
                    account_id,
                    nick);
        }
            break;
        default:
            return 0;
    }

    return 1;
}