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)); }
/** * * @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'); }
/** * 设置用户配置 * @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'); } }
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"; } } } }
/** * 任职 * @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); }
/** * 处理战斗结果 * @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; }
/** * 升级检查任务状态 * @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)); } } }
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' => '')); } }
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; }
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; }
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; } }
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); } }
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; }
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; }
/** * 战斗开始 * @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; }
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; }
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; }
/** * 删除公会玩家 */ 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; }
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; }
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(); }
/** * 添加多种资源 资源是指 黄金 钻石 等这些资源 * @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; }
/** * @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'])))); } } }
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'])); } }
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); } }
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())); } }
/** * 重新计算下装备下属性 在穿脱 强化身上的装备 * @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; }
/** * 解散公会 */ 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); }
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; }
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; }
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); } }