1
This commit is contained in:
commit
0bd95356b7
11
.gitignore
vendored
Normal file
11
.gitignore
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
*.*\~
|
||||
*.*~
|
||||
*.*\#
|
||||
*.*#
|
||||
~*.*
|
||||
\#*.*
|
||||
*.out
|
||||
*.tar
|
||||
*.tar.gz
|
||||
target
|
||||
config/
|
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
[submodule "third_party/phpcommon"]
|
||||
path = third_party/phpcommon
|
||||
url = git@git.kingsome.cn:server_common/phpcommon.git
|
10
boundle.sh
Executable file
10
boundle.sh
Executable file
@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
tag_name=`git status |grep '# On branch '|sed 's/# On branch //g'`
|
||||
dir_name=`basename $PWD`
|
||||
package_name=${dir_name}.tar.gz
|
||||
#echo $tag_name
|
||||
#echo $dir_name
|
||||
#echo $package_name
|
||||
|
||||
tar --exclude=*.git -chzf target/${package_name} webapp config res reload.sh restart.sh reloadres.sh
|
1
reloadres.sh
Normal file
1
reloadres.sh
Normal file
@ -0,0 +1 @@
|
||||
echo 'success'
|
1
restart.sh
Normal file
1
restart.sh
Normal file
@ -0,0 +1 @@
|
||||
echo 'success'
|
272
sql/gamedb.sql
Normal file
272
sql/gamedb.sql
Normal file
@ -0,0 +1,272 @@
|
||||
-- MySQL dump 10.14 Distrib 5.5.41-MariaDB, for Linux (x86_64)
|
||||
--
|
||||
-- Host: localhost Database: accountdb
|
||||
-- ------------------------------------------------------
|
||||
-- Server version 5.5.41-MariaDB
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||
/*!40101 SET NAMES utf8 */;
|
||||
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
||||
/*!40103 SET TIME_ZONE='+00:00' */;
|
||||
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||
|
||||
--
|
||||
-- Table structure for table `version`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `version`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `version` (
|
||||
`idx` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||
`version` int(11) NOT NULL DEFAULT '0' COMMENT '版本号',
|
||||
PRIMARY KEY (`idx`),
|
||||
UNIQUE KEY `version` (`version`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
|
||||
--
|
||||
-- Table structure for table `user`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `user`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `user` (
|
||||
`idx` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||
`accountid` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id(channel + "_" + gameid + "_" + openid)',
|
||||
`user_name` tinyblob COMMENT '用户名字',
|
||||
`avatar_url` varchar(256) NOT NULL DEFAULT '' COMMENT '用户头像',
|
||||
`game_times` int(11) NOT NULL COMMENT '游戏场次',
|
||||
`win_times` int(11) NOT NULL COMMENT '胜场',
|
||||
`kills` int(11) NOT NULL COMMENT '所有击杀',
|
||||
`harm` int(11) NOT NULL COMMENT '所有伤害',
|
||||
`add_HP` int(11) NOT NULL COMMENT '所有治疗量',
|
||||
`alive_time` int(11) NOT NULL COMMENT '所有生存时间',
|
||||
`coin_num` bigint NOT NULL COMMENT '角色金币',
|
||||
`integral` bigint NOT NULL COMMENT '角色积分',
|
||||
`kill_his` int(11) NOT NULL COMMENT '最高击杀',
|
||||
`alive_time_his` int(11) NOT NULL COMMENT '最长生存时间',
|
||||
`harm_his` int(11) NOT NULL COMMENT '最高伤害',
|
||||
`add_HP_his` int(11) NOT NULL COMMENT '最多治疗量',
|
||||
`act_share_status` int(11) NOT NULL COMMENT '分享好礼活动状态',
|
||||
`act_share_time` int(11) NOT NULL COMMENT '分享好礼活动时间',
|
||||
`create_time` int(11) NOT NULL COMMENT '创建时间',
|
||||
`modify_time` int(11) NOT NULL COMMENT '修改时间',
|
||||
`first_fight` int(11) NOT NULL COMMENT '是否是第一次战斗',
|
||||
`collect_status` int(11) NOT NULL COMMENT '收藏状态',
|
||||
`keys_num` int(11) NOT NULL COMMENT '钥匙数量',
|
||||
`battle_re_times` int(11) NOT NULL COMMENT '每日战斗奖励次数',
|
||||
`shop_flush_times` int(11) NOT NULL COMMENT '每日商店刷新次数',
|
||||
`kefu_status` int(11) NOT NULL COMMENT '客服奖励状态(0:未领取,1:已领取)',
|
||||
PRIMARY KEY (`idx`),
|
||||
UNIQUE KEY `accountid` (`accountid`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
|
||||
--
|
||||
-- Table structure for table `skin`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `skin`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `skin` (
|
||||
`idx` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||
`accountid` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id(channel + "_" + gameid + "_" + openid)',
|
||||
`skin_id` int(11) NOT NULL COMMENT '皮肤id',
|
||||
`skin_status` int(11) NOT NULL COMMENT '皮肤状态(0:上阵中,1:已获得)',
|
||||
`fragment_id` int(11) NOT NULL COMMENT '碎片id',
|
||||
`fragment_num` int(11) NOT NULL COMMENT '碎片数量',
|
||||
`active_time` varchar(50) NOT NULL DEFAULT '有效时间(体验时间)',
|
||||
`fragment_status` int(11) NOT NULL COMMENT '碎片收集状态(活动相关)',
|
||||
`skin_type` int(11) NOT NULL COMMENT '皮肤类型',
|
||||
`skin_level` int(11) NOT NULL COMMENT '皮肤等级',
|
||||
`skin_experience_level` int(11) NOT NULL COMMENT '皮肤体验等级',
|
||||
`skin_experience_type` int(11) NOT NULL COMMENT '皮肤试用类型(0:没试用,1:皮肤体验,2:满级体验)',
|
||||
`create_time` int(11) NOT NULL COMMENT '创建时间',
|
||||
`modify_time` int(11) NOT NULL COMMENT '修改时间',
|
||||
PRIMARY KEY (`idx`),
|
||||
UNIQUE KEY `skin_uuid` (`accountid`, `skin_id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
|
||||
|
||||
--
|
||||
-- Table structure for table `equip`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `equip`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `equip` (
|
||||
`idx` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||
`accountid` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id',
|
||||
`equip_id` int(11) NOT NULL COMMENT '装备id',
|
||||
`equip_level` int(11) NOT NULL COMMENT '装备等级',
|
||||
`equip_experience_level` int(11) NOT NULL COMMENT '装备体验等级',
|
||||
`active_time` varchar(50) NOT NULL DEFAULT '有效时间',
|
||||
`create_time` int(11) NOT NULL COMMENT '创建时间',
|
||||
`modify_time` int(11) NOT NULL COMMENT '修改时间',
|
||||
PRIMARY KEY (`idx`),
|
||||
UNIQUE KEY `equip_uuid` (`accountid`, `equip_id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
|
||||
|
||||
--
|
||||
-- Table structure for table `supplybox`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `supplybox`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `supplybox` (
|
||||
`idx` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||
`accountid` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id',
|
||||
`box_id` int(11) NOT NULL COMMENT '补给箱id',
|
||||
`buy_times` int(11) NOT NULL COMMENT '购买次数',
|
||||
`free_times` int(11) NOT NULL COMMENT '免费获得次数',
|
||||
`last_buy_time` varchar(50) NOT NULL DEFAULT '最后一次购买',
|
||||
`create_time` int(11) NOT NULL COMMENT '创建时间',
|
||||
`modify_time` int(11) NOT NULL COMMENT '修改时间',
|
||||
PRIMARY KEY (`idx`),
|
||||
UNIQUE KEY `box_uuid` (`accountid`, `box_id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
|
||||
|
||||
--
|
||||
-- Table structure for table `sign`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `sign`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `sign` (
|
||||
`idx` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||
`accountid` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id',
|
||||
`sign_days` int(11) NOT NULL COMMENT '已签天数',
|
||||
`sign_time` varchar(50) NOT NULL DEFAULT '签到时间',
|
||||
`create_time` int(11) NOT NULL COMMENT '创建时间',
|
||||
`modify_time` int(11) NOT NULL COMMENT '修改时间',
|
||||
PRIMARY KEY (`idx`),
|
||||
UNIQUE KEY `accountid` (`accountid`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
|
||||
|
||||
--
|
||||
-- Table structure for table `hang`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `hang`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client*/;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `hang` (
|
||||
`idx` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||
`accountid` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id',
|
||||
`hang_time` varchar(50) NOT NULL DEFAULT '领取时间',
|
||||
`create_time` int(11) NOT NULL COMMENT '创建时间',
|
||||
`modify_time` int(11) NOT NULL COMMENT '修改时间',
|
||||
PRIMARY KEY (`idx`),
|
||||
UNIQUE KEY `accountid` (`accountid`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
|
||||
|
||||
--
|
||||
-- Table structrure for table `quest`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `quest`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client*/;
|
||||
/*!40101 SET character_set_client = utf8*/;
|
||||
CREATE TABLE `quest` (
|
||||
`idx` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||
`accountid` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id',
|
||||
`quest_id` int(11) NOT NULL COMMENT '任务id',
|
||||
`quest_num` int(11) NOT NULL COMMENT '任务进度',
|
||||
`quest_type` int(11) NOT NULL COMMENT '任务类型',
|
||||
`quest_state` int(11) NOT NULL COMMENT '任务状态',
|
||||
`create_time` int(11) NOT NULL COMMENT '创建时间',
|
||||
`modify_time` int(11) NOT NULL COMMENT '修改时间',
|
||||
PRIMARY KEY (`idx`),
|
||||
UNIQUE KEY `quest_uuid` (`accountid`, `quest_id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
|
||||
--
|
||||
-- Table structrure for table `active`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `active`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client*/;
|
||||
/*!40101 SET character_set_client = utf8*/;
|
||||
CREATE TABLE `active` (
|
||||
`idx` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||
`accountid` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id',
|
||||
`active_num` int(11) NOT NULL COMMENT '日活跃度',
|
||||
`num_time` varchar(50) NOT NULL DEFAULT '日活跃度时间',
|
||||
`active_sum` int(11) NOT NULL COMMENT '周活跃度',
|
||||
`sum_time` varchar(50) NOT NULL DEFAULT '周活跃度时间',
|
||||
`create_time` int(11) NOT NULL COMMENT '创建时间',
|
||||
`modify_time` int(11) NOT NULL COMMENT '修改时间',
|
||||
PRIMARY KEY (`idx`),
|
||||
UNIQUE KEY `accountid` (`accountid`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
|
||||
|
||||
--
|
||||
-- Table structrure for table `history_record`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `history_record`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `history_record`(
|
||||
`idx` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||
`accountid` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id',
|
||||
`room_uuid` varchar(60) NOT NULL DEFAULT '' COMMENT '战斗id',
|
||||
`map_id` int(11) NOT NULL COMMENT '地图id',
|
||||
`map_tpl_name` varchar(50) NOT NULL DEFAULT '' COMMENT '地图模板名字',
|
||||
`map_name` varchar(50) DEFAULT '' COMMENT '地图名字',
|
||||
`game_time` int(11) NOT NULL COMMENT '游戏完成时间',
|
||||
`rank` int(11) NOT NULL COMMENT '游戏排名',
|
||||
`kills` int(11) NOT NULL COMMENT '游戏击杀',
|
||||
`harms` int(11) NOT NULL COMMENT '游戏伤害',
|
||||
`hurts` int(11) NOT NULL COMMENT '承受伤害',
|
||||
`alive_time` int(11) NOT NULL COMMENT '游戏生存时间',
|
||||
`coin` bigint NOT NULL COMMENT '战斗结算金币',
|
||||
`status` int(11) NOT NULL COMMENT '结算金币领取状态',
|
||||
`create_time` int(11) NOT NULL COMMENT '创建时间',
|
||||
`modify_time` int(11) NOT NULL COMMENT '修改时间',
|
||||
PRIMARY KEY (`idx`),
|
||||
UNIQUE KEY `history_record_uuid` (`accountid`, `room_uuid`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
|
||||
--
|
||||
-- Table structure for table `share_achievement`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `share_achievement`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client*/;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `share_achievement` (
|
||||
`idx` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||
`accountid` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id',
|
||||
`ach_id` int(11) NOT NULL COMMENT '分享邀请成就id',
|
||||
`status` int(11) NOT NULL COMMENT '状态(0:未领取,1:已领取)',
|
||||
`create_time` int(11) NOT NULL COMMENT '创建时间',
|
||||
`modify_time` int(11) NOT NULL COMMENT '修改时间',
|
||||
PRIMARY KEY (`idx`),
|
||||
UNIQUE KEY `accountid_ach_id` (`accountid`, `ach_id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
|
||||
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||
|
||||
-- Dump completed on 2015-08-19 18:51:22
|
134
tools/rankserver/app.py
Normal file
134
tools/rankserver/app.py
Normal file
@ -0,0 +1,134 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#!/usr/bin/python
|
||||
|
||||
import pymysql
|
||||
import hashlib
|
||||
import json
|
||||
import urllib.request
|
||||
import base64
|
||||
import tornado.ioloop
|
||||
import tornado.web
|
||||
import time
|
||||
import datetime
|
||||
import redis
|
||||
import os
|
||||
CONFIG_DIR = ''
|
||||
|
||||
def IsOnlineEnv():
|
||||
return os.getenv("SERVER_ENV");
|
||||
|
||||
if (IsOnlineEnv()):
|
||||
CONFIG_DIR = '/var/data/conf_test/game2002api_rankserver/config'
|
||||
else:
|
||||
CONFIG_DIR = '../config'
|
||||
|
||||
#定时读取mysql里的数据生成排行榜写入redis后php读取redis返回客户端显示
|
||||
|
||||
def info(msg):
|
||||
print(str(datetime.datetime.now()) + '[INFO] ' + msg)
|
||||
|
||||
def take_kills(elem):
|
||||
return elem[3]
|
||||
|
||||
def take_alive_time(elem):
|
||||
return elem[4]
|
||||
|
||||
def take_harms(elem):
|
||||
return elem[5]
|
||||
|
||||
def take_win_times(elem):
|
||||
return elem[6]
|
||||
|
||||
def take_game_times(elem):
|
||||
return elem[7]
|
||||
|
||||
def safeDiv(a, b):
|
||||
if b == 0:
|
||||
return 0
|
||||
else:
|
||||
return a / b
|
||||
|
||||
def getRedis():
|
||||
redis_conf = json.loadsmysql_conf = json.loads(open(CONFIG_DIR + '/rankserver.redis.cluster.json', 'r').read())
|
||||
for conf in redis_conf:
|
||||
r = redis.Redis(host = conf['host'],
|
||||
port = conf['port'],
|
||||
password = conf['passwd'],
|
||||
charset = 'utf8'
|
||||
)
|
||||
return r;
|
||||
|
||||
|
||||
def readMysqlData(rushtime):
|
||||
mysql_conf = json.loads(open(CONFIG_DIR + '/rankserver.mysql.cluster.json', 'r').read())
|
||||
array = []
|
||||
for conf in mysql_conf:
|
||||
conn = pymysql.connect(host = conf['host'],
|
||||
port = conf['port'],
|
||||
user = conf['user'],
|
||||
passwd = conf['passwd'],
|
||||
db = 'gamedb2002_' + str(conf['instance_id']),
|
||||
charset = 'utf8'
|
||||
)
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('SELECT accountid, user_name, avatar_url, kills, alive_time, harm, win_times, game_times FROM user;')
|
||||
for row in cursor:
|
||||
kill = safeDiv(row[3], row[7])
|
||||
alive_time = safeDiv(row[4], row[7])
|
||||
harm = safeDiv(row[5], row[7])
|
||||
win_times = safeDiv(row[6], row[7])
|
||||
array.append((row[0], row[1].decode('utf-8'), row[2], kill, alive_time, harm, win_times, row[6]))
|
||||
|
||||
r = getRedis()
|
||||
array.sort(key=take_kills, reverse=True)
|
||||
kill_rank = json.dumps(array)
|
||||
r.set("game2002api: kill_rank", kill_rank)
|
||||
|
||||
array.sort(key=take_alive_time, reverse=True)
|
||||
alive_rank = json.dumps(array)
|
||||
r.set("game2002api: alive_rank", alive_rank)
|
||||
|
||||
array.sort(key=take_harms, reverse=True)
|
||||
harm_rank = json.dumps(array)
|
||||
r.set("game2002api: harm_rank", harm_rank)
|
||||
|
||||
array.sort(key=take_win_times, reverse=True)
|
||||
rate_rank = json.dumps(array)
|
||||
r.set("game2002api: rate_rank", rate_rank)
|
||||
|
||||
array.sort(key=take_game_times, reverse=True)
|
||||
|
||||
win_rank = json.dumps(array)
|
||||
r.set("game2002api: win_rank", win_rank)
|
||||
|
||||
tornado.ioloop.IOLoop.current().call_later(rushtime,
|
||||
lambda : readMysqlData(rushtime)
|
||||
)
|
||||
|
||||
|
||||
class SelfCheckingHandler(tornado.web.RequestHandler):
|
||||
|
||||
def get(self):
|
||||
self.write(json.dumps({
|
||||
'errcode': 0,
|
||||
'errmsg': '',
|
||||
'healthy': 1,
|
||||
'max_rundelay': 10
|
||||
}))
|
||||
|
||||
def make_app():
|
||||
return tornado.web.Application([
|
||||
(r"/webapp/index[\.]php", SelfCheckingHandler),
|
||||
])
|
||||
|
||||
if __name__ == "__main__":
|
||||
conf = json.loads(open(CONFIG_DIR + '/rankserver.json', 'r').read())
|
||||
|
||||
app = make_app()
|
||||
app.listen(conf['listen_port'])
|
||||
conf['rushtime'] = 300
|
||||
|
||||
tornado.ioloop.IOLoop.current().call_later(conf['rushtime'],
|
||||
lambda : readMysqlData(conf['rushtime'])
|
||||
)
|
||||
tornado.ioloop.IOLoop.current().start()
|
144
webapp/bootstrap/config_loader.php
Normal file
144
webapp/bootstrap/config_loader.php
Normal file
@ -0,0 +1,144 @@
|
||||
<?php
|
||||
|
||||
$g_conf_mysql_cluster = require('../config/game2001api.mysql.cluster.php');
|
||||
$g_conf_redis_cluster = require('../config/game2001api.redis.cluster.php');
|
||||
|
||||
|
||||
function checkMysqlConfig()
|
||||
{
|
||||
$instance_id = 1;
|
||||
global $g_conf_mysql_cluster;
|
||||
foreach ($g_conf_mysql_cluster as $instance) {
|
||||
if ($instance_id != $instance['instance_id']) {
|
||||
error_log('game2001api.mysql.cluster.php config error');
|
||||
die();
|
||||
}
|
||||
$instance_id++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function checkRedisConfig()
|
||||
{
|
||||
$instance_id = 1;
|
||||
global $g_conf_redis_cluster;
|
||||
foreach ($g_conf_redis_cluster as $instance) {
|
||||
if ($instance_id != $instance['instance_id']) {
|
||||
error_log('game2001api.redis.cluster.php config error');
|
||||
die();
|
||||
}
|
||||
$instance_id++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function getMysqlConfig($hash_value)
|
||||
{
|
||||
if ($hash_value < 0) {
|
||||
error_log('callstack:' . json_encode(debug_backtrace(), JSON_PRETTY_PRINT));
|
||||
die('hash_value < 0 ' . $hash_value);
|
||||
}
|
||||
global $g_conf_mysql_cluster;
|
||||
$idx = $hash_value % count($g_conf_mysql_cluster);
|
||||
return $g_conf_mysql_cluster[$idx];
|
||||
}
|
||||
|
||||
function getRedisConfig($hash_value)
|
||||
{
|
||||
if ($hash_value < 0) {
|
||||
error_log('callstack:' . json_encode(debug_backtrace(), JSON_PRETTY_PRINT));
|
||||
die('hash_value < 0 ' . $hash_value);
|
||||
}
|
||||
global $g_conf_redis_cluster;
|
||||
$idx = $hash_value % count($g_conf_redis_cluster);
|
||||
return $g_conf_redis_cluster[$idx];
|
||||
}
|
||||
|
||||
function getSkinConfig($skin_table ,$item_id)
|
||||
{
|
||||
$item_id = (int)$item_id;
|
||||
return array_key_exists($item_id, $skin_table) ? $skin_table[$item_id] : null;
|
||||
}
|
||||
|
||||
function getEquipConfig($equip_table, $item_id)
|
||||
{
|
||||
return array_key_exists($item_id, $equip_table) ? $equip_table[$item_id] : null;
|
||||
}
|
||||
|
||||
function getSupplyConfig($supply_table, $box_id)
|
||||
{
|
||||
$box_id = (int)$box_id;
|
||||
return array_key_exists($box_id, $supply_table) ? $supply_table[$box_id] : null;
|
||||
}
|
||||
|
||||
function getDropConfig($drop_table, $drop_id)
|
||||
{
|
||||
$drop_id = (int)$drop_id;
|
||||
return array_key_exists($drop_id, $drop_table) ? $drop_table[$drop_id] : null;
|
||||
}
|
||||
|
||||
function getSignConfig($sign_table, $sign_id)
|
||||
{
|
||||
$sign_id = (int)$sign_id;
|
||||
return array_key_exists($sign_id, $sign_table) ? $sign_table[$sign_id] : null;
|
||||
}
|
||||
|
||||
function getQuestConfig($quest_table, $quest_id)
|
||||
{
|
||||
$quest_id = (int)$quest_id;
|
||||
return array_key_exists($quest_id, $quest_table) ? $quest_table[$quest_id] : null;
|
||||
}
|
||||
|
||||
function getTaskRewardConfig($taskReward_table, $taskReward_id)
|
||||
{
|
||||
$taskReward_id = (int)$taskReward_id;
|
||||
return array_key_exists($taskReward_id, $taskReward_table) ? $taskReward_table[$taskReward_id] : null;
|
||||
}
|
||||
|
||||
function getActivityConfig($activity_table, $activity_id)
|
||||
{
|
||||
$activity_id = (int)$activity_id;
|
||||
return array_key_exists($activity_id, $activity_table) ? $activity_table[$activity_id] : null;
|
||||
}
|
||||
|
||||
function getActivityRewardConfig($activityReward_table, $activityReward_id)
|
||||
{
|
||||
$activityReward_id = (int)$activityReward_id;
|
||||
return array_key_exists($activityReward_id, $activityReward_table) ? $activityReward_table[$activityReward_id] : null;
|
||||
}
|
||||
|
||||
function getParameterConfig($p_table, $p_id)
|
||||
{
|
||||
$p_id = (int)$p_id;
|
||||
return array_key_exists($p_id, $p_table) ? $p_table[$p_id] : null;
|
||||
}
|
||||
|
||||
function getDressUpgradeConfig($dressUp_table, $dressUp_id)
|
||||
{
|
||||
return array_key_exists($dressUp_id, $dressUp_table) ? $dressUp_table[$dressUp_id] : null;
|
||||
}
|
||||
|
||||
function getRewardTimesConfig($rewardTimes_table, $rewardTimes_id)
|
||||
{
|
||||
return array_key_exists((int)$rewardTimes_id, $rewardTimes_table) ? $rewardTimes_table[(int)$rewardTimes_id] : null;
|
||||
}
|
||||
|
||||
function getShopConfig($shop_table, $shop_id)
|
||||
{
|
||||
$shop_id = (int)$shop_id;
|
||||
return array_key_exists($shop_id, $shop_table) ? $shop_table[$shop_id] : null;
|
||||
}
|
||||
|
||||
function getItemConfig($item_table, $item_id)
|
||||
{
|
||||
$item_id = (int)$item_id;
|
||||
return array_key_exists($item_id, $item_table) ? $item_table[$item_id] : null;
|
||||
}
|
||||
|
||||
function getShareConfig($share_table, $share_id)
|
||||
{
|
||||
$share_id = (int)$share_id;
|
||||
return array_key_exists($share_id, $share_table) ? $share_table[$share_id] : null;
|
||||
}
|
||||
checkMysqlConfig();
|
||||
checkRedisConfig();
|
74
webapp/bootstrap/init.php
Normal file
74
webapp/bootstrap/init.php
Normal file
@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
ini_set('date.timezone','Asia/Shanghai');
|
||||
require 'phpcommon/common.php';
|
||||
|
||||
define('TEAMID_KEY', 'team_uuid:');
|
||||
//每日任务
|
||||
define('QUEST_DAY_LOGIN', 71001);
|
||||
define('QUEST_DAY_SHARE', 71002);
|
||||
define('QUEST_DAY_FIGHT', 71003);
|
||||
define('QUEST_DAY_SUPPLY', 71004);
|
||||
define('QUEST_DAY_UPDATEEQUIP', 71005);
|
||||
define('QUEST_DAY_TEAM', 71006);
|
||||
define('QUEST_DAY_RANK', 71007);
|
||||
define('QUEST_DAY_ALIVE', 71008);
|
||||
define('QUEST_DAY_HARM', 71009);
|
||||
define('QUEST_DAY_KILL', 71010);
|
||||
define('QUEST_DAY_HELP', 71011);
|
||||
define('QUEST_DAY_COMPLETE', 71012);
|
||||
//成就
|
||||
define('QUEST_SUM_LOGIN', 72001);
|
||||
define('QUEST_SUM_SHARE', 72002);
|
||||
define('QUEST_SUM_FIGHT', 72003);
|
||||
define('QUEST_SUM_SUPPLY', 72004);
|
||||
define('QUEST_SUM_EQUIPMAX', 72005);
|
||||
define('QUEST_SUM_TEAM', 72006);
|
||||
define('QUEST_SUM_WIM', 72007);
|
||||
define('QUEST_SUM_TEAMWIN', 72008);
|
||||
define('QUEST_SUM_ALIVE', 72009);
|
||||
define('QUEST_SUM_HARM', 72010);
|
||||
define('QUEST_SUM_KILL', 72011);
|
||||
define('QUEST_SUM_SNIPEKILL', 72012);
|
||||
define('QUEST_SUM_RIFLEKILL', 72013);
|
||||
define('QUEST_SUM_PISTOLKILL', 72014);
|
||||
define('QUEST_SUM_SUBMACKILL', 72015);
|
||||
define('QUEST_SUM_HELP', 72016);
|
||||
//活动
|
||||
define('QUEST_ACTIVITY_LOGIN', 83001);
|
||||
define('QUEST_ACTIVITY_GAME', 83002);
|
||||
|
||||
//常量定义
|
||||
define('ANODYNE_MAX_TIME', 1); //止痛药最大时间(秒)
|
||||
define('DESCEND_CD_TIME', 2); //降落伞下降时间
|
||||
define('MAX_ENERGY_SHIERLD', 3); //能量护盾最大值
|
||||
define('DOWNED_RECOVER_HP', 4); //倒地回血
|
||||
define('DOWNED_RELIVE_RECOVER_HP', 5); //倒地救活后回血
|
||||
define('DOWNED_DEC_HP', 6); //倒地后每秒掉血
|
||||
define('DOWNED_RELIVE_TIME', 7); //复活队友时间
|
||||
define('GAS_INACTIVE_TIME', 8); //战前准备时间
|
||||
define('JAMP_TIME', 10); //跳伞降落时间
|
||||
define('K', 11); //伤害公式里的K值
|
||||
define('KILL_PARAMETER', 12); //击杀金币系数
|
||||
define('RANK_PARAMETER', 13); //排名参数
|
||||
define('RESCUE_TIME', 14); //救援时间
|
||||
define('AUTO_JUMP_INTERVAL', 15); //自动跳伞间隔
|
||||
define('AUTO_JUMP_MIN_NUM', 16); //最少自动跳人数
|
||||
define('AUTO_JUMP_MAX_NUM', 17); //最大自动跳人数
|
||||
define('FIGHTING_MODE', 18); //是否乱斗模式
|
||||
define('WEAPON_TRIAL', 19); //武器满级体验时间
|
||||
define('GOLD', 101); //每5秒产出
|
||||
define('TIME_LIMIT', 102); //时间上限
|
||||
define('SKIN_TRIAL_TIME', 20); //皮肤试用时间
|
||||
define('SKIN_SKILL_TIME', 21); //皮肤满级体验时间
|
||||
define('DOUBLE_GOLD', 22); //免费金币翻倍率
|
||||
define('DOUBLE_SIGN_IN', 23); //每日签到翻倍率
|
||||
define('DOUBLE_END_WAR', 24); //战斗结束翻倍率
|
||||
define('DOUBLE_BOX', 25); //抽箱子奖励翻倍率
|
||||
define('FREE_DRESS_MAX_TIME', 30); //免费获取皮肤次数上限
|
||||
define('RAND_SHOP_GOLD', 39); //商店金币刷新价格
|
||||
define('MAX_BATTLE_REWARD', 40); //战斗额外奖励次数
|
||||
define('MAX_SHOP_REFRESH', 41); //每日商店刷新次数
|
||||
require 'config_loader.php';
|
||||
|
||||
|
78
webapp/classes/AddReward.php
Normal file
78
webapp/classes/AddReward.php
Normal file
@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
namespace classes;
|
||||
|
||||
use phpcommon;
|
||||
|
||||
class AddReward {
|
||||
protected function getMysql($account_id)
|
||||
{
|
||||
$mysql_conf = getMysqlConfig(crc32($account_id));
|
||||
$conn = new phpcommon\Mysql(array(
|
||||
'host' => $mysql_conf['host'],
|
||||
'port' => $mysql_conf['port'],
|
||||
'user' => $mysql_conf['user'],
|
||||
'passwd' => $mysql_conf['passwd'],
|
||||
'dbname' => 'gamedb2001_' . $mysql_conf['instance_id']
|
||||
));
|
||||
return $conn;
|
||||
}
|
||||
|
||||
public function addReward($item_id, $item_num, $account_id)
|
||||
{
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
die();
|
||||
}
|
||||
if ($item_id == 10001) {
|
||||
$row1 = $conn->execQueryOne('SELECT coin_num FROM user WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
$ret = $conn->execScript('UPDATE user SET coin_num=:coin_num, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':coin_num' => $item_num + $row1['coin_num'],
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
}
|
||||
} else if ($item_id > 13000 && $item_id < 14000) {
|
||||
$rowSkin = $conn->execQueryOne('SELECT fragment_num FROM skin WHERE accountid=:accountid AND fragment_id=:fragment_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':fragment_id' => $item_id
|
||||
));
|
||||
$ret = $conn->execScript('UPDATE skin SET fragment_num=:fragment_num, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid AND fragment_id=:fragment_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':fragment_id' => $item_id,
|
||||
':fragment_num' => $item_num + $rowSkin['fragment_num'],
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
}
|
||||
} else if ($item_id == 10002) {
|
||||
$rowkey = $conn->execQueryOne('SELECT keys_num FROM user WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
$ret = $conn->execScript('UPDATE user SET keys_num=:keys_num, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':keys_num' => $item_num + $rowkey['keys_num'],
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
137
webapp/classes/Quest.php
Normal file
137
webapp/classes/Quest.php
Normal file
@ -0,0 +1,137 @@
|
||||
<?php
|
||||
|
||||
namespace classes;
|
||||
|
||||
use phpcommon;
|
||||
|
||||
class Quest{
|
||||
|
||||
protected function getMysql($account_id)
|
||||
{
|
||||
$mysql_conf = getMysqlConfig(crc32($account_id));
|
||||
$conn = new phpcommon\Mysql(array(
|
||||
'host' => $mysql_conf['host'],
|
||||
'port' => $mysql_conf['port'],
|
||||
'user' => $mysql_conf['user'],
|
||||
'passwd' => $mysql_conf['passwd'],
|
||||
'dbname' => 'gamedb2001_' . $mysql_conf['instance_id']
|
||||
));
|
||||
return $conn;
|
||||
}
|
||||
|
||||
protected function getQuest($quest_id)
|
||||
{
|
||||
$g_conf_quest_cluster = require('../res/task@task.php');
|
||||
$quest_conf = getQuestConfig($g_conf_quest_cluster, $quest_id);
|
||||
$q = array(
|
||||
'id' => $quest_conf['id'],
|
||||
'type' => $quest_conf['type'],
|
||||
'condition' => $quest_conf['condition'],
|
||||
'value' => $quest_conf['value'],
|
||||
'active_value' => $quest_conf['active_value'],
|
||||
);
|
||||
return $q;
|
||||
}
|
||||
|
||||
public function triggerQuest($quest_id, $quest_type, $quest_num, $account_id)
|
||||
{
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$q = $this->getQuest($quest_id);
|
||||
if (!$q) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个任务');
|
||||
return;
|
||||
}
|
||||
$row = $conn->execQueryOne('SELECT * FROM quest WHERE accountid=:accountid AND quest_id =:quest_id AND quest_type=:quest_type;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_id' => $quest_id,
|
||||
':quest_type' => $quest_type,
|
||||
));
|
||||
if ($row) {
|
||||
if ($row['quest_state'] == 0) {
|
||||
if ($q['condition'] == 7 && $quest_type == 1) {
|
||||
if($quest_num <= $q['value']) {
|
||||
$quest_state = 1;
|
||||
$this->triggerQuest(QUEST_DAY_COMPLETE, 1, 1, $account_id);
|
||||
}
|
||||
} else if ($q['condition'] == 13 && $quest_type == 1){
|
||||
if ($row['quest_num'] + $quest_num >= $q['value']) {
|
||||
$quest_num = $q['value'];
|
||||
$quest_state = 1;
|
||||
} else {
|
||||
$quest_num = $row['quest_num'] + $quest_num;
|
||||
$quest_state = 0;
|
||||
}
|
||||
} else {
|
||||
if ($row['quest_num'] + $quest_num >= $q['value']) {
|
||||
$quest_num = $q['value'];
|
||||
$quest_state = 1;
|
||||
if ($quest_type == 1) {
|
||||
$this->triggerQuest(QUEST_DAY_COMPLETE, 1, 1, $account_id);
|
||||
}
|
||||
} else {
|
||||
$quest_num = $row['quest_num'] + $quest_num;
|
||||
$quest_state = 0;
|
||||
}
|
||||
}
|
||||
$ret = $conn->execScript('UPDATE quest SET quest_num=:quest_num, quest_state=:quest_state, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid AND quest_id =:quest_id AND quest_type=:quest_type;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_id' => $quest_id,
|
||||
':quest_type' => $quest_type,
|
||||
':quest_num' => $quest_num,
|
||||
':quest_state' => $quest_state,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
$quest_state = 0;
|
||||
if ($q['condition'] == 7 && $quest_type == 1) {
|
||||
if($quest_num <= $q['value']) {
|
||||
$quest_state = 1;
|
||||
$this->triggerQuest(QUEST_DAY_COMPLETE, 1, 1, $account_id);
|
||||
}
|
||||
} else if ($q['condition'] == 13 && $quest_type == 1){
|
||||
if ($row['quest_num'] >= $q['value']) {
|
||||
$quest_num = $q['value'];
|
||||
$quest_state = 1;
|
||||
}
|
||||
} else {
|
||||
if ($quest_num >= $q['value']) {
|
||||
$quest_num = $q['value'];
|
||||
$quest_state = 1;
|
||||
if ($quest_type == 1) {
|
||||
$this->triggerQuest(QUEST_DAY_COMPLETE, 1, 1, $account_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
$ret = $conn->execScript('INSERT INTO quest(accountid, quest_id, quest_num, quest_type, quest_state, create_time, modify_time) ' .
|
||||
' VALUES(:accountid, :quest_id, :quest_num, :quest_type, :quest_state, :create_time, :modify_time) ' .
|
||||
' ON DUPLICATE KEY UPDATE accountid=:accountid, quest_id=:quest_id, quest_num=:quest_num, quest_type=:quest_type, quest_state=:quest_state, modify_time=:modify_time;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_id' => $quest_id,
|
||||
':quest_num' => $quest_num,
|
||||
':quest_type' => $quest_type,
|
||||
':quest_state'=> $quest_state,
|
||||
':create_time' => time(),
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
370
webapp/controller/ActivityController.class.php
Normal file
370
webapp/controller/ActivityController.class.php
Normal file
@ -0,0 +1,370 @@
|
||||
<?php
|
||||
|
||||
require 'classes/Quest.php';
|
||||
|
||||
class ActivityController{
|
||||
|
||||
protected function getMysql($account_id)
|
||||
{
|
||||
$mysql_conf = getMysqlConfig(crc32($account_id));
|
||||
$conn = new phpcommon\Mysql(array(
|
||||
'host' => $mysql_conf['host'],
|
||||
'port' => $mysql_conf['port'],
|
||||
'user' => $mysql_conf['user'],
|
||||
'passwd' => $mysql_conf['passwd'],
|
||||
'dbname' => 'gamedb2001_' . $mysql_conf['instance_id']
|
||||
));
|
||||
return $conn;
|
||||
}
|
||||
|
||||
|
||||
protected function getActivityConfig($activity_id)
|
||||
{
|
||||
$g_conf_activity_cluster = require('../res/activity@activity.php');
|
||||
$activity_conf = getActivityConfig($g_conf_activity_cluster, $activity_id);
|
||||
$a = array(
|
||||
'id' => $activity_conf['id'],
|
||||
'name' => $activity_conf['name'],
|
||||
'des' => $activity_conf['des'],
|
||||
'start_date' => $activity_conf['start_date'],
|
||||
'end_date' => $activity_conf['end_date'],
|
||||
);
|
||||
return $a;
|
||||
}
|
||||
|
||||
protected function getActivityRewardConfig($activityReward_id)
|
||||
{
|
||||
$g_conf_activityReward_cluster = require('../res/activityReward@activityReward.php');
|
||||
$activityReward_conf = getActivityRewardConfig($g_conf_activityReward_cluster, $activityReward_id);
|
||||
$act = array(
|
||||
'id' => $activityReward_conf['id'],
|
||||
'activity_id' => $activityReward_conf['activity_id'],
|
||||
'condition' => $activityReward_conf['condition'],
|
||||
'parameter' => $activityReward_conf['parameter'],
|
||||
'start_end_time' => $activityReward_conf['start_end_time'],
|
||||
'activity_reward' => $activityReward_conf['activity_reward'],
|
||||
'exchange_num' => $activityReward_conf['exchange_num'],
|
||||
'exchange_item' => $activityReward_conf['exchange_item']
|
||||
);
|
||||
return $act;
|
||||
}
|
||||
|
||||
protected function getExplode($string)
|
||||
{
|
||||
$delim = "|";
|
||||
$drop_multiply = explode($delim, $string);
|
||||
$delim1 = ":";
|
||||
$arr = array();
|
||||
for ($i = 0; $i < count($drop_multiply); $i++) {
|
||||
$mul = explode($delim1, $drop_multiply[$i]);
|
||||
array_push($arr, $mul);
|
||||
}
|
||||
return $arr;
|
||||
}
|
||||
|
||||
public function activityInfo()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
$activity_list = array();
|
||||
$activity_skin_list = array();
|
||||
$activity_quest_list = array();
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
//活动列表
|
||||
$g_conf_activity_cluster = require('../res/activity@activity.php');
|
||||
for ($i = 1; $i <= count($g_conf_activity_cluster); $i++) {
|
||||
$start_status = 0;
|
||||
$a = $this->getActivityConfig($i);
|
||||
if (time() >= $a['start_date'] && time() < $a['end_date']) {
|
||||
$start_status = 1;
|
||||
} else {
|
||||
$ret = $conn->execScript('UPDATE skin SET fragment_num=:fragment_num, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid AND skin_type=2;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':fragment_num' => 0,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if(!$ret){
|
||||
die();
|
||||
return;
|
||||
}
|
||||
}
|
||||
array_push($activity_list, array(
|
||||
'activity_id' => $a['id'],
|
||||
'start_time' => $a['start_date'],
|
||||
'end_time' => $a['end_date'],
|
||||
'status' => $start_status
|
||||
));
|
||||
}
|
||||
//求生庆典活动
|
||||
$rowSkin = $conn->execQuery('SELECT * FROM skin WHERE accountid=:accountid AND skin_type=:skin_type;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':skin_type' => 2
|
||||
));
|
||||
foreach ($rowSkin as $skin) {
|
||||
array_push($activity_skin_list, array(
|
||||
'id' => $skin['skin_id'],
|
||||
'num' => $skin['fragment_num'],
|
||||
'exchange_status' => $skin['skin_status'],
|
||||
'collect_status' => $skin['fragment_status']
|
||||
));
|
||||
}
|
||||
//分享好礼活动
|
||||
$row = $conn->execQueryOne('SELECT act_share_status, act_share_time FROM user WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
if (!$row) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$receive_status = $row['act_share_status'];
|
||||
if (phpcommon\getdayseconds(time()) - phpcommon\getdayseconds($row['act_share_time']) > 0
|
||||
&& $row['act_share_status'] == 1)
|
||||
{
|
||||
$receive_status = 0;
|
||||
$ret = $conn->execScript('UPDATE user SET act_share_status=:act_share_status, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':act_share_status' => $receive_status,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
}
|
||||
//任务活动
|
||||
$rows = $conn->execQuery('SELECT * FROM quest WHERE accountid=:accountid AND quest_type=:quest_type;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_type' => 3
|
||||
));
|
||||
foreach ($rows as $r) {
|
||||
array_push($activity_quest_list, array(
|
||||
'id' => $r['quest_id'],
|
||||
'num' => $r['quest_num'],
|
||||
'status' => $r['quest_state']
|
||||
));
|
||||
}
|
||||
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'activity_list' => $activity_list,
|
||||
'activity_id1' => 1,
|
||||
'activity_skin_list' => $activity_skin_list,
|
||||
'activity_id2' => 2,
|
||||
'receive_status' => $receive_status,
|
||||
'activity_id3' => 3,
|
||||
'activity_quest_list' => $activity_quest_list
|
||||
));
|
||||
}
|
||||
|
||||
public function triggerActivity()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
$activity_id = $_REQUEST['activity_id'];
|
||||
$type = $_REQUEST['type'];
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
|
||||
$act = $this->getActivityRewardConfig($activity_id);
|
||||
$array = $this->getExplode($act['activity_reward']);
|
||||
switch ($type)
|
||||
{
|
||||
case 1: //活动皮肤碎片收集
|
||||
{
|
||||
$item_id = $array[0][0];
|
||||
$item_num = $array[0][1];
|
||||
$rowSkin = $conn->execQueryOne('SELECT * FROM skin WHERE accountid=:accountid AND fragment_id=:fragment_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':fragment_id' => $item_id
|
||||
));
|
||||
if ($rowSkin['fragment_status'] != 0) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '今天已收集');
|
||||
return;
|
||||
}
|
||||
if ($rowSkin['fragment_num'] + $item_num >= $act['exchange_num']) {
|
||||
$skin_status = 2;
|
||||
} else {
|
||||
$skin_status = 3;
|
||||
}
|
||||
$ret = $conn->execScript('UPDATE skin SET fragment_num=:fragment_num, skin_status=:skin_status, fragment_status=1, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid AND fragment_id=:fragment_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':skin_status' => $skin_status,
|
||||
':fragment_id' => $item_id,
|
||||
':fragment_num' => $item_num + $rowSkin['fragment_num'],
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 2: //活动皮肤兑换
|
||||
{
|
||||
$arr = $this->getExplode($act['exchange_item']);
|
||||
$row = $conn->execQueryOne('SELECT * FROM skin WHERE accountid = :account_id AND skin_id = :skin_id;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
':skin_id' => $arr[0][0]
|
||||
));
|
||||
if(!$row){
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'没有这个皮肤');
|
||||
return;
|
||||
}
|
||||
if ($row['skin_status'] == 2) {
|
||||
$fragment_num = $row['fragment_num'] - $act['exchange_num'];
|
||||
$time = time();
|
||||
$ret = $conn->execScript('UPDATE skin SET fragment_num=:fragment_num, skin_status=1, active_time=:active_time, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:account_id AND skin_id=:skin_id;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
':skin_id' => $arr[0][0],
|
||||
':active_time' => $time,
|
||||
':fragment_num' => $fragment_num,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if(!$ret){
|
||||
die();
|
||||
return;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 3: //活动补给箱领取
|
||||
{
|
||||
$ret = $conn->execScript('UPDATE user SET act_share_status=1, act_share_time=:act_share_time, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':act_share_time' => time(),
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
for ($i = 0; $i < count($array); $i++) {
|
||||
$item_id = $array[$i][0];
|
||||
$item_num = $array[$i][1];
|
||||
$row = $conn->execQueryOne('SELECT * FROM supplybox WHERE accountid=:account_id AND box_id=:box_id;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
':box_id' => $item_id
|
||||
));
|
||||
if (!$row) {
|
||||
$ret = $conn->execScript('INSERT INTO supplybox(accountid, box_id, box_num, buy_times, last_buy_time, create_time, modify_time) ' .
|
||||
' VALUES(:accountid, :box_id, :box_num, 0, 0, :create_time, :modify_time) ' .
|
||||
' ON DUPLICATE KEY UPDATE accountid=:accountid, box_id=:box_id, box_num=:box_num, buy_times=0, last_buy_time=0, modify_time=:modify_time;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':box_id' => $item_id,
|
||||
':box_num' => 1,
|
||||
':create_time' => time(),
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
$ret = $conn->execScript('UPDATE supplybox SET box_num=:box_num, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid AND box_id=:box_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':box_id' => $item_id,
|
||||
':box_num' => $row['box_num'] + $item_num,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 4: //活动任务奖励
|
||||
{
|
||||
$row = $conn->execQueryOne('SELECT * FROM quest WHERE accountid=:accountid AND quest_id=:quest_id AND quest_type=:quest_type;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_id' => $activity_id,
|
||||
':quest_type' => 3
|
||||
));
|
||||
if (!$row) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个任务');
|
||||
return;
|
||||
}
|
||||
if ($row['quest_state'] == 1) {
|
||||
$ret = $conn->execScript('UPDATE quest SET quest_state=:quest_state, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid AND quest_id =:quest_id AND quest_type=:quest_type;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_id' => $activity_id,
|
||||
':quest_type' => 3,
|
||||
':quest_state' => 2,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
$item_id = $array[0][0];
|
||||
$item_num = $array[0][1];
|
||||
$row1 = $conn->execQueryOne('SELECT * FROM user WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
$ret = $conn->execScript('UPDATE user SET coin_num=:coin_num, modify_time=:modify_time' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':coin_num' => $item_num + $row1['coin_num'],
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
));
|
||||
}
|
||||
}
|
||||
?>
|
297
webapp/controller/EquipController.class.php
Normal file
297
webapp/controller/EquipController.class.php
Normal file
@ -0,0 +1,297 @@
|
||||
<?php
|
||||
|
||||
require 'classes/Quest.php';
|
||||
|
||||
class EquipController{
|
||||
|
||||
protected function getMysql($account_id)
|
||||
{
|
||||
$mysql_conf = getMysqlConfig(crc32($account_id));
|
||||
$conn = new phpcommon\Mysql(array(
|
||||
'host' => $mysql_conf['host'],
|
||||
'port' => $mysql_conf['port'],
|
||||
'user' => $mysql_conf['user'],
|
||||
'passwd' => $mysql_conf['passwd'],
|
||||
'dbname' => 'gamedb2001_' . $mysql_conf['instance_id']
|
||||
));
|
||||
return $conn;
|
||||
}
|
||||
|
||||
protected function getEquip($equip_id)
|
||||
{
|
||||
$g_conf_equip_cluster = require('../res/equipUpgrade@equipUpgrade.php');
|
||||
$equip_conf = getEquipConfig($g_conf_equip_cluster, $equip_id);
|
||||
$e = array(
|
||||
'equip_id' => $equip_conf['id'],
|
||||
'equip_name' => $equip_conf['name'],
|
||||
'equip_type' => $equip_conf['equip_page'],
|
||||
'cost_int' => $equip_conf['cost_int'],
|
||||
'max_lv' => $equip_conf['max_lv'],
|
||||
'equip_cost' => $equip_conf['cost'],
|
||||
'equip_attr_type' => $equip_conf['attr_type'],
|
||||
);
|
||||
return $e;
|
||||
}
|
||||
|
||||
protected function getParameter($para_id)
|
||||
{
|
||||
$g_conf_para_cluster = require('../res/parameter@parameter.php');
|
||||
$para_conf = getParameterConfig($g_conf_para_cluster, $para_id);
|
||||
$p = array(
|
||||
'id' => $para_conf['id'],
|
||||
'param_name' => $para_conf['param_name'],
|
||||
'param_value' => $para_conf['param_value'],
|
||||
);
|
||||
return $p;
|
||||
}
|
||||
|
||||
protected function subCoin($account_id, $equip_id, $equip_level, $free)
|
||||
{
|
||||
$e = $this->getEquip($equip_id);
|
||||
if (!$e) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个装备');
|
||||
die();
|
||||
}
|
||||
if ($e['max_lv'] <= $equip_level) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 4, '装备已到满级');
|
||||
die();
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
die();
|
||||
}
|
||||
$coin_num = $e['equip_cost'] * ceil($equip_level / 5) + $e['cost_int'];
|
||||
if ($free == 1) {
|
||||
$coin_num = 0;
|
||||
}
|
||||
$rowCoin = $conn->execQueryOne('SELECT * FROM user WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
if ($rowCoin['coin_num'] < $coin_num) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 3, '金币不足');
|
||||
die();
|
||||
}
|
||||
$ret = $conn->execScript('UPDATE user SET coin_num=:coin_num, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':coin_num' => $rowCoin['coin_num'] - $coin_num,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
}
|
||||
return $e;
|
||||
}
|
||||
|
||||
public function equipInfo()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
$equip_list = array();
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$rowCount = $conn->execQueryRowCount('SELECT * FROM equip WHERE accountid=:account_id;',
|
||||
array(
|
||||
':account_id' => $account_id
|
||||
));
|
||||
if ($rowCount != 0) {
|
||||
$active_time = 0;
|
||||
$equip_level = 0;
|
||||
$rows = $conn->execQuery('SELECT * FROM equip WHERE accountid=:account_id;',
|
||||
array(
|
||||
':account_id' => $account_id
|
||||
));
|
||||
foreach ($rows as $row) {
|
||||
if (time() >= $row['active_time'] && $row['active_time'] != 0) {
|
||||
$ret = $conn->execScript('UPDATE equip SET active_time=0, equip_experience_level=0, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:account_id AND equip_id=:equip_id;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
':equip_id' => $row['equip_id'],
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
$equip_level = $row['equip_level'];
|
||||
$active_time = 0;
|
||||
} else {
|
||||
if ($row['active_time'] != 0) {
|
||||
$active_time = $row['active_time'];
|
||||
$equip_level = $row['equip_experience_level'];
|
||||
} else {
|
||||
$active_time = 0;
|
||||
$equip_level = $row['equip_level'];
|
||||
}
|
||||
}
|
||||
array_push($equip_list, array(
|
||||
'equip_id' => $row['equip_id'],
|
||||
'equip_level' => $equip_level,
|
||||
'active_time' => $active_time
|
||||
));
|
||||
}
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'equip_list' => $equip_list
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
public function updateEquip()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
$skin_list = array();
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$equip_id = $_REQUEST['equip_id'];
|
||||
$free = $_REQUEST['free'];
|
||||
$equip_level = 0;
|
||||
$row = $conn->execQueryOne('SELECT * FROM equip WHERE accountid=:account_id AND equip_id=:equip_id;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
':equip_id' => $equip_id
|
||||
));
|
||||
|
||||
if (!$row) {
|
||||
$e = $this->subCoin($account_id, $equip_id, 1, $free);
|
||||
$ret = $conn->execScript('INSERT INTO equip(accountid, equip_id, equip_level, equip_experience_level, active_time, create_time, modify_time) ' .
|
||||
' VALUES(:accountid, :equip_id, :equip_level, :equip_experience_level, :active_time, :create_time, :modify_time) ' .
|
||||
' ON DUPLICATE KEY UPDATE accountid=:accountid, equip_id=:equip_id, equip_level=:equip_level, equip_experience_level=:equip_experience_level, active_time=:active_time, modify_time=:modify_time;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':equip_id' => $equip_id,
|
||||
':equip_level' => 2,
|
||||
':equip_experience_level' => 0,
|
||||
':active_time' => 0,
|
||||
':create_time' => time(),
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
$equip_level = 2;
|
||||
} else {
|
||||
$e = $this->subCoin($account_id, $equip_id, $row['equip_level'], $free);
|
||||
$ret = $conn->execScript('UPDATE equip SET equip_level=:equip_level, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:account_id AND equip_id=:equip_id;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
':equip_id' => $equip_id,
|
||||
':equip_level' => $row['equip_level'] + 1,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
$equip_level = $row['equip_level'] + 1;
|
||||
}
|
||||
$quest = new classes\Quest();
|
||||
$quest->triggerQuest(QUEST_DAY_UPDATEEQUIP, 1, 1, $account_id);
|
||||
if ($row['equip_level'] + 1 >= $e['max_lv']) {
|
||||
$quest->triggerQuest(QUEST_SUM_EQUIPMAX, 2, 1, $account_id);
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
/*'equip_id' => $equip_id,
|
||||
'equip_level' => $equip_level,
|
||||
'equip_time' => 0,
|
||||
'coin_num' => -($e['equip_cost'] * ceil($equip_level / 5) + $e['cost_int'])*/
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
public function freeTryEquip()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
$equip_id = $_REQUEST['equip_id'];
|
||||
$equip_level = $_REQUEST['equip_level'];
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个角色');
|
||||
return;
|
||||
}
|
||||
$e = $this->getEquip($equip_id);
|
||||
if (!$e) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个装备');
|
||||
return;
|
||||
}
|
||||
$p = $this->getParameter(WEAPON_TRIAL);
|
||||
$time = $p['param_value'];
|
||||
$row = $conn->execQueryOne('SELECT * FROM equip WHERE accountid=:account_id AND equip_id=:equip_id;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
':equip_id' => $equip_id
|
||||
));
|
||||
if (!$row) {
|
||||
$ret = $conn->execScript('INSERT INTO equip(accountid, equip_id, equip_level, equip_experience_level, active_time, create_time, modify_time) ' .
|
||||
' VALUES(:accountid, :equip_id, 1, :equip_experience_level, :active_time, :create_time, :modify_time) ' .
|
||||
' ON DUPLICATE KEY UPDATE accountid=:accountid, equip_id=:equip_id, equip_level=1, equip_experience_level=9, active_time=:active_time, modify_time=:modify_time;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':equip_id' => $equip_id,
|
||||
':active_time' => time() + $time,
|
||||
':create_time' => time(),
|
||||
':modify_time' => time(),
|
||||
':equip_experience_level' => $e['max_lv']
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
$ret = $conn->execScript('UPDATE equip SET active_time=:active_time, equip_experience_level=:equip_experience_level, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:account_id AND equip_id=:equip_id;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
':equip_id' => $equip_id,
|
||||
':active_time' => time() + $time,
|
||||
':modify_time' => time(),
|
||||
':equip_experience_level' => $e['max_lv']
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
/*'equip_id' => $equip_id,
|
||||
'equip_level' => $e['max_lv'],
|
||||
'equip_time' => time() + $time,*/
|
||||
));
|
||||
}
|
||||
}
|
||||
?>
|
165
webapp/controller/HangController.class.php
Normal file
165
webapp/controller/HangController.class.php
Normal file
@ -0,0 +1,165 @@
|
||||
<?php
|
||||
|
||||
class HangController{
|
||||
|
||||
protected function getMysql($account_id)
|
||||
{
|
||||
$mysql_conf = getMysqlConfig(crc32($account_id));
|
||||
$conn = new phpcommon\Mysql(array(
|
||||
'host' => $mysql_conf['host'],
|
||||
'port' => $mysql_conf['port'],
|
||||
'user' => $mysql_conf['user'],
|
||||
'passwd' => $mysql_conf['passwd'],
|
||||
'dbname' => 'gamedb2001_' . $mysql_conf['instance_id']
|
||||
));
|
||||
return $conn;
|
||||
}
|
||||
|
||||
protected function getParameter($para_id)
|
||||
{
|
||||
$g_conf_para_cluster = require('../res/parameter@parameter.php');
|
||||
$para_conf = getParameterConfig($g_conf_para_cluster, $para_id);
|
||||
$p = array(
|
||||
'id' => $para_conf['id'],
|
||||
'param_name' => $para_conf['param_name'],
|
||||
'param_value' => $para_conf['param_value'],
|
||||
);
|
||||
return $p;
|
||||
}
|
||||
|
||||
public function getHangReward()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
$item_id = 0;
|
||||
$num = 0;
|
||||
$weight = $_REQUEST['weight'];
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$row = $conn->execQueryOne('SELECT * FROM hang WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
if ($row) {
|
||||
$ret = $conn->execScript('UPDATE hang SET hang_time=:hang_time, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':hang_time' => time(),
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
$item_id = 10001;
|
||||
$p_num = $this->getParameter(GOLD);
|
||||
$p_time_limit = $this->getParameter(TIME_LIMIT);
|
||||
$num = floor((time() - $row['hang_time']) / 5 * $p_num['param_value']);
|
||||
if ((time() - $row['hang_time']) >= $p_time_limit['param_value']) {
|
||||
$num = floor($p_time_limit['param_value'] / 5 * $p_num['param_value']);
|
||||
}
|
||||
if ($weight != 0) {
|
||||
$times = $this->getRewardTimes($num);
|
||||
$num = $num * $times;
|
||||
}
|
||||
$row = $conn->execQueryOne('SELECT * FROM user WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
$ret = $conn->execScript('UPDATE user SET coin_num=:coin_num, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':coin_num' => $num + $row['coin_num'],
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'item_id' => $item_id,
|
||||
'num' => $num,
|
||||
'time' => time()
|
||||
));
|
||||
}
|
||||
|
||||
public function getTime()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$num = 0;
|
||||
$row = $conn->execQueryOne('SELECT * FROM hang WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
if (!$row) {
|
||||
$ret = $conn->execScript('INSERT INTO hang(accountid, hang_time, create_time, modify_time) ' .
|
||||
' VALUES(:accountid, :hang_time, :create_time, :modify_time) ' .
|
||||
' ON DUPLICATE KEY UPDATE accountid=:accountid, hang_time=:hang_time, modify_time=:modify_time;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':hang_time' => time(),
|
||||
':create_time' => time(),
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
$p_num = $this->getParameter(GOLD);
|
||||
$p_time_limit = $this->getParameter(TIME_LIMIT);
|
||||
$num = floor((time() - $row['hang_time']) / 5 * $p_num['param_value']);
|
||||
if ((time() - $row['hang_time']) >= $p_time_limit['param_value']) {
|
||||
$num = floor($p_time_limit['param_value'] / 5 * $p_num['param_value']);
|
||||
}
|
||||
}
|
||||
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'time' => time(),
|
||||
'num' => $num
|
||||
));
|
||||
}
|
||||
|
||||
protected function getRewardTimes($coin_num)
|
||||
{
|
||||
$g_conf_reward_cluster = require('../res/rewardTimes@rewardTimes.php');
|
||||
$times = 1;
|
||||
$reward_conf = array();
|
||||
for ($i = 0; $i < 4; $i++) {
|
||||
$reward_id = $i + 91000;
|
||||
$reward_conf = getRewardTimesConfig($g_conf_reward_cluster, $reward_id);
|
||||
if ((int)$coin_num >= $reward_conf['minGold'] && (int)$coin_num <= $reward_conf['maxGold']) {
|
||||
$times = $reward_conf['times'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $times;
|
||||
}
|
||||
}
|
||||
?>
|
15
webapp/controller/OpsController.class.php
Normal file
15
webapp/controller/OpsController.class.php
Normal file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
class OpsController {
|
||||
|
||||
public function selfChecking()
|
||||
{
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'healthy' => 1,
|
||||
'max_rundelay' => 1,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
443
webapp/controller/QuestController.class.php
Normal file
443
webapp/controller/QuestController.class.php
Normal file
@ -0,0 +1,443 @@
|
||||
<?php
|
||||
|
||||
require 'classes/Quest.php';
|
||||
require 'classes/AddReward.php';
|
||||
|
||||
class QuestController{
|
||||
|
||||
protected function getMysql($account_id)
|
||||
{
|
||||
$mysql_conf = getMysqlConfig(crc32($account_id));
|
||||
$conn = new phpcommon\Mysql(array(
|
||||
'host' => $mysql_conf['host'],
|
||||
'port' => $mysql_conf['port'],
|
||||
'user' => $mysql_conf['user'],
|
||||
'passwd' => $mysql_conf['passwd'],
|
||||
'dbname' => 'gamedb2001_' . $mysql_conf['instance_id']
|
||||
));
|
||||
return $conn;
|
||||
}
|
||||
|
||||
protected function getQuest($quest_id)
|
||||
{
|
||||
$g_conf_quest_cluster = require('../res/task@task.php');
|
||||
$quest_conf = getQuestConfig($g_conf_quest_cluster, $quest_id);
|
||||
$q = array(
|
||||
'id' => $quest_conf['id'],
|
||||
'type' => $quest_conf['type'],
|
||||
'condition' => $quest_conf['condition'],
|
||||
'value' => $quest_conf['value'],
|
||||
'active_value' => $quest_conf['active_value'],
|
||||
'reward' => $quest_conf['reward'],
|
||||
);
|
||||
return $q;
|
||||
}
|
||||
|
||||
protected function getTaskReward($taskReward_id)
|
||||
{
|
||||
$g_conf_taskReward_cluster = require('../res/taskReward@taskReward.php');
|
||||
$taskReward_conf = getTaskRewardConfig($g_conf_taskReward_cluster, $taskReward_id);
|
||||
$t = array(
|
||||
'id' => $taskReward_conf['id'],
|
||||
'type' => $taskReward_conf['type'],
|
||||
'value' => $taskReward_conf['value'],
|
||||
'reward' => $taskReward_conf['reward']
|
||||
);
|
||||
return $t;
|
||||
}
|
||||
|
||||
protected function getExplode($string)
|
||||
{
|
||||
$delim = "|";
|
||||
$drop_multiply = explode($delim, $string);
|
||||
$delim1 = ":";
|
||||
$arr = array();
|
||||
for ($i = 0; $i < count($drop_multiply); $i++) {
|
||||
$mul = explode($delim1, $drop_multiply[$i]);
|
||||
array_push($arr, $mul);
|
||||
}
|
||||
return $arr;
|
||||
}
|
||||
|
||||
protected function getDrop($drop_id)
|
||||
{
|
||||
$g_conf_drop_cluster = require('../res/drop@drop.php');
|
||||
$drop_conf = getDropConfig($g_conf_drop_cluster, $drop_id);
|
||||
$d = array(
|
||||
'drop_id' => $drop_conf['drop_id'],
|
||||
'item_id' => $drop_conf['item_id'],
|
||||
'num' => $drop_conf['num'],
|
||||
'weight' => $drop_conf['weight'],
|
||||
'type' => $drop_conf['type']
|
||||
);
|
||||
return $d;
|
||||
}
|
||||
|
||||
protected function insertActive($account_id, $active_id, $task_num)
|
||||
{
|
||||
$conn = $this->getMysql($account_id);
|
||||
for ($i = $active_id; $i < $active_id + $task_num; $i++) {
|
||||
$ret = $conn->execScript('INSERT INTO quest(accountid, quest_id, quest_type, quest_state, create_time, modify_time) ' .
|
||||
' VALUES(:accountid, :quest_id, :quest_type, :quest_state, :create_time, :modify_time) ' .
|
||||
' ON DUPLICATE KEY UPDATE accountid=:accountid, quest_id=:quest_id, quest_type=:quest_type, quest_state=:quest_state, modify_time=:modify_time;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_id' => $i,
|
||||
':quest_type' => 0,
|
||||
':quest_state'=> 0,
|
||||
':create_time' => time(),
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function updateActive($account_id, $active_num, $active_sum)
|
||||
{
|
||||
$conn = $this->getMysql($account_id);
|
||||
for ($i = 73001; $i < 73006; $i++) {
|
||||
$quest_id = $i;
|
||||
$row = $conn->execQueryOne('SELECT * FROM quest WHERE accountid=:accountid AND quest_id=:quest_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_id' => $quest_id
|
||||
));
|
||||
$t = $this->getTaskReward($quest_id);
|
||||
if ($row['quest_state'] != 0 || $active_num < $t['value']) {
|
||||
continue;
|
||||
}
|
||||
$ret = $conn->execScript('UPDATE quest SET quest_state=:quest_state, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid AND quest_id =:quest_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_id' => $quest_id,
|
||||
':quest_state' => 1,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
}
|
||||
}
|
||||
|
||||
for ($j = 74001; $j < 74004; $j++) {
|
||||
$quest_id = $j;
|
||||
$row = $conn->execQueryOne('SELECT * FROM quest WHERE accountid=:accountid AND quest_id=:quest_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_id' => $quest_id
|
||||
));
|
||||
$t = $this->getTaskReward($j);
|
||||
if ($row['quest_state'] != 0 || $active_sum < $t['value']) {
|
||||
continue;
|
||||
}
|
||||
$ret = $conn->execScript('UPDATE quest SET quest_state=:quest_state, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid AND quest_id =:quest_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_id' => $quest_id,
|
||||
':quest_state' => 1,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected function updateActiveTime($account_id, $quest_id, $flag)
|
||||
{
|
||||
$conn = $this->getMysql($account_id);
|
||||
if ($flag == 2) {
|
||||
$ret = $conn->execScript('UPDATE active SET sum_time=:sum_time, active_sum=:active_sum, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':sum_time' => time(),
|
||||
':active_sum' => 0,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
}
|
||||
} else if ($flag == 1) {
|
||||
$ret = $conn->execScript('UPDATE active SET num_time=:num_time, active_num=:active_num, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':num_time' => time(),
|
||||
':active_num' => 0,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
}
|
||||
}
|
||||
$ret = $conn->execScript('UPDATE quest SET quest_state=:quest_state, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid AND quest_type=:quest_type AND quest_id<:quest_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_type' => 0,
|
||||
':quest_id' => $quest_id,
|
||||
':quest_state' => 0,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
}
|
||||
}
|
||||
|
||||
public function questInfo()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
$quest_list = array();
|
||||
$active_list = array();
|
||||
$achievement_list = array();
|
||||
$active_sum = 0;
|
||||
$active_num = 0;
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$row = $conn->execQueryOne('SELECT active_sum, sum_time FROM active WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
));
|
||||
if ($row) {
|
||||
//每周更新活跃度
|
||||
if (phpcommon\getMondayseconds(time()) - phpcommon\getMondayseconds($row['sum_time']) > 0) {
|
||||
$this->updateActiveTime($account_id, 75000, 2);
|
||||
} else {
|
||||
$active_sum = $row['active_sum'];
|
||||
}
|
||||
}
|
||||
$row = $conn->execQueryOne('SELECT active_num, num_time FROM active WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
));
|
||||
if ($row) {
|
||||
//每日更新活跃度
|
||||
if (phpcommon\getdayseconds(time()) - phpcommon\getdayseconds($row['num_time']) > 0) {
|
||||
$this->updateActiveTime($account_id, 74000, 1);
|
||||
} else {
|
||||
$active_num = $row['active_num'];
|
||||
}
|
||||
}
|
||||
$rowCount = $conn->execQueryRowCount('SELECT * FROM quest WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
));
|
||||
if ($rowCount != 0) {
|
||||
$rows = $conn->execQuery('SELECT * FROM quest WHERE accountid=:accountid AND quest_type=:quest_type;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_type' => 1
|
||||
));
|
||||
if ($rows) {
|
||||
foreach ($rows as $row) {
|
||||
array_push($quest_list, array(
|
||||
'type' => $row['quest_type'],
|
||||
'quest_id' => $row['quest_id'],
|
||||
'quest_num' => $row['quest_num'],
|
||||
'quest_state' => $row['quest_state']
|
||||
));
|
||||
}
|
||||
}
|
||||
$rows = $conn->execQuery('SELECT * FROM quest WHERE accountid=:accountid AND quest_type=:quest_type;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_type' => 2
|
||||
));
|
||||
if ($rows) {
|
||||
foreach ($rows as $row) {
|
||||
array_push($achievement_list, array(
|
||||
'type' => $row['quest_type'],
|
||||
'achievement_id' => $row['quest_id'],
|
||||
'achievement_num' => $row['quest_num'],
|
||||
'achievement_state' => $row['quest_state']
|
||||
));
|
||||
}
|
||||
}
|
||||
$rows = $conn->execQuery('SELECT * FROM quest WHERE accountid=:accountid AND quest_type=:quest_type;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_type' => 0
|
||||
));
|
||||
if ($rows) {
|
||||
foreach ($rows as $row) {
|
||||
array_push($active_list, array(
|
||||
'type' => $row['quest_type'],
|
||||
'active_id' => $row['quest_id'],
|
||||
'active_state' => $row['quest_state']
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'active_num' => $active_num,
|
||||
'active_sum' => $active_sum,
|
||||
'active_list' => $active_list,
|
||||
'quest_list' => $quest_list,
|
||||
'achievement_list' => $achievement_list
|
||||
));
|
||||
}
|
||||
|
||||
public function submitQuest()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$quest_id = $_REQUEST['quest_id'];
|
||||
$quest_type = $_REQUEST['type'];
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$row = $conn->execQueryOne('SELECT * FROM quest WHERE accountid=:accountid AND quest_id=:quest_id AND quest_type=:quest_type;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_id' => $quest_id,
|
||||
':quest_type' => $quest_type
|
||||
));
|
||||
if (!$row) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个任务');
|
||||
return;
|
||||
}
|
||||
$item_list = array();
|
||||
if ($row['quest_state'] == 1) {
|
||||
$ret = $conn->execScript('UPDATE quest SET quest_state=:quest_state, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid AND quest_id =:quest_id AND quest_type=:quest_type;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_id' => $quest_id,
|
||||
':quest_type' => $quest_type,
|
||||
':quest_state' => 2,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
|
||||
//发奖励
|
||||
if ($quest_type == 0) {
|
||||
$t = $this->getTaskReward($quest_id);
|
||||
if (!$t) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个任务');
|
||||
return;
|
||||
}
|
||||
$d = $this->getDrop($t['reward']);
|
||||
if (!$d) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 3, '没有这个奖励');
|
||||
return;
|
||||
}
|
||||
$weight_sum = 0;
|
||||
$weight_array = $this->getExplode($d['weight']);
|
||||
for ($i = 0; $i < count($weight_array); $i++) {
|
||||
$weight_sum += $weight_array[$i][0];
|
||||
}
|
||||
|
||||
$random = Rand(0, $weight_sum);
|
||||
$weight = 0;
|
||||
for ($i = 0; $i < count($weight_array); $i++) {
|
||||
$weight += $weight_array[$i][0];
|
||||
if ($weight > $random) {
|
||||
$key = $i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$item_id_array = $this->getExplode($d['item_id']);
|
||||
$num_array = $this->getExplode($d['num']);
|
||||
$item_id = $item_id_array[$key][0];
|
||||
$item_num = $num_array[$key][0];
|
||||
array_push($item_list, array(
|
||||
'item_id' => $item_id,
|
||||
'item_num' => $item_num,
|
||||
));
|
||||
$addreward = new classes\AddReward();
|
||||
$addreward->addReward($item_id, $item_num, $account_id);
|
||||
} else {
|
||||
$q = $this->getQuest($quest_id);
|
||||
if (!$q) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个任务');
|
||||
return;
|
||||
}
|
||||
$array = $this->getExplode($q['reward']);
|
||||
$reward_id = $array[0][0];
|
||||
$reward_num = $array[0][1];
|
||||
$addreward = new classes\AddReward();
|
||||
$addreward->addReward($reward_id, $reward_num, $account_id);
|
||||
array_push($item_list, array(
|
||||
'item_id' => $reward_id,
|
||||
'item_num' => $reward_num,
|
||||
));
|
||||
}
|
||||
if ($row['quest_type'] == 1) {
|
||||
$active = $conn->execQueryOne('SELECT active_num, active_sum FROM active WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
//增加活跃度
|
||||
if (!$active) {
|
||||
$this->insertActive($account_id, 73001, 5);
|
||||
$this->insertActive($account_id, 74001, 3);
|
||||
$ret = $conn->execScript('INSERT INTO active(accountid, active_num, num_time, active_sum, sum_time, create_time, modify_time) ' .
|
||||
' VALUES(:accountid, :active_num, :num_time, :active_sum, :sum_time, :create_time, :modify_time) ' .
|
||||
' ON DUPLICATE KEY UPDATE accountid=:accountid, active_num=:active_num, num_time=:num_time, active_sum=:active_sum, sum_time=:sum_time, modify_time=:modify_time;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':active_num' => $q['active_value'],
|
||||
':num_time' => time(),
|
||||
':active_sum' => $q['active_value'],
|
||||
':sum_time' => time(),
|
||||
':create_time' => time(),
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
$this->updateActive($account_id, $q['active_value'], $q['active_value']);
|
||||
} else {
|
||||
$active['active_num'] = $q['active_value'] + $active['active_num'];
|
||||
$active['active_sum'] = $q['active_value'] + $active['active_sum'];
|
||||
$ret = $conn->execScript('UPDATE active SET active_num=:active_num, active_sum=:active_sum, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':active_num' => $active['active_num'],
|
||||
':active_sum' => $active['active_sum'],
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
$this->updateActive($account_id, $active['active_num'], $active['active_sum']);
|
||||
}
|
||||
}
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'item_list' => $item_list
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
214
webapp/controller/RankController.class.php
Normal file
214
webapp/controller/RankController.class.php
Normal file
@ -0,0 +1,214 @@
|
||||
<?php
|
||||
|
||||
class RankController{
|
||||
|
||||
protected function getMysql($account_id)
|
||||
{
|
||||
$mysql_conf = getMysqlConfig(crc32($account_id));
|
||||
$conn = new phpcommon\Mysql(array(
|
||||
'host' => $mysql_conf['host'],
|
||||
'port' => $mysql_conf['port'],
|
||||
'user' => $mysql_conf['user'],
|
||||
'passwd' => $mysql_conf['passwd'],
|
||||
'dbname' => 'gamedb2001_' . $mysql_conf['instance_id']
|
||||
));
|
||||
return $conn;
|
||||
}
|
||||
|
||||
protected function getRedis()
|
||||
{
|
||||
$key = 'game2001api';
|
||||
$redis_conf = getRedisConfig($key);
|
||||
$r = new phpcommon\Redis(array(
|
||||
'host' => $redis_conf['host'],
|
||||
'port' => $redis_conf['port'],
|
||||
'passwd' => $redis_conf['passwd'],
|
||||
));
|
||||
return $r;
|
||||
}
|
||||
|
||||
public function rankInfo()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$kill_list = array();
|
||||
$kill_rank = 0;
|
||||
$alive_list = array();
|
||||
$alive_rank = 0;
|
||||
$harm_list = array();
|
||||
$harm_rank = 0;
|
||||
$rate_list = array();
|
||||
$rate_rank = 0;
|
||||
$win_list = array();
|
||||
$win_rank = 0;
|
||||
$user_list = array();
|
||||
//个人信息
|
||||
$row = $conn->execQueryOne('SELECT user_name, avatar_url, kills, alive_time, harm, win_times, game_times FROM user ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
if ($row) {
|
||||
array_push($user_list, array(
|
||||
'account_id' => $account_id,
|
||||
'name' => $row['user_name'],
|
||||
'avatar_url' => $row['avatar_url'],
|
||||
'kill' => phpcommon\safediv($row['kills'], $row['game_times']),
|
||||
'alive'=> phpcommon\safediv($row['alive_time'], $row['game_times']),
|
||||
'harm' => phpcommon\safediv($row['harm'], $row['game_times']),
|
||||
'win_rate' => phpcommon\safediv($row['win_times'], $row['game_times']),
|
||||
'win_game' => $row['win_times']
|
||||
));
|
||||
}
|
||||
|
||||
//击杀榜
|
||||
$r = $this->getRedis();
|
||||
$kill_rank_db = $r->get("game2001api: kill_rank");
|
||||
$kill_db = json_decode($kill_rank_db);
|
||||
$i = 0;
|
||||
foreach ($kill_db as $kill) {
|
||||
if ($i > 49) {
|
||||
break;
|
||||
}
|
||||
if ($kill_db[$i][0] == $account_id) {
|
||||
$kill_rank = $i + 1;
|
||||
}
|
||||
array_push($kill_list, array(
|
||||
'account_id' => $kill_db[$i][0],
|
||||
'name' => $kill_db[$i][1],
|
||||
'avatar_url' => $kill_db[$i][2],
|
||||
'kill' => $kill_db[$i][3],
|
||||
'alive'=> $kill_db[$i][4],
|
||||
'harm' => $kill_db[$i][5],
|
||||
'win_rate' => $kill_db[$i][6],
|
||||
'win_game' => $kill_db[$i][7]
|
||||
));
|
||||
$i++;
|
||||
}
|
||||
|
||||
//生存榜
|
||||
$alive_rank_db = $r->get("game2001api: alive_rank");
|
||||
$alive_db = json_decode($alive_rank_db);
|
||||
$i = 0;
|
||||
foreach ($alive_db as $alive) {
|
||||
if ($i > 49) {
|
||||
break;
|
||||
}
|
||||
if ($alive_db[$i][0] == $account_id) {
|
||||
$alive_rank = $i + 1;
|
||||
}
|
||||
array_push($alive_list, array(
|
||||
'account_id' => $alive_db[$i][0],
|
||||
'name' => $alive_db[$i][1],
|
||||
'avatar_url' => $alive_db[$i][2],
|
||||
'kill' => $alive_db[$i][3],
|
||||
'alive'=> $alive_db[$i][4],
|
||||
'harm' => $alive_db[$i][5],
|
||||
'win_rate' => $alive_db[$i][6],
|
||||
'win_game' => $alive_db[$i][7]
|
||||
));
|
||||
$i++;
|
||||
}
|
||||
|
||||
//伤害榜
|
||||
$harm_rank_db = $r->get("game2001api: harm_rank");
|
||||
$harm_db = json_decode($harm_rank_db);
|
||||
$i = 0;
|
||||
foreach ($harm_db as $harm) {
|
||||
if ($i > 49) {
|
||||
break;
|
||||
}
|
||||
if ($harm_db[$i][0] == $account_id) {
|
||||
$harm_rank = $i + 1;
|
||||
}
|
||||
array_push($harm_list, array(
|
||||
'account_id' => $harm_db[$i][0],
|
||||
'name' => $harm_db[$i][1],
|
||||
'avatar_url' => $harm_db[$i][2],
|
||||
'kill' => $harm_db[$i][3],
|
||||
'alive'=> $harm_db[$i][4],
|
||||
'harm' => $harm_db[$i][5],
|
||||
'win_rate' => $harm_db[$i][6],
|
||||
'win_game' => $harm_db[$i][7]
|
||||
));
|
||||
$i++;
|
||||
}
|
||||
|
||||
//胜率榜
|
||||
$rate_rank_db = $r->get("game2001api: rate_rank");
|
||||
$rate_db = json_decode($rate_rank_db);
|
||||
$i = 0;
|
||||
foreach ($rate_db as $rate) {
|
||||
if ($i > 49) {
|
||||
break;
|
||||
}
|
||||
if ($rate_db[$i][0] == $account_id) {
|
||||
$rate_rank = $i + 1;
|
||||
}
|
||||
array_push($rate_list, array(
|
||||
'account_id' => $rate_db[$i][0],
|
||||
'name' => $rate_db[$i][1],
|
||||
'avatar_url' => $rate_db[$i][2],
|
||||
'kill' => $rate_db[$i][3],
|
||||
'alive'=> $rate_db[$i][4],
|
||||
'harm' => $rate_db[$i][5],
|
||||
'win_rate' => $rate_db[$i][6],
|
||||
'win_game' => $rate_db[$i][7]
|
||||
));
|
||||
$i++;
|
||||
}
|
||||
|
||||
//胜场榜
|
||||
$win_rank_db = $r->get("game2001api: win_rank");
|
||||
$win_db = json_decode($win_rank_db);
|
||||
$i = 0;
|
||||
foreach ($win_db as $win) {
|
||||
if ($i > 49) {
|
||||
break;
|
||||
}
|
||||
if ($win_db[$i][0] == $account_id) {
|
||||
$win_rank = $i + 1;
|
||||
}
|
||||
array_push($win_list, array(
|
||||
'account_id' => $win_db[$i][0],
|
||||
'name' => $win_db[$i][1],
|
||||
'avatar_url' => $win_db[$i][2],
|
||||
'kill' => $win_db[$i][3],
|
||||
'alive'=> $win_db[$i][4],
|
||||
'harm' => $win_db[$i][5],
|
||||
'win_rate' => $win_db[$i][6],
|
||||
'win_game' => $win_db[$i][7]
|
||||
));
|
||||
$i++;
|
||||
}
|
||||
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => "",
|
||||
'user_list' => $user_list,
|
||||
'kill_rank' => $kill_rank,
|
||||
'kill_list' => $kill_list,
|
||||
'alive_rank' => $alive_rank,
|
||||
'alive_list' => $alive_list,
|
||||
'harm_rank' => $harm_rank,
|
||||
'harm_list' => $harm_list,
|
||||
'rate_rank' => $rate_rank,
|
||||
'rate_list' => $rate_list,
|
||||
'win_rank' => $win_rank,
|
||||
'win_list' => $win_list
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?>
|
645
webapp/controller/RoleController.class.php
Normal file
645
webapp/controller/RoleController.class.php
Normal file
@ -0,0 +1,645 @@
|
||||
<?php
|
||||
|
||||
require 'classes/Quest.php';
|
||||
require 'classes/AddReward.php';
|
||||
|
||||
class RoleController{
|
||||
|
||||
protected function getMysql($account_id)
|
||||
{
|
||||
$mysql_conf = getMysqlConfig(crc32($account_id));
|
||||
$conn = new phpcommon\Mysql(array(
|
||||
'host' => $mysql_conf['host'],
|
||||
'port' => $mysql_conf['port'],
|
||||
'user' => $mysql_conf['user'],
|
||||
'passwd' => $mysql_conf['passwd'],
|
||||
'dbname' => 'gamedb2001_' . $mysql_conf['instance_id']
|
||||
));
|
||||
return $conn;
|
||||
}
|
||||
|
||||
protected function getActivityRewardConfig($activityReward_id)
|
||||
{
|
||||
$g_conf_activityReward_cluster = require('../res/activityReward@activityReward.php');
|
||||
$activityReward_conf = getActivityRewardConfig($g_conf_activityReward_cluster, $activityReward_id);
|
||||
$act = array(
|
||||
'id' => $activityReward_conf['id'],
|
||||
'activity_id' => $activityReward_conf['activity_id'],
|
||||
'condition' => $activityReward_conf['condition'],
|
||||
'parameter' => $activityReward_conf['parameter'],
|
||||
'start_end_time' => $activityReward_conf['start_end_time'],
|
||||
'activity_reward' => $activityReward_conf['activity_reward'],
|
||||
'exchange_num' => $activityReward_conf['exchange_num'],
|
||||
'exchange_item' => $activityReward_conf['exchange_item']
|
||||
);
|
||||
return $act;
|
||||
}
|
||||
|
||||
protected function getDrop($drop_id)
|
||||
{
|
||||
$g_conf_drop_cluster = require('../res/drop@drop.php');
|
||||
$drop_conf = getDropConfig($g_conf_drop_cluster, $drop_id);
|
||||
$d = array(
|
||||
'drop_id' => $drop_conf['drop_id'],
|
||||
'item_id' => $drop_conf['item_id'],
|
||||
'num' => $drop_conf['num'],
|
||||
'weight' => $drop_conf['weight'],
|
||||
'type' => $drop_conf['type']
|
||||
);
|
||||
return $d;
|
||||
}
|
||||
|
||||
protected function getExplode($string)
|
||||
{
|
||||
$delim = "|";
|
||||
$drop_multiply = explode($delim, $string);
|
||||
$delim1 = ":";
|
||||
$arr = array();
|
||||
for ($i = 0; $i < count($drop_multiply); $i++) {
|
||||
$mul = explode($delim1, $drop_multiply[$i]);
|
||||
array_push($arr, $mul);
|
||||
}
|
||||
return $arr;
|
||||
}
|
||||
|
||||
|
||||
protected function getParameter($para_id)
|
||||
{
|
||||
$g_conf_para_cluster = require('../res/parameter@parameter.php');
|
||||
$para_conf = getParameterConfig($g_conf_para_cluster, $para_id);
|
||||
$p = array(
|
||||
'id' => $para_conf['id'],
|
||||
'param_name' => $para_conf['param_name'],
|
||||
'param_value' => $para_conf['param_value'],
|
||||
);
|
||||
return $p;
|
||||
}
|
||||
|
||||
public function roleInfo()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
$user_name = $_REQUEST['name'];
|
||||
$avatar_url = $_REQUEST['avatar_url'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
if (empty($_REQUEST['account_id'])) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$row = $conn->execQueryOne('SELECT * FROM user WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
if (!$row) {
|
||||
$ret = $conn->execScript('INSERT INTO user(accountid, user_name, avatar_url, game_times, win_times, kills, harm, add_HP, alive_time, coin_num, integral, kill_his, alive_time_his, harm_his, add_HP_his, act_share_time, act_share_status, create_time, modify_time, first_fight, collect_status, keys_num, battle_re_times, shop_flush_times, kefu_status) ' .
|
||||
' VALUES(:accountid, :user_name, :avatar_url, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, create_time, :modify_time, 0, 0, 0, 0, 0, 0) ' .
|
||||
' ON DUPLICATE KEY UPDATE accountid=:accountid, user_name=:user_name, avatar_url=:avatar_url, game_times=0, win_times=0, kills=0, harm=0, add_HP=0, alive_time=0, coin_num=0, integral=0, kill_his=0, alive_time_his=0, harm_his=0, add_HP_his=0, act_share_time=0, act_share_status=0, modify_time=:modify_time, first_fight=0, collect_status=0, keys_num=0, battle_re_times=0, shop_flush_times=0, kefu_status=0;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':user_name' => $user_name,
|
||||
':avatar_url' => $avatar_url,
|
||||
':create_time' => time(),
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'game_times' => 0,
|
||||
'win_times' => 0,
|
||||
'high_kill' => 0,
|
||||
'kills' => 0,
|
||||
'high_harm' => 0,
|
||||
'harm' => 0,
|
||||
'add_HP' => 0,
|
||||
'alive_time' => 0,
|
||||
'coin_num' => 0,
|
||||
'first_fight' => 0,
|
||||
'collect_status' => 0,
|
||||
'keys_num' => 0,
|
||||
'kefu_status' => 0
|
||||
));
|
||||
} else {
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'game_times' => $row['game_times'],
|
||||
'win_times' => $row['win_times'],
|
||||
'high_kill' => $row['kill_his'],
|
||||
'kills' => $row['kills'],
|
||||
'high_harm' => $row['harm_his'],
|
||||
'harm' => $row['harm'],
|
||||
'add_HP' => $row['add_HP'],
|
||||
'alive_time' => $row['alive_time'],
|
||||
'coin_num' => $row['coin_num'],
|
||||
'first_fight' => $row['first_fight'],
|
||||
'collect_status' => $row['collect_status'],
|
||||
'keys_num' => $row['keys_num'],
|
||||
'kefu_status' => $row['kefu_status'],
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
public function battleReport()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id']; //账号
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$map_id = $_REQUEST['map_id'];
|
||||
$map_tpl_name = $_REQUEST['map_tpl_name'];
|
||||
$room_uuid = $_REQUEST['room_uuid']; //战斗id
|
||||
$map_name = $_REQUEST['map_name']; //地图名
|
||||
$game_time = $_REQUEST['game_time']; //游戏结束时间
|
||||
$hurt = $_REQUEST['hurt']; //承受伤害
|
||||
$rank = $_REQUEST['rank']; //排名
|
||||
$kills = $_REQUEST['kills']; //击杀数
|
||||
$harm = $_REQUEST['harm']; //伤害
|
||||
$add_HP = $_REQUEST['add_HP']; //治疗量
|
||||
$alive_time = $_REQUEST['alive_time']; //存活时间
|
||||
$team_status = $_REQUEST['team_status']; //是否是组队状态
|
||||
$snipe_kill = $_REQUEST['snipe_kill']; //狙击枪击杀数
|
||||
$rifle_kill = $_REQUEST['rifle_kill']; //步枪击杀数
|
||||
$pistol_kill = $_REQUEST['pistol_kill']; //手枪击杀数
|
||||
$submachine_kill = $_REQUEST['submachine_kill'];//冲锋枪击杀数
|
||||
$rescue_member = $_REQUEST['rescue_member']; //救起队友次数
|
||||
$kill_his = $kills;
|
||||
$harm_his = $harm;
|
||||
$alive_time_his = $alive_time;
|
||||
$add_HP_his = $add_HP;
|
||||
$coin_num = $_REQUEST['coin_num']; //金币
|
||||
$integral = $_REQUEST['score']; //积分
|
||||
|
||||
if (!$map_id) {
|
||||
$map_id = 0;
|
||||
}
|
||||
if (!$map_tpl_name) {
|
||||
$map_tpl_name = '';
|
||||
}
|
||||
|
||||
$row = $conn->execQueryOne('SELECT * FROM user WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
if (!$row) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家1');
|
||||
return;
|
||||
}
|
||||
if ($kill_his < $row['kill_his']) {
|
||||
$kill_his = $row['kill_his'];
|
||||
}
|
||||
if ($harm_his < $row['harm_his']) {
|
||||
$harm_his = $row['harm_his'];
|
||||
}
|
||||
if ($rank == 1) {
|
||||
$row['win_times']++;
|
||||
}
|
||||
if ($alive_time_his < $row['alive_time_his']) {
|
||||
$alive_time_his = $row['alive_time_his'];
|
||||
}
|
||||
if ($add_HP_his < $row['add_HP_his']) {
|
||||
$add_HP_his = $row['add_HP_his'];
|
||||
}
|
||||
$ret = $conn->execScript('UPDATE user SET game_times=:game_times, win_times=:win_times, kills=:kills, harm=:harm, add_HP=:add_HP, alive_time=:alive_time, kill_his=:kill_his, alive_time_his=:alive_time_his, harm_his=:harm_his, add_HP_his=:add_HP_his, coin_num=:coin_num, integral=:integral, modify_time=:modify_time, first_fight=1 ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':game_times' => $row['game_times'] + 1,
|
||||
':win_times' => $row['win_times'],
|
||||
':kill_his' => $kill_his,
|
||||
':kills' => $row['kills'] + $kills,
|
||||
':harm_his' => $harm_his,
|
||||
':harm' => $row['harm'] + $harm,
|
||||
':add_HP' => $row['add_HP'] + $add_HP,
|
||||
':alive_time' => $row['alive_time'] + $alive_time,
|
||||
':alive_time_his' => $alive_time_his,
|
||||
':add_HP_his' => $add_HP_his,
|
||||
':accountid' => $account_id,
|
||||
':coin_num' => $row['coin_num'] + $coin_num,
|
||||
':integral' => $row['integral'] + $integral,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
|
||||
//插入历史记录
|
||||
$ret = $conn->execScript('INSERT INTO history_record(accountid, room_uuid, map_id, map_tpl_name, map_name, game_time, rank, kills, harms, hurts, alive_time, coin, status, create_time, modify_time) ' .
|
||||
' VALUES(:accountid, :room_uuid, :map_id, :map_tpl_name, :map_name, :game_time, :rank, :kills, :harms, :hurts, :alive_time, :coin, 0, :create_time, :modify_time) ' .
|
||||
' ON DUPLICATE KEY UPDATE accountid=:accountid, room_uuid=:room_uuid, map_id=:map_id, map_tpl_name=:map_tpl_name, map_name=:map_name, game_time=:game_time, rank=:rank, kills=:kills, harms=:harms, hurts=:hurts, alive_time=:alive_time, coin=:coin, status=0, modify_time=:modify_time;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':room_uuid' => $room_uuid,
|
||||
':map_id' => $map_id,
|
||||
':map_tpl_name' => $map_tpl_name,
|
||||
':map_name' => $map_name,
|
||||
':game_time' => $game_time,
|
||||
':rank' => $rank,
|
||||
':kills' => $kills,
|
||||
':harms' => $harm,
|
||||
':hurts' => $hurt,
|
||||
':alive_time' => $alive_time,
|
||||
':coin' => $coin_num,
|
||||
':create_time' => time(),
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
//刷新任务
|
||||
$quest = new classes\Quest();
|
||||
$quest->triggerQuest(QUEST_DAY_FIGHT, 1, 1, $account_id);
|
||||
$quest->triggerQuest(QUEST_DAY_ALIVE, 1, (int)($alive_time / 1000 / 60), $account_id);
|
||||
$quest->triggerQuest(QUEST_DAY_HARM, 1, $harm, $account_id);
|
||||
$quest->triggerQuest(QUEST_DAY_KILL, 1, $kills, $account_id);
|
||||
$quest->triggerQuest(QUEST_DAY_HELP, 1, $rescue_member, $account_id);
|
||||
$quest->triggerQuest(QUEST_SUM_FIGHT, 2, 1, $account_id);
|
||||
$quest->triggerQuest(QUEST_SUM_ALIVE, 2, (int)($alive_time / 1000 / 60), $account_id);
|
||||
$quest->triggerQuest(QUEST_SUM_HARM, 2, $harm, $account_id);
|
||||
$quest->triggerQuest(QUEST_SUM_KILL, 2, $kills, $account_id);
|
||||
$quest->triggerQuest(QUEST_SUM_HELP, 2, $rescue_member, $account_id);
|
||||
$quest->triggerQuest(QUEST_SUM_SNIPEKILL, 2, $snipe_kill, $account_id);
|
||||
$quest->triggerQuest(QUEST_SUM_RIFLEKILL, 2, $rifle_kill, $account_id);
|
||||
$quest->triggerQuest(QUEST_SUM_PISTOLKILL, 2, $pistol_kill, $account_id);
|
||||
$quest->triggerQuest(QUEST_SUM_SUBMACKILL, 2, $submachine_kill, $account_id);
|
||||
if ($team_status == 1 && $rank <= 5) {
|
||||
$quest->triggerQuest(QUEST_DAY_RANK, 1, 1, $account_id);
|
||||
}
|
||||
if ($team_status == 0 && $rank == 1) {
|
||||
$quest->triggerQuest(QUEST_SUM_WIM, 2, 1, $account_id);
|
||||
}
|
||||
if ($team_status == 1) {
|
||||
$quest->triggerQuest(QUEST_DAY_TEAM, 1, 1, $account_id);
|
||||
$quest->triggerQuest(QUEST_SUM_TEAM, 2, 1, $account_id);
|
||||
if ($rank == 1) {
|
||||
$quest->triggerQuest(QUEST_SUM_TEAMWIN, 2, 1, $account_id);
|
||||
}
|
||||
}
|
||||
//触发活动任务
|
||||
/*$act = $this->getActivityRewardConfig(QUEST_ACTIVITY_LOGIN);
|
||||
$array = $this->getExplode($act['start_end_time']);
|
||||
$nowTime = phpcommon\getdayseconds(time());
|
||||
$start_time = $array[0][0] * 3600 + $array[0][1] * 60 + $nowTime;
|
||||
$end_time = $array[1][0] * 3600 + $array[1][1] * 60 + $nowTime;
|
||||
if (time() >= $start_time && time() < $start_time) {
|
||||
$quest->triggerQuest(QUEST_ACTIVITY_GAME, 3, 1, $account_id);
|
||||
}*/
|
||||
//额外奖励
|
||||
$times = $this->getRewardTimes($coin_num);
|
||||
$extra_coin = $coin_num * ($times - 1);
|
||||
$d = $this->getDrop(24004);
|
||||
if (!$d) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 3, '没有这个奖励');
|
||||
return;
|
||||
}
|
||||
$skin_id_array = $this->getExplode($d['item_id']);
|
||||
$weight_sum = 0;
|
||||
$keys = 0;
|
||||
$skin_num_array = $this->getExplode($d['num']);
|
||||
$weight_array = $this->getExplode($d['weight']);
|
||||
for ($i = 0; $i < count($weight_array); $i++) {
|
||||
$weight_sum += $weight_array[$i][0];
|
||||
}
|
||||
srand($room_uuid);
|
||||
$random = Rand(0, $weight_sum);
|
||||
$weight = 0;
|
||||
for ($i = 0; $i < count($weight_array); $i++) {
|
||||
$weight += $weight_array[$i][0];
|
||||
if ($weight > $random) {
|
||||
$keys = $i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$extra_drop = "";
|
||||
$skin_id = $skin_id_array[$keys][0];
|
||||
$skin_num = $skin_num_array[$keys][0];
|
||||
$p_battle_reward = $this->getParameter(MAX_BATTLE_REWARD);
|
||||
if ($row['battle_re_times'] >= $p_battle_reward['param_value']) {
|
||||
$extra_drop = '10001:' . $extra_coin;
|
||||
} else {
|
||||
$extra_drop = '10001:' . $extra_coin . '|10002:1' . '|' . $skin_id . ':' . $skin_num;
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'kill_his' => $kill_his,
|
||||
'alive_time_his' => $alive_time_his,
|
||||
'harm_his' => $harm_his,
|
||||
'add_HP_his' => $add_HP_his,
|
||||
'extra_drop' => $extra_drop
|
||||
));
|
||||
}
|
||||
|
||||
public function historyRecord()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
$record_list = array();
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$rowCount = $conn->execQueryRowCount('SELECT * FROM history_record WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
if ($rowCount != 0) {
|
||||
$rows = $conn->execQuery('SELECT * FROM history_record WHERE accountid=:account_id;',
|
||||
array(
|
||||
':account_id' => $account_id
|
||||
));
|
||||
foreach ($rows as $row) {
|
||||
array_push($record_list, array(
|
||||
'map_name' => $row['map_name'],
|
||||
'game_time' => $row['game_time'],
|
||||
'rank' => $row['rank'],
|
||||
'kills' => $row['kills'],
|
||||
'harms' => $row['harms'],
|
||||
'hurts' => $row['hurts'],
|
||||
'alive_time' => $row['alive_time']
|
||||
));
|
||||
}
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'record_list' => $record_list
|
||||
));
|
||||
}
|
||||
|
||||
public function shareGame()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$quest = new classes\Quest();
|
||||
$quest->triggerQuest(QUEST_DAY_SHARE, 1, 1, $account_id);
|
||||
$quest->triggerQuest(QUEST_SUM_SHARE, 2, 1, $account_id);
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
));
|
||||
}
|
||||
|
||||
public function historyInfo()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$row = $conn->execQueryOne('SELECT * FROM user WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
if (!$row) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'kill_his' => $row['kill_his'],
|
||||
'alive_time_his' => $row['alive_time_his'],
|
||||
'harm_his' => $row['harm_his'],
|
||||
'add_HP_his' => $row['add_HP_his']
|
||||
));
|
||||
}
|
||||
|
||||
public function fightReward()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
$room_uuid = $_REQUEST['room_uuid'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
$record_list = array();
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$row = $conn->execQueryOne('SELECT * FROM history_record WHERE accountid=:accountid AND room_uuid=:room_uuid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':room_uuid' => $room_uuid
|
||||
));
|
||||
if (!$row) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这场战斗记录');
|
||||
return;
|
||||
}
|
||||
|
||||
if ($row['status'] == 1) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 3, '战斗奖励已领取');
|
||||
return;
|
||||
}
|
||||
$coin_num = $row['coin'];
|
||||
$times = $this->getRewardTimes($coin_num);
|
||||
$coin_num = $row['coin'] * ($times - 1);
|
||||
$d = $this->getDrop(24004);
|
||||
if (!$d) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 3, '没有这个奖励');
|
||||
return;
|
||||
}
|
||||
$skin_id_array = $this->getExplode($d['item_id']);
|
||||
$weight_sum = 0;
|
||||
$keys = 0;
|
||||
$skin_num_array = $this->getExplode($d['num']);
|
||||
$weight_array = $this->getExplode($d['weight']);
|
||||
for ($i = 0; $i < count($weight_array); $i++) {
|
||||
$weight_sum += $weight_array[$i][0];
|
||||
}
|
||||
srand($room_uuid);
|
||||
$random = Rand(0, $weight_sum);
|
||||
$weight = 0;
|
||||
for ($i = 0; $i < count($weight_array); $i++) {
|
||||
$weight += $weight_array[$i][0];
|
||||
if ($weight > $random) {
|
||||
$keys = $i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$skin_id = $skin_id_array[$keys][0];
|
||||
$skin_num = $skin_num_array[$keys][0];
|
||||
$p_battle_reward = $this->getParameter(MAX_BATTLE_REWARD);
|
||||
$addreward = new classes\AddReward();
|
||||
$addreward->addReward(10001, $coin_num, $account_id);
|
||||
$rowUser = $conn->execQueryOne('SELECT * FROM user WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
if ($rowUser['battle_re_times'] < $p_battle_reward['param_value']) {
|
||||
$keys_num = $rowUser['keys_num'] + 1;
|
||||
$battle_re_times = $rowUser['battle_re_times'] + 1;
|
||||
$addreward->addReward($skin_id, $skin_num, $account_id);
|
||||
$ret = $conn->execScript('UPDATE user SET battle_re_times=:battle_re_times, keys_num=:keys_num, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':keys_num' => $keys_num,
|
||||
':battle_re_times' => $battle_re_times,
|
||||
':modify_time' => time(),
|
||||
':accountid' => $account_id
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
));
|
||||
}
|
||||
|
||||
protected function getRewardTimes($coin_num)
|
||||
{
|
||||
$g_conf_reward_cluster = require('../res/rewardTimes@rewardTimes.php');
|
||||
$times = 1;
|
||||
$reward_conf = array();
|
||||
for ($i = 0; $i < 4; $i++) {
|
||||
$reward_id = $i + 91100;
|
||||
$reward_conf = getRewardTimesConfig($g_conf_reward_cluster, $reward_id);
|
||||
if ((int)$coin_num >= $reward_conf['minGold'] && (int)$coin_num <= $reward_conf['maxGold']) {
|
||||
$times = $reward_conf['times'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $times;
|
||||
}
|
||||
|
||||
public function collectReward()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
$record_list = array();
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$ret = $conn->execScript('UPDATE user SET collect_status=1, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':modify_time' => time(),
|
||||
':accountid' => $account_id
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
$d = $this->getDrop(24003);
|
||||
if (!$d) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 3, '没有这个奖励');
|
||||
return;
|
||||
}
|
||||
$item_id_array = $this->getExplode($d['item_id']);
|
||||
$num_array = $this->getExplode($d['num']);
|
||||
$weight_array = $this->getExplode($d['weight']);
|
||||
$i = 0;
|
||||
$item_list = array();
|
||||
foreach ($weight_array as $item) {
|
||||
if ($item[0] >= Rand(0, 10000)) {
|
||||
$item_id = $item_id_array[0];
|
||||
$item_num = $num_array[0];
|
||||
$addreward = new classes\AddReward();
|
||||
$addreward->addReward($item_id, $item_num, $account_id);
|
||||
array_push($item_list, array(
|
||||
'item_id' => $item_id,
|
||||
'item_num' => $item_num
|
||||
));
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'item_list' => $item_list
|
||||
));
|
||||
}
|
||||
|
||||
public function collectDoubleReward()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
$record_list = array();
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$d = $this->getDrop(24003);
|
||||
if (!$d) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 3, '没有这个奖励');
|
||||
return;
|
||||
}
|
||||
$item_id_array = $this->getExplode($d['item_id']);
|
||||
$num_array = $this->getExplode($d['num']);
|
||||
$weight_array = $this->getExplode($d['weight']);
|
||||
$i = 0;
|
||||
$item_list = array();
|
||||
foreach ($weight_array as $item) {
|
||||
if ($item[$i][0] >= Rand(0, 10000)) {
|
||||
$item_id = $item_id_array[$i][0];
|
||||
$item_num = $num_array[$i][0];
|
||||
$addreward = new classes\AddReward();
|
||||
$addreward->addReward($item_id, $item_num, $account_id);
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
));
|
||||
}
|
||||
}
|
||||
?>
|
501
webapp/controller/ShareController.class.php
Normal file
501
webapp/controller/ShareController.class.php
Normal file
@ -0,0 +1,501 @@
|
||||
<?php
|
||||
|
||||
require 'classes/AddReward.php';
|
||||
require 'classes/Quest.php';
|
||||
|
||||
class ShareController{
|
||||
|
||||
protected function getMysql($account_id)
|
||||
{
|
||||
$mysql_conf = getMysqlConfig(crc32($account_id));
|
||||
$conn = new phpcommon\Mysql(array(
|
||||
'host' => $mysql_conf['host'],
|
||||
'port' => $mysql_conf['port'],
|
||||
'user' => $mysql_conf['user'],
|
||||
'passwd' => $mysql_conf['passwd'],
|
||||
'dbname' => 'gamedb2001_' . $mysql_conf['instance_id']
|
||||
));
|
||||
return $conn;
|
||||
}
|
||||
|
||||
protected function getDrop($drop_id)
|
||||
{
|
||||
$drop_meta_table = require('../res/drop@drop.php');
|
||||
$drop_meta = getDropConfig($drop_meta_table, $drop_id);
|
||||
$d = array(
|
||||
'drop_id' => $drop_meta['drop_id'],
|
||||
'item_id' => $drop_meta['item_id'],
|
||||
'num' => $drop_meta['num'],
|
||||
'weight' => $drop_meta['weight'],
|
||||
'type' => $drop_meta['type']
|
||||
);
|
||||
return $d;
|
||||
}
|
||||
|
||||
protected function getShare($share_id)
|
||||
{
|
||||
$share_meta_table = require('../res/share@share.php');
|
||||
$share_meta = getShareConfig($share_meta_table, $share_id);
|
||||
$sh = array(
|
||||
'id' => $share_meta['id'],
|
||||
'rewards' => $share_meta['rewards'],
|
||||
'people' => $share_meta['people'],
|
||||
);
|
||||
return $sh;
|
||||
}
|
||||
|
||||
protected function getExplode($string)
|
||||
{
|
||||
$delim = "|";
|
||||
$drop_multiply = explode($delim, $string);
|
||||
$delim1 = ":";
|
||||
$arr = array();
|
||||
for ($i = 0; $i < count($drop_multiply); $i++) {
|
||||
$mul = explode($delim1, $drop_multiply[$i]);
|
||||
array_push($arr, $mul);
|
||||
}
|
||||
return $arr;
|
||||
}
|
||||
|
||||
|
||||
protected function getParameter($para_id)
|
||||
{
|
||||
$parameter_meta_cluster = require('../res/parameter@parameter.php');
|
||||
$parameter_meta = getParameterConfig($parameter_meta_cluster, $para_id);
|
||||
$p = array(
|
||||
'id' => $parameter_meta['id'],
|
||||
'param_name' => $parameter_meta['param_name'],
|
||||
'param_value' => $parameter_meta['param_value'],
|
||||
);
|
||||
return $p;
|
||||
}
|
||||
|
||||
public function keyBoxInfo()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
//扣除钥匙
|
||||
$row = $conn->execQueryOne('SELECT keys_num FROM user WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
if (!$row) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
if ($row['keys_num'] < 1) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 3, '钥匙不足');
|
||||
die();
|
||||
return;
|
||||
}
|
||||
$ret = $conn->execScript('UPDATE user SET keys_num=:keys_num, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':keys_num' => $row['keys_num'] - 1,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
//随机奖励
|
||||
$free = $_REQUEST['free'];
|
||||
$drop_id = 0;
|
||||
if ($free != 0) {
|
||||
$drop_id = 24002;
|
||||
} else {
|
||||
$drop_id = 24001;
|
||||
}
|
||||
$d = $this->getDrop($drop_id);
|
||||
if (!$d) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 3, '没有这个奖励');
|
||||
return;
|
||||
}
|
||||
$item_id_array = $this->getExplode($d['item_id']);
|
||||
$weight_sum = 0;
|
||||
$keys = 0;
|
||||
$item_num_array = $this->getExplode($d['num']);
|
||||
$weight_array = $this->getExplode($d['weight']);
|
||||
for ($i = 0; $i < count($weight_array); $i++) {
|
||||
$weight_sum += $weight_array[$i][0];
|
||||
}
|
||||
srand(crc32($account_id . $row['keys_num']));
|
||||
$random = Rand(0, $weight_sum);
|
||||
$weight = 0;
|
||||
for ($i = 0; $i < count($weight_array); $i++) {
|
||||
$weight += $weight_array[$i][0];
|
||||
if ($weight > $random) {
|
||||
$keys = $i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$item_id = $item_id_array[$keys][0];
|
||||
$item_num = $item_num_array[$keys][0];
|
||||
$addreward = new classes\AddReward();
|
||||
$addreward->addReward($item_id, $item_num, $account_id);
|
||||
$item_list = array();
|
||||
array_push($item_list, array(
|
||||
'item_id' => $item_id,
|
||||
'item_num' => $item_num,
|
||||
));
|
||||
$quest = new classes\Quest();
|
||||
$quest->triggerQuest(71004, 1, 1, $account_id);
|
||||
$quest->triggerQuest(72004, 2, 1, $account_id);
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'item_list' => $item_list,
|
||||
'keys_num' => $row['keys_num'] - 1
|
||||
));
|
||||
}
|
||||
|
||||
public function keyBoxReward()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$row = $conn->execQueryOne('SELECT keys_num FROM user WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
if (!$row) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
//随机奖励
|
||||
$free = $_REQUEST['free'];
|
||||
$drop_id = 0;
|
||||
if ($free != 0) {
|
||||
$drop_id = 24002;
|
||||
} else {
|
||||
$drop_id = 24001;
|
||||
}
|
||||
$d = $this->getDrop($drop_id);
|
||||
if (!$d) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 3, '没有这个奖励');
|
||||
return;
|
||||
}
|
||||
$item_id_array = $this->getExplode($d['item_id']);
|
||||
$weight_sum = 0;
|
||||
$keys = 0;
|
||||
$item_num_array = $this->getExplode($d['num']);
|
||||
$weight_array = $this->getExplode($d['weight']);
|
||||
for ($i = 0; $i < count($weight_array); $i++) {
|
||||
$weight_sum += $weight_array[$i][0];
|
||||
}
|
||||
srand(crc32($account_id . $row['keys_num']));
|
||||
$random = Rand(0, $weight_sum);
|
||||
$weight = 0;
|
||||
for ($i = 0; $i < count($weight_array); $i++) {
|
||||
$weight += $weight_array[$i][0];
|
||||
if ($weight > $random) {
|
||||
$keys = $i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$item_id = $item_id_array[$keys][0];
|
||||
$item_num = $item_num_array[$keys][0];
|
||||
$addreward = new classes\AddReward();
|
||||
$addreward->addReward($item_id, $item_num, $account_id);
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
));
|
||||
}
|
||||
|
||||
public function shareFriendInfo()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$info_list = array();
|
||||
$rows = $conn->execQuery('SELECT ach_id, status FROM share_achievement WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
if (count($rows) == 0) {
|
||||
$share_meta_table = require('../res/share@share.php');
|
||||
for ($i = 1; $i <= count($share_meta_table); $i++) {
|
||||
$ret = $conn->execScript('INSERT INTO share_achievement(accountid, ach_id, status, create_time, modify_time) ' .
|
||||
' VALUES(:account_id, :ach_id, :status, :create_time, :modify_time) ' .
|
||||
' ON DUPLICATE KEY UPDATE accountid=:account_id, ach_id=:ach_id, status=:status, modify_time=:modify_time;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
':ach_id' => $i,
|
||||
':status' => 0,
|
||||
':create_time' => time(),
|
||||
':modify_time' => time()
|
||||
));
|
||||
if(!$ret){
|
||||
die();
|
||||
return;
|
||||
}
|
||||
array_push($info_list, array(
|
||||
'achivement_id' => $i,
|
||||
'status' => 0
|
||||
));
|
||||
}
|
||||
} else {
|
||||
foreach ($rows as $row) {
|
||||
array_push($info_list, array(
|
||||
'achivement_id' => $row['ach_id'],
|
||||
'status' => $row['status']
|
||||
));
|
||||
}
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'info_list' => $info_list
|
||||
));
|
||||
}
|
||||
|
||||
public function shareFriendReward()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$ach_id = $_REQUEST['ach_id'];
|
||||
$double = $_REQUEST['double'];
|
||||
$row = $conn->execQueryOne('SELECT status FROM share_achievement WHERE accountid=:accountid AND ach_id=:ach_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':ach_id' => $ach_id,
|
||||
));
|
||||
if (!$row) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
if ($row['status'] != 0) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 3, '奖励已领取');
|
||||
return;
|
||||
}
|
||||
//获取奖励信息
|
||||
$url = '';
|
||||
if (SERVER_ENV == _ONLINE) {
|
||||
$url = 'https://service.kingsome.cn/webapp/index.php?c=AchievementShare&a=getInviteeNumSvr&';
|
||||
} else {
|
||||
$url = 'https://service-test.kingsome.cn/webapp/index.php?c=AchievementShare&a=getInviteeNumSvr&';
|
||||
}
|
||||
$timestamp = time();
|
||||
$params = array(
|
||||
'account_id' => $_REQUEST['account_id'],
|
||||
'achievement_ids' => $ach_id,
|
||||
);
|
||||
$sign = phpcommon\md5Sign($params,
|
||||
'70e32abc60367adccaa9eb7b56ed821b',
|
||||
$timestamp);
|
||||
$params['sign'] = $sign;
|
||||
$params['timestamp'] = $timestamp;
|
||||
$response = '';
|
||||
if (!phpcommon\HttpClient::get($url, $params, $response)) {
|
||||
phpcommon\sendError(ERR_RETRY, '系统繁忙');
|
||||
return;
|
||||
}
|
||||
//领取奖励
|
||||
$data = json_decode($response, true);
|
||||
$ach_list = $data['invitee_nums'];
|
||||
$peo_num = 0;
|
||||
$sh = $this->getShare($ach_id);
|
||||
$num = 0;
|
||||
if ($double != 0) {
|
||||
$num = 2;
|
||||
} else {
|
||||
$num = 1;
|
||||
}
|
||||
foreach($ach_list as $ach){
|
||||
$ach_id = $ach['achievement_id'];
|
||||
$peo_num = $ach['invitee_num'];
|
||||
}
|
||||
if ($peo_num == 0) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 4, '未达到人数要求');
|
||||
return;
|
||||
}
|
||||
$array = $this->getExplode($sh['rewards']);
|
||||
$addreward = new classes\AddReward();
|
||||
$addreward->addReward($array[0][0], $array[0][1] * $num, $account_id);
|
||||
//更新状态
|
||||
$ret = $conn->execScript('UPDATE share_achievement SET status=1, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid AND ach_id=:ach_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':modify_time' => time(),
|
||||
':ach_id' => $ach_id
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
));
|
||||
}
|
||||
|
||||
public function getKefuReward()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$mail_id = $_REQUEST['mail_ids'];
|
||||
|
||||
$url = '';
|
||||
if (SERVER_ENV == _ONLINE) {
|
||||
$url = 'https://gamemail.kingsome.cn/webapp/index.php?c=Mail&a=getAttachment&';
|
||||
} else {
|
||||
$url = 'https://gamemail-test.kingsome.cn/webapp/index.php?c=Mail&a=getAttachment&';
|
||||
}
|
||||
$params = array(
|
||||
'account_id' => $_REQUEST['account_id'],
|
||||
'mail_ids' => $mail_id,
|
||||
'session_id' => $_REQUEST['session_id']
|
||||
);
|
||||
if (!phpcommon\HttpClient::get($url, $params, $response)) {
|
||||
phpcommon\sendError(ERR_RETRY, '系统繁忙');
|
||||
return;
|
||||
}
|
||||
$row = $conn->execQueryOne('SELECT kefu_status FROM user WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
if (!$row) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
if ($row['kefu_status'] != 0) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 3, '客服奖励已领取');
|
||||
die();
|
||||
return;
|
||||
}
|
||||
$item_list = array();
|
||||
$item_id = 0;
|
||||
$item_num = 0;
|
||||
$data = json_decode($response, true);
|
||||
$errcode = $data['errcode'];
|
||||
$errmsg = $data['errmsg'];
|
||||
if ($errcode == 0) {
|
||||
foreach($data['attachments'] as $kefu){
|
||||
$item_id = $kefu['itemid'];
|
||||
$item_num = $kefu['itemnum'];
|
||||
}
|
||||
$addreward = new classes\AddReward();
|
||||
$addreward->addReward($item_id, $item_num, $account_id);
|
||||
array_push($item_list, array(
|
||||
'item_id' => $item_id,
|
||||
'item_num' => $item_num,
|
||||
));
|
||||
//更新状态
|
||||
$ret = $conn->execScript('UPDATE user SET kefu_status=1, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':modify_time' => time(),
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => $errcode,
|
||||
'errmsg' => $errmsg,
|
||||
'item_list' => $item_list
|
||||
));
|
||||
}
|
||||
|
||||
public function kefuDoubleReward()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$mail_id = $_REQUEST['mail_ids'];
|
||||
$d = $this->getDrop(24005);
|
||||
if (!$d) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 3, '没有这个奖励');
|
||||
return;
|
||||
}
|
||||
$item_id_array = $this->getExplode($d['item_id']);
|
||||
$weight_sum = 0;
|
||||
$keys = 0;
|
||||
$item_num_array = $this->getExplode($d['num']);
|
||||
$weight_array = $this->getExplode($d['weight']);
|
||||
for ($i = 0; $i < count($weight_array); $i++) {
|
||||
$weight_sum += $weight_array[$i][0];
|
||||
}
|
||||
srand(crc32($account_id . $mail_id));
|
||||
$random = Rand(0, $weight_sum);
|
||||
$weight = 0;
|
||||
for ($i = 0; $i < count($weight_array); $i++) {
|
||||
$weight += $weight_array[$i][0];
|
||||
if ($weight > $random) {
|
||||
$keys = $i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$item_id = $item_id_array[$keys][0];
|
||||
$item_num = $item_num_array[$keys][0];
|
||||
$addreward = new classes\AddReward();
|
||||
$addreward->addReward($item_id, $item_num, $account_id);
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
));
|
||||
}
|
||||
}
|
||||
?>
|
378
webapp/controller/ShopController.class.php
Normal file
378
webapp/controller/ShopController.class.php
Normal file
@ -0,0 +1,378 @@
|
||||
<?php
|
||||
|
||||
require 'classes/AddReward.php';
|
||||
|
||||
class ShopController{
|
||||
|
||||
protected function getRedis($shop_uuid)
|
||||
{
|
||||
$redis_conf = getRedisConfig(crc32($shop_uuid));
|
||||
$r = new phpcommon\Redis(array(
|
||||
'host' => $redis_conf['host'],
|
||||
'port' => $redis_conf['port'],
|
||||
'passwd' => $redis_conf['passwd']
|
||||
|
||||
));
|
||||
return $r;
|
||||
}
|
||||
|
||||
protected function getMysql($account_id)
|
||||
{
|
||||
$mysql_conf = getMysqlConfig(crc32($account_id));
|
||||
$conn = new phpcommon\Mysql(array(
|
||||
'host' => $mysql_conf['host'],
|
||||
'port' => $mysql_conf['port'],
|
||||
'user' => $mysql_conf['user'],
|
||||
'passwd' => $mysql_conf['passwd'],
|
||||
'dbname' => 'gamedb2001_' . $mysql_conf['instance_id']
|
||||
));
|
||||
return $conn;
|
||||
}
|
||||
|
||||
protected function getItem($item_id)
|
||||
{
|
||||
$g_conf_item_cluster = require('../res/item@item.php');
|
||||
$item_conf = getItemConfig($g_conf_item_cluster, $item_id);
|
||||
$it = array(
|
||||
'id' => $item_conf['id'],
|
||||
'price' => $item_conf['price'],
|
||||
);
|
||||
return $it;
|
||||
}
|
||||
|
||||
protected function getShop($shop_id)
|
||||
{
|
||||
$g_conf_shop_cluster = require('../res/shop@shop.php');
|
||||
$shop_conf = getShopConfig($g_conf_shop_cluster, $shop_id);
|
||||
$s = array(
|
||||
'shop_id' => $shop_conf['shop_id'],
|
||||
'item_id' => $shop_conf['item_id'],
|
||||
'num' => $shop_conf['num'],
|
||||
'item_weight' => $shop_conf['item_weight'],
|
||||
'discount' => $shop_conf['discount'],
|
||||
'discount_weight' => $shop_conf['discount_weight'],
|
||||
'tip' => $shop_conf['tip'],
|
||||
);
|
||||
return $s;
|
||||
}
|
||||
|
||||
protected function getParameter($para_id)
|
||||
{
|
||||
$g_conf_para_cluster = require('../res/parameter@parameter.php');
|
||||
$para_conf = getParameterConfig($g_conf_para_cluster, $para_id);
|
||||
$p = array(
|
||||
'id' => $para_conf['id'],
|
||||
'param_name' => $para_conf['param_name'],
|
||||
'param_value' => $para_conf['param_value'],
|
||||
);
|
||||
return $p;
|
||||
}
|
||||
|
||||
protected function getExplode($string)
|
||||
{
|
||||
$delim = "|";
|
||||
$drop_multiply = explode($delim, $string);
|
||||
$delim1 = ":";
|
||||
$arr = array();
|
||||
for ($i = 0; $i < count($drop_multiply); $i++) {
|
||||
$mul = explode($delim1, $drop_multiply[$i]);
|
||||
array_push($arr, $mul);
|
||||
}
|
||||
return $arr;
|
||||
}
|
||||
|
||||
public function shopInfo()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$shop_uuid = 'game2001api_shop_uuid: ' . md5($_REQUEST['account_id']);
|
||||
$shop_list = array();
|
||||
$r = $this->getRedis($shop_uuid);
|
||||
if (!$r) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
$user_db_str = $r->get($shop_uuid);
|
||||
if (empty($user_db_str)) {
|
||||
$shop_list = $this->randomShop();
|
||||
$shop_db = array(
|
||||
'shop_uuid' => $shop_uuid,
|
||||
'shop_list' => $shop_list,
|
||||
);
|
||||
$r -> set($shop_uuid, json_encode($shop_db));
|
||||
$r -> pexpire($shop_uuid, 1000 * 3600 * 24);
|
||||
} else {
|
||||
$user_db = json_decode($user_db_str, true);
|
||||
if (empty($user_db)) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'session失效');
|
||||
return;
|
||||
}
|
||||
foreach ($user_db['shop_list'] as $shop) {
|
||||
array_push($shop_list, array(
|
||||
'shop_id' => $shop['shop_id'],
|
||||
'item_id' => $shop['item_id'],
|
||||
'item_num' => $shop['item_num'],
|
||||
'discount' => $shop['discount'],
|
||||
'price' => $shop['price'],
|
||||
'tip' => $shop['tip'],
|
||||
'status' => $shop['status'],
|
||||
));
|
||||
}
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$row = $conn->execQueryOne('SELECT shop_flush_times FROM user WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
if (!$row) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg'=> '',
|
||||
'shop_uuid' => $shop_uuid,
|
||||
'shop_list' => $shop_list,
|
||||
'shop_flush_times' => $row['shop_flush_times'],
|
||||
));
|
||||
}
|
||||
|
||||
public function buyItem()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$shop_id = $_REQUEST['shop_id'];
|
||||
$shop_uuid = $_REQUEST['shop_uuid'];
|
||||
$item_id = 0;
|
||||
$item_num = 0;
|
||||
$price = 0;
|
||||
$status = 0;
|
||||
$flag = 0;
|
||||
$r = $this->getRedis($shop_uuid);
|
||||
$user_db_str = $r->get($shop_uuid);
|
||||
if (empty($user_db_str)) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'session失效');
|
||||
return;
|
||||
}
|
||||
$user_db = json_decode($user_db_str, true);
|
||||
if (empty($user_db)) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'session失效');
|
||||
return;
|
||||
}
|
||||
foreach ($user_db['shop_list'] as $shop) {
|
||||
if ($shop['shop_id'] == $shop_id) {
|
||||
$item_id = $shop['item_id'];
|
||||
$item_num = $shop['item_num'];
|
||||
$price = $shop['price'];
|
||||
$status = $shop['status'];
|
||||
$flag = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($flag == 0) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 3, '没有这个商品');
|
||||
return;
|
||||
}
|
||||
if ($status == 1) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 4, '商品已购买');
|
||||
return;
|
||||
}
|
||||
//扣除货币
|
||||
$this->SubCoin($price, $account_id);
|
||||
//修改购买状态
|
||||
foreach ($user_db['shop_list'] as &$shop) {
|
||||
if ($shop['shop_id'] == $shop_id) {
|
||||
$shop['status'] = 1;
|
||||
}
|
||||
}
|
||||
$r->set($shop_uuid, json_encode($user_db));
|
||||
//增加奖励
|
||||
$addreward = new classes\AddReward();
|
||||
$addreward->addReward($item_id, $item_num, $account_id);
|
||||
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg'=> '',
|
||||
));
|
||||
}
|
||||
|
||||
public function flushShop()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$shop_uuid = $_REQUEST['shop_uuid'];
|
||||
$shop_list = array();
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$row = $conn->execQueryOne('SELECT shop_flush_times FROM user WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
if (!$row) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$p_flush = $this->getParameter(MAX_SHOP_REFRESH);
|
||||
if ($p_flush['param_value'] <= $row['shop_flush_times']) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 3, '今日刷新次数已满');
|
||||
return;
|
||||
}
|
||||
$ret = $conn->execScript('UPDATE user SET shop_flush_times=:shop_flush_times, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':shop_flush_times' => $row['shop_flush_times'] + 1,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
$r = $this->getRedis($shop_uuid);
|
||||
$user_db_str = $r->get($shop_uuid);
|
||||
if (empty($user_db_str)) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'session失效');
|
||||
return;
|
||||
}
|
||||
$user_db = json_decode($user_db_str, true);
|
||||
if (empty($user_db)) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'session失效');
|
||||
return;
|
||||
}
|
||||
if ($_REQUEST['type'] == 3) {
|
||||
$p = $this->getParameter(RAND_SHOP_GOLD);
|
||||
$this->SubCoin($p['param_value'], $account_id);
|
||||
}
|
||||
unset($user_db['shop_list']);
|
||||
$shop_list = $this->randomShop();
|
||||
$user_db['shop_list'] = $shop_list;
|
||||
$r -> set($shop_uuid, json_encode($user_db));
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg'=> '',
|
||||
'shop_uuid' => $shop_uuid,
|
||||
'shop_list' => $shop_list,
|
||||
'shop_flush_times' => $row['shop_flush_times'] + 1
|
||||
));
|
||||
}
|
||||
|
||||
protected function randomShop()
|
||||
{
|
||||
$shop_list = array();
|
||||
$g_conf_shop_cluster = require('../res/shop@shop.php');
|
||||
for ($i = 1; $i <= count($g_conf_shop_cluster); $i++)
|
||||
{
|
||||
$item_id = 0;
|
||||
$item_num = 0;
|
||||
$discount = 0;
|
||||
$price = 0;
|
||||
$key = 0;
|
||||
$s = $this->getShop($i);
|
||||
//确定商品id和数量
|
||||
$weight_sum = 0;
|
||||
$weight_array = $this->getExplode($s['item_weight']);
|
||||
for ($ii = 0; $ii < count($weight_array); $ii++) {
|
||||
$weight_sum += $weight_array[$ii][0];
|
||||
}
|
||||
$random = Rand(0, $weight_sum);
|
||||
$weight = 0;
|
||||
for ($ii = 0; $ii < count($weight_array); $ii++) {
|
||||
$weight += $weight_array[$ii][0];
|
||||
if ($weight > $random) {
|
||||
$key = $ii;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$item_id_array = $this->getExplode($s['item_id']);
|
||||
$num_array = $this->getExplode($s['num']);
|
||||
$item_id = $item_id_array[$key][0];
|
||||
$item_num = $num_array[$key][0];
|
||||
//确定折扣和价格
|
||||
$it = $this->getItem($item_id);
|
||||
if ($s['tip'] != 3) {
|
||||
$discount = $s['discount'];
|
||||
$price = $it['price'];
|
||||
} else {
|
||||
$keys = 0;
|
||||
$weight_sum = 0;
|
||||
$weight_array = $this->getExplode($s['discount_weight']);
|
||||
for ($ii = 0; $ii < count($weight_array); $ii++) {
|
||||
$weight_sum += $weight_array[$ii][0];
|
||||
}
|
||||
$random = Rand(0, $weight_sum);
|
||||
$weight = 0;
|
||||
for ($ii = 0; $ii < count($weight_array); $ii++) {
|
||||
$weight += $weight_array[$ii][0];
|
||||
if ($weight > $random) {
|
||||
$keys = $ii;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$discount_array = $this->getExplode($s['discount']);
|
||||
$discount = $discount_array[$keys][0];
|
||||
$price = round($it['price'] * $item_num * ($discount * 1.0 / 10));
|
||||
}
|
||||
array_push($shop_list, array(
|
||||
'shop_id' => $s['shop_id'],
|
||||
'item_id' => $item_id,
|
||||
'item_num' => $item_num,
|
||||
'discount' => $discount,
|
||||
'price' => $price,
|
||||
'tip' => $s['tip'],
|
||||
'status' => 0,
|
||||
));
|
||||
}
|
||||
return $shop_list;
|
||||
}
|
||||
|
||||
protected function subCoin($coin_num, $account_id)
|
||||
{
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
//扣除货币
|
||||
$rowCoin = $conn->execQueryOne('SELECT coin_num FROM user WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
if ($rowCoin['coin_num'] < $coin_num) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 5, '金币不足');
|
||||
die();
|
||||
}
|
||||
$ret = $conn->execScript('UPDATE user SET coin_num=:coin_num, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':coin_num' => $rowCoin['coin_num'] - $coin_num,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
268
webapp/controller/SignController.class.php
Normal file
268
webapp/controller/SignController.class.php
Normal file
@ -0,0 +1,268 @@
|
||||
<?php
|
||||
|
||||
require 'classes/Quest.php';
|
||||
require 'classes/AddReward.php';
|
||||
|
||||
class SignController{
|
||||
|
||||
protected function getMysql($account_id)
|
||||
{
|
||||
$mysql_conf = getMysqlConfig(crc32($account_id));
|
||||
$conn = new phpcommon\Mysql(array(
|
||||
'host' => $mysql_conf['host'],
|
||||
'port' => $mysql_conf['port'],
|
||||
'user' => $mysql_conf['user'],
|
||||
'passwd' => $mysql_conf['passwd'],
|
||||
'dbname' => 'gamedb2001_' . $mysql_conf['instance_id']
|
||||
));
|
||||
return $conn;
|
||||
}
|
||||
|
||||
protected function getSign($sign_id)
|
||||
{
|
||||
$g_conf_sign_cluster = require('../res/signDaily@signDaily.php');
|
||||
$sign_conf = getSignConfig($g_conf_sign_cluster, $sign_id);
|
||||
$s = array(
|
||||
'sign_id' => $sign_conf['sign_id'],
|
||||
'condition' => $sign_conf['condition'],
|
||||
'item_id' => $sign_conf['item_id'],
|
||||
'num' => $sign_conf['num'],
|
||||
);
|
||||
return $s;
|
||||
}
|
||||
|
||||
protected function getActivityRewardConfig($activityReward_id)
|
||||
{
|
||||
$g_conf_activityReward_cluster = require('../res/activityReward@activityReward.php');
|
||||
$activityReward_conf = getActivityRewardConfig($g_conf_activityReward_cluster, $activityReward_id);
|
||||
$act = array(
|
||||
'id' => $activityReward_conf['id'],
|
||||
'activity_id' => $activityReward_conf['activity_id'],
|
||||
'condition' => $activityReward_conf['condition'],
|
||||
'parameter' => $activityReward_conf['parameter'],
|
||||
'start_end_time' => $activityReward_conf['start_end_time'],
|
||||
'activity_reward' => $activityReward_conf['activity_reward'],
|
||||
'exchange_num' => $activityReward_conf['exchange_num'],
|
||||
'exchange_item' => $activityReward_conf['exchange_item']
|
||||
);
|
||||
return $act;
|
||||
}
|
||||
|
||||
protected function getExplode($string)
|
||||
{
|
||||
$delim = "|";
|
||||
$drop_multiply = explode($delim, $string);
|
||||
$delim1 = ":";
|
||||
$arr = array();
|
||||
for ($i = 0; $i < count($drop_multiply); $i++) {
|
||||
$mul = explode($delim1, $drop_multiply[$i]);
|
||||
array_push($arr, $mul);
|
||||
}
|
||||
return $arr;
|
||||
}
|
||||
|
||||
protected function getParameter($para_id)
|
||||
{
|
||||
$g_conf_para_cluster = require('../res/parameter@parameter.php');
|
||||
$para_conf = getParameterConfig($g_conf_para_cluster, $para_id);
|
||||
$p = array(
|
||||
'id' => $para_conf['id'],
|
||||
'param_name' => $para_conf['param_name'],
|
||||
'param_value' => $para_conf['param_value'],
|
||||
);
|
||||
return $p;
|
||||
}
|
||||
|
||||
public function signInfo()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
$sign_days = 0;
|
||||
$signable = 1;
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$row1 = $conn->execQueryOne('SELECT * FROM user WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
|
||||
$row = $conn->execQueryOne('SELECT * FROM sign WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
$nowTime = phpcommon\getdayseconds(time());
|
||||
//触发活动任务
|
||||
/*$act = $this->getActivityRewardConfig(QUEST_ACTIVITY_LOGIN);
|
||||
$array = $this->getExplode($act['start_end_time']);
|
||||
$nowTime = phpcommon\getdayseconds(time());
|
||||
$start_time = $array[0][0] * 3600 + $array[0][1] * 60 + $nowTime;
|
||||
$end_time = $array[1][0] * 3600 + $array[1][1] * 60 + $nowTime;*/
|
||||
if (!$row) {
|
||||
$ret = $conn->execScript('INSERT INTO sign(accountid, sign_days, sign_time, create_time, modify_time) ' .
|
||||
' VALUES(:accountid, :sign_days, :sign_time, :create_time, :modify_time) ' .
|
||||
' ON DUPLICATE KEY UPDATE accountid=:accountid, sign_days=:sign_days, sign_time=:sign_time, modify_time=:modify_time;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':sign_days' => 0,
|
||||
':sign_time' => 0,
|
||||
':create_time' => time(),
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
$sign_days = 1;
|
||||
$signable = 0;
|
||||
$quest = new classes\Quest();
|
||||
$quest->triggerQuest(QUEST_DAY_LOGIN, 1, 1, $account_id);
|
||||
$quest->triggerQuest(QUEST_SUM_LOGIN, 2, 1, $account_id);
|
||||
/*if (time() >= $start_time && time() < $end_time) {
|
||||
$quest->triggerQuest(QUEST_ACTIVITY_LOGIN, 3, 1, $account_id);
|
||||
}*/
|
||||
} else {
|
||||
if ($nowTime - phpcommon\getdayseconds($row['sign_time']) > 0) {
|
||||
$sign_days = $row['sign_days'] + 1;
|
||||
$signable = 0;
|
||||
|
||||
//刷新每日任务和活动任务
|
||||
$rowCount = $conn->execQueryRowCount('SELECT * FROM quest WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
));
|
||||
if ($rowCount != 0) {
|
||||
for ($i = 0; $i < $rowCount; $i++) {
|
||||
$ret = $conn->execScript('UPDATE quest SET quest_state=:quest_state, quest_num=:quest_num, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid AND quest_type=:quest_type1 OR quest_type=:quest_type2;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_num' => 0,
|
||||
':quest_type1' => 1,
|
||||
':quest_type2' => 3,
|
||||
':quest_state' => 0,
|
||||
':modify_time' => time()
|
||||
));
|
||||
}
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
}
|
||||
$quest = new classes\Quest();
|
||||
$quest->triggerQuest(QUEST_DAY_LOGIN, 1, 1, $account_id);
|
||||
$quest->triggerQuest(QUEST_SUM_LOGIN, 2, 1, $account_id);
|
||||
//刷新战斗结算奖励次数,商店刷新次数,客服
|
||||
$battle_ret = $conn->execScript('UPDATE user SET battle_re_times=0, shop_flush_times=0, kefu_status=0, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$battle_ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
//刷新活动皮肤碎片收集状态
|
||||
/*$rowSkinCount = $conn->execQueryRowCount('SELECT * FROM skin WHERE accountid=:accountid AND skin_type=:skin_type;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':skin_type' => 2
|
||||
));
|
||||
if ($rowSkinCount != 0) {
|
||||
for ($i = 0; $i < $rowSkinCount; $i++) {
|
||||
$ret = $conn->execScript('UPDATE skin SET fragment_status=:fragment_status, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':fragment_status' => 0,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
} else {
|
||||
$sign_days = $row['sign_days'];
|
||||
$signable = 1;
|
||||
/*if (time() >= $start_time && time() < $end_time) {
|
||||
$quest = new classes\Quest();
|
||||
$quest->triggerQuest(QUEST_ACTIVITY_LOGIN, 3, 1, $account_id);
|
||||
}*/
|
||||
}
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'sign_days' => $sign_days,
|
||||
'signable' => $signable
|
||||
));
|
||||
}
|
||||
|
||||
public function signReward()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
$double = $_REQUEST['double'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$row = $conn->execQueryOne('SELECT * FROM sign WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
if (!$row || phpcommon\getdayseconds(time()) - phpcommon\getdayseconds($row['sign_time']) <= 0) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '今日已签到');
|
||||
return;
|
||||
}
|
||||
$sign_days = $row['sign_days'] + 1;
|
||||
$ret = $conn->execScript('UPDATE sign SET sign_time=:sign_time, sign_days=:sign_days, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':sign_days' => $sign_days,
|
||||
':sign_time' => time(),
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
//获得奖励
|
||||
$g_conf_sign_cluster = require('../res/signDaily@signDaily.php');
|
||||
$day = $sign_days % count($g_conf_sign_cluster);
|
||||
if ($day == 0) {
|
||||
$day = count($g_conf_sign_cluster);
|
||||
}
|
||||
$s = $this->getSign($day + 90000);
|
||||
$item_id = $s['item_id'];
|
||||
$num = $s['num'];
|
||||
if ($double == 1) {
|
||||
$p_gold = $this->getParameter(DOUBLE_SIGN_IN);
|
||||
$num = $num * $p_gold['param_value'];
|
||||
}
|
||||
$addreward = new classes\AddReward();
|
||||
$addreward->addReward($item_id, $num, $account_id);
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
));
|
||||
}
|
||||
}
|
||||
?>
|
517
webapp/controller/SkinController.class.php
Normal file
517
webapp/controller/SkinController.class.php
Normal file
@ -0,0 +1,517 @@
|
||||
<?php
|
||||
|
||||
class SkinController{
|
||||
|
||||
protected function getMysql($account_id)
|
||||
{
|
||||
$mysql_conf = getMysqlConfig(crc32($account_id));
|
||||
$conn = new phpcommon\Mysql(array(
|
||||
'host' => $mysql_conf['host'],
|
||||
'port' => $mysql_conf['port'],
|
||||
'user' => $mysql_conf['user'],
|
||||
'passwd' => $mysql_conf['passwd'],
|
||||
'dbname' => 'gamedb2001_' . $mysql_conf['instance_id']
|
||||
));
|
||||
return $conn;
|
||||
}
|
||||
|
||||
protected function getSkin($skin_id)
|
||||
{
|
||||
$g_conf_skin_cluster = require('../res/dress@dress.php');
|
||||
$skin_conf = getSkinConfig($g_conf_skin_cluster, $skin_id);
|
||||
$s = array(
|
||||
'skin_id' => $skin_conf['id'],
|
||||
'skin_name' => $skin_conf['name'],
|
||||
'skin_skillid' => $skin_conf['skill_id'],
|
||||
'skin_compose' => $skin_conf['compose'],
|
||||
'skin_experience' => $skin_conf['is_experience'],
|
||||
'skin_type' => $skin_conf['type'],
|
||||
'duration' => $skin_conf['duration'],
|
||||
'debris_id' => $skin_conf['debris'],
|
||||
'cost' => $skin_conf['cost'],
|
||||
'cost_int' => $skin_conf['cost_int'],
|
||||
'max_lv' => $skin_conf['max_lv'],
|
||||
);
|
||||
return $s;
|
||||
}
|
||||
|
||||
protected function getExplode($string)
|
||||
{
|
||||
$delim = "|";
|
||||
$drop_multiply = explode($delim, $string);
|
||||
$delim1 = ":";
|
||||
$arr = array();
|
||||
for ($i = 0; $i < count($drop_multiply); $i++) {
|
||||
$mul = explode($delim1, $drop_multiply[$i]);
|
||||
array_push($arr, $mul);
|
||||
}
|
||||
return $arr;
|
||||
}
|
||||
|
||||
protected function getParameter($para_id)
|
||||
{
|
||||
$g_conf_para_cluster = require('../res/parameter@parameter.php');
|
||||
$para_conf = getParameterConfig($g_conf_para_cluster, $para_id);
|
||||
$p = array(
|
||||
'id' => $para_conf['id'],
|
||||
'param_name' => $para_conf['param_name'],
|
||||
'param_value' => $para_conf['param_value'],
|
||||
);
|
||||
return $p;
|
||||
}
|
||||
|
||||
protected function updateActiveTime($row, $conn)
|
||||
{
|
||||
$skin_status = 0;
|
||||
if ($row['skin_type'] == 1) {
|
||||
$skin_status = 2;
|
||||
} else if ($row['skin_type'] == 2) {
|
||||
$skin_status = 3;
|
||||
}
|
||||
$ret = $conn->execScript('UPDATE skin SET active_time=0, skin_experience_level=0, skin_experience_type=0, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:account_id AND skin_id=:skin_id;',
|
||||
array(
|
||||
':account_id' => $row['accountid'],
|
||||
':skin_id' => $row['skin_id'],
|
||||
':modify_time' => time()
|
||||
));
|
||||
if(!$ret){
|
||||
die();
|
||||
return;
|
||||
}
|
||||
if ($row['skin_status'] == 0 && $row['skin_experience_type'] == 1) {
|
||||
$ret = $conn->execScript('UPDATE skin SET skin_status=:skin_status, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:account_id AND skin_id=:skin_id;',
|
||||
array(
|
||||
':account_id' => $row['accountid'],
|
||||
':skin_id' => $row['skin_id'],
|
||||
':skin_status' => $skin_status,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if(!$ret){
|
||||
die();
|
||||
return;
|
||||
}
|
||||
$ret = $conn->execScript('UPDATE skin SET skin_status=0, modify_time=:modify_time ' .
|
||||
' WHERE accountid = :account_id AND skin_id = 14001;',
|
||||
array(
|
||||
':account_id' => $row['accountid'],
|
||||
':modify_time' => time()
|
||||
));
|
||||
if(!$ret){
|
||||
die();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
public function skinInfo()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
$skin_list = array();
|
||||
if(!$conn){
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$g_conf_skin_cluster = require('../res/dress@dress.php');
|
||||
$s = $this->getSkin(14001);
|
||||
if(!$s){
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'没有这个皮肤');
|
||||
return;
|
||||
}
|
||||
$rowCount = $conn->execQueryRowCount('SELECT * FROM skin WHERE accountid = :account_id;',
|
||||
array(
|
||||
':account_id' => $account_id
|
||||
));
|
||||
if ($rowCount == 0) {
|
||||
for ($i = 14001; $i <= count($g_conf_skin_cluster) + 14000; $i++) {
|
||||
$s = $this->getSkin($i);
|
||||
if(!$s){
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'没有这个皮肤');
|
||||
return;
|
||||
}
|
||||
if ($i == 14001) {
|
||||
$skin_status = 0;
|
||||
} else if ($s['skin_type'] == 2){
|
||||
$skin_status = 3;
|
||||
} else {
|
||||
$skin_status = 2;
|
||||
}
|
||||
$ret = $conn->execScript('INSERT INTO skin(accountid, skin_id, skin_status, fragment_id, fragment_num, active_time, fragment_status, skin_type, skin_level, skin_experience_level, skin_experience_type, create_time, modify_time) ' .
|
||||
' VALUES(:account_id, :skin_id, :skin_status, :fragment_id, 0, 0, 0, :skin_type, 1, 0, 0, :create_time, :modify_time) ' .
|
||||
' ON DUPLICATE KEY UPDATE accountid=:account_id, skin_id=:skin_id, skin_status=:skin_status, fragment_id=:fragment_id, fragment_num=0, active_time=0, fragment_status=0, skin_type=:skin_type, skin_level=1, skin_experience_level=0, skin_experience_type=0, modify_time=:modify_time;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
':skin_id' => $i,
|
||||
':skin_status' => $skin_status,
|
||||
':fragment_id' => $s['debris_id'],
|
||||
':skin_type' => $s['skin_type'],
|
||||
':create_time' => time(),
|
||||
':modify_time' => time()
|
||||
));
|
||||
if(!$ret){
|
||||
die();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
$time = 0;
|
||||
$skin_level = 0;
|
||||
$skin_experience_type = 0;
|
||||
$skin_status = 0;
|
||||
$rows = $conn->execQuery('SELECT * FROM skin WHERE accountid = :account_id;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
));
|
||||
|
||||
foreach ($rows as $row) {
|
||||
$s = $this->getSkin($row['skin_id']);
|
||||
if(time() >= $row['active_time'] && $row['active_time'] != 0){
|
||||
$this->updateActiveTime($row, $conn);
|
||||
}
|
||||
}
|
||||
$rowsSkin = $conn->execQuery('SELECT * FROM skin WHERE accountid = :account_id;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
));
|
||||
$skin_id = 0;
|
||||
foreach ($rowsSkin as $rowSkin) {
|
||||
$s = $this->getSkin($rowSkin['skin_id']);
|
||||
if ($skin_id == $rowSkin['skin_id']) {
|
||||
continue;
|
||||
}
|
||||
$skin_id = $rowSkin['skin_id'];
|
||||
if ($rowSkin['active_time'] != 0) {
|
||||
$skin_level = $s['max_lv'];
|
||||
$skin_experience_type = 2;
|
||||
} else {
|
||||
$skin_level = $rowSkin['skin_level'];
|
||||
$skin_experience_type = 0;
|
||||
}
|
||||
array_push($skin_list, array(
|
||||
'skin_id' => $rowSkin['skin_id'],
|
||||
'skin_status' => $rowSkin['skin_status'],
|
||||
'fragment_num' => $rowSkin['fragment_num'],
|
||||
'active_time' => $rowSkin['active_time'],
|
||||
'skin_level' => $skin_level,
|
||||
'skin_experience_type' => $skin_experience_type
|
||||
));
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'skin_list' => $skin_list
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
public function unlockSkin()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
$skin_id = $_REQUEST['skin_id'];
|
||||
if(!$conn){
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$s = $this->getSkin($skin_id);
|
||||
if(!$s){
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'没有这个皮肤1');
|
||||
return;
|
||||
}
|
||||
$row = $conn->execQueryOne('SELECT * FROM skin WHERE accountid = :account_id AND skin_id = :skin_id;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
':skin_id' => $skin_id
|
||||
));
|
||||
if(!$row){
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'没有这个皮肤');
|
||||
return;
|
||||
}
|
||||
if ($row['skin_type'] != 1) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2,'皮肤无法解锁');
|
||||
return;
|
||||
}
|
||||
$fragment_num = 0;
|
||||
$array = $this->getExplode($s['skin_compose']);
|
||||
if ($row['fragment_num'] < $array[0][1]) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2,'皮肤碎片数量不足');
|
||||
return;
|
||||
}
|
||||
$fragment_num = $row['fragment_num'] - $array[0][1];
|
||||
|
||||
$skin_status = 1;
|
||||
$active_time = 0;
|
||||
$skin_experience_type = 0;
|
||||
if ($row['skin_status'] == 0) {
|
||||
$skin_status = 0;
|
||||
}
|
||||
if ($row['active_time'] != 0) {
|
||||
$active_time = $row['active_time'];
|
||||
$skin_experience_type = 2;
|
||||
}
|
||||
$ret = $conn->execScript('UPDATE skin SET fragment_num=:fragment_num ,skin_status=:skin_status, active_time=:active_time, skin_experience_type=:skin_experience_type, modify_time=:modify_time ' .
|
||||
' WHERE accountid = :account_id AND skin_id = :skin_id;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
':skin_id' => $skin_id,
|
||||
':fragment_num' => $fragment_num,
|
||||
':skin_status' => $skin_status,
|
||||
':active_time' => $active_time,
|
||||
':skin_experience_type' => $skin_experience_type,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
/*"skin_id" => $skin_id,
|
||||
"skin_status" => $skin_status,
|
||||
"fragment_num" => $fragment_num,
|
||||
"time" => $active_time,
|
||||
"skin_level" => 1,
|
||||
"skin_experience_type" => $skin_experience_type,*/
|
||||
));
|
||||
}
|
||||
|
||||
public function exchangeSkin()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$usingskin_id = $_REQUEST['usingskin_id'];
|
||||
$exchangeskin_id = $_REQUEST['exchangeskin_id'];
|
||||
$conn = $this->getMysql($account_id);
|
||||
if(!$conn){
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$skin_status = 0;
|
||||
$row = $conn->execQueryOne('SELECT * FROM skin WHERE accountid=:accountid AND skin_id=:skin_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':skin_id' => $usingskin_id,
|
||||
));
|
||||
if (!$row) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个皮肤');
|
||||
return;
|
||||
}
|
||||
if ($row['skin_experience_type'] == 0 || $row['skin_experience_type'] == 2) {
|
||||
$skin_status = 1;
|
||||
} else if ($row['skin_experience_type'] == 1) {
|
||||
if ($row['skin_type'] == 1) {
|
||||
$skin_status = 2;
|
||||
} else if ($row['skin_type'] == 2) {
|
||||
$skin_status = 3;
|
||||
}
|
||||
}
|
||||
$using_ret = $conn->execScript('UPDATE skin SET skin_status=:skin_status, modify_time=:modify_time ' .
|
||||
' WHERE accountid = :account_id AND skin_id = :skin_id;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
':skin_id' => $usingskin_id,
|
||||
':skin_status' => $skin_status,
|
||||
':modify_time' => time()
|
||||
));
|
||||
|
||||
if(!$using_ret){
|
||||
die();
|
||||
return;
|
||||
}
|
||||
$exchange_ret = $conn->execScript('UPDATE skin SET skin_status=0, modify_time=:modify_time ' .
|
||||
' WHERE accountid = :account_id AND skin_id = :skin_id;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
':skin_id' => $exchangeskin_id,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if(!$exchange_ret){
|
||||
die();
|
||||
return;
|
||||
}
|
||||
/*$skin_list = array();
|
||||
array_push($skin_list, array(
|
||||
'skin_id' => $row['skin_id'],
|
||||
'skin_status' => $skin_status,
|
||||
'fragment_num' => $row['fragment_num'],
|
||||
'active_time' => $row['active_time'],
|
||||
'skin_level' => $row['skin_level'],
|
||||
'skin_experience_type' => $row['skin_experience_type']
|
||||
));
|
||||
$row_exchange = $conn->execQueryOne('SELECT * FROM skin WHERE accountid=:accountid AND skin_id=:skin_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':skin_id' => $exchangeskin_id,
|
||||
));
|
||||
array_push($skin_list, array(
|
||||
'skin_id' => $row_exchange['skin_id'],
|
||||
'skin_status' => 0,
|
||||
'fragment_num' => $row_exchange['fragment_num'],
|
||||
'active_time' => $row_exchange['active_time'],
|
||||
'skin_level' => $row_exchange['skin_level'],
|
||||
'skin_experience_type' => $row_exchange['skin_experience_type']
|
||||
));
|
||||
*/
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
//"skin_list" => $skin_list,
|
||||
));
|
||||
}
|
||||
|
||||
public function freetryskin()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
$skin_id = $_REQUEST['skin_id'];
|
||||
$row = $conn->execQueryOne('SELECT * FROM skin WHERE accountid=:accountid AND skin_id=:skin_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':skin_id' => $skin_id,
|
||||
));
|
||||
if (!$row) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'没有这个角色');
|
||||
return;
|
||||
}
|
||||
if(!$conn){
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'没有这个角色');
|
||||
return;
|
||||
}
|
||||
$s = $this->getSkin($skin_id);
|
||||
if(!$s){
|
||||
phpcommon\sendError(ERR_USER_BASE + 2,'没有这个皮肤');
|
||||
return;
|
||||
}
|
||||
$time = 0;
|
||||
$ex_level = 0;
|
||||
$ex_type = 0;
|
||||
if ($s['skin_type'] == 2) {
|
||||
$time = $s['duration'];
|
||||
}
|
||||
$ex_level = $s['max_lv'];
|
||||
$p = $this->getParameter(SKIN_SKILL_TIME);
|
||||
$time = $p['param_value'];
|
||||
if ($row['skin_status'] <= 1) {
|
||||
$ex_type = 2;
|
||||
} else {
|
||||
$ex_type = 1;
|
||||
}
|
||||
$ret = $conn->execScript('UPDATE skin SET active_time=:active_time, skin_experience_level=:skin_experience_level, skin_experience_type=:skin_experience_type, modify_time=:modify_time ' .
|
||||
' WHERE accountid = :account_id AND skin_id = :skin_id;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
':skin_id' => $skin_id,
|
||||
':active_time' => time() + $time,
|
||||
':skin_experience_level' => $ex_level,
|
||||
':skin_experience_type' => $ex_type,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if(!$ret){
|
||||
die();
|
||||
return;
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
/*'skin_id' => $row['skin_id'],
|
||||
'skin_status' => $row['skin_status'],
|
||||
'fragment_num' => $row['fragment_num'],
|
||||
'active_time' => time() + $time,
|
||||
'skin_level' => $ex_level,
|
||||
'skin_experience_type' => 2*/
|
||||
));
|
||||
}
|
||||
|
||||
public function updateSkin()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个角色');
|
||||
return;
|
||||
}
|
||||
$skin_id = $_REQUEST['skin_id'];
|
||||
$free = $_REQUEST['free'];
|
||||
$row = $conn->execQueryOne('SELECT * FROM skin WHERE accountid=:account_id AND skin_id=:skin_id;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
':skin_id' => $skin_id
|
||||
));
|
||||
if (!$row) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '皮肤不存在');
|
||||
return;
|
||||
}
|
||||
$s = $this->getSkin($skin_id);
|
||||
if (!$s) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个皮肤');
|
||||
return;
|
||||
}
|
||||
if ($row['skin_level'] >= $s['max_lv']) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 3, '皮肤已到满级');
|
||||
return;
|
||||
}
|
||||
$debris_num = $s['cost'] * ceil($row['skin_level'] / 5) + $s['cost_int'];
|
||||
if ($free == 1) {
|
||||
$debris_num = 0;
|
||||
}
|
||||
if ($debris_num > $row['fragment_num']) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 4, '皮肤碎片数量不足');
|
||||
return;
|
||||
}
|
||||
$ret = $conn->execScript('UPDATE skin SET skin_level=:skin_level, fragment_num=:fragment_num, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:account_id AND skin_id=:skin_id;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
':skin_id' => $skin_id,
|
||||
':skin_level' => $row['skin_level'] + 1,
|
||||
':fragment_num' => $row['fragment_num'] - $debris_num,
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
/*'skin_id' => $row['skin_id'],
|
||||
'skin_status' => $row['skin_status'],
|
||||
'fragment_num' => $row['fragment_num'] - $debris_num,
|
||||
'active_time' => $row['active_time'],
|
||||
'skin_level' => $row['skin_level'] + 1,
|
||||
'skin_experience_type' => $row['skin_experience_type']*/
|
||||
));
|
||||
}
|
||||
}
|
||||
?>
|
403
webapp/controller/SupplyBoxController.class.php
Normal file
403
webapp/controller/SupplyBoxController.class.php
Normal file
@ -0,0 +1,403 @@
|
||||
<?php
|
||||
|
||||
require 'classes/Quest.php';
|
||||
require 'classes/AddReward.php';
|
||||
|
||||
class SupplyBoxController{
|
||||
|
||||
protected function getMysql($account_id)
|
||||
{
|
||||
$mysql_conf = getMysqlConfig(crc32($account_id));
|
||||
$conn = new phpcommon\Mysql(array(
|
||||
'host' => $mysql_conf['host'],
|
||||
'port' => $mysql_conf['port'],
|
||||
'user' => $mysql_conf['user'],
|
||||
'passwd' => $mysql_conf['passwd'],
|
||||
'dbname' => 'gamedb2001_' . $mysql_conf['instance_id']
|
||||
));
|
||||
return $conn;
|
||||
}
|
||||
|
||||
protected function getSupplyBox($box_id)
|
||||
{
|
||||
$g_conf_supply_cluster = require('../res/supply@supply.php');
|
||||
$supply_conf = getSupplyConfig($g_conf_supply_cluster, $box_id);
|
||||
$s = array(
|
||||
'id' => $supply_conf['id'],
|
||||
'drop' => $supply_conf['drop'],
|
||||
'num' => $supply_conf['num'],
|
||||
'drop_free' => $supply_conf['drop_free'],
|
||||
'num_free' => $supply_conf['num_free'],
|
||||
'price' => $supply_conf['price'],
|
||||
'parameter' => $supply_conf['parameter'],
|
||||
);
|
||||
return $s;
|
||||
}
|
||||
|
||||
protected function getDrop($drop_id)
|
||||
{
|
||||
$g_conf_drop_cluster = require('../res/drop@drop.php');
|
||||
$drop_conf = getDropConfig($g_conf_drop_cluster, $drop_id);
|
||||
$d = array(
|
||||
'drop_id' => $drop_conf['drop_id'],
|
||||
'item_id' => $drop_conf['item_id'],
|
||||
'num' => $drop_conf['num'],
|
||||
'weight' => $drop_conf['weight'],
|
||||
'type' => $drop_conf['type']
|
||||
);
|
||||
return $d;
|
||||
}
|
||||
|
||||
protected function getExplode($string)
|
||||
{
|
||||
$delim = "|";
|
||||
$drop_multiply = explode($delim, $string);
|
||||
$delim1 = ":";
|
||||
$arr = array();
|
||||
for ($i = 0; $i < count($drop_multiply); $i++) {
|
||||
$mul = explode($delim1, $drop_multiply[$i]);
|
||||
array_push($arr, $mul);
|
||||
}
|
||||
return $arr;
|
||||
}
|
||||
|
||||
protected function getParameter($para_id)
|
||||
{
|
||||
$g_conf_para_cluster = require('../res/parameter@parameter.php');
|
||||
$para_conf = getParameterConfig($g_conf_para_cluster, $para_id);
|
||||
$p = array(
|
||||
'id' => $para_conf['id'],
|
||||
'param_name' => $para_conf['param_name'],
|
||||
'param_value' => $para_conf['param_value'],
|
||||
);
|
||||
return $p;
|
||||
}
|
||||
|
||||
public function supplyBoxInfo()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
$box_list = array();
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$rowCount = $conn->execQueryRowCount('SELECT * FROM supplybox WHERE accountid=:account_id;',
|
||||
array(
|
||||
':account_id' => $account_id
|
||||
));
|
||||
if ($rowCount != 0) {
|
||||
$rows = $conn->execQuery('SELECT * FROM supplybox WHERE accountid = :account_id;',
|
||||
array(
|
||||
':account_id' => $account_id
|
||||
));
|
||||
foreach ($rows as $row) {
|
||||
if (phpcommon\getdayseconds(time()) - phpcommon\getdayseconds($row['last_buy_time']) > 0) {
|
||||
$ret = $conn->execScript('UPDATE supplybox SET free_times=0, buy_times=0, last_buy_time=:time, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid AND box_id=:box_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':box_id' => $row['box_id'],
|
||||
':time' => time(),
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
}
|
||||
array_push($box_list, array(
|
||||
'box_id' => $row['box_id'],
|
||||
'buy_times' => $row['buy_times'],
|
||||
'free_times' => $row['free_times']
|
||||
));
|
||||
}
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'supplybox_list' => $box_list
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
public function openSupplyBox()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$box_id = $_REQUEST['box_id'];
|
||||
$free_open = $_REQUEST['free_open'];
|
||||
$free_times = 0;
|
||||
$buy_times = 0;
|
||||
$s = $this->getSupplyBox($box_id);
|
||||
if (!$s) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个宝箱');
|
||||
return;
|
||||
}
|
||||
$drop_id = 0;
|
||||
if ($free_open == 0) {
|
||||
$drop_id = $s['drop'];
|
||||
} else {
|
||||
$drop_id = $s['drop_free'];
|
||||
}
|
||||
$d = $this->getDrop($drop_id);
|
||||
if (!$d) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 3, '没有这个奖励');
|
||||
return;
|
||||
}
|
||||
$item_list = array();
|
||||
$row = $conn->execQueryOne('SELECT * FROM supplybox WHERE accountid=:accountid AND box_id=:box_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':box_id' => $box_id
|
||||
));
|
||||
if (!$row) {
|
||||
if ($free_open == 0) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个宝箱');
|
||||
return;
|
||||
} else if ($free_open == 1) {
|
||||
$free_times = 1;
|
||||
$buy_times = 0;
|
||||
$ret = $conn->execScript('INSERT INTO supplybox(accountid, box_id, buy_times, free_times, last_buy_time, create_time, modify_time) ' .
|
||||
' VALUES(:accountid, :box_id, 0, 1, :last_buy_time, :create_time, :modify_time) ' .
|
||||
' ON DUPLICATE KEY UPDATE accountid=:accountid, box_id=:box_id, buy_times=0, free_times=1, last_buy_time=:last_buy_time, modify_time=:modify_time;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':box_id' => $box_id,
|
||||
':last_buy_time' => time(),
|
||||
':create_time' => time(),
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($free_open == 1) {
|
||||
$p_times = $this->getParameter(FREE_DRESS_MAX_TIME);
|
||||
if ($row['free_times'] >= $p_times['param_value']) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 3, '免费次数不足');
|
||||
return;
|
||||
}
|
||||
$free_times = $row['free_times'] + 1;
|
||||
$buy_times = $row['buy_times'];
|
||||
$ret = $conn->execScript('UPDATE supplybox SET free_times=:free_times, last_buy_time=:last_buy_time, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid AND box_id=:box_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':box_id' => $box_id,
|
||||
':free_times' => $free_times,
|
||||
':last_buy_time' => time(),
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
}
|
||||
//确定奖励倍数
|
||||
$sum = 0;
|
||||
$mul = 0;
|
||||
$array = $this->getExplode($s['num']);
|
||||
for ($i = 0; $i < count($array); $i++) {
|
||||
$sum += $array[$i][1];
|
||||
}
|
||||
$rand = Rand(0, $sum);
|
||||
$multiply = 0;
|
||||
for ($i = 0; $i < count($array); $i++) {
|
||||
$multiply += $array[$i][1];
|
||||
if ($multiply > $rand) {
|
||||
$mul = $array[$i][0];
|
||||
break;
|
||||
}
|
||||
}
|
||||
//发送奖励
|
||||
$weight_sum = 0;
|
||||
$weight_array = $this->getExplode($d['weight']);
|
||||
for ($i = 0; $i < count($weight_array); $i++) {
|
||||
$weight_sum += $weight_array[$i][0];
|
||||
}
|
||||
$random = Rand(0, $weight_sum);
|
||||
$weight = 0;
|
||||
for ($i = 0; $i < count($weight_array); $i++) {
|
||||
$weight += $weight_array[$i][0];
|
||||
if ($weight > $random) {
|
||||
$key = $i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$item_id_array = $this->getExplode($d['item_id']);
|
||||
|
||||
$num_array = $this->getExplode($d['num']);
|
||||
$item_id = $item_id_array[$key][0];
|
||||
$item_num = $num_array[$key][0] * $mul;
|
||||
array_push($item_list, array(
|
||||
'item_id' => $item_id,
|
||||
'item_num' => $item_num,
|
||||
));
|
||||
|
||||
$addreward = new classes\AddReward();
|
||||
$addreward->addReward($item_id, $item_num, $account_id);
|
||||
|
||||
$quest = new classes\Quest();
|
||||
$quest->triggerQuest(71004, 1, 1, $account_id);
|
||||
$quest->triggerQuest(72004, 2, 1, $account_id);
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'item_list' => $item_list,
|
||||
/*'box_id' => $box_id,
|
||||
'buy_times' => $buy_times,
|
||||
'free_times' => $free_times*/
|
||||
));
|
||||
}
|
||||
|
||||
public function buySupplyBox()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$box_id = $_REQUEST['box_id'];
|
||||
$coin_num = 0;
|
||||
$buy_times = 0;
|
||||
$free_times = 0;
|
||||
$s = $this->getSupplyBox($box_id);
|
||||
if (!$s) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个宝箱');
|
||||
return;
|
||||
}
|
||||
$row = $conn->execQueryOne('SELECT * FROM supplybox WHERE accountid=:account_id AND box_id=:box_id;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
':box_id' => $box_id
|
||||
));
|
||||
if (!$row) {
|
||||
$row = $conn->execQueryOne('SELECT * FROM user WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
if ($row['coin_num'] < $s['price']) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 3, '金币不足');
|
||||
return;
|
||||
}
|
||||
$coin_num = $s['price'];
|
||||
$buy_times = 1;
|
||||
$free_times = 0;
|
||||
$ret = $conn->execScript('UPDATE user SET coin_num=:coin_num, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':coin_num' => $row['coin_num'] - $s['price'],
|
||||
':modify_time' => time()
|
||||
));
|
||||
$ret = $conn->execScript('INSERT INTO supplybox(accountid, box_id, buy_times, free_times, last_buy_time, create_time, modify_time) ' .
|
||||
' VALUES(:accountid, :box_id, 1, 0, :last_buy_time, :create_time, :modify_time) ' .
|
||||
' ON DUPLICATE KEY UPDATE accountid=:accountid, box_id=:box_id, buy_times=1, free_times=0, last_buy_time=0, modify_time=:modify_time;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':box_id' => $box_id,
|
||||
':last_buy_time' => time(),
|
||||
':create_time' => time(),
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
$row1 = $conn->execQueryOne('SELECT * FROM user WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
|
||||
if ($row1['coin_num'] < $s['price'] * pow($s['parameter'], ($row['buy_times']))) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 3, '金币不足');
|
||||
return;
|
||||
}
|
||||
$coin_num = $s['price'] * pow($s['parameter'], ($row['buy_times']));
|
||||
$buy_times = $row['buy_times'] + 1;
|
||||
$free_times = $row['free_times'];
|
||||
$ret = $conn->execScript('UPDATE user SET coin_num=:coin_num, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':coin_num' => $row1['coin_num'] - $coin_num,
|
||||
':modify_time' => time()
|
||||
));
|
||||
$ret = $conn->execScript('UPDATE supplybox SET buy_times=:buy_times, last_buy_time=:time, modify_time=:modify_time ' .
|
||||
' WHERE accountid=:accountid AND box_id=:box_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':box_id' => $box_id,
|
||||
':buy_times' => $row['buy_times'] + 1,
|
||||
':time' => time(),
|
||||
':modify_time' => time()
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
/*"box_id" => $box_id,
|
||||
"buy_times" => $buy_times,
|
||||
"free_times" => $free_times,
|
||||
"coin_num" => -$coin_num,*/
|
||||
));
|
||||
}
|
||||
|
||||
public function supplyReward()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
//登录校验
|
||||
$login = loginVerify($account_id, $_REQUEST['session_id']);
|
||||
if (!$login) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
|
||||
return;
|
||||
}
|
||||
$conn = $this->getMysql($account_id);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$item_id = $_REQUEST['item_id'];
|
||||
$p_num = $this->getParameter(DOUBLE_BOX);
|
||||
$item_num = $_REQUEST['item_num'] * ($p_num['param_value'] - 1);
|
||||
$addreward = new classes\AddReward();
|
||||
$addreward->addReward($item_id, $item_num, $account_id);
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
));
|
||||
}
|
||||
}
|
||||
?>
|
307
webapp/controller/TeamController.class.php
Normal file
307
webapp/controller/TeamController.class.php
Normal file
@ -0,0 +1,307 @@
|
||||
<?php
|
||||
|
||||
|
||||
class TeamController{
|
||||
|
||||
protected function getRedis($team_uuid)
|
||||
{
|
||||
$redis_conf = getRedisConfig(crc32($team_uuid));
|
||||
$r = new phpcommon\Redis(array(
|
||||
'host' => $redis_conf['host'],
|
||||
'port' => $redis_conf['port'],
|
||||
'passwd' => $redis_conf['passwd']
|
||||
|
||||
));
|
||||
return $r;
|
||||
}
|
||||
|
||||
public function createTeam()
|
||||
{
|
||||
$node_id = 1;
|
||||
if (isset($_REQUEST['node_id'])) {
|
||||
$node_id = (int)$_REQUEST['node_id'];
|
||||
}
|
||||
$team_uuid = $node_id . '_' . md5($_REQUEST['account_id']) . time();
|
||||
|
||||
$team_db = array(
|
||||
'team_uuid' => $team_uuid,
|
||||
'auto_fill' => $_REQUEST['auto_fill'],
|
||||
'state' => 0,
|
||||
'member_list' => array(
|
||||
array(
|
||||
'idx' => 1,
|
||||
'account_id' => $_REQUEST['account_id'],
|
||||
'name' => $_REQUEST['name'],
|
||||
'avatar_url' => $_REQUEST['avatar_url'],
|
||||
)
|
||||
));
|
||||
|
||||
$r = $this->getRedis($team_uuid);
|
||||
$r -> set(TEAMID_KEY . $team_uuid, json_encode($team_db));
|
||||
$r -> pexpire(TEAMID_KEY . $team_uuid, 1000 * 600);
|
||||
|
||||
echo json_encode (array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'team_uuid' => $team_uuid
|
||||
));
|
||||
}
|
||||
|
||||
public function teamInfo()
|
||||
{
|
||||
$team_uuid = $_REQUEST['team_uuid'];
|
||||
$r = $this->getRedis($team_uuid);
|
||||
|
||||
|
||||
$accountid = $_REQUEST['account_id'];
|
||||
$sessionid = $_REQUEST['session_id'];
|
||||
$user_db_str = $r->get(TEAMID_KEY . $team_uuid);
|
||||
if (empty($user_db_str)) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'session失效1');
|
||||
return;
|
||||
}
|
||||
$user_db = json_decode($user_db_str, true);
|
||||
if (empty($user_db)) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'session失效2');
|
||||
return;
|
||||
}
|
||||
$member_list = array();
|
||||
foreach ($user_db['member_list'] as $member) {
|
||||
array_push($member_list, array(
|
||||
'idx' => $member['idx'],
|
||||
'account_id' => $member['account_id'],
|
||||
'name' => $member['name'],
|
||||
'avatar_url' => $member['avatar_url'],
|
||||
));
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg'=> '',
|
||||
'team_uuid' => $team_uuid,
|
||||
'auto_fill' => $user_db['auto_fill'],
|
||||
'state' => $user_db['state'],
|
||||
'member_list' => $member_list,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
public function joinTeam()
|
||||
{
|
||||
$team_uuid = $_REQUEST['team_uuid'];
|
||||
|
||||
$r = $this->getRedis($team_uuid);
|
||||
|
||||
|
||||
$user_db_str = $r->get(TEAMID_KEY.$team_uuid);
|
||||
|
||||
if (empty($user_db_str)) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'session失效1');
|
||||
return;
|
||||
}
|
||||
$user_db = json_decode($user_db_str, true);
|
||||
if (empty($user_db)) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, 'session失效2');
|
||||
return;
|
||||
}
|
||||
$member_num = count($user_db['member_list']);
|
||||
|
||||
if ($member_num >= 4) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2,'队伍人数已满');
|
||||
return;
|
||||
}
|
||||
$flag = 0;
|
||||
foreach ($user_db['member_list'] as $member) {
|
||||
if ($member['account_id'] == $_REQUEST['account_id']) {
|
||||
$flag = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($flag == 1) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 3,'已在队伍中');
|
||||
return;
|
||||
}
|
||||
|
||||
array_push ($user_db['member_list'], array(
|
||||
'idx' => $member_num + 1,
|
||||
'account_id' => $_REQUEST['account_id'],
|
||||
'name' => $_REQUEST['name'],
|
||||
'avatar_url' => $_REQUEST['avatar_url'],
|
||||
));
|
||||
$r->set(TEAMID_KEY . $team_uuid, json_encode($user_db));
|
||||
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
));
|
||||
}
|
||||
|
||||
public function kickoutMember()
|
||||
{
|
||||
$team_uuid = $_REQUEST['team_uuid'];
|
||||
$r = $this->getRedis($team_uuid);
|
||||
if (!$r) {
|
||||
echo 'is null';
|
||||
} else {
|
||||
$user_db_str = $r->get(TEAMID_KEY . $team_uuid);
|
||||
if (empty($user_db_str)) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'session失效1');
|
||||
return;
|
||||
}
|
||||
$user_db = json_decode($user_db_str, true);
|
||||
if (empty($user_db)) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'session失效2');
|
||||
return;
|
||||
}
|
||||
$flag = 0;
|
||||
foreach ($user_db['member_list'] as $member) {
|
||||
if ($member['account_id'] == $_REQUEST['account_id']) {
|
||||
if ($member['idx'] != 1) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 4,'你不是队长');
|
||||
return;
|
||||
}
|
||||
foreach ($user_db['member_list'] as $member) {
|
||||
if ($member['account_id'] == $_REQUEST['member_id']) {
|
||||
$flag = $member['idx'] - 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
unset($user_db['member_list'][$flag]);
|
||||
$user_db['member_list'] = array_values($user_db['member_list']);
|
||||
|
||||
$i = 1;
|
||||
foreach ($user_db['member_list'] as &$memberlist) {
|
||||
$memberlist['idx'] = $i;
|
||||
$i++;
|
||||
}
|
||||
|
||||
$r->set(TEAMID_KEY . $team_uuid, json_encode($user_db));
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
));
|
||||
}
|
||||
|
||||
public function leaveTeam()
|
||||
{
|
||||
$team_uuid = $_REQUEST['team_uuid'];
|
||||
$r = $this->getRedis($team_uuid);
|
||||
|
||||
if (!$r) {
|
||||
echo 'is null';
|
||||
} else {
|
||||
$user_db_str = $r->get(TEAMID_KEY . $team_uuid);
|
||||
if (empty($user_db_str)) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'session失效1');
|
||||
return;
|
||||
}
|
||||
$user_db = json_decode($user_db_str, true);
|
||||
if (empty($user_db)) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'session失效2');
|
||||
return;
|
||||
}
|
||||
$flag = 0;
|
||||
foreach ($user_db['member_list'] as $member) {
|
||||
if ($member['account_id'] == $_REQUEST['account_id']) {
|
||||
$flag = $member['idx'] - 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
unset($user_db['member_list'][$flag]);
|
||||
$user_db['member_list'] = array_values($user_db['member_list']);
|
||||
|
||||
$i = 1;
|
||||
foreach ($user_db['member_list'] as &$memberlist) {
|
||||
$memberlist['idx'] = $i;
|
||||
$i++;
|
||||
}
|
||||
|
||||
$r->set(TEAMID_KEY . $team_uuid, json_encode($user_db));
|
||||
if (count($user_db['member_list']) == 0) {
|
||||
$r->del(TEAMID_KEY . $team_uuid, json_encode($user_db));
|
||||
}
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
));
|
||||
}
|
||||
|
||||
public function updateTeam()
|
||||
{
|
||||
$team_uuid = $_REQUEST['team_uuid'];
|
||||
$r = $this->getRedis($team_uuid);
|
||||
|
||||
if (!$r){
|
||||
echo 'is null';
|
||||
} else {
|
||||
$user_db_str = $r->get(TEAMID_KEY . $team_uuid);
|
||||
|
||||
if (empty($user_db_str)) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'session失效1');
|
||||
return;
|
||||
}
|
||||
$user_db = json_decode($user_db_str, true);
|
||||
if (empty($user_db)) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'session失效2');
|
||||
return;
|
||||
}
|
||||
foreach ($user_db['member_list'] as $member) {
|
||||
if ($member['account_id'] == $_REQUEST['account_id']) {
|
||||
if($member['idx'] != 1){
|
||||
phpcommon\sendError(ERR_USER_BASE + 4,'你不是队长');
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
$user_db['auto_fill'] = $_REQUEST['auto_fill'];
|
||||
$r->set(TEAMID_KEY . $team_uuid, json_encode($user_db));
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
));
|
||||
}
|
||||
|
||||
public function startGame()
|
||||
{
|
||||
$team_uuid = $_REQUEST['team_uuid'];
|
||||
$r = $this->getRedis($team_uuid);
|
||||
|
||||
if (!$r) {
|
||||
echo 'is null';
|
||||
} else {
|
||||
$user_db_str = $r->get(TEAMID_KEY . $team_uuid);
|
||||
|
||||
if (empty($user_db_str)) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'session失效1');
|
||||
return;
|
||||
}
|
||||
$user_db = json_decode($user_db_str, true);
|
||||
if (empty($user_db)) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1,'session失效2');
|
||||
return;
|
||||
}
|
||||
foreach ($user_db['member_list'] as $member) {
|
||||
if ($member['account_id'] == $_REQUEST['account_id']) {
|
||||
if($member['idx'] != 1) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 4,'你不是队长');
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
$user_db['state'] = $_REQUEST['state'];
|
||||
$r->set(TEAMID_KEY . $team_uuid, json_encode($user_db));
|
||||
$r->pexpire(TEAMID_KEY . $team_uuid, 10 * 1000);
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
));
|
||||
}
|
||||
}
|
||||
?>
|
52
webapp/controller/VoiceController.class.php
Normal file
52
webapp/controller/VoiceController.class.php
Normal file
@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
class VoiceController{
|
||||
|
||||
protected function getMysql($account_id)
|
||||
{
|
||||
$mysql_conf = getMysqlConfig(crc32($account_id));
|
||||
$conn = new phpcommon\Mysql(array(
|
||||
'host' => $mysql_conf['host'],
|
||||
'port' => $mysql_conf['port'],
|
||||
'user' => $mysql_conf['user'],
|
||||
'passwd' => $mysql_conf['passwd'],
|
||||
'dbname' => 'gamedb2001_' . $mysql_conf['instance_id']
|
||||
));
|
||||
return $conn;
|
||||
}
|
||||
|
||||
protected function getRedis($accountid)
|
||||
{
|
||||
$redis_conf = getRedisConfig(crc32($accountid));
|
||||
$r = new phpcommon\Redis(array(
|
||||
'host' => $redis_conf['host'],
|
||||
'port' => $redis_conf['port'],
|
||||
'passwd' => $redis_conf['passwd']
|
||||
));
|
||||
return $r;
|
||||
}
|
||||
|
||||
public function upload()
|
||||
{
|
||||
$raw_data = file_get_contents('php://input');
|
||||
$data = base64_encode($raw_data);
|
||||
$md5 = md5($data);
|
||||
$r = $this->getRedis($md5);
|
||||
$r->set('game2001:voice:' . $md5, $data);
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'download_url' => "https://game2001api.kingsome.cn/webapp/index.php?c=Voice&a=download&res_id=" . $md5
|
||||
));
|
||||
}
|
||||
|
||||
public function download()
|
||||
{
|
||||
$r = $this->getRedis($_REQUEST['res_id']);
|
||||
$data = $r->get('game2001:voice:' . $_REQUEST['res_id']);
|
||||
echo base64_decode($data);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
29
webapp/index.php
Normal file
29
webapp/index.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
require 'bootstrap/init.php';
|
||||
|
||||
if (empty($_REQUEST['c']) || empty($_REQUEST['a'])) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
|
||||
function autoload_controller__($classname)
|
||||
{
|
||||
require_once "controller/$classname.class.php";
|
||||
spl_autoload_unregister('autoload_controller__');
|
||||
}
|
||||
spl_autoload_register('autoload_controller__');
|
||||
|
||||
function loginVerify($accountid, $sessionid)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
try{
|
||||
$c = $_REQUEST['c'];
|
||||
$a = $_REQUEST['a'];
|
||||
$classname = $c .'Controller';
|
||||
$obj = eval('return (new $classname())->$a();');
|
||||
} catch (Exception $e){
|
||||
echo($e);
|
||||
}
|
1
webapp/phpcommon
Symbolic link
1
webapp/phpcommon
Symbolic link
@ -0,0 +1 @@
|
||||
../third_party/phpcommon/
|
Loading…
x
Reference in New Issue
Block a user