public function sync($data) { $arr_account = file_get_contents(CACHE_PATH . "/server3.txt"); $arr_account = json_decode($arr_account, true); $player_id = $data['player_id']; $user_account = $data['user_account']; if (!$player_id || !$user_account) { return; } if (isset($arr_account[$user_account])) { if ($arr_account[$user_account]['level'] >= 55) { // 生成奖励邮件附件信息 $attachment = array(); $attachment[] = array("prop_id" => 95015, "prop_num" => 1); // 邮件发送 $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(8005); $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 108); $this->write_check($re); Protocol::out(); } if ($arr_account[$user_account]['sum_fpower'] >= 80000) { // 生成奖励邮件附件信息 $attachment = array(); $attachment[] = array("prop_id" => 95014, "prop_num" => 1); // 邮件发送 $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(8006); $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 108); $this->write_check($re); Protocol::out(); } } }
public function sync($data) { $arr_account = file_get_contents(CACHE_PATH . "/server1.txt"); $arr_account = json_decode($arr_account, true); $player_id = $data['player_id']; $user_account = $data['user_account']; $career_type = $data['career_type']; if (!$player_id || !$user_account || !in_array($career_type, array(3, 4))) { return; } if (isset($arr_account[$user_account])) { //登录过1服的玩家 # 生成奖励邮件附件信息 $attachment = array(); switch ($career_type) { case 3: $fashion_id = 93001; $weapon_id = 93002; break; case 4: $fashion_id = 94001; $weapon_id = 94002; break; default: return; break; } $attachment[] = array("prop_id" => 4, "prop_num" => 4000); $attachment[] = array("prop_id" => $weapon_id, "prop_num" => 100); $attachment[] = array("prop_id" => $fashion_id, "prop_num" => 100); $attachment[] = array("prop_id" => 54001, "prop_num" => 1); $attachment[] = array("prop_id" => 95014, "prop_num" => 1); # 邮件发送 $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(8001); $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 108); $this->write_check($re); $level = $arr_account[$user_account]; if ($level >= 45) { //1服45级以上的 $attachment = array(); if ($level >= 60) { $attachment[] = array("prop_id" => 95015, "prop_num" => 1); $attachment[] = array("prop_id" => 20, "prop_num" => 4000); $pc_id = 8004; } elseif ($level >= 55) { $attachment[] = array("prop_id" => 95015, "prop_num" => 1); $attachment[] = array("prop_id" => 20, "prop_num" => 3000); $pc_id = 8003; } else { $attachment[] = array("prop_id" => 20, "prop_num" => 2000); $pc_id = 8002; } # 邮件发送 $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($pc_id); $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 108); $this->write_check($re); } } }
/** * @Purpose: * 老用户指定道具奖励 * @param $player_id 玩家ID */ public function send_old_account_login_reward($player_id, $user_account, $session_id) { $player_id = intval($player_id); $time = mktime(23, 59, 59, 5, 19, 2015); #用户是否可以获取道具 $is_send = $this->CheckAccount($player_id, $time, $user_account, $session_id); if ($is_send) { $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(8000); if ($phrase_config && !empty($phrase_config['title']) && !empty($phrase_config['content']) && !empty($phrase_config['sender'])) { #发送邮件 $attachment = array(); $attachment[] = array('prop_id' => '53001', 'prop_num' => 1); $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 8000); } } }
/** * 战斗结算 * @param $group 地图id * @param $role_id 角色id * @param $is_win 是否胜利 * @param $is_send_mail 是否发邮件 * @param $opp_name 对手名字 * @return null */ public function game_over($group, $role_id, $is_win, $is_send_mail, $opp_player_id, $opp_name, $opp_server_id, $rank_list = array(), $my_team_id, $friend) { //Com_Log::write('zzzwanghui',json_encode($rank_list)); //Com_Log::write('zzzwanghui',$group.'-'.$role_id.'-'.$is_win.'-'.$is_send_mail.'-'.$opp_player_id.'-'.$opp_name.'-'.$opp_server_id); if (!in_array($group, array(1, 2, 3))) { return false; } $sid = $this->_map_ids[$group - 1]; $player_info = $this->get_data('Player')->get_player_info($role_id, array('player_id', 'union_name', 'career_type', 'name', 'level', 'vip', 'privilege_level', 'sum_fpower', 'kf_score')); if (empty($player_info) || empty($player_info['player_id'])) { return false; } $player_id = $role_id; $settle_date = Cache_CrossDuel::getInstance()->get_settle_time(); $my_duel_info = $this->get_data('KFDuel')->get_kf_duel_info($player_id, $settle_date); $old_rank = $this->get_cross('KFDuel')->get_my_rank($player_id, $settle_date); $front_score = $my_duel_info['score']; $front_rank = $old_rank; $my_update = array(); $multi = 1; $battle_config = Cache_CrossDuel::getInstance()->get_battle_conf($sid); $time = time(); if ($time <= strtotime($battle_config['double_end_time']) && $time >= strtotime($battle_config['double_open_time'])) { $multi = 2; } $reward_conf = Cache_CrossDuel::getInstance()->get_battle_reward_conf($sid, $player_info['level']); if (!$reward_conf) { $this->throw_error(10222, 6010101); } $point = $reward_conf['point']; $win_reward = ''; $arr_reward = explode('|', $reward_conf['reward']); if ($is_win) { $my_update['win'] = $my_duel_info['win'] + 1; $point = $point * $multi; $rewards = array(); foreach ($arr_reward as $value) { $ar_re = explode(':', $value); $rewards[] = $ar_re[0] . ':' . intval($ar_re[1] * $multi); } $win_reward = implode('|', $rewards); } else { $my_update['win'] = 0; $point = intval($point * $multi / 2); $rewards = array(); foreach ($arr_reward as $value) { $ar_re = explode(':', $value); $rewards[] = $ar_re[0] . ':' . intval($ar_re[1] * $multi / 2); } $win_reward = implode('|', $rewards); } $my_update['score'] = $my_duel_info['score'] + $point; $total_score = $my_duel_info['total_score'] + $point; if ($total_score > 2147483000) { $total_score = 2147483000; } $my_update['total_score'] = $total_score; $base_reward = $this->_basic_reward_currency . ':' . $point; if ($win_reward) { $base_reward .= '|' . $win_reward; } $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $opp_player_id, 'opp_name' => $opp_name, 'opp_server_id' => $opp_server_id, 'result' => $is_win, 'score' => $point); $out_reward = array('result' => $is_win, 'base_reward' => $base_reward, 'other_reward' => ''); $send_reward = array(); $reward_detail = $this->get_game('Reward')->get_reward_detail($base_reward); $this->get_game('Reward')->gen_reward_array($reward_detail, $send_reward); $this->start_trans(); $result = $this->get_data('KFDuel')->set_kf_duel_info($player_id, $my_update); if ($result) { $result = $this->get_data('KFDuel')->add_fight_log($my_fight_log); } if ($result) { if ($send_reward) { if ($is_send_mail) { //发邮件 $attachment = array(); foreach ($send_reward as $val) { $attachment[] = array('prop_id' => $val['item_id'], 'prop_num' => $val['item_num']); } $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(13); $result = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 1236); } else { //直接发奖励 $result = $this->get_game('Reward')->send_reward($player_id, $send_reward, array('cmd_id' => 1236)); if ($result !== true) { $this->throw_error($result, 6010099); } } } } if ($result) { $this->commit(); if (!$is_send_mail) { $this->get_game('Reward')->add_reward_log(); } //存入排行 $rank_data = array(); $rank_data['player_id'] = $player_id; $rank_data['player_name'] = $player_info['name']; $rank_data['career_type'] = $player_info['career_type']; $rank_data['player_level'] = $player_info['level']; $rank_data['union_name'] = $player_info['union_name']; $rank_data['sum_fpower'] = $player_info['sum_fpower']; $rank_data['sid'] = $sid; $rank_data['server_id'] = SERVER_ID; $rank_data['server_name'] = SHOW_TITLE; $rank_data['score'] = $my_update['score']; $rank_data['reward_status'] = 0; $rank_data['update_time'] = time(); $this->get_cross('KFDuel')->set_kf_duel_rank($player_id, $settle_date, $rank_data); //存入排行 $new_rank = $this->get_cross('KFDuel')->get_my_rank($player_id, $settle_date); //$this->get_data('KFDuel')->set_kf_duel_info($player_id,array('rank'=>$new_rank)); $total_rank_data = $rank_data; $total_rank_data['score'] = $my_update['total_score']; $this->get_cross('KFDuel')->set_kf_duel_total_rank($player_id, $total_rank_data); //存入总积分排行 $out_reward['rank'] = $new_rank; $out_reward['total_score'] = $player_info['kf_score'] + $point; $out_reward['score'] = $my_update['score']; if ($rank_list) { foreach ($rank_list as &$list) { //真恶心,C++干的事情!!!! if ($list[0] == $player_id) { $list[13] = $point; $list[14] = $win_reward; $damage = $list[2] ? $list[2] : 0; $multi_kill = $list[9] ? $list[9] : 0; $this->get_cross('KFDuel')->update_day_info($player_id, $is_win, $damage, $multi_kill); } else { $reward_conf = Cache_CrossDuel::getInstance()->get_battle_reward_conf($sid, $list[12]); $arr_reward = explode('|', $reward_conf['reward']); if ($my_team_id == $list[6]) { //队友 if ($is_win) { $list[13] = $reward_conf['point'] * $multi; $rewards = array(); foreach ($arr_reward as $value) { $ar_re = explode(':', $value); $rewards[] = $ar_re[0] . ':' . intval($ar_re[1] * $multi); } $list[14] = implode('|', $rewards); } else { $list[13] = intval($reward_conf['point'] * $multi / 2); $rewards = array(); foreach ($arr_reward as $value) { $ar_re = explode(':', $value); $rewards[] = $ar_re[0] . ':' . intval($ar_re[1] * $multi / 2); } $list[14] = implode('|', $rewards); } } else { if ($is_win) { $list[13] = intval($reward_conf['point'] * $multi / 2); $rewards = array(); foreach ($arr_reward as $value) { $ar_re = explode(':', $value); $rewards[] = $ar_re[0] . ':' . intval($ar_re[1] * $multi / 2); } $list[14] = implode('|', $rewards); } else { $list[13] = $reward_conf['point'] * $multi; $rewards = array(); foreach ($arr_reward as $value) { $ar_re = explode(':', $value); $rewards[] = $ar_re[0] . ':' . intval($ar_re[1] * $multi); } $list[14] = implode('|', $rewards); } } } } } $out_reward['rank_list'] = $rank_list; $out_reward['my_team_id'] = $my_team_id; #添加好友亲密度 $this->get_game('Athena')->add_firend_point($player_id, $friend); $this->get_game('PlayerAchieve')->async_trigger_achieve_target($player_id, 42, $new_rank, 3); $this->get_game('DailyBoon')->async_trigger_daily_boon_task($player_id, 3009, 1); //日志 Log_KfDuel::getInstance()->add_kf_duel_log($player_id, $player_info['level'], $player_info['vip'], $player_info['privilege_level'], $my_update['score'], $new_rank, $front_score, $front_rank); if (!$is_send_mail) { //推奖励面板 //Com_Log::write('zzzwanghui',json_encode($out_reward)); Protocol::input($player_id, 8, 12, 1236, $out_reward); } } else { $this->rollback(); $this->throw_error('10104', 6010100); } return $result; }
public function send_mail_for_reward($player_id) { $player_id = intval($player_id); $get_rewards = $this->get_data('Athena')->get_player_reward($player_id); $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(3); if (empty($get_rewards)) { return 0; } $temp = json_decode($get_rewards['rewards'], true); $content = sprintf($phrase_config['content'], $temp['waves']); if ($get_rewards['static'] == 0) { $attachment = array(); if (empty($temp)) { return 1; } foreach ($temp as $v) { $attachment[] = array("prop_id" => $v['item_id'], "prop_num" => $v['item_num']); } $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $content, $attachment, $phrase_config['sender'], 1, 1114, 0); $this->write_check($re); $this->get_data('Athena')->update_player_reward_log($player_id, 2); } return 1; }
public function get_expired_challenge_rank_reward($player_id) { return; # # 获取玩家信息,排位信息 $player_info = $this->get_data('Player')->get_player_info($player_id); $player_rank_info = $this->get_data('Challenge')->get_player_challenge_rank_info($player_id); if (empty($player_rank_info) || empty($player_rank_info['mod_date']) || empty($player_rank_info['challenge_status'])) { return false; } $player_latest_reward_time = $player_rank_info['latest_reward_time']; $player_reg_date = $player_rank_info['reg_date']; # 入榜时间 $this->start_trans(); $fetch_flag = false; # 是否有补发排位奖的标识 $reward_log_array = array(); # 奖励领取日志 $mail_array = array(); # 邮件数组 for ($i = 1; $i <= $this->challenge_rank_reward_backtrace; $i++) { # 往前回溯不超过15天 $previous_day_reward_time = $this->challenge_reward_time - 86400 * $i; # 前一天天梯排位奖励结算时间点 if ($player_latest_reward_time < $previous_day_reward_time && $player_reg_date <= $previous_day_reward_time) { # 最后领奖时间小于前一天奖励结算时间点时,补发排位奖励 $base_rank = $this->get_player_real_base_rank($player_id, $player_info['reg_time'], $player_rank_info, $previous_day_reward_time); # 获取排位奖励基准排位 if (empty($base_rank)) { break; } # 没有挑战记录 # 获取vip对奖励的加成信息,只加成非道具奖励 $vip_add_coeff = Com_Util::get_vip_special_reward_add_coeff(10064, $player_info['vip'], $player_info['privilege_level'], $player_id); # 获取排位基础奖励与排位基础奖励加成 $award_rank = Cache_Ladder::getInstance()->get_ladder_award_rank_info($player_info['level']); $award_rank_add = Cache_Ladder::getInstance()->get_ladder_award_rank_add_info($base_rank); if (empty($award_rank) || empty($award_rank_add) || empty($award_rank['award_info'])) { continue; # 没有排位奖励配置信息 } # 生成奖励邮件附件信息 $attachment = array(); /** $coeff = (0 + $award_rank_add['rank_add'] / 10000) * (1 + $vip_add_coeff); $reward_detail = $this->get_game('Reward')->get_reward_detail($award_rank['award_info'], $coeff); **/ $reward_detail = $this->get_game('Reward')->get_reward_detail_other_way($award_rank['award_info'], $award_rank_add['rank_add'], 1); foreach ($reward_detail as $item_idx => $item_num) { $attachment[] = array("prop_id" => $item_idx, "prop_num" => $item_num); } # 邮件发送 $day = date("n.j", $previous_day_reward_time); $hour = date("G:i", $previous_day_reward_time); $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(2); $content = sprintf($phrase_config['content'], $day, $hour, $base_rank); $mail_array[] = array('player_id' => $player_id, 'title' => $phrase_config['title'], 'content' => $content, 'attachment' => $attachment, 'sender' => $phrase_config['sender']); # 记录奖励发送日志 $reward_log_array[] = array('player_id' => $player_id, 'reward_time' => $previous_day_reward_time, 'reg_date' => $this->current_time, 'rank' => $base_rank, 'reward_info' => "'" . json_encode($reward_detail) . "'", 'status' => 0); $fetch_flag = true; } else { break; } } # 记录奖励发送日志 if (!empty($reward_log_array)) { $re = $this->get_data('Challenge')->multi_record_challenge_reward($reward_log_array); $this->write_check($re, 3011335); } # 更新玩家最后一次排位奖励领取时间为当前登录时间 if ($fetch_flag) { $player_rank_info['latest_reward_time'] = $this->current_time; $re = $this->get_data('Challenge')->update_challenge_rank_info($player_rank_info); $this->write_check($re, 3011343); } $this->commit(); # commit后处理异步,确保事务失败时不会已经发送邮件 if (!empty($mail_array)) { foreach ($mail_array as $mail) { $re = $this->get_game('Mail')->async_trigger_mail($mail['player_id'], $mail['title'], $mail['content'], $mail['attachment'], $mail['sender'], 1, 109); $this->write_check($re, 3011352); } } # 记录行为 Com_Log::write('xgame.challenge', "{$player_id}\t" . "get_expired_challenge_rank_reward\t" . json_encode($mail_array) . "\t"); }
public function delay_send_reward($alarm_timer_params) { if (empty($alarm_timer_params) || empty($alarm_timer_params['param1']) || empty($alarm_timer_params['param2'])) { Com_Log::write('xgame.questionnaire', json_encode($alarm_timer_params)); } $player_id = $alarm_timer_params['param1']; $questionnaire_id = $alarm_timer_params['param2']; $questionnaire_info = $this->get_data('ActivityQuestions')->get_questionnaire_info($questionnaire_id); if (empty($questionnaire_info) || empty($questionnaire_info['reward'])) { $this->throw_error('71610'); # 获取问卷信息异常 } # 判断是否已经领取过 $reward_log = $this->get_data('ActivityQuestions')->get_questionnaire_reward_log($player_id, $questionnaire_id, 2); if (!empty($reward_log)) { $this->throw_error('71611'); # 已领取过该问卷奖励 } $rewards = json_decode($questionnaire_info['reward'], true); if (!empty($rewards['extra_reward'])) { /** $this->start_trans(); $reward = array(); $reward_detail = $this->get_game('Reward')->get_reward_detail($rewards['extra_reward']); $this->get_game('Reward')->gen_reward_array($reward_detail, $reward); if(!empty($reward)){ $re = $this->get_game('Reward')->send_reward($player_id, $reward, array('cmd_id' => 796, 'bind_flag' => 0)); $this->write_check_strict($re, 3010354); } # 记录领奖日志 $reward_log = array( 'player_id' => $player_id, 'questionnaire_id' => $questionnaire_id, 'reward_type' => 2, 'reg_time' => $this->current_time, 'reward_info' => "'".json_encode($reward_detail)."'", ); $re = $this->get_data('ActivityQuestions')->record_questionnaire_reward_log($reward_log); $this->write_check($re, 3010366); $this->commit(); $this->get_game('Reward')->add_reward_log(); **/ # 生成奖励邮件附件信息 $attachment = array(); $reward_detail = $this->get_game('Reward')->get_reward_detail($rewards['extra_reward']); foreach ($reward_detail as $item_idx => $item_num) { $attachment[] = array("prop_id" => $item_idx, "prop_num" => $item_num); } # 邮件发送 $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(121); $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 796, 0); $this->write_check($re, 3010382); } # 记录行为 $params_json = json_encode($alarm_timer_params); Com_Log::write('xgame.questionnaire', "{$player_id}\t" . "delay_send_reward\t" . "{$questionnaire_id}\t" . "{$params_json}\t"); return array('result' => 1); }
public function send_reward($guild_id, $rewards) { #Com_Log::write('nut','swim_reward='.json_encode($rewards)); if (!empty($rewards)) { foreach ($rewards as $v) { $res = array(); $res['sum_reward'] = array(); #array('type'=>'exp','item_id'=>1,'item_num'=>($v[1]+$v[2]+$v[3])); #总经验 $res['crystal'] = array('type' => 'crystal', 'item_id' => 13, 'item_num' => $v[5] + $v[6] + $v[7]); $reward_list = array(); #$reward_list[] = $res['sum_reward']; $reward_list[] = $res['crystal']; if ($v[4] == 1) { $result = $this->get_game('Reward')->send_reward($v[0], $reward_list, array('cmd_id' => '493', 'bind_flag' => 0), 1); if ($result === true) { $this->get_game('Reward')->add_reward_log(); //记录日志 Protocol::input($v[0], 8, 17, 1729, $res); } } else { $player_id = intval($v[0]); $rewards = array(array("prop_id" => 13, "prop_num" => $res['crystal']['item_num'])); $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(6); if (empty($rewards)) { return 0; } $content = $phrase_config['content']; $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $content, $rewards, $phrase_config['sender'], 2, 493, 0); $this->write_check($re); } } } return array('guild_id' => $guild_id); }
/** * 触发成就任务 * @param unknown $player_id */ public function trigger_achieve_target($data) { if (empty($data)) { return; } $data = json_decode($data, true); $player_id = $data["player_id"]; $achieve_type = $data["achieve_type"]; $trigger_val = $data["val"]; $update_type = $data["update_type"]; Com_Log::write('xgame.trigger_achieve_target', "{$player_id}---{$achieve_type}" . json_encode($data)); $achieve_configs = Cache_AchieveConfig::getInstance()->get_achieve_config_by_type($achieve_type); $obj_player_counter = $this->get_data('PlayerAchieveCounter'); $achieve_counter_type_progress = $obj_player_counter->get_player_achieve_counter_info($player_id, array("finish_title_ids", "task_type_progress")); $obj_player_only = $this->get_data('PlayerAchieveOnly'); $objPlayerAchieve = $this->get_data('PlayerAchieve'); $push_achieve_prompt1 = array(); $push_achieve_prompt2 = array(); $push_achieve_prompt3 = array(); //2014-4-16是否添加过下一个要完成的值 $is_added_next_target_val = 0; $push_prompt_title_id = 0; $push_prompt_achieve_id = 0; $finish_num = 0; $loot_times = 0; $achieve_counter_data = $obj_player_counter->get_player_achieve_counter_info($player_id, array("task_type_progress")); $player_achieve_data = $objPlayerAchieve->get_player_achieve_info($player_id); foreach ($achieve_configs as $achieve_config) { $loot_times++; $title_id = $achieve_config['title_id']; $achieve_id = $achieve_config['achieve_id']; #当前勋章下所有成就 $player_achieve_info = $player_achieve_data[$title_id]; if (isset($achieve_counter_data["task_type_progress"][$achieve_type]['val']) && !in_array($achieve_type, array(6, 28, 29, 24, 35, 36, 40, 48))) { $player_achieve_info[$achieve_config['achieve_id']]['val'] = $achieve_counter_data["task_type_progress"][$achieve_type]['val']; } $oldval = $player_achieve_info[$achieve_config['achieve_id']]['val']; #2014-4-14修改把配置表类型移到代码中 $achieve_config["target_type"] = $update_type; //检查是否满足条件 $check_finish = $this->check_achieve_finish($player_id, $trigger_val, $achieve_config, $player_achieve_info); $newval = $player_achieve_info[$achieve_config['achieve_id']]['val']; $prop_id = intval($achieve_config['reward']); if ($player_achieve_info[$achieve_id]['state'] == 1) { $finish_num++; } if ($is_added_next_target_val == 0) { $add_trigger_type_info = array(); $add_trigger_type_info['type'] = $achieve_type; $add_trigger_type_info['update_type'] = $update_type; $add_trigger_type_info['val'] = $newval; $add_trigger_type_info['is_sys'] = 1; } //完成=>所有此类型 if ($finish_num == count($achieve_configs) && $is_added_next_target_val == 0) { $add_trigger_type_info['next_target_val'] = 999999999; $is_added_next_target_val = 1; } //全服唯一 if ($achieve_config['other_type'] == 1) { $achieve_only_info = $obj_player_only->get_player_achieve_only_info($achieve_id); if ($achieve_only_info) { continue; } } Com_Log::write('xgame.trigger_achieve_medal_test', "{$player_id}--{$achieve_type}--{$oldval}--{$newval}--{$check_finish}"); //未完成 if ($oldval == $newval && $check_finish != 1) { if ($check_finish !== 2 && $is_added_next_target_val == 0) { $add_trigger_type_info['next_target_val'] = $achieve_config['target_val']; $is_added_next_target_val = 1; } continue; //无变化不更新 } //未完成-变化 if ($check_finish == 0 && $is_added_next_target_val == 0) { $add_trigger_type_info['next_target_val'] = $achieve_config['target_val']; $is_added_next_target_val = 1; } $this->start_trans(); $ret_task = $objPlayerAchieve->update_player_achieve($player_id, $title_id, $player_achieve_info, $achieve_id); if (!$ret_task) { return false; } if ($check_finish == 0) { $this->commit(); continue; } $ret_only = true; //更新全服唯一成就完成信息 if ($achieve_config['other_type'] == 1) { $achieve_only_info = array("achieve_id" => $achieve_id, "player_id" => $player_id, "add_time" => time()); $ret_only = $obj_player_only->update_player_achieve_only($achieve_config['achieve_id'], $achieve_only_info); if (!$ret_only) { return false; } } $target_finish_num = 0; #获取配置表下当前勋章所有成就任务 $achieve_title_data = Cache_AchieveConfig::getInstance()->get_achieve_config_by_titleid2($title_id); $target_total_num = count($achieve_title_data); //玩家完成的成就任务 if ($player_achieve_info) { foreach ($player_achieve_info as $achieve_id => $val) { if (isset($achieve_title_data[$achieve_id])) { if ($val['state'] == 1) { $target_finish_num++; } } } } //当前成就列任务是否全部完成 if ($target_finish_num >= $target_total_num && $target_total_num > 0) { $field = "finish_title_ids"; $ret_counter = true; if ($title_id < 100 || $prop_id < 1) { $achieve_counter_data = $obj_player_counter->get_player_achieve_counter_info($player_id, $field); $achieve_counter_data[$title_id] = time(); //激活新的勋章/称号 $set_counter_data[$field] = $achieve_counter_data; $ret_counter = $obj_player_counter->update_player_achieve_counter($player_id, $set_counter_data); if (!$ret_counter) { return false; } } $reward = array(); //如果为勋章添加提升属性 if ($title_id < 100) { $finish_medal_id = array(); $finish_max_medal_id = 0; if (Com_Array::is_good_arr($achieve_counter_type_progress["finish_title_ids"])) { foreach ($achieve_counter_type_progress["finish_title_ids"] as $finish_title_id => $up_ts) { if ($finish_title_id < 100) { $finish_medal_id[] = $finish_title_id; } } } #防止后面勋章先完成 if (!empty($finish_medal_id)) { $finish_max_medal_id = max($finish_medal_id); } if ($title_id > $finish_max_medal_id) { $title_config = Cache_TitleConfig::getInstance()->get_title_config_by_id($title_id); $achieve_attr_1 = $this->get_format_achieve_attr($title_config['reward']); $update_player_detail_data['achieve_attr_1'] = $achieve_attr_1; $ret_attr_1 = $this->get_data('PlayerDetail')->update_player_detail($player_id, $update_player_detail_data); if (!$ret_attr_1) { return false; } $ret_player = $this->get_data('Player')->update_player_info($player_id, array("medal_id" => $title_id)); if (!$ret_player) { return false; } Com_Log::write('xgame.trigger_achieve_medal', "{$player_id}---{$achieve_type}---trigger_medal_id={$title_id}"); } $push_achieve_prompt2 = array(2, $title_config['icon'], $title_config['font_icon'], "", 0, $title_id, 0); } else { $title_config = Cache_TitleConfig::getInstance()->get_title_config_by_id($title_id); #if($title_config['operator_id'] !=0 && OPERATOR_ID!=$title_config['operator_id']) return false; if ($prop_id > 0) { $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($achieve_config['title_id']); $attachment = array(); $attachment[] = array("prop_id" => $prop_id, "prop_num" => 1); $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 766); } } $this->commit(); $push_prompt_achieve_id = $achieve_config['achieve_id']; $push_prompt_title_id = $title_id; Protocol_Player::p2c_part_update($player_id, array('attr' => array(), 'medal_id' => '')); if ($title_id < 100) { #{玩家名}获得了{勋章名},功成名就,指日可待! $replace_info = array(); $replace_info[] = array('rep_type' => 0, 'rep_val' => $player_id); $replace_info[] = array('rep_type' => 7, 'txt' => $title_config['title_name']); $this->get_game('SystemNotice')->push_sys_notice($player_id, 14, 0, $replace_info); } } else { if (!$ret_only) { return false; } $this->commit(); $push_prompt_achieve_id = $achieve_config['achieve_id']; $push_prompt_title_id = $title_id; } //任务完成添加成就点 if ($achieve_config['achieve_point'] > 0) { $player_info = $this->get_data('Player')->get_player_info($player_id, array("achieve_point", "level", "vip")); $front_amount_achieve_point = intval($player_info["achieve_point"]); $player_info["achieve_point"] += $achieve_config['achieve_point']; $ret_player = $this->get_data('Player')->update_player_info($player_id, $player_info); if (!$ret_player) { return false; } //主角成就日志 $log_data = array('player_id' => $player_id, 'channel' => 29, 'type' => 1, 'item_id' => 12, 'item_num' => $achieve_config['achieve_point'], 'amount' => $front_amount_achieve_point, 'after_amount' => $player_info['achieve_point'], 'cmd_id' => 768, 'player_level' => $player_info['level'], 'vip_level' => $player_info['vip']); Log_Common::getInstance()->add_log($log_data, 'day'); } } #特殊类型不保留下一步记录 if (!in_array($achieve_type, $this->special_task_type)) { if ($is_added_next_target_val == 1) { $add_trigger_type_info['upts'] = time(); $task_type_progress = $obj_player_counter->get_player_achieve_counter_info($player_id, array("task_type_progress")); $task_type_progress["task_type_progress"][$achieve_type] = $add_trigger_type_info; $ret = $obj_player_counter->update_player_achieve_counter($player_id, $task_type_progress); if (!$ret) { return false; } } } $func_open = $this->get_data('PlayerDetail')->get_player_detail($player_id, 'func_open'); if (isset($func_open[14])) { if ($push_prompt_title_id > 0) { if ($push_achieve_prompt2) { Protocol::input($player_id, 8, 7, 768, array($push_achieve_prompt2)); Com_Log::debug_write('xgame.push_achieve_prompt', "{$player_id}---{$achieve_type}" . var_export($push_achieve_prompt2, true)); } else { if ($push_prompt_title_id < 100) { $achieve_config = Cache_AchieveConfig::getInstance()->get_achieve_config($push_prompt_achieve_id); $push_achieve_prompt = array(1, $achieve_config['icon'], $achieve_config['font_icon'], $achieve_config['target_info'], $achieve_config['achieve_point'], $push_prompt_title_id, $achieve_config['achieve_id']); } else { $title_config = Cache_TitleConfig::getInstance()->get_title_config_by_id($push_prompt_title_id); $push_achieve_prompt = array(3, $title_config['icon'], $title_config['font_icon'], $achieve_config['target_info'], 0, $push_prompt_title_id, 0); } Com_Log::debug_write('xgame.push_achieve_prompt', "{$player_id}---{$achieve_type}" . var_export($push_achieve_prompt, true)); Protocol::input($player_id, 8, 7, 768, array($push_achieve_prompt)); } } } if (!IS_FRONT) { Protocol::out(); } }
/** * 购买道具 * @param $player_id * @param $auction_id * @return array */ public function buy_item($player_id, $auction_id, $buy_num) { $auction_data = $this->get_data('Auction')->get_auction($auction_id); if (empty($auction_data)) { $this->throw_error('80920'); //道具不存在 } $prop = json_decode($auction_data['prop_info'], true); if ($buy_num > $prop['item_num'] || $buy_num <= 0) { $this->throw_error('80914'); //购买数量不正确 } if ($prop['player_id'] == $player_id) { $this->throw_error('80915'); //购买数量不正确 } $player_info = $this->get_data('Player')->get_player_info($player_id, array('level', 'vip', 'gold', 'name', 'player_id', 'privilege_level')); $has_gold = $player_info['gold']; $price = $auction_data['sell_price'] / $prop['item_num']; $need_gold = ceil($price * $buy_num); $this->get_data('Player')->check_player_resource($player_id, $player_info, "-", 'gold', $need_gold); $this->start_trans(); $reward[] = array('type' => 'prop', 'item_id' => $prop['prop_id'], 'item_num' => $buy_num); $result = $this->get_game('Reward')->send_reward($player_id, $reward, array('cmd_id' => '774')); if ($result !== true) { $this->throw_error($result); } if ($result) { // $result = $this->get_data('Player')->update_player_info($player_id,array('gold'=>"-".$need_gold)); $arr_consume = array('price' => $price, 'gold' => $need_gold, 'ticket' => 0, 'count' => $buy_num); #数据中心推送 $result = $this->get_data('Player')->update_player_resource($player_id, $player_info, 774, array(), $arr_consume); } if ($result) { if ($buy_num < $prop['item_num']) { $prop['item_num'] = $prop['item_num'] - $buy_num; $sell_price = $auction_data['sell_price'] - $need_gold; $this->get_data('Auction')->set_auction($auction_id, array('prop_info' => $prop, 'sell_price' => $sell_price)); } else { $prop['item_num'] = 0; $this->get_data('Auction')->del_auction($auction_id); } } $prop_config = Cache_Prop::getInstance()->get_prop_info($prop['prop_id']); $attachment_gold = 0; $objApi = TenYear::getInstance('Com_Uzapi'); $ip = $this->get_cross('Base')->get_server_ip($auction_data['server_id']); $objApi->setServerUrl($ip); if ($result) { $factorage = $need_gold * ($this->_factorage / 100); $factorage = ceil($factorage); $attachment_gold = $need_gold - $factorage; $attachment = array(array("prop_id" => Cache_Currency::getInstance()->get_index('ticket'), "prop_num" => $attachment_gold)); $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(7); $content = sprintf($phrase_config['content'], $player_info['name'], $prop_config['name'] . '*' . $buy_num, $factorage, $attachment_gold); //"{$player_info['name']} 购买了你出售的 {$prop_config['name']}*{$buy_num} ,扣除手续费{$factorage}钻,你获得了 {$need_gold}钻。"; if ($auction_data['server_id'] == SERVER_ID) { $result = $this->get_game('Mail')->async_trigger_mail($auction_data['player_id'], $phrase_config['title'], $content, $attachment, $phrase_config['sender'], 1, 774); } else { $objApi->setReqData(array("action" => "PlayerInfo", "command" => "send_mail", "player_id" => $auction_data['player_id'], 'title' => $phrase_config['title'], 'content' => $content, 'attachment' => json_encode($attachment), 'sender' => $phrase_config['sender'])); $response = $objApi->sendRequest(); if (!empty($response['return']) && $response['return'] != 1) { $result = false; } } } if ($result) { $this->commit(); #数据中心推送 // if($need_gold > 0){ // $params['act'] = 774; // $params['price'] = $price; // $params['gold'] = $need_gold; // $params['black_gold'] = 0; // $params['count'] = $buy_num; // $params['time'] = time(); // Com_DataCenter::getInstance()->publish_data($player_id,'prop',$params); // } $this->get_game('Reward')->add_reward_log(); //购买日志 Log_Trade::getInstance()->add_trade_log($player_id, $player_info['level'], $player_info['vip'], $player_info['privilege_level'], 2, $prop['prop_id'], $prop_config['name'], $prop['quality'], $buy_num, $prop['item_num'], $prop['level'], $prop, 2, $need_gold); //被购买日志 $prop['buyer_id'] = $player_id; $seller_info = array(); if ($auction_data['server_id'] == SERVER_ID) { $seller_info = $this->get_data('Player')->get_player_info($auction_data['player_id'], array('level', 'vip', 'privilege_level')); } else { $objApi->setReqData(array("action" => "PlayerInfo", "command" => "get_player_info", "player_id" => $auction_data['player_id'])); $response = $objApi->sendRequest(); if (!empty($response['return'])) { $seller_info = $response['return']; } } Log_Trade::getInstance()->add_trade_log($auction_data['player_id'], $seller_info['level'], $seller_info['vip'], $seller_info['privilege_level'], 3, $prop['prop_id'], $prop_config['name'], $prop['quality'], $buy_num, $prop['item_num'], $prop['level'], $prop, 4, $attachment_gold); return array('result' => 1, 'auction_id' => $auction_id); } else { $this->rollback(); } return array('result' => 0, 'auction_id' => $auction_id); }
/** * 每天晚上12点要给公会的会长和副会长发工资 会长:公会人数*1000(可配置) 副会长:公会人数*600(可配置) * @param unknown $union_id */ public function union_manager_reward() { return false; $all_union_info = $this->get_data('UnionInfo')->get_all_union_info(); if ($all_union_info) { foreach ($all_union_info as $key => $union_info) { $union_id = $union_info['union_id']; $player_num = $union_info['player_num']; $union_level = $union_info['union_level']; if ($union_level > 0) { $objUnionPlayerData = $this->get_data('UnionPlayer'); $unionPlayerList = $objUnionPlayerData->get_union_player_info($union_id); if (Com_Array::is_good_arr($unionPlayerList)) { $unionBaseConfig = Cache_UnionBase::getInstance()->get_union_base_info($union_level); $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(9001); foreach ($unionPlayerList as $union_player_id => $val) { if ($val['job_id'] <= 2) { $attachment = array(); $job_salary = explode("|", $unionBaseConfig["job{$val['job_id']}_salary"]); if (Com_Array::is_good_arr($job_salary)) { foreach ($job_salary as $salary) { $prop = explode(":", $salary); $prop_num = intval($player_num * $prop[1]); $attachment[] = array('prop_id' => $prop[0], 'prop_num' => $prop_num); } } $this->get_game('Mail')->async_trigger_mail($val['player_id'], $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 1700); } } } } } } }
/** * 同步公会加经验 * @param unknown $union_id * @param number $cmd_id */ public function add_union_reward_log() { if (!empty($this->arrPropLogs)) { foreach ($this->arrPropLogs as $item_id => $log) { if ($item_id == 9) { $this->get_data('PlayerDailyTime')->add_used_time($this->union_id, 'daily_add_union_exp', $log['item_num']); $this->get_data('UnionInfo')->set_union_weight($this->union_id, $this->arrUnion); if ($this->arrUnion['union_level'] > $this->arrParams['old_union_level']) { if ($this->arrUnion['union_level'] > 1) { $phrase_id = 1000 + $this->arrUnion['union_level']; $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($phrase_id); $this->get_game('UnionPlayer')->send_mail($this->arrUnion['create_player_id'], $this->union_id, $phrase_config['title'], $phrase_config['content'], false); #祝贺{公会名}公会升级为{公会等级}级,成为服务器一大势力! $replace_info = array(); $replace_info[] = array('rep_type' => 7, 'txt' => $this->arrUnion['union_name']); $replace_info[] = array('rep_type' => 7, 'txt' => $this->arrUnion['create_player_name']); $replace_info[] = array('rep_type' => 7, 'txt' => $this->arrUnion['union_level']); $this->get_game('SystemNotice')->push_sys_notice($this->arrUnion['create_player_id'], 90, 0, $replace_info, $this->arrUnion['union_level']); $this->get_game('UnionAchieve')->async_trigger_union_achieve($this->arrUnion['create_player_id'], 1, $this->arrUnion['union_level'], 2); } $this->get_game('Union')->Sync_Union_msg($this->union_id, 0, 0, $this->arrUnion['union_level']); } } //公会经验-流水日志 $log_data = array('player_id' => $this->player_id, 'channel' => 17, 'type' => 1, 'item_id' => $item_id, 'item_num' => $log['item_num'], 'amount' => $log['amount'], 'after_amount' => $log['item_num'] + $log['amount'], 'cmd_id' => $this->arrParams['cmd_id'], 'content' => $this->union_id); Log_Common::getInstance()->add_log($log_data); } } }
/** * 处理战斗结果 * @param $player_id * @param $result */ public function deal_result($player_id, $arena_id, $winner_role_id, $loser_role_id, $send_mail, $opp_name, $opp_dw) { // Com_Log::write("deal_result.".$player_id,"{$winner_role_id} {$loser_role_id} send_mail:{$send_mail} {$opp_name} {$opp_dw}"); $out = array(); $out['arena_id'] = $arena_id; $my_update = array(); $my_arena_info = $this->get_data('KFArena')->get_kf_arena_info($player_id); if (empty($my_arena_info)) { Com_Log::write("deal_result." . $player_id, var_export($this->redis(), true)); return false; } // Com_Log::write("deal_result.".$player_id,var_export($my_arena_info,true)); $dw_configs = Cache_CrossArenaLevel::getInstance()->get_config_info(); // Com_Log::log($dw_configs,'deal_result',1); $my_fight_log = array(); $win = 0; $arena_news = array(); $old_levels = "{$my_arena_info['dw']}:{$my_arena_info['dw_lv']}:{$my_arena_info['dw_star']}"; $old_rank = $this->get_cross('KFArena')->get_my_rank($player_id, $my_arena_info['dw']); $player_info = $this->get_data('Player')->get_player_info($player_id, array('sum_fpower', 'union_name', 'career_type', 'name', 'level', 'vip', 'privilege_level')); #日志需要的 $front_dw = $my_arena_info['dw']; $front_dw_lv = $my_arena_info['dw_lv']; $front_dw_star = $my_arena_info['dw_star']; $front_score = $my_arena_info['score']; $front_score_tale = $my_arena_info['score_tale']; $front_rank = $old_rank; $my_update['dw'] = $my_arena_info['dw']; $my_update['dw_lv'] = $my_arena_info['dw_lv']; $my_update['dw_star'] = $my_arena_info['dw_star']; $my_update['score'] = $my_arena_info['score']; // Com_Log::write("kfarena_out_reward.".$player_id,"score:".var_export($my_arena_info['score'],true)); $my_update['score_tale'] = $my_arena_info['score_tale']; $del_tale = false; #是否冲传排行榜删除 $del_normal = false; #是否冲普通榜删除 $max_dw_log = false; if ($winner_role_id == $player_id) { //胜利 $oopp_player_id = $loser_role_id; $win = 1; $my_update['win'] = $my_arena_info['win'] + 1; if ($my_arena_info['dw'] < $this->max_dw) { //传说的不做加分数操作 $my_update['score'] = $my_arena_info['score'] + 1; $new_dw_info = $this->cal_dw($my_update['score'], $dw_configs); $my_update['dw'] = $new_dw_info['dw']; $my_update['dw_lv'] = $new_dw_info['dw_lv']; $my_update['dw_star'] = $new_dw_info['dw_star']; if ($new_dw_info['dw'] != $my_arena_info['dw']) { $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $loser_role_id, 'opp_name' => $opp_name, 'result' => 1, 'star' => 0, 'dw' => $new_dw_info['dw'], 'rank' => 0); } else { $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $loser_role_id, 'opp_name' => $opp_name, 'result' => 1, 'star' => 1, 'dw' => 0, 'rank' => 0); } if ($my_update['dw'] == $this->max_dw) { #初次升级的的时候把胜利次数记录 $my_update['score_tale'] = $my_arena_info['score_tale'] + 1; $del_normal = true; $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $loser_role_id, 'opp_name' => $opp_name, 'result' => 1, 'star' => 0, 'dw' => $this->max_dw, 'rank' => 0); } } else { $my_update['score_tale'] = $my_arena_info['score_tale'] + 1; $max_dw_log = true; $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $loser_role_id, 'opp_name' => $opp_name, 'result' => 1, 'star' => 0, 'dw' => $this->max_dw, 'rank' => $my_update['score_tale']); } } elseif ($loser_role_id == $player_id) { //失败 $oopp_player_id = $winner_role_id; $my_update['win'] = 0; if ($my_arena_info['dw'] < $this->max_dw) { //传说的不做加分数操作 if ($my_arena_info['dw'] >= 3 && $my_arena_info['score'] > 0) { $my_update['score'] = $my_arena_info['score'] - 1; $new_dw_info = $this->cal_dw($my_update['score'], $dw_configs); if ($my_arena_info['dw'] == 3 && $new_dw_info['dw'] < 3) { #保底黄金段位 $my_update['dw'] = $my_arena_info['dw']; $my_update['dw_lv'] = $my_arena_info['dw_lv']; $my_update['dw_star'] = 1; $my_update['score'] = $my_arena_info['score'] < 36 ? 36 : $my_arena_info['score']; #分数恢复 否则 会出现在这个段位扣分的情况 $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $winner_role_id, 'opp_name' => $opp_name, 'result' => 0, 'star' => 0, 'dw' => $my_update['dw'], 'rank' => 0); } else { $my_update['dw'] = $new_dw_info['dw']; $my_update['dw_lv'] = $new_dw_info['dw_lv']; $my_update['dw_star'] = $new_dw_info['dw_star']; if ($new_dw_info['dw'] != $my_arena_info['dw']) { $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $winner_role_id, 'opp_name' => $opp_name, 'result' => 0, 'star' => 1, 'dw' => 0, 'rank' => 0); } else { $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $winner_role_id, 'opp_name' => $opp_name, 'result' => 0, 'star' => 0, 'dw' => $new_dw_info['dw'], 'rank' => 0); } } } else { $my_update['score'] = $my_arena_info['score']; $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $winner_role_id, 'opp_name' => $opp_name, 'result' => 0, 'star' => 0, 'dw' => 0, 'rank' => 0); } } else { #如果是传说是不要降级 对手不是传说 就要吧传说这个人替换掉 if ($opp_dw < $this->max_dw) { $my_update['dw'] = $this->max_dw - 1; $dw_config = $dw_configs[$my_update['dw']]; $my_update['dw_lv'] = $dw_config['max_level']; $my_update['dw_star'] = $dw_config['star_max_level'] - 1; $my_update['score'] = $my_arena_info['score'] - 1; $del_tale = true; $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $winner_role_id, 'opp_name' => $opp_name, 'result' => 0, 'star' => 0, 'dw' => $my_update['dw'], 'rank' => 0); } else { # $my_update['score_tale'] = $my_arena_info['score_tale'] - 1; if ($my_update['score_tale'] < 0) { $my_update['score_tale'] = 0; } $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $winner_role_id, 'opp_name' => $opp_name, 'result' => 0, 'star' => 0, 'dw' => $this->max_dw, 'rank' => 0); } } } #胜利发奖 if ($my_update['dw'] > $my_arena_info['dw'] && $my_arena_info['dw_reward_flag'][$my_update['dw']] == 0) { $dw_config = $dw_configs[$my_update['dw']]; $my_arena_info['dw_reward_flag'][$my_update['dw']] = 1; //可领取 $my_update['dw_reward_flag'] = $my_arena_info['dw_reward_flag']; $synData['dw'] = $my_update['dw']; $new_template = Cache_CrossArenaNewsTemplate::getInstance()->get_template(1, 1); if (!empty($new_template)) { $arena_news[] = str_replace(array('{$name}', '{$dw}', '{$dw_name}'), array($my_arena_info['name'], $my_update['dw'], $dw_config['name']), $new_template['template']); } } $synData = array(); if ($my_update['dw'] != $my_arena_info['dw']) { $synData['dw'] = $my_update['dw']; } if ($my_update['dw_lv'] != $my_arena_info['dw_lv']) { $synData['dw_lv'] = $my_update['dw_lv']; } if ($my_update['dw_star'] != $my_arena_info['dw_star']) { $synData['dw_star'] = $my_update['dw_star']; } $synData['score'] = $my_update['score']; $result = true; $this->start_trans(); // Com_Log::write("deal_result.".$player_id,"my_update:".var_export($my_update,true)); $result = $this->get_data('KFArena')->set_kf_arena_info($player_id, $my_update); if ($result) { $result = $this->get_data('KFArena')->add_fight_log($my_fight_log); } $out_reward = array('result' => $win, 'levels' => $my_update['dw'] . ":" . $my_update['dw_lv'] . ":" . $my_update['dw_star'], 'base_reward' => '', 'other_reward' => '', 'rank' => 0, 'old_levels' => $old_levels, 'old_rank' => $old_rank, 'score_tale' => $my_update['score_tale']); if ($result) { $reward = ""; $dw_config = $dw_configs[$my_update['dw']]; if ($win == 1) { $rewards = $this->format_level_reward($dw_config['win_reward']); if (!empty($rewards)) { $reward = $rewards[$my_update['dw_lv']]; } } else { $rewards = $this->format_level_reward($dw_config['fail_reward']); if (!empty($rewards)) { $reward = $rewards[$my_update['dw_lv']]; } } $send_reward = array(); #vip特权奖励加层 $left_time = $this->get_game('VipSpecial')->get_left_time($player_id); if ($left_time) { $vip_level_config = Cache_VipLevelLimit::getInstance()->get_limit_info($player_info['privilege_level'], 10065); } else { $vip_level_config = array(); } if ($vip_level_config) { $vip_addtion = $vip_level_config['max_times'] / 10000; } $full_reward_flag = $this->get_reward_rate(); if (!empty($reward)) { $send_reward = $this->format_reward($reward['info'], $full_reward_flag, $vip_addtion); } if ($my_update['win'] > 10) { $up_win = 10; } else { $up_win = $my_update['win']; } $win_reward = Cache_CrossArenaWinReward::getInstance()->get_win_reward($up_win); if ($win_reward) { $win_send_reward = $this->format_reward($win_reward['item'], 100, $vip_addtion); $send_reward = array_merge($send_reward, $win_send_reward); } if (!empty($send_reward)) { if ($send_mail) { $attachment = array(); foreach ($send_reward as $val) { $attachment[] = array('prop_id' => $val['item_id'], 'prop_num' => $val['item_num']); } $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(1201); $result = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 435); } else { $result = $this->get_game('Reward')->send_reward($player_id, $send_reward, array('cmd_id' => '435')); if ($result !== true) { $this->throw_error($result); } } } } if ($result) { $this->commit(); $this->get_data('PlayerDailyTime')->add_used_time($player_id, 'kf_arena_use_times'); //增加挑战次数 //找回资源埋点 $this->get_game('GetBackCurrency')->add_function_day_times($player_id, 6); $this->get_game('PlayerFunc')->sync_func_tips($player_id, 1040); // $this->get_data('KFArena')->del_fight_lock($player_id);#删除战斗锁 // $out_reward['base_reward'] = isset($reward['info']) ? $reward['info'] : "" ; //基础奖励 // $result = $this->get_data('KFArena')->add_fight_cd($player_id); 先不记cd 测试完开放 if ($send_mail == 0) { $this->get_game('Reward')->add_reward_log(); $out_reward_log = $this->get_game('Reward')->get_out_reward(); if ($out_reward_log) { foreach ($out_reward_log as $item_id => $item_num) { if (empty($out_reward['base_reward'])) { $out_reward['base_reward'] .= "{$item_id}:{$item_num}"; } else { $out_reward['base_reward'] .= "|{$item_id}:{$item_num}"; } } } } else { if ($send_reward) { foreach ($send_reward as $val) { if (isset($val['item_id']) && $val['item_id'] > 0) { if (empty($out_reward['base_reward'])) { $out_reward['base_reward'] .= "{$val['item_id']}:{$val['item_num']}"; } else { $out_reward['base_reward'] .= "|{$val['item_id']}:{$val['item_num']}"; } } } } } #存入排行 $rank_data = array(); $rank_data['player_id'] = $player_id; $rank_data['player_name'] = $player_info['name']; $rank_data['career_type'] = $player_info['career_type']; $rank_data['player_level'] = $player_info['level']; $rank_data['union_name'] = $player_info['union_name']; $rank_data['sum_fpower'] = $player_info['sum_fpower']; $rank_data['server_id'] = SERVER_ID; $rank_data['server_name'] = SHOW_TITLE; $rank_data['dw'] = $my_update['dw']; $rank_data['dw_lv'] = $my_update['dw_lv']; $rank_data['dw_star'] = $my_update['dw_star']; $rank_data['score'] = $my_update['score']; $rank_data['score_tale'] = $my_update['score_tale']; $rank_data['update_time'] = time(); $this->get_cross('KFArena')->set_kf_arena_rank($player_id, $rank_data); //存入排行 #如果打败 自己再传说排行 把自己冲传说排行删除 if ($del_tale) { $this->get_cross('KFArena')->del_from_tale_rank($player_id); } #如果自己升入传说排行 把自己从普通排行删除 if ($del_normal) { $this->get_cross('KFArena')->del_from_normal_rank($player_id); } $out_reward['rank'] = $this->get_cross('KFArena')->get_my_rank($player_id, $my_update['dw']); $this->get_data('KFArena')->set_kf_arena_info($player_id, array('rank' => $out_reward['rank'])); if ($max_dw_log) { #传说升级日志特殊处理下 放到commint后 if ($out_reward['rank'] > $old_rank) { $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $oopp_player_id, 'opp_name' => $opp_name, 'result' => 1, 'star' => 0, 'dw' => $this->max_dw, 'rank' => $out_reward['rank']); } else { $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $oopp_player_id, 'opp_name' => $opp_name, 'result' => 1, 'star' => 0, 'dw' => $this->max_dw, 'rank' => 0); } $this->get_data('KFArena')->add_fight_log($my_fight_log); } #日志 Log_KfArena::getInstance()->add_kf_arena_log($player_id, $player_info['level'], $player_info['vip'], $player_info['privilege_level'], $my_update['dw'], $my_update['dw_lv'], $my_update['dw_star'], $my_update['score'], $my_update['score_tale'], $out_reward['rank'], $front_dw, $front_dw_lv, $front_dw_star, $front_score, $front_score_tale, $front_rank); Protocol_Player::p2c_part_update($player_id, $synData); if ($my_update['win'] > 0 && $my_update['win'] % 5 == 0) { $new_template = Cache_CrossArenaNewsTemplate::getInstance()->get_template(2, $my_update['win']); if (!empty($new_template)) { $arena_news[] = str_replace('{$name}', $my_arena_info['name'], $new_template['template']); } } if (!empty($arena_news)) { foreach ($arena_news as $news) { $this->get_cross('KFArena')->add_news($news); } Protocol::input($player_id, 8, 12, 1215, array(0 => $arena_news)); } // Com_Log::write("kfarena_out_reward.".$player_id,var_export($out_reward,true)); if (!$send_mail) { Protocol::input($player_id, 8, 12, 1217, $out_reward); //推奖励面板 } $this->get_game('PlayerAchieve')->async_trigger_achieve_target($player_id, 21, $my_update['dw'], 2); if ($my_update['win'] > 0) { $this->get_game('PlayerAchieve')->async_trigger_achieve_target($player_id, 22, $my_update['win'], 5); } $this->get_game('DailyBoon')->async_trigger_daily_boon_task($player_id, 3003, 1, 1); $this->get_game('UnionAchieve')->async_trigger_union_achieve($player_id, 10, $my_update['dw'], 2); #引导任务 $this->get_game('TaskTrigger')->async_trigger_guide_task($player_id, 17, 1); // // 竞技场: // 1:{玩家名} 在竞技场中已经取得{n}连胜!越战越勇,无人能挡! // $val:几连胜 if ($my_update['win'] > 0) { $replace_info = array(array("rep_type" => 0, "rep_val" => $player_id), array("rep_type" => 7, "txt" => $my_update['win'])); $this->get_game('SystemNotice')->push_sys_notice($player_id, 1060, 0, $replace_info, $my_update['win']); } // 2:祝贺 {玩家名} 在竞技场中已经取得{}段位!宛如天神下凡,实力超群! // $val:几段位 if ($my_update['dw'] > $my_arena_info['dw'] && $my_arena_info['dw_reward_flag'][$my_update['dw']] == 0) { $replace_info = array(array("rep_type" => 0, "rep_val" => $player_id), array("rep_type" => 7, "txt" => $dw_configs[$my_update['dw']]['name'])); $this->get_game('SystemNotice')->push_sys_notice($player_id, 1061, 0, $replace_info, $my_update['dw']); } } else { $this->rollback(); $this->throw_error('10104'); } // Com_Log::log("=============[{$player_id}] end ==================",'deal_result',1); return $result; }
public function send_lottery_mail($player_id, $phrase_id, $rewards) { $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($phrase_id); if (empty($rewards)) { return 0; } $content = $phrase_config['content']; if ($phrase_id == 2002) { $content = sprintf($content, date('Y年m月d日'), $rewards[0]['prop_num']); } else { $content = sprintf($content, date('Y年m月d日')); } $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $content, $rewards, $phrase_config['sender'], 1, 11162, 0); $this->write_check($re); return true; }
public function send_mail($player_id, $rewards) { $player_id = intval($player_id); $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(5); if (empty($rewards)) { return 0; } $boxname = Cache_Prop::getInstance()->get_prop_info($rewards[0]['item_id']); $content = sprintf($phrase_config['content'], $boxname['name']); $attachment = array(); foreach ($rewards as $val) { $attachment[] = array("prop_id" => $val['item_id'], "prop_num" => $val['item_num']); } $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $content, $attachment, $phrase_config['sender'], 2, 491, 0); $this->write_check($re); }
/** * 结束 * @param int $sid 活动id * @param array $roles 玩家 * @param array $mails 是否邮件发送奖励 * @param int $kill_num 击杀boss数 * @param int $time 时间 * @param int $owner_id 房主 * @param int $for_ranklist 0 结算,1 算排名 */ public function game_over($sid, $roles, $mails, $kill_num, $time, $owner_id = 0, $for_ranklist = 0, $roles_dmg = array(), $arr_kill_cnt = array(), $friends) { $sid = intval($sid); $kill_num = intval($kill_num); $time = intval($time); //排行榜处理 if ($for_ranklist) { //Com_Log::write('zzzwanghui','roles:'.json_encode($roles).'-kill_num:'.$kill_num.'-time:'.$time.'-owner:'.$owner_id.'-dmg:'.json_encode($roles_dmg).'-kills:'.json_encode($arr_kill_cnt)); if (!empty($roles) && count($roles) == count($arr_kill_cnt) && count($roles_dmg) == count($roles)) { $players = array(); $i = 0; $owner_name = ''; foreach ($roles as $player_id) { if ($player_id > 0) { $temp = $this->get_data('Player')->get_player_info($player_id, array('player_id', 'name', 'career_type', 'level')); $player_info = array('player_id' => $temp['player_id'], 'name' => $temp['name'], 'career_type' => $temp['career_type'], 'level' => $temp['level'], 'sum_fpower' => $roles_dmg[$i], 'kill_num' => $arr_kill_cnt[$i]); $players[] = $player_info; if ($player_id == $owner_id) { $owner_name = $temp['name']; } #添加好友亲密度 $this->get_game('Athena')->add_firend_point($player_id, $friends[$i]); } $i++; } $data = array('owner_id' => $owner_id, 'players' => json_encode($players), 'kill_num' => $kill_num, 'time' => $time, 'reptime' => time()); $this->get_data('Trial')->update_team_info($data); } return true; } //参数判断 if (!$sid || !is_array($roles) || !is_array($mails)) { $this->throw_error(10107, 6010010); } $p_num = count($roles); if ($p_num != count($mails)) { $this->throw_error(10107, 6010014); } //奖励 $buff = Cache_Trial::getInstance()->get_buff($sid, $kill_num); $rewards = Cache_Trial::getInstance()->get_trial_reward(); //次数 $set = Cache_ActivityHall::getInstance()->get_Activity_set($sid); if (!empty($set)) { $max_time = $set[0]['max_times']; } $record_info = $this->get_data('Trial')->get_record_info($sid); for ($i = 0; $i < $p_num; $i++) { $player_id = $roles[$i]; $used = $this->get_trial_remaining_count($player_id, $sid); if ($used > $max_time) { //次数超过限制 if (!$mails[$i]) { //在线 if ($record_info) { $arr_player = $this->get_data('Player')->get_player_info($record_info['player_id'], array('name', 'career_type')); $record_info['player_name'] = $arr_player['name']; $record_info['career_type'] = $arr_player['career_type']; unset($record_info['add_time']); } $res = array(); $res['sid'] = $sid; $res['kill_num'] = $kill_num; $res['time'] = $time; $res['reward'] = array(); $res['new'] = 0; #是否创记录 $res['old_num'] = 0; $res['old_time'] = 0; $res['record'] = $record_info; $res['reward_id'] = 0; Protocol::input($player_id, 8, 11, 1142, $res); } } else { $new = 1; $p_info = $this->get_data('Player')->get_player_info($player_id, array('level', 'gm')); //只记录普通账号记录 if ($p_info['gm'] == 0 || $p_info['gm'] == 3) { $insert_data = array('sid' => $sid, 'player_id' => $player_id, 'kill_num' => $kill_num, 'time' => $time, 'add_time' => time()); if (0 == $i) { if (!$record_info || ($record_info['kill_num'] < $kill_num || $record_info['kill_num'] == $kill_num && $time < $record_info['time'])) { $record_info = array('sid' => $sid, 'player_id' => $player_id, 'kill_num' => $kill_num, 'time' => $time, 'add_time' => time()); $this->get_data('Trial')->update_record_info($sid, $record_info); } } $player_trial = $this->get_data('Trial')->get_player_info($player_id, $sid); if (!empty($player_trial) && isset($player_trial['player_id'])) { //更新记录 if ($player_trial['kill_num'] < $kill_num || $player_trial['kill_num'] == $kill_num && $time < $player_trial['time']) { $this->get_data('Trial')->update_player_info($player_id, $sid, $insert_data); $new = 1; } else { $new = 0; } } else { #添加记录 if ($insert_data['kill_num'] > 0) { $this->get_data('Trial')->update_player_info($player_id, $sid, $insert_data); } $player_trial['kill_num'] = 0; $player_trial['time'] = 0; } } if (!($reward = Cache_Trial::getInstance()->get_reward($p_info['level'], $rewards))) { $this->throw_error(10222, 6010011); } if ($record_info) { $arr_player = $this->get_data('Player')->get_player_info($record_info['player_id'], array('name', 'career_type')); $record_info['player_name'] = $arr_player['name']; $record_info['career_type'] = $arr_player['career_type']; unset($record_info['add_time']); } $res = array(); $res['sid'] = $sid; $res['kill_num'] = $kill_num; $res['time'] = $time; $res['reward'] = array(); $res['new'] = $new; #是否创记录 $res['old_num'] = $player_trial['kill_num']; $res['old_time'] = $player_trial['time']; $res['record'] = $record_info; $reward_ids = explode('|', $reward); if ($reward_ids) { if ($kill_num) { foreach ($reward_ids as $value) { $temp = explode(':', $value); if (count($temp) > 1) { $temp_reward = array('type' => Cache_Currency::getInstance()->get_key($temp[0]), 'item_id' => $temp[0], 'item_num' => $temp[1] * $buff); array_push($res['reward'], $temp_reward); } else { $this->throw_error(10222, 6010015); } } } if ($mails[$i]) { //下线发邮件 if ($kill_num) { $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(4071); $content = sprintf($phrase_config['content'], $kill_num); $attachment = array(); foreach ($res['reward'] as $value) { $attachment[] = array("prop_id" => $value['item_id'], "prop_num" => $value['item_num']); } $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $content, $attachment, $phrase_config['sender'], 1, 1142, 0); } } else { if ($kill_num) { $result = $this->get_game('Reward')->send_reward($player_id, $res['reward'], array('cmd_id' => 1142, 'bind_flag' => 0), 1); if (true === $result) { $this->get_game('Reward')->add_reward_log(); //记录日志 $res['reward_id'] = 1; } else { $this->throw_error(10110, 6010009); } } else { $res['reward_id'] = 0; } Protocol::input($player_id, 8, 11, 1142, $res); } # 引导任务埋点 $this->get_game('TaskTrigger')->async_trigger_guide_task($player_id, 37, 1); //添加活跃度 $this->get_game('DailyBoon')->async_trigger_daily_boon_task($player_id, 3012, 1); } else { $this->throw_error(10222, 6010012); } } } }
/** * 用途:获取结算奖励 + 484 * @param $player_list和score_list已按降序排序过 * @return array */ public function get_reward($player_id, $map_id, $player_list, $score_list, $state_list, $looted_scores) { if (empty($map_id) || empty($player_list) || empty($score_list) || empty($state_list) || !is_array($player_list) || !is_array($score_list) || !is_array($state_list)) { $this->throw_error('10107'); //参数错误! } # 获取排名奖励列表,已按排名排好序 $rank_reward_list = Cache_GrabMine::getInstance()->get_rank_reward_list($map_id); if (empty($rank_reward_list)) { $this->throw_error('180003'); # 抢矿副本排位奖励信息配置错误 } $rank_reward_omit = $rank_reward_list[count($rank_reward_list) - 1]; # 超过已配置最大排位的奖励,使用最大排位计算 $involved_num = count($player_list); # 参与人数 for ($i = 0; $i < $involved_num; $i++) { $rank_reward_info = empty($rank_reward_list[$i]) ? $rank_reward_omit : $rank_reward_list[$i]; $player_info = $this->get_data('Player')->get_player_info($player_list[$i], array('player_id', 'level', 'vip', 'privilege_level')); if (empty($player_info['player_id'])) { # 可能是跨服造成的其它服玩家 #Com_Log::debug_write('xgame.all.error', "Grabmine error: unvalid player: ".$player_list[$i]); #$this->throw_error('20002'); # 获取玩家信息失败 continue; } # 获取vip对奖励的加成信息,只加成非道具奖励 $vip_add_coeff = Com_Util::get_vip_special_reward_add_coeff(10036, $player_info['vip'], $player_info['privilege_level'], $player_info['player_id']); # 获取基础奖励信息 $base_reward_info = Cache_GrabMine::getInstance()->get_base_reward_info($player_info['level']); if (empty($base_reward_info) || empty($base_reward_info['base_reward'])) { $this->throw_error('180005'); # 抢矿副本基础奖励信息配置错误 } if (!empty($state_list[$i])) { # 在线直接发奖 $reward = array(); $reward_detail_base = $this->get_game('Reward')->get_reward_detail_other_way($base_reward_info['base_reward'], $rank_reward_info['reward_add'], 1); $this->get_game('Reward')->gen_reward_array($reward_detail_base, $reward, 1 + $vip_add_coeff); $reward_detail_rank = $this->get_game('Reward')->get_reward_detail($rank_reward_info['reward_item'], 1); $this->get_game('Reward')->gen_reward_array($reward_detail_rank, $reward); $re = $this->get_game('Reward')->send_reward($player_list[$i], $reward, array('cmd_id' => '484'), 1); $this->write_check_strict($re, 3010303); # 该方法会自动推送843协议告知前端显示奖励信息,会调用prop_806协议通知道具变更,调用p2c_part_update通知人物信息变更 $ret = $this->get_game('Reward')->add_reward_log(); $reward_fmt = array(); if (!empty($reward)) { foreach ($reward as $r) { if (empty($r['item_id'])) { # 虚拟货币 $item_idx = Cache_Currency::getInstance()->get_index($r['type']); $reward_fmt[] = array('type' => $item_idx, 'item_id' => $item_idx, 'item_num' => $r['item_num']); } else { $reward_fmt[] = array('type' => $r['item_id'], 'item_id' => $r['item_id'], 'item_num' => $r['item_num']); } } } # 告知Flash排位奖励 Protocol::input($player_list[$i], 8, 11, 1126, array('rank' => $i + 1, 'rank_reward' => $reward_fmt)); $final_reward_detail = $this->get_game('Reward')->get_reward_detail_by_reward($reward); Com_Log::debug_write('xgame.grabmine', $player_list[$i] . "\tget_reward directly\t" . $player_info['level'] . "\t" . $player_info['vip'] . "\t" . $vip_add_coeff . "\t" . json_encode($final_reward_detail)); } else { # 不在线的发邮件 # 生成奖励邮件附件信息 $attachment = array(); $reward_detail_base = $this->get_game('Reward')->get_reward_detail_other_way($base_reward_info['base_reward'], $rank_reward_info['reward_add'], 1); foreach ($reward_detail_base as $item_idx => $item_num) { $item_num = ceil($item_num * (1 + $vip_add_coeff)); $attachment[] = array("prop_id" => $item_idx, "prop_num" => $item_num); } $reward_detail_rank = $this->get_game('Reward')->get_reward_detail($rank_reward_info['reward_item'], 1); foreach ($reward_detail_rank as $item_idx => $item_num) { $item_num = ceil($item_num * (1 + $vip_add_coeff)); $attachment[] = array("prop_id" => $item_idx, "prop_num" => $item_num); } # 邮件发送 $day = date("n.j", $this->current_time); $hour = date("G:i", $this->current_time); $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(9); $content = sprintf($phrase_config['content'], $day, $hour, $rank_reward_info['rank_id']); $re = $this->get_game('Mail')->async_trigger_mail($player_list[$i], $phrase_config['title'], $content, $attachment, $phrase_config['sender'], 1, 484); $final_reward_detail = array(); foreach ($attachment as $val) { $final_reward_detail[$val['prop_id']] += $val['prop_num']; } Com_Log::debug_write('xgame.grabmine', $player_list[$i] . "\tget_reward mail\t" . $player_info['level'] . "\t" . $player_info['vip'] . "\t" . $vip_add_coeff . "\t" . json_encode($final_reward_detail)); } # 更新水晶争夺参与次数[结算完算参与] $re = $this->get_data('PlayerDailyTime')->add_used_time($player_info['player_id'], 'grabmine_involved_num', 1); $left_num = $this->get_grabmine_remain_involved_num($player_info['player_id']); if ($left_num < 0) { $left_num = 0; } Protocol_Player::p2c_part_update($player_info['player_id'], array('mineral_remaining_count' => $left_num)); $this->write_check($re, 3010363); //找回资源埋点 $this->get_game('GetBackCurrency')->add_function_day_times($player_info['player_id'], 8); # -------------------------------------------------------------------- # 维护一个全榜玩家积分累计值排名的有序集合[积分做score] # -------------------------------------------------------------------- if (!empty($looted_scores[$i])) { $re = $this->redis()->zsets_incr($this->grabmine_score_acc_sorted_set, $looted_scores[$i], $player_info['player_id']); Com_Log::write('xgame.grabmine', $this->grabmine_score_acc_sorted_set . "|" . $looted_scores[$i] . "|" . $player_info['player_id']); $this->write_check($re, 3010417); # 成就相关埋点: 获取当前排名并埋点触发成就 $current_rank = $this->get_rank($player_info['player_id']); if (!empty($current_rank)) { $this->get_game('PlayerAchieve')->async_trigger_achieve_target($player_info['player_id'], 45, $current_rank, 3); } } # -------------------------------------------------------------------- # 活动日志记录 # -------------------------------------------------------------------- $event_log_info = array('log_type' => 'grabmine', 'player_id' => $player_info['player_id'], 'reg_time' => $this->current_time, 'map_id' => $map_id, 'score' => $score_list[$i], 'rank' => $i + 1, 'state' => $state_list[$i]); $this->get_game('Event')->async_deal_event_log($event_log_info); # -------------------------------------------------------------------- # 游戏日志记录 # -------------------------------------------------------------------- $log_info = array('player_id' => $player_info['player_id'], 'player_level' => $player_info['level'], 'vip_level' => $player_info['vip'], 'vip_special_level' => $player_info['privilege_level'], 'add_time' => $this->current_time, 'map_id' => $map_id, 'score' => $score_list[$i], 'rank' => $i + 1, 'state' => $state_list[$i], 'reward' => json_encode($final_reward_detail)); Log_Grabmine::getInstance()->add_log($log_info); } # 记录行为,TODO: 考虑更详细的日志信息记录 $log_content = "{$player_id}\t" . "get_reward\t" . "{$map_id}\t" . json_encode($player_list) . "\t" . json_encode($score_list); Com_Log::debug_write('xgame.grabmine', $log_content); }
/** * 发新道具的接口 如果道具叠加 可以吧道具拆多个发 给send_prop_auto_overlay方法调用 * @param $player_id * @param $prop_id * @param $prop_num * @param $arrLogs 返回 道具日志 * @param null $arrPropConfig 道具配置信息 * @param null $channel 0包裹满不发邮件 1 包裹满发邮件 * @return bool|string */ protected function send_prop_to_player($player_id, $prop_id, $prop_num, &$arrLogs, $cmd_id, $arrPropConfig = null, $channel = 0, $player_info = null) { if (!$arrPropConfig) { $arrPropConfig = Cache_Prop::getInstance()->get_prop_info($prop_id); } if (!$arrPropConfig) { # 对于偶发性的奖励发送报道具配置出错问题添加调试日志 // Com_Log::write('xgame.debug', "Error occured in " . __CLASS__ . ":\t$player_id\t$prop_id\t$prop_num\t".json_encode($arrPropConfig)); $this->throw_error('80003', '101800248'); //道具配置出错,请联系客服! } if ($arrPropConfig['max_lap_num'] > 0) { $new_num = ceil($prop_num / $arrPropConfig['max_lap_num']); $rest_prop_num = $prop_num; $bag_pos = $this->get_empty_pos($player_id, $new_num, 1, $player_info); // Com_Log::log($bag_pos,"pos.log",1); if (!$bag_pos) { if ($channel == 1) { $phrase_id = 100000 + $cmd_id; $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($phrase_id); if (empty($phrase_config)) { $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(1); } $attachment = array(); if ($arrPropConfig['type'] == 1) { if (!isset($arrPropConfig['base_attr'])) { $arrPropConfig = $this->get_equip_attr($arrPropConfig); } #TODO 包裹满的时候装备属性增加到包裹前生产好 $attachment[] = array('prop_id' => $prop_id, 'prop_num' => $prop_num, 'config' => $arrPropConfig); } else { $attachment[] = array('prop_id' => $prop_id, 'prop_num' => $prop_num); } $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, $cmd_id); // $this->throw_error("80034");//包裹已满,已发送到邮件! $arrPropConfig["item_num"] = $prop_num; $arrPropConfig['send_mail'] = 1; $arrLogs[] = $arrPropConfig; return true; } else { $this->throw_error("80001"); //包裹已满! } } for ($i = 0; $i < $new_num; $i++) { $arrPropConfig['level'] = $arrPropConfig['level']; $arrPropConfig['bind_flag'] = $arrPropConfig['bind_flag']; $arrPropConfig['grid'] = $bag_pos[$i]; $arrPropConfig['item_position'] = 1; $arrPropConfig['from_item_position'] = 0; $old_item_num = $arrPropConfig["item_num"]; $arrPropConfig["item_num"] = $rest_prop_num > $arrPropConfig['max_lap_num'] ? $arrPropConfig['max_lap_num'] : $rest_prop_num; $rest_prop_num = $rest_prop_num - $arrPropConfig["item_num"]; $res = $this->add_player_prop($player_id, $arrPropConfig, $cmd_id); if (!$res) { $this->throw_error('80002'); } // $arrPropConfig['star_level'] = $res["star_level"]; // $arrTempLogs = array_merge($arrPropConfig,$res); // $arrPropConfig['player_prop_id'] = $res['player_prop_id']; // $arrPropConfig['prop_id'] = $res['sid']; // $arrPropConfig['item_num'] = $res["item_num"]; // $arrPropConfig['star_level'] = $res["star_level"]; // $arrPropConfig['base_attr'] = $res["base_attr"]; // $arrPropConfig['addition_attr'] = $res["addition_attr"]; // $arrPropConfig['equip_view'] = $res["equip_view"]; $arrLogs[] = $res; unset($arrTempLogs); } } else { $bag_pos = $this->get_empty_pos($player_id, $prop_num, 1, $player_info); // Com_Log::log($bag_pos,"pos.log",1); if (!$bag_pos) { if ($channel == 1) { $phrase_id = 100000 + $cmd_id; $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($phrase_id); if (empty($phrase_config)) { $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(1); } $attachment = array(); if ($arrPropConfig['type'] == 1) { if (!isset($arrPropConfig['base_attr'])) { $arrPropConfig = $this->get_equip_attr($arrPropConfig); } #TODO 包裹满的时候装备属性增加到包裹前生产好 $attachment[] = array('prop_id' => $prop_id, 'prop_num' => $prop_num, 'config' => $arrPropConfig); } else { $attachment[] = array('prop_id' => $prop_id, 'prop_num' => $prop_num); } $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, $cmd_id); // $this->throw_error("80034");//包裹已满,已发送到邮件! $arrPropConfig["item_num"] = $prop_num; $arrPropConfig['send_mail'] = 1; $arrLogs[] = $arrPropConfig; return true; } else { $this->throw_error("80001"); //包裹已满! } } for ($i = 0; $i < $prop_num; $i++) { $arrPropConfig['level'] = $arrPropConfig['level']; $arrPropConfig['bind_flag'] = $arrPropConfig['bind_flag']; $arrPropConfig['grid'] = $bag_pos[$i]; $arrPropConfig['item_position'] = 1; $arrPropConfig["item_num"] = 1; $res = $this->add_player_prop($player_id, $arrPropConfig, $cmd_id, $player_info); if (!$res) { $this->throw_error('80002'); } // $arrPropConfig['star_level'] = $res["star_level"]; // $arrTempLogs = array_merge($arrPropConfig,$res); $arrLogs[] = $res; } } return true; }
public function deal_rank_reward($grab_domain_conf = array()) { if (!$grab_domain_conf) { $grab_domain_conf = Cache_UnionGrabDomain::getInstance()->get_base_conf(); } //周几 $week = $this->get_week(); if ($week == $grab_domain_conf['week_end']) { $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(9095); $data = $this->get_data('UnionGrabDomain')->get_rank_list_by_multisort(); if ($data) { $rank = 1; $result = 1; $objUnionPlayerData = $this->get_data('UnionPlayer'); foreach ($data as $union_info) { if (!$union_info['status']) { $rank_reward_str = Cache_UnionGrabDomain::getInstance()->get_union_rank_reward($rank); $award_rank_add = Cache_UnionGrabDomain::getInstance()->get_union_rank_add_conf($rank); $award_rank_add_str = $award_rank_add['rank_add']; $reward_detail = $this->get_game('Reward')->get_reward_detail_other_way($rank_reward_str, $award_rank_add_str, 1); $union_exp = 0; $fund = 0; foreach ($reward_detail as $key => $value) { if (9 == $key) { $union_exp = $value; } if (10 == $key) { $fund = $value; } } $create_player_id = $this->get_data('UnionInfo')->get_union_info($union_info['union_id'], 'create_player_id'); $this->start_trans(); $result = $this->get_data('UnionInfo')->update_union_info($union_info['union_id'], array('fund' => '+' . $fund)); $arr_union_reward = array(); $arr_union_reward[] = array("type" => "union_exp", "item_id" => 9, "item_num" => $union_exp); $success_add_exp = $this->get_game('UnionReward')->send_reward($create_player_id, $arr_union_reward, array("cmd_id" => 2601)); if ($result) { $result = $this->get_data('UnionGrabDomain')->set_week_union_info($union_info['union_id'], array('status' => 1)); } if (!$result) { $this->rollback(); break; } $this->commit(); if ($success_add_exp) { $this->get_game('UnionReward')->add_union_reward_log(); } //发邮件 $content = sprintf($phrase_config['content'], $rank, $success_add_exp, $fund); $unionPlayerList = $objUnionPlayerData->get_union_player_info($union_info['union_id']); foreach ($unionPlayerList as $player_id => $player_list) { $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $content, array(), $phrase_config['sender'], 2, 2601, 0); } } $rank++; } } } }
/** * 挂机领取奖励 * @param unknown $add_exp * @param unknown $arr_item_id * @param unknown $arr_item_num */ public function auto_pve_add_reward($player_id, $add_exp, $arr_item_id, $arr_item_num) { $reward = array(); if (Com_Array::is_good_arr($arr_item_id)) { foreach ($arr_item_id as $key => $item_id) { $item_num = $arr_item_num[$key]; if ($item_num > 0) { $reward[] = array('type' => Cache_FbLoot::getInstance()->get_item_key($item_id), 'item_id' => $item_id, 'item_num' => $item_num); } } } if ($add_exp) { $reward[] = array('type' => Cache_FbLoot::getInstance()->get_item_key(1), 'item_id' => 1, 'item_num' => $add_exp); } if (!empty($reward)) { $result = $this->get_game('Reward')->send_reward($player_id, $reward, array('cmd_id' => '771')); if ($result !== true) { $attachment = array(); foreach ($reward as $prop) { $attachment[] = array("prop_id" => $prop['item_id'], "prop_num" => $prop['item_num']); } $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(11); $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 771); Com_Log::debug_write('auto_pve_add_reward', "player_id={$player_id},fail=" . json_encode($reward)); $this->throw_error(80034); return false; } Com_Log::debug_write('auto_pve_add_reward', "player_id={$player_id},sucess=" . json_encode($reward)); $this->get_game('Reward')->add_reward_log(true); } }
public function send_mail_to_player($player_id, $vip_level) { $phrase_id = 0; if ($vip_level == 6) { $phrase_id = 8007; $func_id = 1290; } elseif ($vip_level == 10) { $phrase_id = 8008; $func_id = 1291; } if ($phrase_id > 0) { $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($phrase_id); $content = $phrase_config['content']; $attachment = array(); $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $content, $attachment, $phrase_config['sender'], 1, 2016, 0); $this->write_check($re); $func_data = array(); $func_data[0][$func_id] = array('operate' => 1, 'func_id' => $func_id, 'open' => 1, 'guide' => 0, 'cd' => 0, 'tip' => 1); Protocol::input($player_id, 8, 7, 741, $func_data); Protocol::out(); } }
/** * 夺宝战斗结果 * @param unknown $player_id * @param unknown $battle_seq * @param unknown $winner_player_id * @param unknown $loser_player_id */ public function battle_result($player_id, $battle_seq, $winner_player_id, $loser_player_id) { $battle_seq = intval($battle_seq); $winner_player_id = intval($winner_player_id); $loser_player_id = intval($loser_player_id); $this->start_trans(); $grab_fail_award = ""; $get_piece_id = ""; $battle_result = 0; $grab_result = 0; $opponent_player_id = $winner_player_id; $phrase_id = 0; $player_info = array(); $opponent_player_info = array(); if ($winner_player_id == 0 && $loser_player_id == 0) { $battle_id_info = $this->get_data("GrabTreasure")->get_battle_id_info($battle_seq); $player_id = $battle_id_info['player_id']; $opponent_player_id = $battle_id_info['opponent_player_id']; $player_info = $this->get_data('Player')->get_player_info($player_id, array("sum_fpower", "is_dummy", "name", "vip", "privilege_level", "level")); $opponent_player_info = $this->get_cross("GrabTreasure")->get_player_info($opponent_player_id, array("sum_fpower", "is_dummy", "name", "vip", "privilege_level", "level")); if (empty($opponent_player_info)) { $opponent_player_info = $this->get_data('Player')->get_player_info($opponent_player_id, array("sum_fpower", "is_dummy", "name", "vip", "privilege_level", "level")); } Com_Log::debug_write('async_trigger_battle_test', "player_id={$player_id},{$player_info['sum_fpower']}={$opponent_player_info['sum_fpower']}"); if ($player_info['sum_fpower'] > $opponent_player_info['sum_fpower']) { $winner_player_id = $player_id; $loser_player_id = $opponent_player_id; $phrase_id = 16; } else { $winner_player_id = $opponent_player_id; $loser_player_id = $player_id; $phrase_id = 17; } } if ($player_id == $winner_player_id) { $battle_result = 1; $opponent_player_id = $loser_player_id; if (empty($opponent_player_info) || empty($player_info)) { $player_info = $this->get_data('Player')->get_player_info($player_id, array("sum_fpower", "is_dummy", "name", "vip", "privilege_level", "level")); $opponent_player_info = $this->get_cross("GrabTreasure")->get_player_info($opponent_player_id, array("sum_fpower", "is_dummy", "name", "vip", "privilege_level", "level")); if (empty($opponent_player_info)) { $opponent_player_info = $this->get_data('Player')->get_player_info($opponent_player_id, array("sum_fpower", "is_dummy", "name", "vip", "privilege_level", "level")); } } #抢碎片成功概率 $rate_config = $this->get_battle_success_rate($player_info, $opponent_player_info); $random_get_piece_result = Com_Random::probability($rate_config['success_rate'], 100); #新手引导成功率100% $player_treasure_info = $this->get_cross("GrabTreasure")->get_grab_treasure($player_id, array("battle_log_id", "battle_need_piece_id", "battle_piece_quality", "quality_piece_ids", "is_guide")); if (intval($player_treasure_info["is_guide"]) == 1) { $random_get_piece_result = true; } $player_treasure_info["is_guide"] = 0; #抢碎片成功 if ($random_get_piece_result) { $grab_result = 1; $quality = $player_treasure_info["battle_piece_quality"]; $need_piece_id = $player_treasure_info["battle_need_piece_id"]; #挑战成功加碎片 $player_treasure_info["quality_piece_ids"][$quality][$need_piece_id] = $need_piece_id; #真实玩家 if ($opponent_player_info['is_dummy'] == 0) { $grab_piece_id = $need_piece_id; $opponent_treasure_info = $this->get_cross("GrabTreasure")->get_grab_treasure($opponent_player_id, array("quality_piece_ids")); #碎片存在 if (isset($opponent_treasure_info["quality_piece_ids"][$quality]) && !empty($opponent_treasure_info["quality_piece_ids"][$quality])) { if (isset($opponent_treasure_info["quality_piece_ids"][$quality][$need_piece_id])) { unset($opponent_treasure_info["quality_piece_ids"][$quality][$need_piece_id]); } else { $grab_piece_id = array_shift($opponent_treasure_info["quality_piece_ids"][$quality]); } #被抢者扣碎片 $re = $this->get_cross("GrabTreasure")->update_grab_treasure($opponent_player_id, $opponent_treasure_info); $this->write_check($re, 5010859); #抢者加碎片 $re = $this->get_cross("GrabTreasure")->update_grab_treasure($player_id, $player_treasure_info); $this->write_check($re, 5010867); #解除战斗中锁 $re = $this->get_cross("GrabTreasure")->clear_battle_lock($opponent_player_id); $this->write_check($re, 5010862); #抢碎片日志 #{0}抢走了你的{1},简直不能忍! $pieceConfig = Cache_GrabTreasurePiece::getInstance()->get_grab_treasure_piece($grab_piece_id); $arr_replace = array(array('rep_type' => 0, 'rep_val' => $player_id, 'txt' => $player_info['name']), array('rep_type' => 7, 'txt' => $pieceConfig['name'])); $msg = Language_Message::make_message(123001, $arr_replace); $add_log["player_id"] = $opponent_player_id; $add_log["grab_player_id"] = $player_id; $add_log["grab_piece_id"] = $grab_piece_id; $add_log["quality"] = $quality; $add_log["add_time"] = time(); $add_log['rep_content'] = $msg; $add_log["is_allow_grab"] = 1; $re = $this->get_cross("GrabTreasureLog")->add_grab_treasure_log($battle_seq, $add_log); $this->write_check($re, 5010876); } else { $grab_result = 0; } } else { $re = $this->get_cross("GrabTreasure")->update_grab_treasure($player_id, $player_treasure_info); $this->write_check($re, 5010992); } if (intval($player_treasure_info['battle_log_id']) > 0) { $data = $this->get_cross('GrabTreasureLog')->get_grab_treasure_log($player_id, $player_treasure_info['battle_log_id']); if (!empty($data)) { $data['is_allow_grab'] = 0; $re = $this->get_cross('GrabTreasureLog')->update_grab_treasure_info($player_id, $player_treasure_info['battle_log_id'], $data); $this->write_check($re, 5010983); } } } if ($grab_result == 0) { $need_piece_id = ''; $grab_fail_award = $rate_config['fail_award']; $reward = $this->get_format_reward($grab_fail_award); if ($phrase_id > 0) { $attachment = array(); foreach ($reward as $prop) { $attachment[] = array("prop_id" => $prop['item_id'], "prop_num" => $prop['item_num']); } $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($phrase_id); $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 1230); } else { $re = $this->get_game('Reward')->send_reward($player_id, $reward, array('cmd_id' => '1230'), 1); if ($re !== true) { $this->write_check($re, 5011077); } } } } $is_battle_lock = $this->get_cross("GrabTreasure")->get_battle_lock($opponent_player_id); if ($is_battle_lock) { $re = $this->get_cross("GrabTreasure")->clear_battle_lock($opponent_player_id); $this->write_check($re, 5010872); } $this->commit(); if ($battle_result == 1 && $grab_result == 0 && $phrase_id == 0) { $this->get_game('Reward')->add_reward_log(); } if ($battle_result == 0 && $phrase_id > 0) { $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($phrase_id); $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], array(), $phrase_config['sender'], 1); } #抢碎片增加日志 if ($grab_result == 1) { if ($opponent_player_info['is_dummy'] == 0) { Log_Common::getInstance()->add_prop_log($opponent_player_id, $opponent_player_info['level'], $opponent_player_info['vip'], $opponent_player_info['privilege_level'], 1231, 11, 0, $grab_piece_id, 1, $pieceConfig['name'], $quality, 1, 0, 1, '', 0); } $pieceConfig = Cache_GrabTreasurePiece::getInstance()->get_grab_treasure_piece($need_piece_id); Log_Common::getInstance()->add_prop_log($player_id, $player_info['level'], $player_info['vip'], $player_info['privilege_level'], 1231, 10, 0, $need_piece_id, 1, $pieceConfig['name'], $quality, 1, 0, 1, '', 0); if ($phrase_id > 0) { $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(18); $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], array(), $phrase_config['sender'], 1); } } $out = array('battle_result' => $battle_result, 'grab_result' => $grab_result, 'get_piece_id' => $need_piece_id, 'grab_fail_award' => $grab_fail_award); $this->get_game('PlayerFunc')->sync_func_tips($player_id, 1040); #日常任务埋点 $this->get_game('TaskTrigger')->async_trigger_task($player_id, 119, 119, 1); Protocol::input($player_id, 8, 12, 1230, $out); }
public function get_reward($player_id, $map_id, $player_list, $score_list, $state_list) { if (empty($map_id) || empty($player_list) || empty($score_list) || empty($state_list) || !is_array($player_list) || !is_array($score_list)) { $this->throw_error('10107'); //参数错误! } $involved_num = count($player_list); # 参与人数 for ($i = 0; $i < $involved_num; $i++) { $player_info = $this->get_data('Player')->get_player_info($player_list[$i], array('player_id', 'level', 'vip', 'privilege_level')); if (empty($player_info)) { Com_Log::debug_write('xgame.all.error', "Grabmine error: unvalid player: " . $player_list[$i]); #$this->throw_error('20002'); # 获取玩家信息失败 } # 获取排名奖励信息 $rank_reward_info = Cache_AthenaQuestion::getInstance()->get_rank_reward_info($i + 1, $player_info['level']); # 获取分值奖励信息 $score_reward_info = Cache_AthenaQuestion::getInstance()->get_score_reward_info($player_info['level']); if (empty($score_reward_info) || empty($score_reward_info['loop_score']) || empty($score_reward_info['score_reward'])) { $this->throw_error('190006'); # 雅典娜答题积分奖励信息配置错误 } $reward_detail_score = array(); $reward_detail_rank = array(); if (!empty($state_list[$i])) { # 在线直接发奖 $reward = array(); # 积分奖励 if (!empty($score_list[$i])) { # 积分不为0 $loop_num = intval($score_list[$i] / $score_reward_info['loop_score']); $reward_detail_score = $this->get_game('Reward')->get_reward_detail($score_reward_info['score_reward'], $loop_num); $this->get_game('Reward')->gen_reward_array($reward_detail_score, $reward); } # 排位奖励 if (!empty($rank_reward_info)) { $reward_detail_rank = $this->get_game('Reward')->get_reward_detail($rank_reward_info['rank_reward'], 1); $this->get_game('Reward')->gen_reward_array($reward_detail_rank, $reward); } $re = $this->get_game('Reward')->send_reward($player_list[$i], $reward, array('cmd_id' => '484'), 1); $this->write_check_strict($re, 3010303); # 该方法会自动推送843协议告知前端显示奖励信息,会调用prop_806协议通知道具变更,调用p2c_part_update通知人物信息变更 $ret = $this->get_game('Reward')->add_reward_log(); $reward_fmt = array(); if (!empty($reward)) { $reward_detail = $this->get_game('Reward')->get_reward_detail_by_reward($reward); foreach ($reward_detail as $item_id => $item_num) { $reward_fmt[] = array('type' => $item_id, 'item_id' => $item_id, 'item_num' => $item_num); } } # 告知Flash排位与奖励,注意score有可能为0 Protocol::input($player_list[$i], 8, 11, 1150, array('score' => $score_list[$i], 'rank' => $i + 1, 'rank_reward' => $reward_fmt)); } else { # 不在线的发邮件 # 邮件发送 $day = date("n.j", $this->current_time); $attachment_score = array(); $attachment_rank = array(); # 积分奖励 if (!empty($score_list[$i])) { # 积分不为0 $loop_num = intval($score_list[$i] / $score_reward_info['loop_score']); $reward_detail_score = $this->get_game('Reward')->get_reward_detail($score_reward_info['score_reward'], $loop_num); foreach ($reward_detail_score as $item_idx => $item_num) { $attachment_score[] = array("prop_id" => $item_idx, "prop_num" => $item_num); } $phrase_config_score = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($this->score_reward_mail_id); $content_score = sprintf($phrase_config_score['content'], $day, $score_list[$i]); $re = $this->get_game('Mail')->async_trigger_mail($player_list[$i], $phrase_config_score['title'], $content_score, $attachment_score, $phrase_config_score['sender'], 1, 552); } # 排位奖励 if (!empty($rank_reward_info)) { $reward_detail_rank = $this->get_game('Reward')->get_reward_detail($rank_reward_info['rank_reward'], 1); foreach ($reward_detail_rank as $item_idx => $item_num) { $attachment_rank[] = array("prop_id" => $item_idx, "prop_num" => $item_num); } $phrase_config_rank = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($this->rank_reward_mail_id); $content_rank = sprintf($phrase_config_rank['content'], $day, $i + 1); $re = $this->get_game('Mail')->async_trigger_mail($player_list[$i], $phrase_config_rank['title'], $content_rank, $attachment_rank, $phrase_config_rank['sender'], 1, 552); } } # 更新雅典娜答题参与次数[结算完算参与] $re = $this->get_data('PlayerDailyTime')->add_used_time($player_info['player_id'], 'athena_question_involved_num', 1); $this->write_check($re, 3010355); # 找回资源埋点 $this->get_game('GetBackCurrency')->add_function_day_times($player_info['player_id'], 9); # 引导任务埋点 $this->get_game('TaskTrigger')->async_trigger_guide_task($player_info['player_id'], 36, 1); # 每日活跃度埋点 $this->get_game('DailyBoon')->async_trigger_daily_boon_task($player_info['player_id'], 3013, 1); # -------------------------------------------------------------------- # 游戏日志记录 # -------------------------------------------------------------------- $log_info = array('player_id' => $player_info['player_id'], 'player_level' => $player_info['level'], 'vip_level' => $player_info['vip'], 'vip_special_level' => $player_info['privilege_level'], 'add_time' => $this->current_time, 'map_id' => $map_id, 'score' => $score_list[$i], 'rank' => $i + 1, 'reward_score' => json_encode($reward_detail_score), 'reward_rank' => json_encode($reward_detail_rank)); Log_AthenaQuestion::getInstance()->add_log($log_info); } return null; }