StoreProc.php 54 KB

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