306 lines
9.0 KiB
PHP
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
|
|
);
|
|
}
|
|
|
|
}
|