diff --git a/sql/gamedb.sql b/sql/gamedb.sql index 0c00a53..c23ef59 100644 --- a/sql/gamedb.sql +++ b/sql/gamedb.sql @@ -443,4 +443,21 @@ CREATE TABLE `code_his` ( UNIQUE KEY `idx_account_id_code_type` (`account_id`,`code_type`), KEY `idx_code` (`code`) ) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + + +CREATE TABLE `solo` ( + `idx` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id', + `accountid` varchar(60) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '账号id', + `level` int(11) NOT NULL DEFAULT '0' COMMENT '等级', + `exp` int(11) NOT NULL DEFAULT '0' COMMENT '当前经验值', + `medals` int(11) NOT NULL DEFAULT '0' COMMENT '体力值', + `lastredeem` int(11) NOT NULL DEFAULT '0' COMMENT '上次自然恢复体力时间戳', + `lastoffline` int(11) NOT NULL DEFAULT '0' COMMENT '上次计算离线收益时间戳', + `offline` int(11) NOT NULL DEFAULT '0' COMMENT '已计算离线时长(小时)', + `gamelevel` mediumblob NOT NULL COMMENT '关卡信息', + `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间', + `modify_time` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间', + PRIMARY KEY (`idx`), + UNIQUE KEY `accountid` (`accountid`) +) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; -- Dump completed on 2015-08-19 18:51:22 diff --git a/webapp/bootstrap/init.php b/webapp/bootstrap/init.php index 3d70462..f9ba32f 100644 --- a/webapp/bootstrap/init.php +++ b/webapp/bootstrap/init.php @@ -102,6 +102,9 @@ define('OPENING_SPEAR', 154); //新玩家奖励第一把武器 define('OPENING_SPEAR2', 178); //新玩家奖励第二把武器 define('LOTTERY_COST', 187); //每日抽奖钻石消耗 define('DIAMONDLOTTERY_TIME', 188); //每日消耗钻石抽奖次数 +define('MEDAL_LIMIT', 189); //体力自然增长上限 +define('MEDAL_SECONDS', 190); //自然增长一点体力耗时,单位秒 +define('OFFLINE_LIMIT', 191); //离线时长上限,单位小时 require 'config_loader.php'; diff --git a/webapp/classes/AddReward.php b/webapp/classes/AddReward.php index c25eba0..3edee9f 100644 --- a/webapp/classes/AddReward.php +++ b/webapp/classes/AddReward.php @@ -4,7 +4,8 @@ namespace classes; use phpcommon; -class AddReward { +class AddReward +{ protected function getMysql($account_id) { $mysql_conf = getMysqlConfig(crc32($account_id)); @@ -92,15 +93,15 @@ class AddReward { foreach ($item_list as $item) { $i = $this->getItem($item['item_id']); - if ($i['type'] == 1){ + if ($i['type'] == 1) { $this->addCoin($item['item_id'], $item['item_num'], $account_id); } else if ($i['type'] == 2) { $this->addDiamond($item['item_id'], $item['item_num'], $account_id); - } else if ($i['type'] == 8){ + } else if ($i['type'] == 8) { $this->addticket($item['item_id'], $item['item_num'], $account_id); - } else if ($i['type'] == 9){ + } else if ($i['type'] == 9) { $this->addtenticket($item['item_id'], $item['item_num'], $account_id); - } else if ($i['type'] == 10 || $i['type'] == 11){ + } else if ($i['type'] == 10 || $i['type'] == 11) { $this->addweizhuang($item['item_id'], $item['item_num'], $account_id); } else if ($i['type'] == 12) { $item_list = $this->addEquip($item['item_id'], $account_id); @@ -108,15 +109,28 @@ class AddReward { $this->addSpoilsItem($item['item_id'], $item['item_num'], $account_id); } else if ($i['type'] == 17) { $this->addAdfree($item['item_id'], $item['item_num'], $account_id); + } else if ($i['type'] == 18) { + $this->addMedal($item['item_id'], $item['item_num'], $account_id); } else { + $priceid = 10003; $price = $i['diamond']; if ($time != 0) { $price = $i['diamond_hour'] * $time; } + + if ($price == 0) { + $strs = explode($i['piece'], ':'); + if (count($strs) > 1) { + $priceid = intval($strs[0]); + $price = intval($strs[1]); + } + } + if ($t) { - $item_list = $this->addItem($item['item_id'], $item['time'], $account_id, $price, $t); + itemid: + $item_list = $this->addItem($item['item_id'], $item['time'], $account_id, $priceid, $price, $t); } else { - $item_list = $this->addItem($item['item_id'], $item['time'], $account_id, $price, 0); + $item_list = $this->addItem($item['item_id'], $item['time'], $account_id, $priceid, $price, 0); } } } @@ -130,34 +144,40 @@ class AddReward { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); die(); } - $row = $conn->execQueryOne('SELECT num FROM bag WHERE accountid=:accountid AND id=:id;', - array( - ':accountid' => $accountid, - 'id' => $id - )); + $row = $conn->execQueryOne( + 'SELECT num FROM bag WHERE accountid=:accountid AND id=:id;', + array( + ':accountid' => $accountid, + 'id' => $id + ) + ); if (!$row && $id != 0) { - $ret = $conn->execScript('INSERT INTO bag(accountid, id, color_id, status, num, active_time, create_time, modify_time) ' . - ' VALUES(:account_id, :id, 0, 1, :num, 0, :create_time, :modify_time) ' . - ' ON DUPLICATE KEY UPDATE accountid=:account_id, id=:id, color_id=0, status=1, num=:num, active_time=0, modify_time=:modify_time;', - array( - ':account_id' => $accountid, - ':id' => $id, - ':num' => $num, - ':create_time' => time(), - ':modify_time' => time() - )); - if(!$ret){ + $ret = $conn->execScript( + 'INSERT INTO bag(accountid, id, color_id, status, num, active_time, create_time, modify_time) ' . + ' VALUES(:account_id, :id, 0, 1, :num, 0, :create_time, :modify_time) ' . + ' ON DUPLICATE KEY UPDATE accountid=:account_id, id=:id, color_id=0, status=1, num=:num, active_time=0, modify_time=:modify_time;', + array( + ':account_id' => $accountid, + ':id' => $id, + ':num' => $num, + ':create_time' => time(), + ':modify_time' => time() + ) + ); + if (!$ret) { die(); } } else { - $ret = $conn->execScript('UPDATE bag SET num=:num, modify_time=:modify_time ' . - ' WHERE accountid=:account_id AND id=:id;', - array( - ':account_id' => $accountid, - ':id' => $id, - ':num' => $row['num'] + $num, - ':modify_time' => time() - )); + $ret = $conn->execScript( + 'UPDATE bag SET num=:num, modify_time=:modify_time ' . + ' WHERE accountid=:account_id AND id=:id;', + array( + ':account_id' => $accountid, + ':id' => $id, + ':num' => $row['num'] + $num, + ':modify_time' => time() + ) + ); if (!$ret) { die(); } @@ -171,10 +191,12 @@ class AddReward { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); die(); } - $row = $conn->execQueryOne('SELECT coin_num FROM user WHERE accountid=:accountid;', - array( - ':accountid' => $accountid - )); + $row = $conn->execQueryOne( + 'SELECT coin_num FROM user WHERE accountid=:accountid;', + array( + ':accountid' => $accountid + ) + ); return $row['coin_num']; } @@ -185,10 +207,12 @@ class AddReward { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); die(); } - $row = $conn->execQueryOne('SELECT diamond_num FROM user WHERE accountid=:accountid;', - array( - ':accountid' => $accountid - )); + $row = $conn->execQueryOne( + 'SELECT diamond_num FROM user WHERE accountid=:accountid;', + array( + ':accountid' => $accountid + ) + ); return $row['diamond_num']; } @@ -199,13 +223,30 @@ class AddReward { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); die(); } - $row = $conn->execQueryOne('SELECT adfree FROM recharge WHERE accountid=:accountid;', - array( - ':accountid' => $accountid - )); + $row = $conn->execQueryOne( + 'SELECT adfree FROM recharge WHERE accountid=:accountid;', + array( + ':accountid' => $accountid + ) + ); return $row ? $row['adfree'] : 0; } + public function getMedals($accountid) { + $conn = $this->getMysql($accountid); + if (!$conn) { + return 0; + } + $row = $conn->execQueryOne( + 'SELECT medals FROM solo WHERE accountid=:accountid;', + array( + ':accountid' => $accountid + ) + ); + + return $row ? $row['medals'] : 0; + } + //添加钻石 protected function addDiamond($item_id, $item_num, $accountid) { @@ -214,17 +255,21 @@ class AddReward { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); die(); } - $row = $conn->execQueryOne('SELECT diamond_num FROM user WHERE accountid=:accountid;', - array( - ':accountid' => $accountid - )); - $ret = $conn->execScript('UPDATE user SET diamond_num=:diamond_num, modify_time=:modify_time ' . - ' WHERE accountid=:accountid;', - array( - ':accountid' => $accountid, - ':diamond_num' => $item_num + $row['diamond_num'], - ':modify_time' => time() - )); + $row = $conn->execQueryOne( + 'SELECT diamond_num FROM user WHERE accountid=:accountid;', + array( + ':accountid' => $accountid + ) + ); + $ret = $conn->execScript( + 'UPDATE user SET diamond_num=:diamond_num, modify_time=:modify_time ' . + ' WHERE accountid=:accountid;', + array( + ':accountid' => $accountid, + ':diamond_num' => $item_num + $row['diamond_num'], + ':modify_time' => time() + ) + ); if (!$ret) { die(); } @@ -237,17 +282,21 @@ class AddReward { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); die(); } - $row = $conn->execQueryOne('SELECT coin_num FROM user WHERE accountid=:accountid;', - array( - ':accountid' => $accountid - )); - $ret = $conn->execScript('UPDATE user SET coin_num=:coin_num, modify_time=:modify_time ' . - ' WHERE accountid=:accountid;', - array( - ':accountid' => $accountid, - ':coin_num' => $item_num + $row['coin_num'], - ':modify_time' => time() - )); + $row = $conn->execQueryOne( + 'SELECT coin_num FROM user WHERE accountid=:accountid;', + array( + ':accountid' => $accountid + ) + ); + $ret = $conn->execScript( + 'UPDATE user SET coin_num=:coin_num, modify_time=:modify_time ' . + ' WHERE accountid=:accountid;', + array( + ':accountid' => $accountid, + ':coin_num' => $item_num + $row['coin_num'], + ':modify_time' => time() + ) + ); if (!$ret) { die(); } @@ -264,10 +313,12 @@ class AddReward { $status = 1; $sum = 0; if ($it['type'] == 10) { - $rows = $conn->execQuery('SELECT id, status FROM bag WHERE accountid=:accountid;', - array( - ':accountid' => $accountid, - )); + $rows = $conn->execQuery( + 'SELECT id, status FROM bag WHERE accountid=:accountid;', + array( + ':accountid' => $accountid, + ) + ); foreach ($rows as $r) { $it = $this->getItem($r['id']); if ($r['status'] == 0 && $it['type'] == 10) { @@ -278,25 +329,29 @@ class AddReward { $status = 0; } } - $row = $conn->execQueryOne('SELECT status, num FROM bag WHERE accountid=:accountid AND id=:id;', - array( - ':accountid' => $accountid, - 'id' => $item_id - )); + $row = $conn->execQueryOne( + 'SELECT status, num FROM bag WHERE accountid=:accountid AND id=:id;', + array( + ':accountid' => $accountid, + 'id' => $item_id + ) + ); if (!$row && $item_id != 0) { - $ret = $conn->execScript('INSERT INTO bag(accountid, id, color_id, status, num, active_time, create_time, modify_time) ' . - ' VALUES(:account_id, :id, 0, :status, :num, :active_time, :create_time, :modify_time) ' . - ' ON DUPLICATE KEY UPDATE accountid=:account_id, id=:id, color_id=0, status=:status, num=:num, active_time=:active_time, modify_time=:modify_time;', - array( - ':account_id' => $accountid, - ':id' => $item_id, - ':active_time' => 0, - ':status' => $status, - ':num' => $item_num, - ':create_time' => time(), - ':modify_time' => time() - )); - if(!$ret){ + $ret = $conn->execScript( + 'INSERT INTO bag(accountid, id, color_id, status, num, active_time, create_time, modify_time) ' . + ' VALUES(:account_id, :id, 0, :status, :num, :active_time, :create_time, :modify_time) ' . + ' ON DUPLICATE KEY UPDATE accountid=:account_id, id=:id, color_id=0, status=:status, num=:num, active_time=:active_time, modify_time=:modify_time;', + array( + ':account_id' => $accountid, + ':id' => $item_id, + ':active_time' => 0, + ':status' => $status, + ':num' => $item_num, + ':create_time' => time(), + ':modify_time' => time() + ) + ); + if (!$ret) { die(); } } else { @@ -310,15 +365,17 @@ class AddReward { } } } - $ret = $conn->execScript('UPDATE bag SET num=:num, status=:status, modify_time=:modify_time ' . - ' WHERE accountid=:account_id AND id=:id;', - array( - ':account_id' => $accountid, - ':id' => $item_id, - ':num' => $row['num'] + $item_num, - ':status' => $status, - ':modify_time' => time() - )); + $ret = $conn->execScript( + 'UPDATE bag SET num=:num, status=:status, modify_time=:modify_time ' . + ' WHERE accountid=:account_id AND id=:id;', + array( + ':account_id' => $accountid, + ':id' => $item_id, + ':num' => $row['num'] + $item_num, + ':status' => $status, + ':modify_time' => time() + ) + ); if (!$ret) { die(); } @@ -332,17 +389,21 @@ class AddReward { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); die(); } - $row = $conn->execQueryOne('SELECT free_lot_ticket FROM user WHERE accountid=:accountid;', - array( - ':accountid' => $accountid - )); - $ret = $conn->execScript('UPDATE user SET free_lot_ticket=:free_lot_ticket, modify_time=:modify_time ' . - ' WHERE accountid=:accountid;', - array( - ':accountid' => $accountid, - ':free_lot_ticket' => $item_num + $row['free_lot_ticket'], - ':modify_time' => time() - )); + $row = $conn->execQueryOne( + 'SELECT free_lot_ticket FROM user WHERE accountid=:accountid;', + array( + ':accountid' => $accountid + ) + ); + $ret = $conn->execScript( + 'UPDATE user SET free_lot_ticket=:free_lot_ticket, modify_time=:modify_time ' . + ' WHERE accountid=:accountid;', + array( + ':accountid' => $accountid, + ':free_lot_ticket' => $item_num + $row['free_lot_ticket'], + ':modify_time' => time() + ) + ); if (!$ret) { die(); } @@ -355,17 +416,21 @@ class AddReward { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); die(); } - $row = $conn->execQueryOne('SELECT free_dou_lot_ticket FROM user WHERE accountid=:accountid;', - array( - ':accountid' => $accountid - )); - $ret = $conn->execScript('UPDATE user SET free_dou_lot_ticket=:free_dou_lot_ticket, modify_time=:modify_time ' . - ' WHERE accountid=:accountid;', - array( - ':accountid' => $accountid, - ':free_dou_lot_ticket' => $item_num + $row['free_dou_lot_ticket'], - ':modify_time' => time() - )); + $row = $conn->execQueryOne( + 'SELECT free_dou_lot_ticket FROM user WHERE accountid=:accountid;', + array( + ':accountid' => $accountid + ) + ); + $ret = $conn->execScript( + 'UPDATE user SET free_dou_lot_ticket=:free_dou_lot_ticket, modify_time=:modify_time ' . + ' WHERE accountid=:accountid;', + array( + ':accountid' => $accountid, + ':free_dou_lot_ticket' => $item_num + $row['free_dou_lot_ticket'], + ':modify_time' => time() + ) + ); if (!$ret) { die(); } @@ -378,16 +443,18 @@ class AddReward { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); die(); } - $row = $conn->execQueryOne('SELECT adfree FROM recharge WHERE accountid=:accountid;', - array( - ':accountid' => $accountid - )); + $row = $conn->execQueryOne( + 'SELECT adfree FROM recharge WHERE accountid=:accountid;', + array( + ':accountid' => $accountid + ) + ); $ret = false; $nowtime = time(); if (!$row) { $ret = $conn->execScript( 'INSERT INTO recharge(accountid, adree, create_time, modify_time) ' . - ' VALUES(:account_id, :adfree, :create_time, :modify_time) ' . + ' VALUES(:account_id, :adfree_add, :create_time, :modify_time) ' . ' ON DUPLICATE KEY UPDATE accountid=:account_id, adfree=adfree+:adfree_add, modify_time=:modify_time;', array( ':account_id' => $accountid, @@ -396,15 +463,59 @@ class AddReward { ':modify_time' => $nowtime, ) ); - } else { - $ret = $conn->execScript('UPDATE recharge SET adfree=adfree+:adfree_add, modify_time=:modify_time ' . - ' WHERE accountid=:accountid;', - array( - ':accountid' => $accountid, - ':adfree_add' => $item_num, - ':modify_time' => $nowtime, - )); + $ret = $conn->execScript( + 'UPDATE recharge SET adfree=adfree+:adfree_add, modify_time=:modify_time ' . + ' WHERE accountid=:accountid;', + array( + ':accountid' => $accountid, + ':adfree_add' => $item_num, + ':modify_time' => $nowtime, + ) + ); + } + if (!$ret) { + die(); + } + } + + protected function addMedal($item_id, $item_num, $accountid) + { + $conn = $this->getMysql($accountid); + if (!$conn) { + phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); + die(); + } + $row = $conn->execQueryOne( + 'SELECT medals, lastredeem FROM solo WHERE accountid=:accountid;', + array( + ':accountid' => $accountid + ) + ); + $ret = false; + $nowtime = time(); + if (!$row) { + $ret = $conn->execScript( + 'INSERT INTO rolo(accountid, medals, create_time, modify_time) ' . + ' VALUES(:account_id, :medals_add, :create_time, :modify_time) ' . + ' ON DUPLICATE KEY UPDATE accountid=:account_id, medals=medals+:medals_add, modify_time=:modify_time;', + array( + ':account_id' => $accountid, + ':medals_add' => $item_num, + ':create_time' => $nowtime, + ':modify_time' => $nowtime, + ) + ); + } else { + $ret = $conn->execScript( + 'UPDATE solo SET medals=medals+:medals_add, lastredeem=:lastredeem, modify_time=:modify_time ' . + ' WHERE accountid=:accountid;', + array( + ':accountid' => $accountid, + ':medals_add' => $item_num, + ':modify_time' => $nowtime, + ) + ); } if (!$ret) { die(); @@ -412,7 +523,7 @@ class AddReward { } //添加道具 - protected function addItem($itemid, $hourtime, $accountid, $price, $t) + protected function addItem($itemid, $hourtime, $accountid, $priceid, $price, $t) { $item_list = array(); $item_num = 1; @@ -425,43 +536,52 @@ class AddReward { } $status = 1; $active_time = $time * 3600 + time(); - $row = $conn->execQueryOne('SELECT * FROM bag WHERE accountid=:accountid AND id=:id;', - array( - ':accountid' => $accountid, - 'id' => $item_id - )); + $row = $conn->execQueryOne( + 'SELECT * FROM bag WHERE accountid=:accountid AND id=:id;', + array( + ':accountid' => $accountid, + 'id' => $item_id + ) + ); if (!$row && $item_id != 0) { if ($time == 0) { $status = 1; $active_time = 0; } if ($t == 0) { - $status = $this->getStatus($item_id, $status,$accountid); - } else if ($t == 1){ + $status = $this->getStatus($item_id, $status, $accountid); + } else if ($t == 1) { $status = 0; $this->updateStatus($item_id, $accountid); } - $ret = $conn->execScript('INSERT INTO bag(accountid, id, color_id, status, num, active_time, create_time, modify_time) ' . - ' VALUES(:account_id, :id, 0, :status, 0, :active_time, :create_time, :modify_time) ' . - ' ON DUPLICATE KEY UPDATE accountid=:account_id, id=:id, color_id=0, status=:status, num=0, active_time=:active_time, modify_time=:modify_time;', - array( - ':account_id' => $accountid, - ':id' => $item_id, - ':active_time' => $active_time, - ':status' => $status, - ':create_time' => time(), - ':modify_time' => time() - )); - if(!$ret){ + $ret = $conn->execScript( + 'INSERT INTO bag(accountid, id, color_id, status, num, active_time, create_time, modify_time) ' . + ' VALUES(:account_id, :id, 0, :status, 0, :active_time, :create_time, :modify_time) ' . + ' ON DUPLICATE KEY UPDATE accountid=:account_id, id=:id, color_id=0, status=:status, num=0, active_time=:active_time, modify_time=:modify_time;', + array( + ':account_id' => $accountid, + ':id' => $item_id, + ':active_time' => $active_time, + ':status' => $status, + ':create_time' => time(), + ':modify_time' => time() + ) + ); + if (!$ret) { die(); } - } else { if ($row['status'] != 2 && $row['active_time'] == 0) { - $item_id = 10003; + $item_id = $priceid; $item_num = $price; $time = 0; - $this->addDiamond($item_id, $item_num, $accountid); + if ($price > 0) { + if ($priceid == 10003) { + $this->addDiamond($item_id, $item_num, $accountid); + } else { + $this->addweizhuang($item_id, $item_num, $accountid); + } + } } else { $nowTime = $row['active_time']; $status = $row['status']; @@ -479,20 +599,22 @@ class AddReward { } } if ($t == 0) { - $status = $this->getStatus($item_id, $status,$accountid); - } else if ($t == 1){ + $status = $this->getStatus($item_id, $status, $accountid); + } else if ($t == 1) { $status = 0; $this->updateStatus($item_id, $accountid); } - $ret = $conn->execScript('UPDATE bag SET active_time=:active_time, status=:status, modify_time=:modify_time ' . - ' WHERE accountid=:account_id AND id=:id;', - array( - ':account_id' => $accountid, - ':id' => $item_id, - ':active_time' => $nowTime, - ':status' => $status, - ':modify_time' => time() - )); + $ret = $conn->execScript( + 'UPDATE bag SET active_time=:active_time, status=:status, modify_time=:modify_time ' . + ' WHERE accountid=:account_id AND id=:id;', + array( + ':account_id' => $accountid, + ':id' => $item_id, + ':active_time' => $nowTime, + ':status' => $status, + ':modify_time' => time() + ) + ); if (!$ret) { die(); } @@ -525,11 +647,13 @@ class AddReward { if ($bag['fuction'] != $b['fuction']) { continue; } - $row = $conn->execQueryOne('SELECT status FROM bag WHERE accountid=:accountid AND id=:id;', - array( - ':accountid' => $accountid, - ':id' => $id, - )); + $row = $conn->execQueryOne( + 'SELECT status FROM bag WHERE accountid=:accountid AND id=:id;', + array( + ':accountid' => $accountid, + ':id' => $id, + ) + ); if (!$row || $row['status'] != 0) { continue; } @@ -549,11 +673,13 @@ class AddReward { if ($bag['fuction'] != $b['fuction']) { continue; } - $row_emoji = $conn->execQueryOne('SELECT status FROM bag WHERE accountid=:accountid AND id=:id;', - array( - ':accountid' => $accountid, - ':id' => $id, - )); + $row_emoji = $conn->execQueryOne( + 'SELECT status FROM bag WHERE accountid=:accountid AND id=:id;', + array( + ':accountid' => $accountid, + ':id' => $id, + ) + ); if ($row_emoji['status'] == 0) { $emoji_num++; } @@ -570,7 +696,7 @@ class AddReward { public function updateStatus($item_id, $accountid) { $conn = $this->getMysql($accountid); - if(!$conn){ + if (!$conn) { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); return; } @@ -584,11 +710,13 @@ class AddReward { if ($bag['fuction'] != $b['fuction']) { continue; } - $row = $conn->execQueryOne('SELECT status, active_time FROM bag WHERE accountid=:accountid AND id=:id;', - array( - ':accountid' => $accountid, - ':id' => $id, - )); + $row = $conn->execQueryOne( + 'SELECT status, active_time FROM bag WHERE accountid=:accountid AND id=:id;', + array( + ':accountid' => $accountid, + ':id' => $id, + ) + ); if (!$row || $row['status'] != 0) { continue; } @@ -596,15 +724,17 @@ class AddReward { if ($row['active_time'] == 0) { $status = 1; } - $using_ret = $conn->execScript('UPDATE bag SET status=:status, color_id=0, modify_time=:modify_time ' . - ' WHERE accountid = :account_id AND id = :id;', - array( - ':account_id' => $accountid, - ':id' => $id, - ':status' => $status, - ':modify_time' => time() - )); - if(!$using_ret){ + $using_ret = $conn->execScript( + 'UPDATE bag SET status=:status, color_id=0, modify_time=:modify_time ' . + ' WHERE accountid = :account_id AND id = :id;', + array( + ':account_id' => $accountid, + ':id' => $id, + ':status' => $status, + ':modify_time' => time() + ) + ); + if (!$using_ret) { die(); return; } @@ -615,47 +745,53 @@ class AddReward { protected function addEquip($item_id, $accountid) { $conn = $this->getMysql($accountid); - if(!$conn){ + if (!$conn) { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); die(); return; } - $row = $conn->execQueryOne('SELECT id FROM equip WHERE accountid=:accountid AND id=:id;', - array( - ':accountid' => $accountid, - ':id' => $item_id, - )); + $row = $conn->execQueryOne( + 'SELECT id FROM equip WHERE accountid=:accountid AND id=:id;', + array( + ':accountid' => $accountid, + ':id' => $item_id, + ) + ); //没有装备解锁装备 $item_list = array(); if (!$row) { - $rows = $conn->execQuery('SELECT using_id FROM equip WHERE accountid=:accountid;', - array( - ':accountid' => $accountid, - )); + $rows = $conn->execQuery( + 'SELECT using_id FROM equip WHERE accountid=:accountid;', + array( + ':accountid' => $accountid, + ) + ); $using_id = $item_id; if ($rows) { foreach ($rows as $r) { $using_id = $r['using_id']; } } - $ret = $conn->execScript('INSERT INTO equip(accountid, id, lv, active_time, sub_time, create_time, modify_time, using_id, exp) ' . - ' VALUES(:account_id, :id, 0, :active_time, :sub_time, :create_time, :modify_time, :using_id, :exp) ' . - ' ON DUPLICATE KEY UPDATE accountid=:account_id, id=:id, lv=0, active_time=:active_time, sub_time=:sub_time, modify_time=:modify_time, using_id=:using_id, exp=:exp;', - array( - ':account_id' => $accountid, - ':id' => $item_id, - ':active_time' => 0, - ':create_time' => time(), - ':modify_time' => time(), - ':sub_time' => 0, - ':using_id' => $using_id, - ':exp' => 0, - )); - if(!$ret){ + $ret = $conn->execScript( + 'INSERT INTO equip(accountid, id, lv, active_time, sub_time, create_time, modify_time, using_id, exp) ' . + ' VALUES(:account_id, :id, 0, :active_time, :sub_time, :create_time, :modify_time, :using_id, :exp) ' . + ' ON DUPLICATE KEY UPDATE accountid=:account_id, id=:id, lv=0, active_time=:active_time, sub_time=:sub_time, modify_time=:modify_time, using_id=:using_id, exp=:exp;', + array( + ':account_id' => $accountid, + ':id' => $item_id, + ':active_time' => 0, + ':create_time' => time(), + ':modify_time' => time(), + ':sub_time' => 0, + ':using_id' => $using_id, + ':exp' => 0, + ) + ); + if (!$ret) { die(); return; } - array_push($item_list,array( + array_push($item_list, array( 'item_id' => $item_id, 'item_num' => 1, 'time' => 0, @@ -679,7 +815,8 @@ class AddReward { } - public function getRealIndexid($id, $accountid) { + public function getRealIndexid($id, $accountid) + { $e = $this->getEquip($id); if (!$e || $e['real_index_id'] == '' || !$e['real_index_id']) { return intval($id); @@ -687,4 +824,3 @@ class AddReward { return intval($e['real_index_id']); } } -?> diff --git a/webapp/classes/Privilege.php b/webapp/classes/Privilege.php index a857541..73c60b5 100644 --- a/webapp/classes/Privilege.php +++ b/webapp/classes/Privilege.php @@ -28,6 +28,14 @@ class Privilege return 0; //$this->getPrivilegePlus($account_id, 'battleplus'); } + public function getOfflineLimitPlus($account_id) { + return $this->getPrivilegePlus($account_id, 'offline_times'); + } + + public function getMedalLimitPlus($account_id) { + return $this->getPrivilegePlus($account_id, 'medal_limit_up'); + } + public function getCoinTimesPlus($account_id) { return $this->getPrivilegePlus($account_id, 'dailycoin_times'); @@ -46,11 +54,11 @@ class Privilege ':accountid' => $account_id, ) ); - + if (!$row || $row['vip_info'] == NULL) { return 0; } - + $plus = 0; $nowtime = time(); $vip_info = json_decode($row['vip_info'], true); diff --git a/webapp/controller/EquipController.class.php b/webapp/controller/EquipController.class.php index 4dfbc22..fc187e6 100644 --- a/webapp/controller/EquipController.class.php +++ b/webapp/controller/EquipController.class.php @@ -1008,23 +1008,42 @@ class EquipController{ phpcommon\sendError(ERR_USER_BASE + 3, '金币不足'); return; } - - $mar_array = $this->getExplode($e['promote_material']); - $mid = $mar_array[$key][0]; - $mnum = $mar_array[$key][1]; - $rbag = $conn->execQueryOne('SELECT num FROM bag WHERE accountid=:account_id AND id=:id;', - array( - ':account_id' => $account_id, - ':id' => $mid, - )); - - if (!$rbag || $rbag['num'] < $mnum) { - phpcommon\sendError(ERR_USER_BASE + 6, '材料不足'); + + $jinjieinfo = explode('|', $e['promote_material']); + if ($key >= count($jinjieinfo)) { + phpcommon\sendError(ERR_USER_BASE + 4, '已经满阶'); return; } + + $curjinjie = explode(';', $jinjieinfo[$key]); + $jinjieitems = array(); + foreach( $curjinjie as $jinjieitemstr) { + $mar_array = explode(':', $jinjieitemstr); + $mid = $mar_array[0]; + $mnum = $mar_array[1]; + $rbag = $conn->execQueryOne('SELECT num FROM bag WHERE accountid=:account_id AND id=:id;', + array( + ':account_id' => $account_id, + ':id' => $mid, + )); + + if (!$rbag || $rbag['num'] < $mnum) { + phpcommon\sendError(ERR_USER_BASE + 6, '材料不足'); + return; + } + + $jinjieitems[] = array( + "item_id" => $mid, + "item_num" => $mnum, + ); + } $this->subCoin(10001, $coin_num, $account_id); - $this->subCoin($mid, $mnum, $account_id); + foreach($jinjieitems as $jinjie_item) { + $mid = $jinjie_item['item_id']; + $mnum = $jinjie_item['item_num']; + $this->subCoin($mid, $mnum, $account_id); + } $active_time = time(); $sub_list = $this->getExplode($e['equip_upgradetime']); diff --git a/webapp/controller/RechargeActivity.trait.php b/webapp/controller/RechargeActivity.trait.php new file mode 100644 index 0000000..49c4ab6 --- /dev/null +++ b/webapp/controller/RechargeActivity.trait.php @@ -0,0 +1,452 @@ +getMysql($account_id); + if (!$conn) { + phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); + return; + } + + $rechargerow = $conn->execQueryOne( + 'SELECT * FROM recharge WHERE accountid=:accountid;', + array( + ':accountid' => $account_id + ) + ); + + $firstrecharge = ''; + $vipinfo = array(); + $dailypurchase = array(); + $daysecs = phpcommon\getdayseconds(time()); + if ($rechargerow) { + if ($rechargerow['first_data'] != null) { + $firstrecharge = $rechargerow['first_data']; + } + if ($rechargerow['vip_info'] != null && $rechargerow['vip_info'] != '') { + $vipinfo = json_decode($rechargerow['vip_info'], true); + foreach ($vipinfo as $key => $val) { + $vipinfo[$key]['award'] = $val['daily_time'] < $daysecs ? 0 : 1; + unset($vipinfo[$key]['daily_time']); + } + } + + if ($rechargerow['daily_purchase'] != null && $rechargerow['daily_purchase'] != '') { + $dailypurchase = json_decode($rechargerow['daily_purchase'], true); + $packtime = 0; + foreach ($dailypurchase as $key => $val) { + if ($val['id'] == 10 && $val['time'] > $daysecs) { + $packtime = $val['time']; + break; + } + } + + if ($packtime > 0) { + $shopconf = metatable\getShopGoodsConf(); + foreach ($shopconf as $itemconf) { + if ($itemconf['type'] != 2) { + continue; + } + + if ($itemconf['shop_id'] == 10) { + continue; + } + + $found = false; + foreach ($dailypurchase as $key => $val) { + if ($val['id'] == $itemconf['shop_id']) { + $found = true; + $dailypurchase[$key]['time'] = $packtime; + break; + } + } + + if (!$found) { + array_push($dailypurchase, array( + 'id' => $itemconf['shop_id'], + 'time' => $packtime, + )); + } + } + } + + $daily = array(); + foreach ($dailypurchase as $key => $val) { + if ($val['time'] < $daysecs) { + unset($dailypurchase[$key]); + } else { + array_push($daily, $val); + } + } + $dailypurchase = $daily; + } + } + + $activityconf = metatable\getRechargeActivityConf(); + $recharge_activity = array(); + $activity = array(); + if ($rechargerow['activity'] != null && $rechargerow['activity'] != '') { + $activity = json_decode($rechargerow['activity'], true); + } + $needupdate = false; + $time1 = ''; + $time2 = ''; + foreach ($activityconf as $key => $itemconf) { + $time1 = $itemconf['time1']; + $time2 = $itemconf['time2']; + if (time() < strtotime($itemconf['time1']) || time() > strtotime($itemconf['time2'])) { + continue; + } + + $found = false; + $itemarray = array(); + foreach ($activity as $itemkey => $item) { + if ($itemconf['shop_id'] == $item['id']) { + $found = true; + + switch ($itemconf['type']) { + case 1: //累积充值 + case 2: //累计消耗 + $itemarray = array( + 'id' => $item['id'], + 'cur' => $item['cur'], + 'target' => $item['target'], + 'award' => $item['time'] > 0 ? 1 : 0, + ); + break; + case 3: //每日累积充值 + $itemarray['id'] = $item['id']; + $itemarray['target'] = $item['target']; + if ($item['time'] < $daysecs) { + $itemarray['cur'] = 0; + $itemarray['award'] = 0; + $needupdate = true; + $activity[$itemkey]['cur'] = 0; + $activity[$itemkey]['award'] = 0; + } else { + $itemarray['cur'] = $item['cur']; + $itemarray['award'] = $item['award']; + } + break; + } + } + } + + if (!$found) { + $itemarray = array( + 'id' => $itemconf['shop_id'], + 'cur' => 0, + 'target' => $itemconf['target'], + 'award' => 0, + ); + } + if ( + $itemconf['type'] == 1 || + $itemconf['type'] == 3 + ) { + $itemarray['cur'] /= 10; + $itemarray['target'] /= 10; + } + array_push($recharge_activity, $itemarray); + } + + if ($needupdate) { + $conn->execScript( + 'UPDATE recharge SET activity=:activity, modify_time=:modify_time' . + ' WHERE accountid=:accountid;', + array( + ':accountid' => $account_id, + ':activity' => json_encode($activity), + ':modify_time' => time(), + ) + ); + } + + echo json_encode(array( + 'errcode' => 0, + 'errmsg' => '', + 'first_recharge' => $firstrecharge, + 'vip_info' => $vipinfo, + 'daily_purchase' => $dailypurchase, + 'recharge_activity' => $recharge_activity, + 'time1' => $time1, + 'time2' => $time2, + )); + } + + public function getVipDailyAward() + { + $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; + } + + $rechargerow = $conn->execQueryOne( + 'SELECT vip_info FROM recharge WHERE accountid=:accountid;', + array( + ':accountid' => $account_id + ) + ); + + if ($rechargerow['vip_info'] == null || $rechargerow['vip_info'] == '') { + phpcommon\sendError(ERR_USER_BASE + 1, '没月卡'); + return; + } + + $vipinfo = json_decode($rechargerow['vip_info'], true); + $item_list = array(); + $found = false; + $nowTime = time(); + foreach ($vipinfo as $key => $val) { + if ($val['id'] == $_REQUEST['id']) { + if ($val['expire'] > 0 && $val['expire'] < $nowTime) { + phpcommon\sendError(ERR_USER_BASE + 1, '月卡过期'); + return; + } + + if (phpcommon\getdayseconds($val['daily_time']) >= phpcommon\getdayseconds($nowTime)) { + phpcommon\sendError(ERR_USER_BASE + 1, '月卡奖励已领'); + return; + } + + $privilegecard_conf = metatable\getPrivilegeCardById($_REQUEST['id']); + if (!$privilegecard_conf) { + error_log('game2004api payNotify privilege card goods config error:' + json_encode($_REQUEST)); + echo json_encode(array( + 'errcode' => 4, + 'errmsg' => 'privilege card error' + )); + die(); + } + + $itemconf = metatable\getItemById($privilegecard_conf['item_id']); + if (!$itemconf) { + error_log('game2004api payNotify privilege card goods config error 2:' + json_encode($_REQUEST)); + echo json_encode(array( + 'errcode' => 4, + 'errmsg' => 'privilege card error 2' + )); + die(); + } + + $dropconf = $this->getDrop($itemconf['fuctionindex']); + if (!$dropconf) { + error_log('game2004api payNotify privilege card goods config error 3:' + json_encode($_REQUEST)); + echo json_encode(array( + 'errcode' => 4, + 'errmsg' => 'privilege card error 3' + )); + die(); + } + + $vipinfo[$key]['daily_time'] = $nowTime; + $ret = $conn->execScript( + 'UPDATE recharge SET vip_info=:vip_info, modify_time=:modify_time' . + ' WHERE accountid=:accountid;', + array( + ':accountid' => $account_id, + ':vip_info' => json_encode($vipinfo), + ':modify_time' => time(), + ) + ); + + if (!$ret) { + echo json_encode(array( + 'errcode' => 2, + 'errmsg' => '服务器内部错误' + )); + die(); + } + + $itemidlist = explode('|', $dropconf['item_id']); + $itemnumlist = explode('|', $dropconf['num']); + $addreward = new classes\AddReward(); + $all_item_list = array(); + foreach ($itemidlist as $key => $itemid) { + array_push($item_list, array( + 'item_id' => $itemid, + 'item_num' => $itemnumlist[$key], + 'time' => 0, + )); + $items = $addreward->addReward($itemid, $itemnumlist[$key], $account_id, 0, 0); + foreach ($items as $i) { + array_push($all_item_list, array( + 'item_id' => $i['item_id'], + 'item_num' => $i['item_num'], + 'time' => $i['time'], + )); + } + } + + $found = true; + + $coin_num = $addreward->getCoinNum($account_id); + $diamond_num = $addreward->getDiamondNum($account_id); + $adfree = $addreward->getAdfree($account_id); + echo json_encode(array( + 'errcode' => 0, + 'errmsg' => '', + 'coin_nums' => $coin_num, + 'diamond_nums' => $diamond_num, + 'adfree' => $adfree, + 'id' => $_REQUEST['id'], + 'item_list' => $item_list, + 'vip_info' => json_encode($vipinfo), + 'all_item_list' => $all_item_list, + )); + } + } + + if (!$found) { + phpcommon\sendError(ERR_USER_BASE + 1, '没月卡 2'); + return; + } + } + + public function getActivityAward() + { + $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; + } + + $rechargerow = $conn->execQueryOne( + 'SELECT activity FROM recharge WHERE accountid=:accountid;', + array( + ':accountid' => $account_id + ) + ); + + if ($rechargerow['activity'] == null || $rechargerow['activity'] == '') { + phpcommon\sendError(ERR_USER_BASE + 1, '没参与活动'); + return; + } + + $activity = json_decode($rechargerow['activity'], true); + $item_list = array(); + $found = false; + $nowTime = time(); + foreach ($activity as $key => $val) { + if ($val['id'] == $_REQUEST['id']) { + if ($val['cur'] < $val['target']) { + phpcommon\sendError(ERR_USER_BASE + 1, '没完成'); + return; + } + + $activity_conf = metatable\getRechargeActivityById($_REQUEST['id']); + if (!$activity_conf) { + error_log('game2004api payNotify recharge activity config error:' + json_encode($_REQUEST)); + echo json_encode(array( + 'errcode' => 4, + 'errmsg' => 'activity error' + )); + die(); + } + + if ($activity_conf['type'] == 3) { //每日充值活动 + if ($val['time'] < phpcommon\getdayseconds($nowTime) || $val['award'] != 0) { + phpcommon\sendError(ERR_USER_BASE + 1, '已领'); + return; + } + $activity[$key]['award'] = 1; + } else { + if ($val['time'] > 0) { + phpcommon\sendError(ERR_USER_BASE + 1, '已领'); + return; + } + $activity[$key]['time'] = $nowTime; + } + + $ret = $conn->execScript( + 'UPDATE recharge SET activity=:activity, modify_time=:modify_time' . + ' WHERE accountid=:accountid;', + array( + ':accountid' => $account_id, + ':activity' => json_encode($activity), + ':modify_time' => $nowTime, + ) + ); + + if (!$ret) { + echo json_encode(array( + 'errcode' => 2, + 'errmsg' => '服务器内部错误' + )); + die(); + } + + $itemidlist = explode('|', $activity_conf['item_id']); + $itemnumlist = explode('|', $activity_conf['item_num']); + $addreward = new classes\AddReward(); + $all_item_list = array(); + foreach ($itemidlist as $itemkey => $itemid) { + array_push($item_list, array( + 'item_id' => $itemid, + 'item_num' => $itemnumlist[$itemkey], + 'time' => 0, + )); + $items = $addreward->addReward($itemid, $itemnumlist[$itemkey], $account_id, 0, 0); + foreach ($items as $i) { + array_push($all_item_list, array( + 'item_id' => $i['item_id'], + 'item_num' => $i['item_num'], + 'time' => $i['time'], + )); + } + } + + foreach ($activity as $key => $val) { + $activity[$key]['award'] = $val['time'] > 0 ? 1 : 0; + unset($activity[$key]['time']); + } + + $found = true; + + $coin_num = $addreward->getCoinNum($account_id); + $diamond_num = $addreward->getDiamondNum($account_id); + $adfree = $addreward->getAdfree($account_id); + echo json_encode(array( + 'errcode' => 0, + 'errmsg' => '', + 'coin_nums' => $coin_num, + 'diamond_nums' => $diamond_num, + 'adfree' => $adfree, + 'id' => $_REQUEST['id'], + 'item_list' => $item_list, + 'recharge_activity' => json_encode($activity), + 'all_item_list' => $all_item_list, + )); + } + } + + if (!$found) { + phpcommon\sendError(ERR_USER_BASE + 1, '没活动 2'); + return; + } + } +} \ No newline at end of file diff --git a/webapp/controller/RechargeController.class.php b/webapp/controller/RechargeController.class.php index fd62e1a..d1c8a68 100644 --- a/webapp/controller/RechargeController.class.php +++ b/webapp/controller/RechargeController.class.php @@ -8,9 +8,11 @@ require_once 'metatable/shopGoods.php'; require_once 'metatable/privilegecard.php'; require_once 'metatable/rechargeActivity.php'; require_once 'metatable/item.php'; +require_once 'RechargeActivity.trait.php'; class RechargeController { + use RechargeActivity; protected function getRedis($key) { $redis_conf = getRedisConfig(crc32($key)); @@ -898,454 +900,6 @@ class RechargeController ); } - 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); - if (!$conn) { - phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); - return; - } - - $rechargerow = $conn->execQueryOne( - 'SELECT * FROM recharge WHERE accountid=:accountid;', - array( - ':accountid' => $account_id - ) - ); - - $firstrecharge = ''; - $vipinfo = array(); - $dailypurchase = array(); - $daysecs = phpcommon\getdayseconds(time()); - if ($rechargerow) { - if ($rechargerow['first_data'] != null) { - $firstrecharge = $rechargerow['first_data']; - } - if ($rechargerow['vip_info'] != null && $rechargerow['vip_info'] != '') { - $vipinfo = json_decode($rechargerow['vip_info'], true); - foreach ($vipinfo as $key => $val) { - $vipinfo[$key]['award'] = $val['daily_time'] < $daysecs ? 0 : 1; - unset($vipinfo[$key]['daily_time']); - } - } - - if ($rechargerow['daily_purchase'] != null && $rechargerow['daily_purchase'] != '') { - $dailypurchase = json_decode($rechargerow['daily_purchase'], true); - $packtime = 0; - foreach ($dailypurchase as $key => $val) { - if ($val['id'] == 10 && $val['time'] > $daysecs) { - $packtime = $val['time']; - break; - } - } - - if ($packtime > 0) { - $shopconf = metatable\getShopGoodsConf(); - foreach ($shopconf as $itemconf) { - if ($itemconf['type'] != 2) { - continue; - } - - if ($itemconf['shop_id'] == 10) { - continue; - } - - $found = false; - foreach ($dailypurchase as $key => $val) { - if ($val['id'] == $itemconf['shop_id']) { - $found = true; - $dailypurchase[$key]['time'] = $packtime; - break; - } - } - - if (!$found) { - array_push($dailypurchase, array( - 'id' => $itemconf['shop_id'], - 'time' => $packtime, - )); - } - } - } - - $daily = array(); - foreach ($dailypurchase as $key => $val) { - if ($val['time'] < $daysecs) { - unset($dailypurchase[$key]); - } else { - array_push($daily, $val); - } - } - $dailypurchase = $daily; - } - } - - $activityconf = metatable\getRechargeActivityConf(); - $recharge_activity = array(); - $activity = array(); - if ($rechargerow['activity'] != null && $rechargerow['activity'] != '') { - $activity = json_decode($rechargerow['activity'], true); - } - $needupdate = false; - $time1 = ''; - $time2 = ''; - foreach ($activityconf as $key => $itemconf) { - $time1 = $itemconf['time1']; - $time2 = $itemconf['time2']; - if (time() < strtotime($itemconf['time1']) || time() > strtotime($itemconf['time2'])) { - continue; - } - - $found = false; - $itemarray = array(); - foreach ($activity as $itemkey => $item) { - if ($itemconf['shop_id'] == $item['id']) { - $found = true; - - switch ($itemconf['type']) { - case 1: //累积充值 - case 2: //累计消耗 - $itemarray = array( - 'id' => $item['id'], - 'cur' => $item['cur'], - 'target' => $item['target'], - 'award' => $item['time'] > 0 ? 1 : 0, - ); - break; - case 3: //每日累积充值 - $itemarray['id'] = $item['id']; - $itemarray['target'] = $item['target']; - if ($item['time'] < $daysecs) { - $itemarray['cur'] = 0; - $itemarray['award'] = 0; - $needupdate = true; - $activity[$itemkey]['cur'] = 0; - $activity[$itemkey]['award'] = 0; - } else { - $itemarray['cur'] = $item['cur']; - $itemarray['award'] = $item['award']; - } - break; - } - } - } - - if (!$found) { - $itemarray = array( - 'id' => $itemconf['shop_id'], - 'cur' => 0, - 'target' => $itemconf['target'], - 'award' => 0, - ); - } - if ( - $itemconf['type'] == 1 || - $itemconf['type'] == 3 - ) { - $itemarray['cur'] /= 10; - $itemarray['target'] /= 10; - } - array_push($recharge_activity, $itemarray); - } - - if ($needupdate) { - $conn->execScript( - 'UPDATE recharge SET activity=:activity, modify_time=:modify_time' . - ' WHERE accountid=:accountid;', - array( - ':accountid' => $account_id, - ':activity' => json_encode($activity), - ':modify_time' => time(), - ) - ); - } - - echo json_encode(array( - 'errcode' => 0, - 'errmsg' => '', - 'first_recharge' => $firstrecharge, - 'vip_info' => $vipinfo, - 'daily_purchase' => $dailypurchase, - 'recharge_activity' => $recharge_activity, - 'time1' => $time1, - 'time2' => $time2, - )); - } - - public function getVipDailyAward() - { - $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; - } - - $rechargerow = $conn->execQueryOne( - 'SELECT vip_info FROM recharge WHERE accountid=:accountid;', - array( - ':accountid' => $account_id - ) - ); - - if ($rechargerow['vip_info'] == null || $rechargerow['vip_info'] == '') { - phpcommon\sendError(ERR_USER_BASE + 1, '没月卡'); - return; - } - - $vipinfo = json_decode($rechargerow['vip_info'], true); - $item_list = array(); - $found = false; - $nowTime = time(); - foreach ($vipinfo as $key => $val) { - if ($val['id'] == $_REQUEST['id']) { - if ($val['expire'] > 0 && $val['expire'] < $nowTime) { - phpcommon\sendError(ERR_USER_BASE + 1, '月卡过期'); - return; - } - - if (phpcommon\getdayseconds($val['daily_time']) >= phpcommon\getdayseconds($nowTime)) { - phpcommon\sendError(ERR_USER_BASE + 1, '月卡奖励已领'); - return; - } - - $privilegecard_conf = metatable\getPrivilegeCardById($_REQUEST['id']); - if (!$privilegecard_conf) { - error_log('game2004api payNotify privilege card goods config error:' + json_encode($_REQUEST)); - echo json_encode(array( - 'errcode' => 4, - 'errmsg' => 'privilege card error' - )); - die(); - } - - $itemconf = metatable\getItemById($privilegecard_conf['item_id']); - if (!$itemconf) { - error_log('game2004api payNotify privilege card goods config error 2:' + json_encode($_REQUEST)); - echo json_encode(array( - 'errcode' => 4, - 'errmsg' => 'privilege card error 2' - )); - die(); - } - - $dropconf = $this->getDrop($itemconf['fuctionindex']); - if (!$dropconf) { - error_log('game2004api payNotify privilege card goods config error 3:' + json_encode($_REQUEST)); - echo json_encode(array( - 'errcode' => 4, - 'errmsg' => 'privilege card error 3' - )); - die(); - } - - $vipinfo[$key]['daily_time'] = $nowTime; - $ret = $conn->execScript( - 'UPDATE recharge SET vip_info=:vip_info, modify_time=:modify_time' . - ' WHERE accountid=:accountid;', - array( - ':accountid' => $account_id, - ':vip_info' => json_encode($vipinfo), - ':modify_time' => time(), - ) - ); - - if (!$ret) { - echo json_encode(array( - 'errcode' => 2, - 'errmsg' => '服务器内部错误' - )); - die(); - } - - $itemidlist = explode('|', $dropconf['item_id']); - $itemnumlist = explode('|', $dropconf['num']); - $addreward = new classes\AddReward(); - $all_item_list = array(); - foreach ($itemidlist as $key => $itemid) { - array_push($item_list, array( - 'item_id' => $itemid, - 'item_num' => $itemnumlist[$key], - 'time' => 0, - )); - $items = $addreward->addReward($itemid, $itemnumlist[$key], $account_id, 0, 0); - foreach ($items as $i) { - array_push($all_item_list, array( - 'item_id' => $i['item_id'], - 'item_num' => $i['item_num'], - 'time' => $i['time'], - )); - } - } - - $found = true; - - $coin_num = $addreward->getCoinNum($account_id); - $diamond_num = $addreward->getDiamondNum($account_id); - $adfree = $addreward->getAdfree($account_id); - echo json_encode(array( - 'errcode' => 0, - 'errmsg' => '', - 'coin_nums' => $coin_num, - 'diamond_nums' => $diamond_num, - 'adfree' => $adfree, - 'id' => $_REQUEST['id'], - 'item_list' => $item_list, - 'vip_info' => json_encode($vipinfo), - 'all_item_list' => $all_item_list, - )); - } - } - - if (!$found) { - phpcommon\sendError(ERR_USER_BASE + 1, '没月卡 2'); - return; - } - } - - public function getActivityAward() - { - $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; - } - - $rechargerow = $conn->execQueryOne( - 'SELECT activity FROM recharge WHERE accountid=:accountid;', - array( - ':accountid' => $account_id - ) - ); - - if ($rechargerow['activity'] == null || $rechargerow['activity'] == '') { - phpcommon\sendError(ERR_USER_BASE + 1, '没参与活动'); - return; - } - - $activity = json_decode($rechargerow['activity'], true); - $item_list = array(); - $found = false; - $nowTime = time(); - foreach ($activity as $key => $val) { - if ($val['id'] == $_REQUEST['id']) { - if ($val['cur'] < $val['target']) { - phpcommon\sendError(ERR_USER_BASE + 1, '没完成'); - return; - } - - $activity_conf = metatable\getRechargeActivityById($_REQUEST['id']); - if (!$activity_conf) { - error_log('game2004api payNotify recharge activity config error:' + json_encode($_REQUEST)); - echo json_encode(array( - 'errcode' => 4, - 'errmsg' => 'activity error' - )); - die(); - } - - if ($activity_conf['type'] == 3) { //每日充值活动 - if ($val['time'] < phpcommon\getdayseconds($nowTime) || $val['award'] != 0) { - phpcommon\sendError(ERR_USER_BASE + 1, '已领'); - return; - } - $activity[$key]['award'] = 1; - } else { - if ($val['time'] > 0) { - phpcommon\sendError(ERR_USER_BASE + 1, '已领'); - return; - } - $activity[$key]['time'] = $nowTime; - } - - $ret = $conn->execScript( - 'UPDATE recharge SET activity=:activity, modify_time=:modify_time' . - ' WHERE accountid=:accountid;', - array( - ':accountid' => $account_id, - ':activity' => json_encode($activity), - ':modify_time' => $nowTime, - ) - ); - - if (!$ret) { - echo json_encode(array( - 'errcode' => 2, - 'errmsg' => '服务器内部错误' - )); - die(); - } - - $itemidlist = explode('|', $activity_conf['item_id']); - $itemnumlist = explode('|', $activity_conf['item_num']); - $addreward = new classes\AddReward(); - $all_item_list = array(); - foreach ($itemidlist as $itemkey => $itemid) { - array_push($item_list, array( - 'item_id' => $itemid, - 'item_num' => $itemnumlist[$itemkey], - 'time' => 0, - )); - $items = $addreward->addReward($itemid, $itemnumlist[$itemkey], $account_id, 0, 0); - foreach ($items as $i) { - array_push($all_item_list, array( - 'item_id' => $i['item_id'], - 'item_num' => $i['item_num'], - 'time' => $i['time'], - )); - } - } - - foreach ($activity as $key => $val) { - $activity[$key]['award'] = $val['time'] > 0 ? 1 : 0; - unset($activity[$key]['time']); - } - - $found = true; - - $coin_num = $addreward->getCoinNum($account_id); - $diamond_num = $addreward->getDiamondNum($account_id); - $adfree = $addreward->getAdfree($account_id); - echo json_encode(array( - 'errcode' => 0, - 'errmsg' => '', - 'coin_nums' => $coin_num, - 'diamond_nums' => $diamond_num, - 'adfree' => $adfree, - 'id' => $_REQUEST['id'], - 'item_list' => $item_list, - 'recharge_activity' => json_encode($activity), - 'all_item_list' => $all_item_list, - )); - } - } - - if (!$found) { - phpcommon\sendError(ERR_USER_BASE + 1, '没活动 2'); - return; - } - } - protected function getDrop($drop_id) { $drop_meta_table = require('../res/drop@drop.php'); diff --git a/webapp/controller/SoloController.class.php b/webapp/controller/SoloController.class.php new file mode 100644 index 0000000..31ada6a --- /dev/null +++ b/webapp/controller/SoloController.class.php @@ -0,0 +1,681 @@ + $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' => DBNAME_PREFIX . $mysql_conf['instance_id'] + )); + return $conn; + } + + protected function getGameLevelInfo($level) + { + $conf = require('../res/gamelevel@gamelevel.php'); + return array_key_exists($level, $conf) ? $conf[$level] : null; + } + + protected function getPlayerLevelInfo($level) + { + $conf = require('../res/playerlevel@playerlevel.php'); + return array_key_exists($level, $conf) ? $conf[$level] : null; + } + + public function soloInfo() + { + $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; + } + + $solorow = $conn->execQueryOne( + 'SELECT * FROM solo WHERE accountid=:accountid;', + array( + ':accountid' => $account_id + ) + ); + + $medals = 0; + $privilege = new classes\Privilege(); + $medalsgrowlimit = metatable\getParameterById(MEDAL_LIMIT) + $privilege->getMedalLimitPlus($account_id); + $nowtime = time(); + $lastredeem = $nowtime; + $level = 1; + $exp = 0; + $gamelevel = array( + 'curlevel' => 1, + 'curwave' => 0, + 'levelinfo' => array(), + ); + $offlinehours = 0; + if (!$solorow) { + $medals = $medalsgrowlimit; + $ret = $conn->execScript( + 'INSERT INTO solo(accountid, level, exp, medals, lastredeem, lastoffline, create_time, modify_time) ' . + ' VALUES(:account_id, 1, 0, :medals, :lastredeem, :lastoffline, :create_time, :modify_time) ' . + ' ON DUPLICATE KEY UPDATE accountid=:account_id, level=:level, exp=:exp, medals=:medals, lastredeem=:lastredeem, lastoffline=:lastoffline, modify_time=:modify_time;', + array( + ':account_id' => $account_id, + ':medals' => $medals, + ':lastredeem' => $lastredeem, + ':lastoffline' => $nowtime, + ':create_time' => $nowtime, + ':modify_time' => $nowtime + ) + ); + } else { + $medalsecs = intval(metatable\getParameterById(MEDAL_SECONDS)); + $lastredeem = $solorow['lastredeem']; + $medals = $solorow['medals']; + $lastoffline = $solorow['lastoffline']; + $updatedb = false; + $offlinehours = $solorow['offline']; + if ($solorow['medals'] < $medalsgrowlimit && $medalsecs + $solorow['lastredeem'] <= $nowtime) { //结算体力自然增长 + $addmedals = ($nowtime - $solorow['lastredeem']) / $medalsecs; + $lastredeem = $solorow['lastredeem'] + $addmedals * $medalsecs; + $medals = $addmedals + $solorow['medals']; + $updatedb = true; + } else { + $medals = $solorow['medals']; + $lastredeem = $solorow['lastredeem']; + } + + if ($lastoffline + 3600 <= $nowtime) { + $offlinehours += ($nowtime - $lastoffline) / 3600; + $offlinelimit = metatable\getParameterById(OFFLINE_LIMIT) + $privilege->getOfflineLimitPlus($account_id); + if ($offlinehours > $offlinelimit) { + $offlinehours = $offlinelimit; + } + + $updatedb = true; + } else if ($lastoffline + 1800 >= $nowtime) { + $updatedb = true; + } + + if ($updatedb) { + $ret = $conn->execScript( + 'UPDATE solo SET medals=:medals, lastredeem=:lastredeem, lastoffline=:lastoffline, offline=:offline, modify_time=:modify_time' . + ' WHERE accountid=:accountid;', + array( + ':accountid' => $account_id, + ':medals' => $medals, + ':lastredeem' => $lastredeem, + ':lastoffline' => $nowtime, + ':offline' => $offlinehours, + ':modify_time' => $nowtime + ) + ); + } + + $level = $solorow['level']; + $exp = $solorow['exp']; + if (!is_null($solorow['gamelevel']) && !empty($solorow['gamelevel'])) { + $gamelevel = json_decode($solorow['gamelevel']); + } + } + + $upexp = 0; + $lvinfo = $this->getPlayerLevelInfo($level); + if ($lvinfo) { + $upexp = $lvinfo['experience']; + } + + echo json_encode(array( + 'errcode' => 0, + 'errmsg' => '', + 'level' => $level, + 'exp' => $exp, + 'upexp' => $upexp, + 'medals' => $medals, + 'medal_limit' => $medalsgrowlimit, + 'lastredeem' => $lastredeem, + 'offlinehours' => $offlinehours, + 'gamelevel' => $gamelevel + )); + } + + public function offlineAward() + { + $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; + } + + $solorow = $conn->execQueryOne( + 'SELECT offline, gamelevel FROM solo WHERE accountid=:accountid;', + array( + ':accountid' => $account_id + ) + ); + + if (!$solorow || $solorow['offline'] < 1 || is_null($solorow['gamelevel']) || $solorow['gamelevel'] == '') { + phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家 2'); + return; + } + + $gamelevelinfo = json_decode($solorow['gamelevel'], true); + if ($gamelevelinfo['curlevel'] < 1) { + phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家 3'); + return; + } + + $levelcfg = $this->getGameLevelInfo($gamelevelinfo['curlevel']); + if (!$levelcfg) { + phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家 4'); + return; + } + + $offlinehours = $solorow['offline']; + $fixawards = explode($levelcfg['offlineitem_id'], '|'); + $item_list = array(); + $all_item_list = array(); + foreach ($fixawards as $fixitemstr) { + $itemstrs = explode($fixitemstr, ':'); + if (count($itemstrs) < 2) { + continue; + } + $item_list[] = array( + 'item_id' => $itemstrs[0], + 'item_num' => $itemstrs[1] * $offlinehours, + 'time' => 0 + ); + } + + $droplist = explode($levelcfg['offlineitem_id2'], '|'); + $dropawards = array(); + for ($i = 0; $i < $offlinehours; $i++) { + foreach ($droplist as $dropid) { + $dropitems = array(); + $dropitems = metatable\getDropAllListById($dropid, $dropitems); + foreach ($dropitems as $dropitem) { + $itemid = $dropitem['item_id']; + $itemnum = $dropitem['item_num']; + if ($itemid == 0 || $itemnum == 0) { + continue; + } + $dropawards[$itemid] += $itemnum; + } + } + } + + foreach ($dropawards as $itemid => $itemnum) { + $item_list[] = array( + 'item_id' => $itemid, + 'item_num' => $itemnum, + 'time' => 0 + ); + } + + $addreward = new classes\AddReward(); + foreach ($item_list as $itemaward) { + $items = $addreward->addReward($itemaward['item_id'], $itemaward['item_num'], $account_id, 0, 0); + foreach ($items as $i) { + array_push($all_item_list, array( + 'item_id' => $i['item_id'], + 'item_num' => $i['item_num'], + 'time' => 0, + )); + } + } + + $coin_num = $addreward->getCoinNum($account_id); + $diamond_num = $addreward->getDiamondNum($account_id); + $adfree = $addreward->getAdfree($account_id); + $medals = $addreward->getMedals($account_id); + + echo json_encode(array( + 'errcode' => 0, + 'errmsg' => '', + 'offlinehours' => $offlinehours, + 'coin_nums' => $coin_num, + 'diamond_nums' => $diamond_num, + 'adfree' => $adfree, + 'medals' => $medals, + 'item_list' => $item_list, + 'all_item_list' => $all_item_list, + )); + } + + // 战斗结算 + public function settle() + { + $this->levelaward(true); + } + + // 领取关卡宝箱 + public function complete() + { + $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; + } + + $solorow = $conn->execQueryOne( + 'SELECT * FROM solo WHERE accountid=:accountid;', + array( + ':accountid' => $account_id + ) + ); + + if (!$solorow) { + phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家 1'); + return; + } + + $gamelevel = array( + 'curlevel' => 1, + 'curwave' => 0, + 'levelinfo' => array(), + ); + if (!is_null($solorow['gamelevel']) && !empty($solorow['gamelevel'])) { + $gamelevel = json_decode($solorow['gamelevel'], true); + } + + $level = $_REQUEST['level']; + $wave = $_REQUEST['wave']; + if (!array_key_exists($level, $gamelevel['levelinfo'])) { + phpcommon\sendError(ERR_USER_BASE + 1, '没有这个奖励'); + return; + } + + $foundwave = false; + foreach ($gamelevel['levelinfo'][$level] as $key => $waveitem) { + if ($wave == $waveitem) { + $foundwave = true; + unset($gamelevel['levelinfo'][$level][$key]); + if (count($gamelevel['levelinfo'][$level]) == 0) { + unset($gamelevel['levelinfo'][$level]); + } + break; + } + } + + if (!$foundwave) { + phpcommon\sendError(ERR_USER_BASE + 1, '没有这个奖励 1'); + return; + } + + $levelcfg = $this->getGameLevelInfo($level); + if (!$levelcfg) { + phpcommon\sendError(ERR_USER_BASE + 1, '没有这个奖励 2'); + return; + } + + $wavearr = explode($levelcfg['completionwave'], '|'); + $foundwave = false; + $item_list = array(); + foreach ($wavearr as $key => $waveitem) { + if ($wave != $waveitem) { + continue; + } + + $waveawardarr = explode($levelcfg['completionreward'], '|'); + if (!array_key_exists($key, $waveawardarr)) { + break; + } + + $awardarr = explode($waveawardarr[$key], ';'); + foreach($awardarr as $awarditem) { + $strs = explode($awarditem, ':'); + if (count($strs) < 2) { + continue; + } + + $item_list[]=array( + 'item_id' => $strs[0], + 'item_num' => $strs[1], + "time" => 0, + ); + } + + $foundwave = true; + } + + if (!$foundwave) { + phpcommon\sendError(ERR_USER_BASE + 1, '没有这个奖励 3'); + return; + } + + $ret = $conn->execScript( + 'UPDATE solo SET gamelevel=:gamelevel, modify_time=:modify_time' . + ' WHERE accountid=:accountid;', + array( + ':accountid' => $account_id, + ':gamelevel' => json_encode($gamelevel), + ':modify_time' => time() + ) + ); + + if (!$ret) { + phpcommon\sendError(ERR_RETRY + 1, '系统繁忙'); + return; + } + + $addreward = new classes\AddReward(); + $all_item_list = array(); + foreach ($item_list as $itemaward) { + $items = $addreward->addReward($itemaward['item_id'], $itemaward['item_num'], $account_id, 0, 0); + foreach ($items as $i) { + array_push($all_item_list, array( + 'item_id' => $i['item_id'], + 'item_num' => $i['item_num'], + 'time' => 0, + )); + } + } + + $coin_num = $addreward->getCoinNum($account_id); + $diamond_num = $addreward->getDiamondNum($account_id); + $adfree = $addreward->getAdfree($account_id); + $medals = $addreward->getMedals($account_id); + + $response = array( + 'errcode' => 0, + 'errmsg' => '', + 'level' => $level, + 'wave' => $wave, + 'coin_nums' => $coin_num, + 'diamond_nums' => $diamond_num, + 'adfree' => $adfree, + 'medals' => $medals, + 'item_list' => $item_list, + 'all_item_list' => $all_item_list, + ); + + echo json_encode($response); + } + + // 扫荡结算 + public function sweep() + { + $this->levelaward(false); + } + + protected function levelaward($isbattle) + { + $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; + } + + $solorow = $conn->execQueryOne( + 'SELECT * FROM solo WHERE accountid=:accountid;', + array( + ':accountid' => $account_id + ) + ); + + if (!$solorow) { + phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家 1'); + return; + } + + $gamelevel = array( + 'curlevel' => 1, + 'curwave' => 0, + 'levelinfo' => array(), + ); + + if (!is_null($solorow['gamelevel']) && !empty($solorow['gamelevel'])) { + $gamelevel = json_encode($solorow['gamelevel'], true); + } + + $curlevelcfg = $this->getGameLevelInfo($gamelevel['curlevel']); + if (!$curlevelcfg) { + phpcommon\sendError(ERR_USER_BASE + 1, '关卡未通过'); + return; + } + + $curmonsterwaves = explode($curlevelcfg['monsterlist_id'], '|'); + $curfinished = $gamelevel['curwave'] > 0 && $gamelevel['curwave'] == count($curmonsterwaves); + + $level = $_REQUEST['level']; + + if ($isbattle) { + if ((!$curfinished && $level > $gamelevel['curlevel']) || + ($curfinished && $level > $gamelevel['curlevel'] + 1) + ) { + phpcommon\sendError(ERR_USER_BASE + 1, '关卡未通过 1'); + return; + } + } else { + if ((!$curfinished && $level >= $gamelevel['curlevel']) || + ($curfinished && $level > $gamelevel['curlevel']) + ) { + phpcommon\sendError(ERR_USER_BASE + 1, '关卡未通过 2'); + return; + } + } + + $reqlevelcfg = $this->getGameLevelInfo($level); + if (!$reqlevelcfg) { + phpcommon\sendError(ERR_USER_BASE + 1, '关卡未通过 3'); + return; + } + + if ($reqlevelcfg['medal_cost'] > $solorow['medals']) { + phpcommon\sendError(ERR_USER_BASE + 2, '体力不足'); + return; + } + + $reqmonsterwaves = explode($reqlevelcfg['monsterlist_id'], '|'); + $reqfinished = $isbattle ? ($_REQUEST['wave'] > 0 && $_REQUEST['wave'] == count($reqmonsterwaves)) : true; + + $item_list = array(); + // fixed award + $fixedawards = explode($reqlevelcfg['fixedreward'], '|'); + foreach ($fixedawards as $fixitem) { + $itemstrs = explode($fixitem, '|'); + if (count($itemstrs) < 2) { + continue; + } + $item_list[] = array( + "item_id" => $itemstrs[0], + "item_num" => $itemstrs[1], + "time" => 0, + ); + } + + // level finished award + if ($reqfinished) { + $finishedawards = explode($reqlevelcfg['winreward'], '|'); + foreach ($finishedawards as $finishitem) { + $itemstrs = explode($finishitem, '|'); + if (count($itemstrs) < 2) { + continue; + } + $item_list[] = array( + "item_id" => $itemstrs[0], + "item_num" => $itemstrs[1], + "time" => 0, + ); + } + } + + if ($isbattle) { + // level box award + $wave = $_REQUEST['wave']; + if ($curfinished && $level == $gamelevel['curlevel'] + 1) { + $newwaves = array(); + $completewaves = explode($reqlevelcfg['completionwave'], '|'); + foreach ($completewaves as $waveitem) { + if ($wave >= $waveitem) { + $newwaves[] = $waveitem; + } + } + $gamelevel['levelinfo'][$level] = $newwaves; + $gamelevel['curlevel'] = $level; + $gamelevel['curwave'] = $wave; + } else if (!$curfinished && $level == $gamelevel['curlevel'] && $wave > $gamelevel['curwave']) { + if ($gamelevel['curwave'] == 0) { + $gamelevel['levelinfo'][$level] = array(); + } + $completewaves = explode($reqlevelcfg['completionwave'], '|'); + foreach ($completewaves as $waveitem) { + if ($wave >= $waveitem && $waveitem > $gamelevel['curwave']) { + $gamelevel['levelinfo'][$level][] = $waveitem; + } + } + + $gamelevel['curwave'] = $wave; + } + } + + // cost medals, add exp + $curexp = $solorow['exp'] + $reqlevelcfg['medal_cost']; + $curlv = $solorow['level']; + $curlvcfg = $this->getPlayerLevelInfo($curlv); + $uplv_item_list = array(); + while ($curlvcfg && $curlvcfg['experience'] > 0 && $curexp >= $curlvcfg['experience']) { + $curexp -= $curlvcfg['experience']; + $curlv++; + $curlvcfg = $this->getPlayerLevelInfo($curlv); + if ($curlvcfg) { + $uplvawards = explode($curlvcfg['level_reward'], '|'); + foreach ($uplvawards as $uplvitem) { + $itemstrs = explode($uplvitem, '|'); + if (count($itemstrs) < 2) { + continue; + } + $uplv_item_list[] = array( + "item_id" => $itemstrs[0], + "item_num" => $itemstrs[1], + "time" => 0, + ); + } + } + } + + $curmedals = $solorow['medals'] - $reqlevelcfg['medal_cost']; + $lastredeem = $solorow['lastredeem']; + $privilege = new classes\Privilege(); + $medalsgrowlimit = metatable\getParameterById(MEDAL_LIMIT) + $privilege->getMedalLimitPlus($account_id); + if ($solorow['medals'] >= $medalsgrowlimit && $curmedals < $medalsgrowlimit) { + $lastredeem = time(); + } + + $ret = $conn->execScript( + 'UPDATE solo SET medals=:medals, lastredeem=:lastredeem, level=:level, exp=:exp, gamelevel=:gamelevel, modify_time=:modify_time' . + ' WHERE accountid=:accountid;', + array( + ':accountid' => $account_id, + ':medals' => $curmedals, + ':lastredeem' => $lastredeem, + ':level' => $curlv, + ':exp' => $curexp, + ':gamelevel' => json_encode($gamelevel), + ':modify_time' => time() + ) + ); + + if (!$ret) { + phpcommon\sendError(ERR_RETRY + 1, '系统繁忙'); + return; + } + + $addreward = new classes\AddReward(); + $all_item_list = array(); + foreach ($item_list as $itemaward) { + $items = $addreward->addReward($itemaward['item_id'], $itemaward['item_num'], $account_id, 0, 0); + foreach ($items as $i) { + array_push($all_item_list, array( + 'item_id' => $i['item_id'], + 'item_num' => $i['item_num'], + 'time' => 0, + )); + } + } + + $uplv_all_item_list = array(); + foreach ($uplv_item_list as $itemaward) { + $items = $addreward->addReward($itemaward['item_id'], $itemaward['item_num'], $account_id, 0, 0); + foreach ($items as $i) { + array_push($uplv_all_item_list, array( + 'item_id' => $i['item_id'], + 'item_num' => $i['item_num'], + 'time' => 0, + )); + } + } + + $coin_num = $addreward->getCoinNum($account_id); + $diamond_num = $addreward->getDiamondNum($account_id); + $adfree = $addreward->getAdfree($account_id); + $medals = $addreward->getMedals($account_id); + + $response = array( + 'errcode' => 0, + 'errmsg' => '', + 'level' => $level, + 'coin_nums' => $coin_num, + 'diamond_nums' => $diamond_num, + 'adfree' => $adfree, + 'medals' => $medals, + 'item_list' => $item_list, + 'all_item_list' => $all_item_list, + 'playerlvup' => array( + 'item_list' => $uplv_item_list, + 'all_item_list' => $uplv_all_item_list, + ) + ); + if ($isbattle) { + $response['wave'] = $_REQUEST['wave']; + } + echo json_encode($response); + } +} diff --git a/webapp/metatable/parameter.php b/webapp/metatable/parameter.php index e1a88a9..ecbfe19 100644 --- a/webapp/metatable/parameter.php +++ b/webapp/metatable/parameter.php @@ -12,7 +12,7 @@ function getParameterConf() function getParameterById($param_id) { $conf = getParameterConf(); - $parameter_id = (int)$parameter_id; + $parameter_id = (int)$param_id; return array_key_exists($parameter_id, $conf) ? $conf[$parameter_id] : null; }