This commit is contained in:
wangwei01 2019-07-08 15:01:32 +08:00
commit 0bd95356b7
30 changed files with 5473 additions and 0 deletions

11
.gitignore vendored Normal file
View File

@ -0,0 +1,11 @@
*.*\~
*.*~
*.*\#
*.*#
~*.*
\#*.*
*.out
*.tar
*.tar.gz
target
config/

3
.gitmodules vendored Normal file
View 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
View 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
config Symbolic link
View File

@ -0,0 +1 @@
../conf_test/game2002api/webapp/config

1
reload.sh Normal file
View File

@ -0,0 +1 @@
echo 'success'

1
reloadres.sh Normal file
View File

@ -0,0 +1 @@
echo 'success'

1
res Symbolic link
View File

@ -0,0 +1 @@
../conf_test/game2002api/webapp/res

1
restart.sh Normal file
View File

@ -0,0 +1 @@
echo 'success'

272
sql/gamedb.sql Normal file
View 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
View 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()

View 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
View 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';

View 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
View 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;
}
}
}
}
?>

View 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' => '',
));
}
}
?>

View 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,*/
));
}
}
?>

View 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;
}
}
?>

View File

@ -0,0 +1,15 @@
<?php
class OpsController {
public function selfChecking()
{
echo json_encode(array(
'errcode' => 0,
'errmsg' => '',
'healthy' => 1,
'max_rundelay' => 1,
));
}
}

View 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
));
}
}
?>

View 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
));
}
}
?>

View 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' => '',
));
}
}
?>

View 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' => '',
));
}
}
?>

View 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();
}
}
}
?>

View 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' => '',
));
}
}
?>

View 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']*/
));
}
}
?>

View 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' => '',
));
}
}
?>

View 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' => '',
));
}
}
?>

View 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
View 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
View File

@ -0,0 +1 @@
../third_party/phpcommon/