Esempio n. 1
0
 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']));
 }