示例#1
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;
}
示例#2
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;
}
示例#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
// キャラの競合がないかチェック用
static
void party_check_conflict_sub(struct party *p,
        int party_id, int account_id, CharName nick)
{
    int i;

    if (p->party_id == party_id)    // 本来の所属なので問題なし
        return;

    for (i = 0; i < MAX_PARTY; i++)
    {
        if (p->member[i].account_id == account_id
            && p->member[i].name == nick)
        {
            // 別のパーティに偽の所属データがあるので脱退
            PRINTF("int_party: party conflict! %d %d %d\n", account_id,
                    party_id, p->party_id);
            mapif_parse_PartyLeave(-1, p->party_id, account_id);
        }
    }
}
示例#5
0
// キャラの競合がないかチェック用
static
void party_check_conflict_sub(PartyPair p,
        PartyId party_id, AccountId account_id, CharName nick)
{
    int i;

    if (p.party_id == party_id)    // 本来の所属なので問題なし
        return;

    for (i = 0; i < MAX_PARTY; i++)
    {
        if (p->member[i].account_id == account_id
            && p->member[i].name == nick)
        {
            // 別のパーティに偽の所属データがあるので脱退
            PRINTF("int_party: party conflict! %d %d %d\n"_fmt, account_id,
                    party_id, p.party_id);
            mapif_parse_PartyLeave(nullptr, p.party_id, account_id);
        }
    }
}
示例#6
0
// キャラの競合がないかチェック用
int party_check_conflict_sub(DBKey key, void *data, va_list ap) {
	struct party_data *p = (struct party_data *)data;
	int party_id, account_id, char_id, i;

	party_id=va_arg(ap, int);
	account_id=va_arg(ap, int);
	char_id=va_arg(ap, int);
	
	if (p->party.party_id == party_id) //No conflict to check
		return 0;

	for(i = 0; i < MAX_PARTY; i++) {
		if(p->party.member[i].account_id == account_id &&
			p->party.member[i].char_id == char_id)
	  	{
			ShowWarning("int_party: party conflict! %d %d %d\n", account_id, party_id, p->party.party_id);
			mapif_parse_PartyLeave(-1, p->party.party_id, account_id, char_id);
		}
	}

	return 0;
}
示例#7
0
// �L�����̋������Ȃ����`�F�b�N�p
int party_check_conflict_sub(void *key, void *data, va_list ap) {
	struct party *p = (struct party *)data;
	int party_id, account_id, i;
	char *nick;

	party_id = va_arg(ap, int);

	if (p->party_id == party_id) // �{���̏����Ȃ̂Ŗ��Ȃ�
		return 0;

	account_id = va_arg(ap, int);
	nick = va_arg(ap, char *);

	for(i = 0; i < MAX_PARTY; i++) {
		if (p->member[i].account_id == account_id && strcmp(p->member[i].name, nick) == 0) {
			// �ʂ̃p�[�e�B�ɋU�̏����f�[�^������̂ŒE��
			printf("int_party: party conflict! %d %d %d\n", account_id, party_id, p->party_id);
			mapif_parse_PartyLeave(-1, p->party_id, account_id);
		}
	}

	return 0;
}
示例#8
0
// キャラの競合がないかチェック用
int party_check_conflict_sub(void *key,void *data,va_list ap)
{
	struct party *p=(struct party *)data;
	int party_id,account_id,i;
	char *nick;
	
	party_id=va_arg(ap,int);
	account_id=va_arg(ap,int);
	nick=va_arg(ap,char *);
	
	if( p->party_id==party_id)	// 本来の所属なので問題なし
		return 0;
	
	for(i=0;i<MAX_PARTY;i++){
		if(p->member[i].account_id==account_id && strcmp(p->member[i].name,nick)==0){
			// 別のパーティに偽の所属データがあるので脱退
			printf("int_party: party conflict! %d %d %d\n",account_id,party_id,p->party_id);
			mapif_parse_PartyLeave(-1,p->party_id,account_id);
		}
	}
	
	return 0;
}
示例#9
0
// サーバーから脱退要求(キャラ削除用)
int inter_party_leave(int party_id,int account_id, int char_id)
{
	return mapif_parse_PartyLeave(-1,party_id,account_id, char_id);
}
示例#10
0
//---------------------------------------------------------
// Request from map-server about a member that leaves party
//---------------------------------------------------------
void inter_party_leave(int party_id, int account_id) {
	mapif_parse_PartyLeave(-1, party_id, account_id);

	return;
}
示例#11
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;
}
示例#12
0
//Leave request from the server (for delete character)
int inter_party_leave(int party_id,uint32 account_id, uint32 char_id, char *name)
{
	return mapif_parse_PartyLeave(-1,party_id,account_id, char_id, name, PARTY_MEMBER_WITHDRAW_EXPEL);
}