163 lines
4.8 KiB
PHP
163 lines
4.8 KiB
PHP
<?php
|
|
|
|
namespace mt;
|
|
|
|
require_once('mt/ServerTaskTime.php');
|
|
require_once('mt/RankSeason.php');
|
|
|
|
class MapMode
|
|
{
|
|
const PRACTICE_MODE = 101;
|
|
const GOLD_MODE = 201;
|
|
const BET_MODE = 301;
|
|
const RANKING_MODE = 401;
|
|
const TREASURE_BOX_MODE = 501;
|
|
const CIRCUIT_MODE = 601;
|
|
|
|
public static function find($id){
|
|
return getXVal(self::getMetaList(), $id);
|
|
}
|
|
|
|
public static function findByMapMode($modeId){
|
|
foreach (self::getMetaList() as $meta){
|
|
if ($meta['mapMode'] == $modeId){
|
|
return $meta;
|
|
}
|
|
}
|
|
return array();
|
|
}
|
|
|
|
public static function traverseMeta($cb)
|
|
{
|
|
foreach (self::getMetaList() as $meta) {
|
|
if (!$cb($meta)) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static function checkLimitTime($meta)
|
|
{
|
|
if (self::configedDailyTimeLimit1($meta) || self::configedDailyTimeLimit2($meta)) {
|
|
$matchTimes = 0;
|
|
if (self::configedDailyTimeLimit1($meta)) {
|
|
if (myself()->_inTimeRangeStr($meta['daily_open_time'], $meta['daily_end_time'])) {
|
|
++$matchTimes;
|
|
}
|
|
}
|
|
if (self::configedDailyTimeLimit2($meta)) {
|
|
if (myself()->_inTimeRangeStr($meta['daily_open_time_2'], $meta['daily_end_time_2'])) {
|
|
++$matchTimes;
|
|
}
|
|
}
|
|
if ($matchTimes <= 0) {
|
|
return false;
|
|
}
|
|
}
|
|
switch ($meta['limit_time']) {
|
|
case 1:
|
|
{
|
|
if ($meta['mapMode'] == self::RANKING_MODE) {
|
|
$currentSeasonMeta = RankSeason::getCurrentSeason();
|
|
if (empty($currentSeasonMeta)) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
/*
|
|
case 2:
|
|
{
|
|
if ($meta['mapMode'] == self::TREASURE_BOX_MODE) {
|
|
$currentServerTask = ServerTaskTime::getCurrentTime();
|
|
if (empty($currentServerTask)) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
break;*/
|
|
default:
|
|
{
|
|
return true;
|
|
}
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static function isOpen($meta)
|
|
{
|
|
if (!$meta['is_open']) {
|
|
return false;
|
|
}
|
|
$isOpen = true;
|
|
switch ($meta['mapMode']) {
|
|
case self::GOLD_MODE:
|
|
{
|
|
$isOpen = myself()->_switchIsOpen('goldMode');
|
|
}
|
|
break;
|
|
case self::BET_MODE:
|
|
{
|
|
$isOpen = myself()->_switchIsOpen('bountyMode');
|
|
}
|
|
break;
|
|
case self::TREASURE_BOX_MODE:
|
|
{
|
|
$isOpen = myself()->_switchIsOpen('bigEventMode');
|
|
}
|
|
break;
|
|
default:
|
|
{
|
|
}
|
|
break;
|
|
}
|
|
return $isOpen;
|
|
}
|
|
|
|
public static function configedDailyTimeLimit1($meta) {
|
|
return !empty($meta['daily_open_time']) && !empty($meta['daily_end_time']);
|
|
}
|
|
|
|
public static function configedDailyTimeLimit2($meta) {
|
|
return !empty($meta['daily_open_time_2']) && !empty($meta['daily_end_time_2']);
|
|
}
|
|
|
|
public static function getCurrentBoxDropInfo(&$mapModeMeta, &$phase, &$startTime, &$endTime)
|
|
{
|
|
self::traverseMeta(function ($meta)
|
|
use (&$mapModeMeta, &$phase, &$startTime, &$endTime) {
|
|
if ($meta['mapMode'] == self::TREASURE_BOX_MODE) {
|
|
if (self::configedDailyTimeLimit1($meta) &&
|
|
myself()->_inTimeRangeStr($meta['daily_open_time'], $meta['daily_end_time'])) {
|
|
$mapModeMeta = $meta;
|
|
$phase = 1;
|
|
$startTime = myself()->_getDaySecondsOffset(strtotime("2024-6-22 ". $meta['daily_open_time']));
|
|
$endTime = myself()->_getDaySecondsOffset(strtotime("2024-6-22 ". $meta['daily_end_time']));
|
|
return false;
|
|
}
|
|
if (self::configedDailyTimeLimit2($meta) &&
|
|
myself()->_inTimeRangeStr($meta['daily_open_time_2'], $meta['daily_end_time_2'])) {
|
|
$mapModeMeta = $meta;
|
|
$phase = 2;
|
|
$startTime = myself()->_getDaySecondsOffset(strtotime("2024-6-22 ". $meta['daily_open_time_2']));
|
|
$endTime = myself()->_getDaySecondsOffset(strtotime("2024-6-22 ". $meta['daily_end_time_2']));
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
});
|
|
}
|
|
|
|
protected static function getMetaList()
|
|
{
|
|
if (!self::$metaList) {
|
|
self::$metaList = getMetaTable('mapMode@mapMode.php');
|
|
}
|
|
return self::$metaList;
|
|
}
|
|
|
|
protected static $metaList;
|
|
|
|
}
|