StoreProc.php 55 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357
  1. <?php
  2. namespace loyalsoft;
  3. /**
  4. * Description of StoreProc
  5. * 仓库/背包 处理流程
  6. * ===========================
  7. * 尚待处理的流程:道具售出时貌似存在多种格式....
  8. * @author
  9. */
  10. class StoreProc {
  11. /**
  12. * 逻辑分发
  13. * 所有的Proc中必须有这样一个方法
  14. * @param type $req
  15. */
  16. static function procMain($req) {
  17. switch ($req->cmd) {
  18. case CmdCode::cmd_store_put: # 6401 放入仓库
  19. return StoreProc::AddItemInStore($req);
  20. case CmdCode::cmd_store_singleSell: # 6402 出售单个道具
  21. return StoreProc::sellItem($req);
  22. case CmdCode::cmd_store_mutliSell: # 6403 批量出售 卖掉
  23. return StoreProc::sellMultiItemFromStore($req);
  24. case CmdCode::cmd_store_use: # 6404 使用道具
  25. return StoreProc::useItem($req);
  26. case CmdCode::cmd_store_refresh: # 6405 获取最新的仓库数据
  27. return StoreProc::refreshStore($req);
  28. // case CmdCode::cmd_store_decomposeItem: # 6406 分解道具
  29. // return StoreProc::decomposeItem($req);
  30. // case CmdCode::cmd_store_ItemUpgrade: # 6408 装备升级
  31. // return StoreProc::ItemUpgrade($req);
  32. // case CmdCode::cmd_store_GemCompose: # 6408 装备合成
  33. // return StoreProc::composeItem($req);
  34. //
  35. case CmdCode::cmd_store_WearEquip: # 6410 给英雄穿装备
  36. return StoreProc::WearEquipToHero($req);
  37. case CmdCode::cmd_store_UnWieldEquip: # 6411 将该装备从指定英雄上脱下
  38. return StoreProc::UnWieldEquip($req);
  39. case CmdCode::cmd_store_WearYanling: # 6416 装备言灵
  40. return StoreProc::WearYanlingToHero($req);
  41. case CmdCode::cmd_store_UnWieldYanling: # 6417 卸下言灵
  42. return StoreProc::UnWieldYanling($req);
  43. //
  44. case CmdCode::cmd_store_AddMaxPacketNum: # 6412 扩展包裹格子数量
  45. return StoreProc::AddPacketNum($req);
  46. // case CmdCode::cmd_store_MeltEquip: # 6413 装备融合
  47. // Err(ErrCode::err_method_obsoleted);
  48. //// return StoreProc::MeltEquip($req);
  49. // case CmdCode::cmd_store_PiecesCompose: # 6415 碎片合成
  50. // return StoreProc::composePieces($req);
  51. case CmdCode::cmd_store_Testcmd: # 6407 测试方法
  52. return StoreProc::Test($req);
  53. default:
  54. Err(ErrCode::cmd_err);
  55. }
  56. }
  57. /**
  58. * 测试方法
  59. * @param Req $req
  60. * @return type
  61. */
  62. static public function Test($req) {
  63. // return StoreProc::MeltEquip($req);
  64. }
  65. /**
  66. * [6404] 使用仓库道具
  67. * @param Req $req
  68. */
  69. static function useItem($req) {
  70. // return ResponseVo::ErrResponse($req, ErrCode::msg_method_obsoleted);
  71. $itemId = $req->paras[0]; # 道具id
  72. $num = 1; # 数量, 可选参数, 默认为1
  73. if (count($req->paras) > 1) { # 如果传了,
  74. $num = $req->paras[1]; # 提取可选参数: 道具数量
  75. } # end 提取参数
  76. $typeId = substr($itemId, 0, 3); # 道具分类前缀
  77. switch ($typeId) { # 使用道具()
  78. case '701': # 宝箱
  79. $resp = Boxes::OpenBox($req); # 调用开宝箱功能
  80. break;
  81. default : # 其他
  82. Err(ErrCode::store_itemcantuse);
  83. break;
  84. }
  85. return $resp;
  86. }
  87. /**
  88. * [6405] 刷新仓库列表
  89. * @param Req $req
  90. */
  91. static function refreshStore($req) {
  92. StoreProc::CheckItemNum($req);
  93. $result = array(
  94. 'store' => $req->userInfo->game->store
  95. );
  96. return Resp::ok($result);
  97. }
  98. //
  99. // <editor-fold defaultstate="collapsed" desc=" 物品升级 ">
  100. // /**
  101. // * [6408] 物品的升级
  102. // * @param Req $req
  103. // * @return type
  104. // */
  105. // static function ItemUpgrade($req) {
  106. // $mem = $req->mem;
  107. // $uid = $req->paras[0]; //获取物品uid
  108. // $money = $req->paras[1]; //需要的手工费
  109. // $resp = new Resp();
  110. // $user = $req->userInfo->game; # user引用
  111. // $ary = $req->paras[3]; //获取物品的结构数组
  112. // foreach ($ary as $value) {
  113. // $itemId = $value[1];
  114. // $uid = $value[2];
  115. // if ($uid < 1) {
  116. // Err(ErrCode::paras_err);
  117. // }
  118. //
  119. // $ok = StoreProc::removeEquipFromStore($uid, $itemId, $req); # 从背包移除
  120. // if (!$ok) {//1.如果背包道具移出时出错,则直接返回错误
  121. // Err(ErrCode::store_removefail);
  122. // }
  123. // $item = GameConfig::item_getItem($itemId); //ConstProc::getItemConst($itemId);
  124. // if ($item == null) { //2.检测是否存在装备的原始数据
  125. // Err(ErrCode::err_const_no);
  126. // }
  127. //
  128. // $ret = array('resp' => "succeed!");
  129. // $resp = Resp::ok($ret); //返回必须是object
  130. // }
  131. // $bDeal = UserGameModel::Consume_Gold($user, $money);
  132. // if ($bDeal) {
  133. //
  134. // ActiveProc::ChangeTaskCount($req);
  135. // $result = array(
  136. // 'store' => $req->userInfo->game->store,
  137. // 'resp' => "succeed!"
  138. // );
  139. // $resp = Resp::ok($result);
  140. // } else {
  141. // Err(ErrCode::notenough_gold_msg);
  142. // }
  143. //
  144. //
  145. // if (0 == $resp->err) {
  146. // StoreProc:: UpdateItem($req);
  147. // $result = array(
  148. // 'store' => $req->userInfo->game->store,
  149. // 'resp' => "succeed!"
  150. // );
  151. // $resp = Resp::ok($result);
  152. // }
  153. //
  154. // StoreProc::CheckItemNum($req);
  155. //
  156. // return $resp;
  157. // }
  158. //
  159. // /**
  160. // * 更新单个物品属性
  161. // * @param Req $req
  162. // */
  163. // private static function UpdateItem($req) {
  164. // $store = $req->userInfo->game->store;
  165. // $uid = $req->paras[0]; //获取物品uid
  166. // $obj = $req->paras[2]; //获取物品的结构数组
  167. // $itemLevel = 0;
  168. // $bUplevel = false;
  169. // foreach ($obj as $key => $value) {
  170. // if ($key === "level") {
  171. // if (CommUtil::isPropertyExists($store->equipment->$uid, $key)) {
  172. // if ($store->equipment->$uid->$key < $value) {
  173. // $bUplevel = true;
  174. // $itemLevel = $value;
  175. // }
  176. // } else {
  177. // if ($value > 1) {
  178. // $bUplevel = true;
  179. // $itemLevel = $value;
  180. // }
  181. // }
  182. // }
  183. // if ($bUplevel) {
  184. // $item = GameConfig::item_getItem($store->equipment->$uid->typeId);
  185. // if ($item == null) { //2.检测是否存在装备的原始数据
  186. // Err(ErrCode::err_const_no);
  187. // }
  188. // // 推送系统消息
  189. // SystemProc::insertWeapon_promoteUp($req->zoneid, $req->uid, $req->userInfo->game->name, $item->name, $itemLevel);
  190. // }
  191. // $store->equipment->$uid->$key = $value;
  192. // }
  193. // UserProc::updateUserInfo($req);
  194. // $ret = array('resp' => "succeed!");
  195. // $resp = Resp::ok($ret); //返回必须是object
  196. // return $resp;
  197. // }
  198. /**
  199. *
  200. * @param type $req
  201. * @return type
  202. * @deprecated since version 0
  203. */
  204. static function UpgradeMeltEquip($req) {
  205. $store = $req->userInfo->game->store;
  206. $uid = $req->paras[0]; //获取物品uid
  207. // echo var_export($uid);
  208. $itemId = $store->equipment->$uid->typeId;
  209. $item = GameConfig::item_getItem($itemId);
  210. if ($store->equipment->$uid->melt_level > $item->melt_level) {
  211. $meltLevel = $store->equipment->$uid->melt_level;
  212. } else {
  213. $meltLevel = $item->melt_level;
  214. }
  215. $meltLevel++;
  216. $melt = GameConfig::smelting_getItem($meltLevel);
  217. my_Assert(null != $melt, ErrCode::err_const_no); # 在装备熔炼等级表里找不到该等级的熔炼规则
  218. $attrib = $melt->attribute; ////当前熔炼等级成功后属性加成
  219. foreach ($item as $key => $value) {
  220. if ($key === "melt_level") {
  221. $store->equipment->$uid->$key = $meltLevel;
  222. }
  223. if ($key === "gongji") {
  224. if ($store->equipment->$uid->$key > $value) {
  225. $store->equipment->$uid->$key = (int) ($store->equipment->$uid->$key * $attrib);
  226. } else {
  227. $store->equipment->$uid->$key = (int) ($value * $attrib);
  228. }
  229. }
  230. if ($key === "fangyu") {
  231. if ($store->equipment->$uid->$key > $value) {
  232. $store->equipment->$uid->$key = (int) ($store->equipment->$uid->$key * $attrib);
  233. } else {
  234. $store->equipment->$uid->$key = (int) ($value * $attrib);
  235. }
  236. }
  237. if ($key === "hp") {
  238. if ($store->equipment->$uid->$key > $value) {
  239. $store->equipment->$uid->$key = (int) ($store->equipment->$uid->$key * $attrib);
  240. } else {
  241. $store->equipment->$uid->$key = (int) ($value * $attrib);
  242. }
  243. }
  244. if ($key === "minjie") {
  245. if ($store->equipment->$uid->$key > $value) {
  246. $store->equipment->$uid->$key = (int) ($store->equipment->$uid->$key * $attrib);
  247. } else {
  248. $store->equipment->$uid->$key = (int) ($value * $attrib);
  249. }
  250. }
  251. if ($key === "baoji") {
  252. if ($store->equipment->$uid->$key > $value) {
  253. $store->equipment->$uid->$key = (int) ($store->equipment->$uid->$key * $attrib);
  254. } else {
  255. $store->equipment->$uid->$key = (int) ($value * $attrib);
  256. }
  257. }
  258. }
  259. //
  260. // $EquipObj = $store->equipment->$uid;
  261. // ////检测装备的情况,装备升级时,基础属性要乘以系数. 如果之前升过级,那么它的"原始值"就不同了.
  262. // if ($EquipObj) {
  263. // foreach ($EquipObj as $key=> $value) {
  264. // if ($key === "melt_level") {
  265. // $key=$meltLevel;
  266. // }
  267. // if ($key === "melt_level") {
  268. // $key=$meltLevel;
  269. // }
  270. // }
  271. // }
  272. // echo var_export($store);
  273. $ret = array('resp' => "succeed!");
  274. $resp = Resp::ok($ret); //返回必须是object
  275. return $resp;
  276. }
  277. static function getItemProperty($req) {
  278. $store = $req->userInfo->game->store;
  279. $uid = $req->paras[0]; //获取物品uid
  280. // echo var_export($uid);
  281. $itemId = $store->equipment->$uid->typeId;
  282. $item = GameConfig::item_getItem($itemId);
  283. }
  284. /**
  285. * [6409] 合成道具
  286. * @param Req $req
  287. */
  288. static public function composeItem($req) {
  289. $resp = Resp::err(ErrCode::err_method_notimplement);
  290. list($lowitemId, $usenum, $highitemId, $addnum, $gold) = $req->paras; # 提取参数: 消耗道具id, 消耗数量, 合成道具Id, 合成数量, 需要的手续费
  291. my_Assert($usenum >= 3, "数量非法!");
  292. $user = $req->userInfo->game; # user引用
  293. $store = $user->store; # 背包引用
  294. $ok = StoreProc::removeItemFromStore($store, $lowitemId, $usenum); # 从仓库里移除这个道具, 支持移除指定数量
  295. my_Assert(ErrCode::ok == $ok, $ok); # 如果仓库道具移出时出错,则直接返回错误
  296. my_Assert(UserGameModel::Consume_Gold($user, $gold), ErrCode::notenough_gold_msg); # 扣除消耗的金币
  297. ActiveProc::ChangeTaskCount($req); # 更新任务计数器
  298. $store->items->$highitemId += $addnum; # 添加新合成道具
  299. UserProc::updateUserInfo();
  300. $ret = array('resp' => "succeed!"); # 准备返回值
  301. $resp = Resp::ok($ret); # 返回必须是object
  302. StoreProc::CheckItemNum($req);
  303. return $resp;
  304. }
  305. /**
  306. * [6409] 合成碎片(几个碎片合成获得同品质或者更高品质的新碎片)
  307. * @param Req $req
  308. */
  309. static public function composePieces($req) {
  310. $resp = Resp::err(ErrCode::err_method_notimplement);
  311. $store = $req->userInfo->game->store;
  312. // 解析客户端参数
  313. $piecesid1 = $req->paras[0]; // 碎片id1
  314. $piecesid2 = $req->paras[1]; // 碎片id2
  315. $piecesid3 = $req->paras[2]; // 碎片id3
  316. $user = $req->userInfo->game; # user引用
  317. $pieceslist = array($piecesid1, $piecesid2, $piecesid3);
  318. //1.从仓库里移除这个道具
  319. for ($i = 0; $i < count($pieceslist); $i++) {
  320. $ok = StoreProc::removeItemFromStore($store, $pieceslist[$i], 1); // 支持移除指定数量
  321. if ($ok != ErrCode::ok) {
  322. break;
  323. }
  324. }
  325. my_Assert($ok == ErrCode::ok, $ok); // 如果仓库道具移出时出错,则直接返回错误
  326. $gold = glc()->Compose_Pieces_Gold; ////临时用这个来算,等刷过数据再说
  327. echoLine($gold);
  328. $bDeal = UserGameModel::Consume_Gold($user, $gold);
  329. if ($bDeal) {
  330. ActiveProc::ChangeTaskCount($req);
  331. $reward = StoreProc::composePiecesProbability($req);
  332. StoreProc::addSegmentIntoStore($store, $reward);
  333. UserProc::updateUserInfo();
  334. # 准备返回值
  335. $result = array(
  336. 'reward' => $reward,
  337. 'store' => $req->userInfo->game->store,
  338. 'resp' => "succeed!"
  339. );
  340. $resp = Resp::ok($result);
  341. } else {
  342. Err(ErrCode::notenough_gold_msg);
  343. }
  344. StoreProc::CheckItemNum($req);
  345. return $resp;
  346. }
  347. ////合成碎片时的概率
  348. static public function composePiecesProbability($req) {
  349. $piecesid1 = $req->paras[0]; // 碎片id1
  350. $piecesid2 = $req->paras[1]; // 碎片id2
  351. $piecesid3 = $req->paras[2]; // 碎片id3
  352. $pieceslist = array($piecesid1, $piecesid2, $piecesid3);
  353. ///权重和值
  354. $weight = 0;
  355. for ($i = 0; $i < count($pieceslist); $i++) {
  356. $segmentid = $pieceslist[$i];
  357. $segItem = GameConfig::segment_getItem($segmentid); /////获取该碎片的信息
  358. $WeightItem = GameConfig::segment_ronghe_getItem($segItem->quailty); ///通过品质来获取权重
  359. $weight += $WeightItem->weight;
  360. }
  361. $reward = StoreProc::GetRewarByWeight($weight);
  362. //////根据最终三个碎片的权重值和来判断该品质的获取概率。
  363. ////用类似 3,80;5,60;10,20; 来表示 (在权重和达到3时获取率是80%,在权重和达到5时获取率是60%,在权重和达到10时获取率是10%)
  364. //
  365. // ////为了数值设置表和填数据方便,将两个表合成为一个表
  366. //
  367. ////数值设置起来方便,但是用起来稍微麻烦一些,需要取出数据表里的所有碎片的值。
  368. return $reward;
  369. }
  370. static public function GetRewarByWeight($weight) {
  371. for ($i = 0; $i < 5; $i++) {
  372. $item = GameConfig::segment_ronghe_getItem($i + 1);
  373. // $RewardList[]=$item;
  374. $ary = explode(";", $item->probability);
  375. foreach ($ary as $value) {
  376. $val = explode(",", $value);
  377. $weig = $val[0]; //达到的权重值
  378. $prob = $val[1]; //该权重下的获取概率
  379. if ($weight >= $weig) {
  380. $probList[$i] = $prob;
  381. }
  382. }
  383. }
  384. $rnd = CommUtil::random(1, 10000);
  385. $start = 0;
  386. $rew = 0;
  387. for ($i = 0; $i < 5; $i++) {
  388. if ($start < $rnd && $rnd <= $start + $probList[$i]) { # 落入区间
  389. $rew = $i + 1; # 记录物品
  390. break;
  391. }
  392. $start += $probList[$i]; # 继续判断是否落入下一物品的区间
  393. }
  394. // $piecesDataBaseList= GameConfig::segment();////获取所有的碎片数据表
  395. $tmpPiecesList = GameConfig::segment_byPinzhi_getItem($rew, 1);
  396. // foreach ($piecesDataBaseList as $typeId => $value)
  397. // {
  398. // // $value->
  399. // // echo var_dump($value);
  400. // if ($value->itemType==1) ////是英雄碎片
  401. // {
  402. // if( $value->quailty==$rew) ///碎片品质是指定品质
  403. // {
  404. // $tmpPiecesList[]=$typeId; ///保存到一个临时表里。
  405. // }
  406. // }
  407. // }
  408. $tmprnd = CommUtil::random(0, count($tmpPiecesList) - 1);
  409. return $tmpPiecesList[$tmprnd]->typeId;
  410. }
  411. // </editor-fold>
  412. // --------------- 以下为辅助方法 ------------------
  413. //
  414. // <editor-fold defaultstate="collapsed" desc=" 移除物品 ">
  415. /**
  416. * 从仓库中移除指定数量的物品
  417. * @param UserGameModel $user
  418. * @param type $itemId
  419. * @param type $itemcount
  420. * @return type
  421. */
  422. static function removeItemFromStore($store, $itemId, $itemcount) {
  423. $typeId = substr($itemId, 0, 3);
  424. switch ($typeId) {
  425. case '307': #经验书
  426. case '305': #扫荡券
  427. case '304': # 宝石
  428. if (CommUtil::isPropertyExists($store->items, $itemId)) { //
  429. if ($store->items->$itemId >= $itemcount) { // 数量足够
  430. $store->items->$itemId -= $itemcount;
  431. if ($store->items->$itemId == 0) {
  432. unset($store->items->$itemId);
  433. }
  434. return ErrCode::ok;
  435. } else {
  436. return ErrCode::store_itemnotenough; // 道具数量不足
  437. }
  438. } else {
  439. return ErrCode::store_itemno_err;
  440. }
  441. break;
  442. case '310': # 碎片
  443. case '311': # 碎片
  444. case '312': # 碎片
  445. case '313': #装备 碎片
  446. case '314': #装备 碎片
  447. case '315': #装备 碎片
  448. if (CommUtil::isPropertyExists($store->segement, $itemId)) { //
  449. if ($store->segement->$itemId >= $itemcount) { // 数量足够
  450. $store->segement->$itemId -= $itemcount;
  451. if ($store->segement->$itemId == 0) {
  452. unset($store->segement->$itemId);
  453. }
  454. return ErrCode::ok;
  455. } else {
  456. return ErrCode::store_itemnotenough; // 道具数量不足
  457. }
  458. } else {
  459. return ErrCode::store_itemno_err;
  460. }
  461. break;
  462. default : # 其他
  463. Err(ErrCode::store_itemcantuse);
  464. break;
  465. }
  466. }
  467. /**
  468. * 从仓库移出
  469. * @param type $itemId
  470. * @param StoreModel $store
  471. * @return boolean
  472. */
  473. static function removeFromStore($itemId, &$store) {
  474. //return ErrCode::succeed;
  475. $typid = substr("$itemId", 0, 3); # 取道具分类
  476. $ok = false;
  477. switch ($typid) {
  478. case "101": # 英雄 错误了的路径
  479. break;
  480. case '102': # 英雄碎片
  481. if (CommUtil::isPropertyExists($store->segement, "$itemId") && $store->segement->$itemId > 0) {
  482. $store->segement->$itemId -= 1;
  483. $ok = true;
  484. }
  485. break;
  486. case "203": # 宝箱
  487. if (CommUtil::isPropertyExists($store->boxes, "$itemId") && $store->boxes->$itemId > 0) {
  488. $store->boxes->$itemId -= 1;
  489. $ok = true;
  490. }
  491. break;
  492. default:
  493. break;
  494. }
  495. return $ok;
  496. }
  497. /**
  498. * 从仓库移出装备
  499. * @param type $itemId uid
  500. * @param StoreModel $store
  501. * @return boolean
  502. */
  503. static function removeEquipFromStore($uid, $typeId, &$req) {
  504. $ok = false;
  505. echo var_export($uid);
  506. if (CommUtil::isPropertyExists($req->userInfo->game->store->equipment, $uid)) {
  507. // $con= ConstProc::getItemConst($req->mem, $req->userInfo->game->store->equipment->$uid->typeId);
  508. echo var_export($req->userInfo->game->store->equipment->$uid->typeId);
  509. if ($typeId == $req->userInfo->game->store->equipment->$uid->typeId) {
  510. echo "typeid相同";
  511. unset($req->userInfo->game->store->equipment->$uid);
  512. $ok = true;
  513. } else {
  514. echo "typeid检验错误";
  515. }
  516. }
  517. return $ok;
  518. }
  519. /**
  520. * 从仓库移除碎片
  521. * @param StoreModel $store
  522. * @param int $segmentId
  523. * @param int $num
  524. * @return bool 成功/失败
  525. */
  526. static function removeSegmetFromStore($store, $segmentId, $num = 1) {
  527. if (CommUtil::isPropertyExists($store->segement, $segmentId) #
  528. && $store->segement->$segmentId >= $num) {
  529. $store->segement->$segmentId -= $num;
  530. return TRUE;
  531. }
  532. return false;
  533. }
  534. /**
  535. * 向仓库添加碎片
  536. * @param StoreModel $store
  537. * @param int $segmentId
  538. * @param int $num
  539. */
  540. static function addSegmentIntoStore($store, $segmentId, $num = 1) {
  541. if (CommUtil::isPropertyExists($store->segement, $segmentId)) {
  542. $store->segement->$segmentId += $num;
  543. } else {
  544. $store->segement->$segmentId = $num;
  545. }
  546. }
  547. /**
  548. * 计算玩家仓库中某种符石/道具的数量
  549. * @param type $map
  550. * @param type $stoneid
  551. * @return type
  552. */
  553. static function GetStoneCount($map, $stoneid) {
  554. $ret = 0;
  555. if ($map->store->stones && CommUtil::isPropertyExists($map->store->stones, $stoneid)) {
  556. $ret = $map->store->stones->
  557. $stoneid;
  558. }
  559. return $ret;
  560. }
  561. /**
  562. * 从仓库移除符石(道具)
  563. * @param MapModel $map
  564. * @param int $stoneid
  565. * @param int $num
  566. */
  567. static function RemoveStoneFromStore(&$map, $stoneid, $num = 1) {
  568. if ($num <= 0) {
  569. return $num;
  570. }
  571. $ret = 0;
  572. if ($map->store->stones && CommUtil::isPropertyExists($map->store->stones, $stoneid)) {
  573. $left = $map->store->stones->$stoneid - $num;
  574. if ($ret >= 0) {////这里有bug吗?应该是用$left啊,不过无所谓,反正这个函数暂时用不上,不考虑了.
  575. $map->store->stones->$stoneid -= $num;
  576. $ret = $num;
  577. }
  578. }
  579. return $ret;
  580. }
  581. // </editor-fold>
  582. //
  583. // <editor-fold defaultstate="collapsed" desc=" 放入物品 ">
  584. /**
  585. * 将其他物品放入仓库
  586. * @param type $itemId
  587. * @param UserGameModel $game
  588. */
  589. static function PutItemInStore($itemId, &$game) {
  590. if (CommUtil::isPropertyExists($game->store->items, $itemId)) {// 如果仓库中已经有这种元素,则其数目+1
  591. $game->store->items->$itemId += 1;
  592. } else {// 如果仓库中没有这种元素,则其数目置1
  593. $game->store->items->$itemId = 1;
  594. }
  595. }
  596. /**
  597. * 检测是否允许放入仓库
  598. * @param BuildModel $build
  599. * @return type
  600. */
  601. static function canPutInStore($build) {
  602. if ($build->categoryId == INIT_HABITID) {
  603. return ErrCode::ok;
  604. }
  605. return ErrCode::store_putinto;
  606. }
  607. /**
  608. * 解包多种物品到玩家身上 【警告】此函数的异常处理功能残废,不安全
  609. * 检测如果当前物品格子大于物品总数,则可以获取战利品,否则不可以
  610. * @param Req $req
  611. * @param string $goodsStr itemid,num;itemid,num;...
  612. * @param int $src 1:战斗奖励, 2: 任务奖励, 3: 抽奖奖品, 4: 邮件领取, 5: 现金充值
  613. * @deprecated since version 0
  614. * @return type
  615. */
  616. public static function AddMultiItemInStore($req, $goodsStr, $src = 1) {
  617. $user = $req->userInfo->game;
  618. $ary = explode(";", $goodsStr);
  619. foreach ($ary as $value) {
  620. $val = explode(",", $value);
  621. $itemId = $val[0];
  622. $num = $val[1]; //数量
  623. $str1 = substr($itemId, 0, 3); # prefix
  624. switch ($str1) {
  625. // 10x 怪物卡或者英雄卡牌获取
  626. case "101":
  627. case "202":
  628. case "201":
  629. // if (1 == $src && $user->heros->maxCollectCount <= StoreProc::CheckHeroNum($req)) {
  630. // # 战斗模块获得的英雄,超过上限丢弃
  631. // echo "英雄满了."; # 满了如何处理? 直接丢弃吗? 是的, ok. gwang 2017年4月22日 16:49:58 问过
  632. // } else {
  633. // HeroProc::AddHeroTFromStore($req, $itemId);
  634. // }
  635. break;
  636. // 30x 装备物品的获取.
  637. case "301":
  638. case "302":
  639. case "303":
  640. if (StoreProc::GetItemMaxNum($req) > StoreProc::CheckItemNum($req)) {
  641. StoreProc::PutEquipInStore($itemId, $req);
  642. }
  643. break;
  644. //宝石的获取 + 抽奖券+经验书
  645. case "304":
  646. case "305":
  647. case "307":
  648. if (StoreProc::GetItemMaxNum($req) > StoreProc::CheckItemNum($req)) {
  649. StoreProc:: PutOverlyingItemInStore($itemId, $num, $req);
  650. }
  651. break;
  652. // // 31x 碎片
  653. case "310": # 英雄碎片
  654. case "311": # 小怪碎片
  655. case "312": # boss碎片
  656. case "313": # 装备碎片
  657. case "314": # 装备碎片
  658. case "315": # 装备碎片\
  659. if (StoreProc::GetItemMaxNum($req) > StoreProc::CheckItemNum($req)) {
  660. StoreProc::addSegmentIntoStore($req->userInfo->game->store, $itemId, $num);
  661. }
  662. break;
  663. case "701": # 宝箱
  664. case "702":
  665. case "703":
  666. case "704":
  667. StoreProc::putBoxexInStore($req->userInfo->game->store, $itemId, $num);
  668. break;
  669. // 游戏内货币的获取
  670. case "399":
  671. switch ($itemId) {
  672. case META_CASH_ITEMID: # 钻石
  673. UserGameModel::Add_Cash($req->userInfo->game, $num);
  674. break;
  675. case META_GOLD_ITEMID: # 金币
  676. UserGameModel::Add_Gold($req->userInfo->game, $num);
  677. break;
  678. case META_tili_ITEMID: # 体力
  679. UserGameModel::Add_tili($req, $num);
  680. break;
  681. case META_FriendShipPoit_ItemId: # 友情
  682. UserGameModel::Add_FriendPoint($req->userInfo->game, $num);
  683. break;
  684. default :
  685. }
  686. break;
  687. ////熔炼元素的获取
  688. case "388":
  689. // StoreProc::PutElementInStore($itemId, $num, $req);
  690. break;
  691. default:
  692. break;
  693. }
  694. }
  695. // // 更新数据库数据
  696. UserProc::updateUserInfo(); ////这行不要注释掉,除非在邮件和任务领奖那里加入更新(在调用addmultiInstore函数的后面加入updateuserinfo的话,就可以注销到这行代码)
  697. return ErrCode::ok; // 返回
  698. }
  699. /// 物品类型,物品typeid,物品数量
  700. public static function AddItemInStore($req) {
  701. $itemType = $req->paras[0];
  702. $itemId = $req->paras[1];
  703. $num = $req->paras[2]; //数量
  704. if ($itemType < 4) {
  705. StoreProc::PutEquipInStore($itemId, $req);
  706. } else if ($itemType == 4) {
  707. StoreProc:: PutOverlyingItemInStore($itemId, $num, $req);
  708. } else if ($itemType == 10) {
  709. StoreProc:: PutOverlyingItemInStore($itemId, $num, $req); ///准备添加其他
  710. }
  711. // 更新数据库数据
  712. UserProc::updateUserInfo();
  713. // 返回
  714. $ret = array('resp' => "succeed!");
  715. $resp = Resp::ok($ret); //返回必须是object
  716. return $resp;
  717. }
  718. /**
  719. * 将装备放入背包
  720. * @param type $itemId
  721. * @param Req $req
  722. */
  723. static function PutEquipInStore($itemId, &$req) {
  724. $privateState = $req->userInfo->game->privateState;
  725. if (!CommUtil::isPropertyExists($privateState, "currentId")) { // 如果仓库中已经有这种元素,则其数目+1
  726. $req->userInfo->game->privateState->currentId = 1;
  727. }
  728. $cid = $req->userInfo->game->privateState->currentId++;
  729. $equip = ObjectInit();
  730. $equip->typeId = $itemId;
  731. $req->userInfo->game->store->equipment->$cid = $equip;
  732. return $cid;
  733. // SystemProc::GetEquip($req->zoneid, $req->userInfo->game, $itemId); # 添加获得装备的消息
  734. }
  735. /**
  736. * 将可叠加物品放入背包
  737. * @param type $itemId
  738. * @param UserGameModel $game
  739. */
  740. static function PutOverlyingItemInStore($itemId, $num, &$req) {
  741. // $game->userInfo->game;
  742. if (CommUtil::isPropertyExists($req->userInfo->game->store->items, $itemId)) {// 如果仓库中已经有这种元素,则其数目+1
  743. $req->userInfo->game->store->items->$itemId += $num;
  744. } else {// 如果仓库中没有这种元素,则其数目置1
  745. $req->userInfo->game->store->items->$itemId = $num;
  746. }
  747. }
  748. /**
  749. * 物品包裹打散成独立道具到仓库
  750. * @param GoodsItemModel $itemModel
  751. * @param Req $req
  752. * @return type
  753. */
  754. static function addSeprateItem($itemModel, $req) {
  755. // var_dump($itemModel);
  756. $user = $req->userInfo->game;
  757. $store = $req->userInfo->game->store;
  758. $itemContent = JsonUtil::decode($itemModel->content);
  759. foreach ($itemContent as $itemId => $itemNum) {
  760. if ($itemId == META_GOLDITEMID) { # 如果是金币 1
  761. UserModel::Add_Gold($user, $itemNum);
  762. } else if ($itemId == META_CASHITEMID) { # 如果是宝石 2
  763. UserModel::present_cash($req, $itemNum, "<" . $req->cmd . ">道具解包-" . $itemModel->name);
  764. } else if ($itemId == META_SPAEITEMID) { # 如果是能量块 3
  765. $user->spar += $itemNum;
  766. } else if ($itemId == META_YUANBAOITEMID) { # 元宝,后加的只能采用字段补偿机制 7
  767. PayProc::m_AddUserYuanbao($req, $itemNum, "<" . $req->cmd . ">道具解包-" . $itemModel->name);
  768. } else { // 否则就是道具
  769. $typid = substr("$itemId", 0, 3);
  770. switch ($typid) {
  771. case "101": # 英雄
  772. if (property_exists($user->heros, $itemId)) {
  773. DebugHelper::var_dump(" 已经有了xxx英雄了.");
  774. } else { # 给玩家创建一个英雄
  775. $hero = new HeroModel();
  776. $instanceID = now();
  777. $heroID = $itemId;
  778. $hero->reInit($heroID, $instanceID);
  779. $user->heros->$heroID = $hero;
  780. }
  781. break;
  782. case '102': # 碎片
  783. if (CommUtil::isPropertyExists($store->segement, $itemId)) {
  784. $store->segement->$itemId += $itemNum;
  785. } else {
  786. $store->segement->$itemId = $itemNum;
  787. }
  788. break;
  789. case '203': # 宝箱
  790. if (CommUtil::isPropertyExists($store->boxes, $itemId)) {
  791. $store->boxes->$itemId += $itemNum;
  792. } else {
  793. $store->boxes->$itemId = $itemNum;
  794. }
  795. break;
  796. default :
  797. break;
  798. }
  799. // for ($i = 0; $i < $itemNum; $i++) {
  800. // $store->items[] = $itemId;
  801. // }
  802. }
  803. // break; # 不会循环的,一个物品中只有第一个道具配置生效,否则
  804. }
  805. UserProc::updateUserInfo();
  806. # 添加活动记录
  807. // self::checkActiveItem($req, $itemModel);
  808. }
  809. /**
  810. * [6417] 给英雄装上言灵
  811. * @param req $req
  812. * @return type
  813. */
  814. static function WearYanlingToHero($req) {
  815. $user = $req->userInfo->game; # user引用
  816. list($itemtype, $yanling_uid, $herouid) = $req->paras; # 提取参数: 装备类型, 装备的UID, 英雄的UID
  817. if (!CommUtil::isPropertyExists($user->store->yanling, $yanling_uid)) { # 检测是否存在该言灵
  818. Err(ErrCode::store_itemno_err);
  819. }
  820. $yanlingVo = $user->store->yanling->$yanling_uid; # 取言灵对象
  821. if ($yanlingVo->herouid > 0 && $yanlingVo->herouid != $herouid) { # 检测该言灵是否装备到其他英雄身上
  822. Err(ErrCode::store_equipWeared_err);
  823. }
  824. $collectHeros = $user->heros->collectHeros; # 英雄集合
  825. if (!$collectHeros) { # 防御对象为空
  826. Err(ErrCode::err_innerfault);
  827. }
  828. if (!CommUtil::isPropertyExists($collectHeros, $herouid)) { # 检查英雄是否存在
  829. Err(ErrCode::hero_no);
  830. }
  831. $user->store->yanling->$yanling_uid->herouid = $herouid; # 言灵上添加反向引用, 避免查询时的循环
  832. $oldYLid = $collectHeros->$herouid->yanling->$itemtype->itemuid; # 旧言灵id
  833. if ($oldYLid > 0) { # 代表替换操作
  834. $user->store->yanling->$oldYLid->herouid = 0; # 清理旧言灵的
  835. }
  836. $collectHeros->$herouid->yanling->$itemtype->itemuid = $yanling_uid; # 英雄身上添加言灵记录
  837. UserProc::updateUserInfo(); # 5.回写数据
  838. $ret = array('resp' => "succeed!");
  839. $resp = Resp::ok($ret); // 返回
  840. // StoreProc::CheckItemNum($req);
  841. return $resp;
  842. }
  843. /**
  844. * [6416] 给英雄卸下言灵
  845. * @param req $req
  846. * @return type
  847. */
  848. static function UnWieldYanling($req) {
  849. $user = $req->userInfo->game; # user引用
  850. list($itemtype, $yanling_uid, $herouid) = $req->paras; # 提取参数: 装备类型, 装备的UID, 拥有该装备的英雄的UID
  851. $collectHeros = $user->heros->collectHeros;
  852. if (!$collectHeros) {
  853. Err(ErrCode::err_innerfault);
  854. }
  855. if (!CommUtil::isPropertyExists($collectHeros, $herouid)) { # 检测是否存在拥有该装备的英雄
  856. Err(ErrCode::hero_no);
  857. }
  858. if (!CommUtil::isPropertyExists($user->store->yanling, $yanling_uid)) { # 检测是否存在该装备
  859. Err(ErrCode::store_itemno_err);
  860. }
  861. if ($user->store->yanling->$yanling_uid->herouid == $herouid) { # 取装备对象
  862. $user->store->yanling->$yanling_uid->herouid = 0;
  863. }
  864. if ($collectHeros->$herouid->yanling->$itemtype->itemuid != $yanling_uid) {
  865. Err(ErrCode::store_noequip_err);
  866. }
  867. $collectHeros->$herouid->equip->weapon->itemuid = 0; # 卸下
  868. UserProc::updateUserInfo(); # 回写数据
  869. $ret = array('resp' => "succeed!");
  870. $resp = Resp::ok($ret); // 返回
  871. // StoreProc::CheckItemNum($req);
  872. return $resp;
  873. }
  874. /**
  875. * [6410] 给英雄穿装备
  876. * @param req $req
  877. * @return type
  878. */
  879. static function WearEquipToHero($req) {
  880. $user = $req->userInfo->game; # user引用
  881. list($itemtype, $equipuid, $herouid) = $req->paras; # 提取参数: 装备类型, 装备的UID, 英雄的UID
  882. if (!CommUtil::isPropertyExists($user->store->equipment, $equipuid)) { # 检测是否存在该装备
  883. Err(ErrCode::store_itemno_err);
  884. }
  885. $equipVo = $user->store->equipment->$equipuid; # 取装备对象
  886. if ($equipVo->herouid > 0) { # 检测该装备是否装备到其他英雄身上
  887. if ($equipVo->herouid != $herouid) {
  888. Err(ErrCode::store_equipWeared_err);
  889. }
  890. $user->store->equipment->$equipuid->herouid = 0; # 清理原来已经装备的言灵的反指向
  891. }
  892. $collectHeros = $user->heros->collectHeros;
  893. if (!$collectHeros) { # 防御对象为空
  894. Err(ErrCode::err_innerfault);
  895. }
  896. if (!CommUtil::isPropertyExists($collectHeros, $herouid)) { # 检查是否存在需要装备的英雄
  897. Err(ErrCode::hero_no);
  898. }
  899. $user->store->equipment->$equipuid->herouid = $herouid; # 装备上添加反向引用, 避免查询时的循环
  900. $oldEquipId = 0;
  901. switch ($itemtype) { # 添加或替换英雄该部位的装备
  902. case 1: # 武器
  903. $oldEquipId = $collectHeros->$herouid->equip->weapon->itemuid;
  904. $collectHeros->$herouid->equip->weapon->itemuid = $equipuid;
  905. break;
  906. case 2: # 防具
  907. $oldEquipId = $collectHeros->$herouid->equip->armor->itemuid;
  908. $collectHeros->$herouid->equip->armor->itemuid = $equipuid;
  909. break;
  910. case 3: # 饰品
  911. $oldEquipId = $collectHeros->$herouid->equip->ring->itemuid;
  912. $collectHeros->$herouid->equip->ring->itemuid = $equipuid;
  913. break;
  914. default :
  915. Err(ErrCode::store_equip_type);
  916. break;
  917. }
  918. if ($oldEquipId > 0) {
  919. $user->store->equipment->$oldEquipId->herouid = 0;
  920. }
  921. UserProc::updateUserInfo(); // 5.回写数据
  922. $ret = array('resp' => "succeed!");
  923. $resp = Resp::ok($ret); // 返回
  924. // StoreProc::CheckItemNum($req);
  925. return $resp;
  926. }
  927. /**
  928. * [6411] 给英雄脱装备
  929. * @param req $req
  930. * @return type
  931. */
  932. static function UnWieldEquip($req) {
  933. $user = $req->userInfo->game; # user引用
  934. list($itemtype, $equipuid, $herouid) = $req->paras; # 提取参数: 装备类型, 装备的UID, 拥有该装备的英雄的UID
  935. $collectHeros = $user->heros->collectHeros;
  936. if (!$collectHeros) {
  937. Err(ErrCode::err_innerfault);
  938. }
  939. if (!CommUtil::isPropertyExists($collectHeros, $herouid)) { # 检测是否存在拥有该装备的英雄
  940. Err(ErrCode::hero_no);
  941. }
  942. if (!CommUtil::isPropertyExists($user->store->equipment, $equipuid)) { # 检测是否存在该装备
  943. Err(ErrCode::store_itemno_err);
  944. }
  945. if ($user->store->equipment->$equipuid->herouid == $herouid) { # 取装备对象
  946. $user->store->equipment->$equipuid->herouid = 0;
  947. }
  948. switch ($itemtype) { # 检测该装备是否装备在该英雄身上
  949. case 1: # 武器
  950. if ($collectHeros->$herouid->equip->weapon->itemuid != $equipuid) {
  951. Err(ErrCode::store_noequip_err);
  952. }
  953. $collectHeros->$herouid->equip->weapon->itemuid = 0; # 卸下
  954. break;
  955. case 2: # 防具
  956. if ($collectHeros->$herouid->equip->armor->itemuid != $equipuid) {
  957. Err(ErrCode::store_noequip_err);
  958. }
  959. $collectHeros->$herouid->equip->armor->itemuid = 0;
  960. break;
  961. case 3: # 饰品
  962. if ($collectHeros->$herouid->equip->ring->itemuid != $equipuid) {
  963. Err(ErrCode::store_noequip_err);
  964. }
  965. $collectHeros->$herouid->equip->ring->itemuid = 0;
  966. break;
  967. default :
  968. Err(ErrCode::store_equip_type);
  969. }
  970. UserProc::updateUserInfo(); # 回写数据
  971. $ret = array('resp' => "succeed!");
  972. $resp = Resp::ok($ret); // 返回
  973. // StoreProc::CheckItemNum($req);
  974. return $resp;
  975. }
  976. // </editor-fold>
  977. //
  978. // <editor-fold defaultstate="collapsed" desc=" 辅助方法 ">
  979. /**
  980. * 将宝箱放入仓库
  981. * @param StoreModel $store
  982. * @param int $boxId 宝箱类型编号
  983. * @param int $num 数量
  984. */
  985. static function putBoxexInStore($store, $boxId, $num) {
  986. if (CommUtil::isPropertyExists($store->boxes, $boxId)) {
  987. $store->boxes->$boxId += $num;
  988. } else {
  989. $store->boxes->$boxId = $num;
  990. }
  991. }
  992. /**
  993. * 检查背包中物品的个数
  994. * @param type $req
  995. * @return int
  996. */
  997. public static function CheckItemNum($req) {
  998. $ItemObj = $req->userInfo->game->store->items;
  999. $EquipObj = $req->userInfo->game->store->equipment;
  1000. $SegementObj = $req->userInfo->game->store->segement;
  1001. $HeroObj = $req->userInfo->game->heros->collectHeros;
  1002. $ItemNum = 0;
  1003. ////检查宝石类可叠加物品的格子占用
  1004. if ($ItemObj) {
  1005. foreach ($ItemObj as $value) {
  1006. $ItemNum++;
  1007. }
  1008. }
  1009. if ($SegementObj) {
  1010. foreach ($SegementObj as $value) {
  1011. $ItemNum++;
  1012. }
  1013. }
  1014. ////检测装备类物品格子占用
  1015. if ($EquipObj) {
  1016. foreach ($EquipObj as $value) {
  1017. $ItemNum++;
  1018. }
  1019. }
  1020. ////检测英雄装备到身上的情况,装备到英雄身上不占格子,要减去.
  1021. if ($HeroObj) {
  1022. foreach ($HeroObj as $value) {
  1023. // echo var_dump($HeroObj);
  1024. $HeroEquipId = $value->equip->weapon->itemuid;
  1025. if ($HeroEquipId > 0) {
  1026. $ItemNum--;
  1027. }
  1028. $HeroEquipId = $value->equip->armor->itemuid;
  1029. if ($HeroEquipId > 0) {
  1030. $ItemNum--;
  1031. }
  1032. $HeroEquipId = $value->equip->ring->itemuid;
  1033. if ($HeroEquipId > 0) {
  1034. $ItemNum--;
  1035. }
  1036. }
  1037. }
  1038. $req->userInfo->game->privateState->ItemNum = $ItemNum;
  1039. return $ItemNum;
  1040. }
  1041. /**
  1042. * 获取物品格子的上限值
  1043. * @param type $req
  1044. * @return int 上限数值
  1045. */
  1046. public static function GetItemMaxNum($req) {
  1047. $g = glc();
  1048. if (!CommUtil::isPropertyExists($req->userInfo->game->privateState, "maxItemNum")) {
  1049. $req->userInfo->game->privateState->maxItemNum = $g->Item_Packet_MaxNum;
  1050. }
  1051. return $req->userInfo->game->privateState->maxItemNum;
  1052. }
  1053. public static function AddPacketNum($req) {
  1054. $g = glc();
  1055. // $user = $req->userInfo->game; # user引用
  1056. if (!CommUtil::isPropertyExists($req->userInfo->game->privateState, "maxItemNum")) {
  1057. $req->userInfo->game->privateState->maxItemNum = $g->Item_Packet_MaxNum;
  1058. }
  1059. $costCash = $g->Item_Packet_NumCostCash;
  1060. $bDeal = false;
  1061. if ($costCash > 0) {
  1062. if ($req->userInfo->game->cash < $costCash) {
  1063. Err(ErrCode::notenough_spar);
  1064. }
  1065. $bDeal = UserGameModel::Consume_Cash($req->userInfo->game, $costCash);
  1066. } else {
  1067. Err(ErrCode::paras_err);
  1068. }
  1069. //6.进行消耗
  1070. if ($bDeal) {
  1071. $req->userInfo->game->privateState->maxItemNum += 10;
  1072. UserProc::updateUserInfo();
  1073. $result = ObjectInit();
  1074. $result->maxItemNum = $req->userInfo->game->privateState->maxItemNum;
  1075. $resp = Resp::ok($result);
  1076. }
  1077. StoreProc::CheckItemNum($req);
  1078. return $resp;
  1079. }
  1080. // </editor-fold>
  1081. //
  1082. // -------------- 已废弃的代码 -------------------------------
  1083. //
  1084. //
  1085. // <editor-fold defaultstate="collapsed" desc=" 出售 ">
  1086. //
  1087. /**
  1088. * 出售单一的物品
  1089. * @param Req $req
  1090. * @return type
  1091. */
  1092. static function sellItem($req) {
  1093. $resp = new Resp();
  1094. $mem = $req->mem;
  1095. // $user = $req->userInfo->user;
  1096. $store = $req->userInfo->game->store; //$req->userInfo->game->store->items
  1097. //客户端参数解析
  1098. $type = $req->paras[0]; //1=神兽 2=建筑 //需要判断是否叠加
  1099. $itemId = $req->paras[1]; // 注意:这里不是单体的id,而是物种的id
  1100. if ($type > 3) {
  1101. $count = intval($req->paras[2]); // 数量
  1102. $uid = 0;
  1103. } else {
  1104. $count = 1;
  1105. $uid = $req->paras[2];
  1106. }//物品的uid
  1107. ////0是type 1是itemid,2是uid或者是数量
  1108. if ($type > 3 && $type < 8) { // 从仓库出售宝石 出售可叠加的物品
  1109. $ok = StoreProc::removeItemFromStore($store, $itemId, $count); // 支持移除指定数量
  1110. my_Assert($ok == ErrCode::ok, $ok); //1.如果仓库道具移出时出错,则直接返回错误
  1111. // echo "弄弄";
  1112. $gem = GameConfig::item_getItem($itemId); // ConstProc::getItemConst($itemId);
  1113. echo var_export($gem);
  1114. //2.检测是否存在该物品的原始物种
  1115. if ($gem == null) {
  1116. Err(ErrCode::err_godpet_noconst);
  1117. }
  1118. // 发金币
  1119. UserGameModel::Add_Gold($req->userInfo->game, $gem->maijia * $count);
  1120. $ret = array('resp' => "succeed!");
  1121. $resp = Resp::ok($ret);
  1122. UserProc::updateUserInfo();
  1123. } else if ($type == 8) { // 从仓库出售碎片 出售可叠加的物品
  1124. $ok = StoreProc::removeItemFromStore($store, $itemId, $count); // 支持移除指定数量
  1125. my_Assert($ok == ErrCode::ok, $ok); //1.如果仓库道具移出时出错,则直接返回错误
  1126. // echo "弄弄";
  1127. $gem = GameConfig::segment_getItem($itemId); // ConstProc::getItemConst($itemId);
  1128. // echo var_export($gem);
  1129. //2.检测是否存在该物品的原始物种
  1130. if ($gem == null) {
  1131. Err(ErrCode::err_godpet_noconst);
  1132. }
  1133. // 发金币
  1134. UserGameModel::Add_Gold($req->userInfo->game, $gem->saleGoldPrice * $count);
  1135. $ret = array('resp' => "succeed!");
  1136. $resp = Resp::ok($ret);
  1137. UserProc::updateUserInfo();
  1138. } else if ($type < 4 && $type > 0) { # 这里是装备
  1139. if ($count > 1) {
  1140. Err(ErrCode::paras_err);
  1141. }
  1142. if ($uid < 1) {
  1143. Err(ErrCode::paras_err);
  1144. }
  1145. $ok = StoreProc::removeEquipFromStore($uid, $itemId, $req); # 从背包移除
  1146. if (!$ok) {//1.如果背包道具移出时出错,则直接返回错误
  1147. Err(ErrCode::store_removefail);
  1148. }
  1149. $item = GameConfig::item_getItem($itemId); // ConstProc::getItemConst($itemId);
  1150. if ($item == null) { //2.检测是否存在装备的原始数据
  1151. Err(ErrCode::err_const_no);
  1152. }
  1153. UserGameModel::Add_Gold($req->userInfo->game, $item->maijia);
  1154. $ret = array('resp' => "succeed!");
  1155. $resp = Resp::ok($ret); //返回必须是object
  1156. UserProc::updateUserInfo();
  1157. } else {
  1158. Err(ErrCode::paras_err);
  1159. }
  1160. StoreProc::CheckItemNum($req);
  1161. return $resp;
  1162. }
  1163. /**
  1164. * 卖出一堆物品时候,检测每个单个物品是否符合卖的条件
  1165. * @param Req $req
  1166. * @return type
  1167. */
  1168. static function preSellSingleFromStore(&$req, $type, $itemId, $count, $uid) {
  1169. $resp = new Resp();
  1170. $mem = $req->mem;
  1171. // $user = $req->userInfo->user;
  1172. $store = $req->userInfo->game->store; //$req->userInfo->game->store->items
  1173. //客户端参数解析
  1174. ////0是type 1是itemid,2是uid或者是数量
  1175. if ($type > 3 && $type < 8) { // 从仓库出售宝石 出售可叠加的物品
  1176. echoLine(":fs::");
  1177. $ok = StoreProc::removeItemFromStore($store, $itemId, $count); // 支持移除指定数量
  1178. //1.如果仓库道具移出时出错,则直接返回错误
  1179. my_Assert($ok == ErrCode::ok, $ok);
  1180. echo "弄弄";
  1181. $gem = GameConfig::item_getItem($itemId); // ConstProc::getItemConst($itemId);
  1182. echo var_export($gem);
  1183. //2.检测是否存在该物品的原始物种
  1184. if ($gem == null) {
  1185. Err(ErrCode::err_godpet_noconst);
  1186. }
  1187. // 发金币
  1188. UserGameModel::Add_Gold($req->userInfo->game, $gem->maijia * $count);
  1189. $ret = array('resp' => "succeed!");
  1190. $resp = Resp::ok($ret);
  1191. } else if ($type == 8) { // 从仓库出售碎片 出售可叠加的物品
  1192. $ok = StoreProc::removeItemFromStore($store, $itemId, $count); // 支持移除指定数量
  1193. //1.如果仓库道具移出时出错,则直接返回错误
  1194. my_Assert($ok == ErrCode::ok, $ok);
  1195. // echo "弄弄";
  1196. $gem = GameConfig::segment_getItem($itemId); // ConstProc::getItemConst($itemId);
  1197. // echo var_export($gem);
  1198. //2.检测是否存在该物品的原始物种
  1199. if ($gem == null) {
  1200. Err(ErrCode::err_godpet_noconst);
  1201. }
  1202. // 发金币
  1203. UserGameModel::Add_Gold($req->userInfo->game, $gem->saleGoldPrice * $count);
  1204. $ret = array('resp' => "succeed!");
  1205. $resp = Resp::ok($ret);
  1206. } else if ($type < 4 && $type > 0) { # 这里是装备
  1207. if ($count > 1) {
  1208. Err(ErrCode::paras_err);
  1209. }
  1210. if ($uid < 1) {
  1211. Err(ErrCode::paras_err);
  1212. }
  1213. $ok = StoreProc::removeEquipFromStore($uid, $itemId, $req); # 从背包移除
  1214. if (!$ok) {//1.如果背包道具移出时出错,则直接返回错误
  1215. Err(ErrCode::store_removefail);
  1216. }
  1217. $item = GameConfig::item_getItem($itemId); // ConstProc::getItemConst($itemId);
  1218. if ($item == null) { //2.检测是否存在装备的原始数据
  1219. Err(ErrCode::err_const_no);
  1220. }
  1221. UserGameModel::Add_Gold($req->userInfo->game, $item->maijia);
  1222. $ret = array('resp' => "succeed!");
  1223. $resp = Resp::ok($ret); //返回必须是object
  1224. } else {
  1225. Err(ErrCode::paras_err);
  1226. }
  1227. return $resp;
  1228. }
  1229. /**
  1230. * 从背包出售多个物品
  1231. * @param Req $req
  1232. * @return type
  1233. */
  1234. static function sellMultiItemFromStore($req) {
  1235. $resp = new Resp();
  1236. $obj = $req->paras[0]; // 获取物品的结构数组
  1237. foreach ($obj as $value) {
  1238. $type = $value[0];
  1239. $itemId = $value[1];
  1240. ////先判断一下物品类型,如果是可叠加的,就按数量取值,如果是不可叠加的就按uid取值
  1241. if ($type > 3) {
  1242. $count = intval($value[2]); // 数量
  1243. $uid = 0;
  1244. } else {
  1245. $count = 1;
  1246. $uid = $value[2];
  1247. }//物品的uid
  1248. $resp = StoreProc:: preSellSingleFromStore($req, $type, $itemId, $count, $uid);
  1249. }
  1250. if (0 == $resp->err) {
  1251. UserProc::updateUserInfo();
  1252. }
  1253. StoreProc::CheckItemNum($req);
  1254. return $resp;
  1255. }
  1256. // </editor-fold>
  1257. //
  1258. }