summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt3
-rw-r--r--src/map/clif.c60
-rw-r--r--src/map/clif.h2
-rw-r--r--src/map/guild.c27
-rw-r--r--src/map/party.c16
5 files changed, 84 insertions, 24 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index d1f17bd2f..e983d8853 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -5,6 +5,9 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. EV
GOES INTO TRUNK AND WILL BE MERGED INTO STABLE BY VALARIS AND WIZPUTER. -- VALARIS
2006/02/21
+ * Now you should receive the party/guild mini-dots on map-load without the
+ need of waiting for others to "move" for you to receive the update (fixes
+ dead characters never showing up on the map) [Skotlex]
* Fix to prevent using main chat when it disabled in atcommand_athena. [LuzZza]
- Fixed message codes in duel functions.
- Small fix in log_refine, incorrect compare expression.
diff --git a/src/map/clif.c b/src/map/clif.c
index 41416b86f..88150576b 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -2972,17 +2972,33 @@ int clif_guildstorageequiplist(struct map_session_data *sd,struct guild_storage
// Guild XY locators [Valaris]
int clif_guild_xy(struct map_session_data *sd)
{
-unsigned char buf[10];
+ unsigned char buf[10];
-nullpo_retr(0, sd);
+ nullpo_retr(0, sd);
-WBUFW(buf,0)=0x1eb;
-WBUFL(buf,2)=sd->status.account_id;
-WBUFW(buf,6)=sd->bl.x;
-WBUFW(buf,8)=sd->bl.y;
-clif_send(buf,packet_len_table[0x1eb],&sd->bl,GUILD_SAMEMAP_WOS);
+ WBUFW(buf,0)=0x1eb;
+ WBUFL(buf,2)=sd->status.account_id;
+ WBUFW(buf,6)=sd->bl.x;
+ WBUFW(buf,8)=sd->bl.y;
+ clif_send(buf,packet_len_table[0x1eb],&sd->bl,GUILD_SAMEMAP_WOS);
-return 0;
+ return 0;
+}
+
+/*==========================================
+ * Sends x/y dot to a single fd. [Skotlex]
+ *------------------------------------------
+ */
+
+int clif_guild_xy_single(int fd, struct map_session_data *sd)
+{
+ WFIFOHEAD(fd,packet_len_table[0x1eb]);
+ WFIFOW(fd,0)=0x1eb;
+ WFIFOL(fd,2)=sd->status.account_id;
+ WFIFOW(fd,6)=sd->bl.x;
+ WFIFOW(fd,8)=sd->bl.y;
+ WFIFOSET(fd,packet_len_table[0x1eb]);
+ return 0;
}
// Guild XY locators [Valaris]
@@ -6670,6 +6686,24 @@ int clif_party_xy(struct map_session_data *sd)
return 0;
}
+
+/*==========================================
+ * Sends x/y dot to a single fd. [Skotlex]
+ *------------------------------------------
+ */
+
+int clif_party_xy_single(int fd, struct map_session_data *sd)
+{
+ WFIFOHEAD(fd,packet_len_table[0x107]);
+ WFIFOW(fd,0)=0x107;
+ WFIFOL(fd,2)=sd->status.account_id;
+ WFIFOW(fd,6)=sd->bl.x;
+ WFIFOW(fd,8)=sd->bl.y;
+ WFIFOSET(fd,packet_len_table[0x107]);
+ return 0;
+}
+
+
/*==========================================
* パーティHP通知
*------------------------------------------
@@ -8702,11 +8736,6 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
}
// param all
clif_initialstatus(sd);
- // party
- party_send_movemap(sd);
- // guild
- guild_send_memberinfoshort(sd,1);
-
if(battle_config.pc_invincible_time > 0) {
if(map_flag_gvg(sd->bl.m))
pc_setinvincibletimer(sd,battle_config.pc_invincible_time<<1);
@@ -8717,6 +8746,11 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
map_addblock(&sd->bl); // ブロック登録
clif_spawnpc(sd); // spawn
+ // party
+ party_send_movemap(sd);
+ // guild
+ guild_send_memberinfoshort(sd,1);
+
// weight max , now
clif_updatestatus(sd,SP_MAXWEIGHT);
clif_updatestatus(sd,SP_WEIGHT);
diff --git a/src/map/clif.h b/src/map/clif.h
index 3e99b641f..5f3a5afc8 100644
--- a/src/map/clif.h
+++ b/src/map/clif.h
@@ -254,6 +254,7 @@ int clif_party_leaved(struct party *p,struct map_session_data *sd,int account_id
int clif_party_message(struct party *p,int account_id,char *mes,int len);
int clif_party_move(struct party *p,struct map_session_data *sd,int online);
int clif_party_xy(struct map_session_data *sd);
+int clif_party_xy_single(int fd, struct map_session_data *sd);
int clif_party_hp(struct map_session_data *sd);
int clif_hpmeter(struct map_session_data *sd);
@@ -282,6 +283,7 @@ int clif_guild_delalliance(struct map_session_data *sd,int guild_id,int flag);
int clif_guild_oppositionack(struct map_session_data *sd,int flag);
int clif_guild_broken(struct map_session_data *sd,int flag);
int clif_guild_xy(struct map_session_data *sd);
+int clif_guild_xy_single(int fd, struct map_session_data *sd);
int clif_guild_xy_remove(struct map_session_data *sd);
diff --git a/src/map/guild.c b/src/map/guild.c
index 47970e147..5d38b5f98 100644
--- a/src/map/guild.c
+++ b/src/map/guild.c
@@ -880,7 +880,8 @@ int guild_member_leaved(int guild_id,int account_id,int char_id,int flag,
int guild_send_memberinfoshort(struct map_session_data *sd,int online)
{
struct guild *g;
-
+ int i;
+
nullpo_retr(0, sd);
if(sd->status.guild_id<=0)
@@ -893,10 +894,18 @@ int guild_send_memberinfoshort(struct map_session_data *sd,int online)
sd->status.account_id,sd->status.char_id,online,sd->status.base_level,sd->status.class_);
if( !online ){ // ログアウトするならsdをクリアして終了
- int i=guild_getindex(g,sd->status.account_id,sd->status.char_id);
+ i=guild_getindex(g,sd->status.account_id,sd->status.char_id);
if(i>=0)
g->member[i].sd=NULL;
return 0;
+ } else if (sd->fd) {
+ //Send XY dot updates. [Skotlex]
+ for(i=0; i < MAX_GUILD; i++) {
+ if (!g->member[i].sd || g->member[i].sd == sd ||
+ g->member[i].sd->bl.m != sd->bl.m)
+ continue;
+ clif_guild_xy_single(sd->fd, g->member[i].sd);
+ }
}
if( sd->state.guild_sent!=0 ) // ギルド初期送信データは送信済み
@@ -906,14 +915,12 @@ int guild_send_memberinfoshort(struct map_session_data *sd,int online)
guild_check_conflict(sd);
// あるならギルド初期送信データ送信
- if( (g=guild_search(sd->status.guild_id))!=NULL ){
- guild_check_member(g); // 所属を確認する
- if(sd->status.guild_id==g->guild_id){
- clif_guild_belonginfo(sd,g);
- clif_guild_notice(sd,g);
- sd->state.guild_sent=1;
- sd->guild_emblem_id=g->emblem_id;
- }
+ guild_check_member(g); // 所属を確認する
+ if(sd->status.guild_id==g->guild_id){
+ clif_guild_belonginfo(sd,g);
+ clif_guild_notice(sd,g);
+ sd->state.guild_sent=1;
+ sd->guild_emblem_id=g->emblem_id;
}
return 0;
}
diff --git a/src/map/party.c b/src/map/party.c
index 31d4f0479..65486dcea 100644
--- a/src/map/party.c
+++ b/src/map/party.c
@@ -470,6 +470,7 @@ int party_recv_movemap(int party_id,int account_id,int char_id, unsigned short m
// パーティメンバの移動
int party_send_movemap(struct map_session_data *sd)
{
+ int i;
struct party *p;
nullpo_retr(0, sd);
@@ -478,6 +479,19 @@ int party_send_movemap(struct map_session_data *sd)
return 0;
intif_party_changemap(sd,1);
+
+ p=party_search(sd->status.party_id);
+ if (p && sd->fd) {
+ //Send dots of other party members to this char. [Skotlex]
+ for(i=0; i < MAX_PARTY; i++) {
+ if (!p->member[i].sd || p->member[i].sd == sd ||
+ p->member[i].sd->bl.m != sd->bl.m)
+ continue;
+ clif_party_xy_single(sd->fd, p->member[i].sd);
+ }
+
+ }
+
if( sd->state.party_sent ) // もうパーティデータは送信済み
return 0;
@@ -485,7 +499,7 @@ int party_send_movemap(struct map_session_data *sd)
party_check_conflict(sd);
// あるならパーティ情報送信
- if( (p=party_search(sd->status.party_id))!=NULL ){
+ if(p){
party_check_member(p); // 所属を確認する
if(sd->status.party_id==p->party_id){
clif_party_main_info(p,sd->fd);