game2005api/webapp/classes/RechargeActInfo.php
2020-12-22 19:23:08 +08:00

763 lines
28 KiB
PHP

<?php
namespace classes;
require_once 'metatable/item.php';
require_once 'metatable/drop.php';
require_once 'metatable/parameter.php';
require_once 'metatable/activityplus.php';
require_once 'metatable/shop.php';
/* error_log('require addreeward.php1');
if (!class_exists('classes/AddReward111')) {
error_log('require addreeward.php');
require 'classes/AddReward.php';
}
*/
use phpcommon;
use metatable;
class RechargeActInfo {
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 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 getVip($vip_id)
{
$vip_meta_table = require('../res/vip@vip.php');
$vip_meta = getVipConfig($vip_meta_table, $vip_id);
$vip = array(
'level' => $vip_meta['level'],
'require' => $vip_meta['require'],
'reward' => $vip_meta['reward'],
'dailyreward' => $vip_meta['weekreward'],
'vipicon' => $vip_meta['vipicon'],
'viplist' => $vip_meta['viplist'],
'vipcolor' => $vip_meta['color'],
);
return $vip;
}
protected function isVipCondition($act, $account_id)
{
$vip_level = 0;
$conn = $this->getMysql($account_id);
$row = $conn->execQueryOne('SELECT sum_coin FROM user WHERE accountid=:accountid;',
array(
':accountid' => $account_id,
));
$vip_meta_table = require('../res/vip@vip.php');
for ($i = 0; $i < count($vip_meta_table); $i++) {
$vip_status = 0;
$vip_today_status = 0;
$vip = $this->getVip($i);
if ($row['sum_coin'] >= $vip['require']) {
$vip_level = $vip['level'];
}
}
if (!empty($act['vip']) && $act['vip'] > $vip_level) {
return false;
}
return true;
}
public function getActSingleInfo($type, $info_list, $rmb, $account_id)
{
$id_list = metatable\getActPlusInfo($type);
$num = 0;
if (empty($info_list) || !$info_list) {
$info_list = array();
foreach ($id_list as $i) {
$act = metatable\getActPlusById($i['id']);
if (!$act) {
return null;
}
if ($this->isVipCondition($act, $account_id)) {
$status = 0;
if ($i['id'] == 1) {
$status = 1;
}
$reward = array();
$reward = $this->actSingleList($act['condition'], $act['reward']);
array_push($info_list, array(
'id' => $i['id'],
'idx' => $num,
'reward' => $reward,
'status' => $status,
'time' => phpcommon\getNowTime(),
'act' => $act,
));
} else {
array_push($info_list, array());
}
$num++;
}
} else {
$id = 1;
foreach ($id_list as $i) {
$status = 0;
$act = metatable\getActPlusById($i['id']);
if (!$act) {
return null;
}
if (empty($info_list[$num]) || !$info_list[$num]) {
if ($this->isVipCondition($act, $account_id)) {
$reward = array();
$reward = $this->actSingleList($act['condition'], $act['reward']);
if ($i['id'] == 1) {
$status = 1;
}
array_push($info_list, array(
'id' => $i['id'],
'idx' => $num,
'reward' => $reward,
'status' => $status,
'time' => phpcommon\getNowTime(),
'act' => $act,
));
}
} else {
if ($id == $info_list[$num]['id']
&& $info_list[$num]['status'] == 0
&& floor((phpcommon\getdayseconds(phpcommon\getNowTime()) - phpcommon\getdayseconds($info_list[$num]['time'])) / (3600 * 24)) >= $act['open']) {
$info_list[$num]['status'] = 1;
}
if ($info_list[$num]['status'] == 3) {
$id = $i['id'] + 1;
}
}
$num++;
}
}
return $info_list;
}
public function getActSumInfo($type, $info_list, $rmb, $account_id)
{
$id_list = metatable\getActPlusInfo($type);
if (empty($info_list) || !$info_list) {
$info_list = $this->getDrawActList($type, $account_id);
} else {
$num = 0;
foreach ($id_list as $i) {
$act = metatable\getActPlusById($i['id']);
if (!$act) {
return null;
}
if (phpcommon\getNowTime() < strtotime($act['time1']) || phpcommon\getNowTime() > strtotime($act['time2'])) {
$info_list[$num] = array();
} else {
if (empty($info_list[$num]) || !$info_list[$num]) {
if ($this->isVipCondition($act, $account_id)) {
$reward = $this->getItemList($act['reward']);
$temp_list = array(
'id' => $i['id'],
'idx' => $num,
'condition' => $act['condition'],
'conditionid' => 10003,
'reward' => $reward,
'act' => $act,
);
$info_list[$num] = $temp_list;
}
}
}
$num++;
}
}
return $info_list;
}
public function getActQuestInfo($type, $info_list, $rmb, $account_id)
{
$id_list = metatable\getActPlusInfo($type);
$num = 0;
if (empty($info_list) || !$info_list) {
$info_list = array();
foreach ($id_list as $i) {
$act = metatable\getActPlusById($i['id']);
if (!$act) {
return null;
}
if (phpcommon\getNowTime() < strtotime($act['time1']) || phpcommon\getNowTime() > strtotime($act['time2'])) {
array_push($info_list, array());
$num++;
continue;
}
if ($this->isVipCondition($act, $account_id)) {
$reward = array();
$quest_list = $this->actQuestList($act['condition']);
$reward = $this->actQuestRewardList($act['reward']);
array_push($info_list, array(
'id' => $i['id'],
'idx' => $num,
'quest_list' => $quest_list,
'reward' => $reward,
'time' => phpcommon\getNowTime(),
'act' => $act,
));
} else {
array_push($info_list, array());
}
$num++;
}
} else {
foreach ($id_list as $i) {
$act = metatable\getActPlusById($i['id']);
if (!$act) {
return null;
}
if (phpcommon\getNowTime() < strtotime($act['time1']) || phpcommon\getNowTime() > strtotime($act['time2'])) {
if (!empty($info_list[$num]) && $info_list[$num]) {
$info_list[$num] = array();
}
} else {
if (empty($info_list[$num]) || !$info_list[$num]) {
if ($this->isVipCondition($act, $account_id)) {
$reward = array();
$quest_list = $this->actQuestList($act['condition']);
$reward = $this->actQuestRewardList($act['reward']);
$temp_list = array(
'id' => $i['id'],
'idx' => $num,
'quest_list' => $quest_list,
'reward' => $reward,
'time' => phpcommon\getNowTime(),
'act' => $act,
);
$info_list[$num] = $temp_list;
}
} else {
if (phpcommon\getdayseconds(phpcommon\getNowTime()) - phpcommon\getdayseconds($info_list[$num]['time']) > 0) {
if ($act['isreset'] == 1) {
$quest_list = $this->actQuestList($act['condition']);
$info_list[$num]['quest_list'] = $quest_list;
} else {
foreach ($info_list[$num]['quest_list'] as &$us) {
if ($us['id'] != 15 || $us['status'] != 0) {
continue;
}
$us['num'] = $us['num'] + 1;
if ($us['num'] >= $us['condition']) {
$us['status'] = 1;
}
break;
}
}
$info_list[$num]['time'] = phpcommon\getNowTime();
}
}
}
$num++;
}
}
return $info_list;
}
public function getActShopInfo($type, $info_list, $rmb, $account_id)
{
$id_list = metatable\getActPlusInfo($type);
$num = 0;
if (empty($info_list) || !$info_list) {
$info_list = array();
foreach ($id_list as $i) {
$act = metatable\getActPlusById($i['id']);
if (!$act) {
return null;
}
if (phpcommon\getNowTime() < strtotime($act['time1']) || phpcommon\getNowTime() > strtotime($act['time2'])) {
array_push($info_list, array());
$num++;
continue;
}
if ($this->isVipCondition($act, $account_id)) {
$reward = array();
$shop_info = $this->getShopListInfo($act['condition']);
array_push($info_list, array(
'id' => $i['id'],
'idx' => $num,
'reward' => $shop_info,
'time' => phpcommon\getNowTime(),
'isopen' => 0,
'shop_type' => $act['type'],
'act' => $act,
));
} else {
array_push($info_list, array());
}
$num++;
}
} else {
foreach ($id_list as $i) {
$act = metatable\getActPlusById($i['id']);
if (!$act) {
return null;
}
if (isset($info_list[$num]) && !empty($info_list[$num])) {
if ($info_list[$num]['shop_type'] == 1) {
if ($info_list[$num]['isopen'] == 1) {
if (floor((phpcommon\getNowTime() - phpcommon\getdayseconds($info_list[$num]['time'])) / (3600 * 24)) >= $act['time3']) {
$info_list[$num]['isopen'] = 0;
}
} else {
if (floor((phpcommon\getNowTime() - phpcommon\getdayseconds($info_list[$num]['time'])) / (3600 * 24)) >= $act['open']) {
$info_list[$num]['isopen'] = 1;
}
}
} else {
if (phpcommon\getNowTime() < strtotime($act['time1']) || phpcommon\getNowTime() > strtotime($act['time2'])) {
$info_list[$num]['isopen'] = 0;
} else {
$info_list[$num]['isopen'] = 1;
}
}
if ($info_list[$num]['reward']['isrefresh'] == 1) {
$info_list[$num]['reward'] = $this->getShopListInfo($act['condition']);
}
}
$num++;
}
}
return $info_list;
}
protected function getShopListInfo($id)
{
$shop_list = array();
$shop_conf = metatable\getShopById($id);
if (!$shop_conf) {
return array();
}
$act_shop_list = metatable\randGoods($shop_conf, $shop_list);
$act_list = array(
'id' => $shop_conf['shop_id'],
'isdorefresh' => $shop_conf['isdorefresh'],
'hasrefreshnum' => 0,
'refreshnum' => $shop_conf['refreshnum'],
'shop_list' => $act_shop_list,
'isrefresh' => $shop_conf['isrefresh'],
);
return $act_list;
}
public function getActDressInfo($type, $info_list, $rmb)
{}
public function getActDiscountInfo($type, $info_list, $rmb, $account_id)
{
$id_list = metatable\getActPlusInfo($type);
$num = 0;
if (empty($info_list) || !$info_list) {
$info_list = array();
foreach ($id_list as $i) {
$act = metatable\getActPlusById($i['id']);
if (!$act) {
return null;
}
if (phpcommon\getNowTime() < strtotime($act['time1']) || phpcommon\getNowTime() > strtotime($act['time2'])) {
array_push($info_list, array());
$num++;
continue;
}
if ($this->isVipCondition($act, $account_id)) {
$reward = array();
$shop_conf = metatable\getShopById($act['condition']);
if (!$shop_conf) {
return null;
}
$sum_list = metatable\shopGoodsList($shop_conf);
$reward = $this->randDiscount($sum_list, 0);
array_push($info_list, array(
'id' => $i['id'],
'idx' => $num,
'sum_list' => $sum_list,
'reward' => $reward,
'act' => $act,
));
} else {
array_push($info_list, array());
}
$num++;
}
} else {
foreach ($id_list as $i) {
$act = metatable\getActPlusById($i['id']);
if (!$act) {
return null;
}
if (phpcommon\getNowTime() < strtotime($act['time1']) || phpcommon\getNowTime() > strtotime($act['time2'])) {
$info_list[$num]['reward'] = array();
} else {
if (empty($info_list[$num]['reward'])) {
$reward = $this->randDiscount($info_list[$num]['sum_list'], 0);
$info_list[$num]['reward'] = $reward;
}
}
$num++;
}
}
return $info_list;
}
public function getActDrawInfo($type, $info_list, $rmb, $account_id)
{
$id_list = metatable\getActPlusInfo($type);
if (empty($info_list) || !$info_list) {
$info_list = $this->getDrawActList($type, $account_id);
} else {
$num = 0;
foreach ($id_list as $i) {
$act = metatable\getActPlusById($i['id']);
if (!$act) {
return null;
}
if (phpcommon\getNowTime() < strtotime($act['time1']) || phpcommon\getNowTime() > strtotime($act['time2'])) {
$info_list[$num] = array();
} else {
if (empty($info_list[$num]) || !$info_list[$num]) {
if ($this->isVipCondition($act, $account_id)) {
$reward = $this->getItemList($act['reward']);
$temp_list = array(
'id' => $i['id'],
'idx' => $num,
'condition' => $act['condition'],
'conditionid' => 10003,
'reward' => $reward,
'act' => $act,
);
$info_list[$num] = $temp_list;
}
}
}
$num++;
}
}
return $info_list;
}
public function getActTableInfo($type, $info_list, $rmb, $account_id)
{
$id_list = metatable\getActPlusInfo($type);
if (empty($info_list) || !$info_list) {
$info_list = $this->getDrawActList($type, $account_id);
} else {
$num = 0;
foreach ($id_list as $i) {
$act = metatable\getActPlusById($i['id']);
if (!$act) {
return null;
}
if (phpcommon\getNowTime() < strtotime($act['time1']) || phpcommon\getNowTime() > strtotime($act['time2'])) {
$info_list[$num] = array();
} else {
if (empty($info_list[$num]) || !$info_list[$num]) {
if ($this->isVipCondition($act, $account_id)) {
$reward = $this->getItemList($act['reward']);
$temp_list = array(
'id' => $i['id'],
'idx' => $num,
'condition' => $act['condition'],
'conditionid' => 10003,
'reward' => $reward,
'act' => $act,
);
$info_list[$num] = $temp_list;
}
}
}
$num++;
}
}
return $info_list;
}
public function getActDailyInfo($type, $info_list, $rmb, $account_id)
{
$id_list = metatable\getActPlusInfo($type);
if (empty($info_list) || !$info_list) {
$info_list = $this->getActDailyList($type);
} else {
$num = 0;
$flag = 0;
foreach ($id_list as $i) {
$act = metatable\getActPlusById($i['id']);
if (!$act) {
return null;
}
foreach ($info_list as &$in) {
$n = 0;
if (isset($in['forever']) && $in['forever'] != 1 && $in['forever'] != 2) {
continue;
}
foreach ($in['daily_list'] as &$key) {
if ($flag != 0) {
if ($n == 0) {
$key['dprice'] = 0;
} else {
$key['dprice'] = $key['dprice'] - $flag;
}
}
if ($key['status'] == 1) {
if (!isset($in['forever'])) {
continue;
}
if (($in['forever'] == 2 && $n == 1) ||
($in['forever'] == 1 && $n == 0)) {
if (phpcommon\getNowTime() > $key['buytime'] + $key['day'] * 3600 * 24) {
$flag = $flag + $key['condition'];
$key['status'] = 0;
$key['extra_status'] = 0;
$key['day'] = 0;
$in['forever'] = 0;
$addreward = new Addreward();
$addreward->updaterechargelv($account_id, 0, 0);
} else {
if (phpcommon\getdayseconds(phpcommon\getNowTime()) - phpcommon\getdayseconds($key['time']) > 0) {
$key['extra_status'] = 1;
$key['day'] = $key['day'] - (phpcommon\getdayseconds(phpcommon\getNowTime()) - phpcommon\getdayseconds($key['buytime'])) / 3600 / 24;
$key['time'] = phpcommon\getNowTime();
}
}
}
}
$n++;
}
}
$num++;
}
}
return $info_list;
}
protected function getDrawActList($type, $account_id) {
$id_list = metatable\getActPlusInfo($type);
$info_list = array();
$num = 0;
foreach ($id_list as $i) {
$act = metatable\getActPlusById($i['id']);
if (!$act) {
return null;
}
if (phpcommon\getNowTime() < strtotime($act['time1']) || phpcommon\getNowTime() > strtotime($act['time2'])) {
array_push($info_list, array());
$num++;
continue;
}
if ($this->isVipCondition($act, $account_id)) {
$reward = $this->getItemList($act['reward']);
array_push($info_list, array(
'id' => $i['id'],
'idx' => $num,
'condition' => $act['condition'],
'conditionid' => 10003,
'reward' => $reward,
'act' => $act,
));
} else {
array_push($info_list, array());
}
$num++;
}
return $info_list;
}
protected function getItemList($id) {
$item_conf = metatable\getItemById($id);
$item_list = array();
if (!$item_conf) {
return $item_list;
}
$item_list = metatable\getDropInfoById($item_conf['fuctionindex']);
return $item_list;
}
public function randDiscount($sum_list, $reward_id)
{
$num = 1;
$goods = array();
$key = 0;
foreach ($sum_list as $sum) {
if ($sum['id'] == $reward_id) {
break;
}
$key++;
}
array_splice($sum_list, $key, 1);
for ($i = 0; $i < $num; ++$i) {
$rand_space = 0;
foreach ($sum_list as $value) {
$rand_space += $value['weight'];
}
if ($rand_space <= 0) {
break;
}
$rnd_val = rand(0, $rand_space);
$curr_val = 0;
for ($ii = 0; $ii < count($sum_list); ++$ii) {
$curr_val += $sum_list[$ii]['weight'];
if ($rnd_val <= $curr_val) {
array_push($goods, array(
'id' => $sum_list[$ii]['id'],
'buy' => $sum_list[$ii]['buy'],
'price' => $sum_list[$ii]['price'],
'status' => 0,
'isdiscount' => $sum_list[$ii]['isdiscount'],
'dis_num' => $sum_list[$ii]['dis_num'],
'yuanjia' => $sum_list[$ii]['price'],
));
break;
}
}
}
return $goods;
}
protected function actQuestList($quest)
{
$quest_conf = $this->getExplode($quest);
$quest_list = array();
foreach ($quest_conf as $q) {
$status = 0;
if ($q[0] == 1) {
$status = 1;
}
$num = 0;
if ($q[0] == 15) {
$num++;
if ($num >= $q[1]) {
$status = 1;
}
}
array_push($quest_list, array(
'id' => $q[0],
'num' => $num,
'condition' => $q[1],
'status' => $status,
));
}
return $quest_list;
}
protected function actQuestRewardList($quest)
{
$quest_conf = $this->getExplode($quest);
$quest_list = array();
foreach ($quest_conf as $q) {
array_push($quest_list, array(
'item_id' => $q[0],
'item_num' => $q[1],
'time' => $q[2],
));
}
return $quest_list;
}
protected function actSingleList($condition, $reward)
{
$cond_conf = explode('|', $condition);
$reward_conf = explode('|', $reward);
$single_list = array();
$num = 0;
foreach ($cond_conf as $c) {
array_push($single_list, array(
'condition' => $c,
'reward_id' => $reward_conf[$num],
'status' => 0,
));
$num++;
}
return $single_list;
}
protected function getExtraItemList($id) {
$item_conf = metatable\getItemById($id);
$item_list = array();
if (!$item_conf) {
return $item_list;
}
$item_str = $item_conf['buy_reward'];
if ($item_str && $item_str != '') {
$it_arr = $this->getExplode($item_str);
foreach ($it_arr as $i) {
array_push($item_list, array(
'item_id' => $i[0],
'item_num' => $i[1],
'time' => $i[2],
));
}
}
return $item_list;
}
protected function getActDailyList($type)
{
$info_list = array();
$id_list = metatable\getActPlusInfo($type);
$num = 0;
foreach ($id_list as $i) {
$act = metatable\getActPlusById($i['id']);
if (!$act) {
return null;
}
$cond_conf = explode('|', $act['condition']);
$reward_conf = explode('|', $act['reward']);
$time_conf = explode('|', $act['time3']);
$daily_list = array();
$n = 0;
foreach ($cond_conf as $c) {
$reward = $this->getItemList($reward_conf[$n]);
$extra = $this->getExtraItemList($reward_conf[$n]);
array_push($daily_list, array(
'condition' => $c,
'reward' => $reward,
'reward_id' => $reward_conf[$n],
'time_long' => $time_conf[$n],
'time' => phpcommon\getNowTime(),
'status' => 0,
'buytime' => phpcommon\getNowTime(),
'dprice' => 0,
'extra' => $extra,
'day' => 0,
'extra_status' => 0,
));
$n++;
}
array_push($info_list, array(
'id' => $i['id'],
'idx' => $num,
'daily_list' => $daily_list,
'forever' => 0,
'act' => $act,
));
$num++;
}
return $info_list;
}
}
?>