Compare commits

...

106 Commits
yd ... master

Author SHA1 Message Date
aozhiwei
bc587c1f09 修改小胡bug 2024-10-28 19:14:47 +08:00
aozhiwei
c1dc79744c 1 2024-10-28 17:14:40 +08:00
aozhiwei
428268e7fe 1 2024-10-28 17:13:30 +08:00
aozhiwei
d9c50e84f1 1 2024-10-28 17:07:57 +08:00
hujiabin
1bc9cc59f4 Merge branch 'hjb' of git.kingsome.cn:server/game2006api into hjb 2024-10-28 17:02:36 +08:00
hujiabin
dea1895804 1 2024-10-28 17:02:31 +08:00
aozhiwei
9df99a2b6d 1 2024-10-28 16:53:44 +08:00
hujiabin
a81e5a73e3 1 2024-10-28 16:44:31 +08:00
hujiabin
a7eb363b0f Merge branch 'hjb' of git.kingsome.cn:server/game2006api into hjb 2024-10-28 15:48:16 +08:00
hujiabin
ae5310f154 1 2024-10-28 15:48:08 +08:00
aozhiwei
9bb60517b9 1 2024-10-28 15:23:18 +08:00
aozhiwei
894b0f54ac 1 2024-10-28 15:16:27 +08:00
aozhiwei
2f1028cabe 1 2024-10-28 11:23:10 +08:00
aozhiwei
7e15615efc 1 2024-10-28 11:19:13 +08:00
aozhiwei
2bc5770d4e 1 2024-10-28 10:55:04 +08:00
aozhiwei
25e5d83a37 1 2024-10-25 15:10:52 +08:00
aozhiwei
94fadd4655 1 2024-10-25 14:48:49 +08:00
aozhiwei
a45be6e03f 1 2024-10-25 13:38:59 +08:00
aozhiwei
3e158eb053 1 2024-10-25 11:37:41 +08:00
aozhiwei
43772357e6 1 2024-10-25 11:26:07 +08:00
aozhiwei
abbbec3f6f 1 2024-10-25 11:11:48 +08:00
aozhiwei
7a8e7a8b46 1 2024-10-25 11:09:37 +08:00
aozhiwei
d4b2b221ee 1 2024-10-25 10:53:36 +08:00
aozhiwei
8b31c757e6 1 2024-10-24 16:08:34 +08:00
aozhiwei
5d24365274 1 2024-10-24 16:04:15 +08:00
aozhiwei
6681aee2e6 1 2024-10-24 15:54:46 +08:00
aozhiwei
1c429512b8 1 2024-10-24 15:47:11 +08:00
aozhiwei
6c577dad38 1 2024-10-24 15:30:13 +08:00
aozhiwei
45aa418a5a 1 2024-10-24 15:24:56 +08:00
aozhiwei
f667c442ca 1 2024-10-24 15:24:21 +08:00
aozhiwei
c7b7a688ba 1 2024-10-24 15:02:15 +08:00
aozhiwei
c944176dc7 1 2024-10-24 14:23:46 +08:00
aozhiwei
dd67163e1c 1 2024-10-23 21:55:51 +08:00
hujiabin
3dbf6891c5 1 2024-10-23 14:16:09 +08:00
aozhiwei
00f2039ecf 1 2024-10-23 13:32:59 +08:00
hujiabin
2388a85f76 1 2024-10-23 13:22:23 +08:00
hujiabin
bc1bb1b5be Merge branch 'hjb' of git.kingsome.cn:server/game2006api into hjb 2024-10-23 13:18:28 +08:00
hujiabin
618a41ae58 1 2024-10-23 13:18:22 +08:00
aozhiwei
10d5b862e8 1 2024-10-23 10:24:03 +08:00
aozhiwei
3e2a656487 1 2024-10-23 10:23:52 +08:00
hujiabin
083d192cde 1 2024-10-22 16:52:55 +08:00
hujiabin
40adb32d0b 1 2024-10-21 11:32:53 +08:00
aozhiwei
346ef4ace1 1 2024-10-21 11:22:55 +08:00
aozhiwei
2eaa689cd7 1 2024-10-21 11:17:57 +08:00
aozhiwei
ec54527292 1 2024-10-18 17:37:54 +08:00
hujiabin
62dcaf3af4 1 2024-10-18 17:12:40 +08:00
hujiabin
da07c61b1e 1 2024-10-18 15:23:11 +08:00
hujiabin
e3ba6fe330 1 2024-10-18 14:51:01 +08:00
hujiabin
3512e670f0 1 2024-10-18 10:46:34 +08:00
hujiabin
2da803b407 1 2024-10-18 10:43:45 +08:00
hujiabin
6cf0bf5528 1 2024-10-17 18:01:38 +08:00
hujiabin
c616fb5b33 1 2024-10-17 17:05:17 +08:00
hujiabin
4785e2831f 1 2024-10-17 14:50:26 +08:00
hujiabin
25579c5597 Merge branch 'hjb' of git.kingsome.cn:server/game2006api into hjb 2024-10-17 14:09:40 +08:00
hujiabin
143db181aa 1 2024-10-17 14:09:36 +08:00
aozhiwei
01954cfe40 1 2024-10-17 10:57:20 +08:00
aozhiwei
c43b938564 1 2024-10-17 10:46:45 +08:00
aozhiwei
fd8f358357 1 2024-10-17 10:38:07 +08:00
aozhiwei
31e73b5fa8 1 2024-10-17 10:31:57 +08:00
aozhiwei
57d772c6db 1 2024-10-17 10:31:28 +08:00
hujiabin
55fcceb9ee Merge branch 'hjb' of git.kingsome.cn:server/game2006api into hjb 2024-10-16 17:31:13 +08:00
hujiabin
6d6f9ff8fe 1 2024-10-16 17:31:06 +08:00
aozhiwei
41d52fae3a 1 2024-10-16 17:25:51 +08:00
aozhiwei
c1373ae1a8 1 2024-10-16 17:07:10 +08:00
aozhiwei
46f8bda768 1 2024-10-16 17:05:00 +08:00
aozhiwei
72b983b7db 1 2024-10-16 17:00:35 +08:00
hujiabin
125d48b51e 1 2024-10-16 16:59:27 +08:00
hujiabin
776818f7f6 1 2024-10-16 16:57:44 +08:00
hujiabin
e2cf8485e2 1 2024-10-16 16:56:41 +08:00
aozhiwei
f3f373242b 1 2024-10-16 15:04:46 +08:00
aozhiwei
3d9b4f3b11 1 2024-10-16 14:53:54 +08:00
aozhiwei
9881232483 1 2024-10-16 14:45:52 +08:00
aozhiwei
e44922ab6a 1 2024-10-16 14:19:16 +08:00
aozhiwei
ebc1cb94f2 1 2024-10-16 14:17:40 +08:00
aozhiwei
3752b08bcb 1 2024-10-16 10:46:48 +08:00
aozhiwei
a7502c2950 1 2024-10-16 10:46:37 +08:00
5d92c0d8d9 fix 2024-10-15 17:55:07 +08:00
aozhiwei
432871a78b 1 2024-10-15 17:14:54 +08:00
aozhiwei
a81757dbeb 1 2024-10-15 17:13:11 +08:00
aozhiwei
36617c1e4c 1 2024-10-15 17:11:58 +08:00
aozhiwei
73246226ad 1 2024-10-15 17:05:41 +08:00
aozhiwei
9c9fa008c5 1 2024-10-15 16:59:03 +08:00
aozhiwei
a7f9f5cedf 1 2024-10-15 16:43:06 +08:00
aozhiwei
83e2386341 1 2024-10-15 16:19:08 +08:00
aozhiwei
80afde40d0 1 2024-10-15 16:03:49 +08:00
aozhiwei
946e626b41 1 2024-10-15 15:58:05 +08:00
hujiabin
9fbe2a8dd7 Merge branch 'hjb' of git.kingsome.cn:server/game2006api into hjb 2024-10-15 15:45:30 +08:00
hujiabin
accd55e964 1 2024-10-15 15:45:24 +08:00
aozhiwei
f5af530a5d 1 2024-10-15 15:18:28 +08:00
aozhiwei
13034eacc4 1 2024-10-15 15:08:04 +08:00
aozhiwei
18405d2b3e 1 2024-10-15 14:43:53 +08:00
hujiabin
9a1a7e885b Merge branch 'hjb' of git.kingsome.cn:server/game2006api into hjb 2024-10-15 14:34:41 +08:00
hujiabin
fcdd2cf2d3 1 2024-10-15 14:34:36 +08:00
aozhiwei
2d05964a22 1 2024-10-15 14:26:54 +08:00
aozhiwei
d2d194d6ad 1 2024-10-15 14:11:53 +08:00
hujiabin
8655dae204 1 2024-10-14 16:41:29 +08:00
hujiabin
63245ebcc7 1 2024-10-14 16:15:07 +08:00
aozhiwei
ace6f905b3 1 2024-10-14 15:19:53 +08:00
aozhiwei
2c0f27156c 1 2024-10-14 15:04:41 +08:00
aozhiwei
84c2c23ecd 1 2024-10-14 14:55:59 +08:00
aozhiwei
37e6e4d462 1 2024-10-14 14:34:09 +08:00
aozhiwei
a431c927a1 1 2024-10-14 11:35:25 +08:00
aozhiwei
98daf72df4 1 2024-10-14 11:30:36 +08:00
aozhiwei
a3c7ba330b 1 2024-10-14 11:15:39 +08:00
aozhiwei
23e6ae1e4c 1 2024-10-14 10:58:54 +08:00
aozhiwei
f1abda621a 1 2024-10-14 10:55:54 +08:00
43 changed files with 1440 additions and 108 deletions

View File

@ -6,6 +6,6 @@ return array(
'port' => 3306,
'user' => 'root',
'passwd' => 'keji178',
'dbname' => 'frienddb_dev_1'
'dbname' => 'frienddb_dev_new'
);

View File

@ -1,5 +1,31 @@
import _common
class circuitInfo(object):
def __init__(self):
self.fields = [
['start_time', 0, '开始时间'],
['end_time', 0, '结束时间'],
['ranking', 0, '排名'],
['score', 0, '积分'],
]
class rankingInfo(object):
def __init__(self):
self.fields = [
['account_id', 0, 'account'],
['name', 0, '名字'],
['head_id', 0, '头像'],
['head_frame', 0, '头像框'],
['hero_id', 0, '英雄ItemId'],
['skin_id', 0, '皮肤ItemId'],
['ranking', 0, '排名'],
['score', 0, '积分'],
['score_boost', 0, '加成的积分'],
['cec', 0, 'cec(个人榜信息才有)'],
]
class AAMarket(object):
def __init__(self):
@ -598,4 +624,32 @@ class AAMarket(object):
], '开关信息(如果没有则默认为未开启)'],
]
},
{
'method': 'GET',
'name': '/api/circuit_ranking',
'desc': '巡回赛赛季排行',
'group': '!AAMarket',
'url': 'https://market-test.kingsome.cn/api/circuit_ranking',
'params': [
['address', '0', 'address'],
],
'response': [
_common.RspHead(),
['!rank_list', [rankingInfo()], ''],
['info', circuitInfo(), '信息'],
]
},{
'name': '/api/circuit_phase_ranking',
'desc': '巡回赛周期排行',
'group': '!AAMarket',
'url': 'https://market-test.kingsome.cn/api/circuit_phase_ranking',
'params': [
['address', '0', 'address'],
],
'response': [
_common.RspHead(),
['!rank_list', [rankingInfo()], ''],
['info', circuitInfo(), '信息'],
]
}
]

130
doc/AAWheel.py Normal file
View File

@ -0,0 +1,130 @@
import _common
class AAWheel(object):
def __init__(self):
self.apis = [
{
'method': 'POST',
'name': '/api/v1/user/login',
'desc': '登录',
'group': '!AAActivity',
'url': 'https://wheel-test.kingsome.cn/api/v1/user/login',
'headers': _common.MaybeJwtHeader,
'is_json_params': True,
'request_params': [
],
'params': [
['token', '', 'token'],
],
'response': [
_common.RspHead(),
['info', _common.WheelUser(), '用户名'],
]
},
{
'method': 'POST',
'name': '/api/v1/roll_dice',
'desc': '掷骰子',
'group': '!AAActivity',
'url': 'https://wheel-test.kingsome.cn/api/v1/roll_dice',
'headers': _common.JwtHeader,
'is_json_params': True,
'params': [
],
'response': [
_common.RspHead(),
]
},
{
'method': 'GET',
'name': '/api/v1/friend/list',
'desc': '好友列表',
'group': '!AAActivity',
'url': 'https://wheel-test.kingsome.cn/api/v1/friend/list',
'headers': _common.JwtHeader,
'params': [
],
'response': [
_common.RspHead(),
]
},
{
'method': 'GET',
'name': '/api/v1/friend/invite',
'desc': '好友邀请',
'group': '!AAActivity',
'url': 'https://wheel-test.kingsome.cn/api/v1/friend/invite',
'headers': _common.JwtHeader,
'params': [
],
'response': [
_common.RspHead(),
]
},
{
'method': 'GET',
'name': '/api/v1/friend/agree',
'desc': '好友邀请',
'group': '!AAActivity',
'url': 'https://wheel-test.kingsome.cn/api/v1/friend/agree',
'headers': _common.JwtHeader,
'params': [
],
'response': [
_common.RspHead(),
]
},
{
'method': 'GET',
'name': '/api/v1/mission/list',
'desc': '任务列表',
'group': '!AAActivity',
'url': 'https://wheel-test.kingsome.cn/api/v1/mission/list',
'headers': _common.JwtHeader,
'params': [
],
'response': [
_common.RspHead(),
]
},
{
'method': 'GET',
'name': '/api/v1/chip/list',
'desc': '芯片列表',
'group': '!AAActivity',
'url': 'https://wheel-test.kingsome.cn/api/v1/chip/list',
'headers': _common.JwtHeader,
'params': [
],
'response': [
_common.RspHead(),
]
},
{
'method': 'GET',
'name': '/api/v1/item/list',
'desc': '道具列表',
'group': '!AAActivity',
'url': 'https://wheel-test.kingsome.cn/api/v1/item/list',
'headers': _common.JwtHeader,
'params': [
],
'response': [
_common.RspHead(),
]
},
{
'method': 'GET',
'name': '/api/v1/shop/goods',
'desc': '商店-商品列表',
'group': '!AAActivity',
'url': 'https://wheel-test.kingsome.cn/api/v1/shop/goods',
'headers': _common.JwtHeader,
'params': [
],
'response': [
_common.RspHead(),
]
},
]

View File

@ -58,6 +58,7 @@ class Battle(object):
['rank_score', 0, '排位积分'],
#['pass_score', 0, '通行证积分'],
['items', 0, '道具id:道具数量|'],
['!battle_items', [_common.BattleItem()], '战斗道具'],
],
'response': [
_common.RspHead(),
@ -142,8 +143,8 @@ class Battle(object):
['pve_wave', 0, 'pve波次'],
['pve_max_wave', 0, 'pve最大波次'],
['!members', _common.TeamReportMember(), '成员数据'],
['!team_list', _common.TeamReportTeam(), '所有队伍成员数据']
#['!members', _common.TeamReportMember(), '成员数据'],
#['!team_list', _common.TeamReportTeam(), '所有队伍成员数据']
],
'response': [
_common.RspHead(),
@ -161,7 +162,7 @@ class Battle(object):
['room_mode', 0, '0:pvp 1:pve 2:moba'],
['map_mode', 0, ''],
['map_id', 0, '地图id'],
['!team_list', [_common.MFRoomReportTeam()], '所有队伍数据']
#['!team_list', [_common.MFRoomReportTeam()], '所有队伍数据']
],
'response': [
_common.RspHead(),

View File

@ -31,7 +31,32 @@ class Circuit(object):
['!rank_list', [rankingInfo()], '榜信息'],
['my_rank', rankingInfo(), '个人榜信息'],
]
}
},{
'name': 'getCircuitPhaseRanking',
'desc': '巡回赛阶段排行',
'group': 'Circuit',
'url': 'webapp/index.php?c=Circuit&a=getCircuitPhaseRanking',
'params': [
_common.ReqHead(),
],
'response': [
_common.RspHead(),
['!rank_list', [rankingInfo()], '榜信息'],
['my_rank', rankingInfo(), '个人榜信息'],
]
},{
'name': 'CircuitTaskList',
'desc': '巡回赛任务',
'group': 'Circuit',
'url': 'webapp/index.php?c=Circuit&a=CircuitTaskList',
'params': [
_common.ReqHead(),
],
'response': [
_common.RspHead(),
['!list', [task()], '任务列表'],
]
},
]
@ -59,5 +84,15 @@ class rankingInfo(object):
['skin_id', 0, '皮肤ItemId'],
['ranking', 0, '排名'],
['score', 0, '积分'],
['score_boost', 0, '加成的积分'],
['cec', 0, 'cec(个人榜信息才有)'],
]
class task(object):
def __init__(self):
self.fields = [
['task_id', 0, '任务id'],
['current', 0, '当前进度'],
['target', 0, '目标进度'],
]

View File

@ -11,7 +11,7 @@ class Other(object):
'url': 'webapp/index.php?c=Other&a=tag',
'params': [
_common.ReqHead(),
['types', '', '红点类型(!!!注意由于红点的计算量较大,最好并发分批取红点状态)","分割 1:英雄 2:芯片 3:背包 4:签到 5:算力 6:皮肤 7:新人任务 8:日周常任务'],
['types', '', '红点类型(!!!注意由于红点的计算量较大,最好并发分批取红点状态)","分割 1:英雄 2:芯片 3:背包 4:签到 5:算力 6:皮肤 7:新人任务 8:日周常任务 9:拉新任务'],
],
'response': [
_common.RspHead(),
@ -81,6 +81,7 @@ class Other(object):
_common.RspHead(),
['!mode_list', [
['id',0,'mapMode配置id'],
['task_state',0,'巡回赛状态 0:未开 1:已开,id=7(巡回模式)才有'],
['stage_state',0,'阶段开始状态 0:未开 1:已开,id=7(巡回模式)才有'],
['next_star_time',0,'下个阶段开始时间,id=7(巡回模式)才有'],
['next_end_time',0,'下个阶段结束时间,id=7(巡回模式)才有'],

View File

@ -5,6 +5,32 @@ class OutAppTools(object):
def __init__(self):
self.apis = [
{
'name': 'getCircuitRanking',
'desc': '巡回赛赛季排行',
'group': 'OutAppCircuit',
'url': 'webapp/index.php?c=OutAppCircuit&a=getCircuitRanking',
'params': [
['address', '0', 'address'],
],
'response': [
_common.RspHead(),
['!rank_list', [rankingInfo()], ''],
['info', circuitInfo(), '信息'],
]
},{
'name': 'getCircuitPhaseRanking',
'desc': '巡回赛周期排行',
'group': 'OutAppCircuit',
'url': 'webapp/index.php?c=OutAppCircuit&a=getCircuitPhaseRanking',
'params': [
['address', '0', 'address'],
],
'response': [
_common.RspHead(),
['!rank_list', [rankingInfo()], ''],
['info', circuitInfo(), '信息'],
]
},{
'name': 'getCircuitRewardHistory',
'desc': '获取巡回赛奖励记录',
'group': 'OutAppCircuit',
@ -16,6 +42,16 @@ class OutAppTools(object):
_common.RspHead(),
['!data', [rewardInfo()], '奖励信息'],
]
},{
'name': 'circuitSettlement',
'desc': '巡回赛结算奖励',
'group': 'OutAppCircuit',
'url': 'webapp/index.php?c=OutAppCircuit&a=circuitSettlement',
'params': [
],
'response': [
_common.RspHead(),
]
},
]
@ -28,4 +64,30 @@ class rewardInfo(object):
['start_time', 0, '阶段开始时间'],
['end_time', 0, '阶段结束时间'],
['reward', 0, '-1:未结算 0:结算无奖励'],
]
class circuitInfo(object):
def __init__(self):
self.fields = [
['start_time', 0, '开始时间'],
['end_time', 0, '结束时间'],
['ranking', 0, '排名'],
['score', 0, '积分'],
]
class rankingInfo(object):
def __init__(self):
self.fields = [
['account_id', 0, 'account'],
['name', 0, '名字'],
['head_id', 0, '头像'],
['head_frame', 0, '头像框'],
['hero_id', 0, '英雄ItemId'],
['skin_id', 0, '皮肤ItemId'],
['ranking', 0, '排名'],
['score', 0, '积分'],
['score_boost', 0, '加成的积分'],
['cec', 0, 'cec(个人榜信息才有)'],
]

View File

@ -221,5 +221,18 @@ class User(object):
_common.RspHead(),
['info',_common.UserInfo(), '用户信息'],
]
},{
'name': 'getUserVip',
'desc': '用户VIP',
'group': 'User',
'url': 'webapp/index.php?c=User&a=getUserVip',
'params': [
_common.ReqHead(),
],
'response': [
_common.RspHead(),
['vip',0, 'vip等级'],
['exp',0, 'vip经验'],
]
},
]

View File

@ -1032,6 +1032,13 @@ class BattleItemReward(object):
['item_num', 0, '道具数量'],
]
class BattleItem(object):
def __init__(self):
self.fields = [
['item_id', 0, '道具id'],
['use_num', 0, '道具使用数量'],
]
class BattleRankScore(object):
@ -1215,6 +1222,7 @@ class TeamReportMember(object):
['pve_max_wave', 0, 'pve最大波次'],
['pve_boss_killed', 0, 'pve副本boss是否被击杀'],
['pve_rank_score', 0, 'pve积分'],
['!battle_items', [_common.BattleItem()], '战斗道具'],
]
class TeamReportTeam(object):
@ -1946,3 +1954,14 @@ class HashRateGoods(object):
['max_num', 0, '最大数量(-1不限购)'],
['count_down', 0, '倒计时(单位秒,只有已售罄才有效)'],
]
class WheelUser(object):
def __init__(self):
self.fields = [
['name', '', '用户名'],
['avatar', '', '头像'],
['score', '', '积分'],
['hourly_earnings', 0, '每小时收益'],
['dice', 0, '骰子数'],
]

View File

@ -63,6 +63,50 @@ CREATE TABLE `t_hashrate_shop_buy_record` (
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE `t_circuit_task_value` (
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
`account_id` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id(channel + "_" + gameid + "_" + openid)',
`circuit_season` int(11) NOT NULL DEFAULT '0' COMMENT '',
`task_type` int(11) NOT NULL DEFAULT '0' COMMENT '任务id',
`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`),
UNIQUE KEY `account_id_task` (`account_id`, `task_type`)
) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE `t_lucky_symbol` (
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
`account_id` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id',
`in_use_num` 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`),
UNIQUE KEY `account_id` (`account_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE `t_lucky_symbol_record` (
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
`room_uuid` varchar(60) CHARACTER SET utf8 NOT NULL COMMENT 'room_uuid',
`account_id` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id',
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
PRIMARY KEY (`idx`),
UNIQUE KEY `uk_room_uuid_account_id` (`room_uuid`, `account_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE `t_circuit_battle_phase` (
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
`account_id` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id(channel + "_" + gameid + "_" + openid)',
`season` int(11) NOT NULL DEFAULT '0' COMMENT '赛季',
`phase` int(11) NOT NULL DEFAULT '0' COMMENT '阶段',
`cumulative_score` 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 `idx_account_season_phase` (`account_id`, `season`, `phase`)
) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
insert into version (version) values(2024092401);
commit;

View File

@ -420,11 +420,10 @@ CREATE TABLE `t_vip_user` (
`escec_balance` varchar(60) NOT NULL DEFAULT '' COMMENT 'esCec balance',
`escec_stacking` varchar(60) NOT NULL DEFAULT '' COMMENT 'esCec stacking',
`escec_convert` varchar(60) NOT NULL DEFAULT '' COMMENT 'esCec convert',
`escec_total` varchar(60) NOT NULL DEFAULT '' COMMENT 'esCec total',
`stacking_last_src_idx` bigint NOT NULL DEFAULT '0' COMMENT 'stacking_last_src_idx',
`escec_transfer_last_src_idx` bigint NOT NULL DEFAULT '0' COMMENT 'escec_transfer_last_src_idx',
`vester_deposit_last_src_idx` bigint NOT NULL DEFAULT '0' COMMENT 'vester_deposit_last_src_idx',
`vester_withdraw_last_src_idx` bigint NOT NULL DEFAULT '0' COMMENT 'vester_withdraw_last_src_idx',
`deposit_convert_last_src_idx` bigint NOT NULL DEFAULT '0' COMMENT 'deposit_convert_last_src_idx',
`last_convert_time` int(11) NOT NULL DEFAULT '0' COMMENT 'last_convert_time',
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
PRIMARY KEY (`idx`),

View File

@ -2060,6 +2060,27 @@ CREATE TABLE `t_circuit_battle` (
) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `t_circuit_battle_phase`
--
DROP TABLE IF EXISTS `t_circuit_battle_phase`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t_circuit_battle_phase` (
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
`account_id` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id(channel + "_" + gameid + "_" + openid)',
`season` int(11) NOT NULL DEFAULT '0' COMMENT '赛季',
`phase` int(11) NOT NULL DEFAULT '0' COMMENT '阶段',
`cumulative_score` 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 `idx_account_season_phase` (`account_id`, `season`, `phase`)
) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `t_circuit_reward`
--
@ -2194,7 +2215,7 @@ CREATE TABLE `t_rookie_task_value` (
) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `t_hashrate_shop_buy_record`
--
@ -2219,3 +2240,59 @@ CREATE TABLE `t_hashrate_shop_buy_record` (
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `t_lucky_symbol`
--
DROP TABLE IF EXISTS `t_lucky_symbol`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t_lucky_symbol` (
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
`account_id` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id',
`in_use_num` 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`),
UNIQUE KEY `account_id` (`account_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_lucky_symbol_record`
--
DROP TABLE IF EXISTS `t_lucky_symbol_record`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t_lucky_symbol_record` (
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
`room_uuid` varchar(60) CHARACTER SET utf8 NOT NULL COMMENT 'room_uuid',
`account_id` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id',
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
PRIMARY KEY (`idx`),
UNIQUE KEY `uk_room_uuid_account_id` (`room_uuid`, `account_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_circuit_task_value`
--
DROP TABLE IF EXISTS `t_circuit_task_value`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t_circuit_task_value` (
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
`account_id` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id(channel + "_" + gameid + "_" + openid)',
`circuit_season` int(11) NOT NULL DEFAULT '0' COMMENT '',
`task_type` int(11) NOT NULL DEFAULT '0' COMMENT '任务id',
`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`),
UNIQUE KEY `account_id_task` (`account_id`, `task_type`)
) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
/*!40101 SET character_set_client = @saved_cs_client */;

View File

@ -15,7 +15,7 @@ require_once('models/User.php');
require_once('models/RealtimeData.php');
require_once('models/ChipPage.php');
require_once('models/Chip.php');
require_once('models/LuckySymbol.php');
require_once('services/AwardService.php');
require_once('services/PropertyChgService.php');
@ -31,6 +31,7 @@ use models\User;
use models\RealtimeData;
use models\ChipPage;
use models\Chip;
use models\LuckySymbol;
use services\LogService;
class BagController extends BaseAuthedController {
@ -134,6 +135,11 @@ class BagController extends BaseAuthedController {
$this->useSealDrug($itemDb, $itemMeta, $itemNum, $param1, $param2, $param3);
}
break;
case mt\Item::LUCKY_SYMBOL_SUBTYPE:
{
$this->useSymbol($itemDb, $itemMeta, $itemNum, $param1, $param2, $param3);
}
break;
default:
{
$this->_rspErr(4, 'The prop function has not been realized yet');
@ -880,4 +886,24 @@ class BagController extends BaseAuthedController {
));
}
private function useSymbol($itemDb, $itemMeta, $itemNum, $param1, $param2, $param3)
{
if (LuckySymbol::hasLuckySymbol()) {
$this->_rspErr(201, "alreay use");
return ;
}
$this->_decItems(array(
array(
'item_id' => $itemMeta['id'],
'item_num' => 1
)
));
LuckySymbol::add();
$this->propertyChgService->addBagChg();
$this->_rspData(array(
'award' => $this->awardService->toDto(),
'property_chg' => $this->propertyChgService->toDto(),
));
}
}

View File

@ -3,6 +3,7 @@
require_once('services/AddItemsService.php');
require_once('services/LogService.php');
require_once('services/TimingPropService.php');
require_once('services/StakingVipService.php');
require_once('mt/Item.php');
require_once('models/Bag.php');
@ -937,7 +938,8 @@ class BaseAuthedController extends BaseController {
public function _getVipRightsVal($type)
{
$vip = User::getVipLv(myself()->_getAddress());
$details = \services\StakingVipService::getDetails(myself()->_getAddress());
$vip = $details['lv'];
return myself()->_callMtStatic('StakingVip', 'getValByLv', $vip, $type);
}
}

View File

@ -479,4 +479,17 @@ class BaseController {
}
return $finalItems;
}
function arraySort($arr, $keys, $type = 'asc') {
$keys_value = $new_array = array();
foreach ($arr as $k => $v){
$keys_value[$k] = $v[$keys];
}
$type == 'asc' ? asort($keys_value) : arsort($keys_value);
reset($keys_value);
foreach ($keys_value as $k => $v) {
$new_array[$k] = $arr[$k];
}
return $new_array;
}
}

View File

@ -966,16 +966,8 @@ class BattleController extends BaseAuthedController {
$info['match_mode'] = 1;
}
}
{
$info['items'] = array();
array_push($info['items'], array(
'item_id' => 900007,
'item_num' => 10,
));
array_push($info['items'], array(
'item_id' => 902101,
'item_num' => 10,
));
if (count($member['battle_items']) > 0) {
$this->getBattleItems($r, $roomUuid, $info, $member);
}
}
array_push($teamInfo['members'], $info);
@ -990,6 +982,58 @@ class BattleController extends BaseAuthedController {
myself()->_rspData($data);
}
private function getBattleItems($r, $roomUuid, &$info, $member)
{
$data = array();
foreach ($member['battle_items'] as $item) {
$itemMeta = mt\Item::get($item['item_id']);
if ($itemMeta['type'] == mt\Item::FUNC_TYPE &&
$itemMeta['sub_type'] == mt\Item::LUCKY_SYMBOL_SUBTYPE) {
$luckyRecord = myself()->_callModelStatic('LuckySymbolRecord', 'find', $roomUuid);
if (empty($luckyRecord)) {
if (myself()->_callModelStatic('LuckySymbol', 'hasLuckySymbol')) {
myself()->_callModelStatic('LuckySymbol', 'dec');
myself()->_callModelStatic('LuckySymbolRecord', 'add', $roomUuid);
array_push($data, array(
'item_id' => $item['item_id'],
'item_num' => 1,
));
}
} else {
array_push($data, array(
'item_id' => $item['item_id'],
'item_num' => 1,
));
}
} else {
$itemCount = Bag::getItemCount($item['item_id']);
array_push($data, array(
'item_id' => $item['item_id'],
'item_num' => $item['item_num'],
));
}
}
$info['items'] = $data;
}
public function useBattleItem()
{
$itemId = getReqVal('item_id', 0);
$itemMeta = mt\Item::get($itemId);
if (!$itemMeta) {
$this->_rspErr(2, 'config error');
return;
}
$itemCount = Bag::getItemCount($itemId);
if ($itemCount > 0) {
Bag::decItem($itemId, 1);
}
myself()->_rspData(array(
'item_id' => $itemId,
'item_num' => max(0, $itemCount - 1),
));
}
public function getMobaBattleData()
{
$sign = '';
@ -1378,9 +1422,9 @@ class BattleController extends BaseAuthedController {
'return_time' => myself()->_getNowTime(),
)
);
services\BattleBoxService::incAlreadyAllocBoxNum($row['phase'],
$row['createtime'],
-max(0, $allocBoxNum - $usedNum));
services\BattleBoxService::incAlreadyAllocNum($row['phase'],
$row['createtime'],
-max(0, $allocBoxNum - $usedNum));
myself()->_rspOk();
}

View File

@ -3,19 +3,25 @@
require_once('mt/Parameter.php');
require_once('mt/CircuitTime.php');
require_once('mt/CircuitReward.php');
require_once('mt/CircuitTask.php');
require_once('models/Circuit.php');
require_once('models/User.php');
require_once('models/Hero.php');
require_once('models/HeroSkin.php');
require_once('models/CircuitTask.php');
require_once('models/UserInvitationCode.php');
use models\Circuit;
use models\User;
use models\Hero;
use models\HeroSkin;
use models\CircuitTask;
use models\UserInvitationCode;
use phpcommon\SqlHelper;
class CircuitController extends BaseAuthedController {
private $redis_key_circuit_ranking = 'circuit_ranking';
private $redis_key_circuit_phase_ranking = 'circuit_phase_ranking';
public function _handlePre()
{
@ -30,6 +36,28 @@ class CircuitController extends BaseAuthedController {
}
}
public function CircuitTaskList(){
$circuitCircuitMeta = mt\CircuitTime::getCurrentCircuit();
$nextCircuitMeta = mt\CircuitTime::getNextCircuit();
$taskList = array();
if (!$circuitCircuitMeta &&
$nextCircuitMeta &&
myself()->_getNowTime() > strtotime($nextCircuitMeta['task_open_time'])
){
$metas = \mt\CircuitTask::getListBySeason($nextCircuitMeta['circuit_season']);
if (count($metas) > 0){
foreach ($metas as $meta){
array_push($taskList, array(
'task_id' => $meta['id'],
'current' => CircuitTask::getCurrentVal($nextCircuitMeta['circuit_season'],$meta['type']),
'target' => $meta['target'],
));
}
}
}
$this->_rspData(array('list' => $taskList));
}
public function getCurrentStage(){
$circuitStageMeta = mt\CircuitTime::getCurrentStage();
if (!$circuitStageMeta){
@ -55,8 +83,9 @@ class CircuitController extends BaseAuthedController {
$redis = $this->_getRedis($this->redis_key_circuit_ranking);
if (! $redis->exists(CIRCUIT_RANKING_KEY.$this->redis_key_circuit_ranking)){
$rows = Circuit::getRankingList($currentCircuitMeta['circuit_season']);
$list = $this->_extractRankingInfo($rows);
$rows = Circuit::getCircuitList($currentCircuitMeta['circuit_season']);
$sortRows = myself()->arraySort($rows, 'cumulative_score', 'desc');
$list = $this->_extractRankingInfo($sortRows);
$redis->set(CIRCUIT_RANKING_KEY.$this->redis_key_circuit_ranking , json_encode($list));
$redis->pexpire(CIRCUIT_RANKING_KEY.$this->redis_key_circuit_ranking , 10*60*1000);
}else{
@ -69,16 +98,44 @@ class CircuitController extends BaseAuthedController {
'my_rank' => $myRankedInfo,
));
}
public function getCircuitPhaseRanking(){
$currentCircuitMeta = mt\CircuitTime::getCurrentCircuit();
if (!$currentCircuitMeta){
$this->_rspErr(1, 'current stage Have not yet started');
return ;
}
$currentStageMeta = mt\CircuitTime::getCurrentStage();
if (!$currentStageMeta){
$currentStageMeta = mt\CircuitTime::getPrevStage();
}
$redis = $this->_getRedis($this->redis_key_circuit_phase_ranking);
if (! $redis->exists(CIRCUIT_RANKING_KEY.$this->redis_key_circuit_phase_ranking)){
$rows = Circuit::getCircuitPhaseList($currentStageMeta['circuit_season'],$currentStageMeta['circuit_phase']);
$sortRows = myself()->arraySort($rows, 'cumulative_score', 'desc');
$list = $this->_extractRankingInfo($sortRows);
$redis->set(CIRCUIT_RANKING_KEY.$this->redis_key_circuit_phase_ranking , json_encode($list));
$redis->pexpire(CIRCUIT_RANKING_KEY.$this->redis_key_circuit_phase_ranking , 10*60*1000);
}else{
$listStr = $redis->get(CIRCUIT_RANKING_KEY.$this->redis_key_circuit_phase_ranking);
$list = emptyReplace(json_decode($listStr, true), array());
}
$myRankedInfo = $this->_celMyRankingInfo($list);
$this->_rspData(array(
'rank_list' => $list,
'my_rank' => $myRankedInfo,
));
}
private function _extractRankingInfo($data){
$rankingList = array();
$ranking = 0;
foreach ($data as $k=>$row){
++$ranking;
$userDb = User::find($row['account_id']);
$heroDb = Hero::findByAccountId($userDb['account_id'],$userDb['hero_id']);
$skinDb = HeroSkin::find($heroDb['skin_id']);
$heroId = $heroDb ? $heroDb['hero_id']:0;
$skinId = $skinDb ? $skinDb['skin_id']:0;
$ranking = $k+1;
$rewardWeight = \mt\CircuitReward::getRewardWeight($ranking);
if ($userDb){
$info = array(
@ -91,6 +148,7 @@ class CircuitController extends BaseAuthedController {
'ranking' => $ranking,
'weight' => $rewardWeight,
'score' => $row['cumulative_score'],
'score_boost' => $row['score_boost'],
);
array_push($rankingList,$info);
}
@ -100,14 +158,20 @@ class CircuitController extends BaseAuthedController {
private function _celMyRankingInfo($list){
$currentCircuitMeta = mt\CircuitTime::getCurrentCircuit();
$score = Circuit::getMyScore($currentCircuitMeta['circuit_season']);
$userDb = User::find(myself()->_getAccountId());
$codeDb = UserInvitationCode::findMyCode();
$count = UserInvitationCode::getMyCodeBindCount($codeDb['invitation_code']);
$boost = min($count * 3 / 100,60 / 100);
$boostScore = $score * $boost;
$myRankedInfo = array(
'ranking' => 0,
'account_id' => $userDb['account_id'],
'name' => $userDb['name'],
'head_id' => $userDb['head_id'],
'head_frame' => $userDb['head_frame'],
'score' => Circuit::getMyScore($currentCircuitMeta['circuit_season']),
'score' => $score + $boostScore,
'score_boost' => $boostScore,
'cec' => 0,
);

View File

@ -6,6 +6,7 @@ require_once('mt/AchievementsPower.php');
require_once('mt/AchievementsCycle.php');
require_once('mt/Parameter.php');
require_once('mt/RookieTask.php');
require_once('mt/CircuitTask.php');
require_once('models/HashRate.php');
use models\HashRate;
@ -139,6 +140,7 @@ class HashRateController extends BaseAuthedController
myself()->_callModelStatic('RookieTask','incTaskVal',mt\RookieTask::HASH_RATE_DRAW_REWARD_TIMES_COND,1);
}else{
myself()->_callModelStatic('RookieTask','incTaskVal',mt\RookieTask::HASH_TASK_COMMIT_TIMES_COND,1);
myself()->_callModelStatic('CircuitTask','incTaskVal',mt\CircuitTask::COMPLETE_HASH_TASK_END,1);
}
myself()->_callModelStatic('RookieTask','incTaskVal',mt\RookieTask::TOTAL_HASH_RATE_VALUE_COND,$rewardNum);

View File

@ -28,7 +28,9 @@ require_once('models/Hero.php');
require_once('models/HeroSkin.php');
require_once('models/Chip.php');
require_once('models/Bag.php');
require_once('models/CircuitTask.php');
use models\CircuitTask;
use models\SignLog;
use phpcommon\SqlHelper;
use models\RankingSetRecord;
@ -51,6 +53,7 @@ class OtherController extends BaseAuthedController {
const HERO_SKIN = 6;
const ROOKIE_TASK = 7;
const DAILY_TASK = 8;
const INVITE_NEW_TASK = 9;
public function tag()
{
@ -160,7 +163,7 @@ class OtherController extends BaseAuthedController {
$missionService = new services\MissionService();
$userInfo = $this->_safeGetOrmUserInfo();
$missionService->init($userInfo, null);
if ($missionService->_isHaveRedTag()){
if ($missionService->_isHaveRedTag(0)){
$state = 1;
}
array_push($list,array(
@ -168,6 +171,17 @@ class OtherController extends BaseAuthedController {
'state' => $state,
));
}
break;
case self::INVITE_NEW_TASK :{
$missionService = new services\MissionService();
if ($missionService->_isHaveRedTag(1)){
$state = 1;
}
array_push($list,array(
'type' => self::INVITE_NEW_TASK,
'state' => $state,
));
}
}
}
@ -414,6 +428,15 @@ class OtherController extends BaseAuthedController {
$temp['next_star_time'] = strtotime($nextStageMeta['start_time']);
$temp['next_end_time'] = strtotime($nextStageMeta['end_time']);
}
if (myself()->_switchIsOpen('circuitTask')){
if (CircuitTask::_verifyCondition($circuitTimeMeta['circuit_season'])){
$temp['task_state'] = 1;
}else{
$temp['task_state'] = 0;
}
}else{
$temp['task_state'] = 1;
}
}

View File

@ -10,12 +10,113 @@ require_once('mt/CircuitReward.php');
require_once('models/CircuitReward.php');
require_once('models/Circuit.php');
require_once('models/User.php');
require_once('models/Hero.php');
require_once('models/HeroSkin.php');
use services\ServerSwitchService;
use models\CircuitReward;
use models\Circuit;
use models\User;
use models\Hero;
use models\HeroSkin;
class OutAppCircuitController extends BaseController {
private $redis_key_circuit_ranking = 'circuit_ranking';
private $redis_key_circuit_phase_ranking = 'circuit_phase_ranking';
public function getCircuitRanking(){
$currentCircuitMeta = mt\CircuitTime::getCurrentCircuit();
if (!$currentCircuitMeta){
$this->_rspErr(1, 'current stage Have not yet started');
return ;
}
$address = getReqVal('address', '');
if (empty($address)){
if (SERVER_ENV == _ONLINE) {
myself()->_rspErr(1, 'param error');
return;
}
}
$user = User::findByAddress($address);
if (SERVER_ENV != _ONLINE) {
$user = User::find('2_2006_I75DCdyQRllgGRYvT0wcGtPR9gbDUZws');
}
if (!$user){
myself()->_rspErr(1, 'user not found');
return;
}
$redis = $this->_getRedis($this->redis_key_circuit_ranking);
if (! $redis->exists(CIRCUIT_RANKING_KEY.$this->redis_key_circuit_ranking)){
$rows = Circuit::getCircuitList($currentCircuitMeta['circuit_season']);
$sortRows = myself()->arraySort($rows, 'cumulative_score', 'desc');
$list = $this->_extractRankingInfo($sortRows);
$redis->set(CIRCUIT_RANKING_KEY.$this->redis_key_circuit_ranking , json_encode($list));
$redis->pexpire(CIRCUIT_RANKING_KEY.$this->redis_key_circuit_ranking , 10*60*1000);
}else{
$listStr = $redis->get(CIRCUIT_RANKING_KEY.$this->redis_key_circuit_ranking);
$list = emptyReplace(json_decode($listStr, true), array());
}
$myInfo = $this->_celMyRankingInfo($list,$user['account_id']);
$info = array(
'star_time' => strtotime($currentCircuitMeta['start_time']),
'end_time' => strtotime($currentCircuitMeta['end_time']),
'ranking' => $myInfo['ranking'],
'score' => $myInfo['score'],
);
$this->_rspData(array(
'rank_list' => $list,
'info' => $info,
));
}
public function getCircuitPhaseRanking(){
$currentCircuitMeta = mt\CircuitTime::getCurrentCircuit();
if (!$currentCircuitMeta){
$this->_rspErr(1, 'current stage Have not yet started');
return ;
}
$address = getReqVal('address', '');
if (empty($address)){
if (SERVER_ENV == _ONLINE) {
myself()->_rspErr(1, 'param error');
return;
}
}
$user = User::findByAddress($address);
if (SERVER_ENV != _ONLINE) {
$user = User::find('2_2006_I75DCdyQRllgGRYvT0wcGtPR9gbDUZws');
}
if (!$user){
myself()->_rspErr(1, 'user not found');
return;
}
$currentStageMeta = mt\CircuitTime::getCurrentStage();
if (!$currentStageMeta){
$currentStageMeta = mt\CircuitTime::getPrevStage();
}
$redis = $this->_getRedis($this->redis_key_circuit_phase_ranking);
if (! $redis->exists(CIRCUIT_RANKING_KEY.$this->redis_key_circuit_phase_ranking)){
$rows = Circuit::getCircuitPhaseList($currentStageMeta['circuit_season'],$currentStageMeta['circuit_phase']);
$sortRows = myself()->arraySort($rows, 'cumulative_score', 'desc');
$list = $this->_extractRankingInfo($sortRows);
$redis->set(CIRCUIT_RANKING_KEY.$this->redis_key_circuit_phase_ranking , json_encode($list));
$redis->pexpire(CIRCUIT_RANKING_KEY.$this->redis_key_circuit_phase_ranking , 10*60*1000);
}else{
$listStr = $redis->get(CIRCUIT_RANKING_KEY.$this->redis_key_circuit_phase_ranking);
$list = emptyReplace(json_decode($listStr, true), array());
}
$myInfo = $this->_celMyRankingInfo($list,$user['account_id']);
$info = array(
'star_time' => strtotime($currentStageMeta['start_time']),
'end_time' => strtotime($currentStageMeta['end_time']),
'ranking' => $myInfo['ranking'],
'score' => $myInfo['score'],
);
$this->_rspData(array(
'rank_list' => $list,
'info' => $info,
));
}
public function getCircuitRewardHistory(){
$address = getReqVal('address', '');
@ -53,13 +154,17 @@ class OutAppCircuitController extends BaseController {
$currentStageMeta = \mt\CircuitTime::getCurrentStage();
$prevStageMeta = \mt\CircuitTime::getPrevStage();
if (!$currentStageMeta && $prevStageMeta && !CircuitReward::_verifySettlement($prevStageMeta['circuit_season'],$prevStageMeta['circuit_phase'])){
$rows = Circuit::getRankingList($prevStageMeta['circuit_season']);
if (count($rows) > 0){
if (!$currentStageMeta &&
$prevStageMeta &&
$prevStageMeta['is_reward'] > 0 &&
!CircuitReward::_verifySettlement($prevStageMeta['circuit_season'],$prevStageMeta['circuit_phase'])){
$rows = Circuit::getCircuitList($prevStageMeta['circuit_season']);
$sortRows = myself()->arraySort($rows, 'cumulative_score', 'desc');
if (count($sortRows) > 0){
$totalWeight = 0;
$rate = \mt\Parameter::getVal('circuit_reward_rate','');
$count = floor(count($rows) * $rate) ;
foreach ($rows as $k=>$value){
$count = floor(count($sortRows) * $rate) ;
foreach ($sortRows as $k=>$value){
$ranking = $k+1;
$rewardWeight = \mt\CircuitReward::getRewardWeight($ranking);
if ($ranking <= $count){
@ -67,7 +172,7 @@ class OutAppCircuitController extends BaseController {
}
}
$cecPool = $prevStageMeta['cec_pool'];
foreach ($rows as $k=>$value){
foreach ($sortRows as $k=>$value){
$cec = 0;
$ranking = $k+1;
$rewardWeight = \mt\CircuitReward::getRewardWeight($ranking);
@ -91,4 +196,50 @@ class OutAppCircuitController extends BaseController {
$this->_rspErr(1,'未满足结算条件');
}
private function _extractRankingInfo($data){
$rankingList = array();
$ranking = 0;
foreach ($data as $k=>$row){
++$ranking;
$userDb = User::find($row['account_id']);
$heroDb = Hero::findByAccountId($userDb['account_id'],$userDb['hero_id']);
$skinDb = HeroSkin::findByAccountId($heroDb['skin_id'], $userDb['account_id']);
$heroId = $heroDb ? $heroDb['hero_id']:0;
$skinId = $skinDb ? $skinDb['skin_id']:0;
$rewardWeight = \mt\CircuitReward::getRewardWeight($ranking);
if ($userDb){
$info = array(
'account_id' => $userDb['account_id'],
'name' => utf8_encode($userDb['name']),
'head_id' => $userDb['head_id'],
'head_frame' => $userDb['head_frame'],
'hero_id' => $heroId,
'skin_id' => $skinId,
'ranking' => $ranking,
'weight' => $rewardWeight,
'score' => $row['cumulative_score'],
'score_boost' => number_format($row['score_boost'], 2, '.', ''),
);
array_push($rankingList,$info);
}
}
return $rankingList;
}
private function _celMyRankingInfo($list,$account){
$myRankedInfo = array(
'ranking' => 0,
'score' => 0,
);
if (count($list) > 0){
foreach ($list as $value){
if ($value['account_id'] == $account){
$myRankedInfo['ranking'] = $value['ranking'];
$myRankedInfo['score'] = $value['score'];
}
}
}
return $myRankedInfo;
}
}

View File

@ -7,6 +7,7 @@ require_once('models/SignLog.php');
require_once('models/UserHonor.php');
require_once('models/GlobalData.php');
require_once('models/HeroPreset.php');
require_once('models/CircuitTask.php');
require_once('mt/Parameter.php');
@ -19,6 +20,7 @@ require_once('mt/Item.php');
require_once('mt/Map.php');
require_once('mt/MapMode.php');
require_once('mt/EconomyAttribute.php');
require_once('mt/CircuitTask.php');
require_once('services/AwardService.php');
require_once('services/PropertyChgService.php');
@ -27,6 +29,7 @@ require_once('services/NameService.php');
require_once('services/ChipPageService.php');
require_once('services/LogService.php');
require_once('services/NftService.php');
require_once('services/StakingVipService.php');
use phpcommon\SqlHelper;
use models\User;
@ -36,6 +39,7 @@ use models\SignLog;
use models\UserHonor;
use models\GlobalData;
use models\HeroPreset;
use models\CircuitTask;
use services\LogService;
class UserController extends BaseAuthedController {
@ -373,11 +377,7 @@ class UserController extends BaseAuthedController {
return;
}
$userInfo = User::Info($userDb);
{
$userInfo['total_lucky'] = Hero::getAccountLuckyTemp();
$userInfo['admission_item_num'] = myself()->_getItemCount(900006, $userInfo);
$userInfo['circuit_score'] = myself()->_callModelStatic('Circuit', 'getCurrentMyScore');
}
$this->fillBattleUserInfo($userInfo);
$heroDb = Hero::findByAccountId(myself()->_getAccountId(), $userInfo['hero_uniid']);
if (!$heroDb) {
$this->_rspErr(1, 'Hero does not exist');
@ -412,11 +412,7 @@ class UserController extends BaseAuthedController {
return;
}
$userInfo = User::Info($userDb);
{
$userInfo['total_lucky'] = Hero::getAccountLuckyTemp();
$userInfo['admission_item_num'] = myself()->_getItemCount(900006, $userInfo);
$userInfo['circuit_score'] = myself()->_callModelStatic('Circuit', 'getCurrentMyScore');
}
$this->fillBattleUserInfo($userInfo);
$heroDb = Hero::findByAccountId(myself()->_getAccountId(), $userInfo['hero_uniid']);
if (!$heroDb) {
$this->_rspErr(1, 'Hero does not exist');
@ -452,11 +448,7 @@ class UserController extends BaseAuthedController {
return;
}
$userInfo = User::Info($userDb);
{
$userInfo['total_lucky'] = Hero::getAccountLuckyTemp();
$userInfo['admission_item_num'] = myself()->_getItemCount(900006, $userInfo);
$userInfo['circuit_score'] = myself()->_callModelStatic('Circuit', 'getCurrentMyScore');
}
$this->fillBattleUserInfo($userInfo);
$heroDb = Hero::findByAccountId(myself()->_getAccountId(), $heroUniId);
if (!$heroDb) {
$this->_rspErr(1, 'Hero does not exist');
@ -495,11 +487,26 @@ class UserController extends BaseAuthedController {
)
)) {
$itemNum = myself()->_callModelStatic('Bag', 'getItemCount', $itemId);
$hasLuckySymbol = myself()->_callModelStatic('LuckySymbol', 'hasLuckySymbol');
if ($itemMeta['type'] == mt\Item::FUNC_TYPE &&
$itemMeta['sub_type'] == mt\Item::LUCKY_SYMBOL_SUBTYPE &&
!$hasLuckySymbol) {
$this->_decItems(array(
array(
'item_id' => $itemMeta['id'],
'item_num' => 1
)
));
myself()->_callModelStatic('LuckySymbol', 'add');
$hasLuckySymbol = 1;
}
myself()->_rspData(array(
'item_id' => $itemId,
'item_num' => $itemNum,
'item_type' => $itemMeta['type'],
'item_sub_type' => $itemMeta['sub_type']
'item_sub_type' => $itemMeta['sub_type'],
'has_lucky_symbol' => $hasLuckySymbol,
'total_lucky' => Hero::getAccountLuckyTemp(),
));
} else {
myself()->_rspErr(1, 'item_id not found');
@ -1119,6 +1126,9 @@ class UserController extends BaseAuthedController {
}
private function _sign(){
if (CircuitTask::_verifyLoginToday()){
myself()->_callModelStatic('CircuitTask','incTaskVal',mt\CircuitTask::LOGIN_TIMES_END,1);
}
//用户是否有签到记录
if (SignLog::isSignRecord()){
//有签到记录
@ -1152,7 +1162,35 @@ class UserController extends BaseAuthedController {
}
}
public function getMyVip(){
public function getUserVip(){
$details = \services\StakingVipService::getDetails(myself()->_getAddress());
$this->_rspData(
array(
'vip' => $details['lv'],
'exp' => $details['cur'],
)
);
}
private function fillBattleUserInfo(&$userInfo)
{
$userInfo['total_lucky'] = Hero::getAccountLuckyTemp();
$userInfo['admission_item_num'] = myself()->_getItemCount(900006, $userInfo);
$userInfo['circuit_score'] = myself()->_callModelStatic('Circuit', 'getCurrentMyScore');
$userInfo['has_lucky_symbol'] = myself()->_callModelStatic('LuckySymbol', 'hasLuckySymbol');
$userInfo['has_vip_lucky'] = myself()->_getVipRightsVal(
myself()->_getMtConstant('StakingVip', 'ACCOUNT_LUCKY_INC')
);
{
$userInfo['vip_lv'] = 0;
$userInfo['vip_exp'] = 0;
$vipInfo = myself()->_callServiceStatic('StakingVipService', 'getDetails', $userInfo['address']);
if ($vipInfo) {
$userInfo['vip_lv'] = $vipInfo['lv'];
$userInfo['vip_exp'] = $vipInfo['cur'];
}
}
}
}

View File

@ -3,8 +3,12 @@
namespace models;
require_once('models/UserInvitationCode.php');
use mt;
use phpcommon\SqlHelper;
use models\UserInvitationCode;
class Circuit extends BaseModel
{
public static function updateScore($season,$score){
@ -29,6 +33,30 @@ class Circuit extends BaseModel
);
}
public static function updatePhaseScore($season,$phase,$score){
SqlHelper::upsert(
myself()->_getSelfMysql(),
't_circuit_battle_phase',
array(
'account_id' => myself()->_getAccountId(),
'season' => $season,
'phase' => $phase,
),
array(
'cumulative_score' => $score,
'modifytime' => myself()->_getNowTime()
),
array(
'account_id' => myself()->_getAccountId(),
'season' => $season,
'phase' => $phase,
'cumulative_score' => $score,
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime()
)
);
}
public static function getMyScore($season){
$row = SqlHelper::ormSelectOne(
myself()->_getSelfMysql(),
@ -41,11 +69,24 @@ class Circuit extends BaseModel
return $row ? $row['cumulative_score'] : 0;
}
public static function getMyPhaseScore($season,$phase){
$row = SqlHelper::ormSelectOne(
myself()->_getSelfMysql(),
't_circuit_battle_phase',
array(
'account_id' => myself()->_getAccountId(),
'season' => $season,
'phase' => $phase,
)
);
return $row ? $row['cumulative_score'] : 0;
}
public static function getRankingList($season){
$sql = "select * from t_circuit_battle where season=:season order by cumulative_score desc,modifytime asc";
$whereKv = array(
"season" => $season,
":season" => $season,
);
$rows = myself()->_getMysql('')->execQuery($sql,$whereKv);
if (!$rows){
@ -54,6 +95,58 @@ class Circuit extends BaseModel
return $rows;
}
public static function getCircuitList($season){
$rows = SqlHelper::ormSelect(
myself()->_getMysql(''),
't_circuit_battle',
array(
'season' => $season
)
);
foreach ($rows as &$row){
$codeDb = UserInvitationCode::findCodeByAccount($row['account_id']);
$count = UserInvitationCode::getMyCodeBindCount($codeDb['invitation_code']);
$boost = min($count * 3 / 100,60 / 100);
$boostScore = $row['cumulative_score'] * $boost;
$row['score_boost'] = $boostScore;
$row['cumulative_score'] += $boostScore;
}
return $rows;
}
public static function getPhaseRankingList($season,$phase){
$sql = "select * from t_circuit_battle_phase where season=:season and phase=:phase order by cumulative_score desc,modifytime asc";
$whereKv = array(
":season" => $season,
":phase" => $phase,
);
$rows = myself()->_getMysql('')->execQuery($sql,$whereKv);
if (!$rows){
$rows = array();
}
return $rows;
}
public static function getCircuitPhaseList($season,$phase){
$rows = SqlHelper::ormSelect(
myself()->_getMysql(''),
't_circuit_battle_phase',
array(
'season' => $season,
'phase' => $phase,
)
);
foreach ($rows as &$row){
$codeDb = UserInvitationCode::findCodeByAccount($row['account_id']);
$count = UserInvitationCode::getMyCodeBindCount($codeDb['invitation_code']);
$boost = min($count * 3 / 100,60 / 100);
$boostScore = $row['cumulative_score'] * $boost;
$row['score_boost'] = $boostScore;
$row['cumulative_score'] += $boostScore;
}
return $rows;
}
public static function getCurrentMyScore(){
$circuitMeta = myself()->_callMtStatic('CircuitTime', 'getCurrentCircuit');

View File

@ -0,0 +1,100 @@
<?php
namespace models;
require_once('mt/CircuitTime.php');
use mt;
use phpcommon\SqlHelper;
class CircuitTask extends BaseModel
{
public static function _verifyCondition($season){
$metas = mt\CircuitTask::getListBySeason($season);
foreach ($metas as $meta){
$current = self::getCurrentVal($season,$meta['type']);
if ($current < $meta['target']){
return false;
}
}
return true;
}
public static function _verifyLoginToday(){
$circuitCircuitMeta = mt\CircuitTime::getCurrentCircuit();
$nextCircuitMeta = mt\CircuitTime::getNextCircuit();
if ($circuitCircuitMeta || !$nextCircuitMeta){
return false;
}
if (myself()->_getNowTime() < strtotime($nextCircuitMeta['task_open_time'])){
return false;
}
$season = $nextCircuitMeta['circuit_season'];
$row = SqlHelper::ormSelectOne(
myself()->_getSelfMysql(),
't_circuit_task_value',
array(
'account_id' => myself()->_getAccountId(),
'circuit_season' => $season,
'task_type' => mt\CircuitTask::LOGIN_TIMES_END,
)
);
if ($row){
if (myself()->_getDaySeconds($row['modifytime']) >= myself()->_getNowDaySeconds()){
return false;
}
}
return true;
}
public static function incTaskVal($taskType,$value){
$circuitCircuitMeta = mt\CircuitTime::getCurrentCircuit();
$nextCircuitMeta = mt\CircuitTime::getNextCircuit();
if ($circuitCircuitMeta || !$nextCircuitMeta){
return;
}
if (myself()->_getNowTime() < strtotime($nextCircuitMeta['task_open_time'])){
return;
}
$season = $nextCircuitMeta['circuit_season'];
SqlHelper::upsert(
myself()->_getSelfMysql(),
't_circuit_task_value',
array(
'account_id' => myself()->_getAccountId(),
'circuit_season' => $season,
'task_type' => $taskType,
),
array(
'value' => function () use ($value){
return "value + ${value}";
},
'modifytime' => myself()->_getNowTime(),
),
array(
'account_id' => myself()->_getAccountId(),
'circuit_season' => $season,
'task_type' => $taskType,
'value' => $value,
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime(),
)
);
}
public static function getCurrentVal($season,$taskType){
$row = SqlHelper::ormSelectOne(
myself()->_getSelfMysql(),
't_circuit_task_value',
array(
'account_id' => myself()->_getAccountId(),
'circuit_season' => $season,
'task_type' => $taskType,
)
);
return $row ? $row['value'] : 0;
}
}

View File

@ -1040,6 +1040,7 @@ class Hero extends BaseModel {
if ($rightVal > 0){
$lucky += $rightVal;
}
$lucky += myself()->_callModelStatic('LuckySymbol', 'getLuckyInc');
return $lucky;
}

View File

@ -48,7 +48,7 @@ class HeroSkin extends BaseModel {
public static function find($uniid)
{
$row = SqlHelper::ormSelectOne(
myself()->_getSelfMysql(),
myself()->_getMysql(''),
't_hero_skin',
array(
'idx' => $uniid,
@ -75,7 +75,7 @@ class HeroSkin extends BaseModel {
public static function findByAccountId($accountId, $uniid)
{
$row = SqlHelper::ormSelectOne(
myself()->_getSelfMysql(),
myself()->_getMysql(''),
't_hero_skin',
array(
'idx' => $uniid,

View File

@ -0,0 +1,82 @@
<?php
namespace models;
use mt;
use phpcommon\SqlHelper;
class LuckySymbol extends BaseModel {
public static function hasLuckySymbol()
{
$row = SqlHelper::ormSelectOne(
myself()->_getSelfMysql(),
't_lucky_symbol',
array(
'account_id' => myself()->_getAccountId(),
)
);
$has = empty($row) ? false : $row['in_use_num'] > 0;
return $has ? 1 : 0;
}
public static function dec()
{
SqlHelper::update
(myself()->_getSelfMysql(),
't_lucky_symbol',
array(
'account_id' => myself()->_getAccountId(),
),
array(
'in_use_num' => 0,
'modifytime' => myself()->_getNowTime(),
)
);
}
public static function add()
{
SqlHelper::upsert
(myself()->_getSelfMysql(),
't_lucky_symbol',
array(
'account_id' => myself()->_getAccountId(),
),
array(
'in_use_num' => function () { return "in_use_num + 1";},
'modifytime' => myself()->_getNowTime(),
),
array(
'account_id' => myself()->_getAccountId(),
'in_use_num' => 1,
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime(),
)
);
}
public static function getLuckyInc()
{
$val = 0;
if (self::hasLuckySymbol()) {
$itemMeta = myself()->_callMtStatic('Item', 'getLuckySymbolMeta');
if ($itemMeta) {
$potionMeta = myself()->_callMtStatic('BattlePotion', 'find', $itemMeta['id']);
if ($potionMeta) {
$effectStrs = explode('|', $potionMeta['effect']);
if (count($effectStrs) > 0) {
$effectStrs2 = explode(':', $effectStrs[0]);
if (count($effectStrs2) >= 2) {
if ($effectStrs2[0] == 54) {
$val += $effectStrs2[1];
}
}
}
}
}
}
return $val;
}
}

View File

@ -0,0 +1,43 @@
<?php
namespace models;
use mt;
use phpcommon\SqlHelper;
class LuckySymbolRecord extends BaseModel {
public static function find($roomUuid)
{
$row = SqlHelper::ormSelectOne(
myself()->_getSelfMysql(),
't_lucky_symbol_record',
array(
'account_id' => myself()->_getAccountId(),
'room_uuid' => $roomUuid,
)
);
return $row;
}
public static function add($roomUuid)
{
SqlHelper::upsert
(myself()->_getSelfMysql(),
't_lucky_symbol_record',
array(
'account_id' => myself()->_getAccountId(),
'room_uuid' => $roomUuid,
),
array(
),
array(
'account_id' => myself()->_getAccountId(),
'room_uuid' => $roomUuid,
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime(),
)
);
}
}

View File

@ -70,17 +70,7 @@ class User extends BaseModel {
);
return $rows ? $rows : null;
}
public static function getVipLv($address){
$row = SqlHelper::ormSelectOne(
myself()->_getMarketMysql(''),
't_staking_cec',
array(
'account_address' => $address
)
);
return $row ? $row['vip_lv'] : 0;
}
public static function show($row)
{
@ -141,7 +131,6 @@ class User extends BaseModel {
'honor_info' => $honorInfo,
'account_lucky' => $lucky,
'chest_rate' => $rate,
'vip_lv' => self::getVipLv($row['address']),
);
}
@ -207,7 +196,6 @@ class User extends BaseModel {
'last_login_time' => $row['last_login_time'],
'account_lucky' => $lucky,
'chest_rate' => $rate,
'vip_lv' => self::getVipLv($row['address']),
);
}

View File

@ -18,9 +18,21 @@ class UserInvitationCode extends BaseModel
return $row;
}
public static function findCodeByAccount($account){
$row = SqlHelper::ormSelectOne(
myself()->_getMysql(''),
't_user_invitation_code',
array(
'account_id' => $account,
)
);
return $row;
}
public static function generateCode(){
$user = myself()->_getOrmUserInfo();
SqlHelper::upsert(
myself()->_getSelfMysql(),
myself()->_getMysql(''),
't_user_invitation_code',
array(
'account_id' => myself()->_getAccountId(),
@ -30,7 +42,7 @@ class UserInvitationCode extends BaseModel
),
array(
'account_id' => myself()->_getAccountId(),
'invitation_code' =>rand(100000,999999),
'invitation_code' =>$user['idx'],
'createtime' =>myself()->_getNowTime(),
'modifytime' =>myself()->_getNowTime(),
)
@ -39,7 +51,7 @@ class UserInvitationCode extends BaseModel
public static function getMyCodeBindCount($code){
$rows = SqlHelper::ormSelect(
myself()->_getSelfMysql(),
myself()->_getMysql(''),
't_user_invitation_code_bind',
array(
'invitation_code' => $code,
@ -125,4 +137,4 @@ class UserInvitationCode extends BaseModel
}
}
}

View File

@ -0,0 +1,30 @@
<?php
namespace mt;
class BattlePotion
{
public static function find($id){
foreach (self::getMetaList() as $meta){
if ($meta['potionId'] == $id){
return $meta;
}
}
return array();
}
protected static function getMetaList()
{
if (!self::$metaList) {
self::$metaList = getMetaTable('battlePotion@battlePotion.php');
}
return self::$metaList;
}
protected static $metaList;
}

33
webapp/mt/CircuitTask.php Normal file
View File

@ -0,0 +1,33 @@
<?php
namespace mt;
use phpcommon;
class CircuitTask {
const BATTLE_TIMES_END = 1;
const COMPLETE_HASH_TASK_END = 2;
const LOGIN_TIMES_END = 3;
public static function getListBySeason($season){
$metas = array();
foreach (self::getMetaList() as $meta){
if ($meta['season'] == $season){
array_push($metas,$meta);
}
}
return $metas;
}
protected static function getMetaList()
{
if (!self::$metaList) {
self::$metaList = getMetaTable('circuitTask@circuitTask.php');
}
return self::$metaList;
}
protected static $metaList;
}

View File

@ -18,6 +18,17 @@ class CircuitTime {
return null;
}
public static function getNextCircuit(){
$next = array();
foreach (self::getCircuitAll(self::WHOLE_SEASON__TYPE) as $meta){
if (myself()->_getNowTime() < strtotime($meta['start_time'])){
$next = $meta;
break;
}
}
return $next;
}
public static function getPrevStage(){
$prev = array();
foreach (self::getCircuitAll(self::STAGE_SEASON_TYPE) as $meta){

View File

@ -139,6 +139,8 @@ class Item {
const LUCKY_SYMBOL_SUBTYPE = 8;
const BATTLE_POTION_SUBTYPE = 9;
const LUCKY_SYMBOL_ITEM_ID = 900007;
public static function get($id)
{
return getXVal(self::getMetaList(), $id, null);
@ -358,6 +360,11 @@ class Item {
$guns = array_unique($guns);
}
public static function getLuckySymbolMeta()
{
return self::get(self::LUCKY_SYMBOL_ITEM_ID);
}
protected static function getMetaList()
{
if (!self::$metaList) {

View File

@ -128,18 +128,20 @@ class MapMode
self::traverseMeta(function ($meta)
use (&$mapModeMeta, &$phase, &$startTime, &$endTime) {
if ($meta['mapMode'] == self::TREASURE_BOX_MODE) {
if (self::configedDailyTimeLimit1($meta)) {
if (self::configedDailyTimeLimit1($meta) &&
myself()->_inTimeRangeStr($meta['daily_open_time'], $meta['daily_end_time'])) {
$mapModeMeta = $meta;
$phase = 1;
$startTime = myself()->_getDaySecondsOffset(strtotime("2024-6-22 ". $meta['daily_open_time']));
$endTime = myself()->_getDaySecondsOffset(strtotime("2024-6-22 ". $meta['daily_end_time']));
return false;
}
if (self::configedDailyTimeLimit2($meta)) {
if (self::configedDailyTimeLimit2($meta) &&
myself()->_inTimeRangeStr($meta['daily_open_time_2'], $meta['daily_end_time_2'])) {
$mapModeMeta = $meta;
$phase = 2;
$startTime = myself()->_getDaySecondsOffset(strtotime("2024-6-22 ". $meta['daily_open_time2']));
$endTime = myself()->_getDaySecondsOffset(strtotime("2024-6-22 ". $meta['daily_end_time2']));
$startTime = myself()->_getDaySecondsOffset(strtotime("2024-6-22 ". $meta['daily_open_time_2']));
$endTime = myself()->_getDaySecondsOffset(strtotime("2024-6-22 ". $meta['daily_end_time_2']));
return false;
}
}

View File

@ -24,6 +24,9 @@ class RookieTask {
const AND_FRIENDS_BATTLE_COND = 17; //和好友完成x场战斗
const UP_HERO_TIMES_COND = 18; //进阶x次英雄
const SYN_HERO_TIMES_COND = 19; //合成x次英雄
const USE_BATTLE_MIXTURES_COND = 20; //使用一次战斗药剂
const USE_LUCKY_CHARM_COND = 21; //使用一次幸运符
const TOTAL_COMMIT_TASK_TIMES_COND = 101; //累积任务积分达到X
public static function getCustomDayMetaList($day=0){

View File

@ -48,6 +48,26 @@ class ShopGoods
return getXVal($shopData['goodsHash'], $goodsId, null);
}
public static function getRandDailyHeroGoodsIds($shopId, $num)
{
$goodsMetaList = self::getGoodsList($shopId);
$goodsIds = array();
foreach ($goodsMetaList as $goodsMeta) {
if ($goodsMeta['is_close']) {
continue;
}
array_push($goodsIds, $goodsMeta['goods_id']);
}
shuffle($goodsIds);
$result = array();
for ($i = 0; $i < $num; ++$i) {
if ($i < count($goodsIds)) {
array_push($result, $goodsIds[$i]);
}
}
return $result;
}
protected static function mustBeShopGoodsHash()
{
if (!self::$shopGoodsHash) {

View File

@ -49,8 +49,8 @@ class BattleBoxService {
if ($currPhase < 1 || $currPhase > 2) {
return 0;
}
$minNum = $maxLst0[$currPhase];
$maxNum = $maxLst0[$currPhase];
$minNum = $maxLst0[$currPhase - 1];
$maxNum = $maxLst1[$currPhase - 1];
error_log(json_encode(array(
'mapNodeMeta' => $mapModeMeta,
@ -68,6 +68,15 @@ class BattleBoxService {
$yesterDayDropLastTime = self::getDailyPhaseDropLastTime($currPhase, $yesterDayTime);
$yesterDayDropTotal = self::getDailyPhaseDropTotalNum($currPhase, $yesterDayTime);
$yesterDayAllocNum = self::getDailyPhaseAllocNum($currPhase, $yesterDayTime);
$yesterDayAlreadyAllocNum = self::getDailyPhaseAlreadyAllocNum($currPhase, $yesterDayTime);
error_log(json_encode(array(
'yesterDayDropLastTime' => $yesterDayDropLastTime,
'yesterDayDropTotal' => $yesterDayDropTotal,
'yesterDayAllocNum' => $yesterDayAllocNum,
'yesterDayAlreadyAllocNum' => $yesterDayAlreadyAllocNum,
'maxNum' => $maxNum,
)));
$yesterDayDropTotal = max($yesterDayDropTotal, $yesterDayAlreadyAllocNum);
if ($yesterDayAllocNum <= 0) {
$allocableNum = $maxNum;
} else {
@ -91,11 +100,19 @@ class BattleBoxService {
$completionDegree = $yesterDayDropTotal / $yesterDayAllocNum;
}
$allocableNum = min($maxNumLimit, $yesterDayAllocNum * $completionDegree);
$allocableNum = max(300, $allocableNum);
if ($allocableNum <= 0) {
$allocableNum = $yesterDayAllocNum;
}
}
if ($allocableNum > 0) {
self::setDailyPhaseAllocNum($currPhase, myself()->_getNowDaySeconds(), $allocableNum);
}
} else {
error_log(json_encode(array(
'allocableNum' => $allocableNum,
'alreadyAllocNum' => $alreadyAllocNum,
)));
$allocableNum = max(0, $allocableNum - $alreadyAllocNum);
}
if ($allocableNum > 0) {
@ -191,7 +208,7 @@ class BattleBoxService {
private static function setDailyPhaseDropLastTime($phase, $time, $val)
{
$key = self::DAILY_PHASE_DROP_LAST_TIME_KEY . $phase . ':' . $time;
$key = self::DAILY_PHASE_DROP_LAST_TIME_KEY . $phase . ':' . myself()->_getDaySeconds($time);
$r = myself()->_getRedis($key);
$r->setPx($key, $val, 1000 * 3600 * 24 * 7);
}
@ -239,7 +256,7 @@ class BattleBoxService {
public static function incDropTotalNum($phase, $time, $val)
{
$key = self::DAILY_PHASE_DROP_TOTAL_KEY . $phase . ':' . $time;
$key = self::DAILY_PHASE_DROP_TOTAL_KEY . $phase . ':' . myself()->_getDaySeconds($time);
$r = myself()->_getRedis($key);
$num = intval($r->get($key));
if (empty($num)) {
@ -247,6 +264,7 @@ class BattleBoxService {
} else {
$r->setPx($key, $num + $val, 1000 * 3600 * 24 * 7);
}
self::setDailyPhaseDropLastTime($phase, $time, $time);
}
}

View File

@ -527,8 +527,10 @@ class MissionService extends BaseService {
{
//邀请新人并绑定邀请码(邀请新人数)
$myCodeDb = UserInvitationCode::findMyCode();
$count = UserInvitationCode::getMyCodeBindCount($myCodeDb['invitation_code']);
$missionDto['current'] = $count;
if ($myCodeDb){
$count = UserInvitationCode::getMyCodeBindCount($myCodeDb['invitation_code']);
$missionDto['current'] = $count;
}
}
break;
case mt\Task::OFFER_REWARD_COND:
@ -1494,10 +1496,19 @@ class MissionService extends BaseService {
return false;
}
public function _isHaveRedTag(){
foreach ($this->dailyMission['missions'] as $mission) {
$missionMeta = mt\Task::get($mission['mission_id']);
$missionDb = Mission::find($mission['mission_id']);
public function _isHaveRedTag($type){
if ($type == 0){
$missionMetaList = array();
foreach ($this->dailyMission['missions'] as $mission){
$missionMeta = mt\Task::get($mission['mission_id']);
array_push($missionMetaList,$missionMeta);
}
}else{
$missionMetaList = mt\Task::getCustomTypeMetaList(\mt\Task::NEW_USER_MISSON_TYPE, $this);
}
foreach ($missionMetaList as $missionMeta) {
$missionDb = Mission::find($missionMeta['id']);
$missionDto = $this->getMissionDto($this->userInfo,'',$missionDb,$missionMeta);
if ($missionDto['state'] == Mission::RECEIVEABLE_STATE) {
return true;

View File

@ -14,6 +14,8 @@ require_once('mt/RankSeason.php');
require_once('mt/EconomyAttribute.php');
require_once('mt/CircuitTime.php');
require_once('mt/StakingVip.php');
require_once('mt/BattlePotion.php');
require_once('mt/Item.php');
require_once('services/AwardService.php');
require_once('services/PropertyChgService.php');
@ -131,21 +133,25 @@ class RoomBattleDataService extends BaseService {
//巡回模式排位分计算
if ($this->mapMode == mt\MapMode::CIRCUIT_MODE){
$circuitMeta = mt\CircuitTime::getCurrentCircuit();
if ($circuitMeta){
$circuitStageMeta = mt\CircuitTime::getCurrentStage();
if ($circuitMeta && $circuitStageMeta){
$minScore = mt\Parameter::getVal('circuit_rank_score_min',0);
$multConstant = mt\Parameter::getVal('circuit_score_mult_constant',1);
$shiftConstant = mt\Parameter::getVal('circuit_score_shift_constant',1);
$circuitScore = $battleScore * $multConstant + $shiftConstant;
$myScore = Circuit::getMyScore($circuitMeta['circuit_season']);
$finalScore = max($minScore, $myScore+$circuitScore);
$myPhaseScore = Circuit::getMyPhaseScore($circuitStageMeta['circuit_season'],$circuitStageMeta['circuit_phase']);
$finalScore = floor(max($minScore, $myScore+$circuitScore)) ;
$finalPhaseScore = floor(max($minScore, $myPhaseScore+$circuitScore));
Circuit::updateScore($circuitMeta['circuit_season'],$finalScore);
Circuit::updatePhaseScore($circuitStageMeta['circuit_season'],$circuitStageMeta['circuit_phase'],$finalPhaseScore);
$member['new_circuit_score'] = $finalScore;
}
}
$battleSingleDb = BattleSettlement::findSingle($this->battleSettlementDb['battle_uuid']);
if ($this->mapMode == mt\MapMode::TREASURE_BOX_MODE && $member['move_distance'] <= 2000 ){
error_log("金币模式:消极战斗");
error_log("宝箱模式:消极战斗");
}else{
$this->_getBattleRewards($battleSingleDb, $userDb,$heroDb,$battleScore,$myTeamScoreAvg,$myTeamScore,$member['reward'], $member);
myself()->_addItems($member['reward'], $awardService,$propertyChgService);
@ -184,8 +190,23 @@ class RoomBattleDataService extends BaseService {
$teamRank = getXVal($this->teamData,'pvp_team_rank', 0);
if ($mapModeMeta){
$accountLucky = Hero::getAccountLuckyTemp();
$battleItems = getXVal($member,'battle_items', 0);
if (count($battleItems) > 0){
foreach ($battleItems as $item){
$itemMeta = mt\Item::get($item['item_id']);
if ($itemMeta['type'] == mt\Item::FUNC_TYPE && $itemMeta['sub_type'] == mt\Item::LUCKY_SYMBOL_SUBTYPE){
$potionMeta = mt\BattlePotion::find($item['item_id']);
if ($potionMeta){
$effect = explode(':',$potionMeta['effect']);
$accountLucky += $effect[1];
}
}
}
}
$rewardMeta = mt\BattleReward::find($mapModeMeta['rewardMode'],$accountLucky);
if (!$rewardMeta){
error_log('ERROR:'.$this->mapMode.' settlementReward,user have lucky '.$accountLucky);
return ;
}
$hashRateValue = 0;
@ -291,7 +312,7 @@ class RoomBattleDataService extends BaseService {
}
$gold = 0;
if ($heroDb['quality'] > 1){
if (!Hero::verifyValid($heroDb) && $heroTimes < $heroTimesMax && $goldModeTimes < $rewardsMaxTimes){
if (Hero::verifyValid($heroDb) && $heroTimes < $heroTimesMax && $goldModeTimes < $rewardsMaxTimes){
$items = LootService::dropOutItem($rewardMeta['goldLoot']);
foreach ($items as $item){
if ($item['item_id'] = V_ITEM_GOLD){
@ -335,6 +356,15 @@ class RoomBattleDataService extends BaseService {
//宝箱掉落
$chestLootProbArr = explode(";",$rewardMeta['chestLootProb']);
$rate = isset($chestLootProbArr[$teamRank-1]) ? $chestLootProbArr[$teamRank-1] : 0;
if ($member['account_id'] == "2_2006_QmoeZ5t2ecIq6dVNyi9jQj5CzTUB0bGC"){
error_log("BoxMap:".json_encode(
array(
'rate' => $rate,
'box_num' => $member['box_num'],
'switch' => myself()->_switchIsOpen('bigEventBoxDrop'),
)
));
}
if ($rate > 0 && !empty($member['box_num']) && myself()->_switchIsOpen('bigEventBoxDrop')){
$rewardBox = array();
$realBoxNum = 0;

View File

@ -20,6 +20,8 @@ use models\GunSkin;
class ShopService {
private static $dailHeroHash = array();
public static function getGoodsList($shopId)
{
if ($shopId == 0) {
@ -36,6 +38,10 @@ class ShopService {
if ($goodsMeta['is_close']) {
continue;
}
if ($goodsMeta['shop_id'] == mt\Shop::DAILY_HERO_SHOP &&
!self::inDailyHeroList($goodsMeta)) {
continue;
}
$goodsDto = array(
'goods_id' => $goodsMeta['goods_id'],
'goods_meta' => self::goodsMetaToInfo($goodsMeta),
@ -153,6 +159,29 @@ class ShopService {
);
}
private static function getDailyHeroList()
{
if (isset(self::$dailyHeroHash[myself()->_getAccountId()])) {
return self::$dailyHeroHash[myself()->_getAccountId()];
}
$r = myself()->_getSelfRedis();
$key = 'shop.daily.shop:' . myself()->_getAccountId();
$data = $r->get($key);
if (empty($data)) {
$num = myself()->_callMtStatic('Parameter', 'getByName', 'SHOP_TYPE2_SLOT')['param_value'];
$data = mt\ShopGoods::getRandDailyHeroGoodsIds(mt\Shop::DAILY_HERO_SHOP, min(50, $num));
$r->setPx($key, json_encode($data), 1000 * 3600 * 24);
} else {
$data = json_decode($data, true);
}
return $data;
}
private static function inDailyHeroList($goodsMeta)
{
return in_array($goodsMeta['goods_id'], self::getDailyHeroList());
}
// public static function canBuy($itemMeta, &$errCode, &$errMsg)
// {
// $errCode = 0;

View File

@ -12,15 +12,15 @@ class StakingVipService extends BaseService
{
public static function getDetails($accountAddr)
{
if (empty($accountAddr) || !is_string($accountAddr)) {
return;
}
// if (empty($accountAddr) || !is_string($accountAddr)) {
// return;
// }
$row = phpcommon\SqlHelper::ormSelectOne(
myself()->_getMarketMysql(),
't_vip_user',
array(
'account_address' => $accountAddr,
'account_address' => strtolower($accountAddr),
)
);

View File

@ -17,6 +17,7 @@ require_once('mt/MapMode.php');
require_once('mt/BattleReward.php');
require_once('mt/CircuitTime.php');
require_once('mt/RookieTask.php');
require_once('mt/CircuitTask.php');
require_once('models/Season.php');
require_once('models/Battle.php');
@ -105,8 +106,8 @@ class TameBattleDataService extends BaseService {
return false;
}
myself()->_fireEvent('Battle','onSettlement',$this->battleInfo);
myself()->_callModelStatic('RookieTask','incTaskVal',mt\RookieTask::BATTLE_TIMES_COND,1);
$this->isMyFriend();
myself()->_callModelStatic('CircuitTask','incTaskVal',mt\CircuitTask::BATTLE_TIMES_END,1);
$this->incRookieTaskValue();
//记录战斗有效行为
// $this->_updateBattleData();
//记录战斗数据的排行榜
@ -165,17 +166,30 @@ class TameBattleDataService extends BaseService {
}
private function isMyFriend(){
private function incRookieTaskValue(){
myself()->_callModelStatic('RookieTask','incTaskVal',mt\RookieTask::BATTLE_TIMES_COND,1);
$battleItems = getXVal($this->battleInfo,'battle_items', 0);
if (count($battleItems) > 0){
foreach ($battleItems as $item){
$itemMeta = mt\Item::get($item['item_id']);
if ($itemMeta['type'] == mt\Item::FUNC_TYPE && $itemMeta['sub_type'] == mt\Item::LUCKY_SYMBOL_SUBTYPE){
myself()->_callModelStatic('RookieTask','incTaskVal',mt\RookieTask::USE_LUCKY_CHARM_COND,$item['use_num']);
}
if ($itemMeta['type'] == mt\Item::FUNC_TYPE && $itemMeta['sub_type'] == mt\Item::BATTLE_POTION_SUBTYPE){
myself()->_callModelStatic('RookieTask','incTaskVal',mt\RookieTask::USE_BATTLE_MIXTURES_COND,$item['use_num']);
}
}
}
$myAccount = getXVal($this->userInfo,'account_id', 0);
foreach ($this->teamInfo as $member){
$account = getXVal($member,'account_id', 0);
$row = SqlHelper::ormSelectOne(
myself()->_getFriendDbMysql(),
't_friend_ships',
't_friend_relationship',
array(
'account1_id' => $myAccount,
'account2_id' => $account,
'is_friendship' => 1,
'account_id1' => $myAccount,
'account_id2' => $account,
'deleted' => 0,
)
);
if ($row){
@ -184,11 +198,11 @@ class TameBattleDataService extends BaseService {
}
$row = SqlHelper::ormSelectOne(
myself()->_getFriendDbMysql(),
't_friend_ships',
't_friend_relationship',
array(
'account1_id' => $account,
'account2_id' => $myAccount,
'is_friendship' => 1,
'account_id1' => $account,
'account_id2' => $myAccount,
'deleted' => 0,
)
);
if ($row){
@ -573,7 +587,10 @@ class TameBattleDataService extends BaseService {
}
}
$circuitMeta = mt\CircuitTime::getCurrentCircuit();
$circuitScore = Circuit::getMyScore($circuitMeta['circuit_season']);
$circuitScore= 0;
if ($circuitMeta){
$circuitScore = Circuit::getMyScore($circuitMeta['circuit_season']);
}
$data = array(
"battle_uuid" => $battleUuid,
"map_mode_id" => getXVal($this->allInfo,'map_mode_id', 0),
@ -655,7 +672,10 @@ class TameBattleDataService extends BaseService {
}
}
$circuitMeta = mt\CircuitTime::getCurrentCircuit();
$circuitScore = Circuit::getMyScore($circuitMeta['circuit_season']);
$circuitScore= 0;
if ($circuitMeta){
$circuitScore = Circuit::getMyScore($circuitMeta['circuit_season']);
}
$data = array(
'version'=> getXVal($this->allInfo,'version', 0),
'team_id'=> getXVal($this->allInfo,'team_id', 0),
@ -770,6 +790,7 @@ class TameBattleDataService extends BaseService {
'reward' => $rewards,
'winningPro' => $winningPro,
'match_room_uuid' => getXVal($info,'match_room_uuid', 0),
'battle_items' => getXVal($info,'battle_items', array()),
);
array_push($data['members'],$temp);
}