/** * @Purpose: * 获取玩家翅膀信息 * @Param $player_id 玩家ID * @Return 指定格式的玩家翅膀列表 */ public function get_player_wing_info($player_id) { $player_id = intval($player_id); #获取临时数据区数据 $data = $this->get_temporary_data(); if (!$data) { #获取玩家翅膀信息 $obj_player_detail_data = $this->get_data('PlayerDetail'); $data = $obj_player_detail_data->get_player_detail($player_id, 'wing_info'); } $activated_num = 0; $rtn_data = array(); if (Com_Array::is_good_arr($data)) { #获取玩家声望等级 $player_info = $this->get_data('Player')->get_player_info($player_id, array('online_time', 'fame_level', 'level')); foreach ($data as $key => $val) { if ($val['activation'] == 2 && $val['condition'][0] == 4) { $data[$key]['upgrade'] = 2; #获取下级数据 $wing_table = $this->get_cache_table_data('player_wing_table', array('id' => $val['id'], 'level' => $val['lvl'] + 1)); if ($wing_table[0]) { $data[$key]['upgrade'] = 1; $data[$key]['n_lvl'] = $val['lvl'] + 1; $attr = $this->format_table_field($wing_table[0]['attr_add']); if (Com_Array::is_good_arr($attr)) { if (!empty($val['equip_attr']) && Com_Array::is_good_arr($val['equip_attr'])) { foreach ($val['equip_attr'] as $attr_type => $attr_val) { $attr[$attr_type] += ceil($attr_val); } } foreach ($attr as $type => $value) { $data[$key]['n_attr_add'][$type][] = Cache_RoleKey::get_item_key($type); $data[$key]['n_attr_add'][$type][] = $value; } } //技能分解 if ($wing_table[0]['skill_id']) { $skill_data = explode("|", $wing_table[0]['skill_id']); $data[$key]['n_skill_id'] = $skill_data; } $data[$key]['success_rate'] = $wing_table[0]['success_rate']; $data[$key]['coin'] = $wing_table[0]['expend_coin']; $drop = $this->format_table_field($wing_table[0]['expend_drop']); if (Com_Array::is_good_arr($drop)) { foreach ($drop as $id => $num) { $data[$key]['drop'][$id][] = $id; $data[$key]['drop'][$id][] = $num; if ($id >= 1 && $id <= 3) { #获取完成进度 $data[$key]['drop'][$id][] = 0; } else { #获取玩家背包中的升级道具数量 $data[$key]['drop'][$id][] = $this->get_prop_num_by_player_bag($player_id, $id); } } } if ($wing_table[0]['condition']) { list($type, $condition) = explode("|", $wing_table[0]['condition']); if ($type == 5) { $data[$key]['cur_fame_level'] = $player_info['fame_level']; $data[$key]['need_fame_level'] = $condition; } } } } if ($val['activation'] == 0) { #在线时间检测 if ($val['condition'][0] == 3) { $data[$key]['condition'][2] = $this->get_game('DailyBoon')->daily_online_time($player_id); if ($data[$key]['condition'][2] >= $data[$key]['condition'][1][0]) { $data[$key]['activation'] = 1; } else { if ($player_info['online_time'] >= $data[$key]['condition'][1][0]) { $data[$key]['activation'] = 1; } } } else { if ($val['condition'][0] == 7) { $data[$key]['condition'][2] = $player_info['level']; if ($data[$key]['condition'][2] >= $data[$key]['condition'][1][0]) { $data[$key]['activation'] = 1; } } else { if ($val['condition'][0] == 6) { #获取翅膀配置表 $wing_table_task = $this->get_cache_table_data('player_wing_table', array('id' => $val['id'], 'level' => $val['lvl'])); if (!$wing_table_task[0]['condition']) { $this->throw_error('10109'); #配置表读取错误 } list($type, $task_id) = explode("|", $wing_table_task[0]['condition']); $task_res = $this->get_game('TaskMain')->task_is_finish($player_id, $task_id); if ($task_res) { $data[$key]['activation'] = 1; } } } } if ($val['condition'][0] == 4) { #获取翅膀配置表 $wing_table = $this->get_cache_table_data('player_wing_table', array('id' => $val['id'], 'level' => 1)); if (Com_Array::is_good_arr($wing_table)) { foreach ($wing_table as $wing) { list($type, $value) = explode("|", $wing['condition']); if ($type == 4) { if ($data[$val['id']]['activation'] != 0) { continue; } $is_activate = true; $wing_list = explode(":", $value); if (is_array($wing_list)) { #检测是否有被激活的翅膀 foreach ($wing_list as $wid) { if ($data[$wid]['activation'] != 2) { $is_activate = false; break; } } } else { if ($data[$wing_list]['activation'] != 2) { $is_activate = false; } } #改变隐藏翅膀激活状态 if ($is_activate) { $data[$val['id']]['activation'] = 1; } } } } } } #获取翅膀配置表 $wing_table_task = $this->get_cache_table_data('player_wing_table', array('id' => $val['id'], 'level' => $val['lvl'])); if (empty($wing_table_task[0]['avatar'])) { $this->throw_error('10109'); #配置表读取错误 } $data[$key]['avatar'] = $wing_table_task[0]['avatar']; #装备数据 if (!empty($val['equipment']) && Com_Array::is_good_arr($val['equipment'])) { foreach ($val['equipment'] as $equip_pos => $equip_info) { $data[$key]['equipment_list'][$equip_pos][] = $equip_pos; $data[$key]['equipment_list'][$equip_pos][] = Struct_Prop::get_prop_struct($equip_info); if ($equip_pos == 7) { #7为带新模型装备 $item_table = Cache_Prop::getInstance()->get_prop_info($equip_info['prop_id']); $data[$key]['avatar'] = $item_table['equip_view']; } } } if (!empty($val['equip_attr']) && Com_Array::is_good_arr($val['equip_attr'])) { foreach ($val['equip_attr'] as $attr_type => $attr_val) { $val['attr'][$attr_type] += ceil($attr_val); } } if (Com_Array::is_good_arr($val['attr'])) { $addition = 0; if ($val['id'] == 7) { if (isset($data[8]) && $data[8]['activation'] == 2) { $add_config = Cache_WingAddition::getInstance()->get_wing_addition($data[8]['lvl']); $addition = $add_config['addition'] / 10000; $attr_addition = $data[8]['attr']; if (!empty($data[8]['equip_attr']) && Com_Array::is_good_arr($data[8]['equip_attr'])) { foreach ($data[8]['equip_attr'] as $attr_type => $attr_val) { $attr_addition[$attr_type] += ceil($attr_val); } } foreach ($attr_addition as $attr_type => $attr_val) { $data[$key]['addition_attr'][$attr_type][] = Cache_RoleKey::get_item_key($attr_type); $data[$key]['addition_attr'][$attr_type][] = $attr_val * $addition; } } } if ($val['id'] == 8) { if (isset($data[7]) && $data[7]['activation'] == 2) { $add_config = Cache_WingAddition::getInstance()->get_wing_addition($data[7]['lvl']); $addition = $add_config['addition'] / 10000; $attr_addition = $data[7]['attr']; if (!empty($data[7]['equip_attr']) && Com_Array::is_good_arr($data[7]['equip_attr'])) { foreach ($data[7]['equip_attr'] as $attr_type => $attr_val) { $attr_addition[$attr_type] += ceil($attr_val); } } foreach ($attr_addition as $attr_type => $attr_val) { $data[$key]['addition_attr'][$attr_type][] = Cache_RoleKey::get_item_key($attr_type); $data[$key]['addition_attr'][$attr_type][] = $attr_val * $addition; } } } $data[$key]['addition_value'] = $addition * 100; foreach ($val['attr'] as $type => $value) { $data[$key]['attr_add'][$type][] = Cache_RoleKey::get_item_key($type); $data[$key]['attr_add'][$type][] = $value; } } #原20级才开始更新翅膀激活成就,导致20前激活的翅膀无法完成成就,在此做容错处理,重新统计已激活的翅膀,更新成就数据 if ($val['activation'] == 2) { if ($val['condition'][0] == 4) { $activated_num += 3; } else { $activated_num++; } } $rtn_data[$key] = Struct_PlayerAttr::get_wing_info_struct($data[$key]); } } if ($activated_num > 0) { //成就任务激活翅膀 $this->get_game('PlayerAchieve')->async_trigger_achieve_target($player_id, 26, $activated_num); } return array('0' => $rtn_data); }
/** * @Purpose: * 自动抽奖 * @param $player_id 玩家ID * @param $fb_id 副本ID * @param $type 功能类型(0:超时抽卡1:异常退出检测抽卡) */ public function auto_draw($player_id, $fb_id, $type = 0) { $player_id = intval($player_id); $fb_id = intval($fb_id); $data = array(); //是否有抽卡次数 $draw_data = $this->is_draw($player_id, $fb_id); if ($draw_data !== false) { $bag_data = array(); $this->start_trans(); //抽取剩余奖励 for ($i = 0; $i < $draw_data['over_num']; $i++) { //抽奖道具 $draw_res = $this->get_draw_item($fb_id, $draw_data, $bag_data, $player_id); if ($draw_res !== true) { $this->throw_error($draw_res); } $data['item_list'][$i] = array($bag_data[$i]['item_id'], $bag_data[$i]['item_num']); } //加入背包 $result = $this->get_game('Reward')->send_reward($player_id, $bag_data, array('cmd_id' => '813'), 1); if ($result !== true) { $this->throw_error('80002'); //道具放入背包失败 } //删除redis中的临时副本抽奖记录 $del_res = $this->del_fb_draw_info($player_id); if (!$del_res) { $this->throw_error('10104'); } $this->commit(); $this->get_game('Reward')->add_reward_log(); } //异常退出检测抽卡不返回数据,直接进背包 if ($type) { return FALSE; } return Struct_PlayerAttr::get_fb_auto_draw_struct($data); }
/** * @Purpose: * 获取金币兑换信息 * @Param $player_id 玩家ID */ public function get_gold_exchange_info($player_id) { $player_id = intval($player_id); #获取临时数据区数据 $exchange_data = $this->get_temporary_data(); if (!$exchange_data) { #获取兑换次数信息 $exchange_data = $this->get_data('PlayerCoinExchange')->get_gold_exchange_info($player_id, 'day'); } if ($exchange_data['chest_info']) { //字段格式转换 $rtn_data['chest_info'] = json_decode($exchange_data['chest_info'], true); } #获取玩家VIP $player_info = $this->get_data('Player')->get_player_info($player_id, array('privilege_level', 'level', 'vip')); #获取VIP类型 $vip_type = Cache_VipLevelLimit::getInstance()->get_limit_info_func_id(10022); if ($vip_type['fun_type'] == 2) { $left_time = $this->get_game('VipSpecial')->get_left_time($player_id); $player_vip = $left_time == 0 ? 0 : $player_info['privilege_level']; } else { $player_vip = $player_info['vip']; } if ($player_vip > 0) { #获取VIP配置表免费次数配置 $free_times_vip_table = Cache_VipLevelLimit::getInstance()->get_limit_info($player_vip, 10022); if (!$free_times_vip_table) { $this->throw_error('10109'); #配置表读取错误 } } #获取VIP类型 $vip_type = Cache_VipLevelLimit::getInstance()->get_limit_info_func_id(10023); if ($vip_type['fun_type'] == 2) { $left_time = $this->get_game('VipSpecial')->get_left_time($player_id); $player_vip = $left_time == 0 ? 0 : $player_info['privilege_level']; } else { $player_vip = $player_info['vip']; } if ($player_vip > 0) { #获取VIP配置表次数配置 $times_vip_table = Cache_VipLevelLimit::getInstance()->get_limit_info($player_vip, 10023); if (!$times_vip_table) { $this->throw_error('10109'); #配置表读取错误 } } /* #获取兑换次数限制配置表 $vip_table = $this->get_cache_table_data('times_table', array('vip_level' => $player_vip)); if (!$vip_table) { $this->throw_error('10109'); #配置表读取错误 } */ #可用的剩余免费次数 $rtn_data['free_times'] = $free_times_vip_table['max_times'] + $this->gold_ex_free_times - $exchange_data['used_free_times']; $rtn_data['free_times'] = $rtn_data['free_times'] > 0 ? $rtn_data['free_times'] : 0; #已用的次数 $rtn_data['used_times'] = $exchange_data['used_times']; #可使用的剩余次数 $rtn_data['use_times'] = $times_vip_table['max_times'] + $this->gold_ex_times_limit - $exchange_data['used_times']; $rtn_data['use_times'] = $rtn_data['use_times'] > 0 ? $rtn_data['use_times'] : 0; #可使用的最大次数 $rtn_data['times_max'] = $times_vip_table['max_times'] + $this->gold_ex_times_limit; if ($rtn_data['free_times']) { $gold_exchange = $this->get_exchange_data($exchange_data['used_times']); } else { $gold_exchange = $this->get_exchange_data($exchange_data['used_times'] + 1); } #需要钻石 $rtn_data['diamond'] = $gold_exchange['gold_cost']; #可获得的金币 if (!$rtn_data['free_times']) { $rtn_data['gold'] = $gold_exchange['silver_get'] + $gold_exchange['times_add'] * ($exchange_data['used_times'] + 2 - $gold_exchange['times'][0]); } else { $rtn_data['gold'] = $gold_exchange['silver_get'] + $gold_exchange['times_add'] * ($exchange_data['used_free_times'] + 1 - $gold_exchange['times'][0]); } $rtn_data['many_diamond'] += $rtn_data['diamond']; $rtn_data['many_gold'] += $rtn_data['gold']; $out_data['free_times'] = $rtn_data['free_times']; $out_data['used_free_times'] = $rtn_data['used_free_times']; $out_data['use_times'] = $rtn_data['use_times']; $out_data['used_times'] = $rtn_data['used_times']; for ($i = 1; $i < 10; $i++) { #增加使用次数 if ($out_data['free_times']) { $out_data['free_times']--; $out_data['used_free_times']++; } else { $out_data['use_times']--; $out_data['used_times']++; } if ($out_data['free_times']) { $gold_exchange = $this->get_exchange_data($out_data['used_times']); } else { $gold_exchange = $this->get_exchange_data($out_data['used_times'] + 1); if (!$gold_exchange) { break; } } #扣除钻石数量 $rtn_data['many_diamond'] += $gold_exchange['gold_cost']; #可获得的金币 if (!$out_data['free_times']) { $rtn_data['many_gold'] += $gold_exchange['silver_get'] + $gold_exchange['times_add'] * ($out_data['used_times'] + 2 - $gold_exchange['times'][0]); } else { $rtn_data['many_gold'] += $gold_exchange['silver_get'] + $gold_exchange['times_add'] * ($out_data['used_free_times'] + 1 - $gold_exchange['times'][0]); } } return Struct_PlayerAttr::get_gold_exchange_info_struct($rtn_data); }