Просмотр исходного кода

- Updated clif_disp_onlyself to not use dynamic memory and write directly to the player's buffer.
- Updated @noask to also tell the rejected what he has just rejected (added msg_athena entries for each of the different requests)
- Since noask already does a player lookup, updated the corresponding parsing functions to take the player rather than the player id (prevents double lookups)


git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@7117 54d463be-8e91-2dee-dedb-b68131a5f0ec

skotlex 19 лет назад
Родитель
Сommit
fcbec4d4e6
10 измененных файлов с 58 добавлено и 50 удалено
  1. 5 0
      Changelog-Trunk.txt
  2. 6 0
      conf-tmpl/msg_athena.conf
  3. 1 1
      src/map/atcommand.c
  4. 34 31
      src/map/clif.c
  5. 3 7
      src/map/guild.c
  6. 3 3
      src/map/guild.h
  7. 2 3
      src/map/party.c
  8. 1 1
      src/map/party.h
  9. 2 3
      src/map/trade.c
  10. 1 1
      src/map/trade.h

+ 5 - 0
Changelog-Trunk.txt

@@ -4,6 +4,11 @@ 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.
 
 2006/06/12
+	* Updated clif_disp_onlyself to not use dynamic memory and write directly
+	  to the player's buffer. [Skotlex]
+	* Updated @noask to also tell the user what he has just rejected (added
+	  msg_athena entries for each of the different requests). Also updated it to
+	  use clif_disp_onlyself. [Skotlex]
 	* Fixed a pair of missing initializers in the clif storage functions.
 	  [Skotlex]
 	* @heal no longer displays a healing animation. Fixes the client believing

+ 6 - 0
conf-tmpl/msg_athena.conf

@@ -378,6 +378,12 @@
 390: Autorejecting is activated.
 391: Autorejecting is deactivated.
 392: You request has been rejected by autoreject option.
+393: Autorejected trade request from %s.
+394: Autorejected party invite from %s.
+395: Autorejected guild invite from %s.
+396: Autorejected alliance request from %s.
+397: Autorejected opposition request from %s.
+398: Autorejected friend request from %s.
 
 // Messages of others (not for GM commands)
 // ----------------------------------------

+ 1 - 1
src/map/atcommand.c

@@ -8332,7 +8332,7 @@ atcommand_trade(
     if (!message || !*message)
         return -1;
     if((pl_sd=map_nick2sd((char *) message)) != NULL) {
-        trade_traderequest(sd, pl_sd->bl.id);
+        trade_traderequest(sd, pl_sd);
         return 0;
     }
     return -1;

+ 34 - 31
src/map/clif.c

@@ -7342,21 +7342,16 @@ void clif_sitting(struct map_session_data *sd)
  */
 int clif_disp_onlyself(struct map_session_data *sd, char *mes, int len)
 {
-	unsigned char *buf;
-
+	int fd;
 	nullpo_retr(0, sd);
-
-	buf = (unsigned char*)aMallocA((len + 5)*sizeof(unsigned char));
-
-	WBUFW(buf, 0) = 0x17f;
-	WBUFW(buf, 2) = len + 5;
-	memcpy(WBUFP(buf,4), mes, len);
-
-	clif_send(buf, WBUFW(buf,2), &sd->bl, SELF);
-
-	if(buf) aFree(buf);
-
-	return 0;
+	fd = sd->fd;
+	if (!fd || !len) return 0; //Disconnected player.
+	WFIFOHEAD(fd, len+5);
+	WFIFOW(fd, 0) = 0x17f;
+	WFIFOW(fd, 2) = len + 5;
+	memcpy(WFIFOP(fd,4), mes, len);
+	WFIFOSET(fd, WFIFOW(fd,2));
+	return 1;
 }
 
 /*==========================================
@@ -9288,6 +9283,20 @@ void clif_parse_ChatLeave(int fd,struct map_session_data *sd)
 	chat_leavechat(sd);
 }
 
+//Handles notifying asker and rejecter of what has just ocurred.
+//Type is used to determine the correct msg_txt to use:
+//0: 
+static void clif_noask_sub(struct map_session_data *src, struct map_session_data *target, int type)
+{
+	char *msg, output[256];
+	// Your request has been rejected by autoreject option.
+	msg = msg_txt(392);
+	clif_disp_onlyself(src, msg, strlen(msg));
+	//Notice that a request was rejected.
+	snprintf(output, 256, msg_txt(393+type), src->status.name, 256);
+	clif_disp_onlyself(target, output, strlen(output));
+}
+
 /*==========================================
  * Žæˆø—v�¿‚𑊎è‚É‘—‚é
  *------------------------------------------
@@ -9301,13 +9310,12 @@ void clif_parse_TradeRequest(int fd,struct map_session_data *sd)
 
 	// @noask [LuzZza]
 	if(t_sd && t_sd->state.noask) {
-		// Your request has been rejected by autoreject option.
-		clif_displaymessage(fd, msg_txt(392));
+		clif_noask_sub(sd, t_sd, 0);
 		return;
 	}
 
 	if(battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 1){
-		trade_traderequest(sd,RFIFOL(sd->fd,2));
+		trade_traderequest(sd,t_sd);
 	} else
 		clif_skill_fail(sd,1,0,0);
 }
@@ -10020,12 +10028,11 @@ void clif_parse_PartyInvite(int fd, struct map_session_data *sd) {
 
 	// @noask [LuzZza]
 	if(t_sd && t_sd->state.noask) {
-		// Your request has been rejected by autoreject option.
-		clif_displaymessage(fd, msg_txt(392));
+		clif_noask_sub(sd, t_sd, 1);
 		return;
 	}
 	
-	party_invite(sd, RFIFOL(fd,2));
+	party_invite(sd, t_sd);
 }
 
 /*==========================================
@@ -10253,12 +10260,11 @@ void clif_parse_GuildInvite(int fd,struct map_session_data *sd) {
 
 	// @noask [LuzZza]
 	if(t_sd && t_sd->state.noask) {
-		// Your request has been rejected by autoreject option.
-		clif_displaymessage(fd, msg_txt(392));
+		clif_noask_sub(sd, t_sd, 2);
 		return;
 	}
 
-	guild_invite(sd,RFIFOL(fd,2));
+	guild_invite(sd,t_sd);
 }
 
 /*==========================================
@@ -10327,12 +10333,11 @@ void clif_parse_GuildRequestAlliance(int fd, struct map_session_data *sd) {
 
 	// @noask [LuzZza]
 	if(t_sd && t_sd->state.noask) {
-		// Your request has been rejected by autoreject option.
-		clif_displaymessage(fd, msg_txt(392));
+		clif_noask_sub(sd, t_sd, 3);
 		return;
 	}
 	
-	guild_reqalliance(sd,RFIFOL(fd,2));
+	guild_reqalliance(sd,t_sd);
 }
 
 /*==========================================
@@ -10366,12 +10371,11 @@ void clif_parse_GuildOpposition(int fd, struct map_session_data *sd) {
 
 	// @noask [LuzZza]
 	if(t_sd && t_sd->state.noask) {
-		// Your request has been rejected by autoreject option.
-		clif_displaymessage(fd, msg_txt(392));
+		clif_noask_sub(sd, t_sd, 4);
 		return;
 	}
 	
-	guild_opposition(sd,RFIFOL(fd,2));
+	guild_opposition(sd,t_sd);
 }
 
 /*==========================================
@@ -10902,8 +10906,7 @@ void clif_parse_FriendsListAdd(int fd, struct map_session_data *sd) {
 
 	// @noask [LuzZza]
 	if(f_sd->state.noask) {
-		// Your request has been rejected by autoreject option.
-		clif_displaymessage(fd, msg_txt(392));
+		clif_noask_sub(sd, f_sd, 5);
 		return;
 	}
 

+ 3 - 7
src/map/guild.c

@@ -630,15 +630,13 @@ int guild_recv_info(struct guild *sg)
 
 
 // ギルドへの勧誘
-int guild_invite(struct map_session_data *sd,int account_id)
+int guild_invite(struct map_session_data *sd,struct map_session_data *tsd)
 {
-	struct map_session_data *tsd;
 	struct guild *g;
 	int i;
 
 	nullpo_retr(0, sd);
 
-	tsd= map_id2sd(account_id);
 	g=guild_search(sd->status.guild_id);
 
 	if(tsd==NULL || g==NULL)
@@ -1266,9 +1264,8 @@ int guild_check_alliance(int guild_id1, int guild_id2, int flag)
 	return 0;
 }
 // ギルド同盟要求
-int guild_reqalliance(struct map_session_data *sd,int account_id)
+int guild_reqalliance(struct map_session_data *sd,struct map_session_data *tsd)
 {
-	struct map_session_data *tsd= map_id2sd(account_id);
 	struct guild *g[2];
 	int i;
 
@@ -1386,9 +1383,8 @@ int guild_delalliance(struct map_session_data *sd,int guild_id,int flag)
 	return 0;
 }
 // ギルド敵対
-int guild_opposition(struct map_session_data *sd,int char_id)
+int guild_opposition(struct map_session_data *sd,struct map_session_data *tsd)
 {
-	struct map_session_data *tsd=map_id2sd(char_id);
 	struct guild *g;
 	int i;
 

+ 3 - 3
src/map/guild.h

@@ -39,7 +39,7 @@ int guild_request_info(int guild_id);
 int guild_recv_noinfo(int guild_id);
 int guild_recv_info(struct guild *sg);
 int guild_npc_request_info(int guild_id,const char *ev);
-int guild_invite(struct map_session_data *sd,int account_id);
+int guild_invite(struct map_session_data *sd,struct map_session_data *tsd);
 int guild_reply_invite(struct map_session_data *sd,int guild_id,int flag);
 int guild_member_added(int guild_id,int account_id,int char_id,int flag);
 int guild_leave(struct map_session_data *sd,int guild_id,
@@ -50,13 +50,13 @@ int guild_explusion(struct map_session_data *sd,int guild_id,
 	int account_id,int char_id,const char *mes);
 int guild_skillup(struct map_session_data *sd,int skill_num,int flag);
 void guild_block_skill(struct map_session_data *sd, int time);
-int guild_reqalliance(struct map_session_data *sd,int account_id);
+int guild_reqalliance(struct map_session_data *sd,struct map_session_data *tsd);
 int guild_reply_reqalliance(struct map_session_data *sd,int account_id,int flag);
 int guild_alliance(int guild_id1,int guild_id2,int account_id1,int account_id2);
 int guild_allianceack(int guild_id1,int guild_id2,int account_id1,int account_id2,
 	int flag,const char *name1,const char *name2);
 int guild_delalliance(struct map_session_data *sd,int guild_id,int flag);
-int guild_opposition(struct map_session_data *sd,int char_id);
+int guild_opposition(struct map_session_data *sd,struct map_session_data *tsd);
 int guild_check_alliance(int guild_id1, int guild_id2, int flag);
 
 int guild_send_memberinfoshort(struct map_session_data *sd,int online);

+ 2 - 3
src/map/party.c

@@ -230,9 +230,8 @@ int party_recv_info(struct party *sp)
 	return 0;
 }
 
-int party_invite(struct map_session_data *sd,int account_id)
+int party_invite(struct map_session_data *sd,struct map_session_data *tsd)
 {
-	struct map_session_data *tsd= map_id2sd(account_id);
 	struct party_data *p=party_search(sd->status.party_id);
 	int i,flag=0;
 	
@@ -253,7 +252,7 @@ int party_invite(struct map_session_data *sd,int account_id)
 	for(i=0;i<MAX_PARTY;i++){
 		if(p->party.member[i].account_id == 0) //Room for a new member.
 			flag = 1;
-		if(p->party.member[i].account_id==account_id &&
+		if(p->party.member[i].account_id==tsd->status.account_id &&
 			p->party.member[i].char_id==tsd->status.char_id){
 			clif_party_inviteack(sd,tsd->status.name,0);
 			return 0;

+ 1 - 1
src/map/party.h

@@ -20,7 +20,7 @@ struct party_data *party_searchname(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);
 int party_request_info(int party_id);
-int party_invite(struct map_session_data *sd,int account_id);
+int party_invite(struct map_session_data *sd,struct map_session_data *tsd);
 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);

+ 2 - 3
src/map/trade.c

@@ -23,8 +23,7 @@
  * Initiates a trade request.
  *------------------------------------------
  */
-void trade_traderequest(struct map_session_data *sd, int target_id) {
-	struct map_session_data *target_sd;
+void trade_traderequest(struct map_session_data *sd, struct map_session_data *target_sd) {
 	int level;
 
 	nullpo_retv(sd);
@@ -34,7 +33,7 @@ void trade_traderequest(struct map_session_data *sd, int target_id) {
 		return; //Can't trade in notrade mapflag maps.
 	}
 
-	if ((target_sd = map_id2sd(target_id)) == NULL || sd == target_sd) {
+	if (target_sd  == NULL || sd == target_sd) {
 		clif_tradestart(sd, 1); // character does not exist
 		return;
 	}

+ 1 - 1
src/map/trade.h

@@ -5,7 +5,7 @@
 #define	_TRADE_H_
 
 #include "map.h"
-void trade_traderequest(struct map_session_data *sd,int target_id);
+void trade_traderequest(struct map_session_data *sd, struct map_session_data *target_sd);
 void trade_tradeack(struct map_session_data *sd,int type);
 void trade_tradeadditem(struct map_session_data *sd,int index,int amount);
 void trade_tradeok(struct map_session_data *sd);