public function get_equips_info($type, $player_id, $pp_id, $pp_inherit_id) { $this->get_game('PlayerFunc')->get_func_is_open($player_id, $this->func_id); # 参数检查 $this->param_check_numeric(array($type, $player_id), 0); # 玩家检测 $player_info = $this->get_data('Player')->get_player_info($player_id, Com_Util::get_player_fields(array('currency', 'level', 'vip', 'privilege_level'))); if (empty($player_info)) { $this->throw_error('20002'); } # 传承道具检测 $player_props_info = $this->get_data('PlayerProp')->get_player_prop_detail_multi($player_id, array($pp_id, $pp_inherit_id)); if (empty($player_props_info[$pp_id]) || empty($player_props_info[$pp_inherit_id])) { $this->throw_error('80013'); } if (Com_Util::is_first_charge_item($player_props_info[$pp_id]['prop_id']) || Com_Util::is_first_charge_item($player_props_info[$pp_inheirt_id]['prop_id'])) { $this->throw_error('81102'); # 首充装备不允许传承 } $cost_prop_flag = true; # 是否消耗道具标识,同等级传承不能消耗道具 # 传承等级判断 if ($player_props_info[$pp_id]['level'] > $player_props_info[$pp_inherit_id]['level']) { $this->throw_error('80504'); } elseif ($player_props_info[$pp_id]['level'] == $player_props_info[$pp_inherit_id]['level']) { $cost_prop_flag = false; # 传承品质判断 if ($player_props_info[$pp_id]['quality'] > $player_props_info[$pp_inherit_id]['quality']) { $this->throw_error('80502'); } elseif ($player_props_info[$pp_id]['quality'] == $player_props_info[$pp_inherit_id]['quality']) { # 传承星级判断 if ($player_props_info[$pp_id]['star_level'] >= $player_props_info[$pp_inherit_id]['star_level']) { $this->throw_error('80505'); # 继承装备星级低于传承装备,无法传承 } } } # 传承类型判断 if ($player_props_info[$pp_id]['sub_type'] != $player_props_info[$pp_inherit_id]['sub_type']) { $this->throw_error('80503'); } # -------------------------------------------------------------------- # 传承与继承装备变化字段 # -------------------------------------------------------------------- $update_fields_for_inherit = array(); # 继承装备 $update_fields = array(); # 传承装备 # -------------------------------------------------------------------- # 强化处理:强化等级取二者较高保留 # -------------------------------------------------------------------- $is_inherit_intensify = $this->inherit_handle_for_intensify($player_props_info[$pp_id], $player_props_info[$pp_inherit_id], $update_fields_for_inherit); # -------------------------------------------------------------------- # 镶嵌宝石处理,记录需要发放的宝石 NOTE:如果取消注释,则之后一定要对$update_fields中的宝石相关field项进行置空操作 # -------------------------------------------------------------------- #$send_gems = $this->inherit_handle_for_inlay_gem($player_props_info[$pp_id], $player_props_info[$pp_inherit_id], $update_fields_for_inherit); # -------------------------------------------------------------------- # 吞噬属性处理,取二者较高保留 # -------------------------------------------------------------------- $is_inherit_swallow = $this->inherit_handle_for_swallow_info($player_props_info[$pp_id], $player_props_info[$pp_inherit_id], $update_fields_for_inherit); # -------------------------------------------------------------------- # 星图处理,A覆盖B NOTE:如果取消注释,则之后一定要对$update_fields中的星图相关field项进行置空操作 # -------------------------------------------------------------------- #$send_starmap = $this->inherit_handle_for_starmap($player_props_info[$pp_id], $player_props_info[$pp_inherit_id], $update_fields_for_inherit); # -------------------------------------------------------------------- # 洗练处理:A覆盖B,并将B的配置相关信息按等级重置 # -------------------------------------------------------------------- $is_inherit_refine = $this->inherit_handle_for_refine($player_props_info[$pp_id], $player_props_info[$pp_inherit_id], $update_fields_for_inherit); # 传承装备 有传承的属性需要置空,没传承的属性需要保留 if ($is_inherit_intensify) { $prop_config = Cache_Prop::getInstance()->get_prop_info($pp_id); $update_fields['intensive_level'] = 0; $update_fields['intensive_lose_times'] = 0; $update_fields['intensive_desc'] = array(); $update_fields['equip_view'] = $prop_config['equip_view']; } if ($is_inherit_swallow) { $update_fields['swallow_info'] = array(); } if ($is_inherit_refine) { list($refine_attr, $refine_info) = $this->get_game('EquipRefine')->extend_refine($player_props_info[$pp_id]['sub_type'], $player_props_info[$pp_id]['level']); $update_fields['refine_attr'] = $refine_attr; $update_fields['refine_info'] = $refine_info; } # 更新传承与被传承的装备信息 if ($type) { if (!$is_inherit_intensify && !$is_inherit_swallow && !$is_inherit_refine) { $this->throw_error('80506'); # 传承装备的属性小于继承装备,无需进行操作 } $this->start_trans(); # -------------------------------------------------------------------- # 通用消耗处理 # -------------------------------------------------------------------- $forge_common_info = Cache_Forge::getInstance()->get_forge_common_info($player_props_info[$pp_inherit_id]['level'], 1); if (!empty($forge_common_info['inherit_cost'])) { # 消耗的货币|消耗的道具 list($cost_currency, $cost_prop) = $this->get_common_depletion_detail($forge_common_info['inherit_cost']); if (!empty($cost_currency)) { foreach ($cost_currency as $key => $value) { $arr_consume = Com_Util::get_consume_info_for_data_center($player_info, $key, $value); # 传承货币消耗策划配多种时,此处的数据不准确,目前只配1种 $this->get_data('Player')->check_player_resource($player_id, $player_info, '-', $key, $value, 1, 1); } $re = $this->get_data('Player')->update_player_resource($player_id, $player_info, '826', array(), $arr_consume); $this->write_check($re, 3010178); } if (!empty($cost_prop) && $cost_prop_flag) { # 消耗道具 $arr_logs_cost = array(); $log_param = array('level' => $player_info['level'], 'vip' => $player_info['vip'], 'privilege_level' => $player_info['privilege_level'], 'cmd_id' => 826); foreach ($cost_prop as $prop_id => $prop_num) { $result = $this->get_game('Prop')->deduct_prop_by_prop_id($player_id, $prop_id, $prop_num, $arr_logs_cost, 0, $log_param); } } } # -------------------------------------------------------------------- # 多余宝石,多余星图发放 # -------------------------------------------------------------------- $reward = array(); if (!empty($send_gems)) { foreach ($send_gems as $k => $v) { $reward[] = array('type' => 'prop', 'item_id' => $k, 'item_num' => $v); } } if (!empty($send_starmap)) { $reward[] = array('type' => 'prop', 'item_id' => $send_starmap, 'item_num' => 1); } if (!empty($reward)) { $re = $this->get_game('Reward')->send_reward($player_id, $reward, array('cmd_id' => 826)); #send_reward失败时,会返回各种失败情况的错误码 $this->write_check_strict($re, 3010203); $arr_logs = $this->get_game('Reward')->get_prop_log(); } # -------------------------------------------------------------------- # 传承与继承装备更新 # -------------------------------------------------------------------- if (!empty($update_fields_for_inherit)) { $re = $this->get_data('PlayerProp')->update_player_prop($player_props_info[$pp_inherit_id], $update_fields_for_inherit); $this->write_check($re, 3010211); } if (!empty($update_fields)) { $re = $this->get_data('PlayerProp')->update_player_prop($player_props_info[$pp_id], $update_fields); $this->write_check($re, 3010214); } $this->commit(); # -------------------------------------------------------------------- # 游戏日志记录 # -------------------------------------------------------------------- $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_props_info[$pp_inherit_id]['player_prop_id'], 'item_id_master' => $player_props_info[$pp_inherit_id]['prop_id'], 'item_type' => $player_props_info[$pp_inherit_id]['type'], 'item_sub_type' => $player_props_info[$pp_inherit_id]['sub_type'], 'item_quality' => $player_props_info[$pp_inherit_id]['quality'], 'item_level' => $player_props_info[$pp_inherit_id]['level'], 'item_star_level' => $player_props_info[$pp_inherit_id]['star_level'], 'player_prop_id_slave' => $player_props_info[$pp_id]['player_prop_id'], 'item_id_slave' => $player_props_info[$pp_id]['prop_id'], 'before_intensive_level' => $player_props_info[$pp_inherit_id]['intensive_level'], 'after_intensive_level' => isset($update_fields_for_inherit['intensive_level']) ? $update_fields_for_inherit['intensive_level'] : $player_props_info[$pp_inherit_id]['intensive_level'], 'before_intensive_desc' => $player_props_info[$pp_inherit_id]['intensive_desc'], 'after_intensive_desc' => isset($update_fields_for_inherit['intensive_desc']) ? $update_fields_for_inherit['intensive_desc'] : $player_props_info[$pp_inherit_id]['intensive_desc'], 'before_inlay_gems_lv' => $player_props_info[$pp_inherit_id]['inlay_gems_lv'], 'after_inlay_gems_lv' => isset($update_fields_for_inherit['inlay_gems_lv']) ? $update_fields_for_inherit['inlay_gems_lv'] : $player_props_info[$pp_inherit_id]['inlay_gems_lv'], 'before_inlay_gems' => $player_props_info[$pp_inherit_id]['inlay_gems'], 'after_inlay_gems' => isset($update_fields_for_inherit['inlay_gems']) ? $update_fields_for_inherit['inlay_gems'] : $player_props_info[$pp_inherit_id]['inlay_gems'], 'before_starmap_id' => $player_props_info[$pp_inherit_id]['star_map_id'], 'after_starmap_id' => isset($update_fields_for_inherit['star_map_id']) ? $update_fields_for_inherit['star_map_id'] : $player_props_info[$pp_inherit_id]['star_map_id'], 'before_starmap_desc' => $player_props_info[$pp_inherit_id]['star_map_desc'], 'after_starmap_desc' => isset($update_fields_for_inherit['star_map_desc']) ? $update_fields_for_inherit['star_map_desc'] : $player_props_info[$pp_inherit_id]['star_map_desc'], 'before_swallow_info' => $player_props_info[$pp_inherit_id]['swallow_info'], 'after_swallow_info' => isset($update_fields_for_inherit['swallow_info']) ? $update_fields_for_inherit['swallow_info'] : $player_props_info[$pp_inherit_id]['swallow_info']); Log_Forge::getInstance()->add_log($log_info, 'inherit'); # ------------------------------------------------------------ # 更新传承与继承装备信息 # ------------------------------------------------------------ if (!empty($update_fields_for_inherit)) { foreach ($update_fields_for_inherit as $k => $v) { $player_props_info[$pp_inherit_id][$k] = $v; } } if (!empty($update_fields)) { foreach ($update_fields as $k => $v) { $player_props_info[$pp_id][$k] = $v; } } # ------------------------------------------------------------ # 若传承或被传承装备有其一在玩家身上,则刷新玩家属性 # ------------------------------------------------------------ if ($player_props_info[$pp_inherit_id]['item_position'] == 3 || $player_props_info[$pp_id]['item_position'] == 3) { $this->get_game('EquipAttr')->equip_attr($player_id); } # ------------------------------------------------------------ # 粘806 + 通知道具变更信息 # ------------------------------------------------------------ $this->get_game('Reward')->add_reward_log(); # 调用add_reward_log,触发806协议通知道具变更,并记录道具获取日志 $ndata = array(); $ndata[] = $player_props_info[$pp_inherit_id]; $ndata[] = $player_props_info[$pp_id]; if (!empty($arr_logs_cost)) { foreach ($arr_logs_cost as $k => $v) { # 消耗的道具 $ndata[] = $v; } } Protocol_Prop::prop_806($player_id, $ndata); $out_825 = array(0 => $pp_id, 1 => $pp_inherit_id, 2 => Struct_Prop::get_prop_struct($player_props_info[$pp_inherit_id])); $out_825[3] = $this->get_inherit_consume_info($player_props_info[$pp_inherit_id]['level'], $cost_prop_flag); Protocol::input($player_id, 3, 8, 825, $out_825); /*old $out_826 = array( 'pp_id' => $pp_id, 'pp_inherit_id' => $pp_inherit_id, 'pp_box_info' => array('item_position' => 1, 'grid' => $player_props_info[$pp_id]['grid']), 'pp_inherit_box_info' => array('item_position' => 1, 'grid' => $player_props_info[$pp_inherit_id]['grid']), ); */ $out_826 = array('pp_prop_info' => Struct_Prop::get_prop_struct($player_props_info[$pp_id]), 'pp_inherit_prop_info' => Struct_Prop::get_prop_struct($player_props_info[$pp_inherit_id])); return $out_826; } else { if (!empty($update_fields_for_inherit)) { foreach ($update_fields_for_inherit as $k => $v) { $player_props_info[$pp_inherit_id][$k] = $v; } } if (!empty($update_fields)) { foreach ($update_fields as $k => $v) { $player_props_info[$pp_id][$k] = $v; } } $out_825 = array(0 => $pp_id, 1 => $pp_inherit_id, 2 => Struct_Prop::get_prop_struct($player_props_info[$pp_inherit_id])); $out_825[3] = $this->get_inherit_consume_info($player_props_info[$pp_inherit_id]['level'], $cost_prop_flag); return $out_825; } }
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 enhanced_refine($player_id, $player_prop_id, $refine_attr_seq, $add_success_rate) { #$this->get_game('PlayerFunc')->get_func_is_open($player_id, $this->func_id_enhanced_refine); $this->param_check_numeric(array($player_id, $refine_attr_seq)); $player_info = $this->get_data('Player')->get_player_info($player_id, Com_Util::get_player_fields(array('currency', 'level', 'vip', 'privilege_level'))); $player_equip_info = $this->get_data('PlayerProp')->get_player_prop_detail($player_id, $player_prop_id); if (!$player_equip_info) { $this->throw_error('80013'); # 玩家没有该装备! } if (Com_Util::is_first_charge_item($player_equip_info['prop_id'])) { $this->throw_error('81105'); # 首充装备不允许精练 } $out_850 = array('player_prop_id' => $player_prop_id, 'result' => 0); # 洗练属性检查 if (empty($player_equip_info['refine_info'])) { $this->throw_error('81008'); # 洗练属性为空,不能精炼 } # 获取洗练属性key /** foreach ($player_equip_info['refine_info']['attr_info'] as $attr_seq => $attr_info) { if ($attr_info['attr_seq'] == $refine_attr_seq) { $en_refine_attr_key = $attr_info['attr_key']; break; } } **/ if (!isset($player_equip_info['refine_info']['attr_info'][$refine_attr_seq])) { $this->throw_error('81009'); # 精炼属性异常,选择的精炼属性不存在 } $refine_info = $player_equip_info['refine_info']; $refine_attr = $player_equip_info['refine_attr']; $en_refine_attr_value_current_lv = $refine_info['attr_info'][$refine_attr_seq]['en_refine_success_num'] * ceil($refine_info['attr_info'][$refine_attr_seq]['attr_limit'] / $refine_info['attr_info'][$refine_attr_seq]['attr_section']); if ($refine_info['attr_info'][$refine_attr_seq]['en_refine_lv'] >= $player_equip_info['level'] && $en_refine_attr_value_current_lv >= $refine_info['attr_info'][$refine_attr_seq]['attr_limit']) { $this->throw_error('81010'); # 精炼属性已满 } # 计算成功率 + 货币消耗 $refine_info_mod = $this->get_en_refine_success_rate_and_cost_currency($refine_info); list($cost_currency_type, $cost_currency_value) = explode(":", $refine_info_mod['attr_info'][$refine_attr_seq]['en_refine_cost_currency']); if ($add_success_rate) { $refine_info_mod['en_refine_success_rate'] += $this->add_success_rate; } $before_refine_attr = isset($player_equip_info['refine_attr']) ? $player_equip_info['refine_attr'] : array(); $before_refine_info = isset($player_equip_info['refine_info']) ? $player_equip_info['refine_info'] : array(); # 更新洗练属性 + 消耗货币 $this->start_trans(); $success_flag = false; if (Com_Random::probability($refine_info_mod['attr_info'][$refine_attr_seq]['en_refine_success_rate'], 10000)) { if ($refine_info_mod['attr_info'][$refine_attr_seq]['attr_section']) { $delta = ceil($refine_info_mod['attr_info'][$refine_attr_seq]['attr_limit'] / $refine_info_mod['attr_info'][$refine_attr_seq]['attr_section']); } else { $delta = 0; } $refine_info['attr_info'][$refine_attr_seq]['en_refine_attr_value'] += $delta; if ($refine_info['attr_info'][$refine_attr_seq]['en_refine_attr_value'] > $refine_info['attr_info'][$refine_attr_seq]['attr_stint']) { $refine_info['attr_info'][$refine_attr_seq]['en_refine_attr_value'] = $refine_info['attr_info'][$refine_attr_seq]['attr_stint']; } $refine_info['attr_info'][$refine_attr_seq]['en_refine_success_num'] += 1; $refine_info['attr_info'][$refine_attr_seq]['en_refine_failed_cont'] = 0; $refine_info['attr_info'][$refine_attr_seq]['attr_value'] = $refine_info['attr_info'][$refine_attr_seq]['refine_attr_value'] + $refine_info['attr_info'][$refine_attr_seq]['en_refine_attr_value']; # 升级 $en_refine_lv_stint = $this->get_en_refine_lv_stint($player_equip_info['level']); $en_refine_attr_value_current_lv = $refine_info['attr_info'][$refine_attr_seq]['en_refine_success_num'] * ceil($refine_info['attr_info'][$refine_attr_seq]['attr_limit'] / $refine_info['attr_info'][$refine_attr_seq]['attr_section']); if ($refine_info['attr_info'][$refine_attr_seq]['en_refine_lv'] < $en_refine_lv_stint && $en_refine_attr_value_current_lv >= $refine_info['attr_info'][$refine_attr_seq]['attr_limit']) { # 获取精练属性基础值 $attr_value_info_en_refine_old = Cache_Refine::getInstance()->get_attr_value_info($refine_info['attr_info'][$refine_attr_seq]['en_refine_lv']); $refine_info['attr_info'][$refine_attr_seq]['en_refine_lv'] += $this->en_refine_lv_delta; $attr_value_info_en_refine = Cache_Refine::getInstance()->get_attr_value_info($refine_info['attr_info'][$refine_attr_seq]['en_refine_lv']); if (empty($attr_value_info_en_refine)) { $this->throw_error('81011'); # 获取洗练属性值配置失败 } $attr_key = $refine_info['attr_info'][$refine_attr_seq]['attr_key']; $attr_ratio = $refine_info['attr_info'][$refine_attr_seq]['attr_ratio']; $refine_info['attr_info'][$refine_attr_seq]['attr_limit'] = ceil(($attr_value_info_en_refine[$attr_key] - $attr_value_info_en_refine_old[$attr_key]) * ($attr_ratio / 10000)); $en_refine_conf = Cache_Refine::getInstance()->get_equip_enhanced_refine_base_info($refine_info['attr_info'][$refine_attr_seq]['en_refine_lv']); $refine_info['attr_info'][$refine_attr_seq]['attr_section'] = $en_refine_conf['section']; $refine_info['attr_info'][$refine_attr_seq]['en_refine_success_num'] = 0; } $refine_attr[$refine_attr_seq] = array($refine_info['attr_info'][$refine_attr_seq]['attr_key'] => $refine_info['attr_info'][$refine_attr_seq]['attr_value']); $out_850['result'] = 1; $success_flag = true; } else { $refine_info['attr_info'][$refine_attr_seq]['en_refine_failed_cont'] += 1; # 连续失败精炼次数 } $cost_currency_key = Cache_Currency::getInstance()->get_key($cost_currency_type); $this->get_data('Player')->check_player_resource($player_id, $player_info, '-', $cost_currency_key, $cost_currency_value, 1, 1); if ($add_success_rate) { $cost_currency_key_other = Cache_Currency::getInstance()->get_key($this->add_success_rate_cost_cur_type); $this->get_data('Player')->check_player_resource($player_id, $player_info, '-', $cost_currency_key_other, $this->add_success_rate_cost_cur_value, 1, 0); } $re = $this->get_data('Player')->update_player_resource($player_id, $player_info, '850'); $this->write_check($re, 3010132); $update_field = array('refine_attr' => $refine_attr, 'refine_info' => $refine_info); $re = $this->get_data('PlayerProp')->update_player_prop($player_equip_info, $update_field); $this->write_check($re, 3010414); $this->commit(); # 提示购买成功消息 if ($success_flag) { $message = array('texts' => array(array('code' => 81014, 'content' => array(), 'params' => array(array(array('txt' => '', 'type' => 6, 'value' => $refine_info['attr_info'][$refine_attr_seq]['attr_key'], 'param' => '')), array(array('txt' => '', 'type' => 7, 'value' => $refine_info['attr_info'][$refine_attr_seq]['attr_value'] - $before_refine_info['attr_info'][$refine_attr_seq]['attr_value'], 'param' => ''))))), 'delay' => 0); } else { $message = array('texts' => array(array('code' => 81015, 'content' => array(), 'params' => array())), 'delay' => 0); } Protocol::input($player_id, 3, 7, 742, $message); # -------------------------------------------------------------------- # 游戏日志记录 # -------------------------------------------------------------------- $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_id, 'item_id_master' => $player_equip_info['prop_id'], 'item_type' => $player_equip_info['type'], 'item_sub_type' => $player_equip_info['sub_type'], 'item_quality' => $player_equip_info['quality'], 'item_level' => $player_equip_info['level'], 'item_star_level' => $player_equip_info['star_level'], 'item_position' => $player_equip_info['item_position'], 'action_type' => 2, 'before_refine_attr' => $before_refine_attr, 'after_refine_attr' => $player_equip_info['refine_attr'], 'before_refine_info' => $before_refine_info, 'after_refine_info' => $player_equip_info['refine_info']); Log_Forge::getInstance()->add_log($log_info, 'refine'); # 刷新玩家属性 if ($player_equip_info['item_position'] == 3) { $this->get_game('EquipAttr')->equip_attr($player_id); } # 粘806 + 通知道具变更信息 $player_equip_info['refine_attr'] = $update_field['refine_attr']; $player_equip_info['refine_info'] = $update_field['refine_info']; $ndata = array($player_equip_info); Protocol_Prop::prop_806($player_id, $ndata); $out_849 = $this->get_enhanced_refine_info($player_id, $player_prop_id, $refine_attr_seq); Protocol::input($player_id, 3, 8, 849, $out_849); return $out_850; }
public function 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')); # 828展示协议返回数据,828协议需要写死传回已配置的所有吞噬属性,即便当前道具尚未有激活任意项吞噬属性,也需要用初始值填充 $out_828 = array('player_ppid' => $player_prop_id, 'swallow_ppids' => $swallow_equips, 'swallow_list' => 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); if (empty($player_prop_info)) { $this->throw_error('80013'); //玩家没有该装备! } # 获取允许吞噬的装备子类型列表 list($allow_swallow_sub_type, $allow_swallow_id) = $this->get_swallow_restriction_info($player_prop_info['sub_type']); # 828展示协议返回数据,828协议需要写死传回已配置的所有吞噬属性,即便当前道具尚未有激活任意项吞噬属性,也需要用初始值填充 $distinct_swallow_list = Cache_Forge::getInstance()->get_distinct_swallow_list(); foreach ($distinct_swallow_list as $swallow_info) { if (!empty($allow_swallow_id) && !in_array($swallow_info['swallow_id'], $allow_swallow_id)) { continue; } $out_828['swallow_list'][$swallow_info['swallow_id']] = array('swallow_id' => $swallow_info['swallow_id'], 'swallow_lv' => 0, 'swallow_exp' => 0); } 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_828['swallow_ppids'] = ""; return $out_828; } } # 计算吞噬属性最大等级 $swallow_lv_max = $this->get_swallow_lv_max($player_prop_info['level']); $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['swallow_info']) ? array() : $player_prop_info['swallow_info']; $player_prop_id_slave = ""; $item_id_slave = ""; $onekey_prop_list = array(); # 保存允许一键吞噬的装备ID列表 $full_level_flag = false; # 是否满级,一键吞噬区分报错信息用 foreach ($swallow_equips as $pprop_id) { if (!empty($type)) { # 实际吞噬 if (!empty($allow_swallow_sub_type) && !in_array($player_prop_details[$pprop_id]['sub_type'], $allow_swallow_sub_type)) { $this->throw_error('80036'); # 被吞噬装备包含不允许吞噬的非法装备类型 } if ($player_prop_details[$pprop_id]['quality'] >= 4) { # 品质>=4的装备不允许被吞噬,秋水确定于20150811 $this->throw_error('80036'); # 被吞噬装备包含不允许吞噬的非法装备类型 } 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 (!empty($player_prop_details[$pprop_id]['inlay_gems'])) { $this->throw_error('80041'); # 被吞噬装备镶嵌有宝石 } if (!empty($player_prop_details[$pprop_id]['star_map_id'])) { $this->throw_error('80042'); # 被吞噬装备镶嵌有觉醒石 } $item_swallow_info = Cache_Forge::getInstance()->get_swallow_map_config($player_prop_details[$pprop_id]['sub_type'], $player_prop_details[$pprop_id]['quality']); if (empty($item_swallow_info)) { $this->throw_error('80025'); # 该装备子类型没有配置对应的吞噬属性信息! } if (empty($item_swallow_info['swallow_id'])) { $this->throw_error('80026'); # 获取吞噬属性类型失败 } $exp_revise_info = Cache_Forge::getInstance()->get_swallow_exp_revise_config($player_prop_details[$pprop_id]['star_level']); if (empty($exp_revise_info) || empty($exp_revise_info['revise_ratio'])) { $this->throw_error('80044'); # 获取吞噬经验修正配置失败 } } else { # 非实际吞噬 if (!empty($onekey)) { # 一键勾选 if (!empty($allow_swallow_sub_type) && !in_array($player_prop_details[$pprop_id]['sub_type'], $allow_swallow_sub_type)) { continue; } if ($player_prop_details[$pprop_id]['quality'] >= 4) { # 品质>=4的装备不允许被吞噬,秋水确定于20150811 continue; } if (empty($player_prop_details[$pprop_id])) { continue; } if (Com_Util::is_first_charge_item($player_prop_details[$pprop_id]['prop_id'])) { continue; } if (!empty($player_prop_details[$pprop_id]['inlay_gems'])) { continue; } if (!empty($player_prop_details[$pprop_id]['star_map_id'])) { continue; } $item_swallow_info = Cache_Forge::getInstance()->get_swallow_map_config($player_prop_details[$pprop_id]['sub_type'], $player_prop_details[$pprop_id]['quality']); if (empty($item_swallow_info) || empty($item_swallow_info['swallow_id'])) { continue; } $exp_revise_info = Cache_Forge::getInstance()->get_swallow_exp_revise_config($player_prop_details[$pprop_id]['star_level']); if (empty($exp_revise_info) || empty($exp_revise_info['revise_ratio'])) { continue; } } else { # 单项勾选,单次勾选获取吞噬信息需要弹提示属性满的消息,但不能阻断程序执行,只能跳出循环 if (!empty($allow_swallow_sub_type) && !in_array($player_prop_details[$pprop_id]['sub_type'], $allow_swallow_sub_type)) { $message = array('texts' => array(array('code' => 80036, 'content' => array(), 'params' => array())), 'delay' => 0); Protocol::input($player_id, 3, 7, 742, $message); # 被吞噬装备包含不允许吞噬的非法装备类型 break; } if ($player_prop_details[$pprop_id]['quality'] >= 4) { # 品质>=4的装备不允许被吞噬,秋水确定于20150811 $message = array('texts' => array(array('code' => 80036, 'content' => array(), 'params' => array())), 'delay' => 0); Protocol::input($player_id, 3, 7, 742, $message); # 被吞噬装备包含不允许吞噬的非法装备类型 break; } 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 (!empty($player_prop_details[$pprop_id]['inlay_gems'])) { $message = array('texts' => array(array('code' => 80041, 'content' => array(), 'params' => array())), 'delay' => 0); Protocol::input($player_id, 3, 7, 742, $message); # 被吞噬装备镶嵌有宝石 break; } if (!empty($player_prop_details[$pprop_id]['star_map_id'])) { $message = array('texts' => array(array('code' => 80042, 'content' => array(), 'params' => array())), 'delay' => 0); Protocol::input($player_id, 3, 7, 742, $message); # 被吞噬装备镶嵌有觉醒石 break; } $item_swallow_info = Cache_Forge::getInstance()->get_swallow_map_config($player_prop_details[$pprop_id]['sub_type'], $player_prop_details[$pprop_id]['quality']); if (empty($item_swallow_info)) { $message = array('texts' => array(array('code' => 80025, 'content' => array(), 'params' => array())), 'delay' => 0); Protocol::input($player_id, 3, 7, 742, $message); # 该装备子类型没有配置对应的吞噬属性信息! break; } if (empty($item_swallow_info['swallow_id'])) { $message = array('texts' => array(array('code' => 80026, 'content' => array(), 'params' => array())), 'delay' => 0); Protocol::input($player_id, 3, 7, 742, $message); # 获取吞噬属性类型失败 break; } $exp_revise_info = Cache_Forge::getInstance()->get_swallow_exp_revise_config($player_prop_details[$pprop_id]['star_level']); if (empty($exp_revise_info) || empty($exp_revise_info['revise_ratio'])) { $message = array('texts' => array(array('code' => 80044, 'content' => array(), 'params' => array())), 'delay' => 0); Protocol::input($player_id, 3, 7, 742, $message); # 获取吞噬经验修正配置失败 break; } } } # 计算增加的吞噬属性ID $add_swallow_id = $item_swallow_info['swallow_id']; # 使用配置数据判断满经验,是为了当策划修改最大吞噬等级算法时,能忽略旧装备中保存的吞噬属性信息最大等级与最大经验两项,提高向前兼容性,Forwards Compatibility # 获取吞噬配置信息,一键勾选吞噬是不能报这个错 $swallow_config = Cache_Forge::getInstance()->get_swallow_config($add_swallow_id, $swallow_lv_max); if (isset($player_prop_info['swallow_info'][$add_swallow_id]['swallow_exp']) && $player_prop_info['swallow_info'][$add_swallow_id]['swallow_exp'] >= $swallow_config['swallow_exp'] - 1) { if (!empty($type)) { # 实际吞噬 $this->throw_error('80021'); # 该装备的该项吞噬属性已满! } else { $full_level_flag = true; if (empty($onekey)) { # 单次勾选获取吞噬信息需要弹提示属性满的消息,但不能阻断程序执行,只能跳出循环 $message = array('texts' => array(array('code' => 80021, 'content' => array(), 'params' => array())), 'delay' => 0); Protocol::input($player_id, 3, 7, 742, $message); break; } else { # 一键勾选获取吞噬信息不弹提示属性满的消息 continue; } } } $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']]; $add_swallow_exp = ceil($add_swallow_exp * $exp_revise_info['revise_ratio'] / 10000); if (isset($player_prop_info['swallow_info'][$add_swallow_id])) { $player_prop_info['swallow_info'][$add_swallow_id]['swallow_exp'] += $add_swallow_exp; } else { $player_prop_info['swallow_info'][$add_swallow_id] = array('swallow_id' => $add_swallow_id, 'swallow_lv' => 0, 'swallow_exp' => $add_swallow_exp); } # 最大经验值保护 if ($player_prop_info['swallow_info'][$add_swallow_id]['swallow_exp'] >= $swallow_config['swallow_exp'] - 1) { $player_prop_info['swallow_info'][$add_swallow_id]['swallow_exp'] = $swallow_config['swallow_exp'] - 1; } } #var_export($player_prop_info); # 根据吞噬属性的exp,刷新吞噬属性的lv if (!empty($player_prop_info['swallow_info'])) { foreach ($player_prop_info['swallow_info'] as $sid => $sinfo) { $swallow_config = Cache_Forge::getInstance()->get_swallow_config_by_exp($sinfo['swallow_id'], $sinfo['swallow_exp']); if (!empty($swallow_config)) { $player_prop_info['swallow_info'][$sid]['swallow_lv'] = $swallow_config['swallow_lv']; #$player_prop_info['swallow_info'][$sid]['swallow_param'] = $swallow_config['swallow_param']; # 不缓存任何配置数据,提高策划修改配置表时的兼容性 } $out_828['swallow_list'][$sid] = array('swallow_id' => $sid, 'swallow_lv' => $player_prop_info['swallow_info'][$sid]['swallow_lv'], 'swallow_exp' => $player_prop_info['swallow_info'][$sid]['swallow_exp']); } $player_prop_info['swallow_version'] = 2; # 新功能版本号,用来区分新旧装备,一遍向下兼容接口有条件刷新 } if (empty($type)) { # 修正被吞噬的装备列表,去除吞噬属性达到上限及之后的其它装备 $out_828['swallow_ppids'] = empty($onekey_prop_list) ? "" : implode(":", $onekey_prop_list); if (empty($out_828['swallow_ppids']) && !empty($onekey)) { # 没有能被吞噬的装备 $code = $full_level_flag ? 80021 : 80043; $message = array('texts' => array(array('code' => $code, 'content' => array(), 'params' => array())), 'delay' => 0); Protocol::input($player_id, 3, 7, 742, $message); # 没有可以被吞噬的装备[装备镶嵌有觉醒石,宝石,装备为首充装备,装备获取不到吞噬配置] } return $out_828; } $out_829 = 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('swallow_info' => $player_prop_info['swallow_info'])); $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' => 829)); $this->write_check($re, 3010182); } $this->commit(); # -------------------------------------------------------------------- # 游戏日志记录 # -------------------------------------------------------------------- $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['swallow_info'], 'swallow_id_1' => 0, 'before_swallow_level_1' => 0, 'after_swallow_level_1' => 0, 'swallow_id_2' => 0, 'before_swallow_level_2' => 0, 'after_swallow_level_2' => 0, 'swallow_id_3' => 0, 'before_swallow_level_3' => 0, 'after_swallow_level_3' => 0, 'swallow_id_4' => 0, 'before_swallow_level_4' => 0, 'after_swallow_level_4' => 0); if (!empty($before_swallow_info)) { foreach ($before_swallow_info as $sid => $sinfo) { $log_info["swallow_id_{$sid}"] = $sid; $log_info["before_swallow_level_{$sid}"] = $sinfo['swallow_lv']; } } foreach ($player_prop_info['swallow_info'] as $sid => $sinfo) { $log_info["swallow_id_{$sid}"] = $sid; $log_info["after_swallow_level_{$sid}"] = $sinfo['swallow_lv']; } Log_Forge::getInstance()->add_log($log_info, 'swallow'); # 刷新玩家属性 if ($player_prop_info['item_position'] == 3) { $this->get_game('EquipAttr')->equip_attr($player_id); } # 通知道具变更806 $ndata = array(); $ndata[] = $player_prop_info; foreach ($player_prop_details as $key => &$val) { $val['item_num'] -= 1; $out_829[1]['grid_list'][] = $val['grid']; $ndata[] = $val; } Protocol_Prop::prop_806($player_id, $ndata); # 刷装备814[锻造面板]与827[可吞噬道具列表] $equips = $this->get_data('PlayerProp')->get_player_prop_by_item_position($player_id, 1); Com_Array::multisort($equips, array('quality' => 'desc', 'level' => 'desc')); $emp = array(); $fmp = array(); if (!empty($equips)) { foreach ($equips as $k => $v) { if ($v['type'] == 1) { $emp[] = $v['grid']; } } # 过滤不允许该装备吞噬的装备 $equips = $this->filter_unvalid_props($player_prop_info, $equips); foreach ($equips as $k => $v) { $fmp[] = $v['grid']; } } $equip_list = array('item_position' => 1, 'grid_list' => $emp); $allow_swallow = array(0 => $player_prop_id, 1 => array('item_position' => 1, 'grid_list' => $fmp)); Protocol::input($player_id, 3, 8, 829, $out_829); Protocol::input($player_id, 3, 8, 814, array($equip_list)); Protocol::input($player_id, 3, 8, 827, $allow_swallow); # 记录行为 Com_Log::write('xgame.forge_swallow', "{$player_id}\t" . "swallow\t" . "{$type}\t" . "{$player_prop_id}\t" . implode(",", $swallow_equips)); # 日常任务埋点 $this->get_game('TaskTrigger')->async_trigger_task($player_id, 108, 108, 1); # 每日活跃任务埋点 $this->get_game('DailyBoon')->async_trigger_daily_boon_task($player_id, 2001, 1, 1); return $out_829; }
public function equip_starmap_do($player_id, $player_prop_id, $star_spid) { $this->get_game('PlayerFunc')->get_func_is_open($player_id, $this->func_id); $this->param_check_numeric(array($player_id)); # 没有玩家信息 $player_info = $this->get_data('Player')->get_player_info($player_id); if (empty($player_info)) { $this->throw_error('10104'); } # 玩家没有该装备 $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'); } if (Com_Util::is_first_charge_item($player_prop_info['prop_id'])) { $this->throw_error('81103'); # 首充装备不允许觉醒 } # 824展示协议返回数据 $out_824 = array('player_prop_id' => $player_prop_id, 'star_pid' => $star_spid, 'box_up' => array(), 'box_down' => array()); $before_starmap_desc = $player_prop_info['star_map_desc']; # 判断行为类型:flag=0星图卸载;flag=1星图安装;flag=2星图替换 if (empty($star_spid)) { if (empty($player_prop_info['star_map_id'])) { $this->throw_error('80031'); //该装备未曾安装星图! } $flag = 0; } else { $flag = empty($player_prop_info['star_map_id']) ? 1 : 2; } # 检查旧星图配置信息【卸载||替换】 if ($flag == 0 || $flag == 2) { $starmap_config_forSend = Cache_Prop::getInstance()->get_prop_info($player_prop_info['star_map_id']); if (!$starmap_config_forSend) { $this->throw_error('80033'); //没有该星图的配置信息! } } # 检查新星图配置信息【安装||替换】 if ($flag == 1 || $flag == 2) { $starmap_info_forInstall = $this->get_data('PlayerProp')->get_player_prop_detail($player_id, $star_spid); if (!$starmap_info_forInstall) { $this->throw_error('80032'); //玩家没有该星图! } $out_824['box_up'] = array('pos' => $starmap_info_forInstall['item_position'], 'index' => $starmap_info_forInstall['grid']); $starmap_config_forInstall = Cache_Prop::getInstance()->get_prop_info($starmap_info_forInstall['prop_id']); if (!$starmap_config_forInstall) { $this->throw_error('80033'); //没有该星图的配置信息! } $starmap_config = Cache_Forge::getInstance()->get_starmap_info($starmap_info_forInstall['prop_id']); # 允许的装备种类检查 if (!empty($starmap_config[0]['require_sub_type'])) { $require_sub_type = explode(":", $starmap_config[0]['require_sub_type']); if (!in_array($player_prop_info['sub_type'], $require_sub_type)) { $this->throw_error('80035'); //该觉醒石不允许镶嵌在该种类的装备上 } } # 要求的等级检查 if (!empty($starmap_config[0]['require_equip_level']) && $player_prop_info['level'] < $starmap_config[0]['require_equip_level']) { $this->throw_error('80040'); # 装备等级低于觉醒石要求等级,不允许镶嵌 } } $this->start_trans(); if ($flag == 0 || $flag == 2) { //发放旧星图【卸载||替换】 $reward = array(); $sendarrLogs = array(); $reward[] = array('type' => 'prop', 'item_id' => $player_prop_info['star_map_id'], 'item_num' => 1); $re = $this->get_game('Reward')->send_reward($player_id, $reward, array('cmd_id' => 824)); #send_reward失败时,会返回各种失败情况的错误码 $this->write_check_strict($re, 3010130); $sendarrLogs = $this->get_game('Reward')->get_prop_log(); $out_824['box_down'] = array('pos' => $sendarrLogs[0]['item_position'], 'index' => $sendarrLogs[0]['grid']); if ($flag == 2) { //扣除新星图【替换】 $re = $this->get_data('PlayerProp')->update_prop_num($player_id, $starmap_info_forInstall, 1, '-', array('level' => $player_info['level'], 'vip' => $player_info['vip'], 'cmd_id' => 824)); $this->write_check($re, 3010136); } } else { //扣除新星图【安装】 $re = $this->get_data('PlayerProp')->update_prop_num($player_id, $starmap_info_forInstall, 1, '-', array('level' => $player_info['level'], 'vip' => $player_info['vip'], 'cmd_id' => 824)); $this->write_check($re, 3010140); } # 更新装备状态 if ($flag) { # 【安装||替换】 $player_prop_info['star_map_id'] = $starmap_info_forInstall['prop_id']; $player_prop_info['star_map_desc'] = $this->get_latest_starmap_desc($player_prop_info); } else { # 【卸载】 $player_prop_info['star_map_id'] = ''; $player_prop_info['star_map_desc'] = array(); } $re = $this->get_data('PlayerProp')->update_player_prop($player_prop_info, array('star_map_id' => $player_prop_info['star_map_id'], 'star_map_desc' => $player_prop_info['star_map_desc'])); $this->write_check($re, 3010152); $this->commit(); # -------------------------------------------------------------------- # 游戏日志记录 # -------------------------------------------------------------------- $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_install' => $starmap_info_forInstall ? $starmap_info_forInstall['player_prop_id'] : 0, 'item_id_install' => $starmap_info_forInstall ? $starmap_info_forInstall['prop_id'] : 0, 'player_prop_id_uninstall' => $sendarrLogs ? $sendarrLogs[0]['player_prop_id'] : 0, 'item_id_uninstall' => $sendarrLogs ? $sendarrLogs[0]['prop_id'] : 0, 'before_starmap_desc' => $before_starmap_desc, 'after_starmap_desc' => $player_prop_info['star_map_desc']); Log_Forge::getInstance()->add_log($log_info, 'starmap'); if ($flag == 1 || $flag == 2) { # 安装和替换才算 # 引导任务埋点 $this->get_game('TaskTrigger')->async_trigger_guide_task($player_id, 25, 1); } $this->handle_starmap_refer_achieve($player_id); # 刷新玩家属性 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 = array(); $ndata[] = $player_prop_info; /** //发放的星图 if($flag == 0 || $flag == 2) { foreach($sendarrLogs as $key => $val) { $ndata[] = $val; } } **/ //扣除的星图 if ($flag == 1 || $flag == 2) { $starmap_info_forInstall['item_num'] -= 1; $ndata[] = $starmap_info_forInstall; } Protocol_Prop::prop_806($player_id, $ndata); //获取 星图 $player_star_map = $this->get_game('Prop')->get_prop_list_by_type($player_id, $this->starmap_type, $this->starmap_sub_type); # 过滤不允许镶嵌该装备的星图 $player_star_map = $this->filter_unvalid_starmap($player_prop_info, $player_star_map); $data = array(); if ($player_star_map) { foreach ($player_star_map as $k => $v) { $data[] = Struct_Prop::get_item_box_struct($v); } } $emp = array(0 => $player_prop_id, 1 => $data); Protocol::input($player_id, 3, 8, 824, $out_824); Protocol::input($player_id, 3, 8, 823, $emp); }
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'])); }
public function equip_intensify($player_id, $player_prop_id, $auto_buy, $bless_item_id) { $this->get_game('PlayerFunc')->get_func_is_open($player_id, $this->func_id_intensifier); # 参数检查 $this->param_check_numeric(array($player_id, $auto_buy, $bless_item_id), 0); $player_info = $this->get_data('Player')->get_player_info($player_id, Com_Util::get_player_fields(array('currency', 'level', 'vip', 'privilege_level'))); if (empty($player_info)) { $this->throw_error('20002'); //没有玩家信息! } $player_equip_info = $this->get_data('PlayerProp')->get_player_prop_detail($player_id, $player_prop_id); if (empty($player_equip_info)) { $this->throw_error('80013'); //玩家没有该装备! } if (Com_Util::is_first_charge_item($player_equip_info['prop_id'])) { $this->throw_error('81101'); # 首充装备不允许强化 } # 获取强化等级上限 $intensify_lv_limit = $this->get_intensify_lv_limit_by_item_level($player_equip_info['level']); if ($player_equip_info['intensive_level'] >= $intensify_lv_limit) { $this->throw_error('80310'); //已满级 } # 强化配置信息检查 $intensify_config = Cache_Forge::getInstance()->get_intensify_info($player_equip_info['intensive_level'] + 1, 1); # 强化所需宝石检查 $player_gems = 0; # 添加了自动购买强化宝石的逻辑,故没有该材料时不能报错 $player_gems_info = $this->get_data('PlayerProp')->get_player_prop_by_prop_id($player_id, $intensify_config['item_id'], 1); if (!empty($player_gems_info)) { $gems = array_values($player_gems_info); foreach ($gems as $key => $val) { $player_gems += $val['item_num']; } } # 以下三种情况下的失败,前端要求仍然返回816协议下行,防止自动强化处理异常 if ($player_info['silver'] < $intensify_config['silver_num']) { $extra_816 = array('is_failed' => 2, 'intensive_info' => array()); Protocol::input($player_id, 3, 8, 816, $extra_816); $message = array('texts' => array(array('code' => 10113, 'content' => array(), 'params' => array())), 'delay' => 0); Protocol::input($player_id, 3, 7, 742, $message); return; #$this->throw_error('10113'); # 银两不足 } if (!$auto_buy && $player_gems < $intensify_config['item_num']) { $extra_816 = array('is_failed' => 3, 'intensive_info' => array()); Protocol::input($player_id, 3, 8, 816, $extra_816); $message = array('texts' => array(array('code' => 80312, 'content' => array(), 'params' => array())), 'delay' => 0); Protocol::input($player_id, 3, 7, 742, $message); return; #$this->throw_error('80312'); # 玩家强化的强化宝石不足! } if (!empty($bless_item_id)) { # 玩家强化的祝福石不足! # 强化所需祝福石检查 $player_bless_item_info = $this->get_data('PlayerProp')->get_player_prop_by_prop_id($player_id, $bless_item_id, 1); if (empty($player_bless_item_info)) { $extra_816 = array('is_failed' => 4, 'intensive_info' => array()); Protocol::input($player_id, 3, 8, 816, $extra_816); $message = array('texts' => array(array('code' => 80320, 'content' => array(), 'params' => array())), 'delay' => 0); Protocol::input($player_id, 3, 7, 742, $message); return; } } # 成功率判断 $flag = false; if ($player_equip_info['intensive_lose_times'] >= $intensify_config['lose_num']) { $flag = true; } else { $intensify_success_rate = $intensify_config['chance']; if (!empty($bless_item_id)) { $intensify_bless_info = Cache_Forge::getInstance()->get_intensify_bless_info_by_item_id($bless_item_id, 1); $intensify_success_rate += $intensify_bless_info['add_success_rate']; } if (Com_Random::probability($intensify_success_rate, 10000)) { $flag = true; } } # 强化处理 $before_intensive_desc = $player_equip_info['intensive_desc']; $after_intensive_desc = $this->equip_intensify_handle($flag, $player_id, $player_gems, $player_info, $player_equip_info, $intensify_config, $auto_buy, $bless_item_id); # 强化成功后,当前装备的强化等级加1 if ($flag) { $player_equip_info['intensive_level'] += 1; # 添加好友动态消息 $prop_info = Cache_Prop::getInstance()->get_prop_info($player_equip_info['prop_id']); $param = array(1 => "0|{$player_equip_info['intensive_level']}|1", 2 => "1|{$player_equip_info['prop_id']},{$prop_info['name']},{$player_equip_info['quality']}|2"); //$this->get_game("PlayerFriend")->add_friend_news_by_type($player_id, 1, 3, 1, $param); # -------------------------------------------------------------------- # 公告 # -------------------------------------------------------------------- $replace_info = array(array('rep_type' => 0, 'rep_val' => $player_id), array('rep_type' => 2, 'rep_val' => $player_equip_info['prop_id'], 'rep_player_id' => $player_id, 'rep_pid' => $player_equip_info['player_prop_id']), array('rep_type' => 7, 'txt' => $player_equip_info['intensive_level'])); $this->get_game('SystemNotice')->push_sys_notice($player_id, 61, $player_equip_info['intensive_level'], $replace_info); # 强化公告 if ($player_equip_info['type'] == 1) { $this->get_game('PlayerAchieve')->async_trigger_achieve_target($player_id, 6, "1:" . $player_equip_info['quality'] . ":" . $player_equip_info['star_level'] . ":" . intval($player_equip_info['intensive_level']) . ":{$player_equip_info['player_prop_id']}", 4); } else { if ($player_equip_info['type'] == 6) { $this->get_game('PlayerAchieve')->async_trigger_achieve_target($player_id, 35, "1:" . $player_equip_info['quality'] . ":" . $player_equip_info['star_level'] . ":" . intval($player_equip_info['level']) . ":{$player_equip_info['player_prop_id']}", 4); } } } else { # 失败时提示消息 /** $player_equip_info['intensive_lose_times'] += 1; $sure_succeed = $intensify_config['lose_num'] - $player_equip_info['intensive_lose_times']; # 剩余必定成功次数 if ($sure_succeed < 0) $sure_secceed = 0; $message = array( 'texts' => array( array( 'code' => 80906, 'content' => array(), 'params' => array( array ( array('txt' => '', 'type' => 7, 'value' => $sure_succeed, 'param' => '') ), ), ), ), 'delay' => 0, ); **/ $message = array('texts' => array(array('code' => 80919, 'content' => array(), 'params' => array()))); Protocol::input($player_id, 3, 7, 742, $message); } $out_816 = array(); $out_816['is_failed'] = $flag ? 0 : 1; # 强化成功后,获取下一级强化信息,若已满级,则可忽略满级标识以外信息内容,9->10级时,失败仍然会返回满级标识,进入下面if结构 if ($player_equip_info['intensive_level'] >= $intensify_lv_limit) { $silver_index = Cache_Currency::getInstance()->get_index('silver'); $out_816['intensive_info'] = array('result' => 1, 'item_pid' => $player_prop_id, 'upgrade_item' => array(), 'success_per' => 0, 'success_num' => 0, 'fail_num' => 0, 'expend_prop' => "{$intensify_config['item_id']}:{$intensify_config['item_num']}", 'expend_currency' => "{$silver_index}:{$intensify_config['silver_num']}", 'max_intensify_lv' => $intensify_lv_limit); } else { $ret = $this->get_equip_intensify_info($player_id, $player_prop_id); $out_816['intensive_info'] = $ret[0]; } # 通知玩家信息变更[必须放在commit之后] # 日常活跃度处理 $this->get_game('DailyBoon')->async_trigger_daily_boon_task($player_id, 2000); # 日常任务埋点 $this->get_game('TaskTrigger')->async_trigger_task($player_id, 107, 107, 1); # 引导任务埋点 $this->get_game('TaskTrigger')->async_trigger_guide_task($player_id, 15, 1); # -------------------------------------------------------------------- # 游戏日志记录 # -------------------------------------------------------------------- $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' => $player_prop_id, 'item_id' => $player_equip_info['prop_id'], 'item_type' => $player_equip_info['type'], 'item_sub_type' => $player_equip_info['sub_type'], 'item_quality' => $player_equip_info['quality'], 'item_level' => $player_equip_info['level'], 'item_star_level' => $player_equip_info['star_level'], 'before_level' => $flag ? $player_equip_info['intensive_level'] - 1 : $player_equip_info['intensive_level'], 'after_level' => $player_equip_info['intensive_level'], 'before_attr_add' => $before_intensive_desc, 'after_attr_add' => $after_intensive_desc); Log_Forge::getInstance()->add_log($log_info, 'intensify'); Protocol::input($player_id, 3, 8, 816, $out_816); }