Beispiel #1
0
 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);
     }
 }
Beispiel #2
0
 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);
     }
 }