diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/map/clif.c | 22 | ||||
-rw-r--r-- | src/map/clif.h | 1 | ||||
-rw-r--r-- | src/map/script.c | 67 |
3 files changed, 89 insertions, 1 deletions
diff --git a/src/map/clif.c b/src/map/clif.c index c63722a32..75797a821 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -7350,6 +7350,26 @@ int clif_wisall(struct map_session_data *sd,int type,int flag) return 0; } + +/*========================================== + * Play a BGM! [Rikter/Yommy] + *------------------------------------------*/ +void clif_playBGM(struct map_session_data* sd, struct block_list* bl, const char* name) +{ + int fd; + + nullpo_retv(sd); + nullpo_retv(bl); + + fd = sd->fd; + WFIFOHEAD(fd,packet_len(0x7fe)); + WFIFOW(fd,0) = 0x7fe; + safestrncpy((char*)WFIFOP(fd,2), name, NAME_LENGTH); + WFIFOSET(fd,packet_len(0x7fe)); + + return; +} + /*========================================== * サウンドエフェクト *------------------------------------------*/ @@ -13946,7 +13966,7 @@ static int packetdb_readdb(void) 6, 2, -1, 4, 4, 4, 4, 8, 8,268, 6, 8, 6, 54, 30, 54, #endif 0, 0, 0, 0, 0, 8, 8, 32, -1, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 14, 93, 86, 87, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 14, 93, 86, 87, 0, 0, 0, 0, 26, 0, //#0x0800 -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, diff --git a/src/map/clif.h b/src/map/clif.h index 61962bf99..090ed71a2 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -156,6 +156,7 @@ void clif_talkiebox(struct block_list* bl, const char* talkie); void clif_wedding_effect(struct block_list *bl); void clif_divorced(struct map_session_data* sd, const char* name); //void clif_callpartner(struct map_session_data *sd); +void clif_playBGM(struct map_session_data* sd, struct block_list* bl, const char* name); void clif_soundeffect(struct map_session_data* sd, struct block_list* bl, const char* name, int type); int clif_soundeffectall(struct block_list* bl, const char *name, int type, enum send_target coverage); void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type, int target_id, unsigned int tick); diff --git a/src/map/script.c b/src/map/script.c index f6b41331f..c3ad39a8e 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -10636,6 +10636,71 @@ BUILDIN_FUNC(misceffect) return 0; } /*========================================== + * Play a BGM on a single client [Rikter/Yommy] + *------------------------------------------*/ +BUILDIN_FUNC(playBGM) +{ + TBL_PC* sd = script_rid2sd(st); + const char* name = script_getstr(st,2); + + if(sd) + { + if(!st->rid) + clif_playBGM(sd,map_id2bl(st->oid),name); + else + clif_playBGM(sd,&sd->bl,name); + } + + return 0; +} + +int playBGM_sub(struct block_list* bl,va_list ap) +{ + char* name = va_arg(ap,char*); + + clif_playBGM((TBL_PC *)bl, bl, name); + + return 0; +} + +/*========================================== + * Play a BGM on multiple client [Rikter/Yommy] + *------------------------------------------*/ +BUILDIN_FUNC(playBGMall) +{ + struct block_list* bl; + const char* name; + + bl = (st->rid) ? &(script_rid2sd(st)->bl) : map_id2bl(st->oid); + if (!bl) + return 0; + + name = script_getstr(st,2); + + if(script_hasdata(st,7)) + { // specified part of map + const char* map = script_getstr(st,3); + int x0 = script_getnum(st,4); + int y0 = script_getnum(st,5); + int x1 = script_getnum(st,6); + int y1 = script_getnum(st,7); + map_foreachinarea(playBGM_sub, map_mapname2mapid(map), x0, y0, x1, y1, BL_PC, name); + } + else + if(!script_hasdata(st,7)) + { // entire map + const char* map = script_getstr(st,3); + map_foreachinmap(playBGM_sub, map_mapname2mapid(map), BL_PC, name); + } + else + { + ShowError("buildin_playBGMall: insufficient arguments for specific area broadcast.\n"); + } + + return 0; +} + +/*========================================== * サウンドエフェクト *------------------------------------------*/ BUILDIN_FUNC(soundeffect) @@ -14504,6 +14569,8 @@ struct script_function buildin_func[] = { BUILDIN_DEF(clearitem,""), BUILDIN_DEF(classchange,"ii"), BUILDIN_DEF(misceffect,"i"), + BUILDIN_DEF(playBGM,"s"), + BUILDIN_DEF(playBGMall,"s*"), BUILDIN_DEF(soundeffect,"si"), BUILDIN_DEF(soundeffectall,"si*"), // SoundEffectAll [Codemaster] BUILDIN_DEF(strmobinfo,"ii"), // display mob data [Valaris] |