Exemplo n.º 1
0
 /**
  * 获取装备的属性
  * @param $arrPropConfig
  * @return mixed
  */
 public function get_equip_attr($arrPropConfig)
 {
     if (($arrPropConfig['type'] == 1 or $arrPropConfig['type'] == 6) && !isset($arrPropConfig['base_attr'])) {
         if ($arrPropConfig['rechage'] == 1) {
             #首充
             $rechage_config = Cache_Rechage::getInstance()->get_rechage($arrPropConfig['prop_id']);
             if (empty($rechage_config)) {
                 $arrPropConfig['base_attr'] = array();
                 $arrPropConfig['addition_attr'] = array();
             } else {
                 if ($rechage_config['base_attribute']) {
                     $base = explode(":", $rechage_config['base_attribute']);
                     $arrPropConfig['base_attr'][$base[0]] = $base[1];
                 }
                 if ($rechage_config['add_attribute']) {
                     $addition = explode("|", $rechage_config['add_attribute']);
                     foreach ($addition as $attrs) {
                         $attr = explode(":", $attrs);
                         $arrPropConfig['addition_attr'][$attr[0]] = $attr[1];
                     }
                 }
                 if ($rechage_config['use_level']) {
                     $arrPropConfig['level'] = $rechage_config['use_level'];
                 }
                 if ($rechage_config['strengthen_level']) {
                     $arrPropConfig['intensive_level'] = $rechage_config['strengthen_level'];
                     $intensify_config = Cache_Forge::getInstance()->get_intensify_info($rechage_config['strengthen_level']);
                     $arrPropConfig['intensive_desc'] = Game_EquipIntensifier::get_latest_intensive_desc($arrPropConfig, $intensify_config);
                 }
             }
             return $arrPropConfig;
         } else {
             #$equip = Cache_EquipBaseAttr::getInstance()->get_equip_base_attr($arrPropConfig['sub_type'],$arrPropConfig['quality'],$arrPropConfig['level'],$arrPropConfig['star_level']);
             $equip = Cache_EquipBaseAttr::getInstance()->generate_prop_attr($arrPropConfig['type'], $arrPropConfig['sub_type'], $arrPropConfig['quality'], $arrPropConfig['level'], $arrPropConfig['vocation_limit'], $arrPropConfig['star_level']);
             if ($arrPropConfig['type'] == 6 && $arrPropConfig['sub_type'] == 7 && $arrPropConfig['attr_not_rand']) {
                 # 翅膀装备羽心类可能要求附加属性不随机
                 $stable_addition_attr = array();
                 # 获取翅膀装备信息
                 $item_info = Cache_PlayerWing::getInstance()->get_wing_equip_gift_info($arrPropConfig['prop_id']);
                 if (!empty($item_info)) {
                     $attr_key_hash = Struct_Prop::$_sort_priority;
                     # 使用这个哈希可以确保属性key的有效性及顺序性
                     foreach ($attr_key_hash as $attr_key => $val) {
                         if (!empty($item_info[$attr_key])) {
                             $stable_addition_attr[$attr_key] = $item_info[$attr_key];
                         }
                     }
                 }
                 if (!empty($stable_addition_attr)) {
                     $equip['addition_attr'] = $stable_addition_attr;
                 }
             }
             $arrPropConfig['star_level'] = $equip['star_level'];
             if (!empty($equip['base_attr'])) {
                 $arrPropConfig['base_attr'] = $equip['base_attr'];
             }
             if (!empty($equip['addition_attr'])) {
                 $arrPropConfig['addition_attr'] = $equip['addition_attr'];
             }
             if (!empty($equip['refine_attr'])) {
                 $arrPropConfig['refine_attr'] = $equip['refine_attr'];
             }
             if (!empty($equip['refine_info'])) {
                 $arrPropConfig['refine_info'] = $equip['refine_info'];
             }
             return $arrPropConfig;
         }
     } else {
         return $arrPropConfig;
     }
 }
Exemplo n.º 2
0
 private function inherit_handle_for_intensify($pp_detail, $pp_inherit_detail, &$update_fields_for_inherit)
 {
     $is_inherit = false;
     # 是否有继承,默认否
     if ($pp_detail['intensive_level'] > $pp_inherit_detail['intensive_level']) {
         # 继承装备相关属性变化
         $update_fields_for_inherit['intensive_level'] = $pp_detail['intensive_level'];
         $intensify_config = Cache_Forge::getInstance()->get_intensify_info($update_fields_for_inherit['intensive_level']);
         if (!$intensify_config) {
             $this->throw_error('80501');
             //没有该装备此强化等级的配置信息!
         }
         $update_fields_for_inherit['intensive_desc'] = Game_EquipIntensifier::get_latest_intensive_desc($pp_inherit_detail, $intensify_config);
         # 强化特效信息更新
         $equip_view = $pp_inherit_detail['equip_view'];
         if ($equip_view[0]) {
             $weapon_effect = Cache_WeaponEffect::getInstance()->get_weapon_effect($equip_view[0], $update_fields_for_inherit['intensive_level']);
             if ($weapon_effect && $weapon_effect['effect_id']) {
                 $equip_view[2] = $weapon_effect['effect_id'];
             }
         }
         $update_fields_for_inherit['equip_view'] = $equip_view;
         $is_inherit = true;
     } else {
         # 继承装备相关属性不变
         #$update_fields_for_inherit['intensive_level'] = $pp_inherit_detail['intensive_level'];
         #$update_fields_for_inherit['intensive_desc'] = $pp_inherit_detail['intensive_desc'];
         #$update_fields_for_inherit['equip_view'] = $pp_inherit_detail['equip_view'];
     }
     return $is_inherit;
 }
Exemplo n.º 3
0
 protected function equip_intensify_handle($flag, $player_id, $player_gems, $player_info, $player_equip_info, $intensify_config, $auto_buy, $bless_item_id)
 {
     if ($flag) {
         # 成功
         $player_equip_info['intensive_lose_times'] = 0;
         $player_equip_info['intensive_level'] += 1;
         $player_equip_info['intensive_desc'] = Game_EquipIntensifier::get_latest_intensive_desc($player_equip_info, $intensify_config);
         if ($player_equip_info['star_map_id']) {
             # 获取最新星图状态desc
             $player_equip_info['star_map_desc'] = $this->get_game('EquipStarMap')->get_latest_starmap_desc($player_equip_info);
         }
     } else {
         # 失败
         $player_equip_info['intensive_lose_times'] += 1;
     }
     $this->start_trans();
     # 玩家银两更新
     $this->get_data('Player')->check_player_resource($player_id, $player_info, '-', 'silver', $intensify_config['silver_num'], 1, 1);
     # 强化特效信息更新
     $equip_view = $player_equip_info['equip_view'];
     if ($equip_view[0]) {
         $weapon_effect = Cache_WeaponEffect::getInstance()->get_weapon_effect($equip_view[0], $player_equip_info['intensive_level']);
         if ($weapon_effect && $weapon_effect['effect_id']) {
             $equip_view[2] = $weapon_effect['effect_id'];
         }
     }
     $equip_update_field = array('intensive_lose_times' => $player_equip_info['intensive_lose_times'], 'intensive_level' => $player_equip_info['intensive_level'], 'intensive_desc' => $player_equip_info['intensive_desc'], 'star_map_desc' => $player_equip_info['star_map_desc'], 'equip_view' => $equip_view);
     $re = $this->get_data('PlayerProp')->update_player_prop($player_equip_info, $equip_update_field);
     $this->write_check($re, 3010414);
     $log_param = array('level' => $player_info['level'], 'vip' => $player_info['vip'], 'privilege_level' => $player_info['privilege_level'], 'cmd_id' => 816);
     # 消耗祝福石
     if (!empty($bless_item_id)) {
         $arr_logs_bless_item = array();
         $re = $this->get_game('Prop')->deduct_prop_by_prop_id($player_id, $bless_item_id, 1, $arr_logs_bless_item, 0, $log_param);
         $this->write_check($re, 3010422);
     }
     # 消耗强化宝石和钻石【勾选自动购买时当所需强化宝石不足时需要消耗钻石】
     $gem_cost_num = $intensify_config['item_num'];
     $cost_currency_type = 0;
     $cost_currency_value = 0;
     $price = 0;
     if ($auto_buy) {
         if ($player_gems < $intensify_config['item_num']) {
             $gem_cost_num = $player_gems;
             # 获取正确的强化宝石的单价
             $intensify_gem_info = $this->get_game('Shop')->shortcut_purchase_interface($intensify_config['item_id'], 1);
             if (empty($intensify_gem_info['item_price'])) {
                 $this->throw_error('80318');
                 # 商城强化宝石没有配置价格
             }
             # 策划价格配置多项时,选其中一项
             list($cur_type, $cur_val) = each($intensify_gem_info['item_price']);
             $price = $cur_val;
             $cost_currency_type = $cur_type;
             $cost_currency_value = intval($cur_val * ($intensify_config['item_num'] - $player_gems));
         }
     }
     if ($gem_cost_num > 0) {
         $arr_logs_gem = array();
         $re = $this->get_game('Prop')->deduct_prop_by_prop_id($player_id, $intensify_config['item_id'], $gem_cost_num, $arr_logs_gem, 0, $log_param);
         $this->write_check($re, 3010449);
     }
     # 消耗虚拟货币
     if ($cost_currency_value > 0) {
         $cost_currency_key = Cache_Currency::getInstance()->get_key($cost_currency_type);
         $arr_consume = Com_Util::get_consume_info_for_data_center($player_info, $cost_currency_key, $cost_currency_value, intval($intensify_config['item_num'] - $player_gems));
         $this->get_data('Player')->check_player_resource($player_id, $player_info, '-', $cost_currency_key, $cost_currency_value, 1, $cost_currency_type);
     }
     $re = $this->get_data('Player')->update_player_resource($player_id, $player_info, '816', array(), $arr_consume);
     $this->write_check($re, 3010476);
     $this->commit();
     # 若有购买缺少材料,记录虚假商城购买日志
     if ($cost_currency_value > 0) {
         $this->get_game('Shop')->add_dummy_shop_log($player_id, $player_info, $intensify_config['item_id'], intval($intensify_config['item_num'] - $player_gems), $cost_currency_type, $cost_currency_value, 816);
     }
     # 刷新玩家属性
     if ($player_equip_info['item_position'] == 3) {
         $this->get_game('EquipAttr')->equip_attr($player_id);
     }
     # 粘806 + 通知道具变更信息
     $ndata = array();
     $ndata[] = $player_equip_info;
     if (!empty($arr_logs_gem) && is_array($arr_logs_gem)) {
         foreach ($arr_logs_gem as $k => $v) {
             # 消耗的宝石
             $ndata[] = $v;
         }
     }
     if (!empty($arr_logs_bless_item)) {
         # 消耗的祝福石,祝福石只消耗1个
         $ndata[] = $arr_logs_bless_item[0];
     }
     Protocol_Prop::prop_806($player_id, $ndata);
     # 通知玩家信息变更[必须放在commit之后]
     return $player_equip_info['intensive_desc'];
 }