function actionSendMsgToAwardUsers() { $uid_secs = self::getParam('uid_secs'); $content = self::getParam('content'); $desc = self::getParam('desc'); $items = self::getParam('items'); $task_num = self::getParam('num'); error_log("====接受到奖励信息==" . json_encode($uid_secs)); if (!$uid_secs) { return; } foreach ((array) $items as $value) { $tag = $value['tag']; $num = intval($value['num']); if ($tag == 'gem' && $num > 100000) { echo "error, 元宝不能大于100000"; exit; } } $key = uniqid(); $msg = array('key' => $key, 'time' => app()->now, 'content' => $content, 'type' => 'system'); //福利号总服务器地址 $all_config = (include_once ROOT . "/admin/view/public_const_config.php"); //设置作废福利号接口 $server_url = $all_config['server_api_url'] . "?action=setRepeal&mod=admin"; $DEBUG = true; foreach ((array) $uid_secs as $uid => $sec) { //if( $uid != 3879133 )continue;//temp //error_log("send[$uid][$sec]"); //check 是否合服 改变UID $sec_config = getApp()->getSectionConfig($sec); if (isset($sec_config['merge'])) { $uid = "{$sec}_{$uid}"; $sec = $sec_config['merge']; } if ($DEBUG) { error_log("开始发送元宝:{$uid}--{$sec}"); } $player = new model_Player($uid, $sec); $player->getFields(array('level', 'test_status', 'login_t', 'gem')); $level = $player->numberGet("base", "level"); $gem = $player->objectGet("base", "gem"); $login = $player->objectGet("base", "login_t"); //只执行一次 执行一次没有句号的描述 就可以将大于20w的置为20w $bool = $content == "鉴于掌门对武林做出了卓越贡献,特此奖励掌门一些物件,方便行走江湖,还望掌门笑纳" ? true : false; if ($bool && $gem > 200000) { //当前元宝大于20w 且 不是单次发送 将该玩家元宝置为20w 不给发此次元宝 error_log("change_gem:uid:{$uid},{$sec},gem:{$gem}"); $player->numberPut('base', 'gem', 200000); $player->commit(); if ($DEBUG) { error_log("error.20w"); } continue; } if ($task_num != 1 && $gem > 50000) { //现有元宝数量大于N不给发 且 不是单次发送 if ($DEBUG) { error_log("{$gem}元宝大于5w,{$task_num}"); } continue; } if ($_SERVER['REQUEST_TIME'] - $login > 10 * 86400) { //10天没登陆 设置为作废福利号 model_Util::send_post($server_url, array('uid' => $uid, 'sec' => $sec)); if ($DEBUG) { error_log("大于10天没登录"); } continue; } foreach ($items as $key => $value) { $tag = $value['tag']; $num = intval($value['num']); if ($tag == 'qiyu_zhidian') { $zhidian_lvl = max(1, $level * 3 - 34); for ($i = 0; $i < $num; $i++) { $items[] = array('tag' => 'qiyu_zhidian', 'level' => $zhidian_lvl, 'num' => 1); } unset($items[$key]); } } if ($DEBUG) { error_log("====={$value['tag']}={$value['num']}"); } if ($value['tag'] == 'gem') { if ($DEBUG) { error_log("enter"); } $player->checkVipUpgradeAward($value['num']); $player->commit(); } if (is_array($items) && count($items) > 0) { $msg['status'] = 'award'; #$msg['content'].="\n$desc"; $cdkey = model_Cdkey::gen($items, $desc, 1, 'def'); $msg['cdkey'] = $cdkey; } $r = model_Chat::sendMsg($msg, $uid, 'origin', $sec); } }
public function action_worldboss_reward() { $section = $this->get_param('sec'); $today = $this->get_param('date'); //指定日期,格式:1030,代表十月30号 if (empty($section)) { $section_list = array_keys(getApp()->getSectionConfig()); } else { $section_list = (array) $section; } if (empty($section_list)) { throw new Exception('section error'); return; } $now = getApp()->now; $app = getApp(); $redis = DbConfig::getRedis('worldboss'); $redis_set = DbConfig::getRedis('cache'); if (empty($today)) { $today = date('md', $now); } $rank_keys = $redis->keys("worldboss_rank_*_{$today}"); $redis->multi(Redis::MULTI); foreach ($rank_keys as $rank_key) { $redis->zrevrange($rank_key, 0, 9); } $ranks_data = $redis->exec(); echo "====[ ranklist {$today} ]===\n"; print_r($rank_keys); print_r($ranks_data); echo "====[ end ranklist ]===\n"; $world_boss_conf = PL_Config_Numeric::get('worldboss'); $pozhen_chenghao = PL_Config_Numeric::get("chenghaosetting", "pozhen_rank"); //echo "================[ date = $today ]===============\n"; //新年活动,培养丹翻倍 $activity = $app->getActivityConfig('act_worldboss_double'); if ($activity['started']) { $gain_factor = 2; //双倍奖励 } else { $gain_factor = 1; } try { foreach ($section_list as $section) { foreach ($world_boss_conf as $tag => $conf) { if ($tag != '1001') { //continue; } $boss_key = "worldboss_boss_{$tag}_{$section}_{$today}"; $rank_key = "worldboss_rank_{$tag}_{$section}_{$today}"; echo "================[ {$boss_key} ]===============\n"; $boss_info = $redis->hgetall($boss_key); if ($boss_info['boss_hp_left'] > 0 || $boss_info['reward_time']) { $dead = $boss_info['boss_hp_left'] > 0 ? "boss未死亡" : "boss死亡"; if ($boss_info['reward_time']) { $dead .= "补偿时间 : " . date('Y-m-d H:i:s', $boss_info['reward_time']) . "\n"; } echo $dead . "\n"; continue; } $boss_name = model_Translate::getTransConfig($conf['bossname']); //排行榜奖励 传书 $rank_list = $redis->zrevrange($rank_key, 0, 9); $boss_level = $boss_info['boss_level']; $default_level = $conf['default_level']; //echo "boss_level = $boss_level, default_level = $default_level\n"; foreach ($rank_list as $top_rank => $top_uid) { if ($top_rank === 0) { //新年活动,首名培养丹翻倍 $reward_rank_pyd = $conf['rank_pyd'][$top_rank] * $gain_factor; echo "reward_rank_pyd_top = {$reward_rank_pyd}\n"; echo "gain_factor = {$gain_factor}\n"; } else { $reward_rank_pyd = $conf['rank_pyd'][$top_rank]; } $reward_rank_money = $conf['rank_money'][$top_rank] * ($boss_level - $default_level + 5); $wb_rank = $top_rank + 1; $top_user_info = model_CacheUtil::getInfoByIdUseCache($top_uid, $section, array('level')); print_r($top_user_info); $worldboss_zhidian_offset = PL_Config_Numeric::get('setting', 'worldboss_zhidian_level_offset'); $qzhidian_level = max(1, $top_user_info['level'] * 3 - 34); $qzhidian_level = min($qzhidian_level, 140); $rank_awards = array(array('tag' => '601019', 'num' => $reward_rank_pyd), array('tag' => 'money', 'num' => $reward_rank_money), array('tag' => 'qiyu_zhidian', 'level' => $qzhidian_level, 'num' => 1)); echo "[reward] Date = {$today}; sec = {$section}; Rank = {$wb_rank}; uid = {$top_uid}; 培养丹 = {$reward_rank_pyd}; money = {$reward_rank_money}; zhidian = {$rank_awards[2]['level']}; \n"; //print_r($rank_awards); //echo "[reward] <<<< \n"; $desc_str = model_Cdkey::descriptItems($rank_awards); $rank_msg = array('type' => 'system', 'key' => uniqid(), 'time' => getApp()->now); /* if(P_PLATFORM == "kunlun"){ //$rank_msg['content'] = "恭喜掌門在群雄破陣[$boss_name]時表現神勇,進入排行榜第{$wb_rank}名。額外獎勵:$desc_str"; } */ $msg_str = model_Translate::get('tid#worldboss_reward'); eval("\$content = \"{$msg_str}\";"); $rank_msg['content'] = $content; $rank_msg['status'] = 'award'; $cdkey = model_Cdkey::gen($rank_awards, $desc_str); $rank_msg['cdkey'] = $cdkey; model_Chat::sendMsg($rank_msg, $top_uid, 'origin', $section); // foreach ($pozhen_chenghao as $pozhen_rank_chenghao) { if ($top_rank < $pozhen_rank_chenghao['rank']) { break; } } $chenghao = array('tag' => $pozhen_rank_chenghao['chenghaotag'], 'create_t' => $now, 'level' => 1); $player = new model_Player($top_uid, $section); if ($tag != '1002') { $player->objectPut('chenghao', $pozhen_rank_chenghao['chenghaotag'], $chenghao); } $player->commit(); echo "add chenghao [{$pozhen_rank_chenghao['chenghaotag']}]\n"; } if ($redis->exists($boss_key)) { $redis->hset($boss_key, 'reward_time', $now); } //echo " end ====\n"; } } } catch (Exception $e) { $ex_msg = $e->getMessage(); $ex_trace_msg = $e->getTraceAsString(); $excep_content = "{$ex_msg}\n{$ex_trace_msg}"; $subject = "worldboss_reward_bug_" . P_PLATFORM . "_" . date('Y-m-d H:i:s', time()); $email_content = "世界boss发奖励错误" . " {$excep_content}\n"; //model_Util::sendemail('op@playcrab.com,wangkun@playcrab.com,kf@playcrab.com',$subject,$email_content); model_Util::sendemail('*****@*****.**', $subject, $email_content); } }