game2006api/webapp/services/AddItemsService.php
hujiabin 1958761e7a 1
2024-08-16 17:48:12 +08:00

200 lines
9.9 KiB
PHP

<?php
namespace services;
use mt\Item;
use models\Bag;
use models\Hero;
use models\HeroSkin;
use models\Gun;
use models\GunSkin;
use models\UserSeasonRing;
use models\Parachute;
use models\Chip;
use models\Avatar;
use phpcommon\SqlHelper;
class AddItemsService extends BaseService
{
private function _isAddAwardItem($itemId){
$itemMeta = Item::get($itemId);
if (in_array($itemMeta['type'],array(
Item::HERO_TYPE,
Item::CHIP_TYPE,
Item::APPOINT_PROP_TYPE
))){
return true;
}
return false;
}
public function addItems($items, $awardService, $propertyService){
myself()->_checkS();
$heads = array();
$headFrames = array();
foreach ($items as $item) {
//道具产出埋点
LogService::productItem($item);
if ($awardService && !$this->_isAddAwardItem($item['item_id'])){
$awardService->addItem($item['item_id'], $item['item_num']);
}
if (myself()->_isVirtualItem($item['item_id'])) {
myself()->_addVirtualItem($item['item_id'], $item['item_num']);
$propertyService->addUserChg();
} else {
$itemMeta = Item::get($item['item_id']);
if ($itemMeta) {
if (Item::isBagItem($itemMeta['type'], $itemMeta['sub_type'])) {
Bag::addItem($item['item_id'], $item['item_num']);
$propertyService->addBagChg();
} else {
for ($i=0; $i<$item['item_num']; $i++){
switch ($itemMeta['type']) {
case Item::HERO_TYPE:
{
$heroMeta = \mt\Hero::get($itemMeta['id']);
$res = Hero::addHero($heroMeta);
if ($res){
$lastIdx = SqlHelper::getLastInsertId( myself()->_getSelfMysql());
$awardService->addHero($item['item_id'],$lastIdx);
}
$propertyService->addHeroChg();
$propertyService->addUserChg();
}
break;
case Item::HERO_SKIN_TYPE:
{
HeroSkin::addSkin($itemMeta);
$propertyService->addHeroSkinChg();
}
break;
case Item::HEAD_TYPE:
{
array_push($heads, $itemMeta['id']);
$propertyService->addUserChg();
}
break;
case Item::HEAD_FRAME_TYPE:
{
array_push($headFrames, $itemMeta['id']);
$propertyService->addUserChg();
}
break;
case Item::GUN_TYPE:
{
Gun::addGun($itemMeta);
$propertyService->addGunChg();
}
break;
case Item::GUN_SKIN_TYPE:
{
GunSkin::addSkin($itemMeta['id']);
$propertyService->addGunSkinChg();
}
break;
case Item::FRAGMENT_BOX_TYPE:
{
Bag::addItem($item['item_id'], $item['item_num']);
$propertyService->addBagChg();
}
break;
case Item::RING_TYPE:
{
UserSeasonRing::addRing($itemMeta);
$propertyService->addUserChg();
}
break;
case Item::PARACHUTE_TYPE:
{
Parachute::addParachute($itemMeta);
$propertyService->addUserChg();
}
break;
case Item::CHIP_TYPE:
{
$res = Chip::addChip($itemMeta);
if ($res){
$lastIdx = SqlHelper::getLastInsertId( myself()->_getSelfMysql());
$awardService->addChip($item['item_id'],$lastIdx);
}
$propertyService->addChip();
}
break;
case Item::RANDOM_BOX_TYPE:
{
myself()->_openRandomBox($itemMeta,$awardService,$propertyService);
}
break;
case Item::AVATAR_TYPE:
{
Avatar::addAvatar($itemMeta);
}
break;
case Item::TIMING_PROP_TYPE:
{
$timingObj = new \services\TimingPropService();
$timingObj->handleProp($itemMeta);
}
break;
case Item::APPOINT_PROP_TYPE:
{
switch ($itemMeta['sub_type']){
case Item::APPOINT_HERO_SUBTYPE :{
$heroMeta = \mt\Hero::get($itemMeta['relationship']);
$res = Hero::addSyntheticHero($heroMeta,$itemMeta['quality']);
if ($res){
$lastIdx = SqlHelper::getLastInsertId( myself()->_getSelfMysql());
$awardService->addHero($heroMeta['id'],$lastIdx);
}
$propertyService->addHeroChg();
}
break;
case Item::APPOINT_CHIP_SUBTYPE :{
$chipMeta = Item::get($itemMeta['relationship']);
$res = Chip::addSyntheticChip($chipMeta,$itemMeta['quality']);
if ($res){
$lastIdx = SqlHelper::getLastInsertId( myself()->_getSelfMysql());
$awardService->addChip($chipMeta['id'],$lastIdx);
}
$propertyService->addChip();
}
break;
case Item::APPOINT_SKIN_SUBTYPE :{
}
break;
}
}
break;
default:
{
myself()->_addLogEx(myself()->_getAccountId(),
'additems', 'invalid_item',
array(
'param1' => $item['item_id'],
'param2' => $item['item_num'],
));
}
break;
}
}
}
}
}
}//end foreach
if (!empty($heads) || !empty($headFrames)) {
$userInfo = myself()->_getOrmUserInfo();
$headsDb = emptyReplace(json_decode($userInfo['head_list'], true), array());
$headFramesDb = emptyReplace(json_decode($userInfo['head_frame_list'], true), array());
$heads = array_unique(array_merge($heads, $headsDb));
$headFrames = array_values(array_unique(array_merge($headFrames, $headFramesDb)));
myself()->_updateUserInfo(array(
'head_list' => json_encode($heads),
'head_frame_list' => json_encode($headFrames),
));
}
}
}