Update Biolo & Meister summon packet (#6505)

Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
This commit is contained in:
Joam 2022-02-18 06:26:27 +07:00 committed by GitHub
parent 44188e39d4
commit fc7ed9d397
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 65 additions and 0 deletions

View File

@ -1714,6 +1714,8 @@ int clif_spawn( struct block_list *bl, bool walking ){
clif_specialeffect(&md->bl,EF_GIANTBODY2,AREA);
else if(md->special_state.size==SZ_MEDIUM)
clif_specialeffect(&md->bl,EF_BABYBODY2,AREA);
if ( md->special_state.ai == AI_ABR || md->special_state.ai == AI_BIONIC )
clif_summon_init(*md);
}
break;
case BL_NPC:
@ -23045,6 +23047,44 @@ void clif_parse_barter_extended_buy( int fd, struct map_session_data* sd ){
#endif
}
void clif_summon_init(struct mob_data& md) {
#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
struct block_list* master_bl = battle_get_master(&md.bl);
if( master_bl == nullptr ){
return;
}
struct PACKET_ZC_SUMMON_HP_INIT p = {};
p.PacketType = HEADER_ZC_SUMMON_HP_INIT;
p.summonAID = md.bl.id;
p.CurrentHP = md.status.hp;
p.MaxHP = md.status.max_hp;
clif_send( &p, sizeof( p ), master_bl, SELF );
#endif
}
void clif_summon_hp_bar(struct mob_data& md) {
#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
struct block_list* master_bl = battle_get_master(&md.bl);
if( master_bl == nullptr ){
return;
}
struct PACKET_ZC_SUMMON_HP_UPDATE p = {};
p.PacketType = HEADER_ZC_SUMMON_HP_UPDATE;
p.summonAID = md.bl.id;
p.VarId = SP_HP; // HP parameter
p.Value = md.status.hp;
clif_send( &p, sizeof( p ), master_bl, SELF );
#endif
}
/*==========================================
* Main client packet processing function
*------------------------------------------*/

View File

@ -1187,4 +1187,7 @@ void clif_inventory_expansion_info( struct map_session_data* sd );
void clif_barter_open( struct map_session_data& sd, struct npc_data& nd );
void clif_barter_extended_open( struct map_session_data& sd, struct npc_data& nd );
void clif_summon_init(struct mob_data& md);
void clif_summon_hp_bar(struct mob_data& md);
#endif /* CLIF_HPP */

View File

@ -2473,6 +2473,9 @@ void mob_damage(struct mob_data *md, struct block_list *src, int damage)
#if PACKETVER >= 20120404
if (battle_config.monster_hp_bars_info && !map_getmapflag(md->bl.m, MF_HIDEMOBHPBAR)) {
int i;
if (md->special_state.ai == AI_ABR || md->special_state.ai == AI_BIONIC) {
clif_summon_hp_bar(*md);
}
for(i = 0; i < DAMAGELOG_SIZE; i++){ // must show hp bar to all char who already hit the mob.
struct map_session_data *sd = map_charid2sd(md->dmglog[i].id);
if( sd && check_distance_bl(&md->bl, &sd->bl, AREA_SIZE) ) // check if in range
@ -3396,6 +3399,9 @@ void mob_heal(struct mob_data *md,unsigned int heal)
#if PACKETVER >= 20120404
if (battle_config.monster_hp_bars_info && !map_getmapflag(md->bl.m, MF_HIDEMOBHPBAR)) {
int i;
if (md->special_state.ai == AI_ABR || md->special_state.ai == AI_BIONIC) {
clif_summon_hp_bar(*md);
}
for(i = 0; i < DAMAGELOG_SIZE; i++)// must show hp bar to all char who already hit the mob.
if( md->dmglog[i].id ) {
struct map_session_data *sd = map_charid2sd(md->dmglog[i].id);

View File

@ -232,6 +232,20 @@ struct PACKET_CZ_REQ_STYLE_CLOSE{
int16 packetType;
} __attribute__((packed));
struct PACKET_ZC_SUMMON_HP_INIT {
int16 PacketType;
uint32 summonAID;
uint32 CurrentHP;
uint32 MaxHP;
} __attribute__((packed));
struct PACKET_ZC_SUMMON_HP_UPDATE {
int16 PacketType;
uint32 summonAID;
uint16 VarId;
uint32 Value;
} __attribute__((packed));
// NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
#if !defined( sun ) && ( !defined( __NETBSD__ ) || __NetBSD_Version__ >= 600000000 )
#pragma pack( pop )
@ -285,6 +299,8 @@ DEFINE_PACKET_HEADER(CZ_UNCONFIRMED_TSTATUS_UP, 0x0b24)
DEFINE_PACKET_HEADER(CZ_GUILD_EMBLEM_CHANGE2, 0x0b46)
DEFINE_PACKET_HEADER(ZC_UNCONFIRMED_SPIRITS3, 0xb73)
DEFINE_PACKET_HEADER(CZ_UNCONFIRMED_RODEX_RETURN, 0xb98)
DEFINE_PACKET_HEADER(ZC_SUMMON_HP_INIT, 0xb6b)
DEFINE_PACKET_HEADER(ZC_SUMMON_HP_UPDATE, 0xb6c)
const int16 MAX_INVENTORY_ITEM_PACKET_NORMAL = ( ( INT16_MAX - ( sizeof( struct packet_itemlist_normal ) - ( sizeof( struct NORMALITEM_INFO ) * MAX_ITEMLIST) ) ) / sizeof( struct NORMALITEM_INFO ) );
const int16 MAX_INVENTORY_ITEM_PACKET_EQUIP = ( ( INT16_MAX - ( sizeof( struct packet_itemlist_equip ) - ( sizeof( struct EQUIPITEM_INFO ) * MAX_ITEMLIST ) ) ) / sizeof( struct EQUIPITEM_INFO ) );