| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class HeroActorData : ActorData
- {
- private string mHeadIcon;
- protected RoleBaseData mBaseData;
- protected RoleAttributeData mAttrData;
- protected ProfessionData mProfessionData;
- public RoleBaseData BaseData { get { return mBaseData; } }
- public RoleAttributeData AttrData { get { return mAttrData; } }
- public ProfessionData ProfessionData { get { return mProfessionData; } }
- private int mProfessionId = 0;
- public int ProfessionId
- {
- get { return mProfessionId; }
- }
- private SkillParam[] mUsedSkills = null;
- private Dictionary<BodyPart, string> mPartResList = null;
- private FashionParam mFashionData;
- public Dictionary<BodyPart, string> PartResList
- {
- get { return mPartResList; }
- }
- public FashionParam FashionData
- {
- get { return mFashionData; }
- }
- public override string AnimCtrlName
- {
- get { return mBaseData != null ? mBaseData.BattleCtrlPath : ""; }
- }
- public override string ShowAnimCtrlName
- {
- get { return mBaseData != null ? mBaseData.ShowCtrlPath : ""; }
- }
- public override string ProfessionIcon
- {
- get
- {
- return mProfessionData != null ? mProfessionData.Icon : "";
- }
- }
- public override string HeadIcon
- {
- get { return mBaseData.headId; }
- set { }
- }
- public override string BattleBigIcon
- {
- get { return mBaseData.battleBigIcon; }
- }
- #region OVERRIDE_PROPERTIES
- public override string SkillFrameEventName
- {
- get { return mBaseData.frameEventName; }
- }
- public override int NatureId
- {
- get { return mProfessionData.NatureId; }
- }
- public override SFloat BaseLife
- {
- get
- {
- if (mAttrData == null) return 0;
- SFloat a = BattleFormulaParamMgr.Instance.GetParam(1);
- return mAttrData.GetAttr(Attr_Life) * mProfessionData.HpRate * (1 + VIT * a);
- }
- }
- public override SFloat BaseSp
- {
- get
- {
- if (mAttrData == null) return 0;
- SFloat a = BattleFormulaParamMgr.Instance.GetParam(2);
- return mAttrData.GetAttr(Attr_Sp) * mProfessionData.SpRate * (1 + INT * a);
- }
- }
- public override SFloat BaseAttack
- {
- get
- {
- SFloat attack = mAttrData.GetAttr(Attr_Attack) * mProfessionData.AtkRate;
- if (IsFront)
- {
- SFloat a = BattleFormulaParamMgr.Instance.GetParam(3);
- SFloat b = BattleFormulaParamMgr.Instance.GetParam(4);
- SFloat c = BattleFormulaParamMgr.Instance.GetParam(35);
- attack += a * (STR + c * DEX + c * LUK) + b * Mathf.Pow(Mathf.FloorToInt(STR * 0.1f), 2);
- }
- else
- {
- SFloat a = BattleFormulaParamMgr.Instance.GetParam(5);
- SFloat b = BattleFormulaParamMgr.Instance.GetParam(6);
- SFloat c = BattleFormulaParamMgr.Instance.GetParam(36);
- attack += a * (DEX + c * STR + c * LUK) + b * Mathf.Pow(Mathf.FloorToInt(DEX * 0.1f), 2);
- }
- return attack;
- }
- }
- public override SFloat BaseMagicAttack
- {
- get
- {
- SFloat a = BattleFormulaParamMgr.Instance.GetParam(7), b = BattleFormulaParamMgr.Instance.GetParam(8);
- SFloat magicAttack = mAttrData.GetAttr(Attr_MagicAttack) * mProfessionData.MagicAtkRate;
- magicAttack += INT * a + b * Mathf.Pow(Mathf.FloorToInt(INT * 0.1f), 2);
- return magicAttack;
- }
- }
- public override SFloat BaseDefense
- {
- get
- {
- SFloat a = BattleFormulaParamMgr.Instance.GetParam(9);
- SFloat defense = mAttrData.GetAttr(Attr_Defense) * mProfessionData.DefRate;
- defense = defense + a * VIT;
- return defense;
- }
- }
- public override SFloat BaseMagicDefense
- {
- get
- {
- SFloat a = BattleFormulaParamMgr.Instance.GetParam(10);
- SFloat magicDef = mAttrData.GetAttr(Attr_MagicDefense) * mProfessionData.MagicDefRate;
- magicDef = magicDef + a * INT;
- return magicDef;
- }
- }
- public override SFloat BaseDodge
- {
- get
- {
- SFloat a = BattleFormulaParamMgr.Instance.GetParam(11);
- SFloat dodge = mAttrData.GetAttr(Attr_Dodge) * mProfessionData.DodgeRate + a * AGI;
- return dodge;
- }
- }
- public override SFloat BaseHit
- {
- get
- {
- SFloat a = BattleFormulaParamMgr.Instance.GetParam(12);
- SFloat hit = mAttrData.GetAttr(Attr_Hit) * mProfessionData.HitRate + a * DEX;
- return hit;
- }
- }
- public override SFloat BaseCrit
- {
- get
- {
- SFloat a = BattleFormulaParamMgr.Instance.GetParam(13);
- SFloat crit = mAttrData.GetAttr(Attr_Crit) * mProfessionData.CritRate + a * LUK;
- return crit;
- }
- }
- public override SFloat BaseTen
- {
- get
- {
- SFloat a = BattleFormulaParamMgr.Instance.GetParam(14);
- SFloat ten = mAttrData.GetAttr(Attr_Ten) * mProfessionData.TenacityRate + a * LUK;
- return ten;
- }
- }
- public override SFloat BaseAttackSpeed
- {
- get
- {
- return mProfessionData.AttackSpeed;
- }
- }
- public override SFloat Life
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_Life);
- if (0 <= ServerData)
- return ServerData;
- return LocalLife;
- }
- }
- public override SFloat Sp
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_Sp);
- if (0 <= ServerData)
- return ServerData;
- return LocalSp;
- }
- }
- /// <summary>
- /// 物攻
- /// </summary>
- public override SFloat Attack
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_Attack);
- if (0 <= ServerData)
- return ServerData;
- return LocalAttack;
- }
- }
- public override SFloat MagicAttack
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_MagicAttack);
- if (0 <= ServerData)
- return ServerData;
- return LocalMagicAttack;
- }
- }
- /// <summary>
- /// 物防
- /// </summary>
- public override SFloat Defense
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_Defense);
- if (0 <= ServerData)
- return ServerData;
- return LocalDefense;
- }
- }
- //魔防
- public override SFloat MagicDefense
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_MagicDefense);
- if (0 <= ServerData)
- return ServerData;
- return LocalMagicDefense;
- }
- }
- public override SFloat Hit
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_Hit);
- if (0 <= ServerData)
- return ServerData;
- return LocalHit;
- }
- }
- public override SFloat Crit
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_Crit);
- if (0 <= ServerData)
- return ServerData;
- return LocalCrit;
- }
- }
- public override SFloat Dodge
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_Dodge);
- if (0 <= ServerData)
- return ServerData;
- return LocalDodge;
- }
- }
- public override SFloat Ten
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_Ten);
- if (0 <= ServerData)
- return ServerData;
- return LocalTen;
- }
- }
- public override SFloat LocalAttackSpeed
- {
- get
- {
- SFloat a = BattleFormulaParamMgr.Instance.GetParam(24);
- SFloat b = BattleFormulaParamMgr.Instance.GetParam(25);
- SFloat attackSpeed = (BaseAttackSpeed + GetAdditionalAttr(Attr_AttackSpeed)) * (1 + GetAdditionalAttrPercent(Attr_AttackSpeed_Percent)) + AGI * a + DEX * b;
- return attackSpeed;
- }
- }
- //攻击速度
- public override SFloat AttackSpeed
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_AttackSpeed);
- if (0 <= ServerData)
- return ServerData;
- return LocalAttackSpeed;
- }
- }
- public override SFloat LocalCastAcceleration
- {
- get
- {
- SFloat a = BattleFormulaParamMgr.Instance.GetParam(28);
- SFloat CastAccelerationSpeed = DEX * a * 1000;//毫秒
- return CastAccelerationSpeed;
- }
- }
- //施法速度
- public override SFloat CastAcceleration
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_CastAcceleration);
- if (0 <= ServerData)
- return ServerData;
- return LocalCastAcceleration;
- }
- }
- //神威值
- public override SFloat GodPower
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_GodPow);
- if (0 <= ServerData)
- return ServerData;
- return LocalGodPower;
- }
- }
- public override bool IsHero
- {
- get { return true; }
- }
- public override int AvatarID
- {
- get
- {
- return mBaseData.avatarId;
- }
- }
- private string mName;
- public override string Name
- {
- get { return mName; }
- set
- {
- mName = value;
- }
- }
- public override string Description
- {
- get { return mBaseData.Desc; }
- }
- public override ProfessionType Profession
- {
- get { return (ProfessionType)mProfessionData.ProfessionType; }
- }
- public override int JobStage
- {
- get { return mProfessionData.Step; }
- }
- public override int JobBranch
- {
- get { return mProfessionData.ProfessionBranch; }
- }
- public override int PositionValue
- {
- get { return mProfessionData.Position; }
- }
- private SInt mBaseSTR = 1;
- public override SInt BaseSTR
- {
- get { return mBaseSTR; }
- set { mBaseSTR = value; }
- }
- private SInt mBaseAGI = 1;
- public override SInt BaseAGI
- {
- get { return mBaseAGI; }
- set { mBaseAGI = value; }
- }
- private SInt mBaseINT = 1;
- public override SInt BaseINT
- {
- get { return mBaseINT; }
- set { mBaseINT = value; }
- }
- private SInt mBaseVIT = 1;
- public override SInt BaseVIT
- {
- get { return mBaseVIT; }
- set { mBaseVIT = value; }
- }
- private SInt mBaseDEX = 1;
- public override SInt BaseDEX
- {
- get { return mBaseDEX; }
- set { mBaseDEX = value; }
- }
- private SInt mBaseLUK = 1;
- public override SInt BaseLUK
- {
- get { return mBaseLUK; }
- set { mBaseLUK = value; }
- }
- public override SInt STR
- {
- get { return mBaseSTR + (int)GetAdditionalAttr(Attr_STR); }
- }
- public override SInt AGI
- {
- get { return mBaseAGI + (int)GetAdditionalAttr(Attr_AGI); }
- }
- public override SInt INT
- {
- get { return mBaseINT + (int)GetAdditionalAttr(Attr_INT); }
- }
- public override SInt VIT
- {
- get { return mBaseVIT + (int)GetAdditionalAttr(Attr_VIT); }
- }
- public override SInt DEX
- {
- get { return mBaseDEX + (int)GetAdditionalAttr(Attr_DEX); }
- }
- public override SInt LUK
- {
- get { return mBaseLUK + (int)GetAdditionalAttr(Attr_LUK); }
- }
- #endregion
- public HeroActorData(int id) : base(id)
- {
- mActorType = ActorType.Hero;
- }
- public override void Dispose()
- {
- if (mAttrData != null)
- {
- mAttrData.Dispose();
- mAttrData = null;
- }
- if (mProfessionData != null)
- {
- mProfessionData.Dispose();
- mProfessionData = null;
- }
- base.Dispose();
- }
- public override void Initialize(int id, int level, SkillParam[] usedSkills)
- {
- base.Initialize(id, level, usedSkills);
- mBaseData = new RoleBaseData(id);
- mAttrData = new RoleAttributeData(mLevel);
- mAvatarData = new AvatarData(AvatarID);
- mUsedSkills = usedSkills;
- Gender = mBaseData.sex;
- }
- public override void SetLevel(int lv)
- {
- if(mLevel != lv)
- {
- mLevel = lv;
- mAttrData = new RoleAttributeData(mLevel);
- }
- }
- public void SetProfessionId(int id,bool needLoadSkill = false)
- {
- if (mProfessionId == id) return;
- mProfessionId = id;
- mProfessionData = new ProfessionData(id);
- if (mSkillMgr == null)
- mSkillMgr = new SkillManager(this);
- if (mUsedSkills != null)
- {
- mSkillMgr.InitializeSkill(mProfessionData.NormalSkillIds, mUsedSkills);
- }
- else
- {
- mSkillMgr.InitializeSkill(mProfessionData.NormalSkillIds, mProfessionData.SkillIds);
- }
- if(mProfessionData.AlternativeSkills != null && mProfessionData.AlternativeSkills.Length > 0)
- {
- mSkillMgr.InitAlternativeSkills(mProfessionData.AlternativeSkills);
- }
- ResetFirstSkill();
- valid = mBaseData.valid && mProfessionData.valid && mAttrData.valid && mAvatarData.valid;
- if(needLoadSkill)
- {
- mSkillMgr.LoadSkills();
- mSkillMgr.LoadNorlSkills();
- }
- }
- public override void RefreshSkills(SkillParam[] usedSkills)
- {
- if (usedSkills != null)
- {
- mUsedSkills = usedSkills;
- mSkillMgr.InitializeSkill(mProfessionData.NormalSkillIds, mUsedSkills);
- }
- }
- public void SetFashionData(FashionParam fashionData)
- {
- mFashionData = fashionData;
- ParseFashionPartRes();
- }
- public BodyPartParam GetBodyPartParam(BodyPart part)
- {
- if (mFashionData.parts == null) return default(BodyPartParam);
- for(int idx = 0; idx < mFashionData.parts.Length;idx++)
- {
- if (mFashionData.parts[idx].part == (int)part) return mFashionData.parts[idx];
- }
- return default(BodyPartParam);
- }
- private void ParseFashionPartRes()
- {
- if (mPartResList == null)
- mPartResList = new Dictionary<BodyPart, string>();
- else
- mPartResList.Clear();
- if (mBaseData == null) return;
- int cfgId = 0;
- if (Gender == (int)Role_Gender.Male)
- {
- cfgId = GlobalConfig.c_man_base_model_path;
- }
- else if (Gender == (int)Role_Gender.Female)
- {
- cfgId = GlobalConfig.c_woman_base_model_path;
- }
- //基础骨骼
- string baseBonePrefab = GlobalConfig.Instance.GetConfigStrValue(cfgId);
- if (!string.IsNullOrEmpty(baseBonePrefab))
- mPartResList.Add(BodyPart.Skeleton, baseBonePrefab);
- //脸部
- string facePrefab = null;
- if (Gender == (int)Role_Gender.Male)
- {
- facePrefab = GlobalConfig.Instance.GetConfigStrValue(GlobalConfig.c_man_face_model_path);
- }
- else
- {
- facePrefab = GlobalConfig.Instance.GetConfigStrValue(GlobalConfig.c_woman_face_model_path);
- }
- if (!string.IsNullOrEmpty(facePrefab))
- {
- mPartResList.Add(BodyPart.Face, facePrefab);
- }
- if (mFashionData.parts != null)
- {
- for(int idx =0; idx < mFashionData.parts.Length;idx++)
- {
- BodyPartParam part = mFashionData.parts[idx];
- //DebugHelper.LogError("part :" + part.part + " prefab:" + part.modelPrefab);
- if (string.IsNullOrEmpty(part.modelPrefab)) continue;
- mPartResList.Add((BodyPart)part.part, part.modelPrefab);
- }
- }
- }
- protected override JSONObject FashionToJson()
- {
- JSONObject json = mFashionData.ToJson();
- return json;
- }
- protected override JSONObject BaseToJson()
- {
- JSONObject json = base.BaseToJson();
- json.AddField("jobId", mProfessionId);
- return json;
- }
- }
|