getAccountId($address); myself()->_addLogEx($accountId, $type, $subtype, $params); } public function addItem($address,$itemId,$itemNum){ $accountId = $this->getAccountId($address); if ($accountId) { $this->addItemByAccountId($accountId); } } public function addItemByAccountId($accountId,$itemId,$itemNum){ if ($itemNum < 1){ return; } $itemMeta = \mt\Item::get($itemId); if (!$itemMeta){ return; } $conn = myself()->_getMysql($accountId); if ($this->_isVirtualItem($itemId)) { $this->_addVirtualItem($conn,$accountId,$itemId, $itemNum); }else{ if (\mt\Item::isBagItem($itemMeta['type'], $itemMeta['sub_type'])) { $this->internalAddBag($conn,$itemId,$itemNum,$accountId); }else{ for ($i = 0; $i < $itemNum; $i++) { switch ($itemMeta['type']){ case \mt\Item::HERO_TYPE : { $this->internalAddHero($conn,$itemMeta,$accountId); } break; case \mt\Item::GUN_TYPE : { $this->internalAddGun($conn,$itemMeta,$accountId); } break; case \mt\Item::CHIP_TYPE : { $this->internalAddChip($conn,$itemMeta,$accountId); } break; case \mt\Item::HERO_SKIN_TYPE : { $this->internalAddHeroSkin($conn,$itemMeta,$accountId); } } } } } } public function decItem($address, $itemId, $itemNum) { if ($itemNum < 1) { return; } $itemMeta = \mt\Item::get($itemId); if (!$itemMeta) { return; } $accountId = $this->getAccountId($address); $conn = myself()->_getMysql($address); if ($this->_isVirtualItem($itemId)) { $this->_decVirtualItem($conn, $accountId, $itemId, $itemNum); } else { error_log("decItem itemId:$itemId not support"); return; } } private function getAccountId($address){ $row = SqlHelper::ormSelectOne (myself()->_getMysql($address), 't_user', array( 'address' => $address ) ); return $row['account_id']; } private function internalAddHeroSkin($conn,$skinMeta,$accountId){ $heroId = 0; if ($skinMeta['isdefaultskin'] == 1){ $heroId = $skinMeta['playerid']; } SqlHelper::upsert( $conn, 't_hero_skin', array( 'account_id' => $accountId, 'skin_id' => $skinMeta['id'] ), array(), array( 'account_id' => $accountId, 'skin_id' => $skinMeta['id'], 'skin_state' => 0, 'get_from' => 0, 'consume_num' => 0, 'try_expire_at' => 0, 'hero_id' => $heroId, 'createtime' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime() ) ); } private function internalAddHero($conn, $heroMeta, $accountId) { $skinItemMeta = \mt\Item::getMetaListByType(\mt\Item::HERO_SKIN_TYPE); if ($skinItemMeta){ foreach ($skinItemMeta as $value){ if ($value['playerid'] == $heroMeta['id'] && $value['isdefaultskin'] == 1){ $this->internalAddHeroSkin($conn,$value,$accountId); } } } $randAttr = array(); $fieldsKv = array( 'account_id' => $accountId, 'hero_id' => $heroMeta['id'], 'hero_lv' => 1, 'quality' => 1, 'state' => 0, 'skill_lv1' => 1, 'skill_lv2' => 1, 'rand_attr' => json_encode($randAttr), 'lock_type' => 0, 'unlock_time' => 0, 'unlock_trade_time' => 0, 'activate' => 1, 'createtime' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime() ); SqlHelper::insert( $conn, 't_hero', $fieldsKv ); } private function internalAddGun($conn, $gunMeta, $accountId) { $randAttr = array(); $fieldsKv = array( 'account_id' => $accountId, 'gun_id' => $gunMeta['id'], 'gun_lv' => 1, 'quality' => 1, 'state' => 0, 'rand_attr' => json_encode($randAttr), 'lock_type' => 0, 'unlock_time' => 0, 'unlock_trade_time' => 0, 'activate' => 1, 'createtime' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime() ); SqlHelper::insert( $conn, 't_gun', $fieldsKv ); } private function internalAddChip($conn, $itemMeta, $accountId) { $randAttr = array(); $fieldsKv = array( 'account_id' => $accountId, 'item_id' => $itemMeta['id'], 'item_num' => 1, 'state' => 0, 'rand_attr' => json_encode($randAttr), 'chip_grade' => 1, 'chip_type' => $itemMeta['sub_type'], 'activate' => 1, 'createtime' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime() ); SqlHelper::insert ($conn, 't_chip', $fieldsKv ); } private function internalAddBag($conn, $itemId, $itemNum, $accountId ) { if ($this->_isVirtualItem($itemId)) { return; } SqlHelper::upsert ($conn, 't_bag', array( 'account_id' => $accountId, 'item_id' => $itemId ), array( 'item_num' => function () use($itemNum) { return "item_num + {$itemNum}";}, 'modifytime' => myself()->_getNowTime(), ), array( 'account_id' => $accountId, 'item_id' => $itemId, 'item_num' => $itemNum, 'createtime' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime() ) ); } private function _isVirtualItem($itemId) { return in_array($itemId, array(V_ITEM_GOLD, V_ITEM_DIAMOND, V_ITEM_EXP, V_ITEM_ACTIVE,V_ITEM_BCEG,V_ITEM_STAR)); } private function _addVirtualItem($conn,$accountId,$itemId,$itemNum){ if ($itemNum <= 0){ return; } switch ($itemId) { case V_ITEM_GOLD: { $this->_updateUserInfo($conn,$accountId,array( 'gold' => function () use($itemNum) { return "gold + ${itemNum}"; } )); } break; case V_ITEM_DIAMOND: { $this->_updateUserInfo($conn,$accountId,array( 'diamond' => function () use($itemNum) { return "diamond + ${itemNum}"; } )); } default: { } break; } } private function _decVirtualItem($conn, $accountId, $itemId, $itemNum) { if ($itemNum <= 0) { return; } switch ($itemId) { case V_ITEM_GOLD: { $this->_updateUserInfo($conn,$accountId,array( 'gold' => function () use($itemNum) { return "gold - ${itemNum}"; } )); } break; case V_ITEM_DIAMOND: { $this->_updateUserInfo($conn,$accountId,array( 'diamond' => function () use($itemNum) { return "diamond - ${itemNum}"; } )); } default: { } break; } } private function _updateUserInfo($conn,$accountId,$fieldsKv) { SqlHelper::update ($conn, 't_user', array( 'account_id' => $accountId ), $fieldsKv ); } }