game2006api/webapp/services/callback/ShopAddItemService.php
aozhiwei bcd06d1275 1
2024-08-08 11:54:49 +08:00

306 lines
9.0 KiB
PHP

<?php
namespace services;
require_once('mt/Item.php');
require_once('mt/GunQuality.php');
use phpcommon\SqlHelper;
use mt;
class ShopAddItemService
{
public function addGameLog($address,$type, $subtype, $params){
$accountId = $this->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
);
}
}