add avatar

This commit is contained in:
hujiabin 2023-09-22 19:26:31 +08:00
parent 0be29c4e35
commit 4373194f91
6 changed files with 224 additions and 10 deletions

73
doc/Avatar.py Normal file
View File

@ -0,0 +1,73 @@
# -*- coding: utf-8 -*-
import _common
class Avatar(object):
def __init__(self):
self.apis = [
{
'name': 'avatarMetaList',
'desc': 'item配置表中装饰列表',
'group': 'Avatar',
'url': 'webapp/index.php?c=Avatar&a=avatarMetaList',
'params': [
_common.ReqHead(),
],
'response': [
_common.RspHead(),
['!list', [], '装饰列表(参数见item.xlsx字段)']
]
},{
'name': 'avatarList',
'desc': '获取装饰物品列表',
'group': 'Avatar',
'url': 'webapp/index.php?c=Avatar&a=avatarList',
'params': [
_common.ReqHead(),
],
'response': [
_common.RspHead(),
['!list', [AvatarInfo()], '装饰列表']
]
},{
'name': 'equip',
'desc': '穿戴装饰物品',
'group': 'Avatar',
'url': 'webapp/index.php?c=Avatar&a=equip',
'params': [
_common.ReqHead(),
['hero_uniid', '', '英雄唯一id'],
['avatar_uniid', '', '装饰唯一id'],
],
'response': [
_common.RspHead(),
]
},{
'name': 'buyAvatar',
'desc': '购买装饰物品',
'group': 'Avatar',
'url': 'webapp/index.php?c=Avatar&a=buyAvatar',
'params': [
_common.ReqHead(),
['item_id', '', '装饰物品itemId'],
],
'response': [
_common.RspHead(),
]
},
]
class AvatarInfo(object):
def __init__(self):
self.fields = [
['account_id', '', 'account_id'],
['token_id', '', 'token_id'],
['item_id', 0, 'item_id'],
['item_type', 0, '1:翅膀'],
['status', 0, '0:为穿戴 1:已穿戴'],
['hero_idx', 0, '穿戴的英雄唯一id'],
]

View File

@ -1684,7 +1684,6 @@ CREATE TABLE `t_avatar` (
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
`account_id` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id(channel + "_" + gameid + "_" + openid)',
`token_id` varchar(60) COMMENT 'token_id',
`address` varchar(60) COMMENT 'address',
`item_id` int(11) NOT NULL COMMENT 'item_id',
`item_type` int(11) NOT NULL COMMENT 'item类型',
`status` int(11) NOT NULL DEFAULT '0' COMMENT '装备状态',

View File

@ -3,11 +3,19 @@
require_once('mt/Item.php');
require_once('models/Hero.php');
require_once('models/Avatar.php');
require_once('services/LogService.php');
use models\Hero;
use models\Avatar;
use services\LogService;
class AvatarController extends BaseAuthedController {
public function avatarMetaList(){
$metaList = \mt\Item::getMetaListByType(\mt\Item::AVATAR_TYPE);
$this->_rspData(array(
'list' => $metaList
));
}
public function avatarList(){
$avatarList = array();
Avatar::getAvatarList(function ($row) use (&$avatarList){
@ -18,7 +26,7 @@ class AvatarController extends BaseAuthedController {
));
}
public function useAvatar(){
public function equip(){
$heroUniid = trim(getReqVal('hero_uniid', 0));
$avatarUniid = trim(getReqVal('avatar_uniid', 0));
@ -37,16 +45,69 @@ class AvatarController extends BaseAuthedController {
return;
}
$randAttr = emptyReplace(json_decode($heroDb['rand_attr'], true), array());
$itemMeta = \mt\Item::get($avatarDb['item_id']);
$quality = 1;
foreach ($randAttr as $value){
$quality = max($quality,$value['quality']);
}
switch ($itemMeta['quality']){
case 2 : {
if ($quality < 3){
$this->_rspErr(1, 'Can not meet the wearing condition');
return;
}
}
break;
case 3 :{
if ($quality < 4){
$this->_rspErr(1, 'Can not meet the wearing condition');
return;
}
}
break;
case 4 :{
if ($quality < 5){
$this->_rspErr(1, 'Can not meet the wearing condition');
return;
}
}
}
Avatar::equipUpdate($avatarDb,$heroUniid);
$this->_rspOk();
}
public function remove(){
$avatarUniid = trim(getReqVal('avatar_uniid', 0));
$avatarDb = Avatar::find($avatarUniid);
if (!$avatarDb){
$this->_rspErr(1, 'avatar_uniid error');
return;
}
Avatar::update($avatarUniid,array(
'hero_idx' => null,
'status' => 0,
'modifytime' => myself()->_getNowTime(),
));
$this->_rspOk();
}
public function clearAvatar(){
$heroUniid = trim(getReqVal('hero_uniid', 0));
$heroDb = Hero::find($heroUniid);
if (!$heroDb){
$this->_rspErr(1, 'hero_uniid error');
return;
}
$avatarDbs = Avatar::getAvatarByHeroIdx($heroUniid);
foreach ($avatarDbs as $avatarDb){
Avatar::update($avatarDb['idx'],array(
'hero_idx' => null,
'status' => 0,
'modifytime' => myself()->_getNowTime(),
));
}
$this->_rspOk();
}
@ -58,8 +119,25 @@ class AvatarController extends BaseAuthedController {
return;
}
//检验钻石是否足够 并消耗钻石
$costItems = array(
array(
'item_id' => V_ITEM_DIAMOND,
'item_num' => $itemMeta['diamond']
),
);
$lackItem = null;
if (!$this->_hasEnoughItems($costItems, $lackItem)) {
$this->_rspErr(3, $this->_getLackItemErrMsg($lackItem));
return;
}
$this->_decItems($costItems);
{
//埋点
$event = [
'name' => LogService::BUY_HERO_AVATAR,
'val' => $itemMeta['diamond']
];
LogService::consumeDiamond($event);
}
Avatar::addAvatar($itemMeta);
$this->_rspOk();

View File

@ -34,6 +34,30 @@ class Avatar extends BaseModel
return $row;
}
public static function getAvatarByHeroIdx($heroUniid){
$rows = SqlHelper::ormSelect(
myself()->_getSelfMysql(),
't_avatar',
array(
'hero_idx' => $heroUniid,
)
);
return $rows;
}
public static function getOneByType($heroUniid,$itemType){
$row = SqlHelper::ormSelectOne(
myself()->_getSelfMysql(),
't_avatar',
array(
'hero_idx' => $heroUniid,
'item_type' => $itemType,
)
);
return $row;
}
public static function getAvatarList($cb){
SqlHelper::ormSelect(
myself()->_getSelfMysql(),
@ -42,7 +66,6 @@ class Avatar extends BaseModel
'account_id' => myself()->_getAccountId()
),
function ($row) use($cb) {
$row['tags'] = '';
$cb($row);
}
);
@ -55,7 +78,6 @@ class Avatar extends BaseModel
'token_id' => $nftDb['token_id'],
)
);
$row['tags'] = $nftDb['tags'];
$cb($row);
}
}
@ -75,4 +97,45 @@ class Avatar extends BaseModel
);
}
public static function equipUpdate($avatarDb,$heroUniid){
$row = self::getOneByType($heroUniid,$avatarDb['item_type']);
if ($row){
SqlHelper::update(
myself()->_getSelfMysql(),
't_avatar',
array(
'idx' => $row['idx'],
),
array(
'status' => 0,
'hero_idx' => null,
'modifytime' => myself()->_getNowTime(),
)
);
}
SqlHelper::update(
myself()->_getSelfMysql(),
't_avatar',
array(
'idx' => $avatarDb['idx'],
),
array(
'status' => 1,
'hero_idx' => $heroUniid,
'modifytime' => myself()->_getNowTime(),
)
);
}
public static function update($avatarUniid,$feildKv){
SqlHelper::update(
myself()->_getSelfMysql(),
't_avatar',
array(
'idx' => $avatarUniid,
),
$feildKv
);
}
}

View File

@ -26,7 +26,7 @@ class Nft extends BaseModel
const GENESIS_TYPE = 7; //创世徽章
const PLANET_TYPE = 8; //星球
const RING_TYPE = 19; //戒指
const AVATAR_TYPE = 29; //装饰
const AVATAR_TYPE = 30; //装饰
const GENESIS_TAG = 1;

View File

@ -17,6 +17,7 @@ class LogService extends BaseService
const CHIP_LEVEL_UP = "chip_level_Up"; //芯片升级
const BUY_BATTLE_PASS = "buy_battle_pass"; //通行证购买
const BUY_PASS_EXP = "buy_pass_exp"; //购买通行证经验
const BUY_HERO_AVATAR = "buy_hero_avatar"; //购买英雄装饰
const SHOP_BUY_ITEM = "shop_buy_item_normal"; //商城购买物品
const SHOP_BUY_ITEM_DAILY = "shop_buy_item_daily"; //商城每日精选购买物品