16 卡牌服务端(自动开服相关;增加是否允许加入跨服标记,默认否;优化ServersConfig.json配置,支持后台导出,优化战斗服务器配置;服务器信息增加 GroupName、MapID、服务器类型、是否可跨服;)
| | |
| | | } |
| | | $signKey .= $callbackkey; |
| | | return md5($signKey); |
| | | } |
| | | } |
| | | |
| | | function GetBaseUrl() |
| | | { |
| | | $pageURL = 'http'; |
| | | if ($_SERVER["HTTPS"] == "on") { |
| | | $pageURL .= "s"; |
| | | } |
| | | $pageURL .= "://"; |
| | | if ($_SERVER["SERVER_PORT"] != "80") { |
| | | $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"]; |
| | | } else { |
| | | $pageURL .= $_SERVER["SERVER_NAME"]; |
| | | } |
| | | // . $_SERVER["REQUEST_URI"] |
| | | return $pageURL; |
| | | } |
| | | |
| | | /** |
| | | * 写入文件,如果目录不存在则自动创建 |
| | | * |
| | | * @param string $filepath 文件路径 |
| | | * @param mixed $data 要写入的数据 |
| | | * @param int $flags 可选 flags (同 file_put_contents) |
| | | * @return int|false 写入的字节数,失败返回 false |
| | | */ |
| | | function file_put_contents_mkdir($filepath, $data, $flags = 0) |
| | | { |
| | | $dir = dirname($filepath); // 获取文件所在目录 |
| | | if (!is_dir($dir)) { |
| | | // 递归创建目录,权限可自行调整 (例如 0755) |
| | | if (!mkdir($dir, 0755, true)) { |
| | | // 目录创建失败,可记录日志或触发错误 |
| | | trigger_error("无法创建目录: {$dir}", E_USER_WARNING); |
| | | return false; |
| | | } |
| | | } |
| | | return file_put_contents($filepath, $data, $flags); |
| | | } |
| | |
| | | include_once "/Account/User.php"; |
| | | include_once "/Account/userlogcomm.php"; |
| | | |
| | | /**服务器类型 */ |
| | | class ServerType |
| | | { |
| | | // 0主服,1子服,2跨服,3战斗服,4跨服中心 |
| | | const MainServer = 0; |
| | | const ClientServer = 1; |
| | | const CrossServer = 2; |
| | | // const BattleServer = 3; |
| | | const CrossCenter = 4; |
| | | static $ServerTypeName = array( |
| | | ServerType::MainServer => "主服", |
| | | ServerType::ClientServer => "子服", |
| | | ServerType::CrossServer => "跨服", |
| | | // ServerType::BattleServer => "战斗服", |
| | | ServerType::CrossCenter => "跨服中心", |
| | | ); |
| | | } |
| | | |
| | | /**服务器开放状态 */ |
| | | class ServerStatue |
| | | { |
| | |
| | | return $refreshJsonFileArray; |
| | | } |
| | | |
| | | /** |
| | | * 刷新ServersConfig.json |
| | | */ |
| | | function RefreshServersConfigJson($Channel) |
| | | { |
| | | if (!\CommFunc\GetConfig("ServerInfo", "PlayerCenterRoot", $PlayerCenterRoot)) { |
| | | return array(false, ""); |
| | | } |
| | | $saveJsonFile = $PlayerCenterRoot . "/Common/" . $Channel . "/ServersConfig.json"; |
| | | |
| | | \DBOper\Find("GameServers", array("Channel" => $Channel), $serverList); |
| | | \Logging\LogInfo("find db server count:" . count($serverList) . " Channel:" . $Channel); |
| | | #{serverID:[groupName,serverMapID, serverType], ...} |
| | | $saveArray = array(); |
| | | foreach ($serverList as $serverInfo) { |
| | | $serverID = $serverInfo["ServerID"]; |
| | | $groupName = $serverInfo["GroupName"]; |
| | | $serverMapID = $serverInfo["ServerMapID"]; |
| | | $serverType = $serverInfo["ServerType"]; |
| | | if (!$groupName || !$serverMapID) { |
| | | return array(false, "存在服务器ID未设置GroupName或地图: serverID=" . $serverID); |
| | | } |
| | | $saveArray["" . $serverID] = array($groupName, $serverMapID, $serverType); |
| | | } |
| | | |
| | | ksort($saveArray); |
| | | if (!\CommFunc\file_put_contents_mkdir($saveJsonFile, json_encode($saveArray))) { |
| | | return array(false, "刷新导出失败"); |
| | | } |
| | | \Logging\LogInfo("RefreshServersConfigJson Channel:" . $Channel . " saveJsonFile:" . $saveJsonFile); |
| | | return array(true, $saveJsonFile); |
| | | } |
| | | |
| | | function GetServerGroup($Channel) |
| | | { |
| | | if (!\CommFunc\GetConfig("ServerInfo", "PlayerCenterRoot", $PlayerCenterRoot)) { |
| New file |
| | |
| | | {"86":["severname",10010,0],"87":["severname",10020,0],"187":["severname",10030,0],"10000":["cxkf",10010,4],"10001":["cxkf",10010,2],"10002":["cxkf",10030,2]} |
| | |
| | | |
| | | ;自动开服限制时间范围列表,24小时制 [["从x时:分", "到x时:分"], ...] |
| | | AutoOpenServerLimitTimeRange = '[["23:30", "00:20"], ["01:00", "06:00"]]' |
| | | ;提前清档时间,单位分钟,【注】0点~0点x分时间开服的,统一0点清档,不然可能导致清档后0点又过天的问题;x=提前清档时间 |
| | | AheadClearDataTime = 15 |
| | | ;根据创角人数自动开服的满足条件后多久自动开服,单位分钟,需大于提前清档时间 |
| | | AutoOpenServerTimeByCreateRole = 20 |
| | | |
| | | ;媒体卡类型对应分组,目前用于越南版本运营公会分组 {"卡类型":"显示分组名", ...} |
| | | CoupontypeGroup = '{"g001":"公会1", "g002":"公会2"}' |
| | |
| | | DataServerPort=16901 |
| | | |
| | | [Popedom] |
| | | ;权限数 |
| | | ;权限数 |
| | | Popedom_count=2 |
| | | |
| | | ;权限1 |
| | | ;key:此权限的key |
| | | ;packtype:此权限包含的封包类型,以逗号分隔,如0101,0102 |
| | | ;注意:每个权限中的pack_types不能有重复的,如Popedom_1中的pack_types不能在Popedom_2中的pack_types |
| | | ;权限1 |
| | | ;key:此权限的key |
| | | ;packtype:此权限包含的封包类型,以逗号分隔,如0101,0102 |
| | | ;注意:每个权限中的pack_types不能有重复的,如Popedom_1中的pack_types不能在Popedom_2中的pack_types |
| | | [Popedom_1] |
| | | key=U1d4dmNrbFdQVDE9 |
| | | pack_types=GMT_AllDoubleBill,GMT_QDFLDoubleBill,GMT_GetCoinReq,GMT_ForbidLogin,GMT_UnForbidLogin,GMT_ForbidTalk,GMT_PlayerItemInfo,GMT_GetPlayerInfo,GMT_UnForbidTalk,GMT_GetFamilyInfo,GMT_GetPlayerForbid,GMT_BroadCast,GMT_KickPlayer,GMT_LockIP,GMT_UnLockIP,GMT_GetForbidInfo,GMT_FamilyDismiss,GMT_FamilyTransfer,GMT_MagicWeaponExp,GMT_QueryBillboard,GMT_QueryBillboardCross,GMT_ReloadConfig,GMT_QueryRoles,GMT_ClearTalkCache |
| | | |
| | | ;权限2 |
| | | ;权限2 |
| | | [Popedom_2] |
| | | key=VERCbmNrbFZQVDE9 |
| | | pack_types=GMT_ItemExpiation,GMT_MoneyExpiation,GMT_AddNewGuyCard,GMT_CardTypeInfo,GMT_NewGuyCardInfo,GMT_CTG,GMT_FreshmanGuide,GMT_BourseOnOff,GMT_AddEntireCompensation,GMT_AddPersonalCompensation,GMT_SetOpenServerTime,GMT_CompensationQuery,GMT_CompensationMgr,GMT_MediaCard,GMT_CrossServerMaintain,GMT_CrossClientServerMaintain,GMT_AddAuctionItem,GMT_AddTitle,GMT_CompensationQueryPersonal,GMT_CrossActServerIDChange,GMT_DelPlayerMoney,GMT_DelPlayerItem,GMT_RefixWorldLV,GMT_Execfile,GMT_SetGMLevel,GMT_CrossBattleChampionSet,GMT_AddPayCoin,GMT_ReloadPymongo,GMT_Worship,GMT_Face,GMT_CheckOpenServer,GMT_ClearBag |
| | | pack_types=GMT_ItemExpiation,GMT_MoneyExpiation,GMT_AddNewGuyCard,GMT_CardTypeInfo,GMT_NewGuyCardInfo,GMT_CTG,GMT_FreshmanGuide,GMT_BourseOnOff,GMT_AddEntireCompensation,GMT_AddPersonalCompensation,GMT_SetOpenServerTime,GMT_CompensationQuery,GMT_CompensationMgr,GMT_MediaCard,GMT_CrossServerMaintain,GMT_CrossClientServerMaintain,GMT_AddAuctionItem,GMT_AddTitle,GMT_CompensationQueryPersonal,GMT_CrossActServerIDChange,GMT_DelPlayerMoney,GMT_DelPlayerItem,GMT_RefixWorldLV,GMT_Execfile,GMT_SetGMLevel,GMT_CrossBattleChampionSet,GMT_AddPayCoin,GMT_ReloadPymongo,GMT_Worship,GMT_Face,GMT_CheckOpenServer,GMT_SetCanCross,GMT_ClearBag |
| | | |
| | |
| | | array(\User\Permission::P_QueryBillboard, "GMToolClient/queryBillboard.php", \Lang\gettext("查询实时排行榜")), |
| | | array(\User\Permission::P_QueryBillboardCross, "serverinfo/billboardhiscross.php", \Lang\gettext("查询跨服历史榜")), |
| | | array(\User\Permission::P_QueryBillboardCross, "GMToolClient/queryBillboardCross.php", \Lang\gettext("查询跨服排行榜")), |
| | | array(\User\Permission::P_MagicWeaponExp, "GMToolClient/magicWeaponExp.php", \Lang\gettext("法宝灵魂")), |
| | | // array(\User\Permission::P_MagicWeaponExp, "GMToolClient/magicWeaponExp.php", \Lang\gettext("法宝灵魂")), |
| | | ), |
| | | |
| | | \Lang\gettext("高级命令") => array( |
| | |
| | | array(\User\Permission::P_DelPlayerItem, "SuperGMToolClient/DelPlayerItem.php", \Lang\gettext("扣除玩家物品")), |
| | | array(\User\Permission::P_Face, "SuperGMToolClient/Face.php", \Lang\gettext("头像管理")), |
| | | array(\User\Permission::P_AddTitle, "SuperGMToolClient/AddTitle.php", \Lang\gettext("称号管理")), |
| | | array(\User\Permission::P_Worship, "SuperGMToolClient/Worship.php", \Lang\gettext("膜拜管理")), |
| | | // array(\User\Permission::P_Worship, "SuperGMToolClient/Worship.php", \Lang\gettext("膜拜管理")), |
| | | array(\User\Permission::P_SetGMLevel, "SuperGMToolClient/SetGMLevel.php", \Lang\gettext("设置玩家GM")), |
| | | array(\User\Permission::P_AddAuctionItem, "SuperGMToolClient/AddAuctionItem.php", \Lang\gettext("上架拍品")), |
| | | array(\User\Permission::P_RefixWorldLV, "SuperGMToolClient/RefixWorldLV.php", \Lang\gettext("纠正世界等级")), |
| | | // array(\User\Permission::P_AddAuctionItem, "SuperGMToolClient/AddAuctionItem.php", \Lang\gettext("上架拍品")), |
| | | // array(\User\Permission::P_RefixWorldLV, "SuperGMToolClient/RefixWorldLV.php", \Lang\gettext("纠正世界等级")), |
| | | // array(\User\Permission::GMT_FreshmanGuide, "SuperGMToolClient/freshmanGuide.html", \Lang\gettext("新手指导员")), |
| | | array(\User\Permission::P_BourseOnOff, "SuperGMToolClient/BourseOnOff.php", \Lang\gettext("交易所开关")), |
| | | array(\User\Permission::P_CrossActServerIDChange, "SuperGMToolClient/CrossActServerIDChange.php", \Lang\gettext("跨服活动区服ID修改")), |
| | | array(\User\Permission::P_CrossBattleChampionSet, "SuperGMToolClient/CrossBattleChampionSet.php", \Lang\gettext("跨服战场冠军赛")), |
| | | // array(\User\Permission::P_BourseOnOff, "SuperGMToolClient/BourseOnOff.php", \Lang\gettext("交易所开关")), |
| | | // array(\User\Permission::P_CrossActServerIDChange, "SuperGMToolClient/CrossActServerIDChange.php", \Lang\gettext("跨服活动区服ID修改")), |
| | | // array(\User\Permission::P_CrossBattleChampionSet, "SuperGMToolClient/CrossBattleChampionSet.php", \Lang\gettext("跨服战场冠军赛")), |
| | | array(\User\Permission::P_Execfile, "SuperGMToolClient/Execfile.php", \Lang\gettext("执行命令")), |
| | | ), |
| | | |
| New file |
| | |
| | | <?php |
| | | include_once "/Common/Logging.php"; |
| | | include_once "/Account/User.php"; |
| | | include_once "/Common/ServerOPS.php"; |
| | | include_once "/Common/CommFunc.php"; |
| | | include_once "/language/lang.php"; |
| | | |
| | | \Logging\CreateLogging("serverops.refreshServersConfig.php"); |
| | | |
| | | $Permission = \User\Permission::P_OPSRefreshServer; |
| | | $channel = $_SESSION['spid']; |
| | | $user = new \User\User($_SESSION['UserAccount']); |
| | | if (!$user->HavePermission($Permission)) { |
| | | exit; |
| | | } |
| | | |
| | | $ret = \ServerOPS\RefreshServersConfigJson($channel); |
| | | $isOK = $ret[0]; |
| | | $msg = $ret[1]; |
| | | |
| | | ?> |
| | | |
| | | <html> |
| | | |
| | | <head> |
| | | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> |
| | | <title><?php echo \Lang\gettext("刷新ServersConfigJson"); ?></title> |
| | | </head> |
| | | |
| | | <body> |
| | | <center> |
| | | <p><b><?php echo \Lang\gettext("刷新ServersConfigJson"); ?></b></P> |
| | | </center> |
| | | <?php |
| | | if ($isOK) { |
| | | echo \Lang\gettext("刷新成功!导出文件"), ":<br/><br/>"; |
| | | } else { |
| | | echo \Lang\gettext("刷新失败"), "<br/><br/>"; |
| | | } |
| | | echo $msg . "<br/>"; |
| | | ?> |
| | | </body> |
| | | |
| | | </html> |
| | |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="formTableTDName">GroupName: </td> |
| | | <td class="formTableTDValue"> |
| | | <input type="text" name="GroupName" id="GroupName" value="<?php echo array_key_exists("GroupName", $editInfo) ? $editInfo["GroupName"] : "severname" ?>" /> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="formTableTDName">所在地图ID: </td> |
| | | <td class="formTableTDValue"> |
| | | <input type="number" name="ServerMapID" id="ServerMapID" value="<?php echo array_key_exists("ServerMapID", $editInfo) ? $editInfo["ServerMapID"] : 10010 ?>" /> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="formTableTDName">服务器类型: </td> |
| | | <td class="formTableTDValue"> |
| | | <select name="ServerType" id="ServerType"> |
| | | <?php |
| | | $selected = array_key_exists("ServerType", $editInfo) ? $editInfo["ServerType"] : \ServerOPS\ServerType::MainServer; |
| | | foreach (\ServerOPS\ServerType::$ServerTypeName as $key => $value) { |
| | | echo "<option value='" . $key . "'"; |
| | | if ($key == $selected) { |
| | | echo " selected"; |
| | | } |
| | | echo ">" . $value . "</option>"; |
| | | } |
| | | ?> |
| | | </select> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="formTableTDName">是否可跨服: </td> |
| | | <td class="formTableTDValue"> |
| | | <select name="CanCross" id="CanCross" onchange="OnSelectCanCross(this.value)"> |
| | | <?php |
| | | $selected = array_key_exists("CanCross", $editInfo) ? $editInfo["CanCross"] : 0; |
| | | foreach (array("不允许", "允许", "查询") as $key => $value) { |
| | | echo "<option value='" . $key . "'"; |
| | | if ($key == $selected) { |
| | | echo " selected"; |
| | | } |
| | | echo ">" . $value . "</option>"; |
| | | } |
| | | ?> |
| | | </select> |
| | | <div id="CanCrossTips" /> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="formTableTDName">所属主服: </td> |
| | | <td class="formTableTDValue"> |
| | | <input type="number" name="MainServerID" id="MainServerID" value="<?php echo array_key_exists("MainServerID", $editInfo) ? $editInfo["MainServerID"] : "" ?>" size="50" placeholder="选填,设置合服所属主服" /> |
| | |
| | | ); |
| | | } |
| | | |
| | | function OnSelectCanCross(state) { |
| | | var tips = document.getElementById("CanCrossTips"); |
| | | var ServerType = document.getElementById("ServerType").value; |
| | | if (ServerType != 0) { |
| | | tips.innerHTML = "非主服不需要处理跨服状态"; |
| | | return |
| | | } |
| | | var channel = '<?php echo $channel ?>'; |
| | | var serverID = '<?php echo $ServerID ?>'; |
| | | if (serverID == 0) { |
| | | document.getElementById("CanCross").value = 0; |
| | | tips.innerHTML = "新建服务器只能默认不可跨服"; |
| | | return |
| | | } |
| | | tips.innerHTML = "请求中..."; |
| | | tips.errTips = 1; |
| | | ajaxRequest("setCanCross.php?channel=" + channel + "&serverID=" + serverID + "&setValue=" + state, |
| | | function(xmlhttp) { |
| | | var br = getbr(); |
| | | var res = JSON.parse(xmlhttp.responseText); |
| | | var errMsg = res.errMsg; |
| | | var canCross = res.canCross; |
| | | tips.innerHTML = ""; |
| | | var errTips = "请求失败"; |
| | | if (errMsg == "OK") { |
| | | errTips = canCross == 1 ? "允许" : "不允许"; |
| | | document.getElementById("CanCross").value = canCross; |
| | | } |
| | | |
| | | if (errMsg != "OK") { |
| | | tips.insertAdjacentHTML("beforeEnd", "<font color='red'>" + errTips + "</font>"); |
| | | tips.errTips = 1; |
| | | } else { |
| | | tips.insertAdjacentHTML("beforeEnd", "请求成功:" + errTips); |
| | | tips.errTips = 0; |
| | | } |
| | | }, |
| | | ); |
| | | } |
| | | |
| | | function CheckSubmit() { |
| | | if (!document.getElementById("ServerID").value || document.getElementById("ServerID").value <= 0) { |
| | | alert("请输入大于0服务器ID!"); |
| | |
| | | return false; |
| | | } |
| | | } |
| | | var canCrossTips = document.getElementById("CanCrossTips"); |
| | | if (canCrossTips.errTips == 1) { |
| | | alert("设置是否允许跨服异常,无法提交!"); |
| | | document.getElementById('CanCrossTips').focus(); |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | </script> |
| | |
| | | $LoginPort = intval($_POST["LoginPort"]); |
| | | $GamePort = intval($_POST["GamePort"]); |
| | | $MainServerID = intval($_POST["MainServerID"]); |
| | | $GroupName = $_POST["GroupName"]; |
| | | $ServerMapID = intval($_POST["ServerMapID"]); |
| | | $ServerType = intval($_POST["ServerType"]); |
| | | $CanCross = intval($_POST["CanCross"]); |
| | | |
| | | $find = array( |
| | | "Channel" => $channel, |
| | |
| | | "LoginPort" => $LoginPort, |
| | | "GamePort" => $GamePort, |
| | | "MainServerID" => $MainServerID, |
| | | "GroupName" => $GroupName, |
| | | "ServerMapID" => $ServerMapID, |
| | | "ServerType" => $ServerType, |
| | | "CanCross" => $CanCross, |
| | | ); |
| | | |
| | | // 添加 |
| | |
| | | |
| | | //显示表格字段配置 key-参数名,value-说明 |
| | | $tableArray = array( |
| | | "ServerID" => array("区服", "5%", "center"), |
| | | "ServerName" => array("名称", "10%", "center"), |
| | | "JsonBranch" => array("导出Json分支文件", "14%", "center"), |
| | | "ServerID" => array("区服", "4%", "center"), |
| | | "ServerName" => array("名称", "6%", "center"), |
| | | "JsonBranch" => array("分支", "3%", "center"), |
| | | "StartDate" => array("开服时间", "11%", "center"), |
| | | "ClearState" => array("清档状态", "5%", "center"), |
| | | "Statue" => array("开放状态", "5%", "center"), |
| | | "RunningStatus" => array("运行状态", "5%", "center"), |
| | | "Recommend" => array("推荐", "3%", "center"), |
| | | "RegionDomain" => array("域名", "19%", "center"), |
| | | "RegionDomain" => array("域名", "16%", "center"), |
| | | "LoginPort" => array("登录端口", "5%", "center"), |
| | | "GamePort" => array("游戏端口", "5%", "center"), |
| | | "GroupName" => array("物理机组", "6%", "GroupName"), |
| | | "ServerMapID" => array("地图", "4%", "ServerMapID"), |
| | | "ServerType" => array("类型", "5%", "ServerType"), |
| | | "CanCross" => array("可跨服", "4%", "CanCross"), |
| | | "MainServerID" => array("所属主服", "5%", "center"), |
| | | "" => array("操作", ""), |
| | | ); |
| | |
| | | <input type="button" value="新建服务器" onclick="window.location.href='serverEdit.php?opType=add'" /> |
| | | <input type="button" value="区服分组" onclick="window.location.href='serverGroup.php'" /> |
| | | <input type="button" value="刷新选服列表" onclick="window.location.href='refreshServerJson.php'" /> |
| | | <input type="button" value="刷新ServersConfig.json" onclick="window.location.href='refreshServersConfig.php'" /> |
| | | | |
| | | |
| | | </select> |
| | |
| | | } |
| | | } else if ($key == "Recommend") { |
| | | $tdContent = $tdContent == 1 ? "是" : "否"; |
| | | } else if ($key == "CanCross") { |
| | | $tdContent = $tdContent == 1 ? "是" : "否"; |
| | | } else if ($key == "ServerType") { |
| | | $tdContent = \ServerOPS\ServerType::$ServerTypeName[$tdContent]; |
| | | } elseif ($key == "JsonBranch") { |
| | | $tdContent = \ServerOPS\GetCommonServerlistJsonFileName($channel, $tdContent); |
| | | #$tdContent = \ServerOPS\GetCommonServerlistJsonFileName($channel, $tdContent); |
| | | } elseif ($key == "StartDate") { |
| | | $OpenServerWay = $serverInfo["OpenServerWay"]; |
| | | $RelationServerID = $serverInfo["RelationServerID"]; |
| New file |
| | |
| | | <?php |
| | | include_once "/Common/Logging.php"; |
| | | include_once "/Common/CommFunc.php"; |
| | | |
| | | $channel = $_GET["channel"]; |
| | | $serverID = intval($_GET["serverID"]); |
| | | $setValue = $_GET["setValue"]; |
| | | |
| | | \Logging\CreateLogging("serverops.setCanCross.php"); |
| | | |
| | | \Logging\LogInfo("_GET:" . print_r($_GET, true)); |
| | | // 设置可否允许加入跨服 |
| | | $packData = array("setValue" => $setValue); |
| | | $retList = \CommFunc\SendGMTToGameServers(True, "GMT_SetCanCross", $packData, $channel, array($serverID)); |
| | | \Logging\LogInfo("retList:" . print_r($retList, true)); |
| | | if (!is_array($retList)) { |
| | | echo "{}"; |
| | | exit; |
| | | } |
| | | $ret = json_decode($retList[$serverID], true); |
| | | if (!$ret || !array_key_exists("ResultType", $ret)) { |
| | | echo "{}"; |
| | | exit; |
| | | } |
| | | echo json_encode($ret["ResultMsg"]); |
| | |
| | | function OnMinute($minuteStr) |
| | | { |
| | | \Logging\LogInfo("Todo OnMinute: " . $minuteStr); |
| | | checkAutoOpenServer(); |
| | | checkAutoOpenServer_ByCreateRole(); |
| | | checkPreOpenServer(); |
| | | checkOpenServerTime(); |
| | | checkOpenServer_ClearData(); // 同步清档 |
| | | } |
| | | |
| | | //========================================================================================================== |
| | | /** |
| | | * 检查自动服务器信息,每分钟处理一次 |
| | | * 自动开服流程 |
| | | * 1. 设置预开服方式(设置开放服务器入口时间) |
| | | * 1.1 直接设置开服时间(开放入口时间) |
| | | * 1.2 设置根据某个服务器创角人数满足x人后开服,满足条件后会根据配置 AutoOpenServerTimeByCreateRole 设置开服时间,同 1.1 的开服时间 |
| | | * |
| | | * 2. 根据最终的开服时间/开放入口时间同步游戏服提前清档 - 游戏服的实际开服时间 |
| | | * |
| | | * 3. 根据预开服时间及清档状态验证满足后开放入口,同时会验证游戏服相关状态是否满足 checkOpenServer (游戏版本、开服天等) |
| | | * |
| | | */ |
| | | function checkAutoOpenServer() |
| | | /** |
| | | * 检查自动服务器信息,每分钟处理一次,根据关联的服务器创角人数满足条件后自动设置预开服时间 |
| | | */ |
| | | function checkAutoOpenServer_ByCreateRole() |
| | | { |
| | | $curDate = getdate(); |
| | | $dateStr = $curDate['year'] . "-" . $curDate['mon'] . "-" . $curDate['mday']; |
| | | \Logging\LogInfo("=== Do checkAutoOpenServer ==="); |
| | | \Logging\LogInfo("=== Do checkAutoOpenServer_ByCreateRole ==="); |
| | | // 设定时间范围 如21-24点 不会自动开服 |
| | | CommFunc\GetConfig("ServerInfo", "AutoOpenServerLimitTimeRange", $AutoOpenServerLimitTimeRange); |
| | | $limitTimeList = json_decode($AutoOpenServerLimitTimeRange); |
| | |
| | | } |
| | | |
| | | // 达到条件后多少分钟后入口开放,分钟,需要预留清档缓冲时间,需大于提前清档时间,目前是提前15分钟清档 |
| | | $setStartDate = \CommFunc\TimeToStrDateTime(strtotime("+20 minutes")); |
| | | CommFunc\GetConfig("ServerInfo", "AutoOpenServerTimeByCreateRole", $AutoOpenServerTimeByCreateRole); |
| | | $setStartDate = \CommFunc\TimeToStrDateTime(strtotime("+" . $AutoOpenServerTimeByCreateRole . " minutes")); |
| | | \Logging\LogInfo("setStartDate." . $setStartDate); |
| | | |
| | | $serverCreateRoleInfo = array(); |
| | |
| | | return; |
| | | } |
| | | |
| | | $x7notifyserverInfo = array(); |
| | | // $x7notifyserverInfo = array(); |
| | | $refrshJsonBranchArray = array(); |
| | | |
| | | $curTime = strtotime(date("Y-m-d H:i:s", time())); |
| | |
| | | } |
| | | |
| | | // 进一步检查最新服务器开服状态是否正常 |
| | | $checkUrl = "http://127.0.0.1/serverops/checkOpenServer.php"; |
| | | $baseUrl = CommFunc\GetBaseUrl(); |
| | | $checkUrl = $baseUrl . "/serverops/checkOpenServer.php"; |
| | | $retStr = \CommFunc\DoGet($checkUrl, array("channel" => $Channel, "serverID" => $ServerID)); |
| | | $checkRet = json_decode($retStr, true); |
| | | if (!isset($checkRet) || !array_key_exists("errMsg", $checkRet) || $checkRet["errMsg"] != "OK") { |
| | |
| | | "RunningStatus" => \ServerOPS\ServerRunningStatus::Light, |
| | | "Statue" => \ServerOPS\ServerStatue::Open, |
| | | "Recommend" => 1, // 新开放入口服默认推荐 |
| | | "CanCross" => 1, // 自动开服的开放入口默认设置为可跨服,游戏服在自动开服清档时也是默认设置为可跨服 |
| | | ); |
| | | if (\DBOper\Update("GameServers", $find, $set)) { |
| | | \Logging\LogInfo("set server open ok." . print_r($serverInfo, true)); |
| | |
| | | "Channel" => $Channel, |
| | | "ServerID" => array('$nin' => array($ServerID)) |
| | | ), array("Recommend" => 0), false, false, true); |
| | | // 通知sp服务器开放 |
| | | \CommFunc\DoPost("http://127.0.0.1/serverops/hy/report_server.php", array("channel" => $Channel, "server_id" => $ServerID)); |
| | | // 【通知sp服务器开放】 |
| | | // \CommFunc\DoPost("http://127.0.0.1/serverops/hy/report_server.php", array("channel" => $Channel, "server_id" => $ServerID)); |
| | | } else { |
| | | \Logging\LogError("set server open error." . print_r($serverInfo, true)); |
| | | } |
| | |
| | | array_push($refrshJsonBranchArray, $refreshBranch); |
| | | } |
| | | |
| | | if (\CommFunc\GetConfig("x7", "JsonBranch_" . $Channel, $branch) && $branch == $JsonBranch) { |
| | | if (!array_key_exists($Channel, $x7notifyserverInfo)) { |
| | | $x7notifyserverInfo[$Channel] = array(); |
| | | } |
| | | $x7notifyserverList = $x7notifyserverInfo[$Channel]; |
| | | array_push($x7notifyserverList, $serverInfo); |
| | | $x7notifyserverInfo[$Channel] = $x7notifyserverList; |
| | | } |
| | | // if (\CommFunc\GetConfig("x7", "JsonBranch_" . $Channel, $branch) && $branch == $JsonBranch) { |
| | | // if (!array_key_exists($Channel, $x7notifyserverInfo)) { |
| | | // $x7notifyserverInfo[$Channel] = array(); |
| | | // } |
| | | // $x7notifyserverList = $x7notifyserverInfo[$Channel]; |
| | | // array_push($x7notifyserverList, $serverInfo); |
| | | // $x7notifyserverInfo[$Channel] = $x7notifyserverList; |
| | | // } |
| | | } |
| | | |
| | | \Logging\LogInfo("refrshJsonBranchArray." . print_r($refrshJsonBranchArray, true)); |
| | |
| | | \ServerOPS\RefreshCommonServerlistJson($refreshBranch["Channel"], $refreshBranch["JsonBranch"], "System"); |
| | | } |
| | | |
| | | foreach ($x7notifyserverInfo as $Channel => $x7notifyserverList) { |
| | | x7_common_serverNotify($Channel, $x7notifyserverList); |
| | | } |
| | | // foreach ($x7notifyserverInfo as $Channel => $x7notifyserverList) { |
| | | // x7_common_serverNotify($Channel, $x7notifyserverList); |
| | | // } |
| | | } |
| | | |
| | | function x7_common_serverNotify($appid, $notifyserverList) |
| | |
| | | send_common_to_x7($serverNotifyUrl, $bizParams, $appkey, $prikey, $pubkey, $apiMethod); |
| | | } |
| | | |
| | | function checkOpenServerTime() |
| | | function checkOpenServer_ClearData() |
| | | { |
| | | \Logging\LogInfo("=== Do checkOpenServerTime ==="); |
| | | \Logging\LogInfo("=== Do checkOpenServer_ClearData ==="); |
| | | // 找出所有未清档服务器 |
| | | \DBOper\Find("GameServers", array("ClearState" => 0), $serverList); |
| | | |
| | |
| | | return; |
| | | } |
| | | |
| | | $aheadClearMin = 15; // 提前清档时间,分钟,0点~0点x分钟,统一0点清档,不然可能导致清档后0点又过天的问题;x=提前清档时间 |
| | | // 提前清档时间,分钟,0点~0点x分钟,统一0点清档,不然可能导致清档后0点又过天的问题;x=提前清档时间 |
| | | CommFunc\GetConfig("ServerInfo", "AheadClearDataTime", $aheadClearMin); |
| | | $aheadSyncMin = 15; // 相对清档时间提前同步设置清档时间,分钟 |
| | | |
| | | $curTime = strtotime(date("Y-m-d H:i:s", time())); |