Merge branch 'james_bc' of git.kingsome.cn:server/game2006api into james_bc
This commit is contained in:
commit
ec8766dd01
197
doc/Chip.py
197
doc/Chip.py
@ -18,20 +18,6 @@ class Chip(object):
|
||||
_common.RspHead(),
|
||||
['!data', [_common.Chip()], '芯片列表']
|
||||
]
|
||||
},{
|
||||
'name': 'chipOrder',
|
||||
'desc': '芯片列表排序',
|
||||
'group': 'Chip',
|
||||
'url': 'webapp/index.php?c=Chip&a=chipOrder',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['type', '', '芯片类型:1 英雄;2 枪械'],
|
||||
['order', '', 'asc 升序;desc 降序'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['!data', [_common.Chip()], '芯片列表']
|
||||
]
|
||||
},{
|
||||
'name': 'chipDetails',
|
||||
'desc': '芯片详情',
|
||||
@ -39,200 +25,39 @@ class Chip(object):
|
||||
'url': 'webapp/index.php?c=Chip&a=chipDetails',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['token_id', '', '芯片token id'],
|
||||
['unique_id', '', 'unique_id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['!data', [_common.Chip()], '芯片信息']
|
||||
]
|
||||
},{
|
||||
'name': 'beforeInlay',
|
||||
'desc': '芯片镶嵌前置,获取可镶嵌的芯片',
|
||||
'name': 'upgradeLevelPreview',
|
||||
'desc': '芯片升级前置操作',
|
||||
'group': 'Chip',
|
||||
'url': 'webapp/index.php?c=Chip&a=beforeInlay',
|
||||
'url': 'webapp/index.php?c=Chip&a=upgradeLevelPreview',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['type', '', '芯片类型:1 英雄;2 枪械'],
|
||||
['unique_id', '', 'unique_id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['!data', [_common.Chip()], '芯片列表']
|
||||
['!data', [_common.ChipPro()], '芯片信息']
|
||||
]
|
||||
},{
|
||||
'name': 'inlayChip',
|
||||
'desc': '芯片镶嵌',
|
||||
'name': 'upgradeLevel',
|
||||
'desc': '芯片升级',
|
||||
'group': 'Chip',
|
||||
'url': 'webapp/index.php?c=Chip&a=inlayChip',
|
||||
'url': 'webapp/index.php?c=Chip&a=upgradeLevel',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['type', '', '1 英雄;2 枪械'],
|
||||
['unique_id', '', '英雄或枪械的唯一id'],
|
||||
['token_id', '', '芯片token id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['!data', [_common.Hero()], '英雄或枪械加成信息,用英雄举例'],
|
||||
['property_chg', _common.PropertyChg(), '属性变更'],
|
||||
]
|
||||
},{
|
||||
'name': 'demountChip',
|
||||
'desc': '芯片卸下',
|
||||
'group': 'Chip',
|
||||
'url': 'webapp/index.php?c=Chip&a=demountChip',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['type', '', '1 英雄;2 枪械'],
|
||||
['unique_id', '', '英雄或枪械的唯一id'],
|
||||
['token_id', '', '芯片token id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['!data', [_common.Hero()], '英雄或枪械加成信息,用英雄举例'],
|
||||
['property_chg', _common.PropertyChg(), '属性变更'],
|
||||
]
|
||||
},{
|
||||
'name': 'replaceChip',
|
||||
'desc': '芯片替换',
|
||||
'group': 'Chip',
|
||||
'url': 'webapp/index.php?c=Chip&a=replaceChip',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['type', '', '1 英雄;2 枪械'],
|
||||
['unique_id', '', '英雄或枪械的唯一id'],
|
||||
['token_id_new', '', '新芯片token id'],
|
||||
['token_id_old', '', '被替换的芯片token id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['!data', [_common.Hero()], '英雄或枪械加成信息,用英雄举例'],
|
||||
['property_chg', _common.PropertyChg(), '属性变更'],
|
||||
]
|
||||
},{
|
||||
'name': 'aKeyInlayChip',
|
||||
'desc': '芯片一键镶嵌',
|
||||
'group': 'Chip',
|
||||
'url': 'webapp/index.php?c=Chip&a=aKeyInlayChip',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['type', '', '1 英雄;2 枪械'],
|
||||
['unique_id', '', '英雄或枪械的唯一id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['!data', [_common.Hero()], '英雄或枪械加成信息,用英雄举例']
|
||||
]
|
||||
},{
|
||||
'name': 'beforeSynthetic',
|
||||
'desc': '芯片合成前置操作',
|
||||
'group': 'Chip',
|
||||
'url': 'webapp/index.php?c=Chip&a=beforeSynthetic',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['token_id', '', '新芯片token id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['!data', [_common.ChipPro()], '芯片信息']
|
||||
]
|
||||
},{
|
||||
'name': 'selectChip',
|
||||
'desc': '选择合成材料',
|
||||
'group': 'Chip',
|
||||
'url': 'webapp/index.php?c=Chip&a=selectChip',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['token_id', '', '芯片token id参数 例:参数1源芯片 参数2材料芯片'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['data', '', '材料芯片的累计价值']
|
||||
]
|
||||
},{
|
||||
'name': 'syntheticChip',
|
||||
'desc': '芯片合成',
|
||||
'group': 'Chip',
|
||||
'url': 'webapp/index.php?c=Chip&a=syntheticChip',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['token_id_main', '', '源芯片token id'],
|
||||
['token_id_param', '', '材料芯片token id 例:参数1 参数2 参数3'],
|
||||
['unique_id_main', '', '源芯片token id'],
|
||||
['unique_id_param', '', '材料芯片token id 例:参数1 参数2 参数3'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['!data', [_common.Chip()], '芯片信息'],
|
||||
['state', 0, '1 成功,0 失败'],
|
||||
['property_chg', _common.PropertyChg(), '属性变更'],
|
||||
]
|
||||
},{
|
||||
'name': 'isNeedLucky',
|
||||
'desc': '选择需要幸运值',
|
||||
'group': 'Chip',
|
||||
'url': 'webapp/index.php?c=Chip&a=isNeedLucky',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['token_id', '', '源芯片token id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['property_chg', _common.PropertyChg(), '属性变更'],
|
||||
]
|
||||
},{
|
||||
'name': 'isNotNeedLucky',
|
||||
'desc': '放弃幸运值',
|
||||
'group': 'Chip',
|
||||
'url': 'webapp/index.php?c=Chip&a=isNotNeedLucky',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['token_id', '', '源芯片token id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['property_chg', _common.PropertyChg(), '属性变更'],
|
||||
]
|
||||
},{
|
||||
'name': 'waitingLucky',
|
||||
'desc': '幸运值未做选择-待定阶段',
|
||||
'group': 'Chip',
|
||||
'url': 'webapp/index.php?c=Chip&a=waitingLucky',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['token_id', '', '源芯片token id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['property_chg', _common.PropertyChg(), '属性变更'],
|
||||
]
|
||||
},{
|
||||
'name': 'aKeySynthetic',
|
||||
'desc': '芯片合成一键添加',
|
||||
'group': 'Chip',
|
||||
'url': 'webapp/index.php?c=Chip&a=aKeySynthetic',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['token_id', '', '源芯片token id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['data', [
|
||||
['cost', '', '所添加芯片的总累计价值'],
|
||||
['token_ids', '', '芯片token id 例如:token_id1 token_id2 token_id3'],
|
||||
], '芯片信息']
|
||||
]
|
||||
},{
|
||||
'name': 'lockChip',
|
||||
'desc': '芯片加锁',
|
||||
'group': 'Chip',
|
||||
'url': 'webapp/index.php?c=Chip&a=lockChip',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['token_id', '', '芯片token id'],
|
||||
['state', '', '1 加锁 ;0 释放锁'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['property_chg', _common.PropertyChg(), '属性变更'],
|
||||
]
|
||||
},
|
||||
|
||||
|
||||
]
|
||||
|
101
doc/ChipPage.py
Normal file
101
doc/ChipPage.py
Normal file
@ -0,0 +1,101 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import _common
|
||||
|
||||
class ChipPage(object):
|
||||
|
||||
def __init__(self):
|
||||
self.apis = [
|
||||
{
|
||||
'name': 'chipPageList',
|
||||
'desc': '铭文页列表',
|
||||
'group': 'ChipPage',
|
||||
'url': 'webapp/index.php?c=ChipPage&a=chipPageList',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['!data', [_common.ChipPageList()], '页列表']
|
||||
]
|
||||
},{
|
||||
'name': 'showPageInfo',
|
||||
'desc': '铭文页信息',
|
||||
'group': 'ChipPage',
|
||||
'url': 'webapp/index.php?c=ChipPage&a=showPageInfo',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['page', '', '页id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['!data', [_common.ChipPage()], '页信息']
|
||||
]
|
||||
},{
|
||||
'name': 'addChipPage',
|
||||
'desc': '添加铭文页',
|
||||
'group': 'ChipPage',
|
||||
'url': 'webapp/index.php?c=ChipPage&a=addChipPage',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
]
|
||||
},{
|
||||
'name': 'rename',
|
||||
'desc': '修改页名',
|
||||
'group': 'ChipPage',
|
||||
'url': 'webapp/index.php?c=ChipPage&a=rename',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['page', '', '页id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['!data', [_common.ChipPage()], '页信息']
|
||||
]
|
||||
},{
|
||||
'name': 'useChip',
|
||||
'desc': '使用芯片(镶嵌)',
|
||||
'group': 'ChipPage',
|
||||
'url': 'webapp/index.php?c=ChipPage&a=useChip',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['page', '', '页id'],
|
||||
['slot_id', '', '卡槽id'],
|
||||
['unique_id', '', '芯片idx'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['!data', [_common.ChipPage()], '页信息']
|
||||
]
|
||||
},{
|
||||
'name': 'removeChipOne',
|
||||
'desc': '芯片移除',
|
||||
'group': 'ChipPage',
|
||||
'url': 'webapp/index.php?c=ChipPage&a=removeChipOne',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['page', '', '页id'],
|
||||
['slot_id', '', '卡槽id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['!data', [_common.ChipPage()], '页信息']
|
||||
]
|
||||
},{
|
||||
'name': 'removeChipAll',
|
||||
'desc': '芯片移除(一键移除)',
|
||||
'group': 'ChipPage',
|
||||
'url': 'webapp/index.php?c=ChipPage&a=removeChipAll',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['page', '', '页id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['!data', [_common.ChipPage()], '页信息']
|
||||
]
|
||||
},
|
||||
]
|
45
doc/Emoji.py
Normal file
45
doc/Emoji.py
Normal file
@ -0,0 +1,45 @@
|
||||
import _common
|
||||
|
||||
class Emoji(object):
|
||||
|
||||
def __init__(self):
|
||||
self.apis = [
|
||||
{
|
||||
'name': 'getEmojiList',
|
||||
'desc': '表情列表',
|
||||
'group': 'Emoji',
|
||||
'url': 'webapp/index.php?c=Emoji&a=getEmojiList',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['!data', [_common.Emoji()], '表情列表'],
|
||||
['use_emoji', [], '已选择的表情列表'],
|
||||
]
|
||||
},{
|
||||
'name': 'setEmoji',
|
||||
'desc': '设置表情',
|
||||
'group': 'Emoji',
|
||||
'url': 'webapp/index.php?c=Emoji&a=setEmoji',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['item_id', '0', 'item_id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
]
|
||||
},{
|
||||
'name': 'cancel',
|
||||
'desc': '取消设置',
|
||||
'group': 'Emoji',
|
||||
'url': 'webapp/index.php?c=Emoji&a=cancel',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['item_id', '0', 'item_id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
]
|
||||
},
|
||||
]
|
112
doc/Gun.py
112
doc/Gun.py
@ -59,21 +59,7 @@ class Gun(object):
|
||||
['!gun_list', [_common.Gun()], '枪械列表']
|
||||
]
|
||||
},
|
||||
{
|
||||
'name': 'upgradeLevel',
|
||||
'desc': '升等级',
|
||||
'group': 'Gun',
|
||||
'url': 'webapp/index.php?c=Gun&a=upgradeLevel',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['gun_uniid', 0, '枪械唯一id'],
|
||||
['slot_id', 0, '槽id(0-1)'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['property_chg', _common.PropertyChg(), '属性变更'],
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
'name': 'upgradeLevelPreview',
|
||||
'desc': '升等级',
|
||||
@ -87,87 +73,7 @@ class Gun(object):
|
||||
_common.RspHead(),
|
||||
['old_gun', _common.Gun(), '枪械-老'],
|
||||
['new_gun', _common.Gun(), '枪械-新'],
|
||||
['cost', _common.Cost(), '所需费用'],
|
||||
]
|
||||
},
|
||||
{
|
||||
'name': 'upgradeQualityOld',
|
||||
'desc': '升阶',
|
||||
'group': 'Gun',
|
||||
'url': 'webapp/index.php?c=Gun&a=upgradeQualityOld',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['gun_uniid', 0, '枪械唯一id'],
|
||||
['cost_hero_uniid', 0, '耗材英雄唯一id'],
|
||||
['slot_id', 0, '槽id(0-1)'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['property_chg', _common.PropertyChg(), '属性变更'],
|
||||
]
|
||||
},
|
||||
{
|
||||
'name': 'upgradeQuality',
|
||||
'desc': '升阶',
|
||||
'group': 'Gun',
|
||||
'url': 'webapp/index.php?c=Gun&a=upgradeQuality',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['trans_id', 0, 'transId'],
|
||||
['token_id1', 0, '枪械token'],
|
||||
['token_id2', 0, '耗材枪械token'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
]
|
||||
},
|
||||
{
|
||||
'name': 'upgradeQualityPreview',
|
||||
'desc': '升阶',
|
||||
'group': 'Gun',
|
||||
'url': 'webapp/index.php?c=Gun&a=upgradeQualityPreview',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['gun_uniid', 0, '枪械唯一id'],
|
||||
['cost_gun_uniid', 0, '耗材枪械唯一id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['old_gun', _common.Gun(), '枪械-老'],
|
||||
['new_gun', _common.Gun(), '枪械-新'],
|
||||
['cost', _common.Cost(), '所需费用'],
|
||||
]
|
||||
},
|
||||
{
|
||||
'name': 'receiveUpgradeQuality',
|
||||
'desc': '获取升阶后的武器',
|
||||
'group': 'Gun',
|
||||
'url': 'webapp/index.php?c=Gun&a=receiveUpgradeQuality',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['trans_id', 0, 'transId'],
|
||||
['token_id', 0, '枪械token'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['property_chg', _common.PropertyChg(), '属性变更'],
|
||||
]
|
||||
},
|
||||
{
|
||||
'name': 'receive',
|
||||
'desc': '获取升级、升阶后的武器',
|
||||
'group': 'Gun',
|
||||
'url': 'webapp/index.php?c=Gun&a=receive',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['type', 0, '1:领取升级 2:领取升阶'],
|
||||
['gun_uniid', 0, '枪械唯一id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['state', 0, '0:失败 1:成功'],
|
||||
['old_hero', _common.Gun(), '枪械-老'],
|
||||
['new_hero', _common.Gun(), '枪械-新'],
|
||||
['!cost', [_common.AwardItem()], '所需费用'],
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -185,16 +91,20 @@ class Gun(object):
|
||||
]
|
||||
},
|
||||
{
|
||||
'name': 'getUpgradeQualityList',
|
||||
'desc': '获取升阶中的枪械列表',
|
||||
'group': 'Hero',
|
||||
'url': 'webapp/index.php?c=Hero&a=getUpgradeQualityList',
|
||||
'name': 'upgradeLv',
|
||||
'desc': '升等级',
|
||||
'group': 'Gun',
|
||||
'url': 'webapp/index.php?c=Gun&a=upgradeLv',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['gun_uniid', 0, '枪械唯一id'],
|
||||
['cost_gun_uniid', 0, '材料武器id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['!infos', [_common.QualityingGun()], '升阶中的枪械列表'],
|
||||
['property_chg', _common.PropertyChg(), '属性变更'],
|
||||
['old_gun', _common.Gun(), '枪械-老'],
|
||||
['new_gun', _common.Gun(), '枪械-新'],
|
||||
]
|
||||
},
|
||||
]
|
||||
|
177
doc/Hero.py
177
doc/Hero.py
@ -26,6 +26,7 @@ class Hero(object):
|
||||
'url': 'webapp/index.php?c=Hero&a=skinList',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['hero_id', 0, '英雄itemId'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
@ -46,37 +47,6 @@ class Hero(object):
|
||||
_common.RspHead(),
|
||||
]
|
||||
},
|
||||
{
|
||||
'name': 'upgradeSkill',
|
||||
'desc': '升技能',
|
||||
'group': 'Hero',
|
||||
'url': 'webapp/index.php?c=Hero&a=upgradeSkill',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['hero_uniid', 0, '英雄唯一id'],
|
||||
['skill_uniid', 0, '技能唯一id'],
|
||||
['skill_idx', 0, '技能idx 0:主动技能;1:被动技能'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['property_chg', _common.PropertyChg(), '属性变更'],
|
||||
]
|
||||
},
|
||||
{
|
||||
'name': 'upgradeLevel',
|
||||
'desc': '升等级',
|
||||
'group': 'Hero',
|
||||
'url': 'webapp/index.php?c=Hero&a=upgradeLevel',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['hero_uniid', 0, '英雄唯一id'],
|
||||
['slot_id', 0, '槽id(0-1)'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['property_chg', _common.PropertyChg(), '属性变更'],
|
||||
]
|
||||
},
|
||||
{
|
||||
'name': 'upgradeLevelPreview',
|
||||
'desc': '升等级',
|
||||
@ -93,112 +63,6 @@ class Hero(object):
|
||||
['cost', _common.Cost(), '所需费用'],
|
||||
]
|
||||
},
|
||||
{
|
||||
'name': 'getUpgradeLevelList',
|
||||
'desc': '获取升级中的英雄列表',
|
||||
'group': 'Hero',
|
||||
'url': 'webapp/index.php?c=Hero&a=getUpgradeLevelList',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['!infos', [_common.LevelingHero()], '升级中的英雄列表'],
|
||||
]
|
||||
},
|
||||
{
|
||||
'name': 'upgradeQuality',
|
||||
'desc': '升阶',
|
||||
'group': 'Hero',
|
||||
'url': 'webapp/index.php?c=Hero&a=upgradeQuality',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['trans_id', 0, 'transId'],
|
||||
['token_id1', 0, '英雄token'],
|
||||
['token_id2', 0, '耗材英雄token'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
]
|
||||
},
|
||||
{
|
||||
'name': 'receiveUpgradeQuality',
|
||||
'desc': '领取升阶',
|
||||
'group': 'Hero',
|
||||
'url': 'webapp/index.php?c=Hero&a=receiveUpgradeQuality',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['trans_id', 0, 'transId'],
|
||||
['token_id', 0, '英雄token'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['property_chg', _common.PropertyChg(), '属性变更'],
|
||||
]
|
||||
},
|
||||
{
|
||||
'name': 'upgradeQualityOld',
|
||||
'desc': '升阶',
|
||||
'group': 'Hero',
|
||||
'url': 'webapp/index.php?c=Hero&a=upgradeQualityOld',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['hero_uniid', 0, '英雄唯一id'],
|
||||
['slot_id', 0, '槽id(0-1)'],
|
||||
['cost_hero_uniid', 0, '耗材英雄唯一id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['property_chg', _common.PropertyChg(), '属性变更'],
|
||||
]
|
||||
},
|
||||
{
|
||||
'name': 'upgradeQualityPreview',
|
||||
'desc': '升阶',
|
||||
'group': 'Hero',
|
||||
'url': 'webapp/index.php?c=Hero&a=upgradeQualityPreview',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['hero_uniid', 0, '英雄唯一id'],
|
||||
['cost_hero_uniid', 0, '耗材英雄唯一id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['old_hero', _common.Hero(), '英雄-老'],
|
||||
['new_hero', _common.Hero(), '英雄-新'],
|
||||
['cost', _common.Cost(), '所需费用'],
|
||||
]
|
||||
},
|
||||
{
|
||||
'name': 'getUpgradeQualityList',
|
||||
'desc': '获取升阶中的英雄列表',
|
||||
'group': 'Hero',
|
||||
'url': 'webapp/index.php?c=Hero&a=getUpgradeQualityList',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['!infos', [_common.QualityingHero()], '升阶中的英雄列表'],
|
||||
]
|
||||
},
|
||||
{
|
||||
'name': 'receive',
|
||||
'desc': '领取升级/升阶英雄',
|
||||
'group': 'Hero',
|
||||
'url': 'webapp/index.php?c=Hero&a=receive',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['type', 0, '1:领取升级 2:领取升阶'],
|
||||
['hero_uniid', 0, '英雄唯一id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['state', 0, '0:失败 1:成功'],
|
||||
['old_hero', _common.Hero(), '英雄-老'],
|
||||
['new_hero', _common.Hero(), '英雄-新'],
|
||||
]
|
||||
},
|
||||
{
|
||||
'name': 'heroDetails',
|
||||
'desc': '英雄详情',
|
||||
@ -214,18 +78,49 @@ class Hero(object):
|
||||
]
|
||||
},
|
||||
{
|
||||
'name': 'upgradeSkillCommon',
|
||||
'desc': '通用技能升级',
|
||||
'name': 'upgradeLv',
|
||||
'desc': '升级',
|
||||
'group': 'Hero',
|
||||
'url': 'webapp/index.php?c=Hero&a=upgradeSkillCommon',
|
||||
'url': 'webapp/index.php?c=Hero&a=upgradeLv',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['hero_uniid', 0, '英雄唯一id'],
|
||||
['skill_index', 0, '通用技能下标'],
|
||||
['cost_hero_uniid', 0, '材料英雄id(非必选参数--4|9|14等级必选)'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['property_chg', _common.PropertyChg(), '属性变更'],
|
||||
['old_hero', _common.Hero(), '英雄-老'],
|
||||
['new_hero', _common.Hero(), '英雄-新'],
|
||||
]
|
||||
},{
|
||||
'name': 'presetHero',
|
||||
'desc': '英雄预设',
|
||||
'group': 'Hero',
|
||||
'url': 'webapp/index.php?c=Hero&a=presetHero',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['hero_uid', 0, '英雄唯一id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['data', _common.HeroPreset(), '预设信息']
|
||||
]
|
||||
},{
|
||||
'name': 'applyHero',
|
||||
'desc': '应用',
|
||||
'group': 'Hero',
|
||||
'url': 'webapp/index.php?c=Hero&a=applyHero',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
['hero_uid', 0, '英雄唯一id'],
|
||||
['skill_id', 0, '技能itemId'],
|
||||
['weapon_uid1', 0, '武器1唯一id'],
|
||||
['weapon_uid2', 0, '武器2唯一id'],
|
||||
['chip_page', 0, '芯片页id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
]
|
||||
},
|
||||
|
||||
|
22
doc/HeroSkill.py
Normal file
22
doc/HeroSkill.py
Normal file
@ -0,0 +1,22 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import _common
|
||||
|
||||
class HeroSkill(object):
|
||||
|
||||
def __init__(self):
|
||||
self.apis = [
|
||||
{
|
||||
'name': 'getSkillList',
|
||||
'desc': '技能列表',
|
||||
'group': 'HeroSkill',
|
||||
'url': 'webapp/index.php?c=HeroSkill&a=getSkillList',
|
||||
'params': [
|
||||
_common.ReqHead(),
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['data', [], '技能itemId']
|
||||
]
|
||||
}
|
||||
]
|
@ -9,6 +9,7 @@ class NftIntro(object):
|
||||
['idx', 0, 'idx'],
|
||||
['token_id', '', 'token_id'],
|
||||
['token_type', 0, 'nft类型 1:英雄 2:枪支 3:芯片'],
|
||||
['amount', 0, '堆叠数量'],
|
||||
['createtime', 0, '创建时间(上架时间)'],
|
||||
['modifytime', 0, '修改时间(更新价格等)'],
|
||||
['s_price', 0, '出售价格-暂定'],
|
||||
@ -16,8 +17,32 @@ class NftIntro(object):
|
||||
['c_job', 0, '缓存-职业'],
|
||||
['c_lv', 0, '缓存-级别'],
|
||||
['c_id', 0, '缓存-idx'],
|
||||
['selling', 0, '正在售卖的个数'],
|
||||
['o_link', '', '关联的售卖单号'],
|
||||
['details', _common.NftDetail(), 'nft列表'],
|
||||
]
|
||||
|
||||
class CurrencyType(object):
|
||||
def __init__(self):
|
||||
self.fields = [
|
||||
['name', '', '货币名称'],
|
||||
['address', '', '货币地址'],
|
||||
]
|
||||
|
||||
class TransactionRecord(object):
|
||||
def __init__(self):
|
||||
self.fields = [
|
||||
['idx', '', 'idx'],
|
||||
['createtime', 0, '交易成功时间'],
|
||||
['orderid', 0, 'market订单id'],
|
||||
['o_link', '', '合约订单id'],
|
||||
['seller', '', '卖家'],
|
||||
['buyer', '', '买家'],
|
||||
['tokenid', '', 'tokenid'],
|
||||
['amount', 0, '商品数量'],
|
||||
['name', '', '商品名称'],
|
||||
['type', 0, '商品类型'],
|
||||
]
|
||||
class Market(object):
|
||||
|
||||
def __init__(self):
|
||||
@ -368,6 +393,7 @@ class Market(object):
|
||||
['token', '', 'token'],
|
||||
['nft_token', '', 'nft_token'],
|
||||
['s_price', '', '出售价格USDT'],
|
||||
['amount', 0, '出售数量'],
|
||||
['payment_token_address', '', 'payment_token_address'],
|
||||
['nonce', '', 'nonce'],
|
||||
['signature', '', '签名soliditySha3(type, payment_token_address, price, nonce), 签名的replace客户端做处理'],
|
||||
@ -395,4 +421,37 @@ class Market(object):
|
||||
_common.RspHead()
|
||||
]
|
||||
},
|
||||
{
|
||||
'name': 'getSupportedCurrencyTypes',
|
||||
'desc': '获取支持的货币类型',
|
||||
'group': 'Market',
|
||||
'url': 'webapp/index.php?c=Market&a=getSupportedCurrencyTypes',
|
||||
'params': [
|
||||
['account', '', '账号id'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['!list', [CurrencyType()], '货币类型列表'],
|
||||
]
|
||||
},
|
||||
{
|
||||
'name': 'getTransactionRecord',
|
||||
'desc': '获取交易记录',
|
||||
'group': 'Market',
|
||||
'url': 'webapp/index.php?c=Market&a=getTransactionRecord',
|
||||
'params': [
|
||||
['account', '', '账号id'],
|
||||
['type', 0, '物品类型 0:所有 1:英雄 2:武器 3:芯片 5:碎片'],
|
||||
['start', 0, '分页开始偏移'],
|
||||
['page_size', 0, '分页大小'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
['total', 0, '交易记录总数'],
|
||||
['start', 0, '有效的分页偏移'],
|
||||
['page_size', 0, '有效的分页大小'],
|
||||
['!list', [TransactionRecord()], '交易记录列表'],
|
||||
]
|
||||
}
|
||||
|
||||
]
|
||||
|
@ -77,6 +77,8 @@ class User(object):
|
||||
['guild_id', 0, '跟新工会id(可选参数,不传就不更新)'],
|
||||
['guild_job', 0, '跟新工会职位(可选参数,不传就不更新)'],
|
||||
['guild_name', 0, '跟新工会名称(可选参数,不传就不更新)'],
|
||||
['parachute', 0, '跟新降落伞(可选参数,不传就不更新)'],
|
||||
['ring_id', 0, '跟新戒指(可选参数,不传就不更新)'],
|
||||
],
|
||||
'response': [
|
||||
_common.RspHead(),
|
||||
|
137
doc/_common.py
137
doc/_common.py
@ -78,15 +78,13 @@ class Gun(object):
|
||||
['token_id', '', 'token id'],
|
||||
['gun_uniid', 0, '枪唯一id'],
|
||||
['gun_id', 0, '枪id'],
|
||||
['state', 0, '0:已购买 1:体验中'],
|
||||
['state', 0, '0:已购买 1:免费(GIFT标签)'],
|
||||
['gun_lv', 0, '枪等级'],
|
||||
['quality', 0, '品阶'],
|
||||
['durability', 0, '耐久'],
|
||||
['durability_max', 0, '最大耐久'],
|
||||
['ceg_uplimit', 0, 'ceg今天获取上限'],
|
||||
['!attr_base', [Attr()], '枪械基础属性'],
|
||||
['!attr_pro', [Attr()], '枪械升级升阶加成属性'],
|
||||
['!attr_chip', [Attr()], '枪械芯片加成属性'],
|
||||
['try_count', 0, '剩余体验次数 当state=1时才有意义'],
|
||||
['lock_type', 0, '0:无锁 1:升级 2:升阶 3:派遣中'],
|
||||
['unlock_time', 0, '使用解锁utc时间(升级或者升阶触发),锁定期间不可战斗和做其他操作,配合lock_type使用'],
|
||||
@ -96,11 +94,8 @@ class Gun(object):
|
||||
['current_pve_get_ceg', 0, '当前pve获取的ceg数量'],
|
||||
['last_pvp_get_ceg_time', 0, '最后一次获取pvp获取ceg时间'],
|
||||
['last_pve_get_ceg_time', 0, '最后一次获取pve获取ceg时间'],
|
||||
['chip_ids', '', '镶嵌的芯片主键id组'],
|
||||
['!chip_core', [ChipCore()], '芯片核心加成'],
|
||||
['pvp_ceg_uplimit', 0, 'pvp获取的ceg的上限'],
|
||||
['pve_ceg_uplimit', 0, 'pve获取的ceg的上限'],
|
||||
['offer_reward_state', 0, '是否悬赏中'],
|
||||
['tags', '', '1:Gen状态'],
|
||||
]
|
||||
|
||||
class GunSkin(object):
|
||||
@ -149,6 +144,10 @@ class UserInfo(object):
|
||||
['guild_id', '', '工会id'],
|
||||
['guild_job', 0, '工会职位'],
|
||||
['guild_name', '', '工会名称'],
|
||||
['parachute', '', '当前使用的降落伞id'],
|
||||
['!parachute_list', [0], '拥有的降落伞列表'],
|
||||
['ring_id', 0, '勋章(戒指)ID'],
|
||||
['!ring_list', [0], '勋章(戒指)列表'],
|
||||
]
|
||||
|
||||
class UserSimple(object):
|
||||
@ -235,34 +234,24 @@ class Hero(object):
|
||||
['hero_id', 0, '英雄id'],
|
||||
['hero_lv', 0, '英雄等级'],
|
||||
['hero_tili', 0, '英雄体力'],
|
||||
['hero_tili_max', 0, '英雄最大体力'],
|
||||
['state', 0, '0:已购买 1:体验中'],
|
||||
['state', 0, '0:已购买 1:免费(GIFT标签)'],
|
||||
['skin_id', 0, '英雄皮肤id'],
|
||||
['quality', 0, '品阶'],
|
||||
['skill_lv1', 0, '主动技能等级'],
|
||||
['skill_lv2', 0, '被动技能等级'],
|
||||
['!attr_base', [Attr()], '英雄基础属性'],
|
||||
['!attr_pro', [Attr()], '英雄升级升阶提升属性'],
|
||||
['!attr_skill', [Attr()], '英雄技能提升属性'],
|
||||
['!attr_chip', [Attr()], '英雄芯片提升属性'],
|
||||
['try_count', 0, '剩余体验次数 当state=1时才有意义'],
|
||||
['lock_type', 0, '0:无锁 1:升级 2:升阶 3:派遣中'],
|
||||
['unlock_lefttime', 0, '解锁剩余时间(单位秒)'],
|
||||
['unlock_time', 0, '使用解锁utc时间(升级或者升阶触发),锁定期间不可战斗和做其他操作,配合lock_type使用'],
|
||||
['current_pvp_get_ceg', 0, '当前pvp获取的ceg数量'],
|
||||
['current_pve_get_ceg', 0, '当前pve获取的ceg数量'],
|
||||
['last_pvp_get_ceg_time', 0, '最后一次获取pvp获取ceg时间'],
|
||||
['last_pve_get_ceg_time', 0, '最后一次获取pve获取ceg时间'],
|
||||
['current_get_gold', 0, '当前获取的gold数量'],
|
||||
['last_get_gold_time', 0, '最后一次获取gold时间'],
|
||||
['gold_uplimit', 0, '每天gold上限'],
|
||||
['unlock_trade_time', 0, '出售解锁utc时间(升级或者升阶完成后触发),只锁交易,其他的操作仍可进行,和lock_type无关是独立的锁!!!'],
|
||||
['advanced_count', 0, '进阶次数'],
|
||||
['lukcy', 0, '幸运'],
|
||||
['chip_ids', '', '镶嵌的芯片主键id组'],
|
||||
['skill_points', '', '技能点'],
|
||||
['!chip_core', [ChipCore()], '芯片核心加成'],
|
||||
['!skill_common', [], '通用属性'],
|
||||
['pvp_ceg_uplimit', 0, 'pvp获取的ceg的上限'],
|
||||
['pve_ceg_uplimit', 0, 'pve获取的ceg的上限'],
|
||||
['offer_reward_state', 0, '是否悬赏中'],
|
||||
['tags', '', '1:Gen状态'],
|
||||
|
||||
]
|
||||
|
||||
@ -299,8 +288,8 @@ class HeroSkin(object):
|
||||
def __init__(self):
|
||||
self.fields = [
|
||||
['skin_id', 0, '英雄皮肤id'],
|
||||
['skin_state', 0, '英雄皮肤状态 0=已经购,1 = 试用状态'],
|
||||
['try_expire_at', 0, '试用到期时间(utc时间)'],
|
||||
['is_have', 0, '是否拥有 1:拥有 0:未拥有'],
|
||||
['use_state', 0, '选中状态 1:选中 0:未选中'],
|
||||
]
|
||||
|
||||
class Item(object):
|
||||
@ -782,23 +771,7 @@ class ChipAttr(object):
|
||||
def __init__(self):
|
||||
self.fields = [
|
||||
['attr_id', 0, '属性id'],
|
||||
['type', 0, '1: 绝对值 2:百分比 ---弃用字段'],
|
||||
['val', 0, '综合属性值'],
|
||||
['chip_type', 0, '1:英雄芯片 2:枪械芯片'],
|
||||
['attr_num', 0, '成长属性值'],
|
||||
['attr_pool_num', 0, '固定属性值'],
|
||||
]
|
||||
|
||||
class ChipCore(object):
|
||||
|
||||
def __init__(self):
|
||||
self.fields = [
|
||||
['chip_core_id', 0, '核心id'],
|
||||
['chip_core_type', 0, '1:英雄芯片核心 2:枪械芯片核心'],
|
||||
['chip_core_lv', 0, '核心等级'],
|
||||
['attr_id', 0, '芯片属性id'],
|
||||
['attr_number', 0, '属性加成'],
|
||||
['attr_add_type', 0, '加成类型:1 绝对值;2 百分比 ---弃用字段'],
|
||||
]
|
||||
|
||||
class Chip(object):
|
||||
@ -811,41 +784,31 @@ class Chip(object):
|
||||
['item_id', 0, '道具id'],
|
||||
['item_num', 0, '道具数量'],
|
||||
['chip_grade', 0, '芯片等级'],
|
||||
['chip_type', 0, '芯片类型:1 英雄;2 枪械'],
|
||||
['state', 0, '芯片添加状态:0 正常;1 选择;-1 锁定'],
|
||||
['supper_state', 0, '是否锁定:0 正常;1 锁住'],
|
||||
['inlay_state', 0, '镶嵌状态:0 未镶嵌;1 镶嵌了'],
|
||||
['chip_type', 0, '芯片类型:1 攻击;2 防御;3 辅助'],
|
||||
['state', 0, '0:已购买 1:免费(GIFT标签)'],
|
||||
['supper_state', 0, '是否锁定:0 正常;1 锁住 ---弃用字段'],
|
||||
['inlay_state', 0, '镶嵌状态:0 未镶嵌;1 镶嵌了 ---弃用字段'],
|
||||
['!rand_attr', [ChipAttr()], '属性'],
|
||||
['lucky_temporary', '', '升级成功后的幸运值'],
|
||||
['lucky_final', '', '最终幸运值'],
|
||||
['strength_max', '', '最大体力值'],
|
||||
['strength', '', '前一天体力值'],
|
||||
['strength_temporary', '', '升级成功所得出的总体力值'],
|
||||
['mint', '', '所需mint费'],
|
||||
['belong_to_item_id', '', '所镶嵌的英雄或枪械的item id'],
|
||||
|
||||
['tags', '', '1:Gen状态'],
|
||||
]
|
||||
|
||||
class ChipPro(object):
|
||||
|
||||
def __init__(self):
|
||||
self.fields = [
|
||||
['idx', 0, '主键id'],
|
||||
['idx', 0, '主键id'],
|
||||
['token_id', '', 'token id'],
|
||||
['account_id', '', '账号id'],
|
||||
['item_id', 0, '道具id'],
|
||||
['item_num', 0, '道具数量'],
|
||||
['chip_grade', 0, '芯片等级'],
|
||||
['chip_type', 0, '芯片类型:1 英雄;2 枪械'],
|
||||
['state', 0, '芯片添加状态:0 正常;1 选择;-1 锁定'],
|
||||
['supper_state', 0, '是否锁定:0 正常;1 锁住'],
|
||||
['inlay_state', 0, '镶嵌状态:0 未镶嵌;1 镶嵌了'],
|
||||
['chip_type', 0, '芯片类型:1 攻击;2 防御;3 辅助'],
|
||||
['state', 0, '状态:0 免费;1 常规'],
|
||||
['supper_state', 0, '是否锁定:0 正常;1 锁住 ---弃用字段'],
|
||||
['inlay_state', 0, '镶嵌状态:0 未镶嵌;1 镶嵌了 ---弃用字段'],
|
||||
['!rand_attr', [ChipAttr()], '属性'],
|
||||
['lucky_temporary', '', '临时幸运值'],
|
||||
['lucky_final', '', '最终幸运值'],
|
||||
['strength', '', '体力值'],
|
||||
['!rand_attr_after', [ChipAttr()], '芯片升级后的属性'],
|
||||
['upgrade_cost', '', '芯片升级所需价值'],
|
||||
['cost',[],'升级所需gold消耗']
|
||||
]
|
||||
|
||||
class BattleMember(object):
|
||||
@ -938,6 +901,7 @@ class BattleReward(object):
|
||||
['weapon1', BattleCegReward(), '武器1奖励'],
|
||||
['weapon2', BattleCegReward(), '武器2奖励'],
|
||||
['!items', [BattleItemReward()], '碎片奖励'],
|
||||
['lvInfo', [['oldLv',0,'老等级'],['newLv',0,'新等级']], '等级信息'],
|
||||
]
|
||||
|
||||
class BattleRankScore(object):
|
||||
@ -1012,4 +976,55 @@ class Currency(object):
|
||||
['symbol', '', '符号'],
|
||||
['precision', 0, '精度'],
|
||||
['type', 0, '1:ERC721 2:ERC1155 3:ERC20'],
|
||||
]
|
||||
|
||||
class Emoji(object):
|
||||
|
||||
def __init__(self):
|
||||
self.fields = [
|
||||
['item_id', 0, 'item_id'],
|
||||
['state', 0, '1:使用 0:未使用'],
|
||||
]
|
||||
|
||||
class ChipPageList(object):
|
||||
|
||||
def __init__(self):
|
||||
self.fields = [
|
||||
['idx', 0, 'idx'],
|
||||
['account_id', 0, 'account_id'],
|
||||
['page_id', 0, '页id'],
|
||||
['page_name', '', '页名'],
|
||||
['createtime', 0, '创建时间'],
|
||||
]
|
||||
|
||||
class ChipPage(object):
|
||||
|
||||
def __init__(self):
|
||||
self.fields = [
|
||||
['idx', 0, 'idx'],
|
||||
['page_id', 0, '页id'],
|
||||
['page_name', '', '页名'],
|
||||
['!data', [ChipPageSlot()], '卡槽信息'],
|
||||
['!attr', [Attr()], '属性信息'],
|
||||
]
|
||||
|
||||
class ChipPageSlot(object):
|
||||
|
||||
def __init__(self):
|
||||
self.fields = [
|
||||
['slot_id', 0, '卡槽id'],
|
||||
['state', 0, '0:未解锁 1:已解锁'],
|
||||
['chip_id', '', '芯片idx'],
|
||||
]
|
||||
|
||||
class HeroPreset(object):
|
||||
|
||||
def __init__(self):
|
||||
self.fields = [
|
||||
['skill_id', 0, '技能item id'],
|
||||
['weapon_uid1', 0, '武器1唯一id'],
|
||||
['weapon_uid2', 0, '武器2唯一id'],
|
||||
['gun_id1', 0, '武器1 item id'],
|
||||
['gun_id2', 0, '武器2 item id'],
|
||||
['chip_page', 0, '芯片页id'],
|
||||
]
|
120
sql/gamedb.sql
120
sql/gamedb.sql
@ -65,6 +65,8 @@ CREATE TABLE `t_user` (
|
||||
`guild_id` varchar(60) NOT NULL DEFAULT '' COMMENT '工会id',
|
||||
`guild_job` int(11) NOT NULL DEFAULT '0' COMMENT '工会职位',
|
||||
`guild_name` varchar(255) NOT NULL DEFAULT '' COMMENT '工会名称',
|
||||
`parachute` int(11) NOT NULL DEFAULT '0' COMMENT '降落伞ID',
|
||||
`ring_id` int(11) NOT NULL DEFAULT '0' COMMENT '戒指id',
|
||||
PRIMARY KEY (`idx`),
|
||||
UNIQUE KEY `account_id` (`account_id`),
|
||||
KEY `channel` (`channel`)
|
||||
@ -162,10 +164,6 @@ CREATE TABLE `t_hero` (
|
||||
`last_mission_get_ceg_time` bigint NOT NULL DEFAULT '0' COMMENT '最后悬赏任务获取金币的时间',
|
||||
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
|
||||
`chip_ids` varchar(100) NOT NULL DEFAULT '' COMMENT '已镶嵌的芯片idx组',
|
||||
`skill_common` varchar(255) NOT NULL DEFAULT '100100|100120|100140|100160|100180|100200|100220|100240|100260|100280' COMMENT '通用技能',
|
||||
`skill_points` int(11) NOT NULL DEFAULT '0' COMMENT '技能点',
|
||||
`labour` int(11) NOT NULL DEFAULT '0' COMMENT '劳力值',
|
||||
`active_token_id` varchar(60) NOT NULL DEFAULT '' COMMENT 'active_token_id',
|
||||
`active_count` int(11) NOT NULL DEFAULT '0' COMMENT 'active_count',
|
||||
`activate` int(11) NOT NULL DEFAULT '0' COMMENT '是否激活 1:已初始激活',
|
||||
@ -186,6 +184,7 @@ CREATE TABLE `t_hero_skin` (
|
||||
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||
`account_id` varchar(60) CHARACTER SET utf8 NOT NULL COMMENT 'account_id',
|
||||
`skin_id` int(11) NOT NULL DEFAULT '0' COMMENT '英雄皮肤id',
|
||||
`hero_id` int(11) NOT NULL DEFAULT '0' COMMENT '英雄id',
|
||||
`skin_state` int(11) NOT NULL DEFAULT '0' COMMENT '英雄皮肤状态 0=已经购,1 = 试用状态',
|
||||
`get_from` int(11) NOT NULL DEFAULT '0' COMMENT '获得方式 0 = 系统赠送 1 = 金币购买',
|
||||
`consume_num` int(11) NOT NULL DEFAULT '0' COMMENT '消耗货币的具体数量',
|
||||
@ -240,22 +239,13 @@ CREATE TABLE `t_chip` (
|
||||
`item_id` int(11) NOT NULL DEFAULT '0' COMMENT '道具id',
|
||||
`item_num` int(11) NOT NULL DEFAULT '1' COMMENT '数量',
|
||||
`chip_grade` int(11) NOT NULL DEFAULT '1' COMMENT '芯片等级',
|
||||
`chip_type` int(11) NOT NULL DEFAULT '1' COMMENT '1:角色芯片 2:武器芯片',
|
||||
`state` int(11) NOT NULL DEFAULT '0' COMMENT '芯片添加状态:0 正常;1 选择;-1 锁定',
|
||||
`supper_state` int(11) NOT NULL DEFAULT '0' COMMENT '是否锁定:0 正常;1 锁住',
|
||||
`inlay_state` int(11) NOT NULL DEFAULT '0' COMMENT '镶嵌状态:0 未镶嵌;1 镶嵌了',
|
||||
`chip_type` int(11) NOT NULL DEFAULT '1' COMMENT '1 攻击;2 防御;3 辅助',
|
||||
`state` int(11) NOT NULL DEFAULT '0' COMMENT '0:已购买 1:免费(GIFT标签)',
|
||||
`inlay_state` varchar(60) COMMENT '所镶嵌的芯片页id:1|2|3',
|
||||
`rand_attr` mediumblob COMMENT '随机属性',
|
||||
`today_get_gold` bigint NOT NULL DEFAULT '0' COMMENT '金币',
|
||||
`last_get_gold_time` int(11) NOT NULL DEFAULT '0' COMMENT '最后获取金币的时间',
|
||||
`lucky_temporary` varchar(10) NOT NULL DEFAULT '0' COMMENT '临时幸运值',
|
||||
`lucky_final` varchar(10) NOT NULL DEFAULT '0' COMMENT '最终幸运值',
|
||||
`strength_max` varchar(10) NOT NULL DEFAULT '0' COMMENT '最大体力值',
|
||||
`strength` varchar(10) NOT NULL DEFAULT '0' COMMENT '前一天体力值',
|
||||
`upgrade_mint` double NOT NULL DEFAULT '0' COMMENT 'mint费用',
|
||||
`activate` int(11) NOT NULL DEFAULT '0' COMMENT '是否激活 1:已初始激活',
|
||||
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
|
||||
`labour` int(11) NOT NULL DEFAULT '0' COMMENT '劳力值',
|
||||
PRIMARY KEY (`idx`),
|
||||
UNIQUE KEY `token_id` (`token_id`),
|
||||
KEY `item_id` (`item_id`),
|
||||
@ -292,8 +282,6 @@ CREATE TABLE `t_gun` (
|
||||
`last_mission_get_ceg_time` bigint NOT NULL DEFAULT '0' COMMENT '最后悬赏任务获取金币的时间',
|
||||
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
|
||||
`chip_ids` varchar(100) NOT NULL DEFAULT '' COMMENT '已镶嵌的芯片idx组',
|
||||
`labour` int(11) NOT NULL DEFAULT '0' COMMENT '劳力值',
|
||||
`active_token_id` varchar(60) NOT NULL DEFAULT '' COMMENT 'active_token_id',
|
||||
`active_count` int(11) NOT NULL DEFAULT '0' COMMENT 'active_count',
|
||||
`activate` int(11) NOT NULL DEFAULT '0' COMMENT '是否激活 1:已初始激活',
|
||||
@ -634,6 +622,25 @@ CREATE TABLE `t_fragment_pool` (
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `t_fragment_record`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `t_fragment_record`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `t_fragment_record` (
|
||||
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||
`account_id` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id',
|
||||
`param` int(11) NOT NULL DEFAULT '0' COMMENT 'param',
|
||||
`value` int(11) NOT NULL DEFAULT '0' COMMENT '有效场次',
|
||||
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
|
||||
PRIMARY KEY (`idx`),
|
||||
KEY `account_param` (`account_id`, `param`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `t_realtime_data`
|
||||
--
|
||||
@ -918,4 +925,81 @@ CREATE TABLE `t_user_currency` (
|
||||
PRIMARY KEY (`idx`),
|
||||
UNIQUE KEY `account_net_address` (`account_id`, `net_id`, `address`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
|
||||
--
|
||||
-- Table structure for table `t_emoji`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `t_emoji`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `t_emoji` (
|
||||
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||
`account_id` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id',
|
||||
`item_id` int(11) NOT NULL DEFAULT '0' COMMENT 'itemID',
|
||||
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
|
||||
PRIMARY KEY (`idx`),
|
||||
UNIQUE KEY `account_item_id` (`account_id`, `item_id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `t_user_use_emoji`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `t_user_use_emoji`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `t_user_use_emoji` (
|
||||
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||
`account_id` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id',
|
||||
`value` varchar(255) NOT NULL DEFAULT '' COMMENT '选中表情itemID',
|
||||
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
|
||||
PRIMARY KEY (`idx`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `t_chip_page`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `t_chip_page`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `t_chip_page` (
|
||||
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||
`account_id` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id',
|
||||
`page_name` varchar(50) NOT NULL DEFAULT '' COMMENT '页名',
|
||||
`page_id` int(11) NOT NULL DEFAULT '0' COMMENT '页id',
|
||||
`data` mediumblob COMMENT 'data',
|
||||
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
|
||||
PRIMARY KEY (`idx`),
|
||||
UNIQUE KEY `account_page_id` (`account_id`, `page_id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `t_hero_preset`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `t_hero_preset`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `t_hero_preset` (
|
||||
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||
`account_id` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id',
|
||||
`hero_uid` int(11) NOT NULL DEFAULT 0 COMMENT 'hero uniid',
|
||||
`skill_id` int(11) NOT NULL DEFAULT 0 COMMENT '技能 item_id',
|
||||
`weapon_uid1` int(11) NOT NULL DEFAULT 0 COMMENT 'gun uniid1',
|
||||
`weapon_uid2` int(11) NOT NULL DEFAULT 0 COMMENT 'gun uniid2',
|
||||
`chip_page` int(11) NOT NULL DEFAULT 0 COMMENT '芯片页id',
|
||||
`createtime` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
`modifytime` int(11) NOT NULL DEFAULT 0 COMMENT '修改时间',
|
||||
PRIMARY KEY (`idx`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
149
uml/market.drawio
Normal file
149
uml/market.drawio
Normal file
@ -0,0 +1,149 @@
|
||||
<mxfile host="65bd71144e">
|
||||
<diagram id="RhfSRgj28ZWy9lpzOC5h" name="Page-1">
|
||||
<mxGraphModel dx="946" dy="807" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="45" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="41" target="44">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="80" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="41" target="79">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="41" value="User" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="200" width="30" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="55" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="42" target="54">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="42" value="User" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="550" width="30" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="49" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="44" target="48">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="44" value="调用上架合约" style="whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="200" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="51" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="48" target="50">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="48" value="修改NFT Owner" style="whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="400" y="200" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="53" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="50" target="52">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="50" value="同步NFT中心化数据 Owner" style="whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="600" y="200" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="76" value="增加一个订单" style="edgeStyle=none;html=1;" edge="1" parent="1" source="52" target="63">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="52" value="同步中心化货架信息" style="whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="800" y="200" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="70" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="54" target="69">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="54" value="购买NFT" style="whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="550" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="60" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="56" target="59">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="56" value="User" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="380" width="30" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="59" value="检索上架NFT" style="whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="430" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="77" style="edgeStyle=none;html=1;entryX=1;entryY=0;entryDx=0;entryDy=15;entryPerimeter=0;" edge="1" parent="1" source="61" target="63">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="78" value="为检索缓存NFT数据" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="77">
|
||||
<mxGeometry x="0.0816" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="61" value="NFTs 721" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="1">
|
||||
<mxGeometry x="830" y="780" width="60" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="75" value="同步中心化NFT Owner" style="edgeStyle=none;html=1;" edge="1" parent="1" source="62" target="61">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="62" value="链上NFTs" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="1">
|
||||
<mxGeometry x="590" y="780" width="60" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="65" value="" style="edgeStyle=none;html=1;entryX=1;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="63" target="59">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="520" y="665" as="targetPoint"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="66" value="直接从货架表检索已上架的NFTs" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];rotation=30;" vertex="1" connectable="0" parent="65">
|
||||
<mxGeometry x="-0.2491" y="4" relative="1" as="geometry">
|
||||
<mxPoint as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="86" style="edgeStyle=none;html=1;exitX=0.855;exitY=1;exitDx=0;exitDy=-4.35;exitPerimeter=0;" edge="1" parent="1" source="63" target="85">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="690" y="890"/>
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="87" value="特殊性,多个上架指向同一token" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="86">
|
||||
<mxGeometry x="0.4509" relative="1" as="geometry">
|
||||
<mxPoint as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="63" value="Market货架" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="1">
|
||||
<mxGeometry x="590" y="620" width="80" height="90" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="71" style="edgeStyle=none;html=1;entryX=0;entryY=0;entryDx=0;entryDy=15;entryPerimeter=0;" edge="1" parent="1" source="69" target="62">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="72" value="成功后修改Owner" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];rotation=15;" vertex="1" connectable="0" parent="71">
|
||||
<mxGeometry x="-0.3761" y="-2" relative="1" as="geometry">
|
||||
<mxPoint as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="73" style="edgeStyle=none;html=1;" edge="1" parent="1" source="69" target="63">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="74" value="成功后删除货架上的订单" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];rotation=-5;" vertex="1" connectable="0" parent="73">
|
||||
<mxGeometry x="-0.0746" relative="1" as="geometry">
|
||||
<mxPoint as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="69" value="调用购买合约" style="whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="690" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="81" style="edgeStyle=none;html=1;" edge="1" parent="1" source="79" target="62">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="82" value="成功后修改上架价格信息" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];rotation=60;" vertex="1" connectable="0" parent="81">
|
||||
<mxGeometry x="-0.5924" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="83" style="edgeStyle=none;html=1;" edge="1" parent="1" source="62" target="63">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="520" y="480" as="sourcePoint"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="84" value="同步货架售价" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="83">
|
||||
<mxGeometry x="0.0058" y="-3" relative="1" as="geometry">
|
||||
<mxPoint as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="79" value="调用更新价格合约" style="whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="280" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="85" value="NFTs 1155" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="1">
|
||||
<mxGeometry x="830" y="880" width="60" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
@ -41,6 +41,8 @@ define('TN_DAILY_PVP_GET_FRAGMENT_NUM', 9009);
|
||||
define('TN_DAILY_PVE_LAST_GET_FRAGMENT_BATTLE', 9010);
|
||||
define('TN_DAILY_RANK_BATTLE_TIMES', 9011);
|
||||
define('TN_DAILY_END', 9011);
|
||||
define('TN_DAILY_PVE_GET_HERO_FRAGMENT_NUM', 9012);
|
||||
define('TN_DAILY_PVE_GET_GUN_FRAGMENT_NUM', 9013);
|
||||
|
||||
define('TN_WEEKLY_BEGIN', 10001);
|
||||
define('TN_WEEKLY_ACTIVE', 10002);
|
||||
@ -95,3 +97,4 @@ const kWantedLockType = 3;
|
||||
|
||||
const kMaxHeroUpLevelNum = 2;
|
||||
const kMaxHeroUpQualityNum = 2;
|
||||
const kMaxEmojiNum = 6;
|
||||
|
@ -12,6 +12,7 @@ require_once('models/User.php');
|
||||
require_once('models/Nft.php');
|
||||
require_once('models/UserSeasonRing.php');
|
||||
require_once('models/Parachute.php');
|
||||
require_once('models/Chip.php');
|
||||
require_once('mt/Parameter.php');
|
||||
require_once('mt/RankSeason.php');
|
||||
|
||||
@ -26,6 +27,7 @@ use models\User;
|
||||
use models\Nft;
|
||||
use models\Parachute;
|
||||
use models\UserSeasonRing;
|
||||
use models\Chip;
|
||||
|
||||
class BaseAuthedController extends BaseController {
|
||||
|
||||
@ -252,6 +254,15 @@ class BaseAuthedController extends BaseController {
|
||||
));
|
||||
}
|
||||
break;
|
||||
case V_ITEM_EXP:
|
||||
{
|
||||
$this->_updateUserInfo(array(
|
||||
'exp' => function () use($itemNum) {
|
||||
return "exp + ${itemNum}";
|
||||
}
|
||||
));
|
||||
}
|
||||
break;
|
||||
case V_ITEM_ACTIVE:
|
||||
{
|
||||
return;
|
||||
@ -375,6 +386,12 @@ class BaseAuthedController extends BaseController {
|
||||
$propertyService->addUserChg();
|
||||
}
|
||||
break;
|
||||
case mt\Item::CHIP_TYPE:
|
||||
{
|
||||
Chip::addChip($itemMeta);
|
||||
$propertyService->addChip();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
$this->_addLog('additems', 'invalid_item', array(
|
||||
|
@ -1,23 +1,29 @@
|
||||
<?php
|
||||
|
||||
require_once('models/Hero.php');
|
||||
require_once('models/HeroSkin.php');
|
||||
require_once('models/Gun.php');
|
||||
require_once('models/Chip.php');
|
||||
require_once('models/Bag.php');
|
||||
require_once('models/DynData.php');
|
||||
require_once('models/BattleSettlement.php');
|
||||
require_once('models/BattleHistory.php');
|
||||
require_once('models/User.php');
|
||||
require_once('models/Parachute.php');
|
||||
require_once('services/BattleDataService.php');
|
||||
require_once('services/FormulaService.php');
|
||||
require_once('mt/RankSeason.php');
|
||||
|
||||
use phpcommon\SqlHelper;
|
||||
use models\Hero;
|
||||
use models\HeroSkin;
|
||||
use models\Gun;
|
||||
use models\Bag;
|
||||
use models\DynData;
|
||||
use models\BattleHistory;
|
||||
use models\BattleSettlement;
|
||||
use models\User;
|
||||
use models\Parachute;
|
||||
|
||||
class BattleController extends BaseAuthedController {
|
||||
|
||||
@ -130,6 +136,7 @@ class BattleController extends BaseAuthedController {
|
||||
error_log(json_encode($_REQUEST));
|
||||
error_log(json_encode($members));
|
||||
foreach ($members as $member) {
|
||||
$user = User::find($member['account_id']);
|
||||
$info = array(
|
||||
'account_id' => $member['account_id'],
|
||||
'session_id' => $member['session_id'],
|
||||
@ -140,6 +147,7 @@ class BattleController extends BaseAuthedController {
|
||||
'hero_dto' => '',
|
||||
'weapon_dto1' => '',
|
||||
'weapon_dto2' => '',
|
||||
'level' =>$user['level'],
|
||||
|
||||
'is_valid_battle' => 0,
|
||||
'payload' => json_encode($member['cmjoin']),
|
||||
@ -156,6 +164,12 @@ class BattleController extends BaseAuthedController {
|
||||
if ($heroDb) {
|
||||
$info['is_valid_battle'] = 1;
|
||||
$info['hero_dto'] = Hero::toDto($heroDb);
|
||||
{//选用皮肤id
|
||||
$skinDb = HeroSkin::findBx($heroDb['hero_id']);
|
||||
if ($skinDb){
|
||||
$info['hero_dto']['skin_id'] = $skinDb['skin_id'];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$info['errcode'] = 51;
|
||||
$info['errmsg'] = 'paramater error';
|
||||
@ -186,6 +200,7 @@ class BattleController extends BaseAuthedController {
|
||||
);
|
||||
$currSeason = mt\RankSeason::getCurrentSeason();
|
||||
foreach ($members as $member) {
|
||||
$userDb = User::find($member['account_id']);
|
||||
$info = array(
|
||||
'account_id' => $member['account_id'],
|
||||
'session_id' => $member['session_id'],
|
||||
@ -193,6 +208,7 @@ class BattleController extends BaseAuthedController {
|
||||
'weapon_uuid1' => $member['weapon_uuid1'],
|
||||
'weapon_uuid2' => $member['weapon_uuid2'],
|
||||
'battle_uuid' => $member['battle_uuid'],
|
||||
'parachute' => $userDb['parachute']?$userDb['parachute']:Parachute::$parachute,
|
||||
'hero_dto' => '',
|
||||
'weapon_dto1' => '',
|
||||
'weapon_dto2' => '',
|
||||
|
@ -335,7 +335,7 @@ class CallbackController extends BaseController {
|
||||
myself()->_rspOk();
|
||||
}
|
||||
|
||||
public function chipUpgradeGrade(){
|
||||
public function chipUpgradeGrade(){return;
|
||||
$transId = getReqVal('trans_id', '0');
|
||||
$tokenId = getReqVal('token_id', '0');
|
||||
if (!$transId || !$tokenId){
|
||||
|
@ -14,6 +14,7 @@ require_once('services/LogService.php');
|
||||
|
||||
|
||||
|
||||
|
||||
use models\Chip;
|
||||
use models\Hero;
|
||||
use models\Gun;
|
||||
@ -26,838 +27,198 @@ class ChipController extends BaseAuthedController
|
||||
{
|
||||
public function chipList()
|
||||
{
|
||||
// $type = getReqVal('type','');
|
||||
// if (! $type){
|
||||
// $this->_rspErr(1,'Please enter instructions');
|
||||
// return ;
|
||||
// }
|
||||
// $chipList = Chip::all($type);
|
||||
// $chipDtoList = array();
|
||||
// foreach ($chipList as $item) {
|
||||
// array_push($chipDtoList, Chip::toDto($item));
|
||||
// }
|
||||
$chipList = array();
|
||||
Chip::getChipList(function ($row) use(&$chipList){
|
||||
array_push($chipList, Chip::toDto($row));
|
||||
// if ($row['inlay_state'] != 1){
|
||||
array_push($chipList, Chip::toDto($row));
|
||||
// }
|
||||
});
|
||||
$this->_rspData(array(
|
||||
'data' => $chipList,
|
||||
));
|
||||
}
|
||||
|
||||
public function chipOrder(){
|
||||
$type = getReqVal('type','');
|
||||
if (! $type){
|
||||
$this->_rspErr(1,'Please enter instructions');
|
||||
return ;
|
||||
}
|
||||
$order = getReqVal('order','asc');
|
||||
$chipList = Chip::all($type);
|
||||
$chipDtoList = array();
|
||||
foreach ($chipList as $item) {
|
||||
array_push($chipDtoList, Chip::toDto($item));
|
||||
}
|
||||
$data = $this->_orderByChip($chipDtoList,$order);
|
||||
$this->_rspData(array(
|
||||
'data' => $data,
|
||||
));
|
||||
}
|
||||
|
||||
public function chipDetails(){
|
||||
$token_id = getReqVal('token_id','');
|
||||
if (! $token_id){
|
||||
$this->_rspErr(1,'Please enter instructions');
|
||||
$unique_id = trim(getReqVal('unique_id', 0));
|
||||
if (! $unique_id){
|
||||
$this->_rspErr(1, 'Please enter parameter unique_id');
|
||||
return ;
|
||||
}
|
||||
$chip = Chip::getChipByTokenId($token_id);
|
||||
if ($chip['supper_state'] == 1){
|
||||
$chip['strength_temporary'] = \services\FormulaService::Hero_Chip_NFT_Maximum_Physical_Strength($chip['chip_grade'],$chip['lucky_temporary']);
|
||||
$chip['mint'] = strval(\services\FormulaService::Chip_Need_Mint_Cost($chip['chip_grade'])-$chip['upgrade_mint']);
|
||||
$chipDb = Chip::find($unique_id);
|
||||
if (! $chipDb){
|
||||
$this->_rspErr(1, "You don't have the chip yet");
|
||||
return;
|
||||
}
|
||||
// if ($chip['inlay_state'] == 1){
|
||||
$tili = $chip['strength_max']-$chip['strength'];
|
||||
$chip['mint'] = \services\FormulaService::Chip_Demount_Mint($tili);
|
||||
// }
|
||||
$chip = Chip::toDto($chip);
|
||||
$chip = Chip::toDto($chipDb);
|
||||
$this->_rspData(array(
|
||||
'data' => $chip,
|
||||
));
|
||||
}
|
||||
|
||||
public function beforeInlay(){
|
||||
$type = getReqVal('type','');
|
||||
if (! $type){
|
||||
$this->_rspErr(1,'Please enter instructions');
|
||||
return ;
|
||||
public function upgradeLevelPreview(){
|
||||
$unique_id = trim(getReqVal('unique_id', 0));
|
||||
if (! $unique_id) {
|
||||
$this->_rspErr(1, 'Please enter parameter unique_id');
|
||||
return;
|
||||
}
|
||||
$chipList = Chip::all($type);
|
||||
$chipDtoList = array();
|
||||
foreach ($chipList as $item) {
|
||||
if ($item['supper_state']==0 && $item['inlay_state']==0){
|
||||
array_push($chipDtoList, Chip::toDto($item));
|
||||
$chipDb = Chip::find($unique_id);
|
||||
if (!$chipDb){
|
||||
$this->_rspErr(1,'unique_id parameter error');
|
||||
return;
|
||||
}
|
||||
if ($chipDb['chip_grade'] == Chip::CHIP_LV_MAX){
|
||||
$this->_rspErr(1,' Level upper limit');
|
||||
return;
|
||||
}
|
||||
$chip = Chip::toDto($chipDb);
|
||||
$rand_attr = emptyReplace(json_decode($chipDb['rand_attr'], true), array());
|
||||
$chipMeta = mt\ChipAttr::getAttrByItemId($chipDb['item_id']);
|
||||
if ($chipMeta){
|
||||
array_unshift($rand_attr,array(
|
||||
'attr_id'=>$chipMeta['attr_id'],
|
||||
'val' => $chipMeta['lv'.($chipDb['chip_grade']+1)]
|
||||
));
|
||||
}
|
||||
$chip['rand_attr_after'] = $rand_attr;
|
||||
$paramMeta = mt\Parameter::getByName('chip_upgrade_cost');
|
||||
$gold = 0;
|
||||
if ($paramMeta){
|
||||
$paramValue = explode('|',$paramMeta['param_value']);
|
||||
switch ($chipDb['chip_grade']){
|
||||
case 1: {
|
||||
$gold = $paramValue[0];
|
||||
};break;
|
||||
case 2: {
|
||||
$gold = $paramValue[1];
|
||||
};break;
|
||||
}
|
||||
}
|
||||
$chip['cost'] = array(
|
||||
'item_id' => V_ITEM_GOLD,
|
||||
'item_num' => $gold
|
||||
);
|
||||
$this->_rspData(array(
|
||||
'data' => $chipDtoList,
|
||||
'data' => $chip
|
||||
));
|
||||
}
|
||||
|
||||
public function inlayChip(){
|
||||
$type = trim(getReqVal('type', 0));
|
||||
$unique_id = trim(getReqVal('unique_id', 0));
|
||||
$token_id = trim(getReqVal('token_id', 0));
|
||||
if (!$type || ! $token_id || ! $unique_id) {
|
||||
$this->_rspErr(1, 'Please enter instructions');
|
||||
return;
|
||||
}
|
||||
$propertyChgService = new services\PropertyChgService();
|
||||
$propertyChgService->addChip();
|
||||
if ($type == 1){
|
||||
if (! $this->_doInlayHero($unique_id,$token_id)){
|
||||
return;
|
||||
}
|
||||
$hero = Hero::toDto(Hero::find($unique_id));
|
||||
$propertyChgService->addHeroChg();
|
||||
$this->_rspData([
|
||||
'data'=>$hero,
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
]);
|
||||
}else{
|
||||
if (! $this->_doInlayGun($unique_id,$token_id)){
|
||||
return;
|
||||
}
|
||||
$gun = Gun::toDto(Gun::find($unique_id));
|
||||
$propertyChgService->addGunChg();
|
||||
$this->_rspData([
|
||||
'data'=>$gun,
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function demountChip(){
|
||||
$type = trim(getReqVal('type', 0));
|
||||
$unique_id = trim(getReqVal('unique_id', 0));
|
||||
$token_id = trim(getReqVal('token_id', 0));
|
||||
if (!$type || ! $token_id || ! $unique_id) {
|
||||
$this->_rspErr(1, 'Please enter instructions');
|
||||
return;
|
||||
}
|
||||
$propertyChgService = new services\PropertyChgService();
|
||||
$propertyChgService->addChip();
|
||||
if ($type == 1){
|
||||
if (!$this->_doDemount($unique_id,$token_id)){
|
||||
return;
|
||||
}
|
||||
$hero = Hero::toDto(Hero::find($unique_id));
|
||||
$propertyChgService->addHeroChg();
|
||||
$this->_rspData([
|
||||
'data'=>$hero,
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
]);
|
||||
}else{
|
||||
if (! $this->_doDemountGun($unique_id,$token_id)){
|
||||
return;
|
||||
}
|
||||
$gun = Gun::toDto(Gun::find($unique_id));
|
||||
$propertyChgService->addGunChg();
|
||||
$this->_rspData([
|
||||
'data'=>$gun,
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function replaceChip(){
|
||||
$type = trim(getReqVal('type', 0));
|
||||
$unique_id = trim(getReqVal('unique_id', 0));
|
||||
$token_id_new = trim(getReqVal('token_id_new', 0));
|
||||
$token_id_old = trim(getReqVal('token_id_old', 0));
|
||||
if (! $token_id_new ||! $token_id_old || ! $unique_id || !$type) {
|
||||
$this->_rspErr(1, 'Please enter instructions');
|
||||
return;
|
||||
}
|
||||
$propertyChgService = new services\PropertyChgService();
|
||||
$propertyChgService->addChip();
|
||||
if ($type == 1){
|
||||
if (! $this->_doDemount($unique_id,$token_id_old)){
|
||||
return;
|
||||
}
|
||||
if (! $this->_doInlayHero($unique_id,$token_id_new)){
|
||||
return;
|
||||
}
|
||||
$hero = Hero::toDto(Hero::find($unique_id));
|
||||
$propertyChgService->addHeroChg();
|
||||
$this->_rspData([
|
||||
'data'=>$hero,
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
]);
|
||||
}else{
|
||||
if (! $this->_doDemountGun($unique_id,$token_id_old)){
|
||||
return;
|
||||
}
|
||||
if (! $this->_doInlayGun($unique_id,$token_id_new)){
|
||||
return;
|
||||
}
|
||||
$gun = Gun::toDto(Gun::find($unique_id));
|
||||
$propertyChgService->addGunChg();
|
||||
$this->_rspData([
|
||||
'data'=>$gun,
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function aKeyInlayChip(){
|
||||
$type = trim(getReqVal('type', 0));
|
||||
$unique_id = trim(getReqVal('unique_id', 0));
|
||||
if ( ! $type || ! $unique_id) {
|
||||
$this->_rspErr(1, 'Please enter instructions');
|
||||
return;
|
||||
}
|
||||
if ($type == 1){
|
||||
$hero_or_gun = Hero::find($unique_id);
|
||||
}else{
|
||||
$hero_or_gun = Gun::find($unique_id);
|
||||
}
|
||||
|
||||
if (! $hero_or_gun){
|
||||
$this->_rspErr(1, 'Not enough hero or gun');
|
||||
return;
|
||||
}
|
||||
$limit = 0;
|
||||
if (! $hero_or_gun['chip_ids'] ){
|
||||
$limit = 4;
|
||||
}
|
||||
if ($hero_or_gun['chip_ids'] && !strpos($hero_or_gun['chip_ids'], '|')){
|
||||
$limit = 3;
|
||||
}
|
||||
if ($hero_or_gun['chip_ids'] && strpos($hero_or_gun['chip_ids'], '|')){
|
||||
$chipIdsArr = explode('|',$hero_or_gun['chip_ids']);
|
||||
$limit = 4-count($chipIdsArr);
|
||||
}
|
||||
|
||||
$chipList = Chip::all($type);
|
||||
if (! $chipList){
|
||||
$this->_rspErr(1, 'Not enough chip');
|
||||
return;
|
||||
}
|
||||
$usable = array();
|
||||
foreach ($chipList as $item) {
|
||||
if ($item['supper_state']==0 && $item['inlay_state']==0){
|
||||
array_push($usable, $item);
|
||||
}
|
||||
}
|
||||
|
||||
$res = $this->_getHignGradeLimit($usable,$limit);
|
||||
if (! $res){
|
||||
$this->_rspErr(1, 'The chip slot is full');
|
||||
return;
|
||||
}
|
||||
$propertyChgService = new services\PropertyChgService();
|
||||
$propertyChgService->addChip();
|
||||
if ($type == 1){
|
||||
foreach ($res as $val){
|
||||
$this->_doInlayHero($unique_id,$val['token_id']);
|
||||
}
|
||||
$hero_new = Hero::toDto(Hero::find($unique_id));
|
||||
$propertyChgService->addHeroChg();
|
||||
$this->_rspData([
|
||||
'data'=>$hero_new,
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
]);
|
||||
}else{
|
||||
foreach ($res as $val){
|
||||
$this->_doInlayGun($unique_id,$val['token_id']);
|
||||
}
|
||||
$gun_new = Gun::toDto(Gun::find($unique_id));
|
||||
$propertyChgService->addGunChg();
|
||||
$this->_rspData([
|
||||
'data'=>$gun_new,
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public function beforeSynthetic(){
|
||||
$token_id = trim(getReqVal('token_id', 0));
|
||||
if (! $token_id) {
|
||||
$this->_rspErr(1, 'Please enter instructions');
|
||||
return;
|
||||
}
|
||||
$chip = Chip::getChipByTokenId($token_id);
|
||||
if ($chip['supper_state'] == 1 || $chip['inlay_state'] == 1 || $chip['state'] == -1){
|
||||
$this->_rspErr(1, "The chip can't synthetic");
|
||||
return;
|
||||
}
|
||||
if ($chip['chip_grade'] == 15){
|
||||
$this->_rspErr(1, "Chip Lv upper limit");
|
||||
return;
|
||||
}
|
||||
$chip = Chip::toDto($chip);
|
||||
foreach ($chip['rand_attr'] as $k=>$val){
|
||||
$attr = \mt\ChipAttr::getAttrById($val['attr_id'],$val['chip_type']);
|
||||
$chip['rand_attr_after'][$k] =[
|
||||
'attr_id'=>$val['attr_id'],
|
||||
'type'=>$val['type'],
|
||||
'val'=>$attr['lv'.($chip['chip_grade']+1)]*$val['attr_pool_num'],
|
||||
'chip_type'=>$val['chip_type']
|
||||
];
|
||||
}
|
||||
$chip['upgrade_cost']=\services\FormulaService::getChipUpgradeCost($chip['chip_grade']+1);
|
||||
$this->_rspData(['data'=>$chip]);
|
||||
}
|
||||
|
||||
public function selectChip(){
|
||||
$token_id = trim(getReqVal('token_id', 0));
|
||||
$token_ids = explode(' ',$token_id);
|
||||
if (count($token_ids)<0){
|
||||
$unique_id = trim(getReqVal('unique_id', 0));
|
||||
$idxArr = explode(' ',$unique_id);
|
||||
if (count($idxArr)<0){
|
||||
$this->_rspErr(1, 'Please enter instructions');
|
||||
return;
|
||||
}
|
||||
$chip_main = Chip::getChipByTokenId($token_ids[0]);
|
||||
$chip_param = Chip::getChipByTokenId($token_ids[1]);
|
||||
if ($chip_param['supper_state'] == 1 || $chip_param['inlay_state'] == 1 || $chip_param['state'] == -1){
|
||||
$this->_rspErr(1, "The chip can't select");
|
||||
$chipDbMain = Chip::find($idxArr[0]);
|
||||
$chipDbParam = Chip::find($idxArr[1]);
|
||||
if (!$chipDbMain || !$chipDbParam){
|
||||
$this->_rspErr(1,'unique_id parameter error');
|
||||
return;
|
||||
}
|
||||
if ($chip_param['chip_grade']>$chip_main['chip_grade']){
|
||||
if ($chipDbParam['token_id']) {
|
||||
$this->_rspErr(1, "Unable to use nft chip");
|
||||
return;
|
||||
}
|
||||
if (!$chipDbParam['state']) {
|
||||
$this->_rspErr(1, "Unable to use free chip");
|
||||
return;
|
||||
}
|
||||
if ($chipDbParam['chip_grade']>$chipDbMain['chip_grade']){
|
||||
$this->_rspErr(1, "The selected material is too high grade");
|
||||
return;
|
||||
}
|
||||
$cost = \services\FormulaService::getChipCumulativeCost($chip_param['chip_grade']);
|
||||
$this->_rspData(['data'=>$cost]);
|
||||
$cost = \services\FormulaService::getChipCumulativeCost($chipDbParam['chip_grade']);
|
||||
$this->_rspData(['cost'=>$cost]);
|
||||
}
|
||||
|
||||
public function syntheticChip(){
|
||||
$this->_rspOk();return;
|
||||
$token_id_main = trim(getReqVal('token_id_main', 0));
|
||||
$token_id_param = array_filter(explode(' ',getReqVal('token_id_param', 0)));
|
||||
if (! $token_id_main || count($token_id_param)<=0 ) {
|
||||
$this->_rspErr(1, 'Please enter instructions token_id_param');
|
||||
public function upgradeLevel(){
|
||||
$idxMain = trim(getReqVal('unique_id_main', 0));
|
||||
$idxParam = trim(getReqVal('unique_id_param', 0));
|
||||
if (!$idxMain || !$idxParam) {
|
||||
$this->_rspErr(1, 'Please enter parameter');
|
||||
return;
|
||||
}
|
||||
$chip_main = Chip::getChipByTokenId($token_id_main);
|
||||
$upgrade_cost = \services\FormulaService::getChipUpgradeCost($chip_main['chip_grade']+1);
|
||||
if ($upgrade_cost==0){
|
||||
$this->_rspErr(1, 'Error in calculation formula');
|
||||
$chipDbMain = Chip::find($idxMain);
|
||||
if (!$chipDbMain){
|
||||
$this->_rspErr(1,'unique_id_main parameter error');
|
||||
return;
|
||||
}
|
||||
$cumulative_cost = 0;
|
||||
$params = array();
|
||||
foreach ($token_id_param as $val){
|
||||
$chip_param = Chip::getChipByTokenId($val);
|
||||
array_push($params,array(
|
||||
'unique_id'=>$chip_param['idx'],
|
||||
'token_id'=>$chip_param['token_id'],
|
||||
));
|
||||
$cumulative_cost += \services\FormulaService::getChipCumulativeCost($chip_param['chip_grade']);
|
||||
// Chip::deleteChip(['token_id'=>$val]);
|
||||
if ($chipDbMain['chip_grade'] == Chip::CHIP_LV_MAX){
|
||||
$this->_rspErr(1,' Level upper limit');
|
||||
return;
|
||||
}
|
||||
{
|
||||
//埋点
|
||||
$event = [
|
||||
'name' => LogService::CHIP_SYNTH_MATERIAL,
|
||||
];
|
||||
LogService::ConsumableMaterial($event,$params);
|
||||
$chipDbParam = Chip::find($idxParam);
|
||||
if (!$chipDbParam){
|
||||
$this->_rspErr(1,"unique_id_param parameter error");
|
||||
return;
|
||||
}
|
||||
$num = round(round(($cumulative_cost/$upgrade_cost),5)*10000);
|
||||
$propertyChgService = new services\PropertyChgService();
|
||||
$propertyChgService->addChip();
|
||||
if ($num<rand(1,10000)){
|
||||
//合成失败
|
||||
$this->_rspData([
|
||||
'state' => 0,
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
]);
|
||||
}else{
|
||||
//合成成功
|
||||
$this->_upgraded($chip_main);
|
||||
$chip_new = Chip::toDto(Chip::getChipByTokenId($token_id_main));
|
||||
$chip_new['strength_temporary'] = \services\FormulaService::Hero_Chip_NFT_Maximum_Physical_Strength($chip_new['chip_grade'],$chip_new['lucky_temporary']);
|
||||
$chip_new['mint'] = \services\FormulaService::Chip_Need_Mint_Cost($chip_new['chip_grade'])-$chip_new['upgrade_mint'];
|
||||
$this->_rspData([
|
||||
'data'=>$chip_new,
|
||||
'state' => 1,
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
]);
|
||||
if ($chipDbParam['token_id']) {
|
||||
$this->_rspErr(1, "Unable to use nft chip");
|
||||
return;
|
||||
}
|
||||
if ($chipDbParam['state'] == Chip::FREE_STATE) {
|
||||
$this->_rspErr(1, "Unable to use free chip");
|
||||
return;
|
||||
}
|
||||
if (count(array_filter(explode("|",$chipDbParam['inlay_state']))) > 0){
|
||||
$this->_rspErr(1, "The used chip");
|
||||
return;
|
||||
}
|
||||
if ($chipDbParam['chip_grade'] != $chipDbMain['chip_grade']){
|
||||
$this->_rspErr(1, "Material chip grade does not meet");
|
||||
return;
|
||||
}
|
||||
$paramMeta = mt\Parameter::getByName('chip_upgrade_cost');
|
||||
$gold = 0;
|
||||
if ($paramMeta){
|
||||
$paramValue = explode('|',$paramMeta['param_value']);
|
||||
switch ($chipDbMain['chip_grade']){
|
||||
case 1: {
|
||||
$gold = $paramValue[0];
|
||||
};break;
|
||||
case 2: {
|
||||
$gold = $paramValue[1];
|
||||
};break;
|
||||
}
|
||||
}
|
||||
$costItems = array(
|
||||
array(
|
||||
'item_id' => V_ITEM_GOLD,
|
||||
'item_num' => $gold
|
||||
),
|
||||
);
|
||||
$lackItem = null;
|
||||
if (!$this->_hasEnoughItems($costItems, $lackItem)) {
|
||||
$this->_rspErr(3, $this->_getLackItemErrMsg($lackItem));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public function isNeedLucky(){
|
||||
$token_id = trim(getReqVal('token_id', 0));
|
||||
if (! $token_id) {
|
||||
$this->_rspErr(1, 'Please enter instructions');
|
||||
return;
|
||||
}
|
||||
$chip = Chip::getChipByTokenId($token_id);
|
||||
$strength_max = \services\FormulaService::Hero_Chip_NFT_Maximum_Physical_Strength($chip['chip_grade'],$chip['lucky_temporary']);
|
||||
$mint_cost = \services\FormulaService::Chip_Need_Mint_Cost($chip['chip_grade'])-$chip['upgrade_mint'];
|
||||
$fieldsKv = [
|
||||
'supper_state' => 0,
|
||||
'lucky_final'=>$chip['lucky_temporary'],
|
||||
'lucky_temporary'=>0,
|
||||
'strength_max' => $strength_max,
|
||||
'strength' => $strength_max,
|
||||
'upgrade_mint' => $mint_cost,
|
||||
'labour' => 0
|
||||
];
|
||||
$userObj = new User();
|
||||
$user=$userObj->find(myself()->_getAccountId());
|
||||
if ($mint_cost>$user['gold']){
|
||||
$this->_rspErr(2, 'Be short of gold coins');
|
||||
return;
|
||||
}
|
||||
User::update(['gold'=>$user['gold']-$mint_cost]);
|
||||
Chip::update($chip['token_id'],$fieldsKv);
|
||||
$old_chip = Chip::toDto($chip);
|
||||
$new_chip = Chip::toDto(Chip::getChipByTokenId($token_id));
|
||||
{
|
||||
//埋点
|
||||
$event = [
|
||||
'name' => LogService::CHIP_LUCKY,
|
||||
'val' => $mint_cost
|
||||
];
|
||||
$old_chip['level'] = $old_chip['chip_grade'];
|
||||
$new_chip['level'] = $new_chip['chip_grade'];
|
||||
LogService::consumeCEG($event,$old_chip,$new_chip);
|
||||
}
|
||||
$this->_decItems($costItems);
|
||||
Chip::update2($idxParam,
|
||||
array(
|
||||
'account_id' => myself()->_getAccountId() . '!!!',
|
||||
)
|
||||
);
|
||||
$propertyChgService = new services\PropertyChgService();
|
||||
$propertyChgService->addUserChg();
|
||||
$propertyChgService->addChip();
|
||||
$this->_rspData(array(
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
$rand_attr = emptyReplace(json_decode($chipDbMain['rand_attr'], true), array());
|
||||
$attrProMeta = \mt\ChipAttr::getAttrPool($chipDbMain);
|
||||
array_push($rand_attr,array(
|
||||
'attr_id'=>$attrProMeta['attr_id'],
|
||||
'val'=>$attrProMeta['val'],
|
||||
));
|
||||
}
|
||||
|
||||
public function isNotNeedLucky(){
|
||||
$token_id = trim(getReqVal('token_id', 0));
|
||||
if (! $token_id) {
|
||||
$this->_rspErr(1, 'Please enter instructions');
|
||||
return;
|
||||
}
|
||||
$chip = Chip::getChipByTokenId($token_id);
|
||||
$fieldsKv = [
|
||||
'supper_state' => 0,
|
||||
'lucky_temporary'=>0,
|
||||
];
|
||||
Chip::update($chip['token_id'],$fieldsKv);
|
||||
$propertyChgService = new services\PropertyChgService();
|
||||
$propertyChgService->addChip();
|
||||
$this->_rspData(array(
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
));
|
||||
}
|
||||
|
||||
public function waitingLucky(){
|
||||
$token_id = trim(getReqVal('token_id', 0));
|
||||
if (! $token_id) {
|
||||
$this->_rspErr(1, 'Please enter instructions');
|
||||
return;
|
||||
}
|
||||
$chip = Chip::getChipByTokenId($token_id);
|
||||
$fieldsKv = [
|
||||
'supper_state'=>1,
|
||||
];
|
||||
Chip::update($chip['token_id'],$fieldsKv);
|
||||
$propertyChgService = new services\PropertyChgService();
|
||||
$propertyChgService->addChip();
|
||||
Chip::update2($idxMain,
|
||||
array(
|
||||
'chip_grade' => $chipDbMain['chip_grade']+1,
|
||||
'state' => Chip::GETED_STATE,
|
||||
'rand_attr' => json_encode($rand_attr),
|
||||
)
|
||||
);
|
||||
$chipDbNew = Chip::toDto(Chip::find($idxMain));
|
||||
$this->_rspData([
|
||||
'data'=>$chipDbNew,
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function aKeySynthetic(){
|
||||
$token_id = trim(getReqVal('token_id', 0));
|
||||
if (! $token_id) {
|
||||
$this->_rspErr(1, 'Please enter instructions');
|
||||
return;
|
||||
}
|
||||
$chip = Chip::getChipByTokenId($token_id);
|
||||
$upgrade_cost =\services\FormulaService::getChipUpgradeCost($chip['chip_grade']+1); //芯片升星价值
|
||||
|
||||
$chipList = Chip::all($chip['chip_type']);
|
||||
$chipDtoList = array();
|
||||
foreach ($chipList as $item) {
|
||||
if ($item['supper_state']==0 && $item['inlay_state']==0 && $item['state']!=-1 && $item['token_id'] != $token_id && $item['chip_grade'] <= $chip['chip_grade']){
|
||||
array_push($chipDtoList, $item);
|
||||
}
|
||||
};
|
||||
$data = $this->_orderByChip($chipDtoList,'asc');
|
||||
$chip_param = [];
|
||||
$chip_param_out = [];
|
||||
if (count($data) > 20) {
|
||||
$cost = 0;
|
||||
for ($i=0;$i<count($data);$i++){
|
||||
$data[$i]['cost'] = \services\FormulaService::getChipCumulativeCost($data[$i]['chip_grade']);
|
||||
if ($i<20){
|
||||
$cost += $data[$i]['cost'];
|
||||
array_push($chip_param,$data[$i]);
|
||||
}else{
|
||||
array_push($chip_param_out,$data[$i]);
|
||||
}
|
||||
}
|
||||
if ($cost>$upgrade_cost){
|
||||
$diff_cost = $cost - $upgrade_cost;
|
||||
foreach ($chip_param as $k=>$value){
|
||||
if ($diff_cost>$value['cost']){
|
||||
$diff_cost -= $value['cost'];
|
||||
unset($chip_param[$k]);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
$chip_param = $this->_bestFun($upgrade_cost,$chip_param,$chip_param_out);
|
||||
}
|
||||
|
||||
}else{
|
||||
$cost = 0;
|
||||
foreach ($data as $k=>$val){
|
||||
$data[$k]['cost'] = \services\FormulaService::getChipCumulativeCost($data[$k]['chip_grade']);
|
||||
$cost += $data[$k]['cost'];
|
||||
}
|
||||
if ($cost > $upgrade_cost){
|
||||
$diff_cost = $cost - $upgrade_cost;
|
||||
foreach ($data as $k=>$value){
|
||||
if ($diff_cost>$value['cost']){
|
||||
$diff_cost -= $value['cost'];
|
||||
unset($data[$k]);
|
||||
}
|
||||
}
|
||||
}
|
||||
$chip_param = $data;
|
||||
}
|
||||
$cumulative_cost = [];
|
||||
$token_id_arr = [];
|
||||
foreach ($chip_param as $value){
|
||||
array_push($cumulative_cost,$value['cost']);
|
||||
array_push($token_id_arr,$value['token_id']);
|
||||
}
|
||||
$this->_rspData(['data'=>['cost'=>$cumulative_cost,'token_ids'=>$token_id_arr]]);
|
||||
}
|
||||
|
||||
public function lockChip(){
|
||||
$token_id = trim(getReqVal('token_id', 0));
|
||||
$state = trim(getReqVal('state', 0));
|
||||
if (! $token_id){
|
||||
$this->_rspErr(1, 'Please enter instructions');
|
||||
return;
|
||||
}
|
||||
if ($state == 1){
|
||||
Chip::update($token_id,['state'=>-1]);
|
||||
}else{
|
||||
Chip::update($token_id,['state'=>0]);
|
||||
}
|
||||
$propertyChgService = new services\PropertyChgService();
|
||||
$propertyChgService->addChip();
|
||||
$this->_rspData([
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
]);
|
||||
}
|
||||
|
||||
private function _doInlayHero($hero_id,$token_id){
|
||||
$chip = Chip::getChipByTokenId($token_id);
|
||||
$hero = Hero::find($hero_id);
|
||||
if (! $chip || ! $hero){
|
||||
$this->_rspErr(1, 'Not enough chip or hero');
|
||||
return false;
|
||||
}
|
||||
if (! $hero['chip_ids']){
|
||||
$fieldsKv = ['chip_ids'=>$chip['idx']];
|
||||
}
|
||||
if ($hero['chip_ids'] && !strpos($hero['chip_ids'], '|')){
|
||||
$chipIdsArr = [$hero['chip_ids']];
|
||||
array_push($chipIdsArr,$chip['idx']);
|
||||
$fieldsKv = ['chip_ids'=>implode('|',$chipIdsArr)];
|
||||
}
|
||||
if ($hero['chip_ids'] && strpos($hero['chip_ids'], '|')){
|
||||
$chipIdsArr = explode('|',$hero['chip_ids']);
|
||||
array_push($chipIdsArr,$chip['idx']);
|
||||
$fieldsKv = ['chip_ids'=>implode('|',$chipIdsArr)];
|
||||
}
|
||||
Hero::update($hero_id,$fieldsKv);
|
||||
Chip::updateChipInlayState($token_id,1);
|
||||
return true;
|
||||
}
|
||||
|
||||
private function _doInlayGun($gun_id,$token_id){
|
||||
$chip = Chip::getChipByTokenId($token_id);
|
||||
$gun = Gun::find($gun_id);
|
||||
if (! $chip || ! $gun){
|
||||
$this->_rspErr(1, 'Not enough chip or gun');
|
||||
return false;
|
||||
}
|
||||
if (! $gun['chip_ids']){
|
||||
$fieldsKv = ['chip_ids'=>$chip['idx']];
|
||||
}
|
||||
if ($gun['chip_ids'] && !strpos($gun['chip_ids'], '|')){
|
||||
$chipIdsArr = [$gun['chip_ids']];
|
||||
array_push($chipIdsArr,$chip['idx']);
|
||||
$fieldsKv = ['chip_ids'=>implode('|',$chipIdsArr)];
|
||||
}
|
||||
if ($gun['chip_ids'] && strpos($gun['chip_ids'], '|')){
|
||||
$chipIdsArr = explode('|',$gun['chip_ids']);
|
||||
array_push($chipIdsArr,$chip['idx']);
|
||||
$fieldsKv = ['chip_ids'=>implode('|',$chipIdsArr)];
|
||||
}
|
||||
Gun::update($gun_id,$fieldsKv);
|
||||
Chip::updateChipInlayState($token_id,1);
|
||||
return true;
|
||||
}
|
||||
|
||||
private function _doDemount($unique_id,$token_id){
|
||||
$chip = Chip::getChipByTokenId($token_id);
|
||||
$hero = Hero::find($unique_id);
|
||||
if (! $chip || ! $hero){
|
||||
$this->_rspErr(1, 'Not enough chip or hero');
|
||||
return false;
|
||||
}
|
||||
$chipIdsArr = explode('|',$hero['chip_ids']);
|
||||
$k = array_search($chip['idx'],$chipIdsArr);
|
||||
unset($chipIdsArr[$k]);
|
||||
$fieldsKv = ['chip_ids'=>implode('|',$chipIdsArr)];
|
||||
$tili = $chip['strength_max']-$chip['strength'];
|
||||
if ($tili){
|
||||
$mint = \services\FormulaService::Chip_Demount_Mint($tili);
|
||||
$userObj = new User();
|
||||
$user=$userObj->find(myself()->_getAccountId());
|
||||
if ($mint>$user['gold']){
|
||||
$this->_rspErr(2, 'Be short of gold coins');
|
||||
return false;
|
||||
}
|
||||
User::update(['gold'=>$user['gold']-$mint]);
|
||||
$chipDto = Chip::toDto($chip);
|
||||
{
|
||||
//埋点
|
||||
$event = [
|
||||
'name' => LogService::CHIP_DEMOUNT,
|
||||
'val' => $mint
|
||||
];
|
||||
$chipDto['level'] = $chipDto['chip_grade'];
|
||||
LogService::consumeCEG($event,$chipDto,$chipDto);
|
||||
}
|
||||
}
|
||||
$where = ['inlay_state'=>0,'strength'=>$chip['strength_max']];
|
||||
Hero::update($unique_id,$fieldsKv);
|
||||
Chip::update($token_id,$where);
|
||||
return true;
|
||||
}
|
||||
|
||||
private function _doDemountGun($unique_id,$token_id){
|
||||
$chip = Chip::getChipByTokenId($token_id);
|
||||
$gun = Gun::find($unique_id);
|
||||
if (! $chip || ! $gun){
|
||||
$this->_rspErr(1, 'Not enough chip or gun');
|
||||
return false;
|
||||
}
|
||||
$chipIdsArr = explode('|',$gun['chip_ids']);
|
||||
$k = array_search($chip['idx'],$chipIdsArr);
|
||||
unset($chipIdsArr[$k]);
|
||||
$fieldsKv = ['chip_ids'=>implode('|',$chipIdsArr)];
|
||||
|
||||
$tili = $chip['strength_max']-$chip['strength'];
|
||||
if ($tili){
|
||||
$mint = \services\FormulaService::Chip_Demount_Mint($tili);
|
||||
$userObj = new User();
|
||||
$user=$userObj->find(myself()->_getAccountId());
|
||||
if ($mint>$user['gold']){
|
||||
$this->_rspErr(2, 'Be short of gold coins');
|
||||
return false;
|
||||
}
|
||||
User::update(['gold'=>$user['gold']-$mint]);
|
||||
$chipDto = Chip::toDto($chip);
|
||||
{
|
||||
//埋点
|
||||
$event = [
|
||||
'name' => LogService::CHIP_DEMOUNT,
|
||||
'val' => $mint
|
||||
];
|
||||
$chipDto['level'] = $chipDto['chip_grade'];
|
||||
LogService::consumeCEG($event,$chipDto,$chipDto);
|
||||
}
|
||||
}
|
||||
$where = ['inlay_state'=>0,'strength'=>$chip['strength_max']];
|
||||
Gun::update($unique_id,$fieldsKv);
|
||||
Chip::update($token_id,$where);
|
||||
return true;
|
||||
}
|
||||
|
||||
private function _inLayNewAttr($hero_id){
|
||||
$heroDb = Hero::find($hero_id);
|
||||
$hero = Hero::toDto($heroDb);
|
||||
$chipAttr = [];
|
||||
if (! $hero['chip_ids'] ){
|
||||
return $hero;
|
||||
}
|
||||
if ($hero['chip_ids'] && !strpos($hero['chip_ids'], '|')){
|
||||
$chip =Chip::toDto(Chip::getChipByIdx($hero['chip_ids']));
|
||||
foreach ($chip['rand_attr'] as $val){
|
||||
array_push($chipAttr,$val);
|
||||
}
|
||||
}
|
||||
if ($hero['chip_ids'] && strpos($hero['chip_ids'], '|')){
|
||||
$chipIdsArr = explode('|',$hero['chip_ids']);
|
||||
foreach ($chipIdsArr as $val){
|
||||
$chip = Chip::toDto(Chip::getChipByIdx($val));
|
||||
foreach ($chip['rand_attr'] as $v){
|
||||
array_push($chipAttr,$v);
|
||||
}
|
||||
}
|
||||
}
|
||||
$item = [];
|
||||
foreach ($chipAttr as $k=>$v){
|
||||
if (!isset($item[$v['attr_id']])){
|
||||
$item[$v['attr_id']] = $v;
|
||||
}else{
|
||||
$item[$v['attr_id']]['val']+= $v['val'];
|
||||
}
|
||||
}
|
||||
$hero['attr_chip'] = $item;//芯片属性
|
||||
return $hero;
|
||||
}
|
||||
|
||||
private function _inLayNewAttrGun($gun_id){
|
||||
$gunDb = Gun::find($gun_id);
|
||||
$gun = Gun::toDto($gunDb);
|
||||
$chipAttr = [];
|
||||
if (! $gun['chip_ids'] ){
|
||||
return $gun;
|
||||
}
|
||||
if ($gun['chip_ids'] && !strpos($gun['chip_ids'], '|')){
|
||||
$chip =Chip::toDto(Chip::getChipByIdx($gun['chip_ids']));
|
||||
foreach ($chip['rand_attr'] as $val){
|
||||
array_push($chipAttr,$val);
|
||||
}
|
||||
}
|
||||
if ($gun['chip_ids'] && strpos($gun['chip_ids'], '|')){
|
||||
$chipIdsArr = explode('|',$gun['chip_ids']);
|
||||
foreach ($chipIdsArr as $val){
|
||||
$chip = Chip::toDto(Chip::getChipByIdx($val));
|
||||
foreach ($chip['rand_attr'] as $v){
|
||||
array_push($chipAttr,$v);
|
||||
}
|
||||
}
|
||||
}
|
||||
$item = [];
|
||||
foreach ($chipAttr as $k=>$v){
|
||||
if (!isset($item[$v['attr_id']])){
|
||||
$item[$v['attr_id']] = $v;
|
||||
}else{
|
||||
$item[$v['attr_id']]['val']+= $v['val'];
|
||||
}
|
||||
}
|
||||
$gun['attr_chip'] = $item;//芯片属性
|
||||
return $gun;
|
||||
}
|
||||
|
||||
private function _chipCore($unique_id,$type){
|
||||
$chipCore = [];
|
||||
if ($type==1){
|
||||
$hero = Hero::find($unique_id);
|
||||
}else{
|
||||
$hero = Gun::find($unique_id);
|
||||
}
|
||||
|
||||
if ($hero['chip_ids'] && strpos($hero['chip_ids'], '|')){
|
||||
$chipIdsArr = explode('|',$hero['chip_ids']);
|
||||
if (count($chipIdsArr) == 4){
|
||||
$min = 15;
|
||||
foreach ($chipIdsArr as $val){
|
||||
$chip = Chip::getChipByIdx($val);
|
||||
if ($chip['chip_grade']<$min){
|
||||
$min = $chip['chip_grade'];
|
||||
}
|
||||
}
|
||||
$chipCoreList = getMetaTable('chipCore@chipCore.php');
|
||||
foreach ($chipCoreList as $val){
|
||||
if ($val['chip_core_type']==$type && $val['chip_core_lv']<=$min){
|
||||
array_push($chipCore,$val);
|
||||
}
|
||||
}
|
||||
return $chipCore;
|
||||
}else{
|
||||
return [];
|
||||
}
|
||||
}else{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
private function _getHignGradeLimit($data,$limit){
|
||||
$len = count($data);
|
||||
if ($len<=1 || $len<=$limit){
|
||||
return $data;
|
||||
}
|
||||
for ($i = 0; $i < $len - 1; $i++) {
|
||||
for ($j = $i + 1; $j < $len; $j++) {
|
||||
if ($data[$i]['chip_grade'] < $data[$j]['chip_grade']) {
|
||||
$tmp = $data[$i];
|
||||
$data[$i] = $data[$j];
|
||||
$data[$j] = $tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
return array_slice($data,0,$limit);
|
||||
}
|
||||
|
||||
private function _orderByChip($data,$order){
|
||||
$len = count($data);
|
||||
if ($len<=1){
|
||||
return $data;
|
||||
}
|
||||
if ($order == 'desc'){
|
||||
for ($i = 0; $i < $len - 1; $i++) {
|
||||
for ($j = $i + 1; $j < $len; $j++) {
|
||||
if ($data[$i]['chip_grade'] < $data[$j]['chip_grade']) {
|
||||
$tmp = $data[$i];
|
||||
$data[$i] = $data[$j];
|
||||
$data[$j] = $tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{
|
||||
for ($i = 0; $i < $len - 1; $i++) {
|
||||
for ($j = $i + 1; $j < $len; $j++) {
|
||||
if ($data[$i]['chip_grade'] > $data[$j]['chip_grade']) {
|
||||
$tmp = $data[$i];
|
||||
$data[$i] = $data[$j];
|
||||
$data[$j] = $tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
private function _upgraded($chip){
|
||||
$new_grade = $chip['chip_grade']+1;
|
||||
if ($new_grade == 3 || $new_grade == 5){
|
||||
Chip::updateRandAttr(myself()->_getAccountId(),$chip);
|
||||
}
|
||||
|
||||
$lucky = ltrim(\services\FormulaService::getChipLuckyValue($new_grade),'-') ;
|
||||
if ($new_grade>=5){
|
||||
$where = ['lucky_temporary'=>$lucky, 'chip_grade'=>$new_grade,'supper_state'=>1,'modifytime' => $this->_getNowTime()];
|
||||
}else{
|
||||
$where = ['lucky_temporary'=>$lucky, 'chip_grade'=>$new_grade,'modifytime' => $this->_getNowTime()];
|
||||
}
|
||||
Chip::update($chip['token_id'],$where);
|
||||
}
|
||||
|
||||
private function _bestFun($upgrade_cost,$chip_param,$chip_param_out){
|
||||
$cost = 0;
|
||||
foreach ($chip_param as $v){
|
||||
$cost += $v['cost'];
|
||||
};
|
||||
if ($cost>$upgrade_cost){
|
||||
return $chip_param;
|
||||
}else{
|
||||
array_shift($chip_param);
|
||||
array_push($chip_param,array_shift($chip_param_out));
|
||||
return $this->_bestFun($upgrade_cost,$chip_param,$chip_param_out);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
183
webapp/controller/ChipPageController.class.php
Normal file
183
webapp/controller/ChipPageController.class.php
Normal file
@ -0,0 +1,183 @@
|
||||
<?php
|
||||
require_once('models/Chip.php');
|
||||
require_once('models/ChipPage.php');
|
||||
require_once('services/ChipPageService.php');
|
||||
|
||||
use models\Chip;
|
||||
use models\ChipPage;
|
||||
use services\ChipPageService;
|
||||
use phpcommon\SqlHelper;
|
||||
|
||||
class ChipPageController extends BaseAuthedController
|
||||
{
|
||||
public function chipPageList(){
|
||||
$obj = new services\ChipPageService();
|
||||
$obj->initChipPage();
|
||||
|
||||
$list =array();
|
||||
ChipPage::getList(function ($row) use(&$list){
|
||||
array_push($list, ChipPage::toDto($row));
|
||||
});
|
||||
$this->_rspData(array(
|
||||
'data' => $list,
|
||||
));
|
||||
}
|
||||
|
||||
public function showPageInfo(){
|
||||
$page = getReqVal('page',1);
|
||||
$chipPageDb = ChipPage::find($page);
|
||||
if (!$chipPageDb){
|
||||
$this->_rspErr(1,'page parameter error');
|
||||
return ;
|
||||
}
|
||||
$chipPageDto = ChipPage::toDtoInfo($chipPageDb);
|
||||
$this->_rspData(array(
|
||||
'data' => $chipPageDto,
|
||||
));
|
||||
}
|
||||
|
||||
public function addChipPage(){
|
||||
ChipPage::addChipPage();
|
||||
$this->_rspOk();
|
||||
}
|
||||
|
||||
public function rename(){
|
||||
$page = getReqVal('page',0);
|
||||
$chipPageDb = ChipPage::find($page);
|
||||
if (! $chipPageDb ){
|
||||
$this->_rspErr(1,'page parameter error');
|
||||
return ;
|
||||
}
|
||||
$name = getReqVal('name','');
|
||||
if (mb_strlen($name) < 3) {
|
||||
$this->_rspErr(1,'Parameter error name length must not be less than 3');
|
||||
return;
|
||||
}
|
||||
if (mb_strlen($name, 'utf8') > 12) {
|
||||
$this->_rspErr(1,'Parameter error name length must not be greater than 12');
|
||||
return;
|
||||
}
|
||||
ChipPage::update($page,array(
|
||||
'page_name' => $name
|
||||
));
|
||||
$chipPageDto = ChipPage::toDtoInfo($chipPageDb);
|
||||
$this->_rspData(array(
|
||||
'data' => $chipPageDto,
|
||||
));
|
||||
}
|
||||
|
||||
public function useChip(){
|
||||
$page = getReqVal('page',0);
|
||||
$slotId = getReqVal('slot_id',0);
|
||||
$uniqueId = getReqVal('unique_id',0);
|
||||
if (!$page || !$slotId || !$uniqueId){
|
||||
$this->_rspErr(1, 'Missing parameter');
|
||||
return ;
|
||||
}
|
||||
$chipPageDb = ChipPage::find($page);
|
||||
if (!$chipPageDb){
|
||||
$this->_rspErr(1,'page parameter error');
|
||||
return ;
|
||||
}
|
||||
if ($slotId > ChipPageService::MAX_CHIP_SLOT_NUM || $slotId < 0 ){
|
||||
$this->_rspErr(1,'No card slot exists');
|
||||
return ;
|
||||
}
|
||||
$data = emptyReplace(json_decode($chipPageDb['data'], true), array());
|
||||
if ( $data[$slotId-1]['state'] != 1){
|
||||
$this->_rspErr(1,'Unlocked state');
|
||||
return ;
|
||||
}
|
||||
$chipDb = Chip::find($uniqueId);
|
||||
if (! $chipDb){
|
||||
$this->_rspErr(1, "You don't have the chip yet");
|
||||
return;
|
||||
}
|
||||
|
||||
if (in_array($page,array_filter(explode("|",$chipDb['inlay_state'])))){
|
||||
$this->_rspErr(1, "The used chip");
|
||||
return;
|
||||
}
|
||||
switch ($slotId%3){
|
||||
case 1 : $type = 1;break;
|
||||
case 2 : $type = 2;break;
|
||||
case 0 : $type = 3;break;
|
||||
default:$type = 0;
|
||||
}
|
||||
|
||||
if ($chipDb['chip_type'] != $type){
|
||||
$this->_rspErr(1, "Type mismatch");
|
||||
return;
|
||||
}
|
||||
if ( $data[$slotId-1]['chip_id'] ){
|
||||
|
||||
Chip::updateInlayState($data[$slotId-1]['chip_id'],$page);
|
||||
}
|
||||
$data[$slotId-1]['chip_id'] = $uniqueId;
|
||||
|
||||
Chip::updateInlayState($uniqueId,$page);
|
||||
ChipPage::update($page,array(
|
||||
'data' => json_encode($data)
|
||||
));
|
||||
$newChipPageDb = ChipPage::find($page);
|
||||
$chipPageDto = ChipPage::toDtoInfo($newChipPageDb);
|
||||
$this->_rspData(array(
|
||||
'data' => $chipPageDto,
|
||||
));
|
||||
}
|
||||
|
||||
public function removeChipOne(){
|
||||
$page = getReqVal('page',0);
|
||||
$slotId = getReqVal('slot_id',0);
|
||||
if (!$page || !$slotId){
|
||||
$this->_rspErr(1, 'Missing parameter');
|
||||
return ;
|
||||
}
|
||||
$chipPageDb = ChipPage::find($page);
|
||||
if (!$chipPageDb){
|
||||
$this->_rspErr(1,'page parameter error');
|
||||
return ;
|
||||
}
|
||||
$data = emptyReplace(json_decode($chipPageDb['data'], true), array());
|
||||
foreach ($data as &$value){
|
||||
if ($value['slot_id'] == $slotId){
|
||||
Chip::updateInlayState($value['chip_id'],$page);
|
||||
$value['chip_id'] = 0;
|
||||
}
|
||||
}
|
||||
ChipPage::update($page,array(
|
||||
'data' => json_encode($data)
|
||||
));
|
||||
$newChipPageDb = ChipPage::find($page);
|
||||
$chipPageDto = ChipPage::toDtoInfo($newChipPageDb);
|
||||
$this->_rspData(array(
|
||||
'data' => $chipPageDto,
|
||||
));
|
||||
}
|
||||
|
||||
public function removeChipAll(){
|
||||
$page = getReqVal('page',0);
|
||||
$chipPageDb = ChipPage::find($page);
|
||||
if (!$chipPageDb){
|
||||
$this->_rspErr(1,'page parameter error');
|
||||
return ;
|
||||
}
|
||||
$data = emptyReplace(json_decode($chipPageDb['data'], true), array());
|
||||
foreach ($data as &$value){
|
||||
if ($value['chip_id']){
|
||||
Chip::updateInlayState($value['chip_id'],$page);
|
||||
$value['chip_id'] = 0;
|
||||
}
|
||||
}
|
||||
ChipPage::update($page,array(
|
||||
'data' => json_encode($data)
|
||||
));
|
||||
$newChipPageDb = ChipPage::find($page);
|
||||
$chipPageDto = ChipPage::toDtoInfo($newChipPageDb);
|
||||
$this->_rspData(array(
|
||||
'data' => $chipPageDto,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
73
webapp/controller/EmojiController.class.php
Normal file
73
webapp/controller/EmojiController.class.php
Normal file
@ -0,0 +1,73 @@
|
||||
<?php
|
||||
require_once('models/Emoji.php');
|
||||
|
||||
use models\Emoji;
|
||||
class EmojiController extends BaseAuthedController
|
||||
{
|
||||
public function getEmojiList(){
|
||||
$list = Emoji::emojiList();
|
||||
$uses = Emoji::getUseEmoji();
|
||||
$data = array();
|
||||
foreach ($list as $val){
|
||||
if(in_array($val,$uses)){
|
||||
array_push($data,
|
||||
array(
|
||||
'item_id'=>$val,
|
||||
'state'=>1,
|
||||
)
|
||||
);
|
||||
}else{
|
||||
array_push($data,
|
||||
array(
|
||||
'item_id'=>$val,
|
||||
'state'=>0,
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
$this->_rspData(array(
|
||||
'data' => $data,
|
||||
'use_emoji' => $uses
|
||||
));
|
||||
}
|
||||
|
||||
public function setEmoji(){
|
||||
$itemId = getReqVal('item_id', '');
|
||||
if(! in_array($itemId,Emoji::emojiList())){
|
||||
$this->_rspErr(1, 'item_id parameter error');
|
||||
return;
|
||||
}
|
||||
$uses = Emoji::getUseEmoji();
|
||||
if(in_array($itemId,$uses)){
|
||||
$this->_rspErr(1, 'The emoji has been used');
|
||||
return;
|
||||
}
|
||||
if(count($uses) >= kMaxEmojiNum){
|
||||
$this->_rspErr(1, 'To maximize');
|
||||
return;
|
||||
}
|
||||
array_push($uses,$itemId);
|
||||
Emoji::updateEmoji( implode('|',$uses) );
|
||||
$this->_rspOk();
|
||||
}
|
||||
|
||||
public function cancel(){
|
||||
$itemId = getReqVal('item_id', '');
|
||||
if(! in_array($itemId,Emoji::emojiList())){
|
||||
$this->_rspErr(1, 'item_id parameter error');
|
||||
return;
|
||||
}
|
||||
$uses = Emoji::getUseEmoji();
|
||||
if(! in_array($itemId,$uses)){
|
||||
$this->_rspErr(1, 'The emoji is not used');
|
||||
return;
|
||||
}
|
||||
foreach ($uses as $k=>$v){
|
||||
if ($itemId == $v){
|
||||
unset($uses[$k]);
|
||||
}
|
||||
}
|
||||
Emoji::updateEmoji(implode('|',$uses));
|
||||
$this->_rspOk();
|
||||
}
|
||||
}
|
@ -11,6 +11,7 @@ require_once('models/User.php');
|
||||
require_once('models/Gun.php');
|
||||
require_once('models/Bag.php');
|
||||
require_once('models/Chip.php');
|
||||
require_once('models/Nft.php');
|
||||
require_once('models/NftUpReceive.php');
|
||||
require_once('models/Transaction.php');
|
||||
|
||||
@ -26,6 +27,7 @@ use models\User;
|
||||
use models\Gun;
|
||||
use models\Bag;
|
||||
use models\Chip;
|
||||
use models\Nft;
|
||||
use models\NftUpReceive;
|
||||
use models\Transaction;
|
||||
use services\LogService;
|
||||
@ -61,6 +63,11 @@ class GunController extends BaseAuthedController {
|
||||
$this->_rspErr(1, "You don't have the gun yet");
|
||||
return;
|
||||
}
|
||||
$gunDb['tags'] = '';
|
||||
if ($gunDb['token_id']){
|
||||
$nftDb = Nft::getNft($gunDb['token_id']);
|
||||
$gunDb['tags'] = $nftDb['tags'];
|
||||
}
|
||||
|
||||
$gun = Gun::toDto($gunDb);
|
||||
$this->_rspData(array(
|
||||
@ -255,19 +262,29 @@ class GunController extends BaseAuthedController {
|
||||
return;
|
||||
}
|
||||
|
||||
$costItems = array(
|
||||
array(
|
||||
'item_id' => V_ITEM_GOLD,
|
||||
'item_num' => $nextLevelMeta['gold']
|
||||
),
|
||||
array(
|
||||
'item_id' => V_ITEM_DIAMOND,
|
||||
'item_num' => $nextLevelMeta['diamond']
|
||||
),
|
||||
);
|
||||
|
||||
$newGunDb = $gunDb;
|
||||
$newGunDb['gun_lv'] += 1;
|
||||
$attrs = mt\GunLevel::addRandAttrNew($gunDb,0);
|
||||
$newGunDb['rand_attr'] = json_encode($attrs);
|
||||
$cost['CEG'] = \services\FormulaService::Weapon_Upgrade_CEG_Expend( $newGunDb['gun_lv']);
|
||||
$cost['CEC'] = \services\FormulaService::Weapon_Upgrade_CEC_Expend( $newGunDb['gun_lv']);
|
||||
|
||||
|
||||
$gunDto = Gun::toDto($gunDb);
|
||||
$newGunDto = Gun::toDto($newGunDb);
|
||||
$this->_rspData(array(
|
||||
'old_gun' => $gunDto,
|
||||
'new_gun' => $newGunDto,
|
||||
'cost' => $cost
|
||||
'cost' => $costItems
|
||||
));
|
||||
}
|
||||
|
||||
@ -816,4 +833,79 @@ class GunController extends BaseAuthedController {
|
||||
));
|
||||
}
|
||||
|
||||
public function upgradeLv(){
|
||||
$gunUniId = getReqVal('gun_uniid', 0);
|
||||
$costGunUniId = getReqVal('cost_gun_uniid', 0);
|
||||
$gunDb = Gun::find($gunUniId);
|
||||
$oldGun = Gun::toDto($gunDb);
|
||||
$costGunDb = Gun::findEx($costGunUniId);
|
||||
if (!$gunDb || !$costGunDb) {
|
||||
$this->_rspErr(100, 'param error or null');
|
||||
return;
|
||||
}
|
||||
if ($costGunDb['token_id']){
|
||||
$this->_rspErr(100, 'NFT cannot be a material');
|
||||
return;
|
||||
}
|
||||
if ($costGunDb['state'] == Gun::FREE_STATE){
|
||||
$this->_rspErr(100, 'Unable to use free gun');
|
||||
return;
|
||||
}
|
||||
if ($gunDb['gun_lv'] != $costGunDb['gun_lv']){
|
||||
$this->_rspErr(100, 'You need the same level to do it');
|
||||
return;
|
||||
}
|
||||
$itemMeta = mt\Item::get($gunDb['gun_id']);
|
||||
if (!$itemMeta) {
|
||||
$this->_rspErr(100, 'server internal error');
|
||||
return;
|
||||
}
|
||||
|
||||
$nextLevelMeta = mt\GunLevel::getByLevel($gunDb['gun_lv'] +1);
|
||||
if (!$nextLevelMeta) {
|
||||
$this->_rspErr(5, "It's already the highest level");
|
||||
return;
|
||||
}
|
||||
|
||||
//升级所需消耗
|
||||
$costItems = array(
|
||||
array(
|
||||
'item_id' => V_ITEM_GOLD,
|
||||
'item_num' => $nextLevelMeta['gold']
|
||||
),
|
||||
array(
|
||||
'item_id' => V_ITEM_DIAMOND,
|
||||
'item_num' => $nextLevelMeta['diamond']
|
||||
),
|
||||
);
|
||||
$lackItem = null;
|
||||
if (!$this->_hasEnoughItems($costItems, $lackItem)) {
|
||||
$this->_rspErr(3, $this->_getLackItemErrMsg($lackItem));
|
||||
return;
|
||||
}
|
||||
$this->_decItems($costItems);
|
||||
|
||||
$attrs = mt\GunLevel::addRandAttrNew($gunDb,1);
|
||||
Gun::update($gunUniId,
|
||||
array(
|
||||
'gun_lv' => $gunDb['gun_lv'] + 1,
|
||||
'state' => Gun::GETED_STATE,
|
||||
'rand_attr' => json_encode($attrs),
|
||||
));
|
||||
Gun::update($costGunUniId,
|
||||
array(
|
||||
'account_id' => myself()->_getAccountId() . '!!!',
|
||||
)
|
||||
);
|
||||
$newGun = Gun::toDto(Gun::find($gunUniId));
|
||||
$propertyChgService = new services\PropertyChgService();
|
||||
$propertyChgService->addGunChg();
|
||||
$propertyChgService->addUserChg();
|
||||
$this->_rspData(array(
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
'old_gun' => $oldGun,
|
||||
'new_gun' => $newGun,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -14,9 +14,11 @@ require_once('mt/Skill.php');
|
||||
require_once('models/Hero.php');
|
||||
require_once('models/Bag.php');
|
||||
require_once('models/HeroSkin.php');
|
||||
require_once('models/Chip.php');
|
||||
require_once('models/Nft.php');
|
||||
require_once('models/NftUpReceive.php');
|
||||
require_once('models/Transaction.php');
|
||||
require_once('models/ChipPage.php');
|
||||
require_once('models/Gun.php');
|
||||
|
||||
require_once('services/AwardService.php');
|
||||
require_once('services/PropertyChgService.php');
|
||||
@ -29,7 +31,9 @@ use phpcommon\SqlHelper;
|
||||
use models\Hero;
|
||||
use models\Bag;
|
||||
use models\HeroSkin;
|
||||
use models\Chip;
|
||||
use models\ChipPage;
|
||||
use models\Gun;
|
||||
use models\Nft;
|
||||
use models\NftUpReceive;
|
||||
use models\Transaction;
|
||||
use services\LogService;
|
||||
@ -59,6 +63,11 @@ class HeroController extends BaseAuthedController {
|
||||
$this->_rspErr(1, "You don't have the hero yet");
|
||||
return;
|
||||
}
|
||||
$heroDb['tags'] = '';
|
||||
if ($heroDb['token_id']){
|
||||
$nftDb = Nft::getNft($heroDb['token_id']);
|
||||
$heroDb['tags'] = $nftDb['tags'];
|
||||
}
|
||||
|
||||
$hero = Hero::toDto($heroDb);
|
||||
$this->_rspData(array(
|
||||
@ -66,6 +75,312 @@ class HeroController extends BaseAuthedController {
|
||||
));
|
||||
}
|
||||
|
||||
public function skinList()
|
||||
{
|
||||
$heroId = getReqVal('hero_id',0);
|
||||
if (!$heroId){
|
||||
$this->_rspErr(1, "param null");
|
||||
return;
|
||||
}
|
||||
$itemMeta = \mt\Item::get($heroId);
|
||||
if (!$itemMeta || $itemMeta['type']!=\mt\Item::HERO_TYPE){
|
||||
$this->_rspErr(1, "param error");
|
||||
return;
|
||||
}
|
||||
$skinList = array();
|
||||
$skinMeta = \mt\Item::getMetaListByType(\mt\Item::HERO_SKIN_TYPE);
|
||||
if ($skinMeta){
|
||||
foreach ($skinMeta as $value){
|
||||
if ($value['playerid'] == $heroId){
|
||||
array_push($skinList,HeroSkin::toDto($value));
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->_rspData(array(
|
||||
'skin_list' => $skinList
|
||||
));
|
||||
}
|
||||
|
||||
public function takeonSkin()
|
||||
{
|
||||
$heroUniId = getReqVal('hero_uniid', 0);
|
||||
$skinId = getReqVal('skin_id', 0);
|
||||
$heroDb = Hero::find($heroUniId);
|
||||
$heroSkinDb = HeroSkin::find($skinId);
|
||||
if (!$heroDb) {
|
||||
$this->_rspErr(1, "You don't have the hero yet");
|
||||
return;
|
||||
}
|
||||
if (!$heroSkinDb) {
|
||||
$this->_rspErr(2, "You don't have the skin yet");
|
||||
return;
|
||||
}
|
||||
HeroSkin::takeonSkin( $skinId,$heroDb['hero_id']);
|
||||
$this->_rspOk();
|
||||
}
|
||||
|
||||
public function upgradeLevelPreview(){
|
||||
$heroUniId = getReqVal('hero_uniid', 0);
|
||||
$heroDb = Hero::find($heroUniId);
|
||||
if (!$heroDb) {
|
||||
$this->_rspErr(1, 'hero does not exist');
|
||||
return;
|
||||
}
|
||||
$heroMeta = mt\Hero::get($heroDb['hero_id']);
|
||||
if (!$heroMeta) {
|
||||
$this->_rspErr(100, 'server internal error');
|
||||
return;
|
||||
}
|
||||
$nextLevelMeta = mt\HeroLevelAttr::getByLevel($heroDb['hero_lv'] + 1);
|
||||
if (!$nextLevelMeta) {
|
||||
$this->_rspErr(5, "It's already the highest level");
|
||||
return;
|
||||
}
|
||||
|
||||
$meta = mt\HeroLevel::get($heroDb['hero_lv'] + 1);
|
||||
$costItems = array(
|
||||
array(
|
||||
'item_id' => V_ITEM_GOLD,
|
||||
'item_num' => $meta['gold']
|
||||
),
|
||||
array(
|
||||
'item_id' => V_ITEM_DIAMOND,
|
||||
'item_num' => $meta['diamond']
|
||||
)
|
||||
);
|
||||
|
||||
$newHeroDb = $heroDb;
|
||||
$newHeroDb['hero_lv'] += 1;
|
||||
$attrs = mt\HeroLevelAttr::addRandAttrNew($heroDb,0);
|
||||
$newHeroDb['rand_attr'] = json_encode($attrs);
|
||||
|
||||
$heroDto = Hero::toDto($heroDb);
|
||||
$newHeroDto = Hero::toDto($newHeroDb);
|
||||
$this->_rspData(array(
|
||||
|
||||
'old_hero' => $heroDto,
|
||||
'new_hero' => $newHeroDto,
|
||||
'cost' => $costItems
|
||||
));
|
||||
}
|
||||
|
||||
public function upgradeLv()
|
||||
{
|
||||
$heroUniId = getReqVal('hero_uniid', 0);
|
||||
$costHeroUniId = getReqVal('cost_hero_uniid', 0);
|
||||
$heroDb = Hero::find($heroUniId);
|
||||
$oldHero = Hero::toDto($heroDb);
|
||||
$costHeroDb = Hero::findEx($costHeroUniId);
|
||||
if (!$heroDb) {
|
||||
$this->_rspErr(100, 'param error or null');
|
||||
return;
|
||||
}
|
||||
if ($heroDb['hero_lv'] == Hero::LV_1 ||
|
||||
$heroDb['hero_lv'] == Hero::LV_2 ||
|
||||
$heroDb['hero_lv'] == Hero::LV_3 ){
|
||||
if (! $costHeroDb){
|
||||
$this->_rspErr(100, 'material param error or null');
|
||||
return;
|
||||
}
|
||||
if ($costHeroDb['token_id']){
|
||||
$this->_rspErr(100, 'NFT cannot be a material');
|
||||
return;
|
||||
}
|
||||
if ($costHeroDb['state'] == Hero::FREE_STATE){
|
||||
$this->_rspErr(100, 'Unable to use free hero');
|
||||
return;
|
||||
}
|
||||
switch ($heroDb['hero_lv']){
|
||||
case Hero::LV_1:{
|
||||
if ($heroDb['hero_lv'] < $costHeroDb['hero_lv']){
|
||||
$this->_rspErr(100, 'Grade discrepancy');
|
||||
return;
|
||||
}
|
||||
};break;
|
||||
case Hero::LV_2:{
|
||||
if ($heroDb['hero_lv'] < $costHeroDb['hero_lv'] && $costHeroDb['hero_lv'] <= Hero::LV_1){
|
||||
$this->_rspErr(100, 'Grade discrepancy');
|
||||
return;
|
||||
}
|
||||
};break;
|
||||
case Hero::LV_3:{
|
||||
if ($heroDb['hero_lv'] < $costHeroDb['hero_lv'] && $costHeroDb['hero_lv'] <= Hero::LV_2){
|
||||
$this->_rspErr(100, 'Grade discrepancy');
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$heroMeta = mt\Hero::get($heroDb['hero_id']);
|
||||
if (!$heroMeta) {
|
||||
$this->_rspErr(100, 'server internal error');
|
||||
return;
|
||||
}
|
||||
$nextLevelMeta = mt\HeroLevelAttr::getByLevel($heroDb['hero_lv'] + 1);
|
||||
if (!$nextLevelMeta) {
|
||||
$this->_rspErr(5, "It's already the highest level");
|
||||
return;
|
||||
}
|
||||
|
||||
//升级所需消耗
|
||||
$meta = mt\HeroLevel::get($heroDb['hero_lv'] + 1);
|
||||
$costItems = array(
|
||||
array(
|
||||
'item_id' => V_ITEM_GOLD,
|
||||
'item_num' => $meta['gold']
|
||||
),
|
||||
array(
|
||||
'item_id' => V_ITEM_DIAMOND,
|
||||
'item_num' => $meta['diamond']
|
||||
)
|
||||
);
|
||||
$lackItem = null;
|
||||
if (!$this->_hasEnoughItems($costItems, $lackItem)) {
|
||||
$this->_rspErr(3, $this->_getLackItemErrMsg($lackItem));
|
||||
return;
|
||||
}
|
||||
$this->_decItems($costItems);
|
||||
|
||||
$attrs = mt\HeroLevelAttr::addRandAttrNew($heroDb,1);
|
||||
Hero::update($heroUniId, array(
|
||||
'hero_lv' => $heroDb['hero_lv'] + 1,
|
||||
'rand_attr' => json_encode($attrs),
|
||||
'state' => Hero::GETED_STATE,
|
||||
));
|
||||
if ($costHeroDb){
|
||||
Hero::update($costHeroUniId, array(
|
||||
'account_id' => myself()->_getAccountId() . '!!!',
|
||||
));
|
||||
}
|
||||
if ($heroDb['hero_lv'] + 1 > myself()->_getV(TN_HERO_MAX_LEVEL, 0)) {
|
||||
myself()->_setV(TN_HERO_MAX_LEVEL, 0, $heroDb['hero_lv'] + 1);
|
||||
}
|
||||
$newHero = Hero::toDto(Hero::find($heroUniId));
|
||||
$propertyChgService = new services\PropertyChgService();
|
||||
$propertyChgService->addHeroChg();
|
||||
$propertyChgService->addUserChg();
|
||||
$this->_rspData(array(
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
'old_hero' => $oldHero,
|
||||
'new_hero' => $newHero,
|
||||
));
|
||||
}
|
||||
|
||||
public function presetHero(){
|
||||
$heroId = getReqVal('hero_uid',0);
|
||||
$heroDb = Hero::find($heroId);
|
||||
if (! $heroDb){
|
||||
$this->_rspErr(1, "You don't have the hero yet");
|
||||
return;
|
||||
}
|
||||
$row = SqlHelper::ormSelectOne(
|
||||
$this->_getSelfMysql(),
|
||||
't_hero_preset',
|
||||
array(
|
||||
'account_id' => $this->_getAccountId(),
|
||||
'hero_uid' => $heroId,
|
||||
)
|
||||
);
|
||||
if ($row){
|
||||
|
||||
$data = array(
|
||||
'skill_id' => $row['skill_id'],
|
||||
'weapon_uid1' => $row['weapon_uid1'],
|
||||
'weapon_uid2' => $row['weapon_uid2'],
|
||||
'chip_page' => $row['chip_page'],
|
||||
'gun_id1'=>0,
|
||||
'gun_id2'=>0,
|
||||
);
|
||||
$gunDb1 = Gun::find($row['weapon_uid1']);
|
||||
$gunDb2 = Gun::find($row['weapon_uid2']);
|
||||
if ($gunDb1){
|
||||
$data['gun_id1'] = $gunDb1['gun_id'];
|
||||
}
|
||||
if ($gunDb1){
|
||||
$data['gun_id2'] = $gunDb2['gun_id'];
|
||||
}
|
||||
}else{
|
||||
$data = array(
|
||||
'skill_id' => \mt\Skill::DEFAULT_SKILL,
|
||||
'weapon_uid1' => 0,
|
||||
'weapon_uid2' => 0,
|
||||
'gun_id1'=>0,
|
||||
'gun_id2'=>0,
|
||||
'chip_page' => 1,
|
||||
);
|
||||
}
|
||||
$this->_rspData(array(
|
||||
'data' => $data,
|
||||
));
|
||||
}
|
||||
|
||||
public function applyHero(){
|
||||
$heroId = getReqVal('hero_uid',0);
|
||||
$chipPageId = getReqVal('chip_page',0);
|
||||
$weaponUid1 = getReqVal('weapon_uid1',0);
|
||||
$weaponUid2 = getReqVal('weapon_uid2',0);
|
||||
$skillId = getReqVal('skill_id',0);
|
||||
$heroDb = Hero::find($heroId);
|
||||
if (! $heroDb){
|
||||
$this->_rspErr(1, "You don't have the hero yet");
|
||||
return;
|
||||
}
|
||||
$chipPageDb = ChipPage::find($chipPageId);
|
||||
if (! $chipPageDb){
|
||||
$this->_rspErr(1, "You don't have the chip page");
|
||||
return;
|
||||
}
|
||||
if ($weaponUid1){
|
||||
$gunDb1 = Gun::find($weaponUid1);
|
||||
if (!$gunDb1){
|
||||
$this->_rspErr(1, "You don't have the gun1 yet");
|
||||
return;
|
||||
}
|
||||
}
|
||||
if ($weaponUid2){
|
||||
$gunDb2 = Gun::find($weaponUid2);
|
||||
if (!$gunDb2){
|
||||
$this->_rspErr(1, "You don't have the gun2 yet");
|
||||
return;
|
||||
}
|
||||
}
|
||||
$skillMeta = \mt\Skill::get($skillId);
|
||||
if (! $skillMeta){
|
||||
$this->_rspErr(1,'skill_id parameter error');
|
||||
return ;
|
||||
}
|
||||
SqlHelper::upsert
|
||||
($this->_getSelfMysql(),
|
||||
't_hero_preset',
|
||||
array(
|
||||
'account_id' => $this->_getAccountId(),
|
||||
'hero_uid' => $heroId,
|
||||
),
|
||||
array(
|
||||
'skill_id' => $skillId,
|
||||
'weapon_uid1' => $weaponUid1,
|
||||
'weapon_uid2' => $weaponUid2,
|
||||
'chip_page' => $chipPageId,
|
||||
'modifytime' => $this->_getNowTime(),
|
||||
),
|
||||
array(
|
||||
'account_id' => $this->_getAccountId(),
|
||||
'hero_uid' => $heroId,
|
||||
'skill_id' => $skillId,
|
||||
'weapon_uid1' => $weaponUid1,
|
||||
'weapon_uid2' => $weaponUid2,
|
||||
'chip_page' => $chipPageId,
|
||||
'createtime' => $this->_getNowTime(),
|
||||
'modifytime' => $this->_getNowTime(),
|
||||
|
||||
)
|
||||
);
|
||||
$this->_rspOk();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public function upgradeSkillCommon(){
|
||||
$heroUniId = getReqVal('hero_uniid', 0);
|
||||
$skillIndex = getReqVal('skill_index', 0);
|
||||
@ -148,42 +463,6 @@ class HeroController extends BaseAuthedController {
|
||||
));
|
||||
}
|
||||
|
||||
public function skinList()
|
||||
{
|
||||
$skinList = array();
|
||||
SqlHelper::ormSelect(
|
||||
$this->_getSelfMysql(),
|
||||
't_hero_skin',
|
||||
array(
|
||||
'account_id' => $this->_getAccountId()
|
||||
),
|
||||
function ($row) use(&$skinList) {
|
||||
array_push($skinList, HeroSkin::toDto($row));
|
||||
}
|
||||
);
|
||||
$this->_rspData(array(
|
||||
'skin_list' => $skinList
|
||||
));
|
||||
}
|
||||
|
||||
public function takeonSkin()
|
||||
{
|
||||
$heroUniId = getReqVal('hero_uniid', 0);
|
||||
$skinId = getReqVal('skin_id', 0);
|
||||
$heroDb = Hero::find($heroUniId);
|
||||
$heroSkinDb = HeroSkin::find($skinId);
|
||||
if (!$heroDb) {
|
||||
$this->_rspErr(1, "You don't have the hero yet");
|
||||
return;
|
||||
}
|
||||
if (!$heroSkinDb) {
|
||||
$this->_rspErr(2, "You don't have the skin yet");
|
||||
return;
|
||||
}
|
||||
Hero::takeonSkin($heroUniId, $skinId);
|
||||
$this->_rspOk();
|
||||
}
|
||||
|
||||
public function getUpgradeLevelList()
|
||||
{
|
||||
$infos = array();
|
||||
@ -228,9 +507,9 @@ class HeroController extends BaseAuthedController {
|
||||
// $this->_rspData(array(
|
||||
// 'infos' => $infos
|
||||
// ));
|
||||
$list = NftUpReceive::all(myself()->_getAccountId(),1);
|
||||
$infos = array();
|
||||
foreach ($list as $value){
|
||||
$list = NftUpReceive::all(myself()->_getAccountId(),1);
|
||||
$infos = array();
|
||||
foreach ($list as $value){
|
||||
if ($this->_getNowTime() - $value['createtime'] < 24*3600 && !$value['from_data'] || $value['from_data'] ){
|
||||
$hero = Hero::findByTokenId2($value['token_id1']);
|
||||
$costHero = Hero::findByTokenId2($value['token_id2']);
|
||||
@ -254,7 +533,7 @@ class HeroController extends BaseAuthedController {
|
||||
);
|
||||
array_push($infos,$info);
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->_rspData(array(
|
||||
'infos' => $infos
|
||||
));
|
||||
@ -279,40 +558,40 @@ class HeroController extends BaseAuthedController {
|
||||
$oldHero = $heroDto;
|
||||
$newHero = $heroDto;
|
||||
switch ($type) {
|
||||
case 1:
|
||||
{
|
||||
$idx = 0;
|
||||
$found = false;
|
||||
for ($i = 0; $i < kMaxHeroUpLevelNum; ++$i) {
|
||||
$upHeroUniId = $this->_getV(TN_HERO_LEVEL_UP, $i);
|
||||
if ($upHeroUniId == $heroUniId) {
|
||||
$idx = $i;
|
||||
$found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
$idx = 0;
|
||||
$found = false;
|
||||
for ($i = 0; $i < kMaxHeroUpLevelNum; ++$i) {
|
||||
$upHeroUniId = $this->_getV(TN_HERO_LEVEL_UP, $i);
|
||||
if ($upHeroUniId == $heroUniId) {
|
||||
$idx = $i;
|
||||
$found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$found) {
|
||||
$this->_rspErr(1, 'hero does not exist2');
|
||||
return;
|
||||
}
|
||||
$this->_setV(TN_HERO_LEVEL_UP, $idx, 0);
|
||||
$propertyChgService = new services\PropertyChgService();
|
||||
$propertyChgService->addHeroChg();
|
||||
$propertyChgService->addBagChg();
|
||||
$propertyChgService->addUserChg();
|
||||
$nextLevelMeta = null;
|
||||
$nextLevelMeta = mt\HeroLevelAttr::getByLevel($heroDb['hero_lv'] + 1);
|
||||
if ($nextLevelMeta) {
|
||||
$attrs = mt\HeroLevelAttr::addRandAttrNew($heroDb,1);
|
||||
$where = array(
|
||||
'hero_lv' => $heroDb['hero_lv'] + 1,
|
||||
'rand_attr' => json_encode($attrs),
|
||||
'lock_type' => 0,
|
||||
'unlock_time' => 0,
|
||||
'skill_points' => $heroDb['skill_points']+$nextLevelMeta['skill_point']
|
||||
);
|
||||
//免费英雄到底15级后生成NFT
|
||||
if (!$found) {
|
||||
$this->_rspErr(1, 'hero does not exist2');
|
||||
return;
|
||||
}
|
||||
$this->_setV(TN_HERO_LEVEL_UP, $idx, 0);
|
||||
$propertyChgService = new services\PropertyChgService();
|
||||
$propertyChgService->addHeroChg();
|
||||
$propertyChgService->addBagChg();
|
||||
$propertyChgService->addUserChg();
|
||||
$nextLevelMeta = null;
|
||||
$nextLevelMeta = mt\HeroLevelAttr::getByLevel($heroDb['hero_lv'] + 1);
|
||||
if ($nextLevelMeta) {
|
||||
$attrs = mt\HeroLevelAttr::addRandAttrNew($heroDb,1);
|
||||
$where = array(
|
||||
'hero_lv' => $heroDb['hero_lv'] + 1,
|
||||
'rand_attr' => json_encode($attrs),
|
||||
'lock_type' => 0,
|
||||
'unlock_time' => 0,
|
||||
'skill_points' => $heroDb['skill_points']+$nextLevelMeta['skill_point']
|
||||
);
|
||||
//免费英雄到底15级后生成NFT
|
||||
// if ($heroDb['hero_lv'] + 1 == 15 && !$heroDb['token_id']){
|
||||
// $token_id = myself()->_getNowTime();
|
||||
// if(!\services\NftService::addNft($heroDb['hero_id'],$token_id)){
|
||||
@ -327,181 +606,181 @@ class HeroController extends BaseAuthedController {
|
||||
// 'skill_points' => $heroDb['skill_points']+$nextLevelMeta['skill_point']
|
||||
// );
|
||||
// }
|
||||
Hero::update($heroUniId, $where);
|
||||
if ($heroDb['hero_lv'] + 1 > myself()->_getV(TN_HERO_MAX_LEVEL, 0)) {
|
||||
myself()->_setV(TN_HERO_MAX_LEVEL, 0, $heroDb['hero_lv'] + 1);
|
||||
Hero::update($heroUniId, $where);
|
||||
if ($heroDb['hero_lv'] + 1 > myself()->_getV(TN_HERO_MAX_LEVEL, 0)) {
|
||||
myself()->_setV(TN_HERO_MAX_LEVEL, 0, $heroDb['hero_lv'] + 1);
|
||||
}
|
||||
$newHeroDb = Hero::find($heroUniId);
|
||||
$newHero = Hero::toDto($newHeroDb);
|
||||
}
|
||||
$newHeroDb = Hero::find($heroUniId);
|
||||
$newHero = Hero::toDto($newHeroDb);
|
||||
{
|
||||
//埋点
|
||||
$event = [
|
||||
'name' => LogService::HERO_LEVEL_UP,
|
||||
];
|
||||
$oldHero['level'] = $oldHero['hero_lv'];
|
||||
$oldHero['item_id'] = $oldHero['hero_id'];
|
||||
$newHero['level'] = $newHero['hero_lv'];
|
||||
$newHero['item_id'] = $newHero['hero_id'];
|
||||
LogService::LevelUpOrQualityUp($event,$oldHero,$newHero);
|
||||
}
|
||||
$this->_rspData(array(
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
'old_hero' => $oldHero,
|
||||
'new_hero' => $newHero,
|
||||
));
|
||||
}
|
||||
{
|
||||
//埋点
|
||||
$event = [
|
||||
'name' => LogService::HERO_LEVEL_UP,
|
||||
];
|
||||
$oldHero['level'] = $oldHero['hero_lv'];
|
||||
$oldHero['item_id'] = $oldHero['hero_id'];
|
||||
$newHero['level'] = $newHero['hero_lv'];
|
||||
$newHero['item_id'] = $newHero['hero_id'];
|
||||
LogService::LevelUpOrQualityUp($event,$oldHero,$newHero);
|
||||
}
|
||||
$this->_rspData(array(
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
'old_hero' => $oldHero,
|
||||
'new_hero' => $newHero,
|
||||
));
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
{
|
||||
$this->_rspOk();return;
|
||||
$idx = 0;
|
||||
$found = false;
|
||||
for ($i = 0; $i < kMaxHeroUpQualityNum; ++$i) {
|
||||
$upHeroUniId = $this->_getV(TN_HERO_QUALITY_UP, $i);
|
||||
if ($upHeroUniId == $heroUniId) {
|
||||
$idx = $i;
|
||||
$found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$found) {
|
||||
$this->_rspErr(1, 'hero does not exist');
|
||||
return;
|
||||
}
|
||||
$costHeroUniId = $this->_getV(TN_HERO_QUALITY_UP, (int)$idx + 1000);
|
||||
$this->_setV(TN_HERO_QUALITY_UP, $idx, 0);
|
||||
$this->_setV(TN_HERO_QUALITY_UP, (int)$idx + 1000, 0);
|
||||
$propertyChgService = new services\PropertyChgService();
|
||||
$propertyChgService->addHeroChg();
|
||||
$propertyChgService->addBagChg();
|
||||
$propertyChgService->addUserChg();
|
||||
$nextQualityMeta = mt\HeroQuality::getByQuality($heroDb['quality'] + 1);
|
||||
if ($nextQualityMeta) {
|
||||
$costHeroDb = Hero::find($costHeroUniId);
|
||||
if ($costHeroDb['token_id']){
|
||||
break;
|
||||
case 2:
|
||||
{
|
||||
$this->_rspOk();return;
|
||||
$idx = 0;
|
||||
$found = false;
|
||||
for ($i = 0; $i < kMaxHeroUpQualityNum; ++$i) {
|
||||
$upHeroUniId = $this->_getV(TN_HERO_QUALITY_UP, $i);
|
||||
if ($upHeroUniId == $heroUniId) {
|
||||
$idx = $i;
|
||||
$found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$found) {
|
||||
$this->_rspErr(1, 'hero does not exist');
|
||||
return;
|
||||
}
|
||||
$costHeroUniId = $this->_getV(TN_HERO_QUALITY_UP, (int)$idx + 1000);
|
||||
$this->_setV(TN_HERO_QUALITY_UP, $idx, 0);
|
||||
$this->_setV(TN_HERO_QUALITY_UP, (int)$idx + 1000, 0);
|
||||
$propertyChgService = new services\PropertyChgService();
|
||||
$propertyChgService->addHeroChg();
|
||||
$propertyChgService->addBagChg();
|
||||
$propertyChgService->addUserChg();
|
||||
$nextQualityMeta = mt\HeroQuality::getByQuality($heroDb['quality'] + 1);
|
||||
if ($nextQualityMeta) {
|
||||
$costHeroDb = Hero::find($costHeroUniId);
|
||||
if ($costHeroDb['token_id']){
|
||||
// SqlHelper::update(
|
||||
// myself()->_getMarketMysql(),
|
||||
// 't_nft',
|
||||
// ['token_id'=>$costHeroDb['token_id']],
|
||||
// ['deleted'=>1]
|
||||
// );
|
||||
}else{
|
||||
}else{
|
||||
Hero::update($costHeroUniId,
|
||||
array(
|
||||
'account_id' => myself()->_getAccountId() . '!!!',
|
||||
)
|
||||
);
|
||||
}
|
||||
Hero::update($costHeroUniId,
|
||||
array(
|
||||
'account_id' => myself()->_getAccountId() . '!!!',
|
||||
'lock_type' => 0,
|
||||
'unlock_time' => 0,
|
||||
)
|
||||
);
|
||||
}
|
||||
Hero::update($costHeroUniId,
|
||||
array(
|
||||
'lock_type' => 0,
|
||||
'unlock_time' => 0,
|
||||
)
|
||||
);
|
||||
{
|
||||
//埋点
|
||||
$event = [
|
||||
'name' => LogService::HERO_QUALITY_UP_MATERIAL,
|
||||
];
|
||||
$params = array(
|
||||
array(
|
||||
'unique_id'=>$costHeroDb['idx'],
|
||||
'token_id'=>$costHeroDb['token_id'],
|
||||
)
|
||||
);
|
||||
LogService::ConsumableMaterial($event,$params);
|
||||
}
|
||||
$rnd = rand(1, 100);
|
||||
$probability = \services\FormulaService::Hero_Advanced_Probability($heroDb['quality'] + 1)*100;
|
||||
if ($rnd > $probability) {
|
||||
Hero::update($heroUniId,
|
||||
array(
|
||||
'advanced_count' => $heroDb['advanced_count'] + 1,
|
||||
'lock_type' => 0,
|
||||
'unlock_time' => 0,
|
||||
)
|
||||
);
|
||||
$oldHero['advanced_count'] += 1;
|
||||
$newHero['advanced_count'] += 1;
|
||||
{
|
||||
//埋点
|
||||
$event = [
|
||||
'name' => LogService::HERO_QUALITY_UP,
|
||||
'name' => LogService::HERO_QUALITY_UP_MATERIAL,
|
||||
];
|
||||
$oldHero['level'] = $oldHero['hero_lv'];
|
||||
$oldHero['item_id'] = $oldHero['hero_id'];
|
||||
$newHero['level'] = $newHero['hero_lv'];
|
||||
$newHero['item_id'] = $newHero['hero_id'];
|
||||
LogService::LevelUpOrQualityUp($event,$oldHero,$newHero);
|
||||
$params = array(
|
||||
array(
|
||||
'unique_id'=>$costHeroDb['idx'],
|
||||
'token_id'=>$costHeroDb['token_id'],
|
||||
)
|
||||
);
|
||||
LogService::ConsumableMaterial($event,$params);
|
||||
}
|
||||
$this->_rspRawData(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'state' => 0,
|
||||
'old_hero' => $oldHero,
|
||||
'new_hero' => $newHero,
|
||||
//'errmsg' => 'advance failed',
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
));
|
||||
$rnd = rand(1, 100);
|
||||
$probability = \services\FormulaService::Hero_Advanced_Probability($heroDb['quality'] + 1)*100;
|
||||
if ($rnd > $probability) {
|
||||
Hero::update($heroUniId,
|
||||
array(
|
||||
'advanced_count' => $heroDb['advanced_count'] + 1,
|
||||
'lock_type' => 0,
|
||||
'unlock_time' => 0,
|
||||
)
|
||||
);
|
||||
$oldHero['advanced_count'] += 1;
|
||||
$newHero['advanced_count'] += 1;
|
||||
{
|
||||
//埋点
|
||||
$event = [
|
||||
'name' => LogService::HERO_QUALITY_UP,
|
||||
];
|
||||
$oldHero['level'] = $oldHero['hero_lv'];
|
||||
$oldHero['item_id'] = $oldHero['hero_id'];
|
||||
$newHero['level'] = $newHero['hero_lv'];
|
||||
$newHero['item_id'] = $newHero['hero_id'];
|
||||
LogService::LevelUpOrQualityUp($event,$oldHero,$newHero);
|
||||
}
|
||||
$this->_rspRawData(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'state' => 0,
|
||||
'old_hero' => $oldHero,
|
||||
'new_hero' => $newHero,
|
||||
//'errmsg' => 'advance failed',
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
));
|
||||
return;
|
||||
}
|
||||
$heroLucky = \services\FormulaService::Hero_Advanced_Lucky_Value($heroDb['quality']);
|
||||
$nextHeroLucky = \services\FormulaService::Hero_Advanced_Lucky_Value($heroDb['quality'] + 1);
|
||||
$heroTili = \services\FormulaService::Hero_NFT_Maximum_Physical_Strength($heroDb['quality'],$heroLucky);
|
||||
$nextHeroTili = \services\FormulaService::Hero_NFT_Maximum_Physical_Strength($heroDb['quality'] + 1,$nextHeroLucky);
|
||||
Hero::update($heroUniId,
|
||||
array(
|
||||
'hero_tili' => $heroDb['hero_tili']+($nextHeroTili-$heroTili),
|
||||
'skill_points' => $heroDb['skill_points'] + $nextQualityMeta['skill_point'],
|
||||
'quality' => $heroDb['quality'] + 1,
|
||||
'advanced_count' => $heroDb['advanced_count'] + 1,
|
||||
'lock_type' => 0,
|
||||
'unlock_time' => 0,
|
||||
'labour' => 0,
|
||||
)
|
||||
);
|
||||
if ($heroDb['quality'] + 1 > myself()->_getV(TN_HERO_MAX_QUALITY, 0)) {
|
||||
myself()->_setV(TN_HERO_MAX_QUALITY, 0, $heroDb['quality'] + 1);
|
||||
}
|
||||
$newHeroDb = Hero::find($heroUniId);
|
||||
$newHero = Hero::toDto($newHeroDb);
|
||||
error_log(json_encode(array(
|
||||
'costHeroUniId' => $costHeroUniId,
|
||||
'heroUniId' => $heroUniId
|
||||
)));
|
||||
$rankActivityService = new services\RankActivityService();
|
||||
$rankActivityService->heroUpgradeQuality($heroDb['quality'] + 1);
|
||||
}
|
||||
if (!$nextQualityMeta) {
|
||||
$this->_rspErr(1, 'quality is full');
|
||||
return;
|
||||
}
|
||||
$heroLucky = \services\FormulaService::Hero_Advanced_Lucky_Value($heroDb['quality']);
|
||||
$nextHeroLucky = \services\FormulaService::Hero_Advanced_Lucky_Value($heroDb['quality'] + 1);
|
||||
$heroTili = \services\FormulaService::Hero_NFT_Maximum_Physical_Strength($heroDb['quality'],$heroLucky);
|
||||
$nextHeroTili = \services\FormulaService::Hero_NFT_Maximum_Physical_Strength($heroDb['quality'] + 1,$nextHeroLucky);
|
||||
Hero::update($heroUniId,
|
||||
array(
|
||||
'hero_tili' => $heroDb['hero_tili']+($nextHeroTili-$heroTili),
|
||||
'skill_points' => $heroDb['skill_points'] + $nextQualityMeta['skill_point'],
|
||||
'quality' => $heroDb['quality'] + 1,
|
||||
'advanced_count' => $heroDb['advanced_count'] + 1,
|
||||
'lock_type' => 0,
|
||||
'unlock_time' => 0,
|
||||
'labour' => 0,
|
||||
)
|
||||
);
|
||||
if ($heroDb['quality'] + 1 > myself()->_getV(TN_HERO_MAX_QUALITY, 0)) {
|
||||
myself()->_setV(TN_HERO_MAX_QUALITY, 0, $heroDb['quality'] + 1);
|
||||
{
|
||||
//埋点
|
||||
$event = [
|
||||
'name' => LogService::HERO_QUALITY_UP,
|
||||
];
|
||||
$oldHero['level'] = $oldHero['hero_lv'];
|
||||
$oldHero['item_id'] = $oldHero['hero_id'];
|
||||
$newHero['level'] = $newHero['hero_lv'];
|
||||
$newHero['item_id'] = $newHero['hero_id'];
|
||||
LogService::LevelUpOrQualityUp($event,$oldHero,$newHero);
|
||||
}
|
||||
$newHeroDb = Hero::find($heroUniId);
|
||||
$newHero = Hero::toDto($newHeroDb);
|
||||
error_log(json_encode(array(
|
||||
'costHeroUniId' => $costHeroUniId,
|
||||
'heroUniId' => $heroUniId
|
||||
)));
|
||||
$rankActivityService = new services\RankActivityService();
|
||||
$rankActivityService->heroUpgradeQuality($heroDb['quality'] + 1);
|
||||
$this->_rspData(array(
|
||||
'state' => 1,
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
'old_hero' => $oldHero,
|
||||
'new_hero' => $newHero,
|
||||
));
|
||||
}
|
||||
if (!$nextQualityMeta) {
|
||||
$this->_rspErr(1, 'quality is full');
|
||||
return;
|
||||
}
|
||||
{
|
||||
//埋点
|
||||
$event = [
|
||||
'name' => LogService::HERO_QUALITY_UP,
|
||||
];
|
||||
$oldHero['level'] = $oldHero['hero_lv'];
|
||||
$oldHero['item_id'] = $oldHero['hero_id'];
|
||||
$newHero['level'] = $newHero['hero_lv'];
|
||||
$newHero['item_id'] = $newHero['hero_id'];
|
||||
LogService::LevelUpOrQualityUp($event,$oldHero,$newHero);
|
||||
}
|
||||
$this->_rspData(array(
|
||||
'state' => 1,
|
||||
'property_chg' => $propertyChgService->toDto(),
|
||||
'old_hero' => $oldHero,
|
||||
'new_hero' => $newHero,
|
||||
));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
$this->_rspErr(1, 'type parameter error');
|
||||
return;
|
||||
}
|
||||
break;
|
||||
break;
|
||||
default:
|
||||
{
|
||||
$this->_rspErr(1, 'type parameter error');
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -616,39 +895,6 @@ class HeroController extends BaseAuthedController {
|
||||
));
|
||||
}
|
||||
|
||||
public function upgradeLevelPreview(){
|
||||
$heroUniId = getReqVal('hero_uniid', 0);
|
||||
$heroDb = Hero::find($heroUniId);
|
||||
if (!$heroDb) {
|
||||
$this->_rspErr(1, 'hero does not exist');
|
||||
return;
|
||||
}
|
||||
$heroMeta = mt\Hero::get($heroDb['hero_id']);
|
||||
if (!$heroMeta) {
|
||||
$this->_rspErr(100, 'server internal error');
|
||||
return;
|
||||
}
|
||||
$nextLevelMeta = mt\HeroLevelAttr::getByLevel($heroDb['hero_lv'] + 1);
|
||||
if (!$nextLevelMeta) {
|
||||
$this->_rspErr(5, "It's already the highest level");
|
||||
return;
|
||||
}
|
||||
$newHeroDb = $heroDb;
|
||||
$newHeroDb['hero_lv'] += 1;
|
||||
$attrs = mt\HeroLevelAttr::addRandAttrNew($heroDb,0);
|
||||
$newHeroDb['rand_attr'] = json_encode($attrs);
|
||||
$cost['CEG'] = \services\FormulaService::Hero_Upgrade_CEG_Expend($newHeroDb['hero_lv']);
|
||||
$cost['CEC'] = \services\FormulaService::Hero_Upgrade_CEC_Expend($newHeroDb['hero_lv']);
|
||||
$heroDto = Hero::toDto($heroDb);
|
||||
$newHeroDto = Hero::toDto($newHeroDb);
|
||||
$this->_rspData(array(
|
||||
|
||||
'old_hero' => $heroDto,
|
||||
'new_hero' => $newHeroDto,
|
||||
'cost' => $cost
|
||||
));
|
||||
}
|
||||
|
||||
public function upgradeQualityOld()
|
||||
{
|
||||
$costHeroUniId = getReqVal('cost_hero_uniid', 0);
|
||||
@ -758,16 +1004,16 @@ class HeroController extends BaseAuthedController {
|
||||
|
||||
$this->_decItems($costItems);
|
||||
Hero::update($heroUniId,
|
||||
array(
|
||||
'lock_type' => Hero::QUALITY_LOCK,
|
||||
'unlock_time' => $this->_getNowTime() + $nextQualityMeta['time'],
|
||||
)
|
||||
array(
|
||||
'lock_type' => Hero::QUALITY_LOCK,
|
||||
'unlock_time' => $this->_getNowTime() + $nextQualityMeta['time'],
|
||||
)
|
||||
);
|
||||
Hero::update($costHeroUniId,
|
||||
array(
|
||||
'lock_type' => Hero::COST_LOCK,
|
||||
'unlock_time' => $this->_getNowTime() + $nextQualityMeta['time'],
|
||||
)
|
||||
array(
|
||||
'lock_type' => Hero::COST_LOCK,
|
||||
'unlock_time' => $this->_getNowTime() + $nextQualityMeta['time'],
|
||||
)
|
||||
);
|
||||
$this->_setV(TN_HERO_QUALITY_UP, (int)$slotId, (int)$heroDb['idx']);
|
||||
$this->_setV(TN_HERO_QUALITY_UP, (int)$slotId + 1000, (int)$costHeroDb['idx']);
|
||||
|
114
webapp/controller/HeroSkillController.class.php
Normal file
114
webapp/controller/HeroSkillController.class.php
Normal file
@ -0,0 +1,114 @@
|
||||
<?php
|
||||
require_once('mt/Skill.php');
|
||||
require_once('mt/Hero.php');
|
||||
|
||||
require_once('models/Hero.php');
|
||||
|
||||
|
||||
use models\Hero;
|
||||
use phpcommon\SqlHelper;
|
||||
|
||||
class HeroSkillController extends BaseAuthedController
|
||||
{
|
||||
public function getSkillList(){
|
||||
$skillList = \mt\Skill::getPresetSkill();
|
||||
$list = array();
|
||||
foreach ($skillList as $skill){
|
||||
$list[] = $skill['skill_id'];
|
||||
}
|
||||
$this->_rspData(array(
|
||||
'data' => $list,
|
||||
));
|
||||
}
|
||||
|
||||
public function presetHero(){
|
||||
$skillId = getReqVal('skill_id',0);
|
||||
$skillMeta = \mt\Skill::get($skillId);
|
||||
if (! $skillMeta){
|
||||
$this->_rspErr(1,'skill_id parameter error');
|
||||
return ;
|
||||
}
|
||||
$heroList = array();
|
||||
Hero::getHeroList(function ($row) use(&$heroList) {
|
||||
array_push($heroList, $row);
|
||||
});
|
||||
$list = array_unique(array_column($heroList,'hero_id'));
|
||||
$data = array();
|
||||
if (count($list) > 0){
|
||||
foreach ($list as $value){
|
||||
$data[$value] = array(
|
||||
'item_id' => $value,
|
||||
'state' => 0
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$rows = SqlHelper::ormSelect(
|
||||
$this->_getSelfMysql(),
|
||||
't_hero_skill',
|
||||
array(
|
||||
'account_id' => $this->_getAccountId(),
|
||||
'skill_id' => $skillId,
|
||||
)
|
||||
);
|
||||
if ($rows){
|
||||
foreach ($rows as $row){
|
||||
$heroDb = Hero::find($row['hero_uid']);
|
||||
$data[$heroDb['hero_id']]['state'] = 1;
|
||||
}
|
||||
}
|
||||
$this->_rspData(array(
|
||||
'data' => $data,
|
||||
));
|
||||
}
|
||||
|
||||
public function applyHero(){
|
||||
$skillId = getReqVal('skill_id',0);
|
||||
$heroIds = getReqVal('hero_ids','');
|
||||
$heroIdArr = explode('|',$heroIds);
|
||||
if (!$skillId || count($heroIdArr)<0){
|
||||
$this->_rspErr(1,' parameter error');
|
||||
return ;
|
||||
}
|
||||
$skillMeta = \mt\Skill::get($skillId);
|
||||
if (! $skillMeta){
|
||||
$this->_rspErr(1,'skill_id parameter error');
|
||||
return ;
|
||||
}
|
||||
foreach ($heroIdArr as $heroId){
|
||||
$heroMeta = \mt\Hero::get($heroId);
|
||||
if (! $heroMeta){
|
||||
$this->_rspErr(1,'hero_id parameter error');
|
||||
return ;
|
||||
}
|
||||
}
|
||||
foreach ($heroIdArr as $heroId){
|
||||
$heroList = Hero::getHeroByItemId($heroId);
|
||||
if ($heroList){
|
||||
foreach ($heroList as $hero){
|
||||
SqlHelper::upsert
|
||||
($this->_getSelfMysql(),
|
||||
't_hero_skill',
|
||||
array(
|
||||
'account_id' => $this->_getAccountId(),
|
||||
'hero_uid' => $hero['idx'],
|
||||
),
|
||||
array(
|
||||
'skill_id' => $skillId,
|
||||
'modifytime' => $this->_getNowTime(),
|
||||
),
|
||||
array(
|
||||
'account_id' => $this->_getAccountId(),
|
||||
'hero_uid' => $hero['idx'],
|
||||
'skill_id' => $skillId,
|
||||
'createtime' => $this->_getNowTime(),
|
||||
'modifytime' => $this->_getNowTime(),
|
||||
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->_rspOk();
|
||||
}
|
||||
}
|
@ -22,6 +22,7 @@ require_once('services/ActivateNftService.php');
|
||||
|
||||
require_once('phpcommon/bchelper.php');
|
||||
|
||||
// use phpcommon as phpcommon;
|
||||
use phpcommon\SqlHelper;
|
||||
use models\BoxOrder;
|
||||
use models\Nft;
|
||||
@ -571,8 +572,12 @@ class MarketController extends BaseController {
|
||||
switch ($type) {
|
||||
case Nft::HERO_TYPE: {
|
||||
$rows = Nft::getNftListByType($account, $type);
|
||||
$rows = array_merge($rows, $this->listMySelledNfts($account, $type));
|
||||
foreach ($rows as &$row) {
|
||||
$nftDb = Nft::findNftByOwner($account, $row['token_id']);
|
||||
if (empty($nftDb)) {
|
||||
$nftDb = Nft::getNft($row['token_id']);
|
||||
}
|
||||
$row['info'] = Nft::toDto($nftDb);
|
||||
$row['detail'] = Hero::toDtoInfo(Hero::findByTokenId2($row['token_id']));
|
||||
if (in_array($row['info']['info']['job'], $job)==false) continue;
|
||||
@ -601,8 +606,12 @@ class MarketController extends BaseController {
|
||||
break;
|
||||
case Nft::EQUIP_TYPE: {
|
||||
$rows = Nft::getNftListByType($account, $type);
|
||||
$rows = array_merge($rows, $this->listMySelledNfts($account, $type));
|
||||
foreach ($rows as &$row) {
|
||||
$nftDb = Nft::findNftByOwner($account, $row['token_id']);
|
||||
if (empty($nftDb)) {
|
||||
$nftDb = Nft::getNft($row['token_id']);
|
||||
}
|
||||
$row['info'] = Nft::toDto($nftDb);
|
||||
$row['detail'] = Gun::toDtoInfo(Gun::findByTokenId2($row['token_id']));
|
||||
if ($row['detail']['gun_lv']<$lv) continue;
|
||||
@ -630,6 +639,7 @@ class MarketController extends BaseController {
|
||||
break;
|
||||
case Nft::CHIP_TYPE: {
|
||||
$rows = Nft::getNft1155List($account, $type);
|
||||
$rows = array_merge($rows, $this->listMySelledNfts($account, $type));
|
||||
foreach ($rows as &$row) {
|
||||
$row['detail'] = Chip::toDto(Chip::getChipByTokenId($row['token_id']));
|
||||
if (!in_array($row['detail']['chip_type'], $job))
|
||||
@ -653,8 +663,12 @@ class MarketController extends BaseController {
|
||||
break;
|
||||
case Nft::FRAGMENT_TYPE: {
|
||||
$rows = Nft::getNft1155List($account, $type);
|
||||
$rows = array_merge($rows, $this->listMySelledNfts($account, $type));
|
||||
foreach ($rows as &$row) {
|
||||
$nftDb = Nft::findNftByOwner($account, $row['token_id']);
|
||||
if (empty($nftDb)) {
|
||||
$nftDb = Nft::getNft($row['token_id']);
|
||||
}
|
||||
$row['detail'] = $this->getNftGameData($nftDb);
|
||||
if (!in_array($row['detail']['type'], $job))
|
||||
continue;
|
||||
@ -676,7 +690,7 @@ class MarketController extends BaseController {
|
||||
|
||||
public function listSellNfts()
|
||||
{
|
||||
$account = getReqVal('account', '');
|
||||
$account = strtolower(getReqVal('account', ''));
|
||||
$token = getReqVal('token', '');
|
||||
$start = getReqVal('start', 0);
|
||||
$page_size = getReqVal('page_size', 10);
|
||||
@ -770,7 +784,7 @@ class MarketController extends BaseController {
|
||||
|
||||
$counts = $conn->execQuery(
|
||||
'SELECT count(*) as count FROM t_market_store '.
|
||||
'WHERE token_type=:token_type '.
|
||||
'WHERE token_type=:token_type AND status=0 '.
|
||||
$job_filter_fn($job_filter_array).
|
||||
$lv_filter_fn($lv_filter).
|
||||
$quality_filter_fn($quality_filter).
|
||||
@ -794,7 +808,7 @@ class MarketController extends BaseController {
|
||||
|
||||
$rows = $conn->execQuery(
|
||||
'SELECT * FROM t_market_store '.
|
||||
'WHERE token_type=:token_type '.
|
||||
'WHERE token_type=:token_type AND status=0 '.
|
||||
$job_filter_fn($job_filter_array).
|
||||
$lv_filter_fn($lv_filter).
|
||||
$quality_filter_fn($quality_filter).
|
||||
@ -812,10 +826,17 @@ class MarketController extends BaseController {
|
||||
|
||||
for ($x = $start; $x < $page_end; $x++) {
|
||||
$row = $rows[$x%$page_size];
|
||||
$nftDb = Nft::findNftByOwner($row['owner_address'], $row['token_id']);
|
||||
$nftDb = Nft::getNft($row['token_id']);
|
||||
if (!$nftDb) {
|
||||
myself()->_rspErr(1, 'nft not exists');
|
||||
return;
|
||||
$nftDb = Nft::findNftByOwner($account, $row['token_id']);
|
||||
// 0x768b5faed6dc69816f33377d214ffaf00dcdd0cf
|
||||
if (!$nftDb) {
|
||||
$nftDb = Nft::findNftByOwner('0xfc628dd79137395f3c9744e33b1c5de554d94882', $row['token_id']);
|
||||
if (!$nftDb) {
|
||||
myself()->_rspErr(1, 'nft not exists');
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
$nft = Nft::toDto($nftDb);
|
||||
$row['info'] = $nft;
|
||||
@ -867,6 +888,7 @@ class MarketController extends BaseController {
|
||||
$nfts = array();
|
||||
for ($x = $start; $x < $page_end; $x++) {
|
||||
$row = $rows[$x];
|
||||
// $this->attach_market_selling($row);
|
||||
array_push($nfts, $row);
|
||||
}
|
||||
|
||||
@ -884,6 +906,7 @@ class MarketController extends BaseController {
|
||||
$token = getReqVal('token', '');
|
||||
$nft_token = getReqVal('nft_token', '');
|
||||
$s_price = getReqVal('s_price', '');
|
||||
$amount = getReqVal('amount', 1);
|
||||
$payment_token_address = getReqVal('payment_token_address', '');
|
||||
$nonce = getReqVal('nonce', '');
|
||||
$signature = getReqVal('signature', '');
|
||||
@ -901,6 +924,7 @@ class MarketController extends BaseController {
|
||||
'token_id' => $nft_token,
|
||||
'owner_address' => $nftDetail['owner_address'],
|
||||
'token_type' => $nftDetail['type'],
|
||||
'amount' => $amount,
|
||||
'createtime' => myself()->_getNowTime(),
|
||||
'modifytime' => myself()->_getNowTime(),
|
||||
's_price' => $s_price,
|
||||
@ -934,6 +958,317 @@ class MarketController extends BaseController {
|
||||
$this->_rspOk();
|
||||
}
|
||||
|
||||
public function getSupportedCurrencyTypes() {
|
||||
$types = array();
|
||||
if (SERVER_ENV == _ONLINE) {
|
||||
array_push($types, array(
|
||||
'name' => 'USDT',
|
||||
'address' => '0xc22Ffa318051d8aF4E5f2E2732d7049486fcE093',
|
||||
));
|
||||
} else {
|
||||
array_push($types, array(
|
||||
'name' => 'USDT',
|
||||
'address' => '0xc22Ffa318051d8aF4E5f2E2732d7049486fcE093',
|
||||
));
|
||||
}
|
||||
$this->_rspData(array(
|
||||
'list' => $types,
|
||||
));
|
||||
}
|
||||
|
||||
public function getTransactionRecord() {
|
||||
$account = strtolower(getReqVal('account', ''));
|
||||
$type = getReqVal('type', 0);
|
||||
$start = getReqVal('start', 0);
|
||||
$page_size = getReqVal('page_size', 10);
|
||||
|
||||
$conn = myself()->_getMysql('');
|
||||
|
||||
$type_filter_fn = function ($f) {
|
||||
if ($f==0) {
|
||||
return '';
|
||||
}
|
||||
else {
|
||||
return 'AND type=' . $f;
|
||||
}
|
||||
};
|
||||
|
||||
$counts = $conn->execQuery(
|
||||
'SELECT count(*) as count FROM t_market_transaction_record '.
|
||||
'WHERE (seller=:account OR buyer=:account) '.
|
||||
$type_filter_fn($type).
|
||||
' ORDER BY createtime DESC',
|
||||
array(
|
||||
':account' => $account,
|
||||
)
|
||||
);
|
||||
|
||||
$total = $counts[0]['count'];
|
||||
$page_end = $start + $page_size;
|
||||
if ($page_end > $total) {
|
||||
$page_end = $total;
|
||||
$start = $total-1;
|
||||
$start = intval($start / $page_size) * $page_size;
|
||||
if ($start<0) $start = 0;
|
||||
}
|
||||
|
||||
$rows = $conn->execQuery(
|
||||
'SELECT * FROM t_market_transaction_record '.
|
||||
'WHERE (seller=:account OR buyer=:account) '.
|
||||
$type_filter_fn($type).
|
||||
' ORDER BY createtime DESC '.
|
||||
'LIMIT '.$start.','.$page_size,
|
||||
array(
|
||||
':account' => $account,
|
||||
)
|
||||
);
|
||||
|
||||
$this->_rspData(array(
|
||||
"total" => $total,
|
||||
"start" => $start,
|
||||
"page_size" => $page_size,
|
||||
'nfts' => $rows,
|
||||
));
|
||||
}
|
||||
|
||||
private function addTransactionRecord($record) {
|
||||
$conn = myself()->_getMysql('');
|
||||
|
||||
$r = SqlHelper::insert(
|
||||
$conn,
|
||||
't_market_transaction_record',
|
||||
$record
|
||||
);
|
||||
if (!$r) {
|
||||
$this->_rspErr(2, 'unknown error, orderId='.$record['orderid']);
|
||||
}
|
||||
}
|
||||
|
||||
public function eventSellOrder() {
|
||||
$tokenId = getReqVal('tokenId', '');
|
||||
$owner = strtolower(getReqVal('owner', ''));
|
||||
$nftToken = getReqVal('nftToken', '');
|
||||
$amount = getReqVal('amount', 0);
|
||||
$orderId = getReqVal('orderId', '');
|
||||
$currency = getReqVal('currency', '');
|
||||
$price = getReqVal('price', '');
|
||||
|
||||
error_log("eventSellOrder:" . json_encode(
|
||||
array(
|
||||
'tokenId' => $tokenId,
|
||||
'owner' => $owner,
|
||||
'nftToken' => $nftToken,
|
||||
'amount' => $amount,
|
||||
'orderId' => $orderId,
|
||||
'currency' => $currency,
|
||||
'price' => $price,
|
||||
),
|
||||
JSON_PRETTY_PRINT
|
||||
)
|
||||
);
|
||||
|
||||
$conn = myself()->_getMysql('');
|
||||
|
||||
// 1. check order status
|
||||
$chk = SqlHelper::selectOne($conn, 't_market_store', array('status'), array('o_link' => $orderId));
|
||||
if (!empty($chk)) {
|
||||
$this->_rspErr(1, 'repeat sell order, orderId='.$orderId);
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. insert sell order to t_market_store
|
||||
$nftDb = Nft::findNftByOwner($owner, $tokenId);
|
||||
if (empty($nftDb)) {
|
||||
$nftDb = Nft::getNft($tokenId);
|
||||
}
|
||||
$nftDetail = Nft::toDto($nftDb);
|
||||
$detail = $this->getNftGameData($nftDb);
|
||||
$r = SqlHelper::insert(
|
||||
$conn,
|
||||
't_market_store',
|
||||
array(
|
||||
'token_id' => $tokenId,
|
||||
'o_link' => $orderId,
|
||||
'nft_token' => $nftToken,
|
||||
'status' => 0,
|
||||
'owner_address' => $owner,
|
||||
'token_type' => $nftDetail['type'],
|
||||
'amount' => $amount,
|
||||
'createtime' => myself()->_getNowTime(),
|
||||
'modifytime' => myself()->_getNowTime(),
|
||||
's_currency' => $currency,
|
||||
's_price' => $price,
|
||||
'c_name' => $nftDetail['info']['name'],
|
||||
'c_job' => isset($nftDetail['info']['job']) ? $nftDetail['info']['job']
|
||||
: (isset($detail['chip_type']) ? $detail['chip_type']
|
||||
: (isset($detail['type'])?$detail['type']
|
||||
:0)),
|
||||
'c_lv' => @$detail['gun_lv'] | @$detail['hero_lv'] | @$detail['chip_grade'],
|
||||
'c_quality' => isset($nftDetail['info']['quality']) ? $nftDetail['info']['quality'] : 0,
|
||||
'c_durability' => isset($nftDetail['info']['durability']) ? $nftDetail['info']['durability'] : (isset($detail['hero_tili']) ? $detail['hero_tili'] : 0),
|
||||
'c_type' => isset($detail['type']) ? $detail['type'] : 0,
|
||||
'c_id' => $nftDetail['item_id'],
|
||||
)
|
||||
);
|
||||
if (!$r) {
|
||||
$this->_rspErr(2, 'unknown error, orderId='.$orderId);
|
||||
}
|
||||
|
||||
$this->_rspOk();
|
||||
}
|
||||
|
||||
public function eventBuyOrder() {
|
||||
$tokenId = getReqVal('tokenId', '');
|
||||
$orderId = getReqVal('orderId', '');
|
||||
$nftToken = getReqVal('nftToken', '');
|
||||
$amount = getReqVal('amount', 0);
|
||||
$seller = strtolower(getReqVal('seller', ''));
|
||||
$buyer = strtolower(getReqVal('buyer', ''));
|
||||
$erc20 = getReqVal('erc20', '');
|
||||
$price = getReqVal('price', '');
|
||||
|
||||
error_log("eventBuyOrder:" . json_encode(
|
||||
array(
|
||||
'tokenId' => $tokenId,
|
||||
'orderId' => $orderId,
|
||||
'nftToken' => $nftToken,
|
||||
'amount' => $amount,
|
||||
'seller' => $seller,
|
||||
'buyer' => $buyer,
|
||||
'erc20' => $erc20,
|
||||
'price' => $price,
|
||||
),
|
||||
JSON_PRETTY_PRINT
|
||||
)
|
||||
);
|
||||
|
||||
$conn = myself()->_getMysql('');
|
||||
|
||||
// 1. check order status
|
||||
$chk = SqlHelper::selectOne($conn, 't_market_store', array('status','idx', 'c_name', 'token_type'), array('o_link' => $orderId));
|
||||
if (empty($chk)) {
|
||||
$this->_rspErr(1, 'not found order, orderId='.$orderId);
|
||||
return;
|
||||
}
|
||||
if ($chk['status']== '0') {
|
||||
$r = SqlHelper::update(
|
||||
$conn,
|
||||
't_market_store',
|
||||
array(
|
||||
'o_link' => $orderId,
|
||||
),
|
||||
array(
|
||||
'status' => 2,
|
||||
)
|
||||
);
|
||||
if ($r) {
|
||||
// 增加交易记录
|
||||
$record = array(
|
||||
'createtime' => myself()->_getNowTime(),
|
||||
'orderid' => $chk['idx'],
|
||||
'o_link' => $orderId,
|
||||
'seller' => $seller,
|
||||
'buyer' => $buyer,
|
||||
'tokenid' => $tokenId,
|
||||
'amount' => $amount,
|
||||
'name' => $chk['c_name'],
|
||||
'type' => $chk['token_type'],
|
||||
);
|
||||
$this->addTransactionRecord($record);
|
||||
$this->_rspOk();
|
||||
return;
|
||||
}
|
||||
}
|
||||
$this->_rspErr(1, 'order status error, order='.$orderId);
|
||||
}
|
||||
|
||||
public function eventCancelOrder() {
|
||||
$orderId = getReqVal('orderId', '');
|
||||
$nftToken = getReqVal('nftToken', '');
|
||||
$tokenId = getReqVal('tokenId', '');
|
||||
error_log("eventCancelOrder:" . json_encode(
|
||||
array(
|
||||
'orderId' => $orderId,
|
||||
'nftToken' => $nftToken,
|
||||
'tokenId' => $tokenId,
|
||||
),
|
||||
JSON_PRETTY_PRINT
|
||||
)
|
||||
);
|
||||
|
||||
$conn = myself()->_getMysql('');
|
||||
|
||||
// 1. check order status
|
||||
$chk = SqlHelper::selectOne($conn, 't_market_store', array('status'), array('o_link' => $orderId));
|
||||
if (empty($chk)) {
|
||||
$this->_rspErr(1, 'not found order, orderId='.$orderId);
|
||||
return;
|
||||
}
|
||||
if ($chk['status']== '0') {
|
||||
$r = SqlHelper::update(
|
||||
$conn,
|
||||
't_market_store',
|
||||
array(
|
||||
'o_link' => $orderId,
|
||||
),
|
||||
array(
|
||||
'status' => 1,
|
||||
)
|
||||
);
|
||||
if ($r) {
|
||||
$this->_rspOk();
|
||||
return;
|
||||
}
|
||||
}
|
||||
$this->_rspErr(1, 'order status error, order='.$orderId);
|
||||
}
|
||||
|
||||
public function eventPriceUpdateOrder() {
|
||||
$orderId = getReqVal('orderId', '');;
|
||||
$nftToken = getReqVal('nftToken', '');
|
||||
$tokenId = getReqVal('tokenId', '');
|
||||
$priceOld = getReqVal('priceOld', '');
|
||||
$price = getReqVal('price', '');
|
||||
error_log("eventPriceUpdateOrder:" . json_encode(
|
||||
array(
|
||||
'orderId' => $orderId,
|
||||
'nftToken' => $nftToken,
|
||||
'tokenId' => $tokenId,
|
||||
'priceOld' => $priceOld,
|
||||
'price' => $price,
|
||||
),
|
||||
JSON_PRETTY_PRINT
|
||||
)
|
||||
);
|
||||
|
||||
$conn = myself()->_getMysql('');
|
||||
|
||||
// 1. check order status
|
||||
$chk = SqlHelper::selectOne($conn, 't_market_store', array('status'), array('o_link' => $orderId));
|
||||
if (empty($chk)) {
|
||||
$this->_rspErr(1, 'not found order, orderId='.$orderId);
|
||||
return;
|
||||
}
|
||||
|
||||
if ($chk['status']== '0') {
|
||||
$r = SqlHelper::update(
|
||||
$conn,
|
||||
't_market_store',
|
||||
array(
|
||||
'o_link' => $orderId,
|
||||
),
|
||||
array(
|
||||
's_price' => $price,
|
||||
)
|
||||
);
|
||||
if ($r) {
|
||||
$this->_rspOk();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$this->_rspErr(1, 'price update failed, orderId='.$orderId);
|
||||
}
|
||||
|
||||
private function getNftGameData($nftRowInfo) {
|
||||
$t = $nftRowInfo['token_type'];
|
||||
@ -957,7 +1292,6 @@ class MarketController extends BaseController {
|
||||
return array('unknown' => 'unknown game data type, cannot find data');
|
||||
}
|
||||
|
||||
|
||||
private function appendChipsInfo($detail) {
|
||||
$detail['chips_info'] = array();
|
||||
if (!empty($detail['chip_ids'])) {
|
||||
@ -972,4 +1306,44 @@ class MarketController extends BaseController {
|
||||
}
|
||||
return $detail;
|
||||
}
|
||||
|
||||
private function attach_market_selling(&$row) {
|
||||
$conn = myself()->_getMysql('');
|
||||
|
||||
$rows = $conn->execQuery(
|
||||
'SELECT * FROM t_market_store '.
|
||||
'WHERE token_id=:token_id AND owner_address=:owner_address AND status=:status',
|
||||
array(
|
||||
':token_id' => $row['token_id'],
|
||||
':owner_address' => $row['owner_address'],
|
||||
':status' => 0,
|
||||
)
|
||||
);
|
||||
|
||||
$count = 0;
|
||||
$link_array = array();
|
||||
foreach ($rows as $r) {
|
||||
$count += $r['amount'];
|
||||
array_push($link_array, $r['o_link']);
|
||||
}
|
||||
|
||||
$row['o_link'] = implode('|', $link_array);
|
||||
$row['selling'] = $count;
|
||||
}
|
||||
|
||||
private function listMySelledNfts($account, $type)
|
||||
{
|
||||
$conn = myself()->_getMysql('');
|
||||
|
||||
$rows = $conn->execQuery(
|
||||
'SELECT * FROM t_market_store '.
|
||||
'WHERE owner_address=:account AND token_type=:token_type AND status=0 ',
|
||||
array(
|
||||
':account' => $account,
|
||||
':token_type' => $type,
|
||||
)
|
||||
);
|
||||
|
||||
return $rows;
|
||||
}
|
||||
}
|
||||
|
@ -125,24 +125,24 @@ class UserController extends BaseAuthedController {
|
||||
}
|
||||
|
||||
private function _addFreeItem(){
|
||||
// foreach (mt\Parameter::getListValue('creator_hero_id') as $heroId) {
|
||||
// $heroMeta = mt\Item::get($heroId);
|
||||
// if ($heroMeta) {
|
||||
// Hero::addHero($heroMeta);
|
||||
// User::upsertHeadList($heroMeta);
|
||||
// }
|
||||
// }
|
||||
// $addItems =array();
|
||||
// foreach (mt\Parameter::getListValue('creator_present_items') as $itemsStr) {
|
||||
// list($itemId, $itemNum) = explode(':', $itemsStr);
|
||||
// if ($itemNum > 0) {
|
||||
// array_push($addItems,
|
||||
// array(
|
||||
// 'item_id' => $itemId,
|
||||
// 'item_num' => $itemNum
|
||||
// ));
|
||||
// }
|
||||
// }
|
||||
foreach (mt\Parameter::getListValue('creator_hero_id') as $heroId) {
|
||||
$heroMeta = mt\Item::get($heroId);
|
||||
if ($heroMeta) {
|
||||
Hero::addHero($heroMeta);
|
||||
User::upsertHeadList($heroMeta);
|
||||
}
|
||||
}
|
||||
$addItems =array();
|
||||
foreach (mt\Parameter::getListValue('creator_present_items') as $itemsStr) {
|
||||
list($itemId, $itemNum) = explode(':', $itemsStr);
|
||||
if ($itemNum > 0) {
|
||||
array_push($addItems,
|
||||
array(
|
||||
'item_id' => $itemId,
|
||||
'item_num' => $itemNum
|
||||
));
|
||||
}
|
||||
}
|
||||
$items = array(
|
||||
array(
|
||||
'item_id' => V_ITEM_GOLD,
|
||||
@ -486,6 +486,36 @@ class UserController extends BaseAuthedController {
|
||||
'valid_func' => function ($val, &$errCode, &$errMsg) {
|
||||
return true;
|
||||
}
|
||||
),
|
||||
'parachute' => array(
|
||||
'field_name' => 'parachute',
|
||||
'val_func' => function ($val) {
|
||||
return $val;
|
||||
},
|
||||
'valid_func' => function ($val, &$errCode, &$errMsg) {
|
||||
if (User::isValidParachute($val)) {
|
||||
return true;
|
||||
} else {
|
||||
$errCode = 1;
|
||||
$errMsg = 'parachute parameter error';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
),
|
||||
'ring_id' => array(
|
||||
'field_name' => 'ring_id',
|
||||
'val_func' => function ($val) {
|
||||
return $val;
|
||||
},
|
||||
'valid_func' => function ($val, &$errCode, &$errMsg) {
|
||||
if (User::isValidRing($val)) {
|
||||
return true;
|
||||
} else {
|
||||
$errCode = 1;
|
||||
$errMsg = 'ring_id parameter error';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
)
|
||||
);
|
||||
$fieldsKv = array();
|
||||
@ -699,8 +729,8 @@ class UserController extends BaseAuthedController {
|
||||
if ($heroMeta['normal_gift'] && !in_array($heroMeta['normal_gift'],$headList)){
|
||||
array_push($headList,$heroMeta['normal_gift']);
|
||||
}
|
||||
Hero::addHero($heroMeta);
|
||||
Gun::addGun($gunMeta);
|
||||
Hero::addFreeHero($heroMeta);
|
||||
Gun::addFreeGun($gunMeta);
|
||||
$fields = array(
|
||||
'hero_id' => $temp ? $temp[1] : 0,
|
||||
'head_id' => $temp ? $temp[0] : 0,
|
||||
|
@ -11,21 +11,49 @@ require_once('mt/ChipAttr.php');
|
||||
|
||||
|
||||
use mt;
|
||||
use mt\ChipAttr;
|
||||
use phpcommon\SqlHelper;
|
||||
use services\NftService;
|
||||
use services\FormulaService;
|
||||
|
||||
class Chip extends BaseModel
|
||||
{
|
||||
public static function all($type)
|
||||
const GETED_STATE = 0;
|
||||
const FREE_STATE = 1;
|
||||
|
||||
const CHIP_LV_MAX = 3;
|
||||
|
||||
public static function find($chipUniId)
|
||||
{
|
||||
$chipList = array();
|
||||
self::getChipList(function ($row) use(&$chipList,$type) {
|
||||
if ($row['item_num'] > 0 && $row['chip_type'] == $type) {
|
||||
array_push($chipList, $row);
|
||||
$row = SqlHelper::ormSelectOne(
|
||||
myself()->_getSelfMysql(),
|
||||
't_chip',
|
||||
array(
|
||||
'idx' => $chipUniId,
|
||||
)
|
||||
);
|
||||
if ($row) {
|
||||
if ($row['account_id'] != myself()->_getAccountId()) {
|
||||
if (NftService::getChipBlance(myself()->_getOpenId(), $row['token_id']) <= 0) {
|
||||
$row = null;
|
||||
}
|
||||
}
|
||||
});
|
||||
return $chipList;
|
||||
}
|
||||
return $row;
|
||||
}
|
||||
|
||||
public static function update2($chipUniId, $fieldsKv){
|
||||
if (self::find($chipUniId)) {
|
||||
SqlHelper::update
|
||||
(myself()->_getSelfMysql(),
|
||||
't_chip',
|
||||
array(
|
||||
'idx' => $chipUniId,
|
||||
),
|
||||
$fieldsKv
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static function findByTokenId($tokenId)
|
||||
@ -48,6 +76,16 @@ class Chip extends BaseModel
|
||||
|
||||
public static function getChipList($cb)
|
||||
{
|
||||
SqlHelper::ormSelect(
|
||||
myself()->_getSelfMysql(),
|
||||
't_chip',
|
||||
array(
|
||||
'account_id' => myself()->_getAccountId()
|
||||
),
|
||||
function ($row) use($cb) {
|
||||
$cb($row);
|
||||
}
|
||||
);
|
||||
$sql = "select * from t_nft1155 where owner_address=:owner_address and token_id>10000000 and balance>0";
|
||||
$whereKv =array(
|
||||
'owner_address' => myself()->_getOpenId(),
|
||||
@ -60,6 +98,19 @@ class Chip extends BaseModel
|
||||
'token_id' => $nftDb['token_id'],
|
||||
)
|
||||
);
|
||||
if (!$row) {
|
||||
$itemMeta = mt\Item::get($nftDb['item_id']);
|
||||
if ($itemMeta) {
|
||||
self::addNftChip($itemMeta, $nftDb['token_id']);
|
||||
$row = SqlHelper::ormSelectOne(
|
||||
myself()->_getSelfMysql(),
|
||||
't_chip',
|
||||
array(
|
||||
'token_id' => $nftDb['token_id'],
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
if ($row){
|
||||
if (! $row['activate']){
|
||||
self::activateChip($row);
|
||||
@ -78,201 +129,135 @@ class Chip extends BaseModel
|
||||
}
|
||||
|
||||
private static function activateChip($row){
|
||||
if ($row['item_num'] <= 0) {
|
||||
return;
|
||||
}
|
||||
$itemMeta = mt\Item::get($row['item_id']);
|
||||
if (!$itemMeta) {
|
||||
return;
|
||||
}
|
||||
$randAttr = array();
|
||||
if (mt\Item::isRoleChipItem($itemMeta)) {
|
||||
$randAttr = mt\ChipAttr::generateAttrRandom($itemMeta,$row['chip_grade']);
|
||||
}
|
||||
if (mt\Item::isGunChipItem($itemMeta)) {
|
||||
$randAttr = mt\ChipAttr::generateAttrRandom($itemMeta,$row['chip_grade']);
|
||||
}
|
||||
if ($row['chip_grade'] >= 5){
|
||||
$lucky = ltrim(\services\FormulaService::getChipLuckyValue($row['chip_grade']),'-') ;
|
||||
$fieldsKv = array(
|
||||
'supper_state'=>1,
|
||||
'lucky_temporary'=>$lucky,
|
||||
'chip_type' => $itemMeta['sub_type'],
|
||||
'rand_attr' => json_encode($randAttr),
|
||||
'activate' => 1,
|
||||
'modifytime' => myself()->_getNowTime()
|
||||
);
|
||||
}else{
|
||||
$fieldsKv = array(
|
||||
'chip_type' => $itemMeta['sub_type'],
|
||||
'rand_attr' => json_encode($randAttr),
|
||||
'activate' => 1,
|
||||
'modifytime' => myself()->_getNowTime()
|
||||
);
|
||||
}
|
||||
$fieldsKv = array(
|
||||
'item_id' => $itemMeta['id'],
|
||||
'item_num' => 1,
|
||||
'state' => self::GETED_STATE,
|
||||
'rand_attr' => json_encode($randAttr),
|
||||
'chip_grade' => 1,
|
||||
'chip_type' => $itemMeta['sub_type'],
|
||||
'activate' => 1,
|
||||
'modifytime' => myself()->_getNowTime()
|
||||
);
|
||||
self::update($row['token_id'],$fieldsKv);
|
||||
}
|
||||
|
||||
public static function toDto($row)
|
||||
{
|
||||
$todayGetGold = $row['today_get_gold'];
|
||||
$lastGetGoldTime = $row['last_get_gold_time'];
|
||||
if (myself()->_getDaySeconds($lastGetGoldTime) > myself()->_getNowDaySeconds()) {
|
||||
$todayGetGold = 0;
|
||||
// $todayGetGold = $row['today_get_gold'];
|
||||
// $lastGetGoldTime = $row['last_get_gold_time'];
|
||||
// if (myself()->_getDaySeconds($lastGetGoldTime) > myself()->_getNowDaySeconds()) {
|
||||
// $todayGetGold = 0;
|
||||
// }
|
||||
$rand_attr = emptyReplace(json_decode($row['rand_attr'], true), array());
|
||||
$chipMeta = mt\ChipAttr::getAttrByItemId($row['item_id']);
|
||||
if ($chipMeta){
|
||||
array_unshift($rand_attr,array(
|
||||
'attr_id'=>$chipMeta['attr_id'],
|
||||
'val' => $chipMeta['lv'.$row['chip_grade']]
|
||||
));
|
||||
}
|
||||
$attr_pool = emptyReplace(json_decode($row['rand_attr'], true), array());
|
||||
$attrs = array();
|
||||
foreach ($attr_pool as $key=>$val){
|
||||
if ($val){
|
||||
$attr = mt\ChipAttr::getAttrById($val['attr_id'],$val['attr_type']);
|
||||
$newAttr = [
|
||||
|
||||
'attr_id' => $attr['attr_id'],
|
||||
'type' => 2,
|
||||
'val' => strval($attr['lv'.$row['chip_grade']]*$val['attr_pool_number']),
|
||||
// 'chip_name' => $attr['chip_name'],
|
||||
'chip_type' => $attr['chip_type'],
|
||||
'attr_num' => $attr['lv'.$row['chip_grade']],
|
||||
'attr_pool_num' => $val['attr_pool_number'],
|
||||
];
|
||||
array_push($attrs,$newAttr);
|
||||
}
|
||||
}
|
||||
$row['rand_attr'] = $attrs;
|
||||
$row['today_get_gold'] = $todayGetGold;
|
||||
$row['last_get_gold_time'] = $lastGetGoldTime;
|
||||
$row['chip_name'] = mt\Item::get($row['item_id'])?mt\Item::get($row['item_id'])['name']:'XXX';
|
||||
// $row['belong_to_item_id'] = self::belongsToWhereOld($row);
|
||||
$dto = array(
|
||||
'idx'=> $row['idx'],
|
||||
'token_id'=> $row['token_id'],
|
||||
'item_id'=> $row['item_id'],
|
||||
'chip_grade'=> $row['chip_grade'],
|
||||
'chip_type'=> $row['chip_type'],
|
||||
'state'=> $row['state'],
|
||||
'inlay_state'=> $row['inlay_state'],
|
||||
'rand_attr'=> $rand_attr,
|
||||
);
|
||||
$dto['chip_name'] = mt\Item::get($row['item_id'])?mt\Item::get($row['item_id'])['name']:'XXX';
|
||||
$nft_address = '';
|
||||
if ($row['token_id']){
|
||||
if ($dto['token_id']){
|
||||
$nft_address = SERVER_ENV == _ONLINE ? '0x73482411443E87CAC124C12A10B34e9Aaa2De168' : '0x26b4AFb60d6C903165150C6F0AA14F8016bE4aec';
|
||||
}
|
||||
$row['nft_address'] = $nft_address;
|
||||
return $row;
|
||||
$dto['nft_address'] = $nft_address;
|
||||
$dto['tags'] = '';
|
||||
return $dto;
|
||||
}
|
||||
|
||||
public static function belongsToWhere($row){
|
||||
$tokenId = $row['token_id'];
|
||||
$sql = "select * from t_chip_plugin where chip1=:tokenId or chip2=:tokenId or chip3=:tokenId or chip4=:tokenId limit 1";
|
||||
$whereKv =array(
|
||||
'tokenId' => $tokenId
|
||||
);
|
||||
$ChipPluginDb = myself()->_getMarketMysql()->execQuery($sql,$whereKv);
|
||||
if (!$ChipPluginDb){
|
||||
return 0;
|
||||
}
|
||||
switch ($row['chip_type']){
|
||||
case 1:{
|
||||
$heroDb = Hero::findByTokenId2($ChipPluginDb['token_id']);
|
||||
if($heroDb){
|
||||
return $heroDb['hero_id'];
|
||||
}else{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 2:{
|
||||
$gunDb = Gun::findByTokenId2($ChipPluginDb['token_id']);
|
||||
if($gunDb){
|
||||
return $gunDb['gun_id'];
|
||||
}else{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
public static function belongsToWhereOld($row){
|
||||
switch ($row['chip_type']){
|
||||
case 1:{
|
||||
$heroDb = array();
|
||||
Hero::getHeroList(function ($hero) use ($row,&$heroDb) {
|
||||
if ($hero['chip_ids'] && strstr($hero['chip_ids']."|",strval($row['idx']."|")) ){
|
||||
$heroDb = $hero;
|
||||
}
|
||||
});
|
||||
if($heroDb){
|
||||
return $heroDb['hero_id'];
|
||||
}else{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 2:{
|
||||
$gunDb = array();
|
||||
Gun::getGunList(function ($gun) use($row,&$gunDb) {
|
||||
if ($gun['chip_ids'] && strstr($gun['chip_ids']."|",strval($row['idx']."|")) ){
|
||||
$gunDb = $gun;
|
||||
}
|
||||
});
|
||||
if($gunDb){
|
||||
return $gunDb['gun_id'];
|
||||
}else{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function addChip($itemId, $tokenId)
|
||||
public static function addFreeChip($itemMeta)
|
||||
{
|
||||
|
||||
return self::internalAddItem(
|
||||
myself()->_getSelfMysql(),
|
||||
$itemMeta,
|
||||
myself()->_getAccountId(),
|
||||
null,
|
||||
self::FREE_STATE);
|
||||
}
|
||||
|
||||
public static function addChip($itemMeta)
|
||||
{
|
||||
|
||||
return self::internalAddItem(
|
||||
myself()->_getSelfMysql(),
|
||||
$itemMeta,
|
||||
myself()->_getAccountId(),
|
||||
null,
|
||||
self::GETED_STATE);
|
||||
}
|
||||
|
||||
public static function addNftChip($itemMeta,$tokenId)
|
||||
{
|
||||
|
||||
return self::internalAddItem(
|
||||
myself()->_getMysql($tokenId),
|
||||
$itemId,
|
||||
1,
|
||||
$itemMeta,
|
||||
null,
|
||||
$tokenId);
|
||||
$tokenId,
|
||||
self::GETED_STATE);
|
||||
}
|
||||
|
||||
public static function internalAddItem($conn, $itemId, $itemNum, $accountId, $tokenId)
|
||||
public static function internalAddItem($conn, $itemMeta, $accountId, $tokenId,$state)
|
||||
{
|
||||
$grade = rand(1,4);//随机一个等级
|
||||
if (myself()->_isVirtualItem($itemId)) {
|
||||
return;
|
||||
}
|
||||
if ($itemNum <= 0) {
|
||||
return;
|
||||
}
|
||||
$itemMeta = mt\Item::get($itemId);
|
||||
if (!$itemMeta) {
|
||||
return;
|
||||
}
|
||||
$randAttr = array();
|
||||
if (mt\Item::isRoleChipItem($itemMeta)) {
|
||||
$randAttr = mt\ChipAttr::generateAttrRandom($itemMeta,$grade);
|
||||
}
|
||||
if (mt\Item::isGunChipItem($itemMeta)) {
|
||||
$randAttr = mt\ChipAttr::generateAttrRandom($itemMeta,$grade);
|
||||
}
|
||||
$fieldsKv = array(
|
||||
'item_id' => $itemId,
|
||||
'item_num' => 1,
|
||||
'rand_attr' => json_encode($randAttr),
|
||||
'chip_grade' => $grade,
|
||||
'chip_type' => $itemMeta['sub_type'],
|
||||
'labour' => 0,
|
||||
'createtime' => myself()->_getNowTime(),
|
||||
'modifytime' => myself()->_getNowTime()
|
||||
);
|
||||
if ($accountId) {
|
||||
$fieldsKv['account_id'] = $accountId;
|
||||
}
|
||||
if ($tokenId) {
|
||||
$fieldsKv['token_id'] = $tokenId;
|
||||
}
|
||||
if (myself()->_isVirtualItem($itemMeta['id'])) {
|
||||
return;
|
||||
}
|
||||
$chipMeta = ChipAttr::getAttrByItemId($itemMeta['id']);
|
||||
if (!$chipMeta){
|
||||
return;
|
||||
}
|
||||
// $randAttr = array();
|
||||
// if (mt\Item::isRoleChipItem($itemMeta)) {
|
||||
// $randAttr = mt\ChipAttr::generateAttrRandom($itemMeta,$grade);
|
||||
// }
|
||||
// if (mt\Item::isGunChipItem($itemMeta)) {
|
||||
// $randAttr = mt\ChipAttr::generateAttrRandom($itemMeta,$grade);
|
||||
// }
|
||||
$randAttr = array();
|
||||
$fieldsKv = array(
|
||||
'item_id' => $itemMeta['id'],
|
||||
'item_num' => 1,
|
||||
'state' => $state,
|
||||
'rand_attr' => json_encode($randAttr),
|
||||
'chip_grade' => 1,
|
||||
'chip_type' => $itemMeta['sub_type'],
|
||||
'activate' => 1,
|
||||
'createtime' => myself()->_getNowTime(),
|
||||
'modifytime' => myself()->_getNowTime()
|
||||
);
|
||||
if ($accountId) {
|
||||
$fieldsKv['account_id'] = $accountId;
|
||||
}
|
||||
if ($tokenId) {
|
||||
$fieldsKv['token_id'] = $tokenId;
|
||||
}
|
||||
|
||||
SqlHelper::insert
|
||||
($conn,
|
||||
't_chip',
|
||||
$fieldsKv
|
||||
);
|
||||
SqlHelper::insert
|
||||
($conn,
|
||||
't_chip',
|
||||
$fieldsKv
|
||||
);
|
||||
}
|
||||
|
||||
public static function getChipByTokenId($token_ids){
|
||||
@ -308,53 +293,40 @@ class Chip extends BaseModel
|
||||
);
|
||||
}
|
||||
|
||||
public static function updateChipInlayState($token_id,$state){
|
||||
return SqlHelper::update(
|
||||
myself()->_getSelfMysql(),
|
||||
't_chip',
|
||||
['token_id' => $token_id],
|
||||
['inlay_state'=>$state]
|
||||
);
|
||||
public static function updateInlayState($idx,$page){
|
||||
$row = self::find($idx);
|
||||
if ($row){
|
||||
$inlayState = array_filter (explode("|",$row['inlay_state']) );
|
||||
if (in_array($page,$inlayState)){
|
||||
unset($inlayState[array_search($page,$inlayState)]);
|
||||
}else{
|
||||
array_push($inlayState,$page);
|
||||
}
|
||||
self::update2($idx,array(
|
||||
'inlay_state' => implode('|',$inlayState)
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static function getChipInlay($type){
|
||||
return SqlHelper::ormSelect(
|
||||
myself()->_getSelfMysql(),
|
||||
't_chip',
|
||||
array(
|
||||
'chip_type' => $type,
|
||||
'supper_state' => 0,
|
||||
'inlay_state' => 0,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// public static function deleteChip($whereKv){
|
||||
// public static function updateRandAttr($accountId,$chip){
|
||||
// $attr_pool = mt\ChipAttr::generateOneAttr($chip['chip_type']);
|
||||
// $rand_attr = emptyReplace(json_decode($chip['rand_attr'], true), array());
|
||||
// array_push($rand_attr,$attr_pool);
|
||||
// $fieldsKv = [
|
||||
// 'rand_attr'=>json_encode($rand_attr)
|
||||
// ];
|
||||
// SqlHelper::update(
|
||||
// myself()->_getMarketMysql(),
|
||||
// 't_nft',
|
||||
// $whereKv,
|
||||
// ['deleted'=>1]
|
||||
// myself()->_getMysql($accountId),
|
||||
// 't_chip',
|
||||
// array(
|
||||
// 'token_id' => $chip['token_id'],
|
||||
// ),
|
||||
// $fieldsKv
|
||||
// );
|
||||
// }
|
||||
|
||||
public static function updateRandAttr($accountId,$chip){
|
||||
$attr_pool = mt\ChipAttr::generateOneAttr($chip['chip_type']);
|
||||
$rand_attr = emptyReplace(json_decode($chip['rand_attr'], true), array());
|
||||
array_push($rand_attr,$attr_pool);
|
||||
$fieldsKv = [
|
||||
'rand_attr'=>json_encode($rand_attr)
|
||||
];
|
||||
SqlHelper::update(
|
||||
myself()->_getMysql($accountId),
|
||||
't_chip',
|
||||
array(
|
||||
'token_id' => $chip['token_id'],
|
||||
),
|
||||
$fieldsKv
|
||||
);
|
||||
}
|
||||
|
||||
public static function getChipAttr($chip_ids){
|
||||
$data = ['attr_chip'=>[],'chip_core'=>[]];
|
||||
if (! $chip_ids) {
|
||||
|
184
webapp/models/ChipPage.php
Normal file
184
webapp/models/ChipPage.php
Normal file
@ -0,0 +1,184 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace models;
|
||||
require_once('models/Chip.php');
|
||||
require_once('mt/ChipAttr.php');
|
||||
require_once('services/ChipPageService.php');
|
||||
|
||||
use mt\ChipAttr;
|
||||
use phpcommon\SqlHelper;
|
||||
use services\ChipPageService;
|
||||
|
||||
class ChipPage extends BaseModel
|
||||
{
|
||||
|
||||
public static function find($page){
|
||||
$row = SqlHelper::ormSelectOne(
|
||||
myself()->_getSelfMysql(),
|
||||
't_chip_page',
|
||||
array(
|
||||
'account_id'=> myself()->_getAccountId(),
|
||||
'page_id' => $page
|
||||
)
|
||||
);
|
||||
if (!$row){
|
||||
return null;
|
||||
}
|
||||
return $row;
|
||||
}
|
||||
|
||||
public static function getList($cb){
|
||||
SqlHelper::ormSelect(
|
||||
myself()->_getSelfMysql(),
|
||||
't_chip_page',
|
||||
array(
|
||||
'account_id'=> myself()->_getAccountId(),
|
||||
),
|
||||
function ($row) use($cb) {
|
||||
$cb($row);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
public static function toDto($row){
|
||||
return array(
|
||||
'idx' => $row['idx'],
|
||||
'account_id' => $row['account_id'],
|
||||
'page_name' => $row['page_name'],
|
||||
'page_id' => $row['page_id'],
|
||||
'createtime' => $row['createtime'],
|
||||
);
|
||||
}
|
||||
|
||||
public static function toDtoInfo($row){
|
||||
$data = emptyReplace(json_decode($row['data'], true), array());
|
||||
foreach ($data as &$value){
|
||||
$chipDb = Chip::find($value['chip_id']);
|
||||
if ( !$chipDb ) {
|
||||
$value['chip_id'] = 0;
|
||||
}
|
||||
}
|
||||
self::update($row['page_id'],array(
|
||||
'data' => json_encode($data)
|
||||
));
|
||||
$newRow = self::find($row['page_id']);
|
||||
$newData = emptyReplace(json_decode($newRow['data'], true), array());
|
||||
$attrs = array();
|
||||
foreach ($newData as $key=>$value){
|
||||
$newData[$key]['item_id'] = 0;
|
||||
if ($value['chip_id']){
|
||||
$chipDb = Chip::find($value['chip_id']);
|
||||
$newData[$key]['item_id'] = $chipDb['item_id'];
|
||||
$chipAttrMeta = ChipAttr::getAttrByItemId($chipDb['item_id']);
|
||||
$rand_attr = emptyReplace(json_decode($chipDb['rand_attr'], true), array());
|
||||
array_push($attrs,array(
|
||||
'attr_id'=>$chipAttrMeta['attr_id'],
|
||||
'val'=>$chipAttrMeta['lv'.$chipDb['chip_grade']],
|
||||
));
|
||||
foreach ($rand_attr as $val){
|
||||
array_push($attrs,$val);
|
||||
}
|
||||
}
|
||||
}
|
||||
$item = [];
|
||||
foreach ($attrs as $k=>$v){
|
||||
if (!isset($item[$v['attr_id']])){
|
||||
$item[$v['attr_id']] = $v;
|
||||
}else{
|
||||
$item[$v['attr_id']]['val']+= $v['val'];
|
||||
}
|
||||
}
|
||||
$info = array(
|
||||
'idx' => $newRow['idx'],
|
||||
'page_id' => $newRow['page_id'],
|
||||
'page_name' => $newRow['page_name'],
|
||||
'data' => $newData,
|
||||
'attr' => $item
|
||||
);
|
||||
return $info;
|
||||
}
|
||||
|
||||
public static function updatePage($page,$slot_id,$chip_id){
|
||||
$row = self::find($page);
|
||||
$data = emptyReplace(json_decode($row['data'], true), array());
|
||||
foreach ($data as &$value){
|
||||
if ($value['slot_id'] == $slot_id){
|
||||
$value['chip_id'] = $chip_id;
|
||||
}
|
||||
}
|
||||
SqlHelper::update
|
||||
(myself()->_getSelfMysql(),
|
||||
't_chip_page',
|
||||
array(
|
||||
'account_id'=> myself()->_getAccountId(),
|
||||
'page_id' => $page
|
||||
),
|
||||
array(
|
||||
'data'=> json_encode($data)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public static function update($page,$fieldsKv){
|
||||
SqlHelper::update
|
||||
(myself()->_getSelfMysql(),
|
||||
't_chip_page',
|
||||
array(
|
||||
'account_id'=> myself()->_getAccountId(),
|
||||
'page_id' => $page
|
||||
),
|
||||
$fieldsKv
|
||||
);
|
||||
}
|
||||
|
||||
public static function addChipPage(){
|
||||
$data = array();
|
||||
$userInfo = myself()->_getOrmUserInfo();
|
||||
for ($i=1;$i <= ChipPageService::MAX_CHIP_SLOT_NUM;$i++){
|
||||
if ($i <= $userInfo['level']){
|
||||
array_push(
|
||||
$data,
|
||||
array(
|
||||
'slot_id'=>$i,
|
||||
'state'=>1,
|
||||
'chip_id'=>0,
|
||||
)
|
||||
);
|
||||
}else{
|
||||
array_push(
|
||||
$data,
|
||||
array(
|
||||
'slot_id'=>$i,
|
||||
'state'=>0,
|
||||
'chip_id'=>0,
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
$rows = SqlHelper::ormSelect(
|
||||
myself()->_getSelfMysql(),
|
||||
't_chip_page',
|
||||
array(
|
||||
'account_id'=> myself()->_getAccountId()
|
||||
)
|
||||
);
|
||||
$page_id = 1;
|
||||
if ($rows){
|
||||
$page_id = count($rows)+1;
|
||||
}
|
||||
$info = array(
|
||||
'account_id' => myself()->_getAccountId(),
|
||||
'page_name' => 'page'.$page_id,
|
||||
'page_id' => $page_id,
|
||||
'data' => json_encode($data),
|
||||
'createtime' => myself()->_getNowTime(),
|
||||
'modifytime' => myself()->_getNowTime(),
|
||||
);
|
||||
SqlHelper::insert(
|
||||
myself()->_getSelfMysql(),
|
||||
't_chip_page',
|
||||
$info
|
||||
);
|
||||
}
|
||||
}
|
61
webapp/models/Emoji.php
Normal file
61
webapp/models/Emoji.php
Normal file
@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace models;
|
||||
|
||||
use mt;
|
||||
use phpcommon\SqlHelper;
|
||||
class Emoji extends BaseModel
|
||||
{
|
||||
private static function defaultEmoji(){
|
||||
$default = array();
|
||||
$meta = mt\Parameter::getByName('emoji_default');
|
||||
if ($meta){
|
||||
$default = explode('|',$meta['param_value']) ;
|
||||
}
|
||||
return $default;
|
||||
}
|
||||
|
||||
public static function emojiList(){
|
||||
$data = self::DefaultEmoji();
|
||||
//查询用户新获得的表情(t_emoji 表)
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
public static function getUseEmoji(){
|
||||
$row = SqlHelper::ormSelectOne(
|
||||
myself()->_getSelfMysql(),
|
||||
't_user_use_emoji',
|
||||
array(
|
||||
'account_id'=> myself()->_getAccountId()
|
||||
)
|
||||
);
|
||||
$value = array();
|
||||
if ($row && $row['value']){
|
||||
$value = explode('|',$row['value']) ;
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
public static function updateEmoji($fields){
|
||||
SqlHelper::upsert
|
||||
(myself()->_getSelfMysql(),
|
||||
't_user_use_emoji',
|
||||
array(
|
||||
'account_id' => myself()->_getAccountId(),
|
||||
),
|
||||
array(
|
||||
'value' => $fields,
|
||||
'modifytime' => myself()->_getNowTime(),
|
||||
),
|
||||
array(
|
||||
'account_id' => myself()->_getAccountId(),
|
||||
'value' => $fields,
|
||||
'createtime' => myself()->_getNowTime(),
|
||||
'modifytime' => myself()->_getNowTime(),
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
53
webapp/models/FragmentRecord.php
Normal file
53
webapp/models/FragmentRecord.php
Normal file
@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
namespace models;
|
||||
|
||||
use mt;
|
||||
use phpcommon\SqlHelper;
|
||||
|
||||
class FragmentRecord extends BaseModel {
|
||||
|
||||
const HERO_FRAGMENT = 1111;
|
||||
const GUN_FRAGMENT = 2222;
|
||||
|
||||
public static function getGamesNum($param)
|
||||
{
|
||||
|
||||
$row = SqlHelper::ormSelectOne
|
||||
(myself()->_getSelfMysql(),
|
||||
't_fragment_record',
|
||||
array(
|
||||
'account_id' => myself()->_getAccountId(),
|
||||
'param' => $param,
|
||||
)
|
||||
);
|
||||
$num = 0;
|
||||
if ($row) {
|
||||
$num = $row['value'];
|
||||
}
|
||||
return $num;
|
||||
}
|
||||
|
||||
public static function upsertGamesNum($param,$value){
|
||||
SqlHelper::upsert
|
||||
(myself()->_getSelfMysql(),
|
||||
't_fragment_record',
|
||||
array(
|
||||
'account_id' => myself()->_getAccountId(),
|
||||
'param' => $param
|
||||
),
|
||||
array(
|
||||
'value' => $value,
|
||||
'modifytime' => myself()->_getNowDaySeconds()
|
||||
),
|
||||
array(
|
||||
'account_id' => myself()->_getAccountId(),
|
||||
'param' => $param,
|
||||
'value' => 1,
|
||||
'createtime' => myself()->_getNowTime(),
|
||||
'modifytime' => myself()->_getNowDaySeconds()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
@ -20,7 +20,7 @@ use models\ChipPlugin;
|
||||
class Gun extends BaseModel {
|
||||
|
||||
const GETED_STATE = 0;
|
||||
const TRY_STATE = 1;
|
||||
const FREE_STATE = 1;
|
||||
|
||||
const NO_LOCK = 0;
|
||||
const LEVEL_LOCK = 1;
|
||||
@ -57,6 +57,11 @@ class Gun extends BaseModel {
|
||||
'idx' => $gunUniId,
|
||||
)
|
||||
);
|
||||
if ($row) {
|
||||
if ($row['account_id'] != myself()->_getAccountId()) {
|
||||
$row = null;
|
||||
}
|
||||
}
|
||||
return $row;
|
||||
}
|
||||
|
||||
@ -151,6 +156,7 @@ class Gun extends BaseModel {
|
||||
'account_id' => myself()->_getAccountId()
|
||||
),
|
||||
function ($row) use($cb) {
|
||||
$row['tags'] = '';
|
||||
$cb($row);
|
||||
}
|
||||
);
|
||||
@ -163,6 +169,22 @@ class Gun extends BaseModel {
|
||||
'token_id' => $nftDb['token_id'],
|
||||
)
|
||||
);
|
||||
|
||||
//将NFT表的数据同步到中心化英雄表 (以后可能删除)
|
||||
if (!$row) {
|
||||
$itemMeta = mt\Item::get($nftDb['item_id']);
|
||||
if ($itemMeta) {
|
||||
self::addNftGun($itemMeta, $nftDb['token_id']);
|
||||
$row = SqlHelper::ormSelectOne(
|
||||
myself()->_getSelfMysql(),
|
||||
't_gun',
|
||||
array(
|
||||
'token_id' => $nftDb['token_id'],
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if ($row){
|
||||
if ( ! $row['activate']){
|
||||
self::activateGun($row);
|
||||
@ -174,6 +196,7 @@ class Gun extends BaseModel {
|
||||
)
|
||||
);
|
||||
}
|
||||
$row['tags'] = $nftDb['tags'];
|
||||
$cb($row);
|
||||
}
|
||||
}
|
||||
@ -201,7 +224,6 @@ class Gun extends BaseModel {
|
||||
'lock_type' => self::NO_LOCK,
|
||||
'unlock_time' => 0,
|
||||
'unlock_trade_time' => 0,
|
||||
'labour' => 0,
|
||||
'activate' => 1,
|
||||
'modifytime' => myself()->_getNowTime()
|
||||
);
|
||||
@ -250,7 +272,6 @@ class Gun extends BaseModel {
|
||||
$todayMissionGetCeg = 0;
|
||||
}
|
||||
$gunLucky = \services\FormulaService::Weapon_Advanced_Lucky_Value($row['quality']);
|
||||
$chipIds = ChipPlugin::getInlayChip($row['token_id']);
|
||||
$dto = array(
|
||||
'idx' => $row['idx'],
|
||||
'token_id' => $row['token_id'],
|
||||
@ -259,15 +280,12 @@ class Gun extends BaseModel {
|
||||
'gun_lv' => $row['gun_lv'],
|
||||
'state' => $row['state'],
|
||||
'quality' => $row['quality'],
|
||||
'lucky' => strval($gunLucky),
|
||||
'durability' => $row['durability'],
|
||||
'ceg_uplimit' => 0,
|
||||
'pve_ceg_uplimit' => 0,
|
||||
'raw_pve_ceg_uplimit' => 0,
|
||||
'attr_base' => $baseAttr,
|
||||
'attr_pro' => $attrPro,
|
||||
'attr_chip' => Chip::getChipAttr($chipIds)['attr_chip'],
|
||||
'chip_core' => Chip::getChipAttr($chipIds)['chip_core'],
|
||||
'try_count' => $row['try_count'],
|
||||
'current_pvp_get_ceg' => $todayGetGold / 100,
|
||||
'last_pvp_get_ceg_time' => $lastGetGoldTime,
|
||||
@ -280,10 +298,12 @@ class Gun extends BaseModel {
|
||||
'unlock_lefttime' => max(0,
|
||||
$unlockTime - myself()->_getNowTime()),
|
||||
'unlock_trade_time' => $row['unlock_trade_time'],
|
||||
'chip_ids' => $chipIds,
|
||||
'chip_strength_sum' => strval(Chip::getChipMaxStrength($row['chip_ids'],2)), //计算ceg上限所需参数
|
||||
'offer_reward_state' => 0,
|
||||
'labour' => $row['labour'],
|
||||
'tags' => isset($row['tags'])?$row['tags']:'',
|
||||
|
||||
'lucky' => strval($gunLucky),
|
||||
'chip_strength_sum' => 0,
|
||||
'labour' => 0,
|
||||
);
|
||||
$dto['durability_max'] = strval(round(FormulaService::Weapon_NFT_Maximum_Durability($dto['quality'],$dto['lucky']),3));
|
||||
$dto['pvp_ceg_uplimit'] = strval( round(FormulaService::getWeaponPvpDailyCegUpLimit($dto),2) );
|
||||
@ -298,25 +318,37 @@ class Gun extends BaseModel {
|
||||
return $dto;
|
||||
}
|
||||
|
||||
public static function addFreeGun($gunMeta)
|
||||
{
|
||||
return self::internalAddGun(
|
||||
myself()->_getSelfMysql(),
|
||||
$gunMeta,
|
||||
myself()->_getAccountId(),
|
||||
null,
|
||||
self::FREE_STATE);
|
||||
}
|
||||
|
||||
public static function addGun($gunMeta)
|
||||
{
|
||||
return self::internalAddGun(
|
||||
myself()->_getSelfMysql(),
|
||||
$gunMeta,
|
||||
myself()->_getAccountId(),
|
||||
null);
|
||||
null,
|
||||
self::GETED_STATE);
|
||||
}
|
||||
|
||||
// public static function addNftGun($gunMeta, $tokenId)
|
||||
// {
|
||||
// return self::internalAddGun(
|
||||
// myself()->_getMysql($tokenId),
|
||||
// $gunMeta,
|
||||
// null,
|
||||
// $tokenId);
|
||||
// }
|
||||
public static function addNftGun($gunMeta, $tokenId)
|
||||
{
|
||||
return self::internalAddGun(
|
||||
myself()->_getMysql($tokenId),
|
||||
$gunMeta,
|
||||
null,
|
||||
$tokenId,
|
||||
self::GETED_STATE);
|
||||
}
|
||||
|
||||
private static function internalAddGun($conn, $gunMeta, $accountId, $tokenId)
|
||||
private static function internalAddGun($conn, $gunMeta, $accountId, $tokenId,$state)
|
||||
{
|
||||
$randAttr = array();
|
||||
{
|
||||
@ -329,13 +361,12 @@ class Gun extends BaseModel {
|
||||
'gun_id' => $gunMeta['id'],
|
||||
'gun_lv' => 1,
|
||||
'quality' => 1,
|
||||
'state' => self::GETED_STATE,
|
||||
'state' => $state,
|
||||
'durability' => FormulaService::Weapon_NFT_Maximum_Durability(1,FormulaService::Weapon_Advanced_Lucky_Value(1)),
|
||||
'rand_attr' => json_encode($randAttr),
|
||||
'lock_type' => self::NO_LOCK,
|
||||
'unlock_time' => 0,
|
||||
'unlock_trade_time' => 0,
|
||||
'labour' => 0,
|
||||
'activate' => 1,
|
||||
'createtime' => myself()->_getNowTime(),
|
||||
'modifytime' => myself()->_getNowTime()
|
||||
@ -377,7 +408,7 @@ class Gun extends BaseModel {
|
||||
'gun_id' => $gunMeta['id'],
|
||||
'gun_lv' => 1,
|
||||
'quality' => 1,
|
||||
'state' => self::TRY_STATE,
|
||||
'state' => self::FREE_STATE,
|
||||
'try_count' => $tryCount,
|
||||
'durability' => $gunMeta['init_durability'],
|
||||
'rand_attr' => json_encode($randAttr),
|
||||
@ -667,9 +698,7 @@ class Gun extends BaseModel {
|
||||
$todayPveGetCeg = 0;
|
||||
}
|
||||
$gunLucky = \services\FormulaService::Weapon_Advanced_Lucky_Value($row['quality']);
|
||||
$chipIds = ChipPlugin::getInlayChip($row['token_id']);
|
||||
$attr_chip= Chip::getChipAttr($chipIds)['attr_chip'];
|
||||
$chip_core= Chip::getChipAttr($chipIds)['chip_core'];
|
||||
|
||||
|
||||
$rand_attr = $baseAttr;
|
||||
if ($attrPro){
|
||||
@ -681,20 +710,7 @@ class Gun extends BaseModel {
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($attr_chip){
|
||||
$rand_attr = self::_mergeArr(array_merge($rand_attr,$attr_chip));
|
||||
}
|
||||
if ($chip_core){
|
||||
$coreAttr = array();
|
||||
foreach ($chip_core as $value){
|
||||
array_push($coreAttr,array(
|
||||
'attr_id'=>$value['attr_id'],
|
||||
'type'=>$value['attr_add_type'],
|
||||
'val'=>$value['attr_number'],
|
||||
));
|
||||
}
|
||||
$rand_attr = self::_mergeArr(array_merge($rand_attr,$coreAttr));
|
||||
}
|
||||
|
||||
$info = array(
|
||||
'idx' => $row['idx'],
|
||||
'token_id' => $row['token_id'],
|
||||
@ -707,10 +723,9 @@ class Gun extends BaseModel {
|
||||
'lucky' => strval($gunLucky),
|
||||
'durability' => $row['durability'],
|
||||
'rand_attr' => array_values($rand_attr),
|
||||
'chip_core' => $chip_core ? $coreAttr : $chip_core,
|
||||
'current_pvp_get_ceg' => $todayGetGold / 100,
|
||||
'current_pve_get_ceg' => $todayPveGetCeg / 100,
|
||||
'chip_ids' => $chipIds,
|
||||
'chip_ids' => $row['chip_ids'],
|
||||
'chip_strength_sum' => strval(Chip::getChipMaxStrength($row['chip_ids'],2)), //计算ceg上限所需参数
|
||||
'labour' => $row['labour'],
|
||||
);
|
||||
|
@ -5,6 +5,7 @@ namespace models;
|
||||
require_once('mt/Hero.php');
|
||||
require_once('mt/HeroLevelAttr.php');
|
||||
require_once('mt/HeroQuality.php');
|
||||
require_once('mt/HeroLevel.php');
|
||||
require_once('mt/AttrHelper.php');
|
||||
require_once('mt/Item.php');
|
||||
require_once('mt/SkillCommon.php');
|
||||
@ -27,13 +28,17 @@ use models\ChipPlugin;
|
||||
class Hero extends BaseModel {
|
||||
|
||||
const GETED_STATE = 0;
|
||||
const TRY_STATE = 1;
|
||||
const FREE_STATE = 1;
|
||||
|
||||
const NO_LOCK = 0;
|
||||
const LEVEL_LOCK = 1;
|
||||
const QUALITY_LOCK = 2;
|
||||
const SEND_LOCK = 3;
|
||||
const COST_LOCK = 4;
|
||||
//需要材料所需等级
|
||||
const LV_1 = 4;
|
||||
const LV_2 = 9;
|
||||
const LV_3 = 14;
|
||||
|
||||
public static function find($heroUniId)
|
||||
{
|
||||
@ -48,6 +53,11 @@ class Hero extends BaseModel {
|
||||
'idx' => $heroUniId,
|
||||
)
|
||||
);
|
||||
if ($row) {
|
||||
if ($row['account_id'] != myself()->_getAccountId()) {
|
||||
$row = null;
|
||||
}
|
||||
}
|
||||
return $row;
|
||||
}
|
||||
|
||||
@ -137,6 +147,7 @@ class Hero extends BaseModel {
|
||||
'account_id' => myself()->_getAccountId()
|
||||
),
|
||||
function ($row) use($cb) {
|
||||
$row['tags'] = '';
|
||||
$cb($row);
|
||||
}
|
||||
);
|
||||
@ -149,6 +160,22 @@ class Hero extends BaseModel {
|
||||
'token_id' => $nftDb['token_id'],
|
||||
)
|
||||
);
|
||||
|
||||
//将NFT表的数据同步到中心化英雄表 (以后可能删除)
|
||||
if (!$row) {
|
||||
$itemMeta = mt\Item::get($nftDb['item_id']);
|
||||
if ($itemMeta) {
|
||||
self::addNftHero($itemMeta, $nftDb['token_id']);
|
||||
$row = SqlHelper::ormSelectOne(
|
||||
myself()->_getSelfMysql(),
|
||||
't_hero',
|
||||
array(
|
||||
'token_id' => $nftDb['token_id'],
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if ($row) {
|
||||
if (!$row['activate']) {
|
||||
self::activateHero($row);
|
||||
@ -160,6 +187,7 @@ class Hero extends BaseModel {
|
||||
)
|
||||
);
|
||||
}
|
||||
$row['tags'] = $nftDb['tags'];
|
||||
$cb($row);
|
||||
}
|
||||
}
|
||||
@ -183,8 +211,6 @@ class Hero extends BaseModel {
|
||||
'lock_type' => self::NO_LOCK,
|
||||
'unlock_time' => 0,
|
||||
'unlock_trade_time' => 0,
|
||||
'skill_points' => 0,
|
||||
'labour' => 0,
|
||||
'activate' => 1,
|
||||
'modifytime' => myself()->_getNowTime()
|
||||
);
|
||||
@ -206,24 +232,30 @@ class Hero extends BaseModel {
|
||||
$unlockTime = $row['unlock_time'];
|
||||
}
|
||||
|
||||
$qualityMeta = mt\HeroQuality::getByQuality($row['quality']);
|
||||
$levelMeta = mt\HeroLevel::getByLevel($row['hero_lv']);
|
||||
$todayGetGold = $row['today_get_gold'];
|
||||
$lastGetGoldTime = $row['last_get_gold_time'];
|
||||
if (myself()->_getDaySeconds($lastGetGoldTime) <
|
||||
myself()->_getNowDaySeconds()) {
|
||||
$todayGetGold = 0;
|
||||
}
|
||||
$todayPveGetCeg = $row['today_pve_get_ceg'];
|
||||
$lastPveGetCegTime = $row['last_pve_get_ceg_time'];
|
||||
if (myself()->_getDaySeconds($lastPveGetCegTime) <
|
||||
myself()->_getNowDaySeconds()) {
|
||||
$todayPveGetCeg = 0;
|
||||
}
|
||||
$todayMissionGetCeg = $row['today_mission_get_ceg'];
|
||||
$lastMissionGetCegTime = $row['last_mission_get_ceg_time'];
|
||||
if (myself()->_getDaySeconds($lastMissionGetCegTime) < myself()->_getNowDaySeconds()) {
|
||||
$todayMissionGetCeg = 0;
|
||||
|
||||
{
|
||||
$todayPveGetCeg = $row['today_pve_get_ceg'];
|
||||
$lastPveGetCegTime = $row['last_pve_get_ceg_time'];
|
||||
if (myself()->_getDaySeconds($lastPveGetCegTime) <
|
||||
myself()->_getNowDaySeconds()) {
|
||||
$todayPveGetCeg = 0;
|
||||
}
|
||||
$todayMissionGetCeg = $row['today_mission_get_ceg'];
|
||||
$lastMissionGetCegTime = $row['last_mission_get_ceg_time'];
|
||||
if (myself()->_getDaySeconds($lastMissionGetCegTime) < myself()->_getNowDaySeconds()) {
|
||||
$todayMissionGetCeg = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
$baseAttr=[];
|
||||
$attrPro=[];
|
||||
$heroMeta = mt\Hero::get($row['hero_id']);
|
||||
@ -239,15 +271,6 @@ class Hero extends BaseModel {
|
||||
}
|
||||
$attrPro = self::mergeAttrPro($baseAttr,$attrPro1,$attrPro2);
|
||||
}
|
||||
$skill_common = explode("|",$row['skill_common']);
|
||||
$attr_skill = [];
|
||||
foreach ($skill_common as $val){
|
||||
$item = mt\SkillCommon::getAttrBySkillCommon($val);
|
||||
if ($item){
|
||||
array_push($attr_skill,$item);
|
||||
}
|
||||
}
|
||||
$chipIds = ChipPlugin::getInlayChip($row['token_id']);
|
||||
$heroLucky = \services\FormulaService::Hero_Advanced_Lucky_Value($row['quality']);
|
||||
$dto = array(
|
||||
'idx' => $row['idx'],
|
||||
@ -263,29 +286,30 @@ class Hero extends BaseModel {
|
||||
'skill_lv2' => $row['skill_lv2'],
|
||||
'attr_base' => $baseAttr,
|
||||
'attr_pro' => $attrPro,
|
||||
'attr_skill' => $attr_skill,
|
||||
'attr_chip' => Chip::getChipAttr($chipIds)['attr_chip'],
|
||||
'chip_core' => Chip::getChipAttr($chipIds)['chip_core'],
|
||||
'try_count' => $row['try_count'],
|
||||
'lock_type' => $lockType,
|
||||
'unlock_time' => $unlockTime,
|
||||
'unlock_lefttime' => max(0,
|
||||
$unlockTime - myself()->_getNowTime()),
|
||||
'current_get_gold' => $todayGetGold / 100,
|
||||
'last_get_gold_time' => $lastGetGoldTime,
|
||||
'gold_uplimit' => $levelMeta['gold_limit'],
|
||||
'unlock_trade_time' => $row['unlock_trade_time'],
|
||||
'advanced_count' => $row['advanced_count'],
|
||||
'offer_reward_state' => 0,
|
||||
'tags' => isset($row['tags'])?$row['tags']:'',
|
||||
|
||||
//暂留(以下弃用字段)
|
||||
'current_pvp_get_ceg' => $todayGetGold / 100,
|
||||
'last_pvp_get_ceg_time' => $lastGetGoldTime,
|
||||
'current_pve_get_ceg' => $todayPveGetCeg / 100,
|
||||
'last_pve_get_ceg_time' => $lastPveGetCegTime,
|
||||
'current_mission_get_ceg' => $todayMissionGetCeg / 100,
|
||||
'last_mission_get_ceg_time' => $lastMissionGetCegTime,
|
||||
'unlock_trade_time' => $row['unlock_trade_time'],
|
||||
'advanced_count' => $row['advanced_count'],
|
||||
'lucky' => $heroLucky,
|
||||
'chip_ids' => $chipIds,
|
||||
'chip_strength_sum' => strval(Chip::getChipMaxStrength($row['chip_ids'],1)), //计算ceg上限所需参数
|
||||
'skill_common' => $skill_common,
|
||||
'skill_points' => $row['skill_points'],
|
||||
'offer_reward_state' => 0,
|
||||
'labour' => $row['labour'],
|
||||
'chip_strength_sum' => 0,
|
||||
'labour' => 0,
|
||||
|
||||
);
|
||||
$dto['hero_tili_max'] = strval(round(FormulaService::Hero_NFT_Maximum_Physical_Strength($dto['quality'],$dto['lucky']),3));
|
||||
$dto['pvp_ceg_uplimit'] =strval( round(FormulaService::getHeroPvpDailyCegUpLimit($dto),2) );
|
||||
@ -300,26 +324,46 @@ class Hero extends BaseModel {
|
||||
return $dto;
|
||||
}
|
||||
|
||||
public static function addFreeHero($heroMeta)
|
||||
{
|
||||
return self::internalAddHero(
|
||||
myself()->_getSelfMysql(),
|
||||
$heroMeta,
|
||||
myself()->_getAccountId(),
|
||||
null,
|
||||
self::FREE_STATE);
|
||||
}
|
||||
|
||||
public static function addHero($heroMeta)
|
||||
{
|
||||
return self::internalAddHero(
|
||||
myself()->_getSelfMysql(),
|
||||
$heroMeta,
|
||||
myself()->_getAccountId(),
|
||||
null);
|
||||
null,
|
||||
self::GETED_STATE);
|
||||
}
|
||||
|
||||
// public static function addNftHero($heroMeta, $tokenId)
|
||||
// {
|
||||
// return self::internalAddHero(
|
||||
// myself()->_getMysql($tokenId),
|
||||
// $heroMeta,
|
||||
// null,
|
||||
// $tokenId);
|
||||
// }
|
||||
|
||||
public static function internalAddHero($conn, $heroMeta, $accountId, $tokenId)
|
||||
public static function addNftHero($heroMeta, $tokenId)
|
||||
{
|
||||
return self::internalAddHero(
|
||||
myself()->_getMysql($tokenId),
|
||||
$heroMeta,
|
||||
null,
|
||||
$tokenId,
|
||||
self::GETED_STATE);
|
||||
}
|
||||
|
||||
public static function internalAddHero($conn, $heroMeta, $accountId, $tokenId,$state)
|
||||
{
|
||||
$skinItemMeta = \mt\Item::getMetaListByType(\mt\Item::HERO_SKIN_TYPE);
|
||||
if ($skinItemMeta){
|
||||
foreach ($skinItemMeta as $value){
|
||||
if ($value['playerid'] == $heroMeta['id'] && $value['isdefaultskin'] ==1){
|
||||
HeroSkin::addSkin($value);
|
||||
}
|
||||
}
|
||||
}
|
||||
$realHeroMeta = mt\Hero::get($heroMeta['id']);
|
||||
$randAttr = array();
|
||||
$fieldsKv = array(
|
||||
@ -327,15 +371,13 @@ class Hero extends BaseModel {
|
||||
'hero_lv' => 1,
|
||||
'quality' => 1,
|
||||
'hero_tili' => FormulaService::Hero_NFT_Maximum_Physical_Strength(1,FormulaService::Hero_Advanced_Lucky_Value(1)),
|
||||
'state' => self::GETED_STATE,
|
||||
'state' => $state,
|
||||
'skill_lv1' => 1,
|
||||
'skill_lv2' => 1,
|
||||
'rand_attr' => json_encode($randAttr),
|
||||
'lock_type' => self::NO_LOCK,
|
||||
'unlock_time' => 0,
|
||||
'unlock_trade_time' => 0,
|
||||
'skill_points' => 0,
|
||||
'labour' => 0,
|
||||
'activate' => 1,
|
||||
'createtime' => myself()->_getNowTime(),
|
||||
'modifytime' => myself()->_getNowTime()
|
||||
@ -354,69 +396,6 @@ class Hero extends BaseModel {
|
||||
);
|
||||
}
|
||||
|
||||
public static function addTryHero($heroMeta, $tryCount)
|
||||
{
|
||||
$realHeroMeta = mt\Hero::get($heroMeta['id']);
|
||||
$randAttr = array();
|
||||
{
|
||||
$initQualityMeta = mt\HeroQuality::getByQuality(1);
|
||||
if ($initQualityMeta) {
|
||||
$randAttr = mt\HeroQuality::getRandAttr($initQualityMeta);
|
||||
}
|
||||
}
|
||||
SqlHelper::upsert(
|
||||
myself()->_getSelfMysql(),
|
||||
't_hero',
|
||||
array(
|
||||
'account_id' => myself()->_getAccountId(),
|
||||
'hero_id' => $heroMeta['id']
|
||||
),
|
||||
array(
|
||||
),
|
||||
array(
|
||||
'account_id' => myself()->_getAccountId(),
|
||||
'hero_id' => $heroMeta['id'],
|
||||
'hero_lv' => 1,
|
||||
'quality' => 1,
|
||||
'hero_tili' => $realHeroMeta ? $realHeroMeta['tili'] : 0,
|
||||
'state' => self::TRY_STATE,
|
||||
'try_count' => $tryCount,
|
||||
'skill_lv1' => 1,
|
||||
'skill_lv2' => 1,
|
||||
'rand_attr' => json_encode($randAttr),
|
||||
'lock_type' => self::NO_LOCK,
|
||||
'unlock_time' => 0,
|
||||
'unlock_trade_time' => 0,
|
||||
'createtime' => myself()->_getNowTime(),
|
||||
'modifytime' => myself()->_getNowTime()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public static function takeonSkin($heroUniId, $skinId)
|
||||
{
|
||||
self::update($heroUniId, array(
|
||||
'skin_id' => $skinId,
|
||||
'modifytime' => myself()->_getNowTime()
|
||||
));
|
||||
}
|
||||
|
||||
public static function upgradeSkill($heroUniId, $skillIdx,$skill_points)
|
||||
{
|
||||
if (!in_array($skillIdx, array(0, 1))) {
|
||||
return;
|
||||
}
|
||||
$fieldName = 'skill_lv' . ($skillIdx + 1);
|
||||
self::update($heroUniId, array(
|
||||
$fieldName => function () use($fieldName) {
|
||||
return "${fieldName} + 1";
|
||||
},
|
||||
'skill_points' => function() use ($skill_points){
|
||||
return "GREATEST(0, skill_points - ${skill_points})";
|
||||
},
|
||||
'modifytime' => myself()->_getNowTime()
|
||||
));
|
||||
}
|
||||
|
||||
public static function update($heroUniId, $fieldsKv)
|
||||
{
|
||||
@ -611,13 +590,6 @@ class Hero extends BaseModel {
|
||||
foreach ($baseAttr as $val){
|
||||
foreach ($attr as $v){
|
||||
$coef_level = mt\HeroLevelAttr::getByCoefficient($coefficient_level,$val['attr_id']);
|
||||
// if ($val['attr_id'] == $v['attr_id'] && $val['attr_id'] == kHAT_Atk){ //18 //18.941564456287 //20.847692307692
|
||||
// array_push($attrPro1,[
|
||||
// 'attr_id' => $val['attr_id'],
|
||||
// 'type'=> $val['type'],
|
||||
// 'val' => strval($val['val']*$v['val']+$v['val']/$coef_level['val']*100-100/$coef_level['val']),
|
||||
// ]);
|
||||
// }
|
||||
//&& $val['attr_id'] != kHAT_Atk
|
||||
if ( $val['attr_id'] == $v['attr_id'] ){
|
||||
array_push($attrPro1,[
|
||||
@ -638,20 +610,6 @@ class Hero extends BaseModel {
|
||||
foreach ($baseAttr as $val){
|
||||
$coef_quality = mt\HeroQuality::getByCoefficient($coefficient_quality,$val['attr_id']);
|
||||
if ($coef_quality){
|
||||
// if ($val['attr_id'] == kHAT_Atk){
|
||||
// array_push($attrPro2,[
|
||||
// 'attr_id' => $val['attr_id'],
|
||||
// 'type'=> $val['type'],
|
||||
// 'val' => strval($val['val']*$qualityMeta['promote_val']+$qualityMeta['promote_val']/$coef_quality['val']*100-100/$coef_quality['val']),
|
||||
// ]);
|
||||
// }
|
||||
// if ($val['attr_id'] != kHAT_Atk) {
|
||||
// array_push($attrPro2, [
|
||||
// 'attr_id' => $val['attr_id'],
|
||||
// 'type' => $val['type'],
|
||||
// 'val' => strval($val['val'] * pow($qualityMeta['promote_val'], $coef_quality['val'])),
|
||||
// ]);
|
||||
// }
|
||||
array_push($attrPro2, [
|
||||
'attr_id' => $val['attr_id'],
|
||||
'type' => $val['type'],
|
||||
@ -711,9 +669,6 @@ class Hero extends BaseModel {
|
||||
array_push($attr_skill,$item);
|
||||
}
|
||||
}
|
||||
$chipIds = ChipPlugin::getInlayChip($row['token_id']);
|
||||
$attr_chip= Chip::getChipAttr($chipIds)['attr_chip'];
|
||||
$chip_core= Chip::getChipAttr($chipIds)['chip_core'];
|
||||
|
||||
$rand_attr = $baseAttr;
|
||||
if ($attrPro){
|
||||
@ -728,20 +683,7 @@ class Hero extends BaseModel {
|
||||
if ($attr_skill){
|
||||
$rand_attr = self::_mergeArr(array_merge($rand_attr,$attr_skill));
|
||||
}
|
||||
if ($attr_chip){
|
||||
$rand_attr = self::_mergeArr(array_merge($rand_attr,$attr_chip));
|
||||
}
|
||||
if ($chip_core){
|
||||
$coreAttr = array();
|
||||
foreach ($chip_core as $value){
|
||||
array_push($coreAttr,array(
|
||||
'attr_id'=>$value['attr_id'],
|
||||
'type'=>$value['attr_add_type'],
|
||||
'val'=>$value['attr_number'],
|
||||
));
|
||||
}
|
||||
$rand_attr = self::_mergeArr(array_merge($rand_attr,$coreAttr));
|
||||
}
|
||||
|
||||
$heroLucky = \services\FormulaService::Hero_Advanced_Lucky_Value($row['quality']);
|
||||
$info = array(
|
||||
'idx' => $row['idx'],
|
||||
@ -753,18 +695,15 @@ class Hero extends BaseModel {
|
||||
'hero_tili' => $row['hero_tili'],
|
||||
'quality' => $row['quality'],
|
||||
'rand_attr' => array_values($rand_attr),
|
||||
'chip_core' => $chip_core ? $coreAttr : $chip_core,
|
||||
// 'attr_base' => $baseAttr,
|
||||
// 'attr_pro' => $attrPro,
|
||||
// 'attr_skill' => $attr_skill,
|
||||
// 'attr_chip' => Chip::getChipAttr($chipIds)['attr_chip'],
|
||||
// 'chip_core' => Chip::getChipAttr($chipIds)['chip_core'],
|
||||
'current_pvp_get_ceg' => $todayGetGold / 100,
|
||||
'current_pve_get_ceg' => $todayPveGetCeg / 100,
|
||||
'advanced_count' => $row['advanced_count'],
|
||||
'lucky' => strval($heroLucky),
|
||||
'chip_ids' => $chipIds,
|
||||
'chip_strength_sum' => strval(Chip::getChipMaxStrength($chipIds,1)), //计算ceg上限所需参数
|
||||
'chip_ids' => $row['chip_ids'],
|
||||
'chip_strength_sum' => strval(Chip::getChipMaxStrength($row['chip_ids'],1)), //计算ceg上限所需参数
|
||||
'skill_points' => $row['skill_points'],
|
||||
'labour' => $row['labour'],
|
||||
);
|
||||
@ -793,4 +732,14 @@ class Hero extends BaseModel {
|
||||
}
|
||||
}
|
||||
|
||||
public static function getHeroByItemId($itemId){
|
||||
$hero = array();
|
||||
self::getHeroList(function ($row) use (&$hero,$itemId) {
|
||||
if ($row['hero_id'] == $itemId) {
|
||||
array_push($hero,$row);
|
||||
}
|
||||
});
|
||||
return $hero;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -25,13 +25,69 @@ class HeroSkin extends BaseModel {
|
||||
return $row;
|
||||
}
|
||||
|
||||
public static function toDto($row)
|
||||
public static function findBx($heroId)
|
||||
{
|
||||
return array(
|
||||
'skin_id' => $row['skin_id'],
|
||||
'skin_state' => $row['skin_state'],
|
||||
'try_expire_at' => $row['try_expire_at'],
|
||||
$row = SqlHelper::ormSelectOne(
|
||||
myself()->_getSelfMysql(),
|
||||
't_hero_skin',
|
||||
array(
|
||||
'account_id' => myself()->_getAccountId(),
|
||||
'hero_id' => $heroId
|
||||
)
|
||||
);
|
||||
return $row;
|
||||
}
|
||||
|
||||
public static function takeonSkin($skinId,$heroId){
|
||||
$row = self::findBx($heroId);
|
||||
SqlHelper::update(
|
||||
myself()->_getSelfMysql(),
|
||||
't_hero_skin',
|
||||
array(
|
||||
'account_id' => myself()->_getAccountId(),
|
||||
'skin_id' => $row['skin_id']
|
||||
),
|
||||
array(
|
||||
'hero_id'=>0
|
||||
)
|
||||
);
|
||||
SqlHelper::update(
|
||||
myself()->_getSelfMysql(),
|
||||
't_hero_skin',
|
||||
array(
|
||||
'account_id' => myself()->_getAccountId(),
|
||||
'skin_id' => $skinId
|
||||
),
|
||||
array(
|
||||
'hero_id'=>$heroId
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
public static function getSkinList($cb){
|
||||
SqlHelper::ormSelect(
|
||||
myself()->_getSelfMysql(),
|
||||
't_hero_skin',
|
||||
array(
|
||||
'account_id' => myself()->_getAccountId()
|
||||
),
|
||||
function ($row) use($cb) {
|
||||
$cb($row);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
public static function toDto($meta)
|
||||
{
|
||||
$row = self::find($meta['id']);
|
||||
$array = array(
|
||||
'skin_id'=>$meta['id'],
|
||||
'is_have' => $row?1:0,
|
||||
'use_state' => $row['hero_id']?1:0,
|
||||
);
|
||||
return $array;
|
||||
}
|
||||
|
||||
public static function addSkin($itemMeta)
|
||||
@ -43,10 +99,7 @@ class HeroSkin extends BaseModel {
|
||||
'account_id' => myself()->_getAccountId(),
|
||||
'skin_id' => $itemMeta['id']
|
||||
),
|
||||
array(
|
||||
'skin_state' => 3,
|
||||
'modifytime' => myself()->_getNowTime()
|
||||
),
|
||||
array(),
|
||||
array(
|
||||
'account_id' => myself()->_getAccountId(),
|
||||
'skin_id' => $itemMeta['id'],
|
||||
@ -54,6 +107,7 @@ class HeroSkin extends BaseModel {
|
||||
'get_from' => 0,
|
||||
'consume_num' => 0,
|
||||
'try_expire_at' => 0,
|
||||
'hero_id' => 0,
|
||||
'createtime' => myself()->_getNowTime(),
|
||||
'modifytime' => myself()->_getNowTime()
|
||||
)
|
||||
|
@ -8,14 +8,25 @@ use mt;
|
||||
use phpcommon\SqlHelper;
|
||||
class Parachute extends BaseModel
|
||||
{
|
||||
public static $parachute = '170001'; //默认降落伞
|
||||
|
||||
public static function getMyParachute(){
|
||||
return SqlHelper::ormSelect(
|
||||
$list = array(
|
||||
self::$parachute
|
||||
);
|
||||
$rows = SqlHelper::ormSelect(
|
||||
myself()->_getSelfMysql(),
|
||||
't_parachute',
|
||||
array(
|
||||
'account_id' => myself()->_getAccountId(),
|
||||
)
|
||||
);
|
||||
if ($rows){
|
||||
foreach ($rows as $row){
|
||||
array_push($list, $row['item_id']);
|
||||
}
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
public static function addParachute($itemMeta){
|
||||
if ($itemMeta){
|
||||
|
@ -3,12 +3,15 @@
|
||||
namespace models;
|
||||
|
||||
require_once('mt/Item.php');
|
||||
require_once('mt/LevelUp.php');
|
||||
require_once('models/UserSeasonRing.php');
|
||||
require_once('models/Parachute.php');
|
||||
|
||||
use mt;
|
||||
use phpcommon;
|
||||
use phpcommon\SqlHelper;
|
||||
use models\UserSeasonRing;
|
||||
use models\Parachute;
|
||||
|
||||
class User extends BaseModel {
|
||||
|
||||
@ -38,6 +41,7 @@ class User extends BaseModel {
|
||||
|
||||
public static function show($row)
|
||||
{
|
||||
mt\LevelUp::getExpByLv($row['level'],$row['exp']);
|
||||
return array(
|
||||
'activated' => $row['activated'],
|
||||
'rename_count' => $row['rename_count'],
|
||||
@ -48,7 +52,6 @@ class User extends BaseModel {
|
||||
'head_frame' => $row['head_frame'],
|
||||
'level' => $row['level'],
|
||||
'exp' => $row['exp'],
|
||||
'max_exp' => $row['exp'] + 1000,
|
||||
'rank' => $row['rank'],
|
||||
'history_best_rank' => $row['history_best_rank'],
|
||||
'score' => $row['score'],
|
||||
@ -69,11 +72,16 @@ class User extends BaseModel {
|
||||
'guild_id' => $row['guild_id'],
|
||||
'guild_job' => $row['guild_job'],
|
||||
'guild_name' => $row['guild_name'],
|
||||
'parachute' => $row['parachute'] ? $row['parachute'] : Parachute::$parachute,
|
||||
'parachute_list' => Parachute::getMyParachute(),
|
||||
'ring_id' => $row['ring_id'],
|
||||
'ring_list' => UserSeasonRing::ringList($row['account_id']),
|
||||
);
|
||||
}
|
||||
|
||||
public static function info($row)
|
||||
{
|
||||
mt\LevelUp::getExpByLv($row['level'],$row['exp']);
|
||||
return array(
|
||||
'activated' => $row['activated'],
|
||||
'rename_count' => $row['rename_count'],
|
||||
@ -84,7 +92,6 @@ class User extends BaseModel {
|
||||
'head_frame' => $row['head_frame'],
|
||||
'level' => $row['level'],
|
||||
'exp' => $row['exp'],
|
||||
'max_exp' => $row['exp'] + 1000,
|
||||
'rank' => $row['rank'],
|
||||
'history_best_rank' => $row['history_best_rank'],
|
||||
'score' => $row['score'],
|
||||
@ -106,7 +113,10 @@ class User extends BaseModel {
|
||||
'guild_id' => $row['guild_id'],
|
||||
'guild_job' => $row['guild_job'],
|
||||
'guild_name' => $row['guild_name'],
|
||||
'ring_list' => UserSeasonRing::ringList($row['account_id'])
|
||||
'ring_id' => $row['ring_id'],
|
||||
'ring_list' => UserSeasonRing::ringList($row['account_id']),
|
||||
'parachute' => $row['parachute'] ? $row['parachute'] : Parachute::$parachute,
|
||||
'parachute_list' => Parachute::getMyParachute(),
|
||||
);
|
||||
}
|
||||
|
||||
@ -150,6 +160,16 @@ class User extends BaseModel {
|
||||
return in_array($headFrame, $headFrameList);
|
||||
}
|
||||
|
||||
public static function isValidParachute($parachute){
|
||||
$parachuteList = Parachute::getMyParachute();
|
||||
return in_array($parachute, $parachuteList);
|
||||
}
|
||||
|
||||
public static function isValidRing($parachute){
|
||||
$ringList = UserSeasonRing::ringList(myself()->_getAccountId());
|
||||
return in_array($parachute, $ringList);
|
||||
}
|
||||
|
||||
private static function getHeadList($userInfo)
|
||||
{
|
||||
$headList = emptyReplace(json_decode($userInfo['head_list'], true), array());
|
||||
|
@ -30,120 +30,85 @@ class ChipAttr {
|
||||
return self::$attrPoolList;
|
||||
}
|
||||
|
||||
public static function getAttrPool($attr){
|
||||
$attr_pool = array();
|
||||
public static function getAttrPool($chip){
|
||||
$temp = array();
|
||||
$attrWeight = 0;
|
||||
foreach (self::getAttrPoolList() as $item){
|
||||
if ($item['attr_id'] == $attr['attr_id'] && $item['attr_type'] == $attr['chip_type'] ){
|
||||
$attr_pool = $item;
|
||||
if ($item['chip_type'] == $chip['chip_type']){
|
||||
$attrWeight += $item['attr_weight'];
|
||||
for ($i = 0; $i < $item['attr_weight']; $i++) {
|
||||
$temp[] = $item;
|
||||
}
|
||||
}
|
||||
}
|
||||
$attr_pool = $temp[rand(0, $attrWeight -1)];
|
||||
if ($attr_pool){
|
||||
$attr_pool['weight'] = explode('|',$attr_pool['weight']);
|
||||
foreach ($attr_pool['weight'] as $key =>$item){
|
||||
$attr_pool['weight'][$key] = explode(':',$item);
|
||||
$attr_pool['num_weight'] = explode('|',$attr_pool['num_weight']);
|
||||
foreach ($attr_pool['num_weight'] as $key =>$item){
|
||||
$attr_pool['num_weight'][$key] = explode(':',$item);
|
||||
}
|
||||
|
||||
$weight = 0;
|
||||
$tempData = array ();
|
||||
foreach ($attr_pool['weight'] as $one) {
|
||||
foreach ($attr_pool['num_weight'] as $one) {
|
||||
$weight += $one[1];
|
||||
for ($i = 0; $i < $one[1]; $i++) {
|
||||
$tempData[] = $one;
|
||||
|
||||
}
|
||||
}
|
||||
$k = rand(0, $weight -1);
|
||||
$attr_pool['attr_pool_number'] = $tempData[$k][0];
|
||||
unset($attr_pool['weight']);
|
||||
$attr_pool['val'] = $tempData[$k][0];
|
||||
unset($attr_pool['num_weight']);
|
||||
}
|
||||
return $attr_pool;
|
||||
}
|
||||
|
||||
public static function generateAttrRandom($itemMeta,$chip_grade){
|
||||
if ($itemMeta['sub_type'] == self::ROLE_CHIP_SUBTYPE){
|
||||
$chip = self::getNodeChip();
|
||||
return self::_randomNum($itemMeta,$chip_grade,$chip);
|
||||
}
|
||||
if ($itemMeta['sub_type'] == self::GUN_CHIP_SUBTYPE){
|
||||
$chip = self::getGunChip();
|
||||
return self::_randomNum($itemMeta,$chip_grade,$chip);
|
||||
}
|
||||
return array();
|
||||
}
|
||||
|
||||
public static function getAttrById($attr_id,$attr_type){
|
||||
if($attr_type == self::ROLE_CHIP_SUBTYPE){
|
||||
$chip = self::getNodeChip();
|
||||
}
|
||||
if($attr_type == self::GUN_CHIP_SUBTYPE){
|
||||
$chip = self::getGunChip();
|
||||
}
|
||||
foreach ($chip as $item) {
|
||||
if ($item['attr_id'] == $attr_id && $item['chip_type'] == $attr_type){
|
||||
return $item;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function generateOneAttr($type){
|
||||
// $itemMeta = Item::get($item_id);
|
||||
// return self::getAttrPool(self::getAttrByItemId($itemMeta['id']));
|
||||
// public static function generateOneAttr($type){
|
||||
//// $itemMeta = Item::get($item_id);
|
||||
//// return self::getAttrPool(self::getAttrByItemId($itemMeta['id']));
|
||||
//
|
||||
//// $attr_pool = self::getAttrPool(self::getAttrByItemId($itemMeta['id']));
|
||||
//// $attr = emptyReplace(json_decode($chip['rand_attr'], true), array());
|
||||
//// array_push($attr,$attr_pool);
|
||||
//// return $attr;
|
||||
// if ($type == self::ROLE_CHIP_SUBTYPE){
|
||||
// $chip = self::getNodeChip();
|
||||
// $attr = $chip[ array_rand($chip)];
|
||||
// return self::getAttrPool($attr);
|
||||
// }
|
||||
// if ($type == self::GUN_CHIP_SUBTYPE){
|
||||
// $chip = self::getGunChip();
|
||||
// $attr = $chip[ array_rand($chip)];
|
||||
// return self::getAttrPool($attr);
|
||||
// }
|
||||
// return array();
|
||||
// }
|
||||
//
|
||||
//
|
||||
//
|
||||
// private static function getNodeChip(){
|
||||
// $node_chip = array();
|
||||
// foreach (self::getMetaList() as $item){
|
||||
// if ($item['chip_type'] == self::ROLE_CHIP_SUBTYPE){
|
||||
// array_push($node_chip,$item);
|
||||
// }
|
||||
// }
|
||||
// return $node_chip;
|
||||
// }
|
||||
//
|
||||
// private static function getGunChip(){
|
||||
// $gun_chip = array();
|
||||
// foreach (self::getMetaList() as $item){
|
||||
// if ($item['chip_type'] == self::GUN_CHIP_SUBTYPE){
|
||||
// array_push($gun_chip,$item);
|
||||
// }
|
||||
// }
|
||||
// return $gun_chip;
|
||||
// }
|
||||
|
||||
// $attr_pool = self::getAttrPool(self::getAttrByItemId($itemMeta['id']));
|
||||
// $attr = emptyReplace(json_decode($chip['rand_attr'], true), array());
|
||||
// array_push($attr,$attr_pool);
|
||||
// return $attr;
|
||||
if ($type == self::ROLE_CHIP_SUBTYPE){
|
||||
$chip = self::getNodeChip();
|
||||
$attr = $chip[ array_rand($chip)];
|
||||
return self::getAttrPool($attr);
|
||||
}
|
||||
if ($type == self::GUN_CHIP_SUBTYPE){
|
||||
$chip = self::getGunChip();
|
||||
$attr = $chip[ array_rand($chip)];
|
||||
return self::getAttrPool($attr);
|
||||
}
|
||||
return array();
|
||||
}
|
||||
|
||||
private static function _randomNum($itemMeta,$chip_grade,$chipList){
|
||||
$attr_pool = array();
|
||||
array_push($attr_pool,self::getAttrPool(self::getAttrByItemId($itemMeta['id'])));
|
||||
if ($chip_grade>=3){
|
||||
if ($chip_grade<5){
|
||||
$num = 1;
|
||||
}
|
||||
if ($chip_grade>=5){
|
||||
$num = 2;
|
||||
}
|
||||
for ($i=1;$i<=$num;$i++){
|
||||
$attr = $chipList[ array_rand($chipList)];
|
||||
array_push($attr_pool,self::getAttrPool($attr));
|
||||
}
|
||||
}
|
||||
return $attr_pool ;
|
||||
}
|
||||
|
||||
private static function getNodeChip(){
|
||||
$node_chip = array();
|
||||
foreach (self::getMetaList() as $item){
|
||||
if ($item['chip_type'] == self::ROLE_CHIP_SUBTYPE){
|
||||
array_push($node_chip,$item);
|
||||
}
|
||||
}
|
||||
return $node_chip;
|
||||
}
|
||||
|
||||
private static function getGunChip(){
|
||||
$gun_chip = array();
|
||||
foreach (self::getMetaList() as $item){
|
||||
if ($item['chip_type'] == self::GUN_CHIP_SUBTYPE){
|
||||
array_push($gun_chip,$item);
|
||||
}
|
||||
}
|
||||
return $gun_chip;
|
||||
}
|
||||
|
||||
private static function getAttrByItemId($item_id){
|
||||
public static function getAttrByItemId($item_id){
|
||||
foreach (self::getMetaList() as $item){
|
||||
if ($item['item_id'] == $item_id){
|
||||
return $item;
|
||||
|
37
webapp/mt/LevelUp.php
Normal file
37
webapp/mt/LevelUp.php
Normal file
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace mt;
|
||||
|
||||
|
||||
class LevelUp
|
||||
{
|
||||
public static function getExpByLv(&$lv,&$exp){
|
||||
$meta = self::getMetaList();
|
||||
if ($exp > 0){
|
||||
for ($i=1;$i<=count($meta);$i++){
|
||||
if ($exp > $meta[count($meta)]['total_exp']){
|
||||
$exp = min($exp, $meta[count($meta)]['total_exp']);
|
||||
$lv = $meta[count($meta)]['id'];
|
||||
}else{
|
||||
if ($exp >= $meta[$i]['total_exp'] &&
|
||||
$exp < $meta[$i+1]['total_exp'])
|
||||
{
|
||||
$lv = $meta[$i]['id'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected static function getMetaList()
|
||||
{
|
||||
if (!self::$metaList) {
|
||||
self::$metaList = getMetaTable('levelup@levelup.php');
|
||||
}
|
||||
return self::$metaList;
|
||||
}
|
||||
|
||||
protected static $metaList;
|
||||
|
||||
}
|
@ -6,11 +6,23 @@ use phpcommon;
|
||||
|
||||
class Skill {
|
||||
|
||||
const DEFAULT_SKILL = 10101;
|
||||
public static function get($id)
|
||||
{
|
||||
return getXVal(self::getMetaList(), $id);
|
||||
}
|
||||
|
||||
public static function getPresetSkill()
|
||||
{
|
||||
$list = array();
|
||||
foreach (self::getMetaList() as $value){
|
||||
if ($value['skill_id'] < 20000){
|
||||
array_push($list,$value);
|
||||
}
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
protected static function getMetaList()
|
||||
{
|
||||
if (!self::$metaList) {
|
||||
|
@ -15,6 +15,7 @@ require_once('mt/AttrHelper.php');
|
||||
require_once('mt/PveGemini.php');
|
||||
require_once('mt/PveGeminiMode.php');
|
||||
require_once('mt/RankSeason.php');
|
||||
require_once('mt/LevelUp.php');
|
||||
|
||||
require_once('models/Season.php');
|
||||
require_once('models/Battle.php');
|
||||
@ -27,6 +28,7 @@ require_once('models/FragmentPool.php');
|
||||
require_once('models/RealtimeData.php');
|
||||
require_once('models/BattleHistory.php');
|
||||
require_once('models/NftActive.php');
|
||||
require_once('models/FragmentRecord.php');
|
||||
|
||||
require_once('services/RankActivityService.php');
|
||||
require_once('services/FormulaService.php');
|
||||
@ -36,6 +38,7 @@ require_once('services/LogService.php');
|
||||
|
||||
|
||||
use models\Chip;
|
||||
use models\FragmentRecord;
|
||||
use models\Nft;
|
||||
use models\NftActive;
|
||||
use models\User;
|
||||
@ -78,19 +81,9 @@ class BattleDataService extends BaseService {
|
||||
'obtain_ceg' => 0,
|
||||
'curr_ceg' => 0,
|
||||
),
|
||||
'weapon1' => array(
|
||||
'gun_uniid' => '',
|
||||
'ceg_uplimit' => 0,
|
||||
'obtain_ceg' => 0,
|
||||
),
|
||||
'weapon2' => array(
|
||||
'gun_uniid' => '',
|
||||
'ceg_uplimit' => 0,
|
||||
'obtain_ceg' => 0,
|
||||
'curr_ceg' => 0,
|
||||
),
|
||||
'total_ceg' => 0,
|
||||
'items' => array()
|
||||
'items' => array(),
|
||||
'lvInfo' => array()
|
||||
);
|
||||
private $rankActivityService = null;
|
||||
private $pveGeminiMeta = null;
|
||||
@ -124,32 +117,7 @@ class BattleDataService extends BaseService {
|
||||
$this->reward['hero']['ceg_uplimit'] = $matchMode == self::MATCH_MODE_PVE ?
|
||||
$this->heroDto['pve_ceg_uplimit'] : $this->heroDto['pvp_ceg_uplimit'];
|
||||
}
|
||||
{
|
||||
$weaponUuid1 = getReqVal('weapon_uuid1', '');
|
||||
if ($weaponUuid1) {
|
||||
$weaponDb = Gun::find($weaponUuid1);
|
||||
if (!$weaponDb) {
|
||||
return false;
|
||||
}
|
||||
$this->weapon1Dto = Gun::toDto($weaponDb);
|
||||
$this->reward['weapon1']['gun_uniid'] = $this->weapon1Dto['gun_uniid'];
|
||||
$this->reward['weapon1']['ceg_uplimit'] = $matchMode == self::MATCH_MODE_PVE ?
|
||||
$this->weapon1Dto['pve_ceg_uplimit'] : $this->weapon1Dto['pvp_ceg_uplimit'];
|
||||
}
|
||||
}
|
||||
{
|
||||
$weaponUuid2 = getReqVal('weapon_uuid2', '');
|
||||
if ($weaponUuid2) {
|
||||
$weaponDb = Gun::find($weaponUuid2);
|
||||
if (!$weaponDb) {
|
||||
return false;
|
||||
}
|
||||
$this->weapon2Dto = Gun::toDto($weaponDb);
|
||||
$this->reward['weapon2']['gun_uniid'] = $this->weapon2Dto['gun_uniid'];
|
||||
$this->reward['weapon2']['ceg_uplimit'] = $matchMode == self::MATCH_MODE_PVE ?
|
||||
$this->weapon2Dto['pve_ceg_uplimit'] : $this->weapon2Dto['pvp_ceg_uplimit'];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//录入战斗记录
|
||||
$this->saveBattleHistory();
|
||||
@ -160,7 +128,6 @@ class BattleDataService extends BaseService {
|
||||
//匹配赛模式
|
||||
$this->updatePvpData();
|
||||
$this->rewardCegPvp();
|
||||
$this->rewardFragmentPvp();
|
||||
myself()->_incDailyV(TN_DAILY_PVP_BATTLE_TIMES, 0, 1);
|
||||
}
|
||||
break;
|
||||
@ -177,7 +144,6 @@ class BattleDataService extends BaseService {
|
||||
$this->updatePveData();
|
||||
if ($this->pveGeminiMeta &&
|
||||
$this->pveGeminiModeMeta) {
|
||||
$this->rewardCegPve();
|
||||
$this->rewardFragmentPve();
|
||||
}
|
||||
myself()->_incDailyV(TN_DAILY_PVE_BATTLE_TIMES, 0, 1);
|
||||
@ -191,6 +157,32 @@ class BattleDataService extends BaseService {
|
||||
|
||||
}
|
||||
|
||||
public function rewardExpPvp(){
|
||||
$expNum = 222;
|
||||
if ($expNum>0){
|
||||
array_push($this->reward['items'],
|
||||
array(
|
||||
'item_id' => V_ITEM_EXP,
|
||||
'item_num' => $expNum
|
||||
));
|
||||
$userInfo = myself()->_getOrmUserInfo();
|
||||
$newExp = $userInfo['exp']+$expNum;
|
||||
$newLv = $userInfo['level'];
|
||||
mt\LevelUp::getExpByLv($newLv,$newExp);
|
||||
$this->reward['lvInfo'] = array(
|
||||
'oldLv' => $userInfo['level'],
|
||||
'newLv' => $newLv
|
||||
);
|
||||
if ( $newExp != $userInfo['exp'] ) {
|
||||
myself()->_updateUserInfo(array(
|
||||
'level' => $newLv,
|
||||
'exp' => $newExp,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private function saveBattleHistory(){
|
||||
$user = myself()->_getOrmUserInfo();
|
||||
$newRank = $user['rank'];
|
||||
@ -781,54 +773,151 @@ class BattleDataService extends BaseService {
|
||||
|
||||
private function rewardFragmentPve()
|
||||
{
|
||||
if ($this->instanceRank < 1) {
|
||||
$bossReward = getReqVal('pve_kill_boss', 0) ? 1 : 0;
|
||||
if ($this->instanceRank < 1 || !$bossReward) {
|
||||
return;
|
||||
}
|
||||
$todayPveBattleTimes = myself()->_getDailyV(TN_DAILY_PVE_BATTLE_TIMES, 0);
|
||||
$todayPveLastGetFragmentBattle = myself()->_getDailyV(TN_DAILY_PVE_LAST_GET_FRAGMENT_BATTLE, 0);
|
||||
$todayPveGetFragmentNum = myself()->_getDailyV(TN_DAILY_PVE_GET_FRAGMENT_NUM, 0);
|
||||
$todayPvpGetFragmentNum = myself()->_getDailyV(TN_DAILY_PVP_GET_FRAGMENT_NUM, 0);
|
||||
$dropRate = $this->pveGeminiMeta['drop_rate'];
|
||||
$todayPveGetHeroFragmentNum = myself()->_getDailyV(TN_DAILY_PVE_GET_HERO_FRAGMENT_NUM, 0);
|
||||
$todayPveGetGunFragmentNum = myself()->_getDailyV(TN_DAILY_PVE_GET_GUN_FRAGMENT_NUM, 0);
|
||||
if ($todayPveGetHeroFragmentNum < self::MAX_DROP_NUM) {
|
||||
$gamesNum = FragmentRecord::getGamesNum(FragmentRecord::HERO_FRAGMENT);
|
||||
$rate = $dropRate*($gamesNum+1);
|
||||
if (rand(1,100) < $rate*100){
|
||||
$dropHeroFragmentId = $this->randWeight2(1);
|
||||
$this->drop($dropHeroFragmentId,1);
|
||||
FragmentRecord::upsertGamesNum(FragmentRecord::HERO_FRAGMENT,0);
|
||||
}else{
|
||||
FragmentRecord::upsertGamesNum(FragmentRecord::HERO_FRAGMENT,$gamesNum+1);
|
||||
}
|
||||
|
||||
if ($todayPveGetFragmentNum + $todayPvpGetFragmentNum < self::MAX_DROP_NUM) {
|
||||
$onlineNum = RealtimeData::getOnline();
|
||||
$heroFragmentNum = FragmentPool::getHeroNum(1);
|
||||
$gunFragmentNum = FragmentPool::getGunNum(1);
|
||||
|
||||
$instanceLevel = $this->pveGeminiMeta['gemini_lv'];
|
||||
$instanceRank = $this->instanceRank;
|
||||
$instanceRankRate = $this->getInstanceRankRate();
|
||||
$bossReward = getReqVal('pve_kill_boss', 0) ? 1 : 0;
|
||||
$heroQuality = $this->heroDto['quality'];
|
||||
|
||||
$heroProbability = FormulaService::calcHeroFragmentProbabilityPve
|
||||
(
|
||||
$heroQuality,
|
||||
$onlineNum,
|
||||
$heroFragmentNum,
|
||||
$todayPveBattleTimes,
|
||||
$instanceLevel,
|
||||
$instanceRank,
|
||||
$instanceRankRate,
|
||||
$bossReward,
|
||||
$todayPveLastGetFragmentBattle
|
||||
);
|
||||
$gunProbability = FormulaService::calcWeaponFragmentProbabilityPve
|
||||
(
|
||||
$heroQuality,
|
||||
$onlineNum,
|
||||
$gunFragmentNum,
|
||||
$todayPveBattleTimes,
|
||||
$instanceLevel,
|
||||
$instanceRank,
|
||||
$instanceRankRate,
|
||||
$bossReward,
|
||||
$todayPveLastGetFragmentBattle
|
||||
);
|
||||
$emptyProbability = max(1 - $heroProbability - $gunProbability, 0);
|
||||
|
||||
$dropIdx = $this->randWeight(array($heroProbability, $gunProbability, $emptyProbability));
|
||||
$this->procDrop($dropIdx);
|
||||
}
|
||||
if ($todayPveGetGunFragmentNum < self::MAX_DROP_NUM) {
|
||||
$gamesNum = FragmentRecord::getGamesNum(FragmentRecord::GUN_FRAGMENT);
|
||||
$rate = $dropRate*($gamesNum+1);
|
||||
if (rand(1,100) < $rate*100){
|
||||
$dropGunFragmentId = $this->randWeight2(2);
|
||||
$this->drop($dropGunFragmentId,2);
|
||||
FragmentRecord::upsertGamesNum(FragmentRecord::GUN_FRAGMENT,0);
|
||||
}else{
|
||||
FragmentRecord::upsertGamesNum(FragmentRecord::GUN_FRAGMENT,$gamesNum+1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// $todayPveBattleTimes = myself()->_getDailyV(TN_DAILY_PVE_BATTLE_TIMES, 0);
|
||||
// $todayPveLastGetFragmentBattle = myself()->_getDailyV(TN_DAILY_PVE_LAST_GET_FRAGMENT_BATTLE, 0);
|
||||
// $todayPveGetFragmentNum = myself()->_getDailyV(TN_DAILY_PVE_GET_FRAGMENT_NUM, 0);
|
||||
// $todayPvpGetFragmentNum = myself()->_getDailyV(TN_DAILY_PVP_GET_FRAGMENT_NUM, 0);
|
||||
//
|
||||
// if ($todayPveGetFragmentNum + $todayPvpGetFragmentNum < self::MAX_DROP_NUM) {
|
||||
// $onlineNum = RealtimeData::getOnline();
|
||||
// $heroFragmentNum = FragmentPool::getHeroNum(1);
|
||||
// $gunFragmentNum = FragmentPool::getGunNum(1);
|
||||
//
|
||||
// $instanceLevel = $this->pveGeminiMeta['gemini_lv'];
|
||||
// $instanceRank = $this->instanceRank;
|
||||
// $instanceRankRate = $this->getInstanceRankRate();
|
||||
// $bossReward = getReqVal('pve_kill_boss', 0) ? 1 : 0;
|
||||
// $heroQuality = $this->heroDto['quality'];
|
||||
//
|
||||
// $heroProbability = FormulaService::calcHeroFragmentProbabilityPve
|
||||
// (
|
||||
// $heroQuality,
|
||||
// $onlineNum,
|
||||
// $heroFragmentNum,
|
||||
// $todayPveBattleTimes,
|
||||
// $instanceLevel,
|
||||
// $instanceRank,
|
||||
// $instanceRankRate,
|
||||
// $bossReward,
|
||||
// $todayPveLastGetFragmentBattle
|
||||
// );
|
||||
// $gunProbability = FormulaService::calcWeaponFragmentProbabilityPve
|
||||
// (
|
||||
// $heroQuality,
|
||||
// $onlineNum,
|
||||
// $gunFragmentNum,
|
||||
// $todayPveBattleTimes,
|
||||
// $instanceLevel,
|
||||
// $instanceRank,
|
||||
// $instanceRankRate,
|
||||
// $bossReward,
|
||||
// $todayPveLastGetFragmentBattle
|
||||
// );
|
||||
// $emptyProbability = max(1 - $heroProbability - $gunProbability, 0);
|
||||
//
|
||||
// $dropIdx = $this->randWeight(array($heroProbability, $gunProbability, $emptyProbability));
|
||||
// $this->procDrop($dropIdx);
|
||||
// }
|
||||
}
|
||||
|
||||
private function randWeight2($type){
|
||||
$itemMeta = mt\Item::getMetaListByType(mt\Item::FRAGMENT_TYPE);
|
||||
$heroFragment = array();
|
||||
$gunFragment = array();
|
||||
foreach ($itemMeta as $meta){
|
||||
if ($meta['sub_type'] == 3 || $meta['sub_type'] == 1){
|
||||
array_push($heroFragment,$meta['id']);
|
||||
}
|
||||
if ($meta['sub_type'] == 4 || $meta['sub_type'] == 2){
|
||||
array_push($gunFragment,$meta['id']);
|
||||
}
|
||||
}
|
||||
$weightRate = array(
|
||||
array(0,4),
|
||||
array(1,12),
|
||||
array(2,12),
|
||||
array(3,12),
|
||||
array(4,12),
|
||||
array(5,12),
|
||||
array(6,12),
|
||||
array(7,12),
|
||||
array(8,12),
|
||||
);
|
||||
$weight = 0;
|
||||
$tempData = array ();
|
||||
foreach ($weightRate as $one) {
|
||||
$weight += $one[1];
|
||||
for ($i = 0; $i < $one[1]; $i++) {
|
||||
$tempData[] = $one;
|
||||
|
||||
}
|
||||
}
|
||||
$key = $tempData[rand(0, $weight -1)][0];
|
||||
switch ($type){
|
||||
case 1:return $heroFragment[$key];
|
||||
case 2:return $gunFragment[$key];
|
||||
default:return null;
|
||||
}
|
||||
}
|
||||
|
||||
private function drop($itemId,$type){
|
||||
$itemMeta = mt\Item::get($itemId);
|
||||
if ($itemMeta){
|
||||
$propertyChgService = new services\PropertyChgService();
|
||||
$awardService = new services\AwardService();
|
||||
array_push($this->reward['items'],
|
||||
array(
|
||||
'item_id' => $itemId,
|
||||
'item_num' => 1
|
||||
));
|
||||
myself()->_addItems(
|
||||
array(
|
||||
array(
|
||||
'item_id' => $itemId,
|
||||
'item_num' => 1
|
||||
)),
|
||||
$awardService,
|
||||
$propertyChgService
|
||||
);
|
||||
switch ($type){
|
||||
case 1:myself()->_incDailyV(TN_DAILY_PVE_GET_HERO_FRAGMENT_NUM, 0, 1);break;
|
||||
case 2:myself()->_incDailyV(TN_DAILY_PVE_GET_GUN_FRAGMENT_NUM, 0, 1);break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private function rewardCegPvp()
|
||||
@ -850,22 +939,11 @@ class BattleDataService extends BaseService {
|
||||
}
|
||||
}
|
||||
$heroPvpCeg = FormulaService::calcHeroPvpCeg($this->heroDto, $_REQUEST);
|
||||
$weaponPvpCeg1 = 0;
|
||||
$weaponPvpCeg2 = 0;
|
||||
if ($this->weapon1Dto) {
|
||||
$weaponPvpCeg1 = FormulaService::calcWeaponPvpCeg($this->weapon1Dto, $_REQUEST);
|
||||
}
|
||||
if ($this->weapon2Dto) {
|
||||
$weaponPvpCeg2 = FormulaService::calcWeaponPvpCeg($this->weapon2Dto, $_REQUEST);
|
||||
}
|
||||
error_log(json_encode(array(
|
||||
'heroPvpCeg' => $heroPvpCeg,
|
||||
'weaponPvpCeg1' => $weaponPvpCeg1,
|
||||
'weaponPvpCeg2' => $weaponPvpCeg2,
|
||||
)));
|
||||
if ($heroPvpCeg > 0) {
|
||||
$heroPvpCeg = Hero::gainGoldPvp($this->heroDto, $heroPvpCeg);
|
||||
|
||||
{
|
||||
//埋点
|
||||
$event = [
|
||||
@ -879,56 +957,14 @@ class BattleDataService extends BaseService {
|
||||
$this->reward['hero']['obtain_ceg'] = '' . ($this->heroDto['current_pvp_get_ceg'] + $heroPvpCeg);
|
||||
$this->reward['total_ceg'] += $heroPvpCeg;
|
||||
}
|
||||
if ($weaponPvpCeg1 > 0) {
|
||||
$weaponPvpCeg1 = Gun::gainGoldPvp($this->weapon1Dto, $weaponPvpCeg1);
|
||||
|
||||
{
|
||||
//埋点
|
||||
$event = [
|
||||
'name' => LogService::BATTLE_AWARD_PVP,
|
||||
'val' => $weaponPvpCeg1
|
||||
];
|
||||
LogService::productCEG($event,$this->weapon1Dto,$log_param);
|
||||
}
|
||||
|
||||
$this->reward['weapon1']['curr_ceg'] = '' . ($this->weapon1Dto['current_pvp_get_ceg'] + $weaponPvpCeg1);
|
||||
$this->reward['weapon1']['obtain_ceg'] = '' . ($this->weapon1Dto['current_pvp_get_ceg'] + $weaponPvpCeg1);
|
||||
$this->reward['total_ceg'] += $weaponPvpCeg1;
|
||||
}
|
||||
if ($weaponPvpCeg2 > 0) {
|
||||
$weaponPvpCeg2 = Gun::gainGoldPvp($this->weapon2Dto, $weaponPvpCeg2);
|
||||
|
||||
{
|
||||
//埋点
|
||||
$event = [
|
||||
'name' => LogService::BATTLE_AWARD_PVP,
|
||||
'val' => $weaponPvpCeg2
|
||||
];
|
||||
LogService::productCEG($event,$this->weapon2Dto,$log_param);
|
||||
}
|
||||
|
||||
$this->reward['weapon2']['curr_ceg'] = '' . ($this->weapon2Dto['current_pvp_get_ceg'] + $weaponPvpCeg2);
|
||||
$this->reward['weapon2']['obtain_ceg'] = '' . ($this->weapon2Dto['current_pvp_get_ceg'] + $weaponPvpCeg2);
|
||||
$this->reward['total_ceg'] += $weaponPvpCeg2;
|
||||
}
|
||||
$this->reward['total_ceg'] .= '';
|
||||
error_log(json_encode(array(
|
||||
'new_heroPvpCeg' => $heroPvpCeg,
|
||||
'new_weaponPvpCeg1' => $weaponPvpCeg1,
|
||||
'new_weaponPvpCeg2' => $weaponPvpCeg2,
|
||||
)));
|
||||
$gold = $heroPvpCeg + $weaponPvpCeg1 + $weaponPvpCeg2;
|
||||
$gold = $heroPvpCeg;
|
||||
error_log('updateBattleData1');
|
||||
$this->rankActivityService->updateBattleData($gold);
|
||||
if ($heroPvpCeg>0){
|
||||
NftService::addNftActive($this->heroDto,1);
|
||||
}
|
||||
if ($weaponPvpCeg1>0){
|
||||
NftService::addNftActive($this->weapon1Dto,2);
|
||||
}
|
||||
if ($weaponPvpCeg2>0){
|
||||
NftService::addNftActive($this->weapon2Dto,2);
|
||||
}
|
||||
if ($gold > 0) {
|
||||
myself()->_addVirtualItem(V_ITEM_GOLD, $gold);
|
||||
}
|
||||
|
57
webapp/services/ChipPageService.php
Normal file
57
webapp/services/ChipPageService.php
Normal file
@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace services;
|
||||
require_once('models/ChipPage.php');
|
||||
|
||||
use models\ChipPage;
|
||||
use phpcommon\SqlHelper;
|
||||
class ChipPageService extends BaseService
|
||||
{
|
||||
const MAX_CHIP_SLOT_NUM = 30;
|
||||
const INIT_CHIP_PAGE_NUM = 3;
|
||||
|
||||
public function initChipPage(){
|
||||
$rows = SqlHelper::ormSelect(
|
||||
myself()->_getSelfMysql(),
|
||||
't_chip_page',
|
||||
array(
|
||||
'account_id'=> myself()->_getAccountId()
|
||||
)
|
||||
);
|
||||
if (!$rows){
|
||||
for ($i=0;$i<self::INIT_CHIP_PAGE_NUM;$i++){
|
||||
ChipPage::addChipPage();
|
||||
}
|
||||
}
|
||||
if ($rows){
|
||||
foreach ($rows as $row){
|
||||
$this->refreshSlotState($row);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function refreshSlotState($row){
|
||||
$data = emptyReplace(json_decode($row['data'], true), array());
|
||||
$userInfo = myself()->_getOrmUserInfo();
|
||||
foreach ($data as &$val){
|
||||
if ($userInfo['level'] < $val['slot_id'] && $val['state'] == 0){
|
||||
$val['state'] = 0;
|
||||
}else{
|
||||
$val['state'] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
SqlHelper::update(
|
||||
myself()->_getSelfMysql(),
|
||||
't_chip_page',
|
||||
array(
|
||||
'idx' => $row['idx']
|
||||
),
|
||||
array(
|
||||
'data' => json_encode($data),
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
@ -17,10 +17,17 @@ use mt;
|
||||
|
||||
class FormulaService extends BaseService {
|
||||
|
||||
public static function calcHeroPvpGold($heroDto, $params)
|
||||
{
|
||||
// GOLD = Min(英雄每天gold上限*10%,标准值) * (f(队伍排名) + g(队伍击杀数))
|
||||
// f(队伍排名) = round(1-(队伍排名-1)/10 ,1)
|
||||
// g(队伍击杀数)= Min(队伍击杀数*0.1 ,2)
|
||||
}
|
||||
|
||||
public static function calcHeroPvpCeg($heroDto, $params)
|
||||
{
|
||||
//每局实际收益=10%PVP收益*5*(50%*[每局排名TopX%对应比例]+25%*[每局PK人数排名TopX%对应比例]+15%*[每局英雄属性排名TopX%对应比例]+5%*[每局武器属性排名TopX%对应比例]+5%*[每局存活时间排名TopX%对应比例])
|
||||
$upLimit = $heroDto['pvp_ceg_uplimit'];
|
||||
$upLimit = $heroDto['gold_uplimit'];
|
||||
$ranked = getXVal($params, 'ranked');
|
||||
$kills = getXVal($params, 'kills');
|
||||
$aliveTime = getXVal($params, 'alive_time');
|
||||
|
Loading…
x
Reference in New Issue
Block a user