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