Esempio n. 1
0
 /**
  * 获取玩家基础属性
  *
  * @param unknown_type $player_id
  * @return unknown
  */
 protected function get_player_base_attr($player_id, $calc_buff_attr)
 {
     if (is_null($this->_playerItem)) {
         $this->_playerItem = $this->get_data('Player')->get_player_info($player_id);
     }
     $this->_player = $this->_playerItem;
     if (empty($this->_player)) {
         //玩家不存在
         $this->_player = '20001';
         return false;
     }
     if (empty($this->_playerDetailItem)) {
         $this->_playerDetailItem = $this->get_data('PlayerDetail')->get_player_detail($this->_player['player_id']);
     }
     //基础属性
     //        $baseAttrData = $this->_playerDetailItem['base_attr'];
     //        if(isset($baseAttrData['base_attr'])) $baseAttrData=$baseAttrData['base_attr']; //先这样写有的数据错了等可以清空数据库了 删除
     //        if (is_array($baseAttrData)) {
     //            foreach ($baseAttrData as $key=>$value) {
     //                $this->_player[$key] += $value;
     //            }
     //        }
     $baseAttrData = $this->getInitPlayerAttrData($this->_player['career_type']);
     if (is_array($baseAttrData)) {
         foreach ($baseAttrData as $key => $value) {
             $this->_player[$key] += $value;
             //                    if($key == 'atk_min'){
             //                        Com_Log::write('player_attr_atk_'.$this->_player['player_id'],"base {$value}");
             //                    }
         }
     }
     $this->_player['atk_min'] = $this->_player['atk_max'] = Formula_Player::get_upgrade_atk($this->_player['atk_min'], $this->_player['level']);
     //        Com_Log::write('player_attr_atk_'.$this->_player['player_id'],"atk_min {$this->_player['atk_min']}");
     $this->_player['arm'] = $this->_player['arm'] = Formula_Player::get_upgrade_arm($this->_player['arm'], $this->_player['level']);
     $this->_player['hp'] = $this->_player['hp'] = Formula_Player::get_upgrade_hp($this->_player['hp'], $this->_player['level']);
     if ($this->_player['map_id'] == 2100) {
         $this->_player['atk_min'] += 500;
         #策划要求序章攻击加500
     }
     $equip_move_speed = 0;
     if (!empty($this->_playerDetailItem['equip_attr'])) {
         foreach ($this->_playerDetailItem['equip_attr'] as $key => $value) {
             if ($key == 'move_speed') {
                 $equip_move_speed = $value;
             } else {
                 $this->_player[$key] += $value;
             }
         }
     }
     if (!empty($this->_playerDetailItem['fairy_attr_1'])) {
         foreach ($this->_playerDetailItem['fairy_attr_1'] as $key => $value) {
             $this->_player[$key] += $value;
         }
     }
     if (!empty($this->_playerDetailItem['fairy_attr_2'])) {
         foreach ($this->_playerDetailItem['fairy_attr_2'] as $key => $value) {
             $this->_player[$key] += $value;
         }
     }
     if (!empty($this->_playerDetailItem['fashion_attr'])) {
         foreach ($this->_playerDetailItem['fashion_attr'] as $key => $value) {
             $this->_player[$key] += $value;
         }
     }
     if (!empty($this->_playerDetailItem['union_achieve_attr'])) {
         foreach ($this->_playerDetailItem['union_achieve_attr'] as $key => $value) {
             $this->_player[$key] += $value;
         }
     }
     if (!empty($this->_playerDetailItem['achieve_attr_1'])) {
         foreach ($this->_playerDetailItem['achieve_attr_1'] as $key => $value) {
             $this->_player[$key] += $value;
         }
     }
     if (!empty($this->_playerDetailItem['achieve_attr_2'])) {
         foreach ($this->_playerDetailItem['achieve_attr_2'] as $key => $value) {
             $this->_player[$key] += $value;
         }
     }
     # 培养属性加成
     if (!empty($this->_playerDetailItem['train_attr_info']) && is_array($this->_playerDetailItem['train_attr_info'])) {
         foreach ($this->_playerDetailItem['train_attr_info'] as $key => $value) {
             $this->_player[$key] += $value;
         }
     }
     # --------------------------------------------------------------------
     # 培养套装激活效果计算
     # --------------------------------------------------------------------
     $train_set_attr_addition = $this->get_game('Train')->get_player_train_set_attr_addition($this->_player['player_id'], $this->_playerItem, $this->_playerDetailItem);
     # 培养套装加成信息
     if (!empty($train_set_attr_addition)) {
         foreach ($train_set_attr_addition as $attr_key => $attr_val) {
             if (!is_numeric($attr_key)) {
                 # 忽略技能等级的加成
                 $this->_player[$attr_key] += $attr_val;
             }
         }
     }
     # --------------------------------------------------------------------
     #---------------------------------------------------------------------
     #翅膀属性
     #---------------------------------------------------------------------
     if (!empty($this->_playerDetailItem['equip_wing'])) {
         $wing_attr = $this->_playerDetailItem['wing_info'][$this->_playerDetailItem['equip_wing']];
         $addition = 0;
         $attr_addition = array();
         if ($this->_playerDetailItem['equip_wing'] == 7) {
             if (isset($this->_playerDetailItem['wing_info'][8]) && $this->_playerDetailItem['wing_info'][8]['activation'] == 2) {
                 $add_config = Cache_WingAddition::getInstance()->get_wing_addition($this->_playerDetailItem['wing_info'][8]['lvl']);
                 $addition = $add_config['addition'] / 10000;
                 $attr_addition = $this->_playerDetailItem['wing_info'][8]['attr'];
                 if (!empty($this->_playerDetailItem['wing_info'][8]['equip_attr']) && Com_Array::is_good_arr($this->_playerDetailItem['wing_info'][8]['equip_attr'])) {
                     foreach ($this->_playerDetailItem['wing_info'][8]['equip_attr'] as $attr_type => $attr_val) {
                         $attr_addition[$attr_type] += ceil($attr_val);
                     }
                 }
                 foreach ($attr_addition as $attr_type => $attr_val) {
                     $attr_addition[$attr_type] = $attr_val * $addition;
                 }
             }
         }
         if ($this->_playerDetailItem['equip_wing'] == 8) {
             if (isset($this->_playerDetailItem['wing_info'][7]) && $this->_playerDetailItem['wing_info'][7]['activation'] == 2) {
                 $add_config = Cache_WingAddition::getInstance()->get_wing_addition($this->_playerDetailItem['wing_info'][7]['lvl']);
                 $addition = $add_config['addition'] / 10000;
                 $attr_addition = $this->_playerDetailItem['wing_info'][7]['attr'];
                 if (!empty($this->_playerDetailItem['wing_info'][7]['equip_attr']) && Com_Array::is_good_arr($this->_playerDetailItem['wing_info'][7]['equip_attr'])) {
                     foreach ($this->_playerDetailItem['wing_info'][7]['equip_attr'] as $attr_type => $attr_val) {
                         $attr_addition[$attr_type] += ceil($attr_val);
                     }
                 }
                 foreach ($attr_addition as $attr_type => $attr_val) {
                     $attr_addition[$attr_type] = $attr_val * $addition;
                 }
             }
         }
         $w_attr = array();
         if (!empty($wing_attr['attr'])) {
             foreach ($wing_attr['attr'] as $key => $value) {
                 $w_attr[$key] += $value;
             }
         }
         if (!empty($wing_attr['equip_attr'])) {
             foreach ($wing_attr['equip_attr'] as $key => $value) {
                 $w_attr[$key] += $value;
             }
         }
         if (!empty($attr_addition)) {
             foreach ($attr_addition as $key => $value) {
                 $w_attr[$key] += $value;
             }
         }
         if (!empty($w_attr)) {
             foreach ($w_attr as $key => $value) {
                 $this->_player[$key] += $value;
             }
         }
     }
     #---------------------------------------------------------------------
     #文斌的属性
     #---------------------------------------------------------------------
     if (!empty($this->_playerDetailItem['player_grade_attr'])) {
         foreach ($this->_playerDetailItem['player_grade_attr'] as $key => $value) {
             $this->_player[$key] += $value;
         }
     }
     #---------------------------------------------------------------------
     #帮会的属性
     #---------------------------------------------------------------------
     if (!empty($this->_playerDetailItem['union_player_attr'])) {
         foreach ($this->_playerDetailItem['union_player_attr'] as $key => $value) {
             $this->_player[$key] += $value;
         }
     }
     #---------------------------------------------------------------------
     #声望的属性
     #---------------------------------------------------------------------
     if (!empty($this->_playerDetailItem['fame_attr'])) {
         foreach ($this->_playerDetailItem['fame_attr'] as $key => $value) {
             $this->_player[$key] += $value;
         }
     }
     if (!empty($this->_playerDetailItem['vip_special_attr'])) {
         foreach ($this->_playerDetailItem['vip_special_attr'] as $key => $value) {
             $this->_player[$key] += $this->_player[$key] * ($value / 10000);
         }
     }
     if ($calc_buff_attr) {
         #TODO:看这个参数是不是要算buff属性 现在是排行查看的时候要计算 登陆的时候获取人物帐数据的的时候不用
         if (!empty($this->_playerDetailItem['dower_info'])) {
             $arr_buff = array();
             foreach ($this->_playerDetailItem['dower_info'] as $val) {
                 $dower = Cache_Dower::getInstance()->get_dower_info($val['dower_id'], $val['dower_lv']);
                 if (!empty($dower)) {
                     $skillPassive = Cache_SkillPassive::getInstance()->get_skill_passive_info(array('sid' => $dower['skill_id'], 'level' => $val['dower_lv']));
                     if (!empty($skillPassive['buff_id1'])) {
                         $arr_buff[] = $skillPassive['buff_id1'];
                     }
                     if (!empty($skillPassive['buff_id2'])) {
                         $arr_buff[] = $skillPassive['buff_id2'];
                     }
                 }
             }
             if ($arr_buff) {
                 $buff_data = Cache_SkillBuff::getInstance()->get_buff_data($arr_buff);
                 if ($buff_data) {
                     foreach ($buff_data as $val) {
                         $attr_key = $this->get_game('BuffData')->get_attr_by_buff_type($val['param1']);
                         if ($val['buff_type'] == 'mod_fight_attr') {
                             $this->_playerDetailItem['buff_attr'][$attr_key] += $val['param2'];
                         }
                         if ($val['buff_type'] == 'mod_fight_attr_%') {
                             $this->_playerDetailItem['buff_attr_per'][$attr_key] += $val['param2'];
                         }
                     }
                 }
             }
         }
         #---------------------------------------------------------------------
         #buff属性
         #---------------------------------------------------------------------
         if (!empty($this->_playerDetailItem['buff_attr'])) {
             foreach ($this->_playerDetailItem['buff_attr'] as $key => $value) {
                 if ($key == 'hp' || $key == 'atk_min' || $key == 'arm') {
                     $this->_player[$key] += intval($this->_player[$key] * ($value / 10000));
                 }
             }
         }
         #---------------------------------------------------------------------
         #buff百分比属性
         #---------------------------------------------------------------------
         if (!empty($this->_playerDetailItem['buff_attr_per'])) {
             foreach ($this->_playerDetailItem['buff_attr_per'] as $key => $value) {
                 if ($key == 'hp' || $key == 'atk_min' || $key == 'arm') {
                     $this->_player[$key] += intval($this->_player[$key] * ($value / 100));
                 }
             }
         }
     }
     //        #vip特权加成  vip升级的时候挪到
     //
     //        $vip_level_config = Cache_VipLevelLimit::getInstance()->get_limit_info($this->_player['privilege_level'],10066);
     //
     //        if($vip_level_config){
     //            $this->_player['hp'] += $this->_player['hp'] * ($vip_level_config['max_times']/10000);
     //        }
     //        $vip_level_config = Cache_VipLevelLimit::getInstance()->get_limit_info($this->_player['privilege_level'],10067);
     //        if($vip_level_config){
     //            $this->_player['atk_min'] += $this->_player['atk_min'] * ($vip_level_config['max_times']/10000);
     //        }
     //        $vip_level_config = Cache_VipLevelLimit::getInstance()->get_limit_info($this->_player['privilege_level'],10068);
     //        if($vip_level_config){
     //            $this->_player['arm'] += $this->_player['arm'] * ($vip_level_config['max_times']/10000);
     //        }
     if ($equip_move_speed > 0) {
         $this->_player['move_speed'] = $this->_player['move_speed'] * (1 + $equip_move_speed / 10000);
     }
     ###统一向上取整
     foreach (Cache_AttrConfig::get_attr() as $key) {
         $this->_player[$key] = intval($this->_player[$key]);
     }
     return $this->_player;
 }
Esempio n. 2
0
 public static function set_hero_info2($data)
 {
     ##################【英雄属性】#######################################
     foreach (Cache_AttrConfig::get_attr() as $key) {
         $data[$key] = ceil($data[$key]);
     }
     self::push_value(self::HERO2_HP, intval($data['hp']));
     self::push_value(self::HERO2_ATTAK, intval($data['atk_min']));
     self::push_value(self::HERO2_ARMOR, intval($data['arm']));
     if (isset($data['mp'])) {
         self::push_value(self::HERO2_MP, intval($data['mp']));
     }
     if (isset($data['attack_speed'])) {
         self::push_value(self::HERO2_ATTACK_SPEED, intval($data['attack_speed']));
     }
     if (isset($data['crit_chance'])) {
         self::push_value(self::HERO2_CRIT_CHANCE, intval($data['crit_chance']));
     }
     if (isset($data['crit_damage'])) {
         self::push_value(self::HERO2_CRIT_DAMAGE, intval($data['crit_damage']));
     }
     if (isset($data['penetrate_damage'])) {
         self::push_value(self::HERO2_PENETRATE_DAMAGE, intval($data['penetrate_damage']));
     }
     if (isset($data['damage_dodge'])) {
         self::push_value(self::HERO2_DAMAGE_DODGE, intval($data['damage_dodge']));
     }
     if (isset($data['magic_reduction'])) {
         self::push_value(self::HERO2_MAGIC_REDUCTION, intval($data['magic_reduction']));
     }
     if (isset($data['controlled_reduction'])) {
         self::push_value(self::HERO2_CONTROLLED_REDUCTION, intval($data['controlled_reduction']));
     }
     if (isset($data['damage_reduction'])) {
         self::push_value(self::HERO2_DAMAGE_REDUCTION, intval($data['damage_reduction']));
     }
     if (isset($data['penetrate_damage_defense'])) {
         self::push_value(self::HERO2_PENETRATE_DAMAGE_DEFENSE, intval($data['penetrate_damage_defense']));
     }
     if (isset($data['uncrit_prop'])) {
         self::push_value(self::HERO2_UNCRIT_PROP, intval($data['uncrit_prop']));
     }
     if (isset($data['uncrit_damage'])) {
         self::push_value(self::HERO2_UNCRIT_DAMAGE, intval($data['uncrit_damage']));
     }
     if (isset($data['hp_restore'])) {
         self::push_value(self::HERO2_HP_RESTORE, intval($data['hp_restore']));
     }
     if (isset($data['hit_restore_heath'])) {
         self::push_value(self::HERO2_HIT_RESTORE_HEATH, intval($data['hit_restore_heath']));
     }
     if (isset($data['hp_suck'])) {
         self::push_value(self::HERO2_HP_SUCK, intval($data['hp_suck']));
     }
     if (isset($data['mp_restore'])) {
         self::push_value(self::HERO2_MP_RESTORE, intval($data['mp_restore']));
     }
     if (isset($data['hit_restore_mp'])) {
         self::push_value(self::HERO2_HIT_RESTORE_MP, intval($data['hit_restore_mp']));
     }
     if (isset($data['move_speed'])) {
         self::push_value(self::HERO2_MOVE_SPEED, intval($data['move_speed']));
     }
     if (isset($data['rebound_damage'])) {
         self::push_value(self::HERO2_REBOUND_DAMAGE, intval($data['rebound_damage']));
     }
     if (isset($data['weapon_master'])) {
         self::push_value(self::HERO2_WEAPON_MASTER, intval($data['weapon_master']));
     }
     if (isset($data['atk_luck'])) {
         self::push_value(self::HERO2_ATK_LUCK, intval($data['atk_luck']));
     }
     if (isset($data['hit_rate'])) {
         self::push_value(self::HERO2_HIT_RATE, intval($data['hit_rate']));
     }
     if (isset($data['skill_cooling'])) {
         self::push_value(self::HERO2_SKILL_COOLING, intval($data['skill_cooling']));
     }
     #百分比属性 英雄专用
     if (isset($data['hero_hit_rate_per'])) {
         self::push_value(self::HERO2_HIT_RATE_PER, intval($data['hero_hit_rate_per']));
     }
     if (isset($data['hero_dodge_per'])) {
         self::push_value(self::HERO2_DODGE_PER, intval($data['hero_dodge_per']));
     }
     if (isset($data['hero_crit_chance_per'])) {
         self::push_value(self::HERO2_CRIT_CHANCE_PER, intval($data['hero_crit_chance_per']));
     }
     if (isset($data['hero_crit_damage_per'])) {
         self::push_value(self::HERO2_CRIT_DAMAGE_PER, intval($data['hero_crit_damage_per']));
     }
     if (isset($data['hero_uncrit_chance_per'])) {
         self::push_value(self::HERO2_UNCRIT_CHANCE_PER, intval($data['hero_uncrit_chance_per']));
     }
     if (isset($data['hero_uncrit_damage_per'])) {
         self::push_value(self::HERO2_UNCRIT_DAMAGE_PER, intval($data['hero_uncrit_damage_per']));
     }
     ###################【英雄属性】#############################################
     //        self::push_value(self::HERO2_LEVEL,intval($data['hero_level']));
     if (!empty($data['general_skill_id'])) {
         self::push_value(self::HERO2_SKILL0, intval($data['general_skill_id']));
         self::push_value(self::HERO2_SKILL0_LEVEL, intval(1));
     } else {
         self::push_value(self::HERO2_SKILL0, intval($data['general_skill_id']));
         self::push_value(self::HERO2_SKILL0_LEVEL, intval(0));
     }
     if (!empty($data['skill_list'])) {
         $skill1 = array_shift($data['skill_list']);
         if (!empty($skill1) && $skill1['state'] > 0) {
             self::push_value(self::HERO2_SKILL1, intval($skill1['id']));
             self::push_value(self::HERO2_SKILL1_LEVEL, intval($skill1['lvl']));
         } else {
             self::push_value(self::HERO2_SKILL1, intval(0));
             self::push_value(self::HERO2_SKILL1_LEVEL, intval(0));
         }
         $skill2 = array_shift($data['skill_list']);
         if (!empty($skill2) && $skill2['state'] > 0) {
             self::push_value(self::HERO2_SKILL2, intval($skill2['id']));
             self::push_value(self::HERO2_SKILL2_LEVEL, intval($skill2['lvl']));
         } else {
             self::push_value(self::HERO2_SKILL2, intval(0));
             self::push_value(self::HERO2_SKILL2_LEVEL, intval(0));
         }
         $skill3 = array_shift($data['skill_list']);
         if (!empty($skill3) && $skill3['state'] > 0) {
             self::push_value(self::HERO2_SKILL3, intval($skill3['id']));
             self::push_value(self::HERO2_SKILL3_LEVEL, intval($skill3['lvl']));
         } else {
             self::push_value(self::HERO2_SKILL3, intval(0));
             self::push_value(self::HERO2_SKILL3_LEVEL, intval(0));
         }
         $skill4 = array_shift($data['skill_list']);
         if (!empty($skill4) && $skill4['state'] > 0) {
             self::push_value(self::HERO2_SKILL4, intval($skill4['id']));
             self::push_value(self::HERO2_SKILL4_LEVEL, intval($skill4['lvl']));
         } else {
             self::push_value(self::HERO2_SKILL4, intval(0));
             self::push_value(self::HERO2_SKILL4_LEVEL, intval(0));
         }
         $skill5 = array_shift($data['skill_list']);
         if (!empty($skill5) && $skill5['state'] > 0) {
             self::push_value(self::HERO2_SKILL5, intval($skill5['id']));
             self::push_value(self::HERO2_SKILL5_LEVEL, intval($skill5['lvl']));
         } else {
             self::push_value(self::HERO2_SKILL5, intval(0));
             self::push_value(self::HERO2_SKILL5_LEVEL, intval(0));
         }
         $skill6 = array_shift($data['skill_list']);
         if (!empty($skill6) && $skill6['state'] > 0) {
             self::push_value(self::HERO2_SKILL6, intval($skill6['id']));
             self::push_value(self::HERO2_SKILL6_LEVEL, intval($skill6['lvl']));
         } else {
             self::push_value(self::HERO2_SKILL6, intval(0));
             self::push_value(self::HERO2_SKILL6_LEVEL, intval(0));
         }
     } else {
         self::push_value(self::HERO2_SKILL1, intval(0));
         self::push_value(self::HERO2_SKILL1_LEVEL, intval(0));
         self::push_value(self::HERO2_SKILL2, intval(0));
         self::push_value(self::HERO2_SKILL2_LEVEL, intval(0));
         self::push_value(self::HERO2_SKILL3, intval(0));
         self::push_value(self::HERO2_SKILL3_LEVEL, intval(0));
         self::push_value(self::HERO2_SKILL4, intval(0));
         self::push_value(self::HERO2_SKILL4_LEVEL, intval(0));
         self::push_value(self::HERO2_SKILL5, intval(0));
         self::push_value(self::HERO2_SKILL5_LEVEL, intval(0));
         self::push_value(self::HERO2_SKILL6, intval(0));
         self::push_value(self::HERO2_SKILL6_LEVEL, intval(0));
     }
 }