summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt7
-rw-r--r--conf-tmpl/msg_athena.conf2
-rw-r--r--db/packet_db.txt2
-rw-r--r--src/map/clif.c34
-rw-r--r--src/map/guild.c6
-rw-r--r--src/map/mob.c2
-rw-r--r--src/map/mob.h2
-rw-r--r--src/map/party.c5
-rw-r--r--src/map/script.c6
-rw-r--r--src/map/unit.c3
10 files changed, 63 insertions, 6 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 0859dc6ae..fa646f2da 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -3,6 +3,13 @@ Date Added
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
+2007/09/07
+ * Added support for the new party invite/reply packets from the latest
+ client version.
+ * Added auto-rejecting party/guild invites when the target is disconnected
+ from the server.
+ * Changed the default @Main format to prevent crashes in the newer
+ clients.
2007/09/04
* bonus3 autospell (and autospell when hit) will now select for spell
target self when the skill is tagged a support skill.
diff --git a/conf-tmpl/msg_athena.conf b/conf-tmpl/msg_athena.conf
index 99197d6c9..88967c26a 100644
--- a/conf-tmpl/msg_athena.conf
+++ b/conf-tmpl/msg_athena.conf
@@ -390,7 +390,7 @@
383: Main chat already disabled.
384: Main chat is currently enabled. Usage: @main <on|off>, @main <message>.
385: Main chat is currently disabled. Usage: @main <on|off>, @main <message>.
-386: Main@%s: %s
+386: Main@%s : %s
387: You cannot use Main chat while muted.
388: You should enable main chat with "@main on" command.
//NoAsk
diff --git a/db/packet_db.txt b/db/packet_db.txt
index 9a06f6806..e4753e551 100644
--- a/db/packet_db.txt
+++ b/db/packet_db.txt
@@ -1017,6 +1017,8 @@ packet_ver: 22
0x02ba,11,hotkey,2:4:5:9
0x02bb,8
0x02bc,6
+0x02c4,26,partyinvite2,2
+0x02c7,7,replypartyinvite2,2,6
//Add new packets here
//packet_ver: 23
diff --git a/src/map/clif.c b/src/map/clif.c
index 8af8de5d8..16b6f19f0 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -10105,6 +10105,28 @@ void clif_parse_PartyInvite(int fd, struct map_session_data *sd)
party_invite(sd, t_sd);
}
+void clif_parse_PartyInvite2(int fd, struct map_session_data *sd)
+{
+ struct map_session_data *t_sd;
+ char *name = RFIFOP(fd,2);
+ name[NAME_LENGTH]='\0';
+
+ if(map[sd->bl.m].flag.partylock)
+ { //Guild locked.
+ clif_displaymessage(fd, msg_txt(227));
+ return;
+ }
+
+ t_sd = map_nick2sd(name);
+
+ // @noask [LuzZza]
+ if(t_sd && t_sd->state.noask) {
+ clif_noask_sub(sd, t_sd, 1);
+ return;
+ }
+
+ party_invite(sd, t_sd);
+}
/*==========================================
* パーティ勧誘返答
*------------------------------------------*/
@@ -10118,6 +10140,16 @@ void clif_parse_ReplyPartyInvite(int fd,struct map_session_data *sd)
}
}
+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 {
+ party_reply_invite(sd,RFIFOL(fd,2),-1);
+ clif_skill_fail(sd,1,0,4);
+ }
+}
+
/*==========================================
* パーティ脱退要求
*------------------------------------------*/
@@ -11820,7 +11852,9 @@ static int packetdb_readdb(void)
{clif_parse_CreateParty,"createparty"},
{clif_parse_CreateParty2,"createparty2"},
{clif_parse_PartyInvite,"partyinvite"},
+ {clif_parse_PartyInvite2,"partyinvite2"},
{clif_parse_ReplyPartyInvite,"replypartyinvite"},
+ {clif_parse_ReplyPartyInvite2,"replypartyinvite2"},
{clif_parse_LeaveParty,"leaveparty"},
{clif_parse_RemovePartyMember,"removepartymember"},
{clif_parse_PartyChangeOption,"partychangeoption"},
diff --git a/src/map/guild.c b/src/map/guild.c
index 462f2cd76..a0f894f18 100644
--- a/src/map/guild.c
+++ b/src/map/guild.c
@@ -648,6 +648,12 @@ int guild_invite(struct map_session_data *sd,struct map_session_data *tsd)
return 0;
}
}
+
+ if (!tsd->fd) { //You can't invite someone who has already disconnected.
+ clif_guild_inviteack(sd,1);
+ return 0;
+ }
+
if(tsd->status.guild_id>0 ||
tsd->guild_invite>0 ||
(agit_flag && map[tsd->bl.m].flag.gvg_castle))
diff --git a/src/map/mob.c b/src/map/mob.c
index cd1fe1cc7..c6ab7418e 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -1023,7 +1023,7 @@ int mob_unlocktarget(struct mob_data *md,int tick)
/*==========================================
* Random walk
*------------------------------------------*/
-int mob_randomwalk(struct mob_data *md,int tick)
+int mob_randomwalk(struct mob_data *md,unsigned int tick)
{
const int retrycount=20;
int i,x,y,c,d;
diff --git a/src/map/mob.h b/src/map/mob.h
index e75de3912..93fe8225e 100644
--- a/src/map/mob.h
+++ b/src/map/mob.h
@@ -162,7 +162,7 @@ int mob_once_spawn_area(struct map_session_data *sd,const char *mapname,
int mob_spawn_guardian(const char* mapname, short x, short y, const char* mobname, int class_, const char* event, int guardian); // Spawning Guardians [Valaris]
int mob_guardian_guildchange(struct block_list *bl,va_list ap); //Change Guardian's ownership. [Skotlex]
-int mob_randomwalk(struct mob_data *md,int tick);
+int mob_randomwalk(struct mob_data *md,unsigned int tick);
int mob_target(struct mob_data *md,struct block_list *bl,int dist);
int mob_unlocktarget(struct mob_data *md,int tick);
diff --git a/src/map/party.c b/src/map/party.c
index eeb3d5b9a..6ae42a9f1 100644
--- a/src/map/party.c
+++ b/src/map/party.c
@@ -268,6 +268,11 @@ int party_invite(struct map_session_data *sd,struct map_session_data *tsd)
return 0;
}
}
+ if (!tsd->fd) { //You can't invite someone who has already disconnected.
+ clif_party_inviteack(sd,tsd->status.name,1);
+ return 0;
+ }
+
if( tsd->status.party_id>0 || tsd->party_invite>0 ){
clif_party_inviteack(sd,tsd->status.name,0);
return 0;
diff --git a/src/map/script.c b/src/map/script.c
index a98dffe5c..7e36818e9 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -8563,7 +8563,7 @@ BUILDIN_FUNC(sc_start)
}
if( potion_flag == 1 && potion_target )
- {//##TODO how does this work [FlavioJS]
+ { //skill.c set the flags before running the script, this must be a potion-pitched effect.
bl = map_id2bl(potion_target);
tick /= 2;// Thrown potions only last half.
val4 = 1;// Mark that this was a thrown sc_effect
@@ -8601,7 +8601,7 @@ BUILDIN_FUNC(sc_start2)
}
if( potion_flag == 1 && potion_target )
- {//##TODO how does this work [FlavioJS]
+ { //skill.c set the flags before running the script, this must be a potion-pitched effect.
bl = map_id2bl(potion_target);
tick /= 2;// Thrown potions only last half.
val4 = 1;// Mark that this was a thrown sc_effect
@@ -8643,7 +8643,7 @@ BUILDIN_FUNC(sc_start4)
}
if( potion_flag == 1 && potion_target )
- {//##TODO how does this work [FlavioJS]
+ { //skill.c set the flags before running the script, this must be a potion-pitched effect.
bl = map_id2bl(potion_target);
tick /= 2;// Thrown potions only last half.
}
diff --git a/src/map/unit.c b/src/map/unit.c
index 05175a991..dc57dfd38 100644
--- a/src/map/unit.c
+++ b/src/map/unit.c
@@ -156,6 +156,9 @@ static int unit_walktoxy_timer(int tid,unsigned int tick,int id,int data)
map_moveblock(bl, x, y, tick);
ud->walk_count++; //walked cell counter, to be used for walk-triggered skills. [Skotlex]
+ if (bl->x != x || bl->y != y || ud->walktimer != -1)
+ return 0; //map_moveblock has altered the object beyond what we expected (moved/warped it)
+
ud->walktimer = 1;
map_foreachinmovearea(clif_insight, bl, AREA_SIZE,
-dx, -dy, sd?BL_ALL:BL_PC, bl);