Browse Source

Fixed invited party members not displaying correctly (bugreport:1199)

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@12394 54d463be-8e91-2dee-dedb-b68131a5f0ec
ultramage 17 years ago
parent
commit
b2734e601e
3 changed files with 14 additions and 9 deletions
  1. 1 0
      Changelog-Trunk.txt
  2. 8 6
      src/map/clif.c
  3. 5 3
      src/map/party.c

+ 1 - 0
Changelog-Trunk.txt

@@ -4,6 +4,7 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 2008/03/18
+	* Fixed invited party members not displaying correctly (bugreport:1199)
 	* Fixed OnPCLoginEvent not working correctly (bugreport:1182) [ultramage]
 	* Added missing WorkingDirectory value to vcproj-7.1, vcproj-8 projects.
 	  Now you can flawlessly run your compiled server with RUN button in

+ 8 - 6
src/map/clif.c

@@ -5301,20 +5301,22 @@ int clif_party_created(struct map_session_data *sd,int result)
 int clif_party_member_info(struct party_data *p, struct map_session_data *sd)
 {
 	unsigned char buf[96];
+	int i;
 
 	if (!sd) { //Pick any party member (this call is used when changing item share rules)
-		int i;
-		for (i=0; i<MAX_PARTY && !p->data[i].sd; i++);
-		if (i >= MAX_PARTY) return 0; //Should never happen...
-		sd = p->data[i].sd;
+		ARR_FIND( 0, MAX_PARTY, i, p->data[i].sd != 0 );
+	} else {
+		ARR_FIND( 0, MAX_PARTY, i, p->data[i].sd == sd );
 	}
+	if (i >= MAX_PARTY) return 0; //Should never happen...
+	sd = p->data[i].sd;
 
 	WBUFW(buf, 0) = 0x1e9;
 	WBUFL(buf, 2) = sd->status.account_id;
-	WBUFL(buf, 6) = 0;
+	WBUFL(buf, 6) = (p->party.member[i].leader)?1:0;
 	WBUFW(buf,10) = sd->bl.x;
 	WBUFW(buf,12) = sd->bl.y;
-	WBUFB(buf,14) = 0; //Unconfirmed byte, could be online/offline.
+	WBUFB(buf,14) = (p->party.member[i].online)?1:0;
 	memcpy(WBUFP(buf,15), p->party.name, NAME_LENGTH);
 	memcpy(WBUFP(buf,39), sd->status.name, NAME_LENGTH);
 	mapindex_getmapname_ext(mapindex_id2name(sd->mapindex), (char*)WBUFP(buf,63));

+ 5 - 3
src/map/party.c

@@ -381,8 +381,6 @@ int party_member_added(int party_id,int account_id,int char_id, int flag)
 	}
 
 	sd2 = map_id2sd(sd->party_invite_account);
-	if( sd2 != NULL )
-		clif_party_inviteack(sd2,sd->status.name,flag?3:2);
 
 	sd->party_invite = 0;
 	sd->party_invite_account = 0;
@@ -406,9 +404,13 @@ int party_member_added(int party_id,int account_id,int char_id, int flag)
 	}
 
 	party_check_conflict(sd);
+	clif_party_member_info(p,sd);
 	clif_party_option(p,sd,0x100);
 	clif_party_info(p,sd);
-	clif_party_member_info(p,sd);
+
+	if( sd2 != NULL )
+		clif_party_inviteack(sd2,sd->status.name,flag?3:2);
+
 	for( i = 0; i < ARRAYLENGTH(p->data); ++i )
 	{// hp of the other party members
 		sd2 = p->data[i].sd;