Example #1
0
 public function CMD2_607()
 {
     $data = $this->get_game('PlayerSkill')->uninstall_dower($this->_authuser['player_id'], $this->_param[0]);
     if (isset($data['dower_info'])) {
         $dower_info = $data['dower_info'];
         unset($data['dower_info']);
     } else {
         $dower_info = array();
     }
     Protocol::input($this->_authuser['player_id'], 3, 6, 607, $data);
     Protocol_Player::p2c_part_update($this->_authuser['player_id'], array('dower_info' => '', 'player_data' => $dower_info));
 }
Example #2
0
 /**
  *
  * @param $player_id
  * @param $settings
  * @return array
  */
 public function set_hook_settings($player_id, $settings)
 {
     if (empty($settings)) {
         $this->throw_error(10107);
     }
     $hook_settings = array();
     foreach ($settings as $val) {
         $hook_settings[$val[0]] = $val[1];
     }
     $res = $this->get_data('PlayerDetail')->update_player_detail($player_id, array('hook_settings' => $hook_settings));
     Protocol_Player::p2c_part_update($player_id, array('hook_settings' => array('hook_settings' => $hook_settings)));
     if ($res) {
         return array('result' => 1);
     }
     return array('result=>0');
 }
Example #3
0
 /**
  * 设置用户配置
  * @param $player_id
  * @param $sid
  * @param $val
  * @return array
  */
 public function set_player_setting($player_id, $params)
 {
     if (empty($params)) {
         $this->throw_error('10107');
     }
     //        $setting = Cache_Settings::getInstance()->get_settings($sid);//默认配置
     //        if(empty($setting)){
     //            $this->throw_error('10107');
     //        }
     $player_detail = $this->get_data('PlayerDetail')->get_player_detail($player_id, array('fashion_fit', 'player_settings'));
     $player_settings = $player_detail['player_settings'];
     $fashion_flag = false;
     $meditation_flag = false;
     foreach ($params as $val) {
         $sid = $val[0];
         $v = $val[1];
         $player_settings[$sid] = $v;
         if ($sid == 34) {
             $fashion_flag = true;
         }
         if ($sid == 37 || $sid == 38) {
             $meditation_flag = true;
         }
     }
     $player_detail['player_settings'] = $player_settings;
     $result = $this->get_data('PlayerDetail')->update_player_detail($player_id, array('player_settings' => $player_settings));
     if ($result) {
         if ($fashion_flag || $meditation_flag) {
             $up = array();
             if ($fashion_flag) {
                 $up['fashion_fit'] = 0;
             }
             if ($meditation_flag) {
                 $up['meditation'] = 0;
             }
             if (!empty($up)) {
                 $up['player_data'] = array('player_detail' => $player_detail);
                 Protocol_Player::p2c_part_update($player_id, $up);
             }
         }
         //            return array(array('sid'=>$sid,'setting_name'=>$setting['name'],'type'=>$setting['type'],'value'=>$val,'value_range'=>$setting['value_range']));
         return array(0 => $params);
     } else {
         $this->throw_error('10110');
     }
 }
Example #4
0
 public function run()
 {
     $player_keys = Com_AdCache::factory('player')->keys("data|player:*");
     foreach ($player_keys as $key) {
         $player_info = Com_AdCache::factory('player')->hash_get($key);
         $player_id = $player_info['player_id'];
         $player_detail = $this->get_data('PlayerDetail')->get_player_detail($player_id);
         if ($player_id) {
             $this->get_game('BuffData')->buff_attr($player_id, false);
             $objFpowerCalc = $this->get_game('FpowerCalc');
             $objPlayer = $this->get_data('Player');
             $objFpowerCalc->set_player_info($player_info);
             $objFpowerCalc->set_player_detail($player_detail);
             $player_fpower = $this->get_game('FpowerCalc')->calc_player_fpower($player_id);
             $player_info['fpower'] = $update_fpower['fpower'] = $player_fpower['fpower'];
             $update_fpower['buff_fpower'] = $syn_item['buff_fpower'] = $player_fpower['buff_fpower'];
             $update_fpower['equip_fpower'] = $objFpowerCalc->calc_equip_fpower($player_id);
             $player_info['equip_fpower'] = $update_fpower['equip_fpower'];
             $update_fpower['sq_fpower'] = $objFpowerCalc->calc_sq_fpower($player_id);
             $player_info['sq_fpower'] = $update_fpower['sq_fpower'];
             $update_fpower['fairy_fpower'] = $objFpowerCalc->calc_fairy_fpower($player_id);
             $player_info['fairy_fpower'] = $update_fpower['fairy_fpower'];
             $update_fpower['hero_fpower'] = $objFpowerCalc->calc_hero_fpower($player_id);
             $player_info['hero_fpower'] = $update_fpower['hero_fpower'];
             $update_fpower['skill_fpower'] = $objFpowerCalc->calc_skill_fpower($player_id);
             $player_info['skill_fpower'] = $update_fpower['skill_fpower'];
             $update_fpower['wing_fpower'] = $objFpowerCalc->calc_wing_fpower($player_id);
             $player_info['wing_fpower'] = $update_fpower['wing_fpower'];
             $update_fpower['fpower'] = $player_info['fpower'] + $player_info['sq_fpower'] + $player_info['skill_fpower'] + $player_info['equip_fpower'];
             $sum_fpower = $update_fpower['fpower'] + $player_info['hero_fpower'] + $player_info['fairy_fpower'] + $player_info['wing_fpower'] + $update_fpower['buff_fpower'];
             $update_fpower['sum_fpower'] = $sum_fpower;
             $result = $objPlayer->update_player_info($player_id, $update_fpower);
             if ($result) {
                 Protocol_Player::p2c_part_update($player_id, array('attr' => '', 'fairy_info' => '', 'hero_info' => '', 'skill_infos' => '', 'wing' => ''));
                 echo $player_id . "sync suc \n";
             }
         }
     }
 }
Example #5
0
 /**
  * 任职
  * @param unknown $player_id
  * @param unknown $union_id
  * @param unknown $allow_player_id
  * @param unknown $job
  */
 public function allow_job($player_id, $union_id, $allow_player_id, $allow_job_id)
 {
     $player_id = intval($player_id);
     $allow_player_id = intval($allow_player_id);
     $allow_job_id = intval($allow_job_id);
     if ($player_id == $allow_player_id || $allow_job_id > $this->union_default_job_id) {
         $this->throw_error('173702');
     }
     //检查权限
     $objUnionPlayerData = $this->get_data('UnionPlayer');
     $unionPlayerInfo = $objUnionPlayerData->get_union_player_info($union_id, $player_id);
     //操作者职位ID
     $option_jod_id = $unionPlayerInfo['job_id'];
     //任职玩家原先职位ID
     $unionAllowPlayerInfo = $objUnionPlayerData->get_union_player_info($union_id, $allow_player_id);
     $old_job_id = $unionAllowPlayerInfo['job_id'];
     if ($allow_job_id == 2) {
         #副会长任命权限:会长
         $manager_auth = array(1);
     } else {
         if ($allow_job_id == 3) {
             #大长老任命权限:会长
             $manager_auth = array(1);
         } else {
             if ($allow_job_id == 4) {
                 #士官长任命权限:会长、副会长
                 $manager_auth = array(1, 2);
             } else {
                 if ($allow_job_id == 5) {
                     #精英任命权限:会长、副会长、士官长
                     $manager_auth = array(1, 2, 4);
                 } else {
                     if ($allow_job_id == 1) {
                         $manager_auth = array(1);
                     } else {
                         if ($allow_job_id == 6) {
                             #成员任命权限:会长、副会长
                             $manager_auth = array(1, 2);
                         }
                     }
                 }
             }
         }
     }
     $this->check_option_auth($player_id, $unionPlayerInfo, $manager_auth);
     if (empty($unionAllowPlayerInfo)) {
         $this->throw_error('171001');
         //该玩家未加入该公会
     }
     if ($unionAllowPlayerInfo['job_id'] == $allow_job_id) {
         $this->throw_error('173701');
         //已任职过
     }
     /*if($option_jod_id>$old_job_id){ 
     			$this->throw_error('170701'); 
     		}*/
     $objUnionInfoData = $this->get_data('UnionInfo');
     $unionInfo = $objUnionInfoData->get_union_info($union_id);
     $unionBaseConfig = Cache_UnionBase::getInstance()->get_union_base_info($unionInfo["union_level"]);
     //获取当前该职位人数
     $job_num = $this->get_job_num($union_id, $allow_job_id);
     $jobNumField = "job" . $allow_job_id;
     if ($allow_job_id > 1 && $job_num >= $unionBaseConfig[$jobNumField]) {
         $this->throw_error('170503');
         //人数已满
     }
     $this->start_trans();
     $retUnionPlayerInfo = 1;
     $is_update_union_base = 0;
     if ($option_jod_id == 1 && $allow_job_id == 1) {
         //xxx将被提升为会长,你会变成普通成员
         $unionPlayerInfo['job_id'] = $this->union_default_job_id;
         $unionInfo['create_player_id'] = $allow_player_id;
         $unionInfo['create_player_name'] = $this->get_data('Player')->get_player_info($allow_player_id, 'name');
         $retUnionPlayerInfo = $objUnionPlayerData->update_union_player_info($union_id, $player_id, $unionPlayerInfo);
         $is_update_union_base = 1;
     }
     $unionAllowPlayerInfo['job_id'] = $allow_job_id;
     Com_Log::debug_write('update_union_info', "allow_job|unoin_id={$union_id}" . json_encode($unionInfo));
     $retUnionInfo = $objUnionInfoData->update_union_info($union_id, $unionInfo);
     $retUnionAllowPlayerInfo = $objUnionPlayerData->update_union_player_info($union_id, $allow_player_id, $unionAllowPlayerInfo);
     $retPlayerInfo = $this->get_data('Player')->update_player_info($player_id, array("union_job" => $unionPlayerInfo['job_id']));
     $retPlayerAllowInfo = $this->get_data('Player')->update_player_info($allow_player_id, array("union_job" => $unionAllowPlayerInfo['job_id']));
     if ($retUnionInfo && $retUnionAllowPlayerInfo && $retUnionPlayerInfo && $retPlayerInfo && $retPlayerAllowInfo) {
         $this->commit();
         $this->get_game('Union')->Sync_Union_create_msg($union_id);
         $this->get_game('Union')->Sync_Union_msg($union_id);
         Protocol_Player::p2c_part_update($player_id, array('union_job' => ''));
         Protocol_Player::p2c_part_update($allow_player_id, array('union_job' => ''));
         if ($is_update_union_base) {
             $data = $this->get_game('UnionBase')->union_base_info($player_id, $union_id);
             Protocol::input($player_id, 8, 17, 1707, $data);
         }
     } else {
         $this->rollback();
         $this->throw_error('10101');
     }
     //广播任职
     if ($allow_job_id < $this->union_default_job_id) {
         $allow_player_name = $this->get_data('Player')->get_player_info($allow_player_id, "name");
         $arr_replace = array();
         $arr_replace[] = array('rep_type' => 0, 'txt' => $allow_player_name, 'rep_val' => $allow_player_id);
         $data = Cache_UnionPosition::getInstance()->get_union_position(array("sid" => $allow_job_id));
         $job_name = $data[0]['position'];
         $arr_replace[] = array('rep_type' => 7, 'txt' => $job_name);
         $msg = Language_Message::make_message(171007, $arr_replace);
         $this->get_game('SystemNotice')->send_system_msg($player_id, $msg, 7, 7);
     }
     return array($union_id, $allow_player_id, $allow_job_id);
 }
Example #6
0
 /**
  * 处理战斗结果
  * @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;
 }
Example #7
0
 /**
  * 升级检查任务状态
  * @param $player_id
  * @param $level
  */
 public function check_level_task($player_id, $level)
 {
     $task_info = $this->get_data('PlayerTask')->get_task_info($player_id, array('main_val', 'current_num'));
     $cur_task = reset($task_info['main_val']);
     $task_config = Cache_TaskConfig::getInstance()->get_task_config($cur_task['task_id']);
     //        Com_Log::write("player_upgrade.".$player_id,"level:{$level} min_level {$task_config['min_level']} task_status:{$cur_task['task_status']}");
     if ($task_config['min_level'] <= $level && $cur_task['task_status'] == 0) {
         if ($cur_task['step_type'] == 2) {
             $task_status = 2;
         } else {
             $task_status = 1;
         }
         $task_info['main_val'][$cur_task['task_id']]['task_status'] = $task_status;
         //            Com_Log::write("player_upgrade.".$player_id,var_export($task_info['main_val'],true));
         $result = $this->get_data('PlayerTask')->set_task_info($player_id, array('main_val' => $task_info['main_val']));
         //            Com_Log::write("player_upgrade.".$player_id,"result:".var_export($result,true));
         if ($result) {
             $out[] = array('task_id' => $cur_task['task_id'], 'step' => $cur_task['step'], 'task_status' => $task_status, 'task_data' => $this->format_target($cur_task['target'], $cur_task['step_type']), 'index' => 1, 'cur_finish_num' => $task_info['current_num'], 'task_seq' => 0, 'kill_npc_city_id' => 0, 'task_type' => 1, 'task_star' => 0);
             //                Com_Log::write("player_upgrade.".$player_id,"out:".var_export($out,true));
             $out_12 = array();
             $out_12['task_id'] = $cur_task['task_id'];
             $out_12['task_step'] = $cur_task['step'];
             if ($task_status == 1) {
                 $out_12['task_start_status'] = 1;
             } else {
                 $out_12['task_start_status'] = 0;
             }
             Protocol_Player::p2c_part_update($player_id, $out_12);
             if (!IS_FRONT || defined('FROM_GATEWAY')) {
                 $cmd0 = 8;
             } else {
                 $cmd0 = 3;
             }
             Protocol::input($player_id, $cmd0, 10, 1002, array(0 => $out));
         }
     }
 }
Example #8
0
 public function buff_attr($player_id, $part_update = true)
 {
     $data = $this->get_data('PlayerBuffData')->get_buff_data($player_id);
     $buff_data = array();
     if ($data) {
         $buff_sid = array();
         //            $time = time();
         foreach ($data as $val) {
             //                if(($val['save_time']+$val['duration_total']/1000) > $time){
             $buff_sid[] = $val['buff_sid'];
             //                }
         }
         if ($buff_sid) {
             $buff_data = Cache_SkillBuff::getInstance()->get_buff_data($buff_sid);
         }
     }
     $buff_attr = array();
     $buff_attr_per = array();
     $buff_exp_addition = array();
     if (!empty($buff_data)) {
         foreach ($buff_data as $val) {
             $attr_key = $this->get_attr_by_buff_type($val['param1']);
             if ($val['buff_type'] == 'mod_fight_attr') {
                 $buff_attr[$attr_key] += $val['param2'];
             }
             if ($val['buff_type'] == 'mod_fight_attr_%') {
                 $buff_attr_per[$attr_key] += $val['param2'];
             }
             if ($val['buff_type'] == 'mod_exp_%') {
                 $buff_exp_addition['exp'] += $val['param1'];
             }
         }
         //            Com_Log::write("buff_attr".$player_id,"buff_attr".var_export($buff_attr,true));
         //            Com_Log::write("buff_attr".$player_id,"buff_attr_per".var_export($buff_attr_per,true));
     }
     $result = $this->get_data('PlayerDetail')->update_player_detail($player_id, array('buff_attr' => $buff_attr, 'buff_attr_per' => $buff_attr_per, 'buff_exp_addition' => $buff_exp_addition));
     if (!$part_update) {
         $objPlayer = $this->get_data('Player');
         $player_info = $objPlayer->get_player_info($player_id);
         $objFpowerCalc = $this->get_game('FpowerCalc');
         $objFpowerCalc->set_player_info($player_info);
         $player_fpower = $objFpowerCalc->calc_player_fpower($player_id);
         $player_info['fpower'] = $player_fpower['fpower'];
         $update_fpower['buff_fpower'] = $player_fpower['buff_fpower'];
         $update_fpower['fpower'] = $player_info['fpower'] + $player_info['sq_fpower'] + $player_info['skill_fpower'] + $player_info['equip_fpower'];
         $sum_fpower = $update_fpower['fpower'] + $player_info['hero_fpower'] + $player_info['fairy_fpower'] + $player_info['wing_fpower'] + $update_fpower['buff_fpower'];
         $update_fpower['sum_fpower'] = $sum_fpower;
         $objPlayer->update_player_info($player_id, $update_fpower);
         $syn_item['buff_fpower'] = $update_fpower['buff_fpower'];
         SynPlayer::set_syn_data($syn_item);
         $data = SynPlayer::get_data();
         Protocol::input($player_id, 7, 4, 417, array(0 => $data['m'], 1 => $data['u']));
     }
     if ($result && $part_update) {
         Protocol_Player::p2c_part_update($player_id, array('attr' => ''));
     }
 }
Example #9
0
 public function wing_equip_swallow($type, $player_id, $player_prop_id, $swallow_equips, $onekey = 0)
 {
     $this->get_game('PlayerFunc')->get_func_is_open($player_id, $this->func_id);
     $this->param_check_numeric(array($type, $player_id), 0);
     if (empty($swallow_equips)) {
         $this->throw_error('10107');
     }
     # 参数错误
     $player_info = $this->get_data('Player')->get_player_info($player_id, array('level', 'vip', 'career_type'));
     $player_detail = $this->get_data('PlayerDetail')->get_player_detail($player_id, Protocol_Player::get_player_attr_detail_key());
     # 1515展示协议返回数据,1515协议需要写死传回已配置的所有吞噬属性,即便当前道具尚未有激活任意项吞噬属性,也需要用初始值填充
     $out_1515 = array('player_ppid' => $player_prop_id, 'swallow_ppids' => $swallow_equips, 'item_struct' => array());
     $swallow_equips = explode(':', $swallow_equips);
     $swallow_equips = array_filter($swallow_equips);
     $player_prop_info = $this->get_data('PlayerProp')->get_player_prop_detail($player_id, $player_prop_id);
     $before_player_prop_info = $player_prop_info;
     if (empty($player_prop_info)) {
         $this->throw_error('80013');
         //玩家没有该装备!
     }
     if (Com_Util::is_first_charge_item($player_prop_info['prop_id'])) {
         if (!empty($type)) {
             # 实际吞噬
             $this->throw_error('81106');
             # 首充装备不允许吞噬
         } else {
             $message = array('texts' => array(array('code' => 81106, 'content' => array(), 'params' => array())), 'delay' => 0);
             Protocol::input($player_id, 3, 7, 742, $message);
             # 首充装备不允许吞噬
             $out_1515['swallow_ppids'] = "";
             return $out_1515;
         }
     }
     # 计算吞噬属性最大等级
     $swallow_lv_max = $this->get_we_swallow_lv_max($player_prop_info['vocation_limit'], $player_detail);
     $swallow_config_max = Cache_Forge::getInstance()->get_we_swallow_config_by_lv($swallow_lv_max);
     if (empty($swallow_config_max)) {
         $this->throw_error('80047');
         # 未找到翅膀装备吞噬配置信息
     }
     $player_prop_details = $this->get_data('PlayerProp')->get_player_prop_detail_multi($player_id, $swallow_equips);
     if (empty($player_prop_details)) {
         $this->throw_error('80024');
         //未选择有效的被吞噬装备
     }
     # 被吞噬装备信息
     $before_swallow_info = empty($player_prop_info['we_swallow_info']) ? array() : $player_prop_info['we_swallow_info'];
     $player_prop_id_slave = "";
     $item_id_slave = "";
     $onekey_prop_list = array();
     # 保存允许一键吞噬的装备ID列表
     foreach ($swallow_equips as $pprop_id) {
         if (!empty($type)) {
             # 实际吞噬
             if (empty($player_prop_details[$pprop_id])) {
                 $this->throw_error('80013');
                 # 玩家没有该装备!
             }
             if (Com_Util::is_first_charge_item($player_prop_details[$pprop_id]['prop_id'])) {
                 $this->throw_error('81107');
                 # 首充装备不允许被吞噬
             }
             if ($player_prop_details[$pprop_id]['quality'] < $this->min_swallow_quality) {
                 $this->throw_error('80044');
                 # 装备品质未达到被吞噬要求
             }
             if (isset($player_prop_info['we_swallow_info']['swallow_exp']) && $player_prop_info['we_swallow_info']['swallow_exp'] >= $swallow_config_max['swallow_exp'] - 1) {
                 $this->throw_error('80045');
                 # 装备已达到最大吞噬等级
             }
         } else {
             # 非实际吞噬
             if (!empty($onekey)) {
                 # 一键勾选
                 if (empty($player_prop_details[$pprop_id])) {
                     continue;
                 }
                 if (Com_Util::is_first_charge_item($player_prop_details[$pprop_id]['prop_id'])) {
                     continue;
                 }
                 if ($player_prop_details[$pprop_id]['quality'] < $this->min_swallow_quality) {
                     continue;
                 }
                 if (isset($player_prop_info['we_swallow_info']['swallow_exp']) && $player_prop_info['we_swallow_info']['swallow_exp'] >= $swallow_config_max['swallow_exp'] - 1) {
                     continue;
                 }
             } else {
                 # 单项勾选,单次勾选获取吞噬信息需要弹提示属性满的消息,但不能阻断程序执行,只能跳出循环
                 if (empty($player_prop_details[$pprop_id])) {
                     $message = array('texts' => array(array('code' => 80013, 'content' => array(), 'params' => array())), 'delay' => 0);
                     Protocol::input($player_id, 3, 7, 742, $message);
                     # 玩家没有该装备!
                     break;
                 }
                 if (Com_Util::is_first_charge_item($player_prop_details[$pprop_id]['prop_id'])) {
                     $message = array('texts' => array(array('code' => 81107, 'content' => array(), 'params' => array())), 'delay' => 0);
                     Protocol::input($player_id, 3, 7, 742, $message);
                     # 首充装备不允许被吞噬
                     break;
                 }
                 if ($player_prop_details[$pprop_id]['quality'] < $this->min_swallow_quality) {
                     $message = array('texts' => array(array('code' => 80044, 'content' => array(), 'params' => array())), 'delay' => 0);
                     Protocol::input($player_id, 3, 7, 742, $message);
                     # 装备品质未达到被吞噬要求
                     break;
                 }
                 if (isset($player_prop_info['we_swallow_info']['swallow_exp']) && $player_prop_info['we_swallow_info']['swallow_exp'] >= $swallow_config_max['swallow_exp'] - 1) {
                     $message = array('texts' => array(array('code' => 80045, 'content' => array(), 'params' => array())), 'delay' => 0);
                     Protocol::input($player_id, 3, 7, 742, $message);
                     # 装备已达到最大吞噬等级
                     break;
                 }
             }
         }
         $player_prop_id_slave .= "{$pprop_id}:";
         $item_id_slave .= $player_prop_details[$pprop_id]['prop_id'] . ":";
         $onekey_prop_list[] = $pprop_id;
         # 计算增加属性值 && 修正经验值
         $add_swallow_exp = self::$swallow_quality_to_exp_map[$player_prop_details[$pprop_id]['quality']] * (1 + intval($player_prop_details[$pprop_id]['level'] / 5) / 4);
         if (isset($player_prop_info['we_swallow_info'])) {
             $player_prop_info['we_swallow_info']['swallow_exp'] += $add_swallow_exp;
         } else {
             $player_prop_info['we_swallow_info'] = array('swallow_lv' => 0, 'swallow_exp' => $add_swallow_exp, 'swallow_attr' => array());
         }
     }
     # 根据吞噬属性的exp,刷新吞噬属性的lv
     if (!empty($player_prop_info['we_swallow_info'])) {
         $swallow_config = Cache_Forge::getInstance()->get_we_swallow_config_by_exp($player_prop_info['we_swallow_info']['swallow_exp']);
         if (!empty($swallow_config)) {
             $player_prop_info['we_swallow_info']['swallow_lv'] = min($swallow_config['swallow_lv'], $swallow_lv_max);
             # 根据最大lv,修正经验值
             if ($player_prop_info['we_swallow_info']['swallow_exp'] >= $swallow_config_max['swallow_exp'] - 1) {
                 $player_prop_info['we_swallow_info']['swallow_exp'] = $swallow_config_max['swallow_exp'] - 1;
             }
         } else {
             $this->throw_error('80047');
             # 未找到翅膀装备吞噬配置信息
         }
     }
     # 根据吞噬等级,计算吞噬加成附加属性
     $we_swallow_revise_info = Cache_Forge::getInstance()->get_we_swallow_config_by_lv($player_prop_info['we_swallow_info']['swallow_lv']);
     if (empty($we_swallow_revise_info)) {
         $this->throw_error('80047');
         # 未找到翅膀装备吞噬配置信息
     }
     foreach ($player_prop_info['addition_attr'] as $attr_key => $attr_val) {
         $attr_val = ceil($attr_val * $we_swallow_revise_info['attr_revise_ratio'] / 10000) + $we_swallow_revise_info[$attr_key];
         $player_prop_info['we_swallow_info']['swallow_attr'][$attr_key] = $attr_val;
     }
     if (empty($type)) {
         # 修正被吞噬的装备列表,去除吞噬属性达到上限及之后的其它装备
         $out_1515['swallow_ppids'] = empty($onekey_prop_list) ? "" : implode(":", $onekey_prop_list);
         $out_1515['item_struct'] = Struct_Prop::get_prop_struct($player_prop_info);
         if (empty($out_1515['swallow_ppids']) && !empty($onekey)) {
             # 没有能被吞噬的装备
             $message = array('texts' => array(array('code' => 80046, 'content' => array(), 'params' => array())), 'delay' => 0);
             Protocol::input($player_id, 3, 7, 742, $message);
             # 没有可以被吞噬的装备
         }
         return $out_1515;
     }
     $out_1516 = array(0 => $player_prop_id, 1 => array('item_position' => 1, 'grid_list' => array()));
     $this->start_trans();
     # 更新吞噬信息
     $re = $this->get_data('PlayerProp')->update_player_prop($player_prop_info, array('we_swallow_info' => $player_prop_info['we_swallow_info'], 'we_swallow_version' => $this->we_swallow_version));
     $this->write_check($re, 3010177);
     # 扣除被吞噬装备
     foreach ($player_prop_details as $k => $v) {
         $re = $this->get_data('PlayerProp')->update_prop_num($player_id, $v, 1, '-', array('level' => $player_info['level'], 'vip' => $player_info['vip'], 'cmd_id' => 1516));
         $this->write_check($re, 3010182);
     }
     # 刷新玩家翅膀战力与镶嵌装备的附加属性及战力
     if ($player_prop_info['item_position'] == $this->wing_pos) {
         $wing_attr = $player_detail['wing_info'][$player_prop_info['vocation_limit']];
         # 修正缓存的翅膀装备吞噬信息
         $wing_attr['equipment'][$player_prop_info['sub_type']]['we_swallow_info'] = $player_prop_info['we_swallow_info'];
         $wing_attr['equip_attr'] = $this->get_game('PlayerWing')->get_wing_equip_attr($wing_attr['equipment']);
         # 减去吞噬之前的战力
         Struct_Prop::get_item_additions($before_player_prop_info);
         $wing_attr['fight'] -= $before_player_prop_info['fpower'];
         $wing_attr['equipment_fight'] -= $before_player_prop_info['fpower'];
         if ($wing_attr['fight'] < 0) {
             $wing_attr['fight'] = 0;
         }
         if ($wing_attr['equipment_fight'] < 0) {
             $wing_attr['equipment_fight'] = 0;
         }
         # 加上吞噬之后的战力
         $player_prop_info_cp = $player_prop_info;
         Struct_Prop::get_item_additions($player_prop_info_cp);
         $wing_attr['fight'] += $player_prop_info_cp['fpower'];
         $wing_attr['equipment_fight'] += $player_prop_info_cp['fpower'];
         # 更新wing_info
         $player_detail['wing_info'][$player_prop_info['vocation_limit']] = $wing_attr;
         $re = $this->get_data('PlayerDetail')->update_player_detail($player_id, array('wing_info' => $player_detail['wing_info']));
         $this->write_check($re, 3010242);
         #更新翅膀排行
         if ($player_detail['wing_info'][$player_prop_info['vocation_limit']]['fight'] > 0) {
             $wing_fight = $player_detail['wing_info'][$player_prop_info['vocation_limit']]['fight'];
             $this->get_data('RankList')->update_wing_rank($player_id, $player_prop_info['vocation_limit'], $wing_fight);
         }
     }
     $this->commit();
     # 成就相关埋
     $this->get_game('PlayerAchieve')->async_trigger_achieve_target($player_id, 39, $player_prop_info['we_swallow_info']['swallow_lv'], 8);
     # --------------------------------------------------------------------
     # 游戏日志记录
     # --------------------------------------------------------------------
     $log_info = array('player_id' => $player_id, 'player_level' => $player_info['level'], 'vip_level' => $player_info['vip'], 'vip_special_level' => $player_info['privilege_level'], 'add_time' => $this->current_time, 'player_prop_id_master' => $player_prop_info['player_prop_id'], 'item_id_master' => $player_prop_info['prop_id'], 'item_type' => $player_prop_info['type'], 'item_sub_type' => $player_prop_info['sub_type'], 'item_quality' => $player_prop_info['quality'], 'item_level' => $player_prop_info['level'], 'item_star_level' => $player_prop_info['star_level'], 'player_prop_id_slave' => rtrim($player_prop_id_slave, ":"), 'item_id_slave' => rtrim($item_id_slave, ":"), 'before_swallow_info' => $before_swallow_info, 'after_swallow_info' => $player_prop_info['we_swallow_info'], 'before_swallow_lv' => empty($before_swallow_info) ? 0 : $before_swallow_info['swallow_lv'], 'after_swallow_lv' => $player_prop_info['we_swallow_info']['swallow_lv'], 'before_swallow_exp' => empty($before_swallow_info) ? 0 : $before_swallow_info['swallow_exp'], 'after_swallow_exp' => $player_prop_info['we_swallow_info']['swallow_exp']);
     Log_Forge::getInstance()->add_log($log_info, 'we_swallow');
     # 通知翅膀属性变更
     if ($player_prop_info['item_position'] == $this->wing_pos) {
         #同步翅膀属性
         $str = $this->get_game('PlayerWing')->get_activation_wing_interface($player_id, $player_detail['wing_info']);
         Protocol_Player::p2c_part_update($player_id, array('had_on_swings' => $str, 'wing' => '', 'attr' => '', 'player_data' => array('player_detail' => $player_detail, 'player' => array('career_type' => $player_info['career_type'], 'level' => $player_info['level']))));
     }
     # 通知道具变更806
     $ndata = array();
     $ndata[] = $player_prop_info;
     foreach ($player_prop_details as $key => &$val) {
         $val['item_num'] -= 1;
         $out_1516[1]['grid_list'][] = $val['grid'];
         $ndata[] = $val;
     }
     Protocol_Prop::prop_806($player_id, $ndata);
     # 刷装备1506[翅膀装备强化面板]与1514[可吞噬道具列表]
     $out_1506 = $this->get_game('PlayerWing')->equipment_intensify_panel($player_id, 4);
     $out_1514 = $this->get_wing_equips_for_swallow($player_id, $player_prop_id);
     Protocol::input($player_id, 3, 15, 1506, $out_1506);
     Protocol::input($player_id, 3, 15, 1514, $out_1514);
     # 记录行为
     Com_Log::write('xgame.forge_we_swallow', "{$player_id}\t" . "we_swallow\t" . "{$type}\t" . "{$player_prop_id}\t" . implode(",", $swallow_equips));
     return $out_1516;
 }
Example #10
0
 public function union_player_add_attr($union_id, $medal_id, $player_id = 0)
 {
     $medal_list = Cache_UnionMedal::getInstance()->get_union_medal_info(array("sid" => $medal_id));
     $medal_info = $medal_list[0];
     $player_id = intval($player_id);
     $achieve_attr = array();
     $achieve_attr['atk_min'] = $medal_info['atk_min'];
     $achieve_attr['hp'] = $medal_info['max_hp'];
     $achieve_attr['arm'] = $medal_info['arm'];
     $obj_player_detail = $this->get_data('PlayerDetail');
     $update_player_detail_data['union_achieve_attr'] = $achieve_attr;
     $ret_attr = true;
     if ($player_id == 0) {
         $objUnionPlayerData = $this->get_data('UnionPlayer');
         $unionPlayerList = $objUnionPlayerData->get_union_player_info($union_id);
         if ($unionPlayerList) {
             foreach ($unionPlayerList as $unionPlayer) {
                 $ret_attr = $obj_player_detail->update_player_detail($unionPlayer['player_id'], $update_player_detail_data);
                 Protocol_Player::p2c_part_update($unionPlayer['player_id'], array('attr' => array()));
             }
         }
     } else {
         $ret_attr = $obj_player_detail->update_player_detail($player_id, $update_player_detail_data);
     }
     return $ret_attr;
 }
Example #11
0
 public function sync_akland_count($player_id, $type)
 {
     $type = intval($type);
     $player_id = intval($player_id);
     switch ($type) {
         case 1:
             //boss击杀
             $used_time = $this->get_data('PlayerDailyTime')->get_player_used_time($player_id, 'count_boss_oakland');
             $this->get_data('PlayerDailyTime')->add_used_time($player_id, 'count_boss_oakland');
             $used_time += 1;
             Protocol_Player::p2c_part_update($player_id, array('count_boss_oakland' => $used_time));
             break;
         case 2:
             //击杀怪物
             $used_time = $this->get_data('PlayerDailyTime')->get_player_used_time($player_id, 'count_monsters_oakland');
             $this->get_data('PlayerDailyTime')->add_used_time($player_id, 'count_monsters_oakland');
             $used_time += 1;
             Protocol_Player::p2c_part_update($player_id, array('count_monsters_oakland' => $used_time));
             break;
         case 3:
             //宝箱
             $used_time = $this->get_data('PlayerDailyTime')->get_player_used_time($player_id, 'count_chest_oakland');
             $this->get_data('PlayerDailyTime')->add_used_time($player_id, 'count_chest_oakland');
             $used_time += 1;
             Protocol_Player::p2c_part_update($player_id, array('count_chest_oakland' => $used_time));
             break;
     }
 }
Example #12
0
 public function CMD2_741()
 {
     //        try{
     $player_info = $this->get_data('Player')->get_player_info($this->_authuser['player_id'], array('is_online', 'career_type', 'level', 'vip', 'vip_exp', 'last_offline_time', 'offline_reward_status', 'silver', 'crystal', 'fame_level', 'gold', 'bag_num', 'storage_num', 'online_time', 'heart_time', 'login_time', 'cz_status', 'fame', 'fame_level_exp', 'privilege_level'));
     $player_detail = $this->get_data('PlayerDetail')->get_player_detail($this->_authuser['player_id'], array('guide', 'fashion_fit', 'fashion_info', 'player_settings', 'func_open', 'train_info', 'train_attr_info', 'equip_wing', 'wing_info', 'skill_info', 'skill_rune_info', 'skill_rune_cote_info', 'dower_info', 'equip_attr', 'fairy_attr_1', 'fairy_attr_2', 'fashion_attr', 'union_achieve_attr', 'achieve_attr_1', 'achieve_attr_2', 'player_grade_attr', 'union_player_attr', 'fame_attr', 'vip_special_attr', 'buff_attr', 'buff_attr_per'));
     if ($player_info['level'] >= 44) {
         #翅膀装备数据修复
         $this->get_game('PlayerWing')->data_repair($this->_authuser['player_id'], $player_detail);
     }
     if ($player_info['level'] >= 9) {
         #修复英雄属性
         $this->get_game('Hero')->hero_repair($this->_authuser['player_id']);
         Protocol_Player::p2c_part_update($this->_authuser['player_id'], array('hero_info' => array(), 'attr' => array()));
     }
     $data = $this->get_game('PlayerFunc')->get_player_func($this->_authuser['player_id'], $player_info, $player_detail);
     Protocol::input($this->_authuser['player_id'], 3, 7, 741, $data);
     $data = $this->get_game('PlayerBag')->get_player_item($this->_authuser['player_id'], "1:3");
     Protocol::input($this->_authuser['player_id'], 3, 8, 831, $data);
     try {
         $data = $this->get_game('PlayerBag')->get_player_bag_extend($this->_authuser['player_id'], 1, $player_info);
         Protocol::input($this->_authuser['player_id'], 3, 8, 833, $data);
     } catch (Exception $e) {
     }
     $data = $this->get_game('PlayerGuid')->get_guid($this->_authuser['player_id'], $player_detail);
     Protocol::input($this->_authuser['player_id'], 3, 7, 797, $data);
     $data = $this->get_game('PlayerSettings')->get_player_settings($this->_authuser['player_id']);
     Protocol::input($this->_authuser['player_id'], 3, 7, 725, $data);
     # 推送玩家人物面板培养信息
     $data = $this->get_game('Train')->get_player_train_info($this->_authuser['player_id'], $player_info, $player_detail);
     Protocol::input($this->_authuser['player_id'], 3, 14, 1403, $data);
     $data = $this->get_game('PlayerFashion')->get_player_fashion($this->_authuser['player_id'], $player_detail);
     Protocol::input($this->_authuser['player_id'], 3, 8, 838, $data);
     if ($player_info['level'] >= 9) {
         # 获取开启的功能列表前,刷新全民问卷功能的开启状态
         try {
             # 条件问卷查询推送
             $this->get_game('ActivityQuestions')->get_cond_ids($this->_authuser['player_id'], 0, $player_info);
         } catch (Exception $e) {
         }
         try {
             //发送守护雅典娜奖励
             $this->get_game('Athena')->send_mail_for_reward($this->_authuser['player_id']);
         } catch (Exception $e) {
         }
         #更新vip
         $this->get_game('VipReward')->check_vip_level($this->_authuser['player_id'], $player_info);
         $unread_num = $this->get_game('Mail')->get_unread_num($this->_authuser['player_id']);
         if ($unread_num > 0) {
             Protocol::input($this->_authuser['player_id'], 8, 7, 706, array($unread_num));
         }
         //推送玩家好友
         $data = $this->get_game('PlayerFriend')->get_friend_detail_by_type($this->_authuser['player_id'], 1);
         Protocol::input($this->_authuser['player_id'], 8, 7, 754, $data);
         //推送玩家黑名单
         $data = $this->get_game('PlayerFriend')->get_friend_detail_by_type($this->_authuser['player_id'], 5);
         Protocol::input($this->_authuser['player_id'], 8, 7, 754, $data);
         //推送玩家仇人
         $data = $this->get_game('PlayerFriend')->get_friend_detail_by_type($this->_authuser['player_id'], 4);
         Protocol::input($this->_authuser['player_id'], 8, 7, 754, $data);
         $this->get_data('NewsTips')->push_player_tips($this->_authuser['player_id'], 0, $player_info);
         $data = $this->get_game('Quit')->get_close_info($this->_authuser['player_id']);
         Protocol::input($this->_authuser['player_id'], 3, 7, 792, $data);
         #更新vip特权等级
         $this->get_game('VipSpecial')->update_my_level($this->_authuser['player_id']);
         #红点
         $data = $this->get_game('PlayerFunc')->red_icon($this->_authuser['player_id'], $player_info, $player_detail);
         Protocol::input($this->_authuser['player_id'], 3, 70, 7002, array(0 => $data, 1 => 1));
         #修复成就
         if ($player_info['level'] > 19) {
             $this->get_game('PlayerAchieve')->achieve_repair($this->_authuser['player_id']);
         }
         //            Com_Replication::asyn_call_func('PlayerFashion','game','check_fashion_timer',array($this->_authuser['player_id'], $player_detail));
         if ($player_info['level'] >= 37) {
             Com_Replication::asyn_call_func('TaskChain', 'game', 'fix_chain_task', array($this->_authuser['player_id']));
             #修复环任务类型错误
         }
     }
     #累计登录天数
     $this->get_game('PlayerAchieve')->async_trigger_achieve_target($this->_authuser['player_id'], 33, 1, 6);
     #同步声望配置变化
     $sync_times = $this->get_data("Player")->get_sync_fame_config_times($this->_authuser['player_id']);
     if (intval($sync_times) < 1) {
         $this->get_game('PlayerUpgrade')->fame_upgrade($this->_authuser['player_id'], $player_info);
         $this->get_data("Player")->set_sync_fame_config_times($this->_authuser['player_id'], 1);
     }
 }
Example #13
0
 public function player_upgrade_fame($data)
 {
     if (empty($data)) {
         return false;
     }
     $data = json_decode($data, true);
     $player_id = $data['player_id'];
     $fame = $data['fame'];
     $old_fame_level = intval($data['fame_level']);
     $fame_level_exp = $data['fame_level_exp'];
     $level = $data['level'];
     $vip = $data['vip'];
     $privilege_level = $data['privilege_level'];
     $logs = array();
     //    	Com_Log::write('xgame.player_fame_upgrade',var_export($data,true));
     $update = array();
     $max_level = Cache_PlayerFame::getInstance()->get_fame_max_level();
     if ($old_fame_level >= $max_level) {
         return false;
     }
     $level = $this->get_update_fame_level($old_fame_level, $fame, $logs);
     $this->start_trans();
     $update['fame'] = $level['fame'] < 0 ? 0 : $level['fame'];
     $update['fame_level'] = $level['fame_level'];
     $update['fame_level_exp'] = $level['fame_level_exp'];
     //    	Com_Log::write('xgame.player_fame_upgrade',"update");
     //    	Com_Log::write('xgame.player_fame_upgrade',var_export($update,true));
     $ret_attr = true;
     if ($update['fame_level'] > $old_fame_level) {
         $level_config = Cache_PlayerFame::getInstance()->get_player_fame_info($update['fame_level']);
         $fame_attr = array();
         $fame_attr['atk_min'] = $level_config['atk_min'];
         $fame_attr['hp'] = $level_config['max_hp'];
         $fame_attr['arm'] = $level_config['arm'];
         $update_player_detail_data['fame_attr'] = $fame_attr;
         $obj_player_detail = $this->get_data('PlayerDetail');
         $ret_attr = $obj_player_detail->update_player_detail($player_id, $update_player_detail_data);
     }
     $result = $this->get_data('Player')->update_player_info($player_id, $update);
     if ($result && $ret_attr) {
         $this->commit();
         if ($logs) {
             Log_Common::getInstance()->add_multi_resource_log($player_id, $level, $vip, $privilege_level, 103, $logs);
         }
         $arr_player['fame'] = $update['fame'];
         $arr_player['fame_level'] = $update['fame_level'];
         $arr_player['fame_level_exp'] = $update['fame_level_exp'];
         $arr_player['fame_attr'] = array();
         $arr_player['attr'] = array();
         Protocol_Player::p2c_part_update($player_id, $arr_player);
         if ($update['fame_level'] > $old_fame_level) {
             if ($update['fame_level'] > 1) {
                 #{玩家名}的声望达到了{声望名},真是厉害!
                 $level_config = Cache_PlayerFame::getInstance()->get_player_fame_info($update['fame_level']);
                 $replace_info = array();
                 $replace_info[] = array('rep_type' => 0, 'rep_val' => $player_id);
                 $replace_info[] = array('rep_type' => 7, 'txt' => $level_config['title']);
                 $this->get_game('SystemNotice')->push_sys_notice($player_id, 15, 0, $replace_info, $update['fame_level']);
                 #升级提示
                 $hero_list = $level_config['hero_sid'] ? explode("|", $level_config['hero_sid']) : array();
                 $notice = array();
                 $notice['lvl'] = $level_config['lvl'];
                 $notice['fame'] = $level_config['exp'];
                 $notice['atk_min'] = $level_config['atk_min'];
                 $notice['max_hp'] = $level_config['max_hp'];
                 $notice['arm'] = $level_config['arm'];
                 $notice['wing_lvl'] = intval($level_config['wing_lvl']);
                 $notice['fairy_lvl'] = intval($level_config['fairy_lvl']);
                 $notice['hero_list'] = $hero_list;
                 $notice['title'] = $level_config['title'];
                 Protocol::input($player_id, 8, 7, 747, $notice);
                 if (!IS_FRONT) {
                     Protocol::out();
                 }
                 //	    			Com_Log::debug_write('player_upgrade_fame', "player_id={$player_id}".json_encode($notice));
             }
         }
         return false;
     } else {
         $this->rollback();
     }
     return $update;
 }
Example #14
0
 public function use_temp_vip($player_id, $item_id)
 {
     $player_id = intval($player_id);
     $item_id = intval($item_id);
     $item_set = Cache_VipReward::getInstance()->get_vip_item($item_id);
     if (empty($item_id)) {
         return false;
     }
     $player_info = $this->get_data('Player')->get_player_info($player_id, array('vip', 'vip_exp', 'after_hero_hole', 'name'));
     if ($item_set['vip_level'] >= $player_info['vip']) {
         $data = array('add_time' => time() + $item_set['add_time'], 'vip_level' => $item_set['vip_level'], 'state' => 1);
         if ($this->get_data('VipReward')->update_temp_vip($player_id, $data)) {
             $update_data['vip'] = $item_set['vip_level'];
             $update_data['vip_temp_time'] = $data['add_time'];
             if ($item_set['vip_level'] > 0) {
                 $vip_table = Cache_VipLevelLimit::getInstance()->get_limit_info_unrelated_to_vip_level(10057);
                 if ($vip_table['vip_level'] > 0 && $item_set['vip_level'] >= $vip_table['vip_level']) {
                     if ($player_info['after_hero_hole'] < 2) {
                         #直接开启全部英雄位
                         $update_data['after_hero_hole'] = 2;
                     }
                 }
             }
             if ($this->get_data('Player')->update_player_info($player_id, $update_data)) {
                 $param = array(array('rep_type' => 7, 'rep_val' => $item_set['vip_level']), array('rep_type' => 7, 'rep_val' => ceil($item_set['add_time'] / (24 * 3600))));
                 $attr_mag = array();
                 $attr_mag[] = Language_Message::make_message('80038', $param);
                 $msg_out = array(0 => $attr_mag, 1 => 2000);
                 Protocol::input($player_id, 8, 7, 742, $msg_out);
                 Protocol_Player::p2c_part_update($player_id, array('vip' => $item_set['vip_level'], 'vip_temp_time' => $item_set['add_time']));
                 #广播通知
                 $replace_info = array();
                 $replace_info[] = array('rep_type' => 7, 'txt' => $player_info['name']);
                 $replace_info[] = array('rep_type' => 7, 'txt' => $item_set['vip_level']);
                 $this->get_game('SystemNotice')->push_sys_notice($player_id, 130, 0, $replace_info, $item_set['vip_level']);
                 #vip增加背包格子数量
                 $out = $this->get_game('PlayerBag')->get_vip_bag_storage_num($player_id);
                 Protocol::input($player_id, 8, 8, 844, $out);
                 # 条件问卷查询推送
                 $this->get_game('ActivityQuestions')->get_cond_ids($player_id);
                 #更新签到奖励
                 $this->get_game('DailySign')->async_trigger_daily_sign($player_id, $item_set['vip_level']);
                 #添加日志
                 $log_data = array('player_id' => $player_id, 'channel' => 3, 'item_level' => $player_info['vip'], 'item_num' => $player_info['vip_exp'], 'amount' => 0, 'after_amount' => $player_info['vip_exp'], 'after_attr' => $update_data['vip']);
                 Log_Common::getInstance()->add_log($log_data);
                 return true;
             } else {
                 $this->throw_error(10110, 2010088);
                 return false;
             }
             return true;
         } else {
             return false;
         }
     } else {
         $this->throw_error(80037);
     }
     return true;
 }
Example #15
0
 /**
  * 战斗开始
  * @param $role_id 角色id
  * @return array 
  */
 public function begin($role_id, $room_id, $instance_id, $map_sid)
 {
     $ret['room_id'] = 0;
     $ret['instance_id'] = 0;
     $ret['map_sid'] = 0;
     $player_info = $this->get_data('Player')->get_player_info($role_id, array('player_id'));
     if (empty($player_info) || empty($player_info['player_id'])) {
         return $ret;
     }
     $left_num = $this->get_left_times($role_id);
     if ($left_num <= 0) {
         return $ret;
     }
     $this->get_data('PlayerDailyTime')->add_used_time($role_id, 'kf_duel_use_times');
     //增加挑战次数
     $this->get_data('PlayerDailyTime')->set_used_time($role_id, 'kf_duel_inspire_gold_count');
     $left_num -= 1;
     Protocol_Player::p2c_part_update($role_id, array('kf_3vs3_remaining_count' => $left_num));
     $this->get_game('PlayerFunc')->sync_func_tips($role_id, $this->_func_id);
     //找回资源埋点
     $this->get_game('GetBackCurrency')->add_function_day_times($role_id, 14);
     $ret['room_id'] = $room_id;
     $ret['instance_id'] = $instance_id;
     $ret['map_sid'] = $map_sid;
     return $ret;
 }
Example #16
0
 protected function get_player_info($player_id, $playerInfo = null, $player_detail = null)
 {
     $objPlayer = $this->get_data('Player');
     $objPlayerDetail = $this->get_data('PlayerDetail');
     //        if(empty($playerInfo)){
     $playerInfo = $objPlayer->get_player_info($player_id);
     //        }
     if (empty($player_detail)) {
         $player_detail = $objPlayerDetail->get_player_detail($player_id, Protocol_Player::get_player_attr_detail_key());
     }
     $objPlayerAttr = $this->get_game('PlayerAttr');
     $objPlayerAttr->clear();
     $objPlayerAttr->set_player_item($playerInfo);
     $objPlayerAttr->set_player_detail_item($player_detail);
     $player_item = $objPlayerAttr->get_player_attr($player_id);
     unset($objPlayer, $objPlayerDetail, $objPlayerAttr);
     return $player_item;
 }
Example #17
0
 public function update_my_level($player_id)
 {
     $player_id = intval($player_id);
     $vip_special_info = $this->get_data('VipSpecial')->get_vip_special_info($player_id);
     $now = strtotime(date('Y-m-d'));
     $del_exp = 50;
     if (empty($vip_special_info)) {
         #非vip特权
         return 0;
     }
     #判断是否存在临时vip特权
     if (isset($vip_special_info['temp_level']) && $vip_special_info['temp_level'] >= $vip_special_info['vip_special_level'] && $vip_special_info['temp_end'] > $now) {
         $this->get_data('Player')->update_player_info($player_id, array('privilege_level' => $vip_special_info['temp_level']));
         $left_time = $vip_special_info['temp_end'] - time();
         $left_date = ceil($left_time / (3600 * 24));
         $this->get_data('VipSpecial')->update_vip_special_info($player_id, array('temp_date' => $left_date));
         $this->add_player_attr($vip_special_info['temp_level'], $player_id);
         return 0;
     } else {
         $this->get_data('VipSpecial')->update_vip_special_info($player_id, array('temp_date' => 0, 'temp_level' => 0));
         $left_time = $vip_special_info['end_time'] - time();
     }
     $vip_level = $this->get_level_for_exp($vip_special_info['vip_special_exp']);
     #确保2个地方的数据一致
     $this->get_data('Player')->update_player_info($player_id, array('privilege_level' => $vip_level));
     $this->get_data('VipSpecial')->update_vip_special_info($player_id, array('vip_special_level' => $vip_level));
     if (!isset($vip_special_info['update_time'])) {
         $vip_special_info['update_time'] = time();
     }
     #已经计算过经验
     if ($vip_special_info['update_time'] >= $now) {
         $this->add_player_attr($vip_level, $player_id);
         if ($left_time < 0) {
             $left_time = 0;
         }
         Protocol_Player::p2c_part_update($player_id, array('privilege_level' => $vip_level, 'privilege_left_time' => $left_time));
         return 0;
     } else {
         $card_id = $vip_special_info['special_sell_card_id'];
         $card_info = Cache_VipSpecial::getInstance()->get_special_card($card_id);
         #根据购买的最高卡获取加经验信息
         $left_date = intval($vip_special_info['left_date']);
         #剩余天数
         $num = ceil((time() - $vip_special_info['update_time']) / (24 * 3600));
         #计算间隔天数
         $min = Cache_VipSpecial::getInstance()->get_special_level(1);
         #获取最低等级的配置
         $sum_exp = $vip_special_info['vip_special_exp'];
         if ($left_date > 0) {
             #超过使用天数
             if ($num >= $left_date) {
                 $vip_special_info['left_date'] = 0;
                 $add_exp = $left_date * $card_info['perday_exp'] - ($num - $left_date) * $del_exp;
                 #扣除不能低于1级
                 if ($vip_special_info['vip_special_exp'] + $add_exp < $min['special_exp']) {
                     $vip_special_info['vip_special_exp'] = $min['special_exp'];
                     $sum_exp = $min['special_exp'];
                 } else {
                     if ($add_exp >= 0) {
                         $vip_special_info['vip_special_exp'] = '+' . $add_exp;
                     } else {
                         $vip_special_info['vip_special_exp'] = '-' . abs($add_exp);
                     }
                     $sum_exp += $add_exp;
                 }
                 $vip_special_info['vip_special_level'] = $this->get_level_for_exp($sum_exp);
             } else {
                 $sum_exp += $num * $card_info['perday_exp'];
                 $vip_special_info['left_date'] = $left_date - $num;
                 $vip_special_info['vip_special_exp'] = '+' . $num * $card_info['perday_exp'];
                 $vip_special_info['vip_special_level'] = $this->get_level_for_exp($sum_exp);
             }
         } else {
             $sum_exp -= $del_exp * $num;
             $vip_special_info['vip_special_exp'] = '-' . $num * $del_exp;
             #扣除不能低于1级
             if ($sum_exp < $min['special_exp']) {
                 $sum_exp = $min['special_exp'];
             }
             $vip_special_info['vip_special_level'] = $this->get_level_for_exp($sum_exp);
             $vip_special_info['left_date'] = 0;
         }
         #更新
         $update_vip_data = array('vip_special_exp' => $vip_special_info['vip_special_exp'], 'left_date' => $vip_special_info['left_date'], 'vip_special_level' => $vip_special_info['vip_special_level'], 'update_time' => time());
         if ($this->get_data('VipSpecial')->update_vip_special_info($player_id, $update_vip_data)) {
             $this->get_data('Player')->update_player_info($player_id, array('privilege_level' => $vip_special_info['vip_special_level']));
             $left_time = $vip_special_info['end_time'] - time();
             if ($left_time < 0) {
                 $left_time = 0;
             }
             Protocol_Player::p2c_part_update($player_id, array('privilege_level' => $vip_special_info['vip_special_level'], 'privilege_left_time' => $left_time));
             $this->add_player_attr($vip_special_info['vip_special_level'], $player_id);
         }
         return true;
     }
     return true;
 }
Example #18
0
 /**
  * 删除公会玩家
  */
 public function del_union_player($union_id, $player_id)
 {
     if ($this->is_trans()) {
         $bDealCheck = $this->set_redis_pre_action(null, array($this->redis(), 'hash_delete'), array($this->get_cache_key($union_id), $player_id));
     } else {
         $bDealCheck = $this->redis()->hash_delete($this->get_cache_key($union_id), $player_id);
     }
     if ($bDealCheck) {
         /* $delsql = "delete from `union_player` where player_id={$player_id}";
         			$this->query($delsql); */
         //Com_Log::log($delsql,'union_player.log',1);
         $this->set_union_expel_list($union_id);
         //			$this->get_data('PlayerDetail')->update_player_detail($player_id,array('union_achieve_attr'=>array()));
         $player_detail = $this->get_data('PlayerDetail')->get_player_detail($player_id, Protocol_Player::get_player_attr_detail_key());
         $player_info = $this->get_data('Player')->get_player_info($player_id, array('career_type', 'level'));
         Protocol_Player::p2c_part_update($player_id, array('attr' => '', 'player_data' => array('player_detail' => $player_detail, 'player' => array('career_type' => $player_info['career_type'], 'level' => $player_info['level']))));
     }
     return $bDealCheck;
 }
Example #19
0
 public function active_dower($player_id, $dower_id)
 {
     $this->get_game('PlayerFunc')->get_func_is_open($player_id, $this->func_id_dower);
     $this->param_check_numeric(array($player_id, $dower_id));
     $player_info = $this->get_data('Player')->get_player_info($player_id, array('career_type', 'level', 'vip', 'privilege_level', 'crystal'));
     # 更新等级和修改时间
     $active_dower_list = $this->get_data('PlayerDower')->get_player_dower($player_id);
     $before_level = isset($active_dower_list[$dower_id]) ? $active_dower_list[$dower_id]['dower_lv'] : 0;
     if (isset($active_dower_list[$dower_id])) {
         $active_dower_list[$dower_id]['dower_lv'] += 1;
         $active_dower_list[$dower_id]['mod_time'] = $this->current_time;
     } else {
         $active_dower_list[$dower_id] = array('dower_id' => $dower_id, 'dower_lv' => 1, 'player_id' => $player_id, 'mod_time' => $this->current_time);
     }
     # 获取天赋配置信息
     $dower_info = Cache_Dower::getInstance()->get_dower_info($dower_id, $active_dower_list[$dower_id]['dower_lv'], 1);
     if ($player_info['level'] < $dower_info['unlock']) {
         $this->throw_error('80605');
         # 玩家等级不足
     }
     $this->start_trans();
     # 消耗魔晶
     if (!empty($dower_info['cost_crystal'])) {
         $this->get_data('Player')->check_player_resource($player_id, $player_info, '-', 'crystal', $dower_info['cost_crystal'], 1);
         $re = $this->get_data('Player')->update_player_resource($player_id, $player_info, '613');
         $this->write_check($re, 3010895);
     }
     # 消耗材料
     if (!empty($dower_info['item_id']) && !empty($dower_info['item_num'])) {
         # deduct_prop_by_prop_id方法中有判断道具是否足够,故外层不判断
         $arr_logs_consume = array();
         $log_param = array('level' => $player_info['level'], 'vip' => $player_info['vip'], 'privilege_level' => $player_info['privilege_level'], 'cmd_id' => 613);
         $re = $this->get_game('Prop')->deduct_prop_by_prop_id($player_id, $dower_info['item_id'], $dower_info['item_num'], $arr_logs_consume, 0, $log_param);
         $this->write_check($re, 3010904);
     }
     # 更新玩家已激活天赋信息
     $re = $this->get_data('PlayerDower')->update_player_dower($player_id, $active_dower_list[$dower_id]);
     $this->write_check($re, 3010909);
     # 获取玩家已经启用的天赋信息
     $get_field = Protocol_Player::get_player_attr_detail_key();
     $get_field[] = 'skill_starmap_info';
     $get_field[] = 'skill_info';
     $get_field[] = 'skill_rune_info';
     $get_field[] = 'dower_info';
     $player_detail = $this->get_data('PlayerDetail')->get_player_detail($player_id, $get_field);
     $player_detail['dower_info'][$dower_id] = array('slot_idx' => 0, 'dower_id' => $dower_id, 'dower_lv' => $active_dower_list[$dower_id]['dower_lv']);
     $re = $this->get_data('PlayerDetail')->update_player_detail($player_id, array('dower_info' => $player_detail['dower_info']));
     $this->write_check($re, 3010915);
     $this->commit();
     #引导任务
     #if (empty($before_level)) { # 激活才触发,升级不触发
     $this->get_game('TaskTrigger')->async_trigger_guide_task($player_id, 13, 1);
     # 升级也算
     #}
     # --------------------------------------------------------------------
     # 806同步道具变更
     # --------------------------------------------------------------------
     $ndata = array();
     if (!empty($arr_logs_consume)) {
         foreach ($arr_logs_consume as $k => $v) {
             # 消耗的道具
             $ndata[] = $v;
         }
     }
     Protocol_Prop::prop_806($player_id, $ndata);
     # --------------------------------------------------------------------
     # 脏数据同步
     # --------------------------------------------------------------------
     //同步人物属性
     $arr_part_update['dower_info'] = '';
     $arr_part_update['player_data'] = array('player_detail' => $player_detail, 'player' => array('career_type' => $player_info['career_type'], 'level' => $player_info['level']));
     Protocol_Player::p2c_part_update($player_id, $arr_part_update);
     $out_613 = array('dower_id' => $dower_id, 'dower_lv' => $active_dower_list[$dower_id]['dower_lv']);
     # 成就相关埋点
     $this->handle_dower_refer_achieve($player_id);
     # 旧的仍然保留
     $achieve_val = "1:" . $active_dower_list[$dower_id]['dower_lv'] . ":" . $dower_id;
     $this->get_game('PlayerAchieve')->async_trigger_achieve_target($player_id, 48, $achieve_val, 4);
     # --------------------------------------------------------------------
     # 游戏日志记录
     # --------------------------------------------------------------------
     $log_info = array('player_id' => $player_id, 'player_level' => $player_info['level'], 'vip_level' => $player_info['vip'], 'vip_special_level' => $player_info['privilege_level'], 'add_time' => $this->current_time, 'dower_id' => $dower_id, 'dower_name' => $dower_info['name'], 'before_level' => $before_level, 'after_level' => $active_dower_list[$dower_id]['dower_lv']);
     Log_Skill::getInstance()->add_log($log_info, 'dower');
     return $out_613;
 }
Example #20
0
 public function CMD2_557()
 {
     #加锁
     $lockKey = 'CMD2_557' . $this->_authuser['player_id'];
     if (!Com_Lock::lock($lockKey)) {
         $this->check_error('1714001');
         #加锁失败
     }
     $this->get_game('PlayerFunc')->get_func_is_open($this->_authuser['player_id'], 29);
     $data = $this->get_game('Hero')->player_hero_grow_upgrade($this->_authuser['player_id'], $this->_param[0], $this->_param[1], $this->_param[2]);
     Com_Lock::unLock($lockKey);
     Protocol::input($this->_authuser['player_id'], 3, 5, 557, $data);
     Protocol_Player::p2c_part_update($this->_authuser['player_id'], array('hero_info' => array(), 'attr' => array()));
     $this->CMD2_501();
 }
Example #21
0
 /**
  * 添加多种资源 资源是指 黄金 钻石 等这些资源
  * @param $player_id 用户id
  * @param $level     用户等级
  * @param $vip_level vip等级
  * @param $cmd_id    cmd2 指令
  * @param $data      array('type',item_id,item_num,amount) 具体含义 参照 add_resource_log 里的 $item
  * @param $arr_consume      array('price',gold,ticket,count) or array()  同 Data/Player.php update_player_resource 里的 $arr_consume
  * @return bool
  */
 public function add_multi_resource_log($player_id, $level, $vip_level, $vip_special_level, $cmd_id, $data, $arr_consume = array())
 {
     $arr_async = array();
     if (Com_Array::is_arr2($data)) {
         foreach ($data as $param) {
             if ($param['item_num'] > 0) {
                 $this->add_resource_log($player_id, $level, $vip_level, $vip_special_level, $cmd_id, $param['type'], $param['item_id'], $param['item_num'], $param['amount'], $param['front_attr'], $param['after_attr']);
             }
             $key = Cache_Currency::getInstance()->get_key($param['item_id']);
             if (isset($param['is_async']) && $param['is_async'] == 0) {
                 #这时候是不推送的 做不推送的操作 具体啥操作 待定
             } else {
                 if ($param['type'] == 1) {
                     $arr_async[$key] = $param['amount'] + $param['item_num'];
                 } elseif ($param['type'] == 2) {
                     $arr_async[$key] = $param['amount'] - $param['item_num'];
                     ###############################################################################
                     #   道具消费,上报数据
                     if (OPERATOR_ID == 82) {
                         $playerData = TenYear::getInstance("Data_player")->get_player_info($player_id, array("session_id"));
                         $arrUpload = TenYear::getInstance("Game_online")->get_session($playerData['session_id']);
                         $platform = $arrUpload['platform'];
                         $serverId = $arrUpload['server_id'];
                         $openid = $arrUpload['openid'];
                         Com_TencentDataUpload::getInstance()->init($platform, $serverId, $player_id, $openid);
                         $arr_consume_upload = array("level" => $level, "itemid" => $data['item_id'], "itemtype" => $data['type'], "itemcnt" => $data['item_num']);
                         if (!($res = Com_TencentDataUpload::getInstance()->consume_data_upload($arr_consume_upload))) {
                             Com_Log::write("uploadDataError", "consume_data_upload failed!");
                         }
                     }
                     ###############################################################################
                 }
             }
         }
     } else {
         if ($data['item_num'] > 0) {
             $this->add_resource_log($player_id, $level, $vip_level, $vip_special_level, $cmd_id, $data['type'], $data['item_id'], $data['item_num'], $data['amount'], $data['front_attr'], $data['after_attr']);
         }
         $key = Cache_Currency::getInstance()->get_key($data['item_id']);
         if (isset($data['is_async']) && $data['is_async'] == 0) {
             #检查否同步前端
             #这时候是不推送的 做不推送的操作 具体啥操作 待定
         } else {
             if ($data['type'] == 1) {
                 $arr_async[$key] = $data['amount'] + $data['item_num'];
             } elseif ($data['type'] == 2) {
                 $arr_async[$key] = $data['amount'] - $data['item_num'];
             }
         }
     }
     if ($arr_consume) {
         $params['act'] = $cmd_id;
         $params['level'] = $level;
         $params['price'] = $arr_consume['price'];
         $params['gold'] = $arr_consume['gold'];
         $params['black_gold'] = $arr_consume['ticket'];
         $params['count'] = $arr_consume['count'];
         $params['time'] = time();
         Com_DataCenter::getInstance()->publish_data($player_id, 'prop', $params);
     }
     # 先注释了
     if ($arr_async) {
         Protocol_Player::p2c_part_update($player_id, $arr_async);
         #同步资
     }
     return true;
 }
Example #22
0
 /**
  * @Purpose:
  * 数据修复检测
  */
 public function data_repair($player_id, $player_detail = array())
 {
     $player_id = intval($player_id);
     if (empty($player_detail)) {
         $player_detail = $this->get_data('PlayerDetail')->get_player_detail($player_id, Protocol_Player::get_player_attr_detail_key());
     }
     $data = $player_detail['wing_info'];
     if (Com_Array::is_good_arr($data)) {
         $is_update = false;
         foreach ($data as $wing_id => $wing_data) {
             if ($wing_data['activation'] == 2 && $wing_data['condition'][0] == 4) {
                 if ($wing_data['repair_flag'] < $this->repair_flag) {
                     if (Com_Array::is_good_arr($wing_data['equipment'])) {
                         foreach ($wing_data['equipment'] as $pos => $equipment) {
                             if ($wing_data['repair_flag'] < 4) {
                                 $wing_data['equipment'][$pos] = array();
                                 $arr_remove_prop_detail = $equipment;
                                 Struct_Prop::get_item_additions($arr_remove_prop_detail);
                                 $arr_config = Cache_Prop::getInstance()->get_prop_info($arr_remove_prop_detail['prop_id']);
                                 $arr_remove_prop_detail['type'] = $arr_config['type'];
                                 $wing_data['fight'] -= $arr_remove_prop_detail['fpower'];
                                 $wing_data['fight'] = $wing_data['fight'] > 0 ? $wing_data['fight'] : 0;
                                 $wing_data['equipment_fight'] -= $arr_remove_prop_detail['fpower'];
                                 $wing_data['equipment_fight'] = $wing_data['equipment_fight'] > 0 ? $wing_data['equipment_fight'] : 0;
                                 # ----------------------------------------
                                 # 修复已穿戴装备的属性[在Data/PlayerProp.php中会修复的所有属性][吞噬属性+附加属性]
                                 # ----------------------------------------
                                 $equipment = $this->get_data('PlayerProp')->get_player_prop_detail($player_id, $equipment['player_prop_id']);
                                 $wing_data['equipment'][$pos] = $equipment;
                                 $wing_data['equip_attr'] = $this->get_wing_equip_attr($wing_data['equipment']);
                                 $arr_prop_detail = $equipment;
                                 Struct_Prop::get_item_additions($arr_prop_detail);
                                 $arr_config = Cache_Prop::getInstance()->get_prop_info($arr_prop_detail['prop_id']);
                                 $arr_prop_detail['type'] = $arr_config['type'];
                                 $wing_data['fight'] += $arr_prop_detail['fpower'];
                                 $wing_data['equipment_fight'] += $arr_prop_detail['fpower'];
                                 $data[$wing_id] = $wing_data;
                             }
                         }
                     }
                 }
                 if ($wing_data['repair_flag'] < 3 && $wing_data['fight'] > 0) {
                     $this->get_data('RankList')->update_wing_rank($player_id, $wing_id, $wing_data['fight']);
                 }
                 $data[$wing_id]['repair_flag'] = $this->repair_flag;
                 $is_update = true;
             }
         }
         if ($is_update) {
             $this->start_trans();
             $update_res = $this->get_data('PlayerDetail')->update_player_detail($player_id, array('wing_info' => $data));
             if (!$update_res) {
                 $this->throw_error('10104');
             }
             $this->commit();
             $player_detail['wing_info'] = $data;
             #同步属性
             $player_info = $this->get_data('Player')->get_player_info($player_id, array('career_type', 'level'));
             $str = $this->get_activation_wing_interface($player_id, $player_detail['wing_info']);
             Protocol_Player::p2c_part_update($player_id, array('had_on_swings' => $str, 'wing' => '', 'attr' => '', 'player_data' => array('player_detail' => $player_detail, 'player' => array('career_type' => $player_info['career_type'], 'level' => $player_info['level']))));
         }
     }
 }
Example #23
0
 public function set_player_city($player_id, $city_id, $city_x, $city_y)
 {
     //        Com_Log::write("set_player_city.".$player_id,"player_id:{$player_id} city_id:{$city_id} city_x:{$city_x} city_y:{$city_y}");
     $result = $this->get_data('Player')->update_player_info($player_id, array('city_id' => $city_id, 'city_x' => $city_x, 'city_y' => $city_y));
     if ($result) {
         Protocol_Player::p2c_part_update($player_id, array('city_id' => $city_id, 'city_x' => $city_x, 'city_y' => $city_y));
         //            $syn_item['city_id'] = $city_id;
         //            $syn_item['city_x'] = $city_x;
         //            $syn_item['city_y'] = $city_y;
         //            SynPlayer::set_syn_data($syn_item);
         //            $data = SynPlayer::get_data();
         //            Protocol::input($player_id,7,4,417,array(0=>$data['m'],1=>$data['u']));
     }
 }
Example #24
0
 public function update_athena_remaining_count($sid, $roles)
 {
     foreach ($roles as $val) {
         $this->get_data('PlayerDailyTime')->add_used_time($val, $this->used_key);
         $this->get_data('PlayerDailyTime')->set_used_time($val, 'athena_inspire_gold_count');
         $this->get_data('PlayerDailyTime')->set_used_time($val, 'athena_inspire_silver_count');
         $this->get_data('PlayerDailyTime')->set_used_time($val, 'athena_relive_count');
         $this->get_data('PlayerDailyTime')->set_used_time($val, 'athena_resume_count');
         $set = Cache_ActivityHall::getInstance()->get_Activity_set(4001);
         $used = $this->get_athena_remaining_count($val, 0);
         #同步次数给c++
         if (!empty($set)) {
             $left_num = $set[0]['max_times'] - $used;
         } else {
             $left_num = 0;
         }
         if ($left_num < 0) {
             $left_num = 0;
         }
         Protocol_Player::p2c_part_update($val, array('athena_remaining_count' => $left_num));
         #添加日常任务进度跟踪
         $this->get_game('TaskTrigger')->async_trigger_task($val, 103, $sid, 1);
         //找回资源埋点
         $this->get_game('GetBackCurrency')->add_function_day_times($val, 11);
     }
 }
Example #25
0
 public function fix_hero_fit_data()
 {
     $player_ids = array(363, 120, 443, 6715, 14732, 354, 6144, 2242, 1165, 66868, 190, 11616, 65210, 4192, 6253, 14187, 136, 2874, 2258, 15272, 10760, 3059, 68758, 2003, 634, 3175, 5810, 3790, 65974, 221, 132, 93, 411, 3434, 55, 65738, 3508, 13260, 69386, 68686, 11935, 11655, 19, 1024, 3427, 3217, 72420, 2974);
     $union_attr = $this->get_data('PlayerDetail')->get_player_detail($player_id, 'union_hero_attr');
     foreach ($player_ids as $player_id) {
         $hero_list = $this->get_data('PlayerHero')->get_player_hero_list($player_id);
         foreach ($hero_list as $hero_id => $hero_info) {
             $hero_info = Com_FmtData::cus_json_decode($hero_info);
             if (!empty($hero_info) && $hero_info['fit'] > 4) {
                 $attr_table = $this->get_game('Hero')->get_hero_attr_table($hero_info['hero_code']);
                 if (!empty($attr_table)) {
                     $skill_data = $this->get_game('Hero')->create_hero_skill_data($attr_table);
                     $hero_info['skill_list'] = $skill_data;
                     $hero_info['fit'] = 0;
                     $hero_info['fit_life'] = 0;
                     $hero_info['fit_attack'] = 0;
                     $hero_info['fit_def'] = 0;
                     $hero_info['fit_grow'] = 0;
                     $hero_info['fit_attr_per'] = '';
                     $hero_info['fit_other_attr'] = '';
                     $hero_info['fit_expend_record'] = '';
                     $hero_info['fight'] = $this->get_game('Hero')->calc_fight($hero_info['player_id'], $hero_info, $hero_info['fit'], $hero_info['rune_hole_list'], $hero_info['star_add_attr_per'], $hero_info['skill_list'], $union_attr);
                     $this->start_trans();
                     $update_field = array('fight', 'skill_list', 'fit', 'fit_life', 'fit_attack', 'fit_def', 'fit_grow', 'fit_attr_per', 'fit_other_attr', 'fit_expend_record');
                     //更新redis,sql数据
                     $update_res = $this->get_game('Hero')->update_db($player_id, $update_field, $hero_info, 519);
                     if (!$update_res) {
                         echo '10104' . '|' . $hero_id;
                         exit;
                     }
                     $this->commit();
                 }
             }
         }
         Protocol_Player::p2c_part_update($player_id, array('hero_info' => array()));
     }
 }
Example #26
0
 /**
  * 重新计算下装备下属性 在穿脱 强化身上的装备
  * @param $player_id
  * @return mixed
  */
 public function equip_attr($player_id)
 {
     $get_field = Protocol_Player::get_player_attr_detail_key();
     $get_field[] = 'skill_starmap_info';
     $get_field[] = 'skill_info';
     $get_field[] = 'skill_rune_info';
     $get_field[] = 'dower_info';
     $get_field[] = 'fashion_fit';
     $get_field[] = 'player_settings';
     $player_detail = $this->get_data('PlayerDetail')->get_player_detail($player_id, $get_field);
     # 需要将星图对技能的加成信息初始化为空后,再重新计算身上装备的星图对技能的加成信息,否则,skill_starmap_info只增不减
     # 即每次重新计算身上装备的属性时,都重新计算skill_starmap_info
     $player_detail['skill_starmap_info'] = array();
     $equip_lists = $this->get_game('Prop')->get_player_equip($player_id);
     $arr_equip_attr = array();
     $equip_skill = array();
     $equip_swallow = array();
     if (!empty($equip_lists)) {
         $equip_suit_quality = array();
         $equip_suit_strength = array();
         $equip_suit_star = array();
         $equip_suit_inlay = 0;
         $equip_level = array();
         foreach ($equip_lists as $equip) {
             if ($equip['grid'] < 10) {
                 $equip_level[$equip['level']] += 1;
                 $equip_suit_quality[$equip['quality']] += 1;
                 if ($equip['intensive_level']) {
                     $equip_suit_strength[$equip['intensive_level']] += 1;
                 }
                 $equip_suit_star[$equip['star_level']] += 1;
             }
             if (is_string($equip['base_attr'])) {
                 $base_attr = json_decode($equip['base_attr'], true);
             } else {
                 $base_attr = $equip['base_attr'];
             }
             $star_map = array();
             if (!empty($equip['star_map_desc'])) {
                 if (is_string($equip['star_map_desc'])) {
                     $equip['star_map_desc'] = json_decode($equip['star_map_desc'], true);
                 }
                 $star_map = Struct_Prop::parse_star_map($equip['star_map_desc']);
                 # 星图觉醒技能信息更新到player_detail表的skill_starmap_info中
                 if (!empty($equip['career_type']) && !empty($star_map['skill'])) {
                     foreach ($star_map['skill'] as $career_type => $skill_info) {
                         if ($equip['career_type'] != $career_type) {
                             continue;
                         }
                         $player_detail['skill_starmap_info'][$skill_info['skill_id']] += $skill_info['skill_level'];
                     }
                 }
             }
             # 吞噬属性
             if (!empty($equip['swallow_info']) && is_array($equip['swallow_info'])) {
                 foreach ($equip['swallow_info'] as $swallow_id => $swallow_info) {
                     $swallow_config = Cache_Forge::getInstance()->get_swallow_config($swallow_id, $swallow_info['swallow_lv']);
                     $equip_swallow[$swallow_id] += intval($swallow_config['swallow_param']);
                 }
             }
             if (!empty($base_attr)) {
                 //计算基础属性
                 foreach ($base_attr as $key => $val) {
                     $val += $val * (intval($star_map['equip_attr']) / 100);
                     //星图加成
                     if ($key == 'atk' || $key == 'atk_max' || $key == 'atk_min') {
                         $arr_equip_attr['atk_min'] += $val;
                     } else {
                         $arr_equip_attr[$key] += $val;
                     }
                 }
             }
             if (intval($equip['addition_attr']) > 0) {
                 foreach ($equip['addition_attr'] as $key => $val) {
                     if (isset($star_map['additional'])) {
                         $val += ceil($val * ($star_map['additional'] / 10000));
                         //星图加成
                     }
                     if ($key == 'atk' || $key == 'atk_max' || $key == 'atk_min') {
                         $arr_equip_attr['atk_min'] += $val;
                     } else {
                         $arr_equip_attr[$key] += $val;
                     }
                 }
             }
             # ------------------------------------------------------------
             # 洗练属性处理
             # ------------------------------------------------------------
             if (!empty($equip['refine_attr'])) {
                 foreach ($equip['refine_attr'] as $attr_seq => $attr_info) {
                     if (!is_array($attr_info)) {
                         continue;
                     }
                     # TODO: 为了兼容旧的洗练数据,以后要清档上功能,可以除去这行
                     list($key, $val) = each($attr_info);
                     # atk相关特殊处理,将atk与atk_max替换成atk_min,因为role_key只有atk_min
                     if ($key == 'atk' || $key == 'atk_max') {
                         $key = 'atk_min';
                     }
                     $arr_equip_attr[$key] += $val;
                 }
             }
             if (is_string($equip['intensive_desc'])) {
                 $intensive_desc = json_decode($equip['intensive_desc'], true);
             } else {
                 $intensive_desc = $equip['intensive_desc'];
             }
             if (!empty($intensive_desc)) {
                 foreach ($intensive_desc as $key => $val) {
                     $val += $val * (intval($star_map['intensify']) / 10000);
                     //星图加成
                     if ($key == 'atk' || $key == 'atk_min' || $key == 'atk_max') {
                         $arr_equip_attr['atk_min'] += $val;
                     } else {
                         $arr_equip_attr[$key] += $val;
                     }
                 }
             }
             $gem_configs = array();
             if (is_string($equip['inlay_gems'])) {
                 $inlay_gems = json_decode($equip['intensive_desc'], true);
             } else {
                 $inlay_gems = $equip['inlay_gems'];
             }
             if (!empty($inlay_gems)) {
                 foreach ($inlay_gems as $gem_id) {
                     if (!isset($gem_configs[$gem_id])) {
                         $gem_configs[$gem_id] = Cache_Forge::getInstance()->get_inlay_gems_by_id($gem_id);
                     }
                     if ($equip['grid'] < 10) {
                         $equip_suit_inlay += $gem_configs[$gem_id]['lv'];
                     }
                     $attr = Struct_Prop::parse_gem_config_attr($gem_configs[$gem_id]);
                     if (!empty($attr)) {
                         foreach ($attr as $key => $val) {
                             if ($key == 'atk' || $key == 'atk_min' || $key == 'atk_max') {
                                 $arr_equip_attr['atk_min'] += $val;
                             } else {
                                 $arr_equip_attr[$key] += $val;
                             }
                         }
                     }
                 }
             }
         }
         //套装加成
         $item_flags = Cache_ItemFlag::getInstance()->get_item_flag_info(1);
         $level_count = count($equip_level);
         if (!empty($item_flags)) {
             $flags_addition = array();
             foreach ($item_flags as $flag) {
                 if ($flag['type'] == 'quality') {
                     $conditions = explode("|", $flag['condition']);
                     $fnum = explode(":", $flag['flag']);
                     $add_flag = 0;
                     foreach ($conditions as $c) {
                         $condition = explode(":", $c);
                         if ($condition[0] == 'quality' && $this->get_conditions_num($equip_suit_quality, $condition[1]) >= $fnum[1]) {
                             $add_flag += 1;
                         }
                         if ($condition[0] == 'level' && $this->get_conditions_num($equip_level, $condition[1]) >= $fnum[1]) {
                             $add_flag += 1;
                         }
                         if ($condition[0] == 'star' && $this->get_conditions_num($equip_suit_star, $condition[1]) >= $fnum[1]) {
                             $add_flag += 1;
                         }
                     }
                     if (count($conditions) == $add_flag) {
                         $flag_attr = json_decode($flag['attr'], true);
                         $flags_addition['quality'] = $flag_attr;
                         # 改同一类型覆盖了
                         //                            Com_Log::write('equip_flags.'.$player_id,"quality_flag_attr:".var_export($flag_attr,true));
                         //                            foreach($flag_attr as $key=>$val){
                         //                                $arr_equip_attr[$key] += $val['val'];
                         //                            }
                     }
                 } elseif ($flag['type'] == 'strength') {
                     $conditions = explode("|", $flag['condition']);
                     $fnum = explode(":", $flag['flag']);
                     $add_flag = 0;
                     foreach ($conditions as $c) {
                         $condition = explode(":", $c);
                         if ($condition[0] == 'intensive_level' && $this->get_conditions_num($equip_suit_strength, $condition[1]) >= $fnum[1]) {
                             $add_flag += 1;
                         }
                     }
                     if (count($conditions) == $add_flag) {
                         $flag_attr = json_decode($flag['attr'], true);
                         $flags_addition['strength'] = $flag_attr;
                         //                            Com_Log::write('equip_flags.'.$player_id,"strength_flag_attr:".var_export($flag_attr,true));
                         //                            foreach($flag_attr as $key=>$val){
                         //                                $arr_equip_attr[$key] += $val['val'];
                         //                            }
                     }
                 } elseif ($flag['type'] == 'inlay') {
                     $fnum = explode(":", $flag['flag']);
                     if ($equip_suit_inlay >= $fnum[1]) {
                         $flag_attr = json_decode($flag['attr'], true);
                         $flags_addition['inlay'] = $flag_attr;
                         //                            Com_Log::write('equip_flags.'.$player_id,"inlay_flag_attr:".var_export($flag_attr,true));
                         //                            foreach($flag_attr as $key=>$val){
                         //                                $arr_equip_attr[$key] += $val['val'];
                         //                            }
                     }
                 }
             }
         }
         if (!empty($flags_addition)) {
             foreach ($flags_addition as $flag_attr) {
                 foreach ($flag_attr as $key => $val) {
                     $arr_equip_attr[$key] += $val['val'];
                 }
             }
         }
     }
     $equip_model = array();
     for ($i = 0; $i < 10; $i++) {
         if (isset($equip_lists[$i])) {
             if (!empty($equip_lists[$i]['equip_view'])) {
                 if (is_string($equip_lists[$i]['equip_view'])) {
                     $equip_model[$i] = $equip_lists[$i]['equip_view'];
                 } else {
                     $equip_model[$i] = implode(':', $equip_lists[$i]['equip_view']);
                     //先这样 不想清理数据了  下次清理完数据改了
                 }
                 if ($equip_model[$i] == '0:0:0:0' || $equip_model[$i] == '0:0:0') {
                     $equip_model[$i] = '';
                 }
             } else {
                 $equip_model[$i] = '';
             }
         }
     }
     $player_detail['equip_attr'] = $arr_equip_attr;
     $player_detail['skill_starmap_info'] = $player_detail['skill_starmap_info'];
     $result = $this->get_data('PlayerDetail')->update_player_detail($player_id, array('equip_attr' => $arr_equip_attr, 'skill_starmap_info' => $player_detail['skill_starmap_info']));
     if ($result) {
         $player_info = $this->get_data('Player')->get_player_info($player_id, array('career_type', 'level'));
         //同步人物属性
         $arr_part_update['attr'] = '';
         $arr_part_update['player_data'] = array('player_detail' => $player_detail, 'player' => array('career_type' => $player_info['career_type'], 'level' => $player_info['level']));
         $arr_part_update['equip_skill'] = $equip_skill;
         $arr_part_update['equip_model'] = $equip_model;
         $arr_part_update['equip_swallow'] = $equip_swallow;
         $arr_part_update['skill_infos'] = '';
         Protocol_Player::p2c_part_update($player_id, $arr_part_update);
     }
     return $result;
 }
Example #27
0
 /**
  * 解散公会
  */
 public function dismiss_union1($union_id)
 {
     $unionPlayerList = $this->get_data('UnionPlayer')->get_union_player_info($union_id);
     if ($unionPlayerList) {
         foreach ($unionPlayerList as $union_player) {
             $is_online = $this->get_data('Player')->get_player_info($union_player['player_id'], "is_online");
             $retPlayerInfo = $this->get_data('Player')->update_player_info($union_player['player_id'], array('union_id' => 0, 'union_name' => '', 'union_job' => 0));
             if ($retPlayerInfo) {
                 $this->commit();
                 $this->get_game('Union')->Sync_Union_msg($union_id);
             } else {
                 $this->rollback();
                 if ($is_online) {
                     Protocol_Player::p2c_part_update($union_player['player_id'], array('union_id' => 0, 'union_name' => '', 'union_job' => 0));
                 }
             }
         }
     }
     //公会基本删除
     $this->get_data('UnionInfo')->delete_union_info($union_id);
     //公会申请删除
     $this->get_data('UnionApply')->delete_union_apply($union_id);
     //公会日志删除
     $this->get_data('UnionLog')->delete_union_log($union_id);
     //公会玩家删除
     $this->get_data('UnionPlayer')->delete_union_player($union_id);
     //公会活动删除
     $this->get_data('UnionActivities')->delete_union_activities($union_id);
     //公会商店删除
     $this->get_data('UnionShop')->delete_union_shop($union_id);
     //公会科技删除
     $this->get_data('UnionTech')->delete_union_tech($union_id);
     //公会boss删除
     $this->get_data('UnionBoss')->delete_union_boss($union_id);
     //公会巨炮删除
     $this->get_data('UnionBomb')->delete_union_bomb($union_id);
 }
Example #28
0
 public function doAction()
 {
     $userInfo_json = base64_decode($_POST['data']);
     $arrData = json_decode($userInfo_json, true);
     $strAccount = isset($arrData["user_account"]) ? trim($arrData["user_account"]) : "";
     #账号
     $strOrderId = isset($arrData["order_id"]) ? trim($arrData["order_id"]) : "";
     #订单号
     $iGameMoney = isset($arrData["game_money"]) ? intval($arrData["game_money"]) : 0;
     #充值黄金
     $iUMoney = isset($arrData["u_money"]) ? floatval($arrData["u_money"]) : 0;
     #充值U币(可以理解为人民币)
     $serverId = isset($arrData['server_id']) ? $arrData['server_id'] : 0;
     $player_id = isset($arrData['player_id']) ? $arrData['player_id'] : 0;
     $type = isset($arrData['type']) ? $arrData['type'] : 1;
     #1充值 2赠送3仅仅刷新VIP
     if (intval($iGameMoney) <= 0) {
         echo json_encode(array('status' => 0, 'data' => '充值金额有误'));
         exit;
     }
     if (!in_array($type, array(1, 2, 3))) {
         echo json_encode(array('status' => 8, 'data' => '类型错误'));
         #类型错误
         exit;
     }
     if (!empty($strAccount)) {
         $player_id = $this->get_data('Account')->get_pid_byaccount($strAccount, true, $serverId);
     }
     if (empty($player_id)) {
         echo json_encode(array('status' => 0, 'data' => '账户不存在'));
         exit;
     }
     $objPlayerCharge = $this->get_data('PlayerCharge');
     if ($type == 1) {
         $strOrderId = "gm" . time();
         // 			$arrCharge = $objPlayerCharge->get_charge_info($strOrderId);
         // 			if(!empty($arrCharge)){
         // 				echo  json_encode(array('status'=>0, 'data'=>'订单不存在'));
         // 				exit;
         // 			}
     }
     $objPlayerData = $this->get_data('Player');
     $arrPlayer = $objPlayerData->get_player_info($player_id, array('gold', 'level', 'vip', 'privilege_level'));
     $b_gold = $arrPlayer['gold'];
     #改变之前的钻石
     // $iGold = $arrPlayer['gold'];
     // $player_level = $arrPlayer['level'];
     $result = false;
     #$this->get_data('Player')->check_player_resource($player_id, $player_info, '+', 'gold', $iGameMoney);
     $this->start_trans();
     $iGold = $iGameMoney * 10;
     /*
     if ($iGameMoney)
     {
     	$result = $this->get_data('Player')->update_player_resource($player_id, $player_info, 525);
     }
     */
     $result = $objPlayerData->update_player_info($player_id, array('gold' => "+" . $iGold));
     if ($result) {
         $after = $arrPlayer['gold'] + $iGold;
         if ($type == 1) {
             //充值
             $result = $objPlayerCharge->add_charge($player_id, $strOrderId, $strAccount, $arrPlayer['level'], $iGold, $iGameMoney, $b_gold, $after);
         } else {
             //赠送
             $result = $objPlayerCharge->add_present($player_id, $iGameMoney);
         }
         if ($type == 2) {
             //计入充值活动
             $player_charge_dummy_info = array();
             $player_charge_dummy_info["order_id"] = "gmorder" . time();
             $player_charge_dummy_info["player_id"] = $player_id;
             $player_charge_dummy_info["user_account"] = $strAccount;
             $player_charge_dummy_info["player_level"] = $arrPlayer['level'];
             $player_charge_dummy_info["front_gold"] = $b_gold;
             $player_charge_dummy_info["gold"] = $iGold;
             $player_charge_dummy_info["after_gold"] = $after;
             $player_charge_dummy_info["u_money"] = $iGameMoney;
             $player_charge_dummy_info["add_time"] = time();
             $player_charge_dummy_info["active"] = 0;
             $player_charge_dummy_info["active2"] = 0;
             $player_charge_dummy_info["active3"] = 0;
             $player_charge_dummy_info["active4"] = 0;
             $player_charge_dummy_info["active5"] = 0;
             $result = $this->get_data("Event")->insert_into_player_charge_dummy($player_charge_dummy_info);
         }
     }
     if ($result) {
         $this->commit();
         if ($type == 1) {
             //充值记录
             Log_Charge::getInstance()->add_charge_log($player_id, $arrPlayer['level'], $arrPlayer['vip'], $arrPlayer['privilege_level'], $strOrderId, $iGold, $iUMoney, $arrPlayer['gold'], $b_gold);
         } else {
             Log_Common::getInstance()->add_resource_log($player_id, $arrPlayer['level'], $arrPlayer['vip'], $arrPlayer['privilege_level'], 100, 1, 2, $iGold, $arrPlayer['gold']);
         }
         // 				$logs[] = array('type'=>1,'item_id'=>2,'item_num'=>$iGold,'amount'=>$arrPlayer['gold']);
         //			Log_Common::getInstance()->add_resource_log($player_id, $arrPlayer['level'], $arrPlayer['vip'],$arrPlayer['privilege_level'], 100, 1, 2, $iGold, $arrPlayer['gold']);
         // 				Log_Common::getInstance()->add_multi_resource_log($player_id, $arrPlayer['level'], $arrPlayer['vip'],$arrPlayer['privilege_level'], 100, $logs);
         $data['status'] = 1;
         $data['data']['success'][] = $player_id;
         #同步更新面板数据
         Protocol_Player::p2c_part_update($player_id, array('gold' => $iGold + $arrPlayer['gold']));
         #vip升级
         if ($type == 3) {
             #不参加 首次充值
             $this->get_game('VipReward')->vip_upgrade($player_id, $iGold);
         } else {
             $this->get_game('VipReward')->vip_upgrade($player_id, $iGold);
         }
         #新服活动
         if ($type < 3) {
             $pub_day = $this->get_data('NewServerActivity')->get_server_day();
             if ($pub_day <= 7) {
                 $this->get_game('NewServerActivity')->add_sign($player_id, $pub_day, $iGold);
             }
         }
     } else {
         $this->rollback();
         $data['status'] = 0;
     }
     echo json_encode($data);
     define("FROM_GATEWAY", true);
     $this->get_game('PlayerFunc')->sync_func_tips($player_id, 1260);
     Protocol::out();
     return;
 }
Example #29
0
 public function do_func_open($player_id, $type, $condition_id, $player_info = null)
 {
     if (!isset($this->funconfig[$type][$condition_id])) {
         $this->funconfig[$type][$condition_id] = Cache_FuncConfig::getInstance()->get_func_config_by_open_type_condition_id($type, $condition_id);
     }
     $func_list = $this->funconfig[$type][$condition_id];
     if ($func_list) {
         $player_detail = $this->get_data('PlayerDetail')->get_player_detail($player_id, array('func_open'));
         $func_open = $player_detail['func_open'];
         $out = array();
         $guide_out = array();
         $send_fairy = array();
         $guide_id = array();
         $arr_player_task = array();
         $meditation_open_status = false;
         //            Com_Log::write('guide_'.$player_id,"func_list:".var_export($func_list,true));
         foreach ($func_list as $val) {
             if (SERVER_ID > 1 && $val['issue'] == 0) {
                 continue;
             }
             if (!isset($func_open[$val['func_id']])) {
                 if (1110 == $val['func_id']) {
                     continue;
                 }
                 $func_open[$val['func_id']] = 1;
                 $out[0][] = array('operate' => 1, 'func_id' => $val['func_id'], 'open' => 1, 'guide' => 0, 'cd' => 0, 'tip' => $this->get_game('PlayerFunc')->get_func_tips($player_id, $val['func_id'], null, $func_open));
                 if ($val['func_id'] == 44) {
                     # 同步冥想开启状态
                     $meditation_open_status = true;
                 }
                 if ($val['func_id'] == 30) {
                     #开启暗女神
                     try {
                         $this->get_game('Fairy')->add_fairy($player_id, 201);
                     } catch (Exception $e) {
                         //                            Com_Log::write("task_fairy_send_error","send fairy 101 error player_id:{$player_id} ##".var_export($e,true));
                     }
                 }
                 if ($val['func_id'] == 33) {
                     #开启光女神
                     try {
                         $this->get_game('Fairy')->add_fairy($player_id, 101);
                     } catch (Exception $e) {
                         //                            Com_Log::write("task_fairy_send_error","send fairy 111 error player_id:{$player_id} ##".var_export($e,true));
                     }
                 }
                 if ($val['func_id'] == 20) {
                     #送一个英雄
                     try {
                         $result = $this->get_game('Hero')->add_hero($player_id, 3001);
                     } catch (Exception $e) {
                         $result = false;
                         Com_Log::write("task_hero_send_error", "send hero 111 error player_id:{$player_id} ##" . var_export($e, true));
                     }
                 }
                 //                    if($val['func_id'] == 161){#开启随机任务
                 //                        $task_info =  $this->get_game('TaskRandom')->get_random_tasks($player_id);
                 //                        $data = $this->get_game('TaskRandom')->get_task_random_list($player_id,$task_info,$player_info);
                 //                        Protocol::input($player_id,8,10,1022,$data);
                 //                    }
                 if ($val['guide_id'] > 0) {
                     Com_Log::write('guide_' . $player_id, "func_open:{$val['guide_id']}");
                     Protocol_Guide::add($val['guide_id'], 1);
                     if ($val['task_guide'] == 1) {
                         if (empty($arr_player_task)) {
                             $arr_player_task = $this->get_data('PlayerTask')->get_task_info($player_id);
                         }
                         $this->get_game('TaskMain')->do_guide_task($player_id, $val['guide_id'], 1, $arr_player_task, $guide_out);
                     }
                 }
             }
         }
         $result = $this->get_data('PlayerDetail')->update_player_detail($player_id, array('func_open' => $func_open));
         if ($result && !empty($arr_player_task)) {
             $result = $this->get_data('PlayerTask')->set_task_info($player_id, $arr_player_task);
             //更新任务
         }
         if ($result) {
             Com_Log::write("do_func_open." . $player_id, "out:" . var_export($out, true));
             if ($out) {
                 Protocol::input($player_id, 8, 7, 741, $out);
             }
             if ($guide_out) {
                 Protocol::input($player_id, 8, 10, 1002, array(0 => $guide_out));
             }
             Protocol_Guide::out($player_id, $player_info);
             if ($meditation_open_status) {
                 Protocol_Player::p2c_part_update($player_id, array('meditation_open_status' => array('func_open' => $func_open)));
             }
         }
         return $result;
     }
     return true;
 }
Example #30
0
 public function game_over($world_boss_id, $roles, $roles_dmg, $roles_online, $killer_role_id, $killer_role_name)
 {
     $world_boss_id = intval($world_boss_id);
     $killer_role_id = intval($killer_role_id);
     $baseinfo = $this->get_base_info_id($world_boss_id);
     if (empty($baseinfo)) {
         $this->throw_error('10222', 2010100);
     }
     #配置表错误
     $res = array();
     $reward_result = array();
     if ($killer_role_id > 0) {
         $reward_result['sid'] = 1;
     } else {
         $reward_result['sid'] = 0;
     }
     if ($world_boss_id) {
         $killer_player_info = null;
         $rank_list = Cache_WorldBoss::getInstance()->get_rank_reward();
         $rank_num = count($rank_list);
         #邮件内容
         $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(4000);
         $time = time();
         if (!empty($roles) && !empty($roles_dmg)) {
             $num = count($roles);
             $use_set = Cache_ActivityHall::getInstance()->get_Activity_set(4011);
             #功能按钮开启
             $setting = Cache_WorldBoss::getInstance()->get_worldboss_set();
             $dps_list = Cache_UnionBoss::getInstance()->get_dps_reward();
             if ($killer_role_id) {
                 #结束活动
                 $this->get_data('WorldBoss')->set_game_over();
             }
             for ($i = 0; $i < $num; $i++) {
                 if ($roles[$i] == 0) {
                     continue;
                 }
                 if ($killer_role_id) {
                     #重置挖尸体相关数据
                     $reset_list = array('list' => '', 'sid' => $world_boss_id, 'start_time' => $time, 'list_log' => json_encode(array()));
                     $this->get_data('WorldBoss')->set_boss_reward_list($roles[$i], $reset_list);
                 }
                 $player_info = $this->get_data('Player')->get_player_info($roles[$i], array('player_id', 'privilege_level', 'level', 'vip', 'name', 'gm', 'is_dummy'));
                 #非本服玩家忽略
                 if ($player_info['player_id'] <= 0) {
                     continue;
                 }
                 #更新玩家伤害值,形成排行榜
                 if (!empty($player_info) && ($player_info['gm'] == 0 || $player_info['gm'] == 3) && $player_info['is_dummy'] == 0) {
                     $this->get_data('WorldBoss')->set_harm_list($roles[$i], $roles_dmg[$i]);
                 }
                 #vip特权加成奖励
                 $vip_exp = 0;
                 if ($player_info['privilege_level'] > 0) {
                     $left_cd = $this->get_game('VipSpecial')->get_left_time($roles[$i]);
                     if ($left_cd > 0) {
                         $vip_set = Cache_VipLevelLimit::getInstance()->get_limit_info($player_info['privilege_level'], 10034);
                         if (!empty($vip_set)) {
                             $vip_exp = $vip_set['max_times'];
                         }
                     }
                 }
                 #获取排名奖励
                 $all_reward = $this->get_rank_reward($rank_list, $rank_num, $i, $roles[$i], $player_info, $vip_exp, $baseinfo);
                 if ($roles[$i] == $killer_role_id) {
                     #最后一击奖励走掉落库
                     $killer_player_info = $player_info;
                     $bossreward = explode('|', $baseinfo['boss_reward']);
                     if (!empty($bossreward)) {
                         foreach ($bossreward as $lid) {
                             $temp = Cache_FbLoot::getInstance()->get_loot($lid, $killer_role_id);
                             if (!empty($temp)) {
                                 foreach ($temp as $v) {
                                     if ($v['item_id'] == 3) {
                                         $v['item_num'] = ($vip_exp / 10000 + 1) * $v['item_num'];
                                     }
                                     $all_reward[] = $v;
                                 }
                             }
                         }
                     }
                 }
                 #伤害奖励
                 $dps_rewards = $this->get_dps_reward($baseinfo['dps_reward'], $baseinfo['crystal_reward'], $roles_dmg[$i], $vip_exp, $dps_list);
                 $all_reward[] = $dps_rewards['exp'];
                 $reward_result['rank_num'] = $i + 1;
                 #排名
                 $reward_result['reward_list'] = array();
                 if ($roles_online[$i] == 1) {
                     #在线直接发奖励
                     $result = $this->get_game('Reward')->send_reward($roles[$i], $all_reward, array('cmd_id' => '462', 'bind_flag' => 0), 1);
                     if ($result === true) {
                         $sum_exp = 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 ($item_id == 1) {
                                     $sum_exp += $item_num;
                                 }
                             }
                             if ($sum_exp > 0) {
                                 $prop_attr = Cache_Prop::getInstance()->get_prop_info(1);
                                 $prop_attr['item_num'] = $sum_exp;
                                 $attr = Struct_Prop::get_prop_struct($prop_attr);
                                 if (!empty($attr)) {
                                     $reward_result['reward_list'][] = $attr;
                                 }
                             }
                         }
                         $prop_logs = $this->get_game('Reward')->get_prop_log();
                         if ($prop_logs) {
                             foreach ($prop_logs as $val) {
                                 if (isset($val['overlay_num'])) {
                                     $val['item_num'] = $val['overlay_num'];
                                 }
                                 $reward_result['reward_list'][] = Struct_Prop::get_prop_struct($val);
                             }
                         }
                     }
                     Protocol::input($roles[$i], 8, 11, 1118, $reward_result);
                 } else {
                     #不在线发邮件
                     if (!empty($phrase_config)) {
                         $content = sprintf($phrase_config['content'], $res['rank_num']);
                         $attachment = array();
                         if (!empty($all_reward)) {
                             foreach ($all_reward as $val_reward) {
                                 $attachment[] = array("prop_id" => $val_reward['item_id'], "prop_num" => $val_reward['item_num']);
                             }
                         }
                         $re = $this->get_game('Mail')->async_trigger_mail($roles[$i], $phrase_config['title'], $content, $attachment, $phrase_config['sender'], 1, 462, 0);
                         $this->write_check($re);
                     }
                 }
                 #-------------------------扣次数-----同步次数给c++---------------------------
                 $this->get_data("PlayerDailyTime")->add_used_time($roles[$i], "world_boss_count");
                 $used = 0 + $this->get_data("PlayerDailyTime")->get_player_used_time($roles[$i], "world_boss_count");
                 if (empty($use_set)) {
                     $left_num = 0;
                 } else {
                     $left_num = $use_set[0]['max_times'] - $used;
                 }
                 if ($left_num < 0) {
                     $left_num = 0;
                 }
                 Protocol_Player::p2c_part_update($roles[$i], array('worldboss_remaining_count' => $left_num));
                 #添加日常任务进度跟踪
                 $this->get_game('TaskTrigger')->async_trigger_task($roles[$i], 104, $world_boss_id, 1);
                 //找回资源埋点
                 $this->get_game('GetBackCurrency')->add_function_day_times($roles[$i], 7);
                 $rank = $i + 1;
                 $this->get_data('GetBackCurrency')->set_player_times($roles[$i], 'world_boss_battle_rank', $rank);
                 #活动日志
                 $_event_log = array('log_type' => 'world_boss', 'player_id' => $roles[$i], 'reg_time' => time(), 'map_id' => $world_boss_id, 'damage' => $roles_dmg[$i], 'rank' => $i + 1);
                 $this->get_game('Event')->async_deal_event_log($_event_log);
                 #添加活跃度
                 $this->get_game('DailyBoon')->async_trigger_daily_boon_task($roles[$i], 3005);
                 if ($killer_role_id) {
                     #通知功能按钮开启
                     $func[0][] = array('operate' => 1, 'func_id' => 1110, 'open' => 1, 'guide' => 0, 'cd' => $setting[0]['corpse_save_time']);
                     Protocol::input($roles[$i], 8, 7, 741, $func);
                 }
                 //添加日志
                 $log_data = array('player_id' => $roles[$i], 'channel' => 62, 'player_level' => $player_info['level'], 'vip_level' => $player_info['vip'], 'add_time' => time(), 'sid' => $world_boss_id, 'role_dmg' => $roles_dmg[$i], 'type' => 1);
                 Log_WorldBoss::getInstance()->add_log($log_data);
             }
         }
         //保存世界boss纪录
         $save_data['sid'] = $world_boss_id;
         $save_data['roles'] = json_encode($roles);
         $save_data['roles_dmp'] = json_encode($roles_dmg);
         $save_data['roles_online'] = json_encode($roles_online);
         $save_data['killer_role_id'] = $killer_role_id;
         if ($killer_role_id) {
             #if(is_null($killer_player_info)){
             #	 $killer_player_info =  $this->get_data('Player')->get_player_info($killer_role_id,array('name'));
             #}
             $save_data['killer_role_name'] = $killer_role_name;
             #$killer_player_info['name'];
             #发广播通知
             $arr_replace = array();
             $arr_replace[] = array('rep_type' => 0, 'rep_val' => $killer_role_id, 'txt' => $killer_role_name);
             $msg = Language_Message::make_message(11018, $arr_replace);
             $this->get_game('SystemNotice')->send_system_msg($killer_role_id, $msg, 1, 6);
             #判断是否开启抢宝箱
             $open_set = Cache_WorldBoss::getInstance()->get_open_boss_set($world_boss_id);
             if (!empty($open_set) && $open_set['treasure_loot_entrance_sid'] > 0) {
                 $arr_replace = array();
                 $arr_replace[] = array('rep_type' => 0, 'rep_val' => $killer_role_id, 'txt' => $killer_role_name);
                 $msg = Language_Message::make_message(11019, $arr_replace);
                 $this->get_game('SystemNotice')->send_system_msg($killer_role_id, $msg, 1, 6);
             }
         } else {
             $save_data['killer_role_name'] = '';
         }
         $this->get_data('WorldBoss')->save_rank_log($save_data, $world_boss_id);
     } else {
         #参数错误
         $this->throw_error('10107', 2010101);
     }
 }