コード例 #1
0
ファイル: party.c プロジェクト: PiratGameInfo/Eathena
/// Invoked (from char-server) when a new member is added to the party.
/// flag: 0-success, 1-failure
int party_member_added(int party_id,int account_id,int char_id, int flag)
{
	struct map_session_data *sd = map_id2sd(account_id),*sd2;
	struct party_data *p = party_search(party_id);
	int i;

	if(sd == NULL || sd->status.char_id != char_id || !sd->party_joining ) {
		if (!flag) //Char logged off before being accepted into party.
			intif_party_leave(party_id,account_id,char_id);
		return 0;
	}

	sd2 = map_id2sd(sd->party_invite_account);

	sd->party_joining = false;
	sd->party_invite = 0;
	sd->party_invite_account = 0;

	if (!p) {
		ShowError("party_member_added: party %d not found.\n",party_id);
		intif_party_leave(party_id,account_id,char_id);
		return 0;
	}

	if( flag )
	{// failed
		if( sd2 != NULL )
			clif_party_inviteack(sd2,sd->status.name,3);
		return 0;
	}

	sd->status.party_id = party_id;

	ARR_FIND( 0, MAX_PARTY, i, p->party.member[i].account_id == 0 );
	if (i < MAX_PARTY) {
		//TODO: This is a hack to allow the following clif calls to send the data to the new player.
		//The correct player data is set when party_recv_info arrives soon afterwards.
		party_fill_member(&p->party.member[i], sd);
		p->data[i].sd = sd;
	}

	clif_party_member_info(p,sd);
	clif_party_option(p,sd,0x100);
	clif_party_info(p,sd);

	if( sd2 != NULL )
		clif_party_inviteack(sd2,sd->status.name,2);

	for( i = 0; i < ARRAYLENGTH(p->data); ++i )
	{// hp of the other party members
		sd2 = p->data[i].sd;
		if( sd2 && sd2->status.account_id != account_id && sd2->status.char_id != char_id )
			clif_hpmeter_single(sd->fd, sd2->bl.id, sd2->battle_status.hp, sd2->battle_status.max_hp);
	}
	clif_party_hp(sd);
	clif_party_xy(sd);
	clif_charnameupdate(sd); //Update char name's display [Skotlex]

	return 0;
}
コード例 #2
0
ファイル: party.c プロジェクト: PiratGameInfo/Eathena
int party_create(struct map_session_data *sd,char *name,int item,int item2)
{
	struct party_member leader;
	char tname[NAME_LENGTH];

	safestrncpy(tname, name, NAME_LENGTH);
	if( strlen(trim(tname)) == 0 )
	{// empty name
		return 0;
	}

	if( sd->status.party_id > 0 || sd->party_joining || sd->party_creating )
	{// already associated with a party
		clif_party_created(sd,2);
		return 0;
	}

	sd->party_creating = true;

	party_fill_member(&leader, sd);
	leader.leader = 1;

	intif_create_party(&leader,name,item,item2);
	return 0;
}
コード例 #3
0
ファイル: party.c プロジェクト: julius5/rathena
int party_reply_invite(struct map_session_data *sd,int party_id,int flag)
{
	struct map_session_data* tsd;
	struct party_member member;

	if( sd->party_invite != party_id ) { // forged
		sd->party_invite = 0;
		sd->party_invite_account = 0;
		return 0;
	}

	tsd = map_id2sd(sd->party_invite_account);

	if( flag == 1 && !sd->party_creating && !sd->party_joining ) { // accepted and allowed
		sd->party_joining = true;
		party_fill_member(&member, sd, 0);
		intif_party_addmember(sd->party_invite, &member);
		return 1;
	} else { // rejected or failure
		sd->party_invite = 0;
		sd->party_invite_account = 0;

		if( tsd != NULL )
			clif_party_invite_reply(tsd,sd->status.name,PARTY_REPLY_REJECTED);
	}

	return 0;
}
コード例 #4
0
ファイル: party.c プロジェクト: AxlSckay/Ragnarok-OldTimes
int party_create(struct map_session_data *sd,char *name,int item,int item2)
{
	struct party_member leader;
	nullpo_retr(0, sd);

	if(sd->status.party_id) {
		clif_party_created(sd,2);
		return 0;
	}

	party_fill_member(&leader, sd);
	leader.leader = 1;

	intif_create_party(&leader,name,item,item2);
	return 0;
}
コード例 #5
0
ファイル: party.c プロジェクト: AxlSckay/Ragnarok-OldTimes
int party_reply_invite(struct map_session_data *sd,int account_id,int flag)
{
	struct map_session_data *tsd= map_id2sd(account_id);
	struct party_member member;
	nullpo_retr(0, sd);

	if(flag==1){
		party_fill_member(&member, sd);
		intif_party_addmember(sd->party_invite, &member);
		return 0;
	}
	sd->party_invite=0;
	sd->party_invite_account=0;
	if(tsd==NULL)
		return 0;
	clif_party_inviteack(tsd,sd->status.name,1);
	return 1;
}
コード例 #6
0
ファイル: party.c プロジェクト: PiratGameInfo/Eathena
void party_reply_invite(struct map_session_data *sd,int account_id,int flag)
{
	struct map_session_data *tsd= map_id2sd(account_id);
	struct party_member member;

	if( flag == 1 && !sd->party_creating && !sd->party_joining )
	{// accepted and allowed
		sd->party_joining = true;
		party_fill_member(&member, sd);
		intif_party_addmember(sd->party_invite, &member);
	}
	else
	{// rejected or failure
		sd->party_invite = 0;
		sd->party_invite_account = 0;
		if( tsd != NULL )
			clif_party_inviteack(tsd,sd->status.name,1);
	}
}
コード例 #7
0
ファイル: party.c プロジェクト: Tonetete/eathena
/// Request the creation of a party.
/// Returns true if the request was sent.
bool party_create(struct map_session_data* sd, const char* name, int item, int item2)
{
	struct party_member leader;
	char tname[NAME_LENGTH];

	safestrncpy(tname, name, NAME_LENGTH);
	trim(tname);

	if( !tname[0] )
	{// empty name
		return false;
	}

	if( sd->status.party_id > 0 || sd->party_joining || sd->party_creating )
	{// already associated with a party
		clif_party_created(sd,2);
		return false;
	}

	party_fill_member(&leader, sd, 1);

	sd->party_creating = intif_create_party(&leader,name,item,item2);
	return sd->party_creating;
}
コード例 #8
0
ファイル: party.cpp プロジェクト: AlmasB/rathena
int party_reply_invite(struct map_session_data *sd,int party_id,int flag)
{
	struct map_session_data* tsd;
	struct party_member member;

	if( sd->party_invite != party_id ) { // forged
		sd->party_invite = 0;
		sd->party_invite_account = 0;
		return 0;
	}

	// The character is already in a party, possibly left a party invite open and created his own party
	if( sd->status.party_id != 0 ){
		// On Aegis no rejection packet is sent to the inviting player
		sd->party_invite = 0;
		sd->party_invite_account = 0;
		return 0;
	}

	tsd = map_id2sd(sd->party_invite_account);

	if( flag == 1 && !sd->party_creating && !sd->party_joining ) { // accepted and allowed
		sd->party_joining = true;
		party_fill_member(&member, sd, 0);
		intif_party_addmember(sd->party_invite, &member);
		return 1;
	} else { // rejected or failure
		sd->party_invite = 0;
		sd->party_invite_account = 0;

		if( tsd != NULL )
			clif_party_invite_reply(tsd,sd->status.name,PARTY_REPLY_REJECTED);
	}

	return 0;
}