StoreProc.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. <?php
  2. /*
  3. * To change this license header, choose License Headers in Project Properties.
  4. * To change this template file, choose Tools | Templates
  5. * and open the template in the editor.
  6. */
  7. namespace loyalsoft;
  8. /**
  9. * Description of StoreProc
  10. *
  11. * @author c'y'zhao
  12. */
  13. class StoreProc {
  14. /**
  15. * 逻辑分发
  16. * 所有的Proc中必须有这样一个方法
  17. * @param Req $req
  18. */
  19. public static function procMain($req) {
  20. switch ($req->cmd) {
  21. case CmdCode::cmd_store_put: # 6401 放入仓库
  22. return StoreProc::AddItemInStore();
  23. case CmdCode::cmd_store_equip: # 6402 装备
  24. return StoreProc::equip();
  25. case CmdCode::cmd_store_RemoveEquip: # 6403 卸下装备
  26. return StoreProc::RemoveEquip();
  27. case CmdCode::cmd_store_equipUpgrade: # 6404 装备升级
  28. return StoreProc::equipUpgrade();
  29. case CmdCode::cmd_store_equipUpgrade_MaxLv: # 6405 一键升级(装备)
  30. return StoreProc::equipUpgrade_MaxLv();
  31. case CmdCode::cmd_store_equipCompose: # 6406 装备合成(升阶/进化)
  32. return StoreProc::equipCompose();
  33. case CmdCode::store_equip_fallLevel: #6408 装备降级
  34. return StoreProc::equipFallLevel();
  35. case CmdCode::store_equip_fallQual: #6409 装备降品
  36. return StoreProc::equipFallQual();
  37. default:
  38. Err(ErrCode::cmd_err);
  39. }
  40. }
  41. /**
  42. * 6409 装备降品
  43. * @return type
  44. */
  45. public static function equipFallLevel() {
  46. list($uid) = req()->paras;//武器uid
  47. $price = self::GetEquipFallLevelInfo($uid);
  48. StoreProc::AddMultiItemInStore($price);
  49. ctx()->store->equip->$uid->level = 1;
  50. UserProc::updateUserInfo();
  51. return Resp::ok(array(
  52. 'gold' => ctx()->baseInfo->gold,
  53. 'store' => ctx()->store,));
  54. }
  55. public static function GetEquipFallLevelInfo($uid) {
  56. my_Assert(StlUtil::dictHasProperty(ctx()->store->equip, $uid), ErrCode::user_store_NoEquip);
  57. $curLv = ctx()->store->equip->$uid->level;
  58. my_Assert($curLv > 1, ErrCode::user_store_equipNoFallLevel);
  59. $equipMo = GameConfig::equip_getItem(ctx()->store->equip->$uid->typeId);
  60. my_Assert($equipMo != null, ErrCode::err_const_no);
  61. $id = $equipMo->position;
  62. $strList = explode(';', glc()->equipLeveUpTuzhi);
  63. $tuzhiId = 0;
  64. foreach ($strList as $str) {
  65. $s = explode(',', $str);
  66. if ($s[0] == $id)
  67. {
  68. $tuzhiId = $s[1];
  69. break;
  70. }
  71. }
  72. $dic = GameConfig::equip_levelupgrade();
  73. $gold = 0;
  74. $tuzhiNum = 0;
  75. for ($i = 1; $i < $curLv; $i++)
  76. {
  77. $gold += $dic->$i->needGold;
  78. $tuzhiNum += $dic->$i->needItemNum;
  79. }
  80. $price = "1,".$gold.";".$tuzhiId.",".$tuzhiNum;
  81. return $price;
  82. }
  83. /**
  84. * 6408 装备降级
  85. * @return type
  86. */
  87. public static function equipFallQual() {
  88. list($uid) = req()->paras;
  89. my_Assert(StlUtil::dictHasProperty(ctx()->store->equip, $uid), ErrCode::user_store_NoEquip);
  90. $qual = ctx()->store->equip->$uid->qual;
  91. my_Assert($qual > 4, ErrCode::user_store_equipNoFallQual);
  92. $sList = explode(';',glc()->equipQualUnlockSkillId);
  93. $tag = true;
  94. $fallQual = $qual;
  95. foreach ($sList as $s) {
  96. $str = explode(',', $s);
  97. if ($qual == $str[0])
  98. {
  99. $tag = false;
  100. break;
  101. }
  102. $num = 0;
  103. $fallQual = $str[0];
  104. foreach ($str as $str2)
  105. {
  106. $num += 1;
  107. if ($str2 == $qual)
  108. {
  109. break;
  110. }
  111. }
  112. }
  113. my_Assert($tag, ErrCode::user_store_equipNoFallQual);
  114. $posId = 1;
  115. $commonId = 0;
  116. $commonList = explode(';', glc()->EquipFallQualCommonItem);
  117. foreach ($commonList as $str)
  118. {
  119. $s = explode(',', $str);
  120. if ($s[0] == $posId)
  121. {
  122. $commonId = $s[1];
  123. }
  124. }
  125. $price = self::GetEquipFallLevelInfo($uid);
  126. StoreProc::AddMultiItemInStore($price);
  127. if($num -1 > 0){
  128. $num-=1;
  129. StoreProc::AddMultiItemInStore($commonId.','.$num);
  130. }
  131. ctx()->store->equip->$uid->qual = $fallQual;
  132. UserProc::updateUserInfo();
  133. return Resp::ok(array(
  134. 'gold' => ctx()->baseInfo->gold,
  135. 'store' => ctx()->store,));
  136. }
  137. /**
  138. * 6406 合成
  139. * @return type
  140. */
  141. public static function equipCompose() {
  142. list($uid) = req()->paras;
  143. $user = ctx();
  144. //my_Assert(StlUtil::dictHasProperty($user->store->equip, $uid), ErrCode::user_store_NoEquip);
  145. UserProc::updateUserInfo();
  146. return Resp::ok(array(
  147. 'heros' => $user->heros,
  148. 'store' => $user->store,));
  149. }
  150. /**
  151. * 装备
  152. * @return type
  153. */
  154. public static function equip() {
  155. list($uid) = req()->paras;
  156. $user = ctx();
  157. my_Assert(StlUtil::dictHasProperty($user->store->equip, $uid), ErrCode::user_store_NoEquip);
  158. $mo = GameConfig::equip_getItem($user->store->equip->$uid->typeId);
  159. my_Assert($mo != null, ErrCode::err_const_no);
  160. $posId = $mo->position;
  161. $heroId = $user->heros->CurrentHeroId;
  162. $user->store->equip->$uid->posId = $posId;
  163. if ($user->store->equipPosition->$posId > 0) {
  164. $oldUid = $user->store->equipPosition->$posId;
  165. $user->store->equip->$oldUid->posId = 0;
  166. }
  167. $user->store->equipPosition->$posId = $uid;
  168. ctx($user);
  169. UserProc::updateUserInfo();
  170. return Resp::ok(array(
  171. 'heros' => $user->heros,
  172. 'store' => $user->store,));
  173. }
  174. /**
  175. * 卸下装备
  176. * @return type
  177. */
  178. public static function RemoveEquip() {
  179. list($posId) = req()->paras;
  180. $user = ctx();
  181. $heroId = $user->heros->CurrentHeroId;
  182. if ($user->store->equipPosition->$posId > 0) {
  183. $oldUid = $user->store->equipPosition->$posId;
  184. $user->store->equip->$oldUid->posId = 0;
  185. $user->store->equipPosition->$posId = 0;
  186. }
  187. UserProc::updateUserInfo();
  188. return Resp::ok(array(
  189. 'heros' => $user->heros,
  190. 'store' => $user->store,));
  191. }
  192. /**
  193. * 升级装备
  194. * @return type
  195. */
  196. public static function equipUpgrade() {
  197. list($uid) = req()->paras; //mask = 1:表示战斗中掉落
  198. $user = ctx();
  199. $lv = $user->store->equip->$uid->level;
  200. $Mo = GameConfig::equip_levelupgrade_getItem($lv + 1);
  201. my_Assert($user->baseInfo->gold >= $Mo->needGold, ErrCode::notenough_gold_msg);
  202. $position = GameConfig::equip_getItem($user->store->equip->$uid->typeId)->position; //图纸
  203. $typeId = 0;
  204. $strArr = explode(';', GameConfig::globalsettings()->equipLeveUpTuzhi);
  205. foreach ($strArr as $str) {
  206. $list = explode(',', $str);
  207. if ($list[0] == $position) {
  208. $typeId = $list[1];
  209. break;
  210. }
  211. }
  212. $num = $Mo->needItemNum;
  213. my_Assert(StlUtil::dictHasProperty($user->store->items, $typeId) && $user->store->items->$typeId >= $num, ErrCode::notenough_item);
  214. $user->store->removeItem($typeId, $num);
  215. $user->store->equip->$uid->level += 1;
  216. ctx()->baseInfo->Consume_Gold($Mo->needGold);
  217. ctx($user);
  218. UserProc::updateUserInfo();
  219. return Resp::ok(array(
  220. 'gold' => $user->baseInfo->gold,
  221. 'store' => $user->store));
  222. }
  223. /**
  224. * 装备一键升级
  225. * @return type
  226. */
  227. public static function equipUpgrade_MaxLv() {
  228. list($uid) = req()->paras; //mask = 1:表示战斗中掉落
  229. $user = ctx();
  230. $equip = $user->store->equip->$uid;
  231. $lv = $equip->level;
  232. $maxLv = GameConfig::equip_getItem($equip->typeId)->maxLv;
  233. $need_gold = 0;
  234. $need_item = 0;
  235. $itemNum = 0;
  236. $position = GameConfig::equip_getItem($equip->typeId)->position;
  237. $tuzhiId = 0;
  238. $strArr = explode(';', GameConfig::globalsettings()->equipLeveUpTuzhi);
  239. foreach ($strArr as $str) {
  240. $list = explode(',', $str);
  241. if ($list[0] == $position) {
  242. $tuzhiId = $list[1];
  243. break;
  244. }
  245. }
  246. $needItem2 = 0;
  247. if (StlUtil::dictHasProperty($user->store->items, $tuzhiId)) {
  248. $itemNum = $user->store->items->$tuzhiId;
  249. }
  250. $nGold = 0;
  251. $ll = 0;
  252. for ($i = $lv + 1; $i <= $maxLv; $i++) {
  253. $nGold += GameConfig::equip_levelupgrade_getItem($i)->needGold;
  254. $needItem2 += GameConfig::equip_levelupgrade_getItem($i)->needItemNum;
  255. if ($user->baseInfo->gold >= $nGold && $itemNum >= $needItem2) {
  256. $need_gold = $nGold;
  257. $need_item = $needItem2;
  258. $ll = $i;
  259. continue;
  260. }
  261. break;
  262. }
  263. $user->baseInfo->gold -= $need_gold;
  264. $user->store->removeItem($tuzhiId, $need_item);
  265. $user->store->equip->$uid->level += $ll;
  266. ctx($user);
  267. UserProc::updateUserInfo();
  268. return Resp::ok(array(
  269. 'gold' => $user->baseInfo->gold,
  270. //'tili' => $user->baseInfo->tili,
  271. 'store' => $user->store,
  272. ));
  273. }
  274. public static function AddItemInStore() {
  275. list($rwdStr) = req()->paras; //mask = 1:表示战斗中掉落
  276. $user = ctx();
  277. $err = self::AddMultiItemInStore($rwdStr);
  278. my_Assert(ErrCode::ok == $err, $err);
  279. UserProc::updateUserInfo();
  280. return Resp::ok(array(
  281. //'gold' => $user->baseInfo->gold,
  282. //'tili' => $user->baseInfo->tili,
  283. //'cash' => $user->baseInfo->cash,
  284. 'store' => $user->store));
  285. }
  286. /**
  287. * 具体奖励存入背包
  288. * @param type $goodsStr
  289. * @param type $src
  290. */
  291. public static function AddMultiItemInStore($goodsStr, $src = 1) {
  292. if($goodsStr == null){
  293. return;
  294. }
  295. $ary = explode(";", $goodsStr);
  296. foreach ($ary as $value) {
  297. $val = explode(",", $value);
  298. my_Assert(count($val) > 1, "解析奖励字符串出错");
  299. list($itemId, $num) = $val; # ID, 数量
  300. if (GameConfig::equip_getItem($itemId) != null) {
  301. self::PutEquipInStore($itemId, $num);
  302. } else {
  303. $itemMo = GameConfig::item_getItem($itemId);
  304. switch ($itemMo->itemType) {
  305. case 1:
  306. ctx()->baseInfo->Add_Gold($num);
  307. break;
  308. case 2:
  309. ctx()->baseInfo->Add_Cash($num);
  310. break;
  311. case 3:
  312. ctx()->baseInfo->Add_tili($num);
  313. break;
  314. case 4:
  315. ctx()->baseInfo->Add_Exp($num);
  316. break;
  317. case 100:
  318. case 103:
  319. self::PutItemsInStore($itemId, $num);
  320. break;
  321. default:
  322. break;
  323. }
  324. }
  325. }
  326. }
  327. public static function PutItemsInStore($itemId, $num) {
  328. $items = ctx()->store->items;
  329. if (StlUtil::dictHasProperty($items, $itemId)) {
  330. $items->$itemId += $num;
  331. } else {
  332. $items->$itemId = $num;
  333. }
  334. ctx()->store->items = $items;
  335. }
  336. public static function PutEquipInStore($equipId, $num) {
  337. if ($equipId == 0) {
  338. return;
  339. }
  340. $n = count((array) ctx()->store->equip) + 1;
  341. for ($index = 0; $index < $num; $index++) {
  342. $Equip = new Ins_Equip();
  343. $Equip->uid = $n;
  344. $Equip->typeId = $equipId;
  345. $Equip->qual = GameConfig::equip_getItem($equipId)->qual;
  346. ctx()->store->equip->$n = $Equip;
  347. $n += 1;
  348. }
  349. }
  350. }