cmd) { case CmdCode::cmd_store_put: # 6401 放入仓库 return StoreProc::AddItemInStore(); case CmdCode::cmd_store_gemSet: # 6402 装备宝石 return StoreProc::gemSet(); case CmdCode::cmd_store_gemRemove: # 6403 卸下装备宝石 return StoreProc::gemRemove(); case CmdCode::cmd_store_equipUpgrade: # 6404 装备升级 return StoreProc::equipUpgrade(); case CmdCode::cmd_store_equipUpgrade_MaxLv: # 6405 一键升级(装备) return StoreProc::equipUpgrade_MaxLv(); case CmdCode::store_gemCompose: # 6406 宝石合成 return StoreProc::gemCompose(); case CmdCode::store_switchEquipPag: # 6408 切换装备分页 return StoreProc::switchEquipPag(); case CmdCode::store_gemLockState: # 6409 宝石开锁解锁 return StoreProc::gemLockState(); case CmdCode::store_equip_removeEquipUpgradeTip: # 6410 移除装备可以升级绿点提示 return StoreProc::removeEquipUpgradeTip(); case CmdCode::store_equip_removeNewGemTip: # 6411 移除是新宝石绿点提示 return StoreProc::removeNewGemTip(); case CmdCode::store_allEquipUpgrade: # 6412 所有装备的一键升级 return StoreProc::allEquipUpgrade(); default: Err(ErrCode::cmd_err); } } /** * 宝石开锁解锁 * @return Resp */ public static function gemLockState() { list($uid) = req()->paras; $user = ctx(); //把 qual pos u一样的宝石开锁关锁 $gemStore = $user->store->gemStore; $gem = $gemStore->$uid; $tag = $gem->isUnlock == 0?1:0; $gem->isUnlock = $tag; foreach ($gemStore as $k => $ins_gem) { if($ins_gem->typeId ==$gem->typeId && $ins_gem->predicateId == $gem->predicateId){ $gemStore->$k->isUnlock = $tag; } } ctx($user); UserProc::updateUserInfo(); return Resp::ok(array( 'gold'=>0, 'store' => $user->store, )); } /** * 切换装备分页 * @return Resp */ public static function switchEquipPag() { list($index) = req()->paras; $user = ctx(); $user->store->equipPag = $index; ctx($user); UserProc::updateUserInfo(); return Resp::ok(array()); } /** * 所有装备的一键升级 * 规则:等级不同从等级小到大,等级一样按照部位顺序 * * @return Resp */ public static function allEquipUpgrade() { list() = req()->paras; $user = ctx(); $equipDic = $user->store->equip; $arr = array(); if($equipDic != null){ foreach ($equipDic as $k => $equip) { $lvMo = GameConfig::equip_levelupgrade_getItem($equip->level); $needGold = $lvMo->needGold; $needItemNum = $lvMo->needItemNum; $neeItemId = $equip->mo()->costTuzhiId; if($user->baseInfo->gold >= $needGold && StlUtil::dictHasProperty($user->store->items, $neeItemId) && $user->store->items->$neeItemId >= $needItemNum){ $arr[] = $equip; } } } if(count($arr) > 0){ //进行排序 $len = count($arr); for($i = 0; $i < $len - 1; $i++){ for($j = 0; $j < $len -$i - 1; $j++){ if($arr[$j]->level > $arr[$j+1]->level){//从小到大 $temp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $temp; } elseif ($arr[$j]->level == $arr[$j+1]->level) { if($arr[$j]->mo()->position > $arr[$j+1]->mo()->position){ $temp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $temp; } } } } //升级,扣除金币和图纸 while (true) { $n = count($arr); for($k = 0; $k < $n; $k++){ $equip = $arr[$k]; $lvMo = GameConfig::equip_levelupgrade_getItem($equip->level); $needGold = $lvMo->needGold; $needItemNum = $lvMo->needItemNum; $neeItemId = $equip->mo()->costTuzhiId; if($user->baseInfo->gold >= $needGold && StlUtil::dictHasProperty($user->store->items, $neeItemId) && $user->store->items->$neeItemId >= $needItemNum){ $id = $equip->typeId; $equipDic->$id->level += 1; $user->baseInfo->Consume_Gold($needGold); $user->store->removeItem($neeItemId, $needItemNum); } else { StlUtil::arrayRemoveAt($arr, $k); } } if(count($arr) <= 0){ break; } } } ctx($user); UserProc::updateUserInfo(); return Resp::ok(array( 'gold' => $user->baseInfo->gold, 'store' => $user->store,)); } /** * 移除是新宝石绿点提示 * @return Resp */ public static function removeNewGemTip() { list($uid) = req()->paras;//宝石uid $user = ctx(); my_Assert(StlUtil::dictHasProperty($user->store->gemStore, $uid), ErrCode::user_store_NoItem); $user->store->gemStore->isNew = 0; ctx($user); UserProc::updateUserInfo(); return Resp::ok(array( 'gold' => 0, 'store' => $user->store,)); } /** * 移除装备可以升级绿点提示 * @return Resp */ public static function removeEquipUpgradeTip() { list($posId) = req()->paras;//装备部位 $user = ctx(); my_Assert(StlUtil::dictHasProperty($user->store->equip, $posId), ErrCode::user_store_NoEquip); $user->store->equip->$posId->tip = 0; ctx($user); UserProc::updateUserInfo(); return Resp::ok(array( 'gold' => 0, 'store' => $user->store,)); } /** * 6406 合成 * @return type */ public static function gemCompose() { list($gemIds) = req()->paras; $user = ctx(); //做校验 $composeArr = array(); $list = explode(';', $gemIds); krsort($list); foreach ($list as $str) { $gemUidList = explode(',', $str); $firstGemUId = $gemUidList[0]; $qual = 0; $posId = 0; if(StlUtil::dictHasProperty($user->store->gemStore, $gemUidList[0])){ $ins_gem = $user->store->gemStore->$firstGemUId; $qual = $ins_gem->mo()->qual; $posId = $ins_gem->mo()->position; } //查找要合成的宝石配置信息 $gemConf = self::GemComposeSynthesis($qual, $posId); $synthesisList = explode('_', $gemConf->synthesis); $composePosition = $synthesisList[0]; $composeQual = $synthesisList[1]; $composeNum = $synthesisList[2]; foreach ($composeArr as $val) { if($val->mo()->qual == $composeQual && $val->mo()->position == $composePosition){ $gemUidList[] = $val->uid; } } if(count($gemUidList) >= $composeNum){ if($gemConf != null){ $maxGemNum = intval(count($gemUidList) / $composeNum); $index = 0; $res = 0; foreach ($gemUidList as $uid) { my_Assert(self::GemIsCanCompose($uid) == false && $user->store->gemStore->$uid->isUnlock == 0, ErrCode::user_store_GemCanotCompose); $index += 1; self::RemoveGemInStore($uid); //$composeArr 有的话删除 for ($i = 0; $i < count($composeArr); $i++) { if($composeArr[$i]->uid == $uid){ StlUtil::arrayRemoveAt($composeArr, $i); break; } } if($index % $composeNum == 0){ $res +=1; $composeGem = self::initGem($gemConf->typeId); self::PutGemInStore2($composeGem); $composeArr[] = $composeGem;//临时放这 } if($res >= $maxGemNum){ break; } } } } } $resultArr = array(); foreach ($composeArr as $value) { $resultArr[] = $value->uid; } ctx($user); UserProc::updateUserInfo(); return Resp::ok(array( 'composeGemIds' => $resultArr, 'store' => $user->store,)); } /** * 该宝石是否可以参与合成,其他页镶嵌的,已经被锁的都不能参与 * @param type $uid * @return bool */ private static function GemIsCanCompose($uid) { $Ins_gemItem = ctx()->store->gemStore->$uid; $equipGemDic = ctx()->store->gemEquip; $equipPag = ctx()->store->equipPag; $isExist = false; foreach ($equipGemDic as $pag => $dic) { if($equipPag == $pag){ continue; } if(StlUtil::dictHasProperty($dic, $Ins_gemItem->mo()->position)){ $posId = $Ins_gemItem->mo()->position; $tDic = $dic->$posId; foreach ($tDic as $index => $ins_gem) { if($ins_gem->uid == $Ins_gemItem->uid){ $isExist = true; break; } } } if ($isExist) { break; } } return $isExist; } private static function GemComposeSynthesis($qual,$posId) { $gem = GameConfig::gem(); foreach ($gem as $key => $value) { if($value->synthesis != null){ $synthesisList = explode('_', $value->synthesis); $composePosition = $synthesisList[0]; $composeQual = $synthesisList[1]; $composeNum = $synthesisList[2]; if($composeQual != 0 && $composePosition != 0 && $composeQual== $qual && $posId == $composePosition){ return $value; } } } return null; } /** * 装备宝石 * @return type */ public static function gemSet() { list($uid,$type,$replaceUId) = req()->paras;//宝石uid 手动的时候记得校验u $user = ctx(); my_Assert(StlUtil::dictHasProperty($user->store->gemStore, $uid), ErrCode::user_store_NoItem); $ins_gem = new Ins_Gem($user->store->gemStore->$uid); $pag = $user->store->equipPag; $posId = $ins_gem->mo()->position; $dic = $user->store->gemEquip->$pag->$posId; $tag_index = 0; $tag_gem = null; foreach ($dic as $index => &$gem) { $gem = new Ins_Gem($gem); if($gem->predicateMo()->uniqueKey == $ins_gem->predicateMo()->uniqueKey){ $tag_index = $index; $tag_gem = $gem; break; } } switch ($type) { case 1://镶嵌 my_Assert($tag_gem == null, ErrCode::user_store_GemCanotSet); for ($i = 1; $i <=5; $i++) { if(!StlUtil::dictHasProperty($dic, $i)){ $dic->$i = $ins_gem; StlUtil::dictRemove($user->store->gemStore, $uid); break; } } //$user->store->gemEquip->$pag->$posId = $dic; break; case 2://替换 //满不满都高替低品阶 my_Assert(StlUtil::dictHasProperty($dic, $replaceUId), ErrCode::user_store_NoExistGemReplace); $replace_ins_Gem = new Ins_Gem($dic->$replaceUId); //这个uid是5个坑位的index id my_Assert($replace_ins_Gem->mo()->qual > $ins_gem->mo()->qual, ErrCode::user_store_NoExistGemReplace); $id = $replace_ins_Gem->uid; $user->store->gemStore->$id = $replace_ins_Gem; $dic->$replaceUId = $ins_gem; StlUtil::dictRemove($user->store->gemStore, $uid); //$user->store->gemEquip->$pag->$posId = $dic; break; case 3://手动 my_Assert(count((array)$dic)>=5, ErrCode::user_store_GemCanotSet); my_Assert(StlUtil::dictHasProperty($dic, $replaceUId), ErrCode::user_store_NoExistGemReplace); $replace_ins_Gem = new Ins_Gem($dic->$replaceUId); $id = $replace_ins_Gem->uid; if($tag_gem != null){//如果有u那 my_Assert($replace_ins_Gem->uid == $tag_gem->uid, ErrCode::user_store_SameGemCanotEquip); //点的不是u一样的,则提示同一件装备无法镶嵌多个技能相同的宝石 【错误】 //有U一样的,则点击正好是这个直接替换 $user->store->gemStore->$id = $replace_ins_Gem; $dic->$replaceUId = $ins_gem; } else { $user->store->gemStore->$id = $replace_ins_Gem; $dic->$replaceUId = $ins_gem; } StlUtil::dictRemove($user->store->gemStore, $uid); break; case 4://不能 //1.小品阶替大品阶 或是 相等的,在不满的时候不允许 2. //满的 相等不允许替 my_Assert($uid == 0, ErrCode::user_store_SameGemCanotEquip); //点的不是u一样的,则提示同一件装备无法镶嵌多个技能相同的宝石 【错误】 break; default: break; } $user->store->gemEquip->$pag->$posId = $dic; ctx($user); UserProc::updateUserInfo(); return Resp::ok(array( 'gold'=>0, 'store' => $user->store,)); } /** * 卸下装备 * @return type */ public static function gemRemove() { list($uid) = req()->paras;//装备宝石id $user = ctx(); $pag = $user->store->equipPag; $posDic = $user->store->gemEquip->$pag; $tag_pos = 0; $tag_index = 0; $tag_gem = null; foreach ($posDic as $posId => $dic) { foreach ($dic as $index => $gem) { if($gem->uid == $uid){ $tag_pos = $posId; $tag_index = $index; $tag_gem = $gem; break 2; } } } if($tag_index >0 && $tag_gem != null){ StlUtil::dictRemove($posDic->$tag_pos, $tag_index); $user->store->gemEquip->$pag = $posDic; $user->store->gemStore->$uid = $tag_gem; } ctx($user); UserProc::updateUserInfo(); return Resp::ok(array( 'gold'=>0, 'store' => $user->store,)); } /** * 升级装备 * @return type */ public static function equipUpgrade() { list($posId) = req()->paras; //装备的部位id $user = ctx(); $lv = $user->store->equip->$posId->level; $mo = GameConfig::equip_levelupgrade_getItem($lv); my_Assert($user->baseInfo->gold >= $mo->needGold, ErrCode::notenough_gold_msg); $costTuzhiId = GameConfig::equip_getItem($posId)->costTuzhiId; $tuzhiNum = 0; if(StlUtil::dictHasProperty($user->store->items, $costTuzhiId)){ $tuzhiNum = $user->store->items->$costTuzhiId; } my_Assert($tuzhiNum>= $mo->needItemNum, ErrCode::notenough_item); $user->store->removeItem($costTuzhiId, $mo->needItemNum); ctx()->baseInfo->Consume_Gold($mo->needGold); $user->store->equip->$posId->level += 1; ctx($user); UserProc::updateUserInfo(); return Resp::ok(array( 'gold' => $user->baseInfo->gold, 'store' => $user->store)); } /** * 单个装备部位一键升级 * @return type */ public static function equipUpgrade_MaxLv() { list($posId) = req()->paras; //mask = 1:表示战斗中掉落 $user = ctx(); $equip = $user->store->equip->$posId; $lv = $equip->level; $levelupgrade = GameConfig::equip_levelupgrade(); $maxLv = count((array)$levelupgrade); $need_gold = 0; $need_item = 0; $tuzhiId = GameConfig::equip_getItem($posId)->costTuzhiId; $itemNum_store = 0; if (StlUtil::dictHasProperty($user->store->items, $tuzhiId)) { $itemNum_store = $user->store->items->$tuzhiId; } $up_Gold = 0; $up_needItem = 0; $up_lv = 0; for ($i = $lv; $i <= $maxLv; $i++) { $up_Gold += GameConfig::equip_levelupgrade_getItem($i)->needGold; $up_needItem += GameConfig::equip_levelupgrade_getItem($i)->needItemNum; if ($user->baseInfo->gold >= $up_Gold && $itemNum_store >= $up_needItem) { $need_gold = $up_Gold; $need_item = $up_needItem; $up_lv = $i; continue; } break; } $user->baseInfo->gold -= $need_gold; $user->store->removeItem($tuzhiId, $need_item); $user->store->equip->$posId->level = $up_lv; ctx($user); UserProc::updateUserInfo(); return Resp::ok(array( 'gold' => $user->baseInfo->gold, 'store' => $user->store, )); } public static function AddItemInStore() { list($rwdStr) = req()->paras; //mask = 1:表示战斗中掉落 $user = ctx(); $err = self::AddMultiItemInStore($rwdStr); my_Assert(ErrCode::ok == $err, $err); UserProc::updateUserInfo(); return Resp::ok(array( //'gold' => $user->baseInfo->gold, //'tili' => $user->baseInfo->tili, //'cash' => $user->baseInfo->cash, 'store' => $user->store)); } /** * 具体奖励存入背包 * @param type $goodsStr * @param type $src */ public static function AddMultiItemInStore($goodsStr, $src = 1) { if($goodsStr == null){ return; } $ary = explode(";", $goodsStr); foreach ($ary as $value) { $val = explode(",", $value); my_Assert(count($val) > 1, "解析奖励字符串出错"); list($itemId, $num) = $val; # ID, 数量 if (GameConfig::gem_getItem($itemId) != null) { self::PutGemInStore($itemId, $num); } else { $itemMo = GameConfig::item_getItem($itemId); switch ($itemMo->itemType) { case 1: ctx()->baseInfo->Add_Gold($num); self::checkEquipUpgradeTip(); break; case 2: ctx()->baseInfo->Add_Cash($num); break; case 3: ctx()->baseInfo->Add_tili($num); break; case 4: ctx()->baseInfo->Add_Exp($num); break; case 100: case 103: self::PutItemsInStore($itemId, $num); if($itemMo->itemType == 100){//图纸 self::checkEquipUpgradeTip(); } break; default: break; } } } } public static function PutItemsInStore($itemId, $num) { $items = ctx()->store->items; if (StlUtil::dictHasProperty($items, $itemId)) { $items->$itemId += $num; } else { $items->$itemId = $num; } ctx()->store->items = $items; } // public static function PutEquipInStore($equipId, $num) { // if ($equipId == 0) { // return; // } // $n = count((array) ctx()->store->equip) + 1; // // for ($index = 0; $index < $num; $index++) { // $Equip = new Ins_Equip(); // $Equip->uid = $n; // $Equip->typeId = $equipId; // $Equip->qual = GameConfig::equip_getItem($equipId)->qual; // ctx()->store->equip->$n = $Equip; // $n += 1; // } // } /** * 得到金币或是图纸的时候校验下,是否满足装备升级条件,满足则tip字段设置为1 */ public static function checkEquipUpgradeTip() { $equipDic = ctx()->store->equip; if($equipDic != null){ foreach ($equipDic as $k => $equip) { $lvMo = GameConfig::equip_levelupgrade_getItem($equip->level); $needGold = $lvMo->needGold; $needItemNum = $lvMo->needItemNum; $neeItemId = $equip->mo()->costTuzhiId; if(ctx()->baseInfo->gold >= $needGold && StlUtil::dictHasProperty(ctx()->store->items, $neeItemId) && ctx()->store->items->$neeItemId >= $needItemNum){ $equipDic->$k->tip = 1;//绿点是每次得到金币或是图纸了,只要满足升级条件都变绿 } } } ctx()->store->equip = $equipDic; } /** * 新宝石入库 */ public static function PutGemInStore($id,$num=1) { for ($i = 0; $i < $num; $i++) { $gem = self::initGem($id); $length = $gem->uid; ctx()->store->gemStore->$length = $gem; } } public static function PutGemInStore2($gem,$num=1) { for ($i = 0; $i < $num; $i++) { $length = $gem->uid; ctx()->store->gemStore->$length = $gem; } } public static function initGem($id) { $length = ctx()->store->gemLength; $length +=1; $gem = new Ins_Gem(); $gem->uid = $length; $gem->typeId = $id; $gem->predicateId = self::RandomGemPredicateId($id); $tag = self::CheckNewGemTip($gem); $gem->isNew = $tag; ctx()->store->gemLength = $length; return $gem; } /** * 从仓库移除宝石 */ public static function RemoveGemInStore($uid) { if(StlUtil::dictHasProperty(ctx()->store->gemStore, $uid)){ StlUtil::dictRemove(ctx()->store->gemStore, $uid); } return 0; } /** * 新宝石随机词条 临时等刚哥 */ public static function RandomGemPredicateId($id) { return 40; } /** * 新宝石提示 */ public static function CheckNewGemTip($gem) { $gemStore = ctx()->store->gemStore; $tag = false; foreach ($gemStore as $k => $ins_gem) { if($ins_gem->typeId ==$gem->typeId && $ins_gem->predicateId == $gem->predicateId){ $tag = true; break; } } return $tag == true?0:1; } //临时代码 public static function InitGemInfo() { if(count((array)ctx()->store->gemStore) > 0){ return; } $index = 0; $gem = GameConfig::gem(); for ($i = 1; $i <=21; $i++) { foreach ($gem as $key => $value) { if($value->id == $i){ self::PutGemInStore($value->typeId); } } } } }