summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/map/clif.c22
-rw-r--r--src/map/clif.h1
-rw-r--r--src/map/script.c67
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]