diff options
Diffstat (limited to 'src/map/clif.c')
-rw-r--r-- | src/map/clif.c | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/src/map/clif.c b/src/map/clif.c index 25b53686a..13d4ebe8f 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -1255,6 +1255,18 @@ static void clif_spiritball_single(int fd, struct map_session_data *sd) WFIFOSET(fd, packet_len(0x1e1)); } +/*========================================== + * Kagerou/Oboro amulet spirit + *------------------------------------------*/ +static void clif_talisman_single(int fd, struct map_session_data *sd, short type) +{ + WFIFOHEAD(fd, packet_len(0x08cf)); + WFIFOW(fd,0)=0x08cf; + WFIFOL(fd,2)=sd->bl.id; + WFIFOW(fd,6)=type; + WFIFOW(fd,8)=sd->talisman[type]; + WFIFOSET(fd, packet_len(0x08cf)); +} /*========================================== * Run when player changes map / refreshes @@ -1348,6 +1360,7 @@ int clif_spawn(struct block_list *bl) case BL_PC: { TBL_PC *sd = ((TBL_PC*)bl); + int i; if (sd->spiritball > 0) clif_spiritball(sd); if(sd->state.size==2) // tiny/big players [Valaris] @@ -1360,6 +1373,10 @@ int clif_spawn(struct block_list *bl) //New Mounts are not complaint to the original method, so we gotta tell this guy that he is mounting. clif_status_load_notick(&sd->bl,SI_ALL_RIDING,2,1,0,0); } + for(i = 1; i < 5; i++){ + if( sd->talisman[i] > 0 ) + clif_talisman(sd, i); + } #ifdef NEW_CARTS if( sd->sc.data[SC_PUSH_CART] ) clif_status_load_notick(&sd->bl, SI_ON_PUSH_CART, 2, sd->sc.data[SC_PUSH_CART]->val1, 0, 0); @@ -4031,6 +4048,10 @@ static void clif_getareachar_pc(struct map_session_data* sd,struct map_session_d if(dstsd->spiritball > 0) clif_spiritball_single(sd->fd, dstsd); + for(i = 1; i < 5; i++){ + if( dstsd->talisman[i] > 0 ) + clif_talisman_single(sd->fd, dstsd, i); + } if( dstsd->sc.option&OPTION_MOUNTING ) { //New Mounts are not complaint to the original method, so we gotta tell this guy that I'm mounting. clif_status_load_single(sd->fd,dstsd->bl.id,SI_ALL_RIDING,2,1,0,0); @@ -8195,6 +8216,7 @@ void clif_message(struct block_list* bl, const char* msg) // refresh the client's screen, getting rid of any effects void clif_refresh(struct map_session_data *sd) { + int i; nullpo_retv(sd); clif_changemap(sd,sd->mapindex,sd->bl.x,sd->bl.y); @@ -8213,6 +8235,10 @@ void clif_refresh(struct map_session_data *sd) clif_updatestatus(sd,SP_LUK); if (sd->spiritball) clif_spiritball_single(sd->fd, sd); + for(i = 1; i < 5; i++){ + if( sd->talisman[i] > 0 ) + clif_talisman_single(sd->fd, sd, i); + } if (sd->vd.cloth_color) clif_refreshlook(&sd->bl,sd->bl.id,LOOK_CLOTHES_COLOR,sd->vd.cloth_color,SELF); if(merc_is_hom_active(sd->hd)) @@ -16123,7 +16149,21 @@ void clif_parse_SkillSelectMenu(int fd, struct map_session_data *sd) { skill_select_menu(sd,RFIFOL(fd,2),RFIFOW(fd,6)); clif_menuskill_clear(sd); } +/*========================================== + * Kagerou/Oboro amulet spirit + *------------------------------------------*/ +void clif_talisman(struct map_session_data *sd,short type) +{ + unsigned char buf[8]; + + nullpo_retv(sd); + WBUFW(buf,0)=0x08cf; + WBUFL(buf,2)=sd->bl.id; + WBUFW(buf,6)=type; + WBUFW(buf,8)=sd->talisman[type]; + clif_send(buf,packet_len(0x08cf),&sd->bl,AREA); +} /// Move Item from or to Personal Tab (CZ_WHATSOEVER) [FE] /// 0907 <index>.W /// @@ -16549,7 +16589,7 @@ static int packetdb_readdb(void) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //#0x08C0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16557,7 +16597,7 @@ static int packetdb_readdb(void) 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; struct { void (*func)(int, struct map_session_data *); |