/** * @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); }