- 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
This commit is contained in:
skotlex 2006-06-13 03:54:35 +00:00
parent 9edabb3f5e
commit fcbec4d4e6
10 changed files with 58 additions and 50 deletions

View File

@ -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. IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
2006/06/12 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. * Fixed a pair of missing initializers in the clif storage functions.
[Skotlex] [Skotlex]
* @heal no longer displays a healing animation. Fixes the client believing * @heal no longer displays a healing animation. Fixes the client believing

View File

@ -378,6 +378,12 @@
390: Autorejecting is activated. 390: Autorejecting is activated.
391: Autorejecting is deactivated. 391: Autorejecting is deactivated.
392: You request has been rejected by autoreject option. 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) // Messages of others (not for GM commands)
// ---------------------------------------- // ----------------------------------------

View File

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

View File

@ -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) int clif_disp_onlyself(struct map_session_data *sd, char *mes, int len)
{ {
unsigned char *buf; int fd;
nullpo_retr(0, sd); nullpo_retr(0, sd);
fd = sd->fd;
buf = (unsigned char*)aMallocA((len + 5)*sizeof(unsigned char)); if (!fd || !len) return 0; //Disconnected player.
WFIFOHEAD(fd, len+5);
WBUFW(buf, 0) = 0x17f; WFIFOW(fd, 0) = 0x17f;
WBUFW(buf, 2) = len + 5; WFIFOW(fd, 2) = len + 5;
memcpy(WBUFP(buf,4), mes, len); memcpy(WFIFOP(fd,4), mes, len);
WFIFOSET(fd, WFIFOW(fd,2));
clif_send(buf, WBUFW(buf,2), &sd->bl, SELF); return 1;
if(buf) aFree(buf);
return 0;
} }
/*========================================== /*==========================================
@ -9288,6 +9283,20 @@ void clif_parse_ChatLeave(int fd,struct map_session_data *sd)
chat_leavechat(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<EFBFBD>¿ðŠŽèÉé * Žæˆøv<EFBFBD>¿ðŠŽèÉé
*------------------------------------------ *------------------------------------------
@ -9301,13 +9310,12 @@ void clif_parse_TradeRequest(int fd,struct map_session_data *sd)
// @noask [LuzZza] // @noask [LuzZza]
if(t_sd && t_sd->state.noask) { if(t_sd && t_sd->state.noask) {
// Your request has been rejected by autoreject option. clif_noask_sub(sd, t_sd, 0);
clif_displaymessage(fd, msg_txt(392));
return; return;
} }
if(battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 1){ 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 } else
clif_skill_fail(sd,1,0,0); clif_skill_fail(sd,1,0,0);
} }
@ -10020,12 +10028,11 @@ void clif_parse_PartyInvite(int fd, struct map_session_data *sd) {
// @noask [LuzZza] // @noask [LuzZza]
if(t_sd && t_sd->state.noask) { if(t_sd && t_sd->state.noask) {
// Your request has been rejected by autoreject option. clif_noask_sub(sd, t_sd, 1);
clif_displaymessage(fd, msg_txt(392));
return; 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] // @noask [LuzZza]
if(t_sd && t_sd->state.noask) { if(t_sd && t_sd->state.noask) {
// Your request has been rejected by autoreject option. clif_noask_sub(sd, t_sd, 2);
clif_displaymessage(fd, msg_txt(392));
return; 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] // @noask [LuzZza]
if(t_sd && t_sd->state.noask) { if(t_sd && t_sd->state.noask) {
// Your request has been rejected by autoreject option. clif_noask_sub(sd, t_sd, 3);
clif_displaymessage(fd, msg_txt(392));
return; 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] // @noask [LuzZza]
if(t_sd && t_sd->state.noask) { if(t_sd && t_sd->state.noask) {
// Your request has been rejected by autoreject option. clif_noask_sub(sd, t_sd, 4);
clif_displaymessage(fd, msg_txt(392));
return; 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] // @noask [LuzZza]
if(f_sd->state.noask) { if(f_sd->state.noask) {
// Your request has been rejected by autoreject option. clif_noask_sub(sd, f_sd, 5);
clif_displaymessage(fd, msg_txt(392));
return; return;
} }

View File

@ -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; struct guild *g;
int i; int i;
nullpo_retr(0, sd); nullpo_retr(0, sd);
tsd= map_id2sd(account_id);
g=guild_search(sd->status.guild_id); g=guild_search(sd->status.guild_id);
if(tsd==NULL || g==NULL) if(tsd==NULL || g==NULL)
@ -1266,9 +1264,8 @@ int guild_check_alliance(int guild_id1, int guild_id2, int flag)
return 0; 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]; struct guild *g[2];
int i; int i;
@ -1386,9 +1383,8 @@ int guild_delalliance(struct map_session_data *sd,int guild_id,int flag)
return 0; 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; struct guild *g;
int i; int i;

View File

@ -39,7 +39,7 @@ int guild_request_info(int guild_id);
int guild_recv_noinfo(int guild_id); int guild_recv_noinfo(int guild_id);
int guild_recv_info(struct guild *sg); int guild_recv_info(struct guild *sg);
int guild_npc_request_info(int guild_id,const char *ev); 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_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_member_added(int guild_id,int account_id,int char_id,int flag);
int guild_leave(struct map_session_data *sd,int guild_id, 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 account_id,int char_id,const char *mes);
int guild_skillup(struct map_session_data *sd,int skill_num,int flag); int guild_skillup(struct map_session_data *sd,int skill_num,int flag);
void guild_block_skill(struct map_session_data *sd, int time); 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_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_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 guild_allianceack(int guild_id1,int guild_id2,int account_id1,int account_id2,
int flag,const char *name1,const char *name2); int flag,const char *name1,const char *name2);
int guild_delalliance(struct map_session_data *sd,int guild_id,int flag); 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_check_alliance(int guild_id1, int guild_id2, int flag);
int guild_send_memberinfoshort(struct map_session_data *sd,int online); int guild_send_memberinfoshort(struct map_session_data *sd,int online);

View File

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

View File

@ -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_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_created(int account_id,int char_id,int fail,int party_id,char *name);
int party_request_info(int party_id); 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_member_added(int party_id,int account_id,int char_id,int flag);
int party_leave(struct map_session_data *sd); int party_leave(struct map_session_data *sd);
int party_removemember(struct map_session_data *sd,int account_id,char *name); int party_removemember(struct map_session_data *sd,int account_id,char *name);

View File

@ -23,8 +23,7 @@
* Initiates a trade request. * Initiates a trade request.
*------------------------------------------ *------------------------------------------
*/ */
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) {
struct map_session_data *target_sd;
int level; int level;
nullpo_retv(sd); 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. 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 clif_tradestart(sd, 1); // character does not exist
return; return;
} }

View File

@ -5,7 +5,7 @@
#define _TRADE_H_ #define _TRADE_H_
#include "map.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_tradeack(struct map_session_data *sd,int type);
void trade_tradeadditem(struct map_session_data *sd,int index,int amount); void trade_tradeadditem(struct map_session_data *sd,int index,int amount);
void trade_tradeok(struct map_session_data *sd); void trade_tradeok(struct map_session_data *sd);