public function equip_unload_inlaygems($player_id, $player_prop_id, $hole_id) { $this->get_game('PlayerFunc')->get_func_is_open($player_id, $this->func_id); $this->param_check_numeric(array($player_id, $hole_id)); # 装备检查 $player_prop_info = $this->get_data('PlayerProp')->get_player_prop_detail($player_id, $player_prop_id); if (empty($player_prop_info)) { $this->throw_error('80013'); //玩家没有该装备信息! } # 孔位检查 $hole_stint = $this->get_prop_inlay_gem_hole_stint($player_prop_info); if ($hole_id > $hole_stint || $hole_id <= 0) { $this->throw_error('80406'); //孔位错误! } if (empty($player_prop_info['inlay_gems']) || empty($player_prop_info['inlay_gems'][$hole_id])) { $this->throw_error('80405'); //玩家装备该孔位没有镶嵌宝石! } $player_info = $this->get_data('Player')->get_player_info($player_id, array('level', 'vip')); $before_inlay_gems = $player_prop_info['inlay_gems']; # 获取宝石配置信息 $gems_config = Cache_Forge::getInstance()->get_inlay_gems_by_id($player_prop_info['inlay_gems'][$hole_id], 1); $this->start_trans(); # 卸载已镶嵌宝石到背包 # 不调用add_prop_reward_log或add_reward_log,则send_reward不会调用806协议通知道具变更,并且不记录Log日志 $reward[] = array('type' => 'prop', 'item_id' => $player_prop_info['inlay_gems'][$hole_id], 'item_num' => 1); $re = $this->get_game('Reward')->send_reward($player_id, $reward, array('cmd_id' => 820)); #send_reward失败时,会返回各种失败情况的错误码 $this->write_check_strict($re, 3010251); $arrLogs = $this->get_game('Reward')->get_prop_log(); # 更新装备的宝石镶嵌信息 unset($player_prop_info['inlay_gems'][$hole_id]); $player_prop_info['inlay_gems_lv'] -= $arrLogs[0]['level']; # 以item表的level为准 $player_prop_info['star_map_desc'] = $this->get_game('EquipStarMap')->get_latest_starmap_desc($player_prop_info); $equip_update_field = array('inlay_gems' => $player_prop_info['inlay_gems'], 'inlay_gems_lv' => $player_prop_info['inlay_gems_lv'], 'star_map_desc' => $player_prop_info['star_map_desc']); $re = $this->get_data('PlayerProp')->update_player_prop($player_prop_info, $equip_update_field); $this->write_check($re, 3010264); $this->commit(); # 刷新玩家属性 if ($player_prop_info['item_position'] == 3) { $this->get_game('EquipAttr')->equip_attr($player_id); } # 通知道具变更 粘包806 $this->get_game('Reward')->add_reward_log(); # 调用add_reward_log,触发806协议通知道具变更,并记录道具获取日志 #$ndata[] = $arrLogs[0]; # 宝石变更后的信息 $ndata[] = $player_prop_info; # 装备变更后的信息 Protocol_Prop::prop_806($player_id, $ndata); # 重新获取宝石列表 粘包817 $gems = $this->get_game('Prop')->get_prop_list_by_type($player_id, $this->compose_gem_type, $this->compose_gem_sub_type); $gems = $this->filter_unvalid_gems($player_prop_info, $gems); # 过滤不允许镶嵌该装备的宝石 $emp = Struct_Prop::get_item_boxes_info($gems); $data = array('pid' => $player_prop_id, 'gem_list' => isset($emp[1]) ? $emp[1] : array('pos' => 1, 'indexes' => array())); Protocol::input($player_id, 3, 8, 817, $data); # -------------------------------------------------------------------- # 游戏日志记录 # -------------------------------------------------------------------- $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, 'action_type' => 0, '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' => $arrLogs[0]['player_prop_id'], 'item_id_slave' => $arrLogs[0]['prop_id'], 'hole_index' => $hole_id, 'before_inlay_gems_lv' => $player_prop_info['inlay_gems_lv'] + $arrLogs[0]['level'], 'after_inlay_gems_lv' => $player_prop_info['inlay_gems_lv'], 'before_inlay_gems' => $before_inlay_gems, 'after_inlay_gems' => $player_prop_info['inlay_gems']); Log_Forge::getInstance()->add_log($log_info, 'inlay'); return array('hole_id' => $hole_id, 'gem_box_info' => array('pos' => $arrLogs[0]['item_position'], 'index' => $arrLogs[0]['grid'])); }