game2006api/webapp/mt/MapMode.php
aozhiwei 1c429512b8 1
2024-10-24 15:47:11 +08:00

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;
}