summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
Diffstat (limited to 'src/map')
-rw-r--r--src/map/clif.c40
-rw-r--r--src/map/clif.h1
-rw-r--r--src/map/mob.c8
3 files changed, 38 insertions, 11 deletions
diff --git a/src/map/clif.c b/src/map/clif.c
index 225429f11..c9d286a7a 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -5816,6 +5816,30 @@ int clif_hpmeter(struct map_session_data *sd)
return 0;
}
+/*==================================================
+ * Update monster hp view if it has changed [Celest]
+ *--------------------------------------------------
+ */
+int clif_update_mobhp(struct mob_data *md)
+{
+ unsigned char buf[102];
+ char mobhp[50];
+
+ nullpo_retr(0, md);
+
+ WBUFW(buf,0) = 0x95;
+ WBUFL(buf,2) = md->bl.id;
+
+ memcpy(WBUFP(buf,6), md->name, 24);
+ sprintf(mobhp, "hp: %d/%d", md->hp, mob_db[md->class].max_hp);
+ WBUFW(buf, 0) = 0x195;
+ memcpy(WBUFP(buf,30), mobhp, 24);
+ WBUFL(buf,54) = 0;
+ WBUFL(buf,78) = 0;
+ clif_send(buf,packet_len_table[0x195],&md->bl,AREA);
+
+ return 0;
+}
/*==========================================
* パーティ場所移動(未使用)
*------------------------------------------
@@ -7676,7 +7700,7 @@ void clif_parse_GetCharNameRequest(int fd, struct map_session_data *sd) {
bl = map_id2bl(account_id);
if (bl == NULL)
return;
-
+
WFIFOW(fd,0) = 0x95;
WFIFOL(fd,2) = account_id;
@@ -10232,22 +10256,22 @@ static int clif_parse(int fd) {
// 接続が切れてるので後始末
if (!chrif_isconnect() || session[fd]->eof) { // char鯖に繋がってない間は接続禁止 (!chrif_isconnect())
if (sd && sd->state.auth) {
- if (chrif_isconnect())
- clif_quitsave(fd, sd);
+ clif_quitsave(fd, sd); // the function doesn't send to inter-server/char-server if it is not connected [Yor]
if (sd->status.name != NULL)
sprintf(tmp_output,"%sCharacter '"CL_WHITE"%s"CL_RESET"' logged off.\n", (pc_isGM(sd))?"GM ":"",sd->status.name); // Player logout display [Valaris]
else
sprintf(tmp_output,"%sCharacter with Account ID '"CL_WHITE"%d"CL_RESET"' logged off.\n", (pc_isGM(sd))?"GM ":"", sd->bl.id); // Player logout display [Yor]
} else if (sd) { // not authentified! (refused by char-server or disconnect before to be authentified)
sprintf(tmp_output,"Player not authenticated with Account ID '"CL_WHITE"%d"CL_RESET"' logged off.\n", sd->bl.id); // Player logout display [Yor]
- if (chrif_isconnect())
- clif_quitsave(fd, sd);
- sd = 0;
+// if (chrif_isconnect())
+// clif_quitsave(fd, sd);
+ map_deliddb(&sd->bl); // account_id has been included in the DB before auth answer [Yor]
+// sd = 0;
}
ShowInfo(tmp_output);
close(fd);
- if (sd) // 追加
- map_deliddb(&sd->bl); // 追加
+// if (sd) // 追加
+// map_deliddb(&sd->bl); // 追加
delete_session(fd);
return 0;
}
diff --git a/src/map/clif.h b/src/map/clif.h
index a51aaddfc..599bc6515 100644
--- a/src/map/clif.h
+++ b/src/map/clif.h
@@ -174,6 +174,7 @@ int clif_wis_message(int fd,char *nick,char *mes,int mes_len);
int clif_wis_end(int fd,int flag);
int clif_solved_charname(struct map_session_data *sd,int char_id);
+int clif_update_mobhp(struct mob_data *md);
int clif_use_card(struct map_session_data *sd,int idx);
int clif_insert_card(struct map_session_data *sd,int idx_equip,int idx_card,int flag);
diff --git a/src/map/mob.c b/src/map/mob.c
index 7fa39b7ca..3c3fc76a5 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -536,7 +536,7 @@ static int mob_walk(struct mob_data *md,unsigned int tick,int data)
if(md->walkpath.path_pos>=md->walkpath.path_len)
clif_fixmobpos(md); // とまったときに位置の再送信
- }
+ }
return 0;
}
@@ -2303,6 +2303,8 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
}
if(md->hp>0){
+ if (battle_config.show_mob_hp)
+ clif_update_mobhp (md);
return 0;
}
@@ -2394,7 +2396,7 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
if(sd && md && battle_config.pk_mode==1 && (mob_db[md->class].lv - sd->status.base_level >= 20)) {
job_exp*=1.15; // pk_mode additional exp if monster >20 levels [Valaris]
}
- if(md->state.special_mob_ai >= 1 && battle_config.alchemist_summon_reward != 1) { // for summoned creatures [Valaris]
+ if(md->master_id || (md->state.special_mob_ai >= 1 && battle_config.alchemist_summon_reward != 1)) { // for summoned creatures [Valaris]
base_exp = 0;
job_exp = 0;
}
@@ -2454,7 +2456,7 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
struct delay_item_drop *ditem;
int drop_rate;
- if(md->state.special_mob_ai >= 1 && battle_config.alchemist_summon_reward != 1) // Added [Valaris]
+ if(md->master_id || (md->state.special_mob_ai >= 1 && battle_config.alchemist_summon_reward != 1)) // Added [Valaris]
break; // End
if(mob_db[md->class].dropitem[i].nameid <= 0)