summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
authorultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec>2008-03-08 23:03:06 +0000
committerultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec>2008-03-08 23:03:06 +0000
commit133d6e1686771a4acda5dc421499199528196e0c (patch)
tree24e530c7a9256f1845685c1799b14cd6c03d4cc5 /src/map
parenta0046ed8734160aaaf8ce8afbebee81eb537cbbf (diff)
downloadhercules-133d6e1686771a4acda5dc421499199528196e0c.tar.gz
hercules-133d6e1686771a4acda5dc421499199528196e0c.tar.bz2
hercules-133d6e1686771a4acda5dc421499199528196e0c.tar.xz
hercules-133d6e1686771a4acda5dc421499199528196e0c.zip
Corrected a problem where a party invite acknowledgement would not be sent (bugreport:1091).
There is still the unresolved issue where newly added party members will not display their party correctly. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12328 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map')
-rw-r--r--src/map/clif.c36
-rw-r--r--src/map/clif.h2
-rw-r--r--src/map/party.c52
-rw-r--r--src/map/party.h4
4 files changed, 52 insertions, 42 deletions
diff --git a/src/map/clif.c b/src/map/clif.c
index c4b0134a9..551155ea3 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -5411,19 +5411,17 @@ int clif_party_invite(struct map_session_data *sd,struct map_session_data *tsd)
* 3 -> party is full
* 4 -> char of the same account already joined the party
*------------------------------------------*/
-int clif_party_inviteack(struct map_session_data* sd, const char* nick, int flag)
+void clif_party_inviteack(struct map_session_data* sd, const char* nick, int flag)
{
int fd;
-
- nullpo_retr(0, sd);
-
+ nullpo_retv(sd);
fd=sd->fd;
+
WFIFOHEAD(fd,packet_len(0xfd));
- WFIFOW(fd,0)=0xfd;
- memcpy(WFIFOP(fd,2),nick,NAME_LENGTH);
- WFIFOB(fd,26)=flag;
+ WFIFOW(fd,0) = 0xfd;
+ safestrncpy((char*)WFIFOP(fd,2),nick,NAME_LENGTH);
+ WFIFOB(fd,26) = flag;
WFIFOSET(fd,packet_len(0xfd));
- return 0;
}
/*==========================================
@@ -9818,27 +9816,35 @@ void clif_parse_PartyInvite2(int fd, struct map_session_data *sd)
party_invite(sd, t_sd);
}
+
/*==========================================
- * パーティ勧誘返答
+ * Party invitation reply
+ * S 00ff <account ID>.L <flag>.L
+ * S 02c7 <account ID>.L <flag>.B
+ * flag: 0-reject, 1-accept
*------------------------------------------*/
void clif_parse_ReplyPartyInvite(int fd,struct map_session_data *sd)
{
- if(battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 5){
- party_reply_invite(sd,RFIFOL(fd,2),RFIFOL(fd,6));
- } else {
+ if( battle_config.basic_skill_check && pc_checkskill(sd,NV_BASIC) < 5 )
+ {
party_reply_invite(sd,RFIFOL(fd,2),-1);
clif_skill_fail(sd,1,0,4);
+ return;
}
+
+ party_reply_invite(sd,RFIFOL(fd,2),RFIFOL(fd,6));
}
void clif_parse_ReplyPartyInvite2(int fd,struct map_session_data *sd)
{
- if(battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 5){
- party_reply_invite(sd,RFIFOL(fd,2),RFIFOB(fd,6));
- } else {
+ if( battle_config.basic_skill_check && pc_checkskill(sd,NV_BASIC) < 5 )
+ {
party_reply_invite(sd,RFIFOL(fd,2),-1);
clif_skill_fail(sd,1,0,4);
+ return;
}
+
+ party_reply_invite(sd,RFIFOL(fd,2),RFIFOB(fd,6));
}
/*==========================================
diff --git a/src/map/clif.h b/src/map/clif.h
index 58c088dad..adb12ffc1 100644
--- a/src/map/clif.h
+++ b/src/map/clif.h
@@ -281,7 +281,7 @@ 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);
int clif_party_info(struct party_data *p, struct map_session_data *sd);
int clif_party_invite(struct map_session_data *sd,struct map_session_data *tsd);
-int clif_party_inviteack(struct map_session_data* sd, const char* nick, int flag);
+void clif_party_inviteack(struct map_session_data* sd, const char* nick, int flag);
int clif_party_option(struct party_data *p,struct map_session_data *sd,int flag);
int clif_party_leaved(struct party_data* p, struct map_session_data* sd, int account_id, const char* name, int flag);
int clif_party_message(struct party_data* p, int account_id, const char* mes, int len);
diff --git a/src/map/party.c b/src/map/party.c
index b8cd03811..7707ddca3 100644
--- a/src/map/party.c
+++ b/src/map/party.c
@@ -122,7 +122,7 @@ int party_create(struct map_session_data *sd,char *name,int item,int item2)
}
-int party_created(int account_id,int char_id,int fail,int party_id,char *name)
+void party_created(int account_id,int char_id,int fail,int party_id,char *name)
{
struct map_session_data *sd;
sd=map_id2sd(account_id);
@@ -131,17 +131,16 @@ int party_created(int account_id,int char_id,int fail,int party_id,char *name)
{ //Character logged off before creation ack?
if (!fail) //break up party since player could not be added to it.
intif_party_leave(party_id,account_id,char_id);
- return 0;
+ return;
}
- if(fail){
- clif_party_created(sd,1);
- return 0; // "party name already exists"
+ if( !fail ) {
+ sd->status.party_id = party_id;
+ clif_party_created(sd,0); //Success message
+ //We don't do any further work here because the char-server sends a party info packet right after creating the party.
+ } else {
+ clif_party_created(sd,1); // "party name already exists"
}
- sd->status.party_id=party_id;
- clif_party_created(sd,0); //Success message
- //We don't do any further work here because the char-server sends a party info packet right after creating the party.
- return 1;
}
int party_request_info(int party_id)
@@ -328,22 +327,23 @@ int party_invite(struct map_session_data *sd,struct map_session_data *tsd)
return 1;
}
-int party_reply_invite(struct map_session_data *sd,int account_id,int flag)
+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){
+ if( flag == 1 )
+ {// accepted
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;
+ else
+ {// rejected or failure
+ sd->party_invite = 0;
+ sd->party_invite_account = 0;
+ if( tsd != NULL )
+ clif_party_inviteack(tsd,sd->status.name,1);
+ }
}
//Invoked when a player joins:
@@ -367,10 +367,12 @@ void party_member_joined(struct map_session_data *sd)
}
/// 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 invite_aid;
int i;
if(sd == NULL || sd->status.char_id != char_id){
@@ -378,8 +380,10 @@ int party_member_added(int party_id,int account_id,int char_id, int flag)
intif_party_leave(party_id,account_id,char_id);
return 0;
}
- sd->party_invite=0;
- sd->party_invite_account=0;
+
+ invite_aid = sd->party_invite_account;
+ sd->party_invite = 0;
+ sd->party_invite_account = 0;
if (!p) {
ShowError("party_member_added: party %d not found.\n",party_id);
@@ -387,8 +391,8 @@ int party_member_added(int party_id,int account_id,int char_id, int flag)
return 0;
}
- if(!flag) {
- sd->status.party_id=party_id;
+ if( flag == 0 ) {
+ sd->status.party_id = party_id;
party_check_conflict(sd);
clif_party_option(p,sd,0x100);
clif_party_info(p,sd);
@@ -404,8 +408,8 @@ int party_member_added(int party_id,int account_id,int char_id, int flag)
clif_charnameupdate(sd); //Update char name's display [Skotlex]
}
- sd2=map_id2sd(sd->party_invite_account);
- if (sd2)
+ sd2 = map_id2sd(invite_aid);
+ if( sd2 != NULL )
clif_party_inviteack(sd2,sd->status.name,flag?2:1);
return 0;
}
diff --git a/src/map/party.h b/src/map/party.h
index b04797fb1..54f55a6c2 100644
--- a/src/map/party.h
+++ b/src/map/party.h
@@ -21,7 +21,7 @@ struct party_data* party_search(int party_id);
struct party_data* party_searchname(const char* str);
int party_create(struct map_session_data *sd,char *name, int item, int item2);
-int party_created(int account_id,int char_id,int fail,int party_id,char *name);
+void party_created(int account_id,int char_id,int fail,int party_id,char *name);
int party_request_info(int party_id);
int party_invite(struct map_session_data *sd,struct map_session_data *tsd);
void party_member_joined(struct map_session_data *sd);
@@ -29,7 +29,7 @@ int party_member_added(int party_id,int account_id,int char_id,int flag);
int party_leave(struct map_session_data *sd);
int party_removemember(struct map_session_data *sd,int account_id,char *name);
int party_member_leaved(int party_id,int account_id,int char_id);
-int party_reply_invite(struct map_session_data *sd,int account_id,int flag);
+void party_reply_invite(struct map_session_data *sd,int account_id,int flag);
int party_recv_noinfo(int party_id);
int party_recv_info(struct party *sp);
int party_recv_movemap(int party_id,int account_id,int char_id, unsigned short map,int online,int lv);