From 38825fa2ef87c024f88cf0ac139a02ef7fd5f40d Mon Sep 17 00:00:00 2001 From: zephyrus Date: Wed, 19 Mar 2008 00:12:35 +0000 Subject: - The last bug in Adoption system. - Fixed a bug on trade, if you received a trade without accept it do logout... the other player cannot trade anymore 'til restart. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12396 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/clif.c | 4 ++-- src/map/pc.c | 2 +- src/map/trade.c | 7 ++++++- src/map/unit.c | 1 + 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/map/clif.c b/src/map/clif.c index b8b3c8b13..1c9eee4fb 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -12043,7 +12043,7 @@ void clif_Adopt_request(struct map_session_data *sd, struct map_session_data *sr { int fd = sd->fd; - WFIFOSET(fd,34); + WFIFOHEAD(fd,34); WFIFOW(fd,0) = 0x01f6; WFIFOL(fd,2) = src->status.account_id; WFIFOL(fd,6) = p_id; @@ -12055,7 +12055,7 @@ void clif_parse_Adopt_request(int fd, struct map_session_data *sd) { struct map_session_data *tsd = map_id2sd(RFIFOL(fd,2)), *p_sd = map_charid2sd(sd->status.partner_id); - if( pc_can_Adopt(sd, tsd, p_sd) ) + if( pc_can_Adopt(sd, p_sd, tsd) ) { tsd->adopt_invite = sd->status.account_id; clif_Adopt_request(tsd, sd, p_sd->status.account_id); diff --git a/src/map/pc.c b/src/map/pc.c index 5845fe56e..de2e73ba5 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -645,7 +645,7 @@ bool pc_adoption(struct map_session_data *p1_sd, struct map_session_data *p2_sd, // Parents Skills pc_skill(p1_sd, WE_CALLBABY, 1, 0); - pc_skill(p1_sd, WE_CALLBABY, 1, 0); + pc_skill(p2_sd, WE_CALLBABY, 1, 0); return true; } diff --git a/src/map/trade.c b/src/map/trade.c index 4371bf6a8..f60f7370b 100644 --- a/src/map/trade.c +++ b/src/map/trade.c @@ -443,8 +443,14 @@ void trade_tradecancel(struct map_session_data *sd) struct map_session_data *target_sd; int trade_i; + target_sd = map_id2sd(sd->trade_partner); + if(!sd->state.trading) + { // Not trade acepted + if( target_sd ) target_sd->trade_partner = 0; + sd->trade_partner = 0; return; + } for(trade_i = 0; trade_i < 10; trade_i++) { // give items back (only virtual) if (!sd->deal.item[trade_i].amount) @@ -458,7 +464,6 @@ void trade_tradecancel(struct map_session_data *sd) sd->deal.zeny = 0; } - target_sd = map_id2sd(sd->trade_partner); sd->state.deal_locked = 0; sd->state.trading = 0; sd->trade_partner = 0; diff --git a/src/map/unit.c b/src/map/unit.c index 62638e252..5bdccd83d 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -1672,6 +1672,7 @@ int unit_remove_map(struct block_list *bl, int clrtype) sd->menuskill_id = sd->menuskill_val = 0; sd->npc_shopid = 0; + sd->adopt_invite = 0; if(sd->pvp_timer!=-1) { delete_timer(sd->pvp_timer,pc_calc_pvprank_timer); -- cgit v1.2.3-70-g09d2