Commit 4cf3ea00 authored by hisuinohoshi's avatar hisuinohoshi

Update bgmplayer

变化:
新增事件曲集触发功能,优先级高于地图曲集,可以使用 事件BGM替换器 进行测试,使用 事件BGM还原器 可以去除事件曲集;
事件、地图bgm播放完后不会再播放默认BGM,而是会在本列表内循环;
parent 9a15d1e1
...@@ -44,6 +44,7 @@ extract($pdata,EXTR_REFS); ...@@ -44,6 +44,7 @@ extract($pdata,EXTR_REFS);
$log = $cmd = $main = ''; $log = $cmd = $main = '';
$gamedata = array(); $gamedata = array();
init_playerdata(); init_playerdata();
$clbpara = get_clbpara($clbpara);
//读取玩家互动信息 //读取玩家互动信息
$result = $db->query("SELECT lid,time,log FROM {$tablepre}log WHERE toid = '$pid' AND prcsd = 0 ORDER BY time,lid"); $result = $db->query("SELECT lid,time,log FROM {$tablepre}log WHERE toid = '$pid' AND prcsd = 0 ORDER BY time,lid");
......
...@@ -38,6 +38,7 @@ if($gamestate == 0) { ...@@ -38,6 +38,7 @@ if($gamestate == 0) {
extract($pdata); extract($pdata);
init_playerdata(); init_playerdata();
init_profile(); init_profile();
$clbpara = get_clbpara($clbpara);
$log = ''; $log = '';
//读取聊天信息 //读取聊天信息
......
...@@ -6,7 +6,14 @@ if(!defined('IN_GAME')) exit('Access Denied'); ...@@ -6,7 +6,14 @@ if(!defined('IN_GAME')) exit('Access Denied');
# 未配置的默认播放音量(单位:百分比) # 未配置的默认播放音量(单位:百分比)
$default_volume = 20; $default_volume = 20;
# 会播放BGM的地图(优先级高) # 会播放BGM的事件(优先级最高——会覆盖默认曲集)
# 具体触发时用不用这个数组都无所谓,可以直接调用: $clbpara['event_bgmbook'] = Array('指定事件曲集名');
$event_bgm = Array
(
'test' => Array('event'),
);
# 会播放BGM的地图(优先级高——会覆盖默认曲集)
$pls_bgm = Array $pls_bgm = Array
( (
# 在英灵殿会播放对应曲集 # 在英灵殿会播放对应曲集
......
...@@ -479,36 +479,43 @@ function init_bgm($force_update=0) ...@@ -479,36 +479,43 @@ function init_bgm($force_update=0)
{ {
global $volume,$bgmname,$bgmlink,$bgmtype,$gamecfg; global $volume,$bgmname,$bgmlink,$bgmtype,$gamecfg;
global $pls,$command,$clbpara; global $pls,$command,$clbpara;
include_once config('audio',$gamecfg); include config('audio',$gamecfg);
$clbpara = get_clbpara($clbpara);
# 初始化 # 初始化
$event_flag = 0;
$bgmname = $bgmlink = $bgmtype = $bgmplayer = $bgmnums = ''; $bgmname = $bgmlink = $bgmtype = $bgmplayer = $bgmnums = '';
# 移动时,检查是否需要更新播放列表 # 存在最优先的事件BGM队列
if($command == 'move' && isset($clbpara['bgmbook'])) if(isset($clbpara['event_bgmbook']))
{
# 检查是否需要更新播放列表
if(array_diff($clbpara['bgmbook'],$clbpara['event_bgmbook']))
{ {
# 重置当前播放列表 # 重置当前播放列表
$oldbook = $clbpara['bgmbook']; $clbpara['bgmbook'] = $clbpara['event_bgmbook'];
$clbpara['bgmbook'] = $clbpara['valid_bgmbook']; $force_update = 1;
# 检查当前地图是否存在BGM,如有,将其加入地图曲集 }
if(array_key_exists($pls,$pls_bgm)) }
# 存在次优先的地图BGM队列
elseif(isset($clbpara['pls_bgmbook']))
{ {
shuffle($pls_bgm[$pls]); # 检查是否需要更新播放列表
foreach($pls_bgm[$pls] as $pbook) if(array_diff($clbpara['bgmbook'],$clbpara['pls_bgmbook']))
{ {
$clbpara['bgmbook'][] = $pbook; # 重置当前播放列表
$clbpara['bgmbook'] = $clbpara['pls_bgmbook'];
$force_update = 1;
} }
# 将播放列表的第一位设置为地图BGM
shuffle($bgmbook[$pls_bgm[$pls][0]]);
$bgmid = $bgmbook[$pls_bgm[$pls][0]][0];
$nowbgmname = $bgmlist[$bgmid]['name'];
$bgmlink = $bgmlist[$bgmid]['url'];
$bgmtype = $bgmlist[$bgmid]['type'];
} }
# 如果移动后的生成播放列表与旧播放列表比较存在变化,则重新生成播放器 # 检查是否需要更新默认BGM列表
# 这个逻辑比较绕,因为存在【从没BGM的地图进入/离开没BGM地图】和【从没BGM的地图离开/进入有BGM的地图】等等好几种情况。当然还有优化空间,但是留给以后的我去想吧…… else
if(array_diff($clbpara['bgmbook'],$oldbook) || array_diff($oldbook,$clbpara['bgmbook']))
{ {
if(empty($clbpara['bgmbook']) || array_diff($clbpara['bgmbook'],$clbpara['valid_bgmbook']))
{
# 重置当前播放列表
$clbpara['bgmbook'] = $clbpara['valid_bgmbook'];
$force_update = 1; $force_update = 1;
} }
} }
...@@ -532,9 +539,9 @@ function init_bgm($force_update=0) ...@@ -532,9 +539,9 @@ function init_bgm($force_update=0)
$nowbgm = 0; $nowbgm = 0;
# 初始化首位BGM # 初始化首位BGM
shuffle($bgmarr); shuffle($bgmarr);
if(empty($bgmname))$bgmname = $bgmarr[0]['name']; $bgmname = $bgmarr[0]['name'];
if(empty($bgmlink)) $bgmlink = $bgmarr[0]['url']; $bgmlink = $bgmarr[0]['url'];
if(empty($bgmtype)) $bgmtype = $bgmarr[0]['type']; $bgmtype = $bgmarr[0]['type'];
#初始化默认音量 #初始化默认音量
$volume = isset($player_volume) ? $player_volume : $default_volume; $volume = isset($player_volume) ? $player_volume : $default_volume;
$volume_r = round($volume/100,2); $volume_r = round($volume/100,2);
......
...@@ -1866,6 +1866,19 @@ function itemuse($itmn) { ...@@ -1866,6 +1866,19 @@ function itemuse($itmn) {
//销毁物品 //销毁物品
$itm = $itmk = $itmsk = ''; $itm = $itmk = $itmsk = '';
$itme = $itms = 0; $itme = $itms = 0;
} elseif ($itm == '事件BGM替换器'){
// 这是一个触发事件BGM的案例,只要输入$clbpara['event_bgmbook'] = Array('事件曲集名'); 即可将当前曲集替换为特殊事件BGM
// 特殊事件曲集'event_bgmbook'的优先级高于地图曲集'pls_bgmbook',前者存在时后者不会生效
global $clbpara;
include_once config('audio',$gamecfg);
$log.="【DEBUG】你目前的播放列表被替换为了{$event_bgm['test'][0]}!<br>特殊的事件曲集不会被其他曲集覆盖,除非你使用下面的道具。<br>";
$clbpara['event_bgmbook'] = $event_bgm['test'];
} elseif ($itm == '事件BGM还原器'){
// 这是一个取消事件BGM的案例,只要unset($clbpara['event_bgmbook']);就可以将当前曲集替换为地图曲集或默认曲集;
// 如果你想播放另一个事件曲集,也可以$clbpara['event_bgmbook'] = Array('另一个事件曲集名');
global $clbpara;
$log.="【DEBUG】你目前的播放列表还原为了默认播放列表!<br>";
unset($clbpara['event_bgmbook']);
} elseif ($itm == '测试用元素口袋'){ } elseif ($itm == '测试用元素口袋'){
global $elements_info; global $elements_info;
$log.="【DEBUG】你不知道从哪里摸出来一大堆元素!<br>"; $log.="【DEBUG】你不知道从哪里摸出来一大堆元素!<br>";
...@@ -1922,15 +1935,6 @@ function itemuse($itmn) { ...@@ -1922,15 +1935,6 @@ function itemuse($itmn) {
$itm = $itmk = $itmsk = ''; $itm = $itmk = $itmsk = '';
$itme = $itms = 0; $itme = $itms = 0;
//-----------------------// //-----------------------//
} elseif ($itm == '电子蛐蛐测试装置') {
//这是一个测试用道具 设置好$nid(先手者pid)和$eid(挨打者pid)后可以看这两个人打架 把其中一个设置成自己的pid就可以亲自下场 //自己下场现在有BUG
//$nid:先手攻击者的pid;$eid:挨打者的pid
//如果$nid打死了$eid的话,尸体会由你来摸,这不是BUG,是一个暂时缺少条件判断的特性。
global $pid;
$nid = $pid; $eid = 2;
include_once GAME_ROOT.'./include/game/revcombat.func.php';
rev_combat_prepare($nid,$eid);
return;
} elseif ($itm == '提示纸条A') { } elseif ($itm == '提示纸条A') {
$log .= '你读着纸条上的内容:<br>“执行官其实都是幻影,那个红暮的身上应该有召唤幻影的玩意。”<br>“用那个东西然后打倒幻影的话能用游戏解除钥匙出去吧。”<br>'; $log .= '你读着纸条上的内容:<br>“执行官其实都是幻影,那个红暮的身上应该有召唤幻影的玩意。”<br>“用那个东西然后打倒幻影的话能用游戏解除钥匙出去吧。”<br>';
} elseif ($itm == '提示纸条B') { } elseif ($itm == '提示纸条B') {
......
...@@ -382,6 +382,7 @@ function search(){ ...@@ -382,6 +382,7 @@ function search(){
function discover($schmode = 0) { function discover($schmode = 0) {
global $art,$pls,$now,$log,$mode,$command,$cmd,$event_obbs,$weather,$pls,$club,$pose,$tactic,$inf,$item_obbs,$enemy_obbs,$trap_min_obbs,$trap_max_obbs,$bid,$db,$tablepre,$gamestate,$corpseprotect,$action,$skills,$rp,$aidata; global $art,$pls,$now,$log,$mode,$command,$cmd,$event_obbs,$weather,$pls,$club,$pose,$tactic,$inf,$item_obbs,$enemy_obbs,$trap_min_obbs,$trap_max_obbs,$bid,$db,$tablepre,$gamestate,$corpseprotect,$action,$skills,$rp,$aidata;
global $clbpara;
$event_dice = rand(0,99); $event_dice = rand(0,99);
if(($event_dice < $event_obbs)||(($art!="Untainted Glory")&&($pls==34)&&($gamestate != 50))){ if(($event_dice < $event_obbs)||(($art!="Untainted Glory")&&($pls==34)&&($gamestate != 50))){
//echo "进入事件判定<br>"; //echo "进入事件判定<br>";
...@@ -395,6 +396,18 @@ function discover($schmode = 0) { ...@@ -395,6 +396,18 @@ function discover($schmode = 0) {
} }
} }
# 判定移动、探索、事件后的BGM变化
include_once config('audio',$gamecfg);
if(array_key_exists($pls,$pls_bgm))
{
$clbpara['pls_bgmbook'] = $pls_bgm[$pls];
}
else
{
if(isset($clbpara['pls_bgmbook']))
unset($clbpara['pls_bgmbook']);
}
include_once GAME_ROOT. './include/game/aievent.func.php';//AI事件 include_once GAME_ROOT. './include/game/aievent.func.php';//AI事件
$aidata = false;//用于判断天然呆AI(冴冴这样的)是否已经来到你身后并且很生气 $aidata = false;//用于判断天然呆AI(冴冴这样的)是否已经来到你身后并且很生气
aievent(20);//触发AI事件的概率 aievent(20);//触发AI事件的概率
...@@ -520,7 +533,7 @@ function discover($schmode = 0) { ...@@ -520,7 +533,7 @@ function discover($schmode = 0) {
{ {
//echo "进入遇敌判定<br>"; //echo "进入遇敌判定<br>";
global $pid,$corpse_obbs,$teamID,$fog,$bid,$gamestate; global $pid,$corpse_obbs,$teamID,$fog,$bid,$gamestate;
global $clbpara,$clbstatusa,$clbstatusb,$clbstatusc,$clbstatusd,$clbstatuse; global $clbstatusa,$clbstatusb,$clbstatusc,$clbstatusd,$clbstatuse;
$result = $db->query("SELECT * FROM {$tablepre}players WHERE pls='$pls' AND pid!='$pid'"); $result = $db->query("SELECT * FROM {$tablepre}players WHERE pls='$pls' AND pid!='$pid'");
if(!$db->num_rows($result)){ if(!$db->num_rows($result)){
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment