<?php

namespace loyalsoft;

//
///**
// * Description of MapProc
// * 地图数据处理逻辑
// * @author gwang
// */
//class MapProc {
//
//    /**
//     * 地图处理逻辑分发
//     * 所有的Proc中必须有这样一个方法
//     */
//    static function procMain() {
//        switch (req()->cmd) {
//            case CmdCode::map_EnterFootHold:                                    #  [7501] 进入地图
//                return self::EnterFootHold();
//            case CmdCode::map_FixUpTransmission:                                #  [7502] 开启传送阵
//                return self::FixUpTransmision();
//            case CmdCode::map_UpdateExplorerationProgress:                      #  [7503] 更新探索进度
//                return self::UpdateExplorationProgress();
//            case CmdCode::map_UnlockMap:                                        #  [7504] 解锁地图
//                return self::UnlockMap();
////            case CmdCode::map_getUnlockInfoList:                              #  [7505] 获取mapid下已经解锁的列表
////                return self::getUnlockInfoList();
//            case CmdCode::map_unlockInfoSva:                                    #  [7505] 保存mapid下已经解锁的
//                return self::unlockInfoSva();
//            case CmdCode::map_reviceExplorerReward:                             #  [7506] 领取探索奖励cmd_store_huichengQuanUse
//                return self::reviceExplorerReward();
//            case CmdCode::map_huichengQuanUse:                                  #  [7507]
//                return self::huichengQuanUse();
//            case CmdCode::map_huichengQuanEnd:                                  #  [7508]
//                return self::huichengQuanEnd();
//            default:                                                            #  err: 未知的命令码
//                return Resp::err(ErrCode::cmd_err);
//        }
//    }
//
//    /**
//     * [7507]
//     * @return Resp
//     */
//    public static function huichengQuanUse() {
//        $mapId = req()->paras[0]; #使用传送门的场景的地图id
//        $x = req()->paras[1];                                              # 提取参数
//        $y = req()->paras[2];
//        $z = req()->paras[3];
//        $newMap = ctx()->newMap(true);
//        //$curMapId = $newMap->curMapId;
//
//        $itemId = 0;
//        $dic = ctx()->store()->items;
//        foreach ($dic as $id => $num) {
//            $subType = GameConfig::item_base_getItem($id)->subType;
//            if ($subType == 344) {
//                $itemId = $id;
//                break;
//            }
//        }
//        my_Assert($itemId != 0, ErrCode::err_const_no);
//
//        StoreProc::removeItemFromStore(ctx()->store, $itemId);
//        //找据点，地图在gate_zone里有配置；没有的就算是副本--暂时先这么着
////        $gateZone = GameConfig::gate_zone();
////        my_Assert($gateZone != null, ErrCode::err_const_no);
////        foreach ($gateZone as $zoneid => $val) {
////            $list = explode(',', $val->contains);
////            if(in_array($curMapId, $list)){
////                $mid = $list[0];
////                break;
////            }
////        }
//        $curFootholdId = $newMap->curFootholdId;
//        if ($curFootholdId == null) {
//            $curFootholdId = 503099;
//        }
//        $newMap->curMapId = $curFootholdId;
//
//        $data = new Ins_ChuansongzhenMapData();
//        $data->mapId = $curFootholdId;
//        $data->lastMapId = $mapId;
//        $data->position_x = $x;
//        $data->position_y = $y;
//        $data->position_z = $z;
//        $newMap->huichengquanRecord->$mapId = $data;
//
//        $newMap->lastMapId = $mapId;
//
//        ctx()->newMap = $newMap;
//
//        UserProc::updateUserInfo();
//        return Resp::ok(
//                        array("newMap" => $newMap,)
//        );
//    }
//
//    /**
//     * [7508] 回城券的传送阵结束
//     * @return Resp
//     */
//    public static function huichengQuanEnd() {
//        //$mapid = req()->paras[0];                                               # 提取参数
//        $newMap = ctx()->newMap();
//        $curMapId = $newMap->curMapId;
//
//        $lastMapid = $newMap->lastMapId;
////        $lastMapid = $curMapId;
////        $gateZone = GameConfig::gate_zone();
////        my_Assert($gateZone != null, ErrCode::err_const_no);
////        foreach ($gateZone as $zoneid => $val) {
////            $list = explode(',', $val->contains);
////            if(in_array($curMapId, $list)){
////                $lastMapid = $list[0];
////                break;
////            }
////        }
//
//
//
//        if (StlUtil::dictHasProperty($newMap->huichengquanRecord, $lastMapid)) {
//            StlUtil::dictRemove($newMap->huichengquanRecord, $lastMapid);
//        }
//
//        ctx()->newMap = $newMap;
//
//        UserProc::updateUserInfo();
//        return Resp::ok(
//                        array("newMap" => $newMap,)
//        );
//    }
//
//    /**
//     * [7506] 领取探索奖励
//     * @return Resp
//     */
//    public static function reviceExplorerReward() {
//        $mapid = req()->paras[0];                                               # 提取参数
//        $newMap = ctx()->newMap();
//
//        $newMap->unlockedFootholds->$mapid->exploreRewardGeted = true;
//
//        $cost = GameConfig::gate_getItem($mapid)->exploreReward;
//        StoreProc::AddMultiItemInStore($cost);
//        ctx()->newMap = $newMap;
//
//        UserProc::updateUserInfo();
//        return Resp::ok(
//                        array("newMap" => $newMap, "cost" => $cost,)
//        );
//    }
//
//    /**
//     * 7505
//     * @return Resp
//     */
//    public static function unlockInfoSva() {
//        $unlockStr = req()->paras[0];                                           # 提取参数
//        $newMap = ctx()->newMap();
//        if (!StlUtil::dictHasProperty($newMap, 'unlockMapTypeList')) {
//            $newMap->unlockMapTypeList = new \stdClass();
//        }
//
//        $mapid = explode('_', $unlockStr)[0];
//        $type = explode('_', $unlockStr)[1];
//        $typeid = explode('_', $unlockStr)[2];
//        if (!StlUtil::dictHasProperty($newMap->unlockMapTypeList, $mapid)) {
//            $newMap->unlockMapTypeList->$mapid = array();
//        }
//        $tag = 1;
//        $tylist = $newMap->unlockMapTypeList->$mapid;
//        foreach ($tylist as $str) {
//            $slist = explode('_', $str);
//            if ($slist[0] == $mapid && $slist[1] == $type && $slist[2] == $typeid) {
//                $tag = 0;
//                break;
//            }
//        }
//        $num = 0;
//        if ($tag) {
//            $newMap->unlockMapTypeList->$mapid[] = $unlockStr;
//
//            my_Assert(StlUtil::dictHasProperty($newMap->unlockedFootholds, $mapid), ErrCode::map_Unlocked);
//
//            $newMap->curMapId = $mapid;
//
//            $arr = self::countFootHoldExplorerNum($mapid, $type, $typeid, $newMap);
//            $explorerNum = $arr[0];
//            $num = $arr[1];
//            $newMap->unlockedFootholds->$mapid->curExploreProgress = $explorerNum;
//
//            if ($type == Enum_ExploreType::Npc && $newMap->unlockedFootholds->$mapid->transmissionIsOk == false) {
//                $subtype = GameConfig::npc_getItem($typeid)->subtype;
//                if ($subtype == Enum_ExploreSubType::Teleporter) {//传送带
//                    $newMap->unlockedFootholds->$mapid->transmissionIsOk = true;
//                }
//            }
//
//            $mapArr = GameConfig::map_explorer_getItemArray($mapid);
//            foreach ($mapArr as $mapItem) {
//                $paras = explode(',', $mapItem->paras);
//                if ($mapItem->cmd == $type && $paras[0] == $typeid) {
//                    ctx()->base(true)->Add_Exp($mapItem->exp);
//                    break;
//                }
//            }
//        }
//
//        ctx()->newMap = $newMap;
//        UserProc::updateUserInfo();
//        return Resp::ok(array("newMap" => $newMap, "tag" => $tag, 'num' => $num, "exp" => ctx()->baseInfo->xp, "maxXp" => ctx()->baseInfo->maxXp, "level" => ctx()->baseInfo->level,));
//    }
//
//    /*
//     * 计算探索度值
//     */
//
//    public static function countFootHoldExplorerNum($mapid, $type, $id, $newMap) {
//        $explorer = 0;
//        $num = 0;
//        $retArr = array();
//        if (StlUtil::dictHasProperty($newMap->unlockMapTypeList, $mapid)) {
//            $list = $newMap->unlockMapTypeList->$mapid;
//            $mapList = GameConfig::map_explorer_getItemArray($mapid);
//
//            $tempList = array();
//            if ($mapList != null) {
//                foreach ($mapList as $item) {
//                    if ($item->paras == null) {
//                        continue;
//                    }
//                    $cmd = $item->cmd;
//                    $parasList = explode(',', $item->paras);
//                    if ($type == $cmd && $id == $parasList[0]) {
//                        $num = $parasList[1];
//                    }
//
//                    foreach ($list as $para) {
//                        $strList = explode('_', $para);
//                        $tempStr = $strList[1] . '-' . $strList[2];
//                        if (in_array($tempStr, $tempList)) {
//                            continue;
//                        }
//
//                        if ($strList[1] == $cmd && $strList[2] == $parasList[0]) {
//                            $tempList[] = $tempStr;
//                            $explorer += $parasList[1];
//                        }
//                    }
//                }
//            }
//        }
//        $retArr[] = $explorer;
//        $retArr[] = $num;
//
//        return $retArr;
//    }
//
//    /**
//     * 7504 解锁地图
//     * @return Resp
//     */
//    public static function UnlockMap() {
//        $targetMapId = req()->paras[0];                                          # 提取参数
//        $newMap = ctx()->newMap();
//        # 检查目标地图是否已经解锁
//        my_Assert(!isset($newMap->unlockedFootholds->$targetMapId), ErrCode::map_Unlocked);
//        $mo = GameConfig::gate_getItem($targetMapId);
//        $footHold = new Ins_FootHold();
//        $footHold->mapId = $mo->gateId;
//        $footHold->curMapType = $mo->mapType;
//        $this->unlockedFootholds->$targetMapId = $footHold;                     #  添加解锁据点数据
//        ctx()->newMap = $newMap;
//        UserProc::updateUserInfo();
//        return Resp::ok($newMap);
//    }
//
//    /**
//     * 7501 进入据点
//     * @return Resp
//     */
//    public static function EnterFootHold() {
//        $targetMapId = req()->paras[0];                                          # 提取参数
//        $newMap = ctx()->newMap();
//
//        $mo = GameConfig::gate_getItem($targetMapId);
//        my_Assert($mo != null, ErrCode::err_const_no);
//        if ($mo->battleType != 5) {//2022-11-14 材料副本这不扣体力
//            my_Assert(ctx()->baseInfo->tili >= $mo->tili1, ErrCode::notenough_tili);
//            ActiveProc::ChangeTili(-$mo->tili1);
//        }
//
//        if (!StlUtil::dictHasProperty($newMap->unlockedFootholds, $targetMapId)) {
//
//            $footHold = new Ins_FootHold();
//            $footHold->mapId = $mo->gateId;
//            $footHold->curMapType = $mo->mapType;
//            $newMap->unlockedFootholds->$targetMapId = $footHold;                   # 初始化解锁新手村据点数据
//        }
//
//        # 检查目标地图是否已经解锁
//
//        my_Assert(isset($newMap->unlockedFootholds->$targetMapId), ErrCode::map_NotUnlocked);
//        $footHold = $newMap->unlockedFootholds->$targetMapId;
//        $footHold->unlocked = 1;                                                # 2022年12月26日 再添加解锁逻辑, 原来的解锁逻辑抛弃!
//        $newMap->curMapId = $targetMapId;
//
//        $gateZone = GameConfig::gate_zone();
//        my_Assert($gateZone != null, ErrCode::err_const_no);
//        foreach ($gateZone as $zoneid => $val) {
//            $list = explode(',', $val->contains);
//            if (in_array($targetMapId, $list)) {
//                $mid = $list[0];
//                break;
//            }
//        }
//
//        if ($mid != null) {//更新据点id
//            $newMap->curFootholdId = $mid;
//        }
//
//        ctx()->newMap = $newMap;
//        UserProc::updateUserInfo();
//
//        return Resp::ok(array(
//                    'tili' => ctx()->baseInfo->tili,
//                    'time' => ctx()->privateState->TiliTime,
//                    'newMap' => $newMap,
//        ));
//
//        //return Resp::ok($newMap);
//    }
//
//    /**
//     * 每次重新登录的时候发现在副本关卡里的话,把当前地图位置改为所在据点(例:新手村)
//     */
//    public static function checkGatePassPositionInfo(&$game) {
//        $curMapId = $game->newMap->curMapId;
////        $curMapId = ctx()->newMap(true)->curMapId;
//        $mo = GameConfig::gate_getItem($curMapId);
//        if ($mo != null && $mo->mapType == 4) {
//            $game->newMap->curMapId = 503099;
//            if ($game->newMap->curFootholdId != 0) {
//                $game->newMap->curMapId = $game->newMap->curFootholdId;
//            }
//        }
//    }
//
//    /**
//     * 7502 开启传送阵
//     *  @return Resp
//     */
//    public static function FixUpTransmision() {
//
//    }
//
//    /**
//     * 7503 更新探索进度
//     *  @return Resp
//     */
//    public static function UpdateExplorationProgress() {
//
//    }
//
//}
