| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956 |
- using UnityEngine;
- using System.Collections;
- using System;
- using System.Collections.Generic;
- using LuaInterface;
- public enum ActorType
- {
- None = 0,
- Hero = 1,
- Fellow = 2,
- Monster = 3,
- Pet = 4
- }
- public class ActorData
- {
- #region ATTR_TYPE
- public const int Attr_STR = 1; //力量 [一级]
- public const int Attr_AGI = 2; //敏捷 [一级]
- public const int Attr_INT = 3; //智力 [一级]
- public const int Attr_VIT = 4; //体质 [一级]
- public const int Attr_DEX = 5; //灵巧 [一级]
- public const int Attr_LUK = 6; //幸运 [一级]
- public const int Attr_Life = 7; // 生命 [二级]
- public const int Attr_Sp = 8; //蓝量 [二级]
- public const int Attr_Attack = 9; //物攻 [二级]
- public const int Attr_MagicAttack = 10; //魔攻 [二级]
- public const int Attr_Defense = 11; //物防 [二级]
- public const int Attr_MagicDefense = 12; //魔防 [二级]
- public const int Attr_Hit = 13; //命中 [二级]
- public const int Attr_Dodge = 14; //闪避 [二级]
- public const int Attr_Crit = 15; //暴击 [二级]
- public const int Attr_Ten = 16; //韧性 [二级]
- public const int Attr_AttackSpeed = 17; //攻速
- public const int Attr_CastAcceleration = 18; //施法加速
- public const int Attr_MaxHp = 19;
- public const int Attr_MaxSp = 20;
- public const int Attr_GodPow = 21; //神威
- public const int Attr_STR_Percent = 31;
- public const int Attr_AGI_Percent = 32;
- public const int Attr_INT_Percent = 33;
- public const int Attr_VIT_Percent = 34;
- public const int Attr_DEX_Percent = 35;
- public const int Attr_LUK_Percent = 36;
- public const int Attr_Life_Percent = 37;
- public const int Attr_Sp_Percent = 38;
- public const int Attr_Attack_Percent = 39;
- public const int Attr_MagicAttack_Percent = 40;
- public const int Attr_Defense_Percent = 41;
- public const int Attr_MagicDefense_Percent = 42;
- public const int Attr_Hit_Percent = 43;
- public const int Attr_Dodge_Percent = 44;
- public const int Attr_Crit_Percent = 45;
- public const int Attr_Ten_Percent = 46;
- public const int Attr_AttackSpeed_Percent = 47;
- public const int Attr_CastAcceleration_Percent = 48;
- public const int Attr_MaxHp_Percent = 49;
- public const int Attr_MaxSp_Percent = 50;
- public const int Attr_RealHurt_Percent = 51;
- public const int Attr_Nature_None_Damage_Percent = 71; //对无属性目标伤害加成/减免百分比
- public const int Attr_Nature_Water_Damage_Percent = 72; //对水属性目标的伤害加成/减免百分比
- public const int Attr_Nature_Ground_Damage_Percent = 73; //对地属性目标的伤害加成/减免百分比
- public const int Attr_Nature_Fire_Damage_Percent = 74; //对火属性目标的伤害加成/减免百分比
- public const int Attr_Nature_Wind_Damage_Percent = 75; //对风属性目标的伤害加成/减免百分比
- public const int Attr_Nature_Saint_Damage_Percent = 76; //对圣属性目标的伤害加成/减免百分比
- public const int Attr_Nature_Dark_Damage_Percent = 77; //对暗属性目标的伤害加成/减免百分比
- public const int Attr_Nature_Read_Damage_Percent = 78; //对念属性目标的伤害加成/减免百分比
- public const int Attr_Nature_None_AntiDamage_Percent = 81; //抗无属性伤害加成/减免百分比
- public const int Attr_Nature_Water_AntiDamage_Percent = 82; //抗水属性伤害加成/减免百分比
- public const int Attr_Nature_Ground_AntiDamage_Percent = 83; //抗地属性伤害加成/减免百分比
- public const int Attr_Nature_Fire_AntiDamage_Percent = 84; //抗火属性伤害加成/减免百分比
- public const int Attr_Nature_Wind_AntiDamage_Percent = 85; //抗风属性伤害加成/减免百分比
- public const int Attr_Nature_Saint_AntiDamage_Percent = 86; //抗圣属性伤害加成/减免百分比
- public const int Attr_Nature_Dark_AntiDamage_Percent = 87; //抗暗属性伤害加成/减免百分比
- public const int Attr_Nature_Read_AntiDamage_Percent = 88; //抗念属性伤害加成/减免百分比
- public const int Attr_Penetration_Percent = 91; //忽视物防
- public const int Attr_Magic_Penetration_Percent = 92; //忽视魔防
- public const int Attr_PhysicDamage_Percent = 93; //物伤加成/减免百分比
- public const int Attr_MagicDamage_Percent = 94; //魔法伤害加成/减免百分比
- public const int Attr_Anti_PhysicDamage_Percent = 95; //抗物伤加成
- public const int Attr_Anti_MagicDamage_Percent = 96; //抗魔法加成
- public const int Attr_CritDamage_Percent = 97; //暴击伤害百分比
- public const int Attr_PhysicDamageReflect_Percent = 98; //物理伤害反射百分比
- public const int Attr_MagicDamageReflect_Percent = 99; //魔法伤害反射百分比
- public const int Attr_FixedSingTime_Percent = 100; //固定吟唱加成/减免百分比
- public const int Attr_VariableSingTime_Percent = 101; //可变吟唱加成/减免百分比
- public const int s_FirstAttrNum = 6;
- public const int s_SecondAttrNum = 10; //二级属性的个数
- public const int s_AttrNum = 30;
- public const int s_AllAttrNum = 101;
- #endregion
- #region BASIC_PROPERTIES
- protected SFloat[] mAdditionalAttrs = null;
- protected SFloat[] mAttrPercent = null;
- protected SFloat[] mServerAttrs = null;//服务器计算的2级属性 只有伙伴 主角 宠物有 NPC还走本地二级属性
- protected Dictionary<int, SFloat> mExtendAttrPercentDic = null;
- protected List<TriggerBuffData> mTriggerBuffs = null;
- public List<TriggerBuffData> TriggerBuffs
- {
- get { return mTriggerBuffs; }
- }
- public SFloat[] AdditionAttrs
- {
- get { return mAdditionalAttrs; }
- }
- public SFloat[] AttrPercents
- {
- get { return mAttrPercent; }
- }
- public int IActorType
- {
- get { return (int)mActorType; }
- }
- public int JobType
- {
- get { return (int)Profession; }
- }
- protected ActorType mActorType = ActorType.None;
- public ActorType AType
- {
- get { return mActorType; }
- }
- public bool valid = false;
- private int mBaseId = 0;
- public int BaseId
- {
- get { return mBaseId; }
- set { mBaseId = value; }
- }
- private long mId = 0;
- public long ID
- {
- get { return mId; }
- set { mId = value; }
- }
- private bool mIsRecordActor = false;
- public bool IsRecordActor
- {
- get { return mIsRecordActor; }
- set { mIsRecordActor = value; }
- }
- private CastSkillData mCastSkillData;
- protected AvatarData mAvatarData;
- protected SkillManager mSkillMgr;
-
- public AvatarData AvatarData { get { return mAvatarData; } }
-
- public SkillManager SkillMgr { get { return mSkillMgr; } }
- //站位
- public Position_Type PositionRule
- {
- get
- {
- if (PositionValue <= 3)
- return Position_Type.Position_Front;
- else
- return Position_Type.Position_Back;
- }
- }
- public Vector3 Rot { get { return mAvatarData.rot; } }
- public Vector3 Offset { get { return mAvatarData.offset; } }
- public bool IsFront { get { return PositionRule == Position_Type.Position_Front; } }
- public bool IsBack { get { return PositionRule == Position_Type.Position_Back; } }
- public virtual int AvatarID { get { return 0; } }
- public virtual string Name { get { return ""; } set { } }
- public virtual string Description { get { return ""; } }
- public virtual ProfessionType Profession { get { return ProfessionType.Pro_Type_0; } }
- public virtual int JobStage { get { return 0; } }
- public virtual int JobBranch { get { return 0; } }
- public virtual int PositionValue { get { return 0; } set { } }
- public virtual bool IgnoreLife { get { return false; } set { } }
- public virtual ulong FighterInstanceId { get; set; }
- public virtual bool IsHero { get { return false; } }
- public virtual bool IsFellow { get { return false; } }
- public virtual bool IsNpc { get { return false; } }
- public virtual bool IsPet { get { return false; } }
- public virtual bool IsBoss { get; set; }
- public virtual string HeadIcon { get; set;}
- public virtual int HeadFrameId { get; set;}
- public virtual string BattleBigIcon { get; }
- public virtual int NatureId { get { return 0; } }
- public virtual bool ShowHpBar { get { return false; } }
- public virtual string AnimCtrlName
- {
- get { return ""; }
- }
- public virtual string ShowAnimCtrlName
- {
- get { return ""; }
- }
- //狂暴id
- public int RageId { get; set; }
- public bool IsMainRole { get; set; }
- public virtual NpcBaseData NpcData { get { return null; } }
- public bool IsHaving = false;
- public bool IsShowBoss { get; set; }
- public virtual int Gender { get; set; }
- protected int mLevel;
- public int Level
- {
- get { return mLevel; }
- set { mLevel = value; }
- }
- protected int mStrengthLevel;
- public int StrengthLevel
- {
- get { return mStrengthLevel; }
- set { mStrengthLevel = value; }
- }
- //UI 显示的等级 1.推图BOOSlv = 关卡 2.爬塔lv = 爬塔层数
- protected int mShowLevel;
- public int ShowLevel
- {
- get { return mShowLevel; }
- set { mShowLevel = value; }
- }
- private SBool bInvincible = false;
- public SBool Invincible
- {
- get { return bInvincible; }
- set { bInvincible = value; }
- }
- protected Dictionary<int, SFloat> mEquipTotalAttrs;
- public Dictionary<int, SFloat> MEquipTotalAttrs
- {
- get { return mEquipTotalAttrs; }
- set { mEquipTotalAttrs = value; }
- }
- private bool bDisposed = false;
- public bool IsDisposed
- {
- get { return bDisposed; }
- }
- public virtual string SkillFrameEventName { get { return ""; } }
- public virtual string ProfessionIcon { get { return ""; } }
- public virtual CastSkillData CastSkillParam
- {
- get { return mCastSkillData; }
- }
- public bool IsTransferred { get; set; } //是否转职
-
- public string IdleSound { get { return mAvatarData != null ? mAvatarData.IdleSound : ""; } }
- public string RunSound { get { return mAvatarData != null ? mAvatarData.RunSound : ""; } }
- public string DieSound { get { return mAvatarData != null ? mAvatarData.DieSound : ""; } }
- public string HitSound { get { return mAvatarData != null ? mAvatarData.HitSound : ""; } }
- public string PetIcon { get { return mPetData != null ? mPetData.HeadIcon : ""; } }
- public virtual int BornEffectId { get { return 0; } }
- #endregion
- #region ATTR_PROPERTIES
- /*****************************一级属性**********************************************/
- public virtual SInt BaseSTR { get { return 1; } set { } }
- public virtual SInt BaseAGI { get { return 1; } set { } }
- public virtual SInt BaseINT { get { return 1; } set { } }
- public virtual SInt BaseVIT { get { return 1; } set { } }
- public virtual SInt BaseDEX { get { return 1; } set { } }
- public virtual SInt BaseLUK { get { return 1; } set { } }
- public virtual SInt STR { get { return 0; } } //力量
- public virtual SInt AGI { get { return 0; } } //敏捷
- public virtual SInt INT { get { return 0; } } //智力
- public virtual SInt VIT { get { return 0; } } //体质
- public virtual SInt DEX { get { return 0; } } //灵巧
- public virtual SInt LUK { get { return 0; } } //幸运
- /********************************角色基础成长二级属性属性*****************************/
- public virtual SFloat BaseLife { get { return 0; } }
-
- public virtual SFloat BaseSp { get { return 0; } }
- public virtual SFloat BaseAttack { get { return 0; } }
- public virtual SFloat BaseMagicAttack { get { return 0; } }
- public virtual SFloat BaseDefense {get { return 0; } }
- public virtual SFloat BaseMagicDefense { get { return 0; } }
- public virtual SFloat BaseCrit { get { return 0; } }
- public virtual SFloat BaseCritDamage { get { return 0; } }
- public virtual SFloat BaseDodge { get { return 0; } }
- public virtual SFloat BaseHit { get { return 0; } }
- public virtual SFloat BaseTen { get { return 0; } }
- public virtual SFloat BaseAttackSpeed { get { return 0; } }
- //(有服务器数据返回服务器 无 返回本地)
- /********************************二级属性[in battle]*******************************************/
- public virtual SFloat Life { get { return 0; }} //生命
- public virtual SFloat LocalLife
- {
- get
- {
- return CalcSecondAttr(Attr_Life);
- }
- }
- public virtual SFloat Sp { get { return 0; }} //蓝量
- public virtual SFloat LocalSp
- {
- get
- {
- return CalcSecondAttr(Attr_Sp);
- }
- }
- public virtual SFloat MinAttack { get { return Attack; } } //最小物攻
- public virtual SFloat Attack { get { return 0; } } //物攻
- public virtual SFloat LocalAttack
- {
- get
- {
- return CalcSecondAttr(Attr_Attack);
- }
- }
- public virtual SFloat MinMagicAttack { get { return MagicAttack; } } //最少魔攻
- public virtual SFloat MagicAttack { get { return 0; } } //魔攻
- public virtual SFloat LocalMagicAttack
- {
- get
- {
- return CalcSecondAttr(Attr_MagicAttack);
- }
- }
- public virtual SFloat Defense { get { return 0; } } //物防
- public virtual SFloat LocalDefense
- {
- get
- {
- return CalcSecondAttr(Attr_Defense);
- }
- }
- public virtual SFloat MagicDefense { get { return 0; } } //魔防
- public virtual SFloat LocalMagicDefense
- {
- get
- {
- return CalcSecondAttr(Attr_MagicDefense);
- }
- }
- public virtual SFloat Crit { get { return 0; } } //暴击
- public virtual SFloat LocalCrit
- {
- get
- {
- return CalcSecondAttr(Attr_Crit);
- }
- }
- public virtual SFloat CritDamagePercent { get { return GetAdditionalAttrPercent(Attr_CritDamage_Percent); } } //暴击伤害百分比
- public virtual SFloat Dodge { get { return 0; } } //闪避
- public virtual SFloat LocalDodge
- {
- get
- {
- return CalcSecondAttr(Attr_Dodge);
- }
- }
- public virtual SFloat Hit { get { return 0; } } //命中率
- public virtual SFloat LocalHit
- {
- get
- {
- return CalcSecondAttr(Attr_Hit);
- }
- }
- public virtual SFloat Ten { get { return 0; } } //韧性
- public virtual SFloat LocalTen
- {
- get
- {
- return CalcSecondAttr(Attr_Ten);
- }
- }
- public virtual SFloat AttackSpeed { get { return 0; } } //攻击速度
- public virtual SFloat LocalAttackSpeed
- {
- get
- {
- return CalcSecondAttr(Attr_AttackSpeed);
- }
- }
- public virtual SFloat CastAcceleration { get { return 0; } } //施法加速
- public virtual SFloat LocalCastAcceleration
- {
- get
- {
- return CalcSecondAttr(Attr_CastAcceleration);
- }
- }
- public virtual SFloat GodPower { get { return 0; } } //神威值
- public virtual SFloat LocalGodPower { get { return 0; } } //神威值
- public virtual SFloat Penetration { get { return GetAdditionalAttrPercent(Attr_Penetration_Percent); } } //忽视物防
- public virtual SFloat MagicPenetration { get { return GetAdditionalAttrPercent(Attr_Magic_Penetration_Percent); } } //忽视魔防
- public virtual SFloat VariableSingTime { get { return 0; } }
- public virtual SInt PerfectDodgeRate { get { return 0; } }
- public virtual SFloat DefPercent { get { return GetAdditionalAttrPercent(ActorData.Attr_Defense_Percent); } } //防御百分比
- public virtual SFloat MagicDefPercent { get { return GetAdditionalAttrPercent(ActorData.Attr_MagicDefense_Percent); } } //魔防百分比
- #endregion
- private long mPetId = 0;
- public long PetId
- {
- get { return mPetId; }
- set { mPetId = value; }
- }
- private ActorData mPetData = null;
- public ActorData PetData
- {
- get { return mPetData; }
- }
- public long GetuId()
- {
- return ID;
- }
- public long GetBaseId()
- {
- return BaseId;
- }
- public bool HasPet { get { return mPetData!=null; } }
- protected ActorData(int id)
- {
- IsMainRole = false;
- mBaseId = id;
- mAdditionalAttrs = new SFloat[s_AttrNum];
- mAttrPercent = new SFloat[s_AttrNum];
- mServerAttrs = new SFloat[s_AllAttrNum];
- mExtendAttrPercentDic = new Dictionary<int, SFloat>();
- ResetServerSecondAttr();
- }
- public virtual void RefreshSkills(SkillParam[] usedSkills)
- {
-
- }
- protected void SetUsedSkill(SkillParam[] usedSkills)
- {
- mUsedSkills = usedSkills;
- }
- private SkillParam[] mUsedSkills = null;
- public virtual void Initialize(int id, int level, SkillParam[] usedSkills)
- {
- mBaseId = id;
- mLevel = level;
- mShowLevel = level;
- mUsedSkills = usedSkills;
- mEquipTotalAttrs = new Dictionary<int, SFloat>();
- for (int i = Attr_Life; i <= Attr_MaxSp_Percent; ++i)
- {
- mEquipTotalAttrs.Add(i, 0);
- }
- }
- //平均技能等级
- public virtual int GetNverageSkillsLv()
- {
- int nNverageSkilllv = 0;
- if(null != mUsedSkills)
- {
- for (int i = 0; i < mUsedSkills.Length; i++)
- {
- nNverageSkilllv += mUsedSkills[i].skillLv;
- }
- //if (mUsedSkills.Length > 0)
- //{
- // nNverageSkilllv = (int)Math.Ceiling((float)nNverageSkilllv / mUsedSkills.Length);
- //}
- nNverageSkilllv = nNverageSkilllv - mUsedSkills.Length;
- }
- return nNverageSkilllv>=0 ? nNverageSkilllv:0;
- }
- public virtual float GetScale()
- {
- float fCurScale = 1;
- if (IsPet)
- {
- int nNverageSkillLv = GetNverageSkillsLv();
- string strScales = GlobalConfig.Instance.GetConfigStrValue(GlobalConfig.c_pet_scale_level);
- string[] strInfos = StringUtil.split(strScales, ';');
- for (int i = 0; i < strInfos.Length; i++)
- {
- string[] strDatas = StringUtil.split(strInfos[i], ':');
- if (strDatas.Length >= 2)
- {
- int nLevel = 0;
- float fScale = 1;
- int.TryParse(strDatas[0], out nLevel);
- float.TryParse(strDatas[1], out fScale);
- if (nLevel <= nNverageSkillLv)
- {
- fCurScale = fScale;
- }
- else
- {
- break;
- }
- }
- }
- }
- return fCurScale;
- }
- public void SetEquipTotalAttr(int id, float val)
- {
- mEquipTotalAttrs[id] = val;
- }
- public float GetEquipTotalAttr(int id)
- {
- return mEquipTotalAttrs[id];
- }
- //-----------------------------------------服务器二级属性
- public SFloat GetSeverSecondAttr(int attrId)
- {
- if (mServerAttrs.Length < attrId) return 0;
- return mServerAttrs[attrId - 1];
- }
- public void SetServerSecondAttr(int id, double val)
- {
- float fVal = (float)val;
- float.TryParse(val.ToString(), out fVal);
- if (id < Attr_STR || id > Attr_GodPow)
- {
-
- mServerAttrs[id - 1] = fVal * 0.0001f;
- }
- else
- {
- mServerAttrs[id - 1] = fVal;
- }
- }
- public void SetServerSecondAttr(int id, float val)
- {
- if (id < Attr_STR || id > Attr_GodPow)
- {
- mServerAttrs[id - 1] = val * 0.0001f;
- }
- else
- {
- mServerAttrs[id - 1] = val;
- }
- }
- public void SetServerSecondAttr(int id, SFloat val)
- {
- if (id < Attr_STR || id > Attr_GodPow)
- {
- mServerAttrs[id - 1] = val * 0.0001f;
- }
- else
- {
- mServerAttrs[id - 1] = val;
- }
- }
- public void ResetServerSecondAttr()
- {
- for (int i = 0; i < mServerAttrs.Length; i++)
- {
- mServerAttrs[i] = -1;//服务器没有计算 默认-1 取本地
- if (i >= Attr_Nature_Water_Damage_Percent - 1 && i <= Attr_VariableSingTime_Percent - 1)//下面区间服务器有计算 默认为0
- {
- mServerAttrs[i] = 0;
- }
- }
- }
- //----------------------------------------
- public SFloat GetAdditionalAttr(int attrId)
- {
- if (attrId < Attr_STR || attrId > Attr_GodPow) return 0;
- return mAdditionalAttrs[attrId - 1];
- }
- public void SetAdditionalAttr(int id, float val)
- {
- if (id < Attr_STR || id > Attr_GodPow) return;
- mAdditionalAttrs[id - 1] = val;
- }
- public void SetAdditionalAttr(int id, SFloat val)
- {
- if (id < Attr_STR || id > Attr_GodPow) return;
- mAdditionalAttrs[id - 1] = val;
- }
- public void ResetAdditionalAttr()
- {
- for(int i = 0; i < mAdditionalAttrs.Length; ++i)
- {
- mAdditionalAttrs[i] = 0;
- }
- }
- public void ResetAdditionalAttrPercent()
- {
- for (int i = 0; i < mAttrPercent.Length; ++i)
- {
- mAttrPercent[i] = 0;
- }
- }
- public SFloat GetAdditionalAttrPercent(int attrId)
- {
- if (attrId < Attr_STR_Percent) return 0;
- if(attrId >= Attr_Nature_None_Damage_Percent && attrId <= Attr_VariableSingTime_Percent)
- {
- SFloat val;
- val = mServerAttrs[attrId - 1];
- if (val >= 0)
- return val;
- mExtendAttrPercentDic.TryGetValue(attrId, out val);
- return val;
- }
- return mAttrPercent[attrId - Attr_STR_Percent];
- }
- public void SetAdditionalAttrPercent(int id, float val)
- {
- if (id < Attr_STR_Percent) return;
- if (id >= Attr_Nature_None_Damage_Percent && id <= Attr_VariableSingTime_Percent)
- {
- if (mExtendAttrPercentDic.ContainsKey(id))
- mExtendAttrPercentDic[id] = val;
- else
- mExtendAttrPercentDic.Add(id, val);
- return;
- }
- mAttrPercent[id - Attr_STR_Percent] = val;
- }
- public void SetAdditionalAttrPercent(int id, SFloat val)
- {
- if (id < Attr_STR_Percent) return;
- if (id > Attr_RealHurt_Percent && id < Attr_Nature_None_Damage_Percent) return;
- if (id >= Attr_Nature_None_Damage_Percent && id <= Attr_VariableSingTime_Percent)
- {
- if (mExtendAttrPercentDic.ContainsKey(id))
- mExtendAttrPercentDic[id] = val;
- else
- mExtendAttrPercentDic.Add(id, val);
- return;
- }
- mAttrPercent[id - Attr_STR_Percent] = val;
- }
- public SFloat GetFinalAttr(int attrId)
- {
- if (attrId <= Attr_GodPow)
- return GetAttr(attrId);
- else
- return GetAdditionalAttrPercent(attrId);
- }
- public void CloneAllAttributes(ActorData actorData)
- {
- for(int idx = Attr_STR;idx<=Attr_LUK;idx++)
- {
- SetBaseFirstAttr(idx, actorData.GetBaseFirstAttr(idx));
- }
- int length = 0;
- if (actorData.AdditionAttrs != null)
- {
- length = actorData.AdditionAttrs.Length;
- if (mAdditionalAttrs == null || mAdditionalAttrs.Length != length)
- mAdditionalAttrs = new SFloat[length];
- for (int idx = 0; idx < length; idx++)
- mAdditionalAttrs[idx] = actorData.AdditionAttrs[idx];
- }
- if (actorData.AttrPercents != null)
- {
- length = actorData.AttrPercents.Length;
- if (mAttrPercent == null || mAttrPercent.Length != length)
- mAttrPercent = new SFloat[length];
- for (int idx = 0; idx < length; idx++)
- mAttrPercent[idx] = actorData.AttrPercents[idx];
- }
- if(actorData.mExtendAttrPercentDic != null)
- {
- if (mExtendAttrPercentDic == null)
- mExtendAttrPercentDic = new Dictionary<int, SFloat>();
- else
- mExtendAttrPercentDic.Clear();
- foreach(var p in actorData.mExtendAttrPercentDic)
- {
- mExtendAttrPercentDic.Add(p.Key, p.Value);
- }
- }
- }
- public void CloneData(ActorData from)
- {
- //DebugHelper.LogError("----------------CloneData-------------");
- if(from.AdditionAttrs != null)
- {
- for(int idx = 0; idx < from.AdditionAttrs.Length;idx++)
- {
- mAdditionalAttrs[idx] = from.AdditionAttrs[idx];
- //DebugHelper.LogError("AdditionalAttr: " + mAdditionalAttrs[idx]);
- }
- }
- if(from.AttrPercents!=null)
- {
- for (int idx = 0; idx < from.AttrPercents.Length; idx++)
- {
- mAttrPercent[idx] = from.AttrPercents[idx];
- }
- }
- }
- public SFloat GetBaseSecondAttr(int attrId)
- {
- switch (attrId)
- {
- case Attr_Life:
- return BaseLife;
- case Attr_Sp:
- return BaseSp;
- case Attr_Attack:
- return BaseAttack;
- case Attr_MagicAttack:
- return BaseMagicAttack;
- case Attr_Defense:
- return BaseDefense;
- case Attr_MagicDefense:
- return BaseMagicDefense;
- case Attr_Hit:
- return BaseHit;
- case Attr_Crit:
- return BaseCrit;
- case Attr_Dodge:
- return BaseDodge;
- case Attr_Ten:
- return BaseTen;
- case Attr_AttackSpeed:
- return BaseAttackSpeed;
- }
- return 0;
- }
- //返回本地计算属性
- public SFloat GetLocalSecondAttr(int attrId)
- {
- switch (attrId)
- {
- case Attr_Life:
- return LocalLife;
- case Attr_Sp:
- return LocalSp;
- case Attr_Attack:
- return LocalAttack;
- case Attr_MagicAttack:
- return LocalMagicAttack;
- case Attr_Defense:
- return LocalDefense;
- case Attr_MagicDefense:
- return LocalMagicDefense;
- case Attr_Hit:
- return LocalHit;
- case Attr_Crit:
- return LocalCrit;
- case Attr_Dodge:
- return LocalDodge;
- case Attr_Ten:
- return LocalTen;
- case Attr_AttackSpeed:
- return LocalAttackSpeed;
- case Attr_CastAcceleration:
- return LocalCastAcceleration;
- }
- return 0;
- }
- //有服务器属性 返回服务器属性 没有返回本地属性
- public SFloat GetSecondAttr(int attrId)
- {
- switch(attrId)
- {
- case Attr_Life:
- return Life;
- case Attr_Sp:
- return Sp;
- case Attr_Attack:
- return Attack;
- case Attr_MagicAttack:
- return MagicAttack;
- case Attr_Defense:
- return Defense;
- case Attr_MagicDefense:
- return MagicDefense;
- case Attr_Hit:
- return Hit;
- case Attr_Crit:
- return Crit;
- case Attr_Dodge:
- return Dodge;
- case Attr_Ten:
- return Ten;
- case Attr_AttackSpeed:
- return AttackSpeed;
- case Attr_CastAcceleration:
- return CastAcceleration;
- case Attr_GodPow:
- return GodPower;
- }
- return 0;
- }
- public SFloat GetFirstAttr(int id)
- {
- switch (id)
- {
- case ActorData.Attr_STR:
- return STR;
- case ActorData.Attr_AGI:
- return AGI;
- case ActorData.Attr_INT:
- return INT;
- case ActorData.Attr_VIT:
- return VIT;
- case ActorData.Attr_DEX:
- return DEX;
- case ActorData.Attr_LUK:
- return LUK;
- }
- return 0;
- }
- public SFloat GetBaseFirstAttr(int id)
- {
- switch (id)
- {
- case ActorData.Attr_STR:
- return BaseSTR;
- case ActorData.Attr_AGI:
- return BaseAGI;
- case ActorData.Attr_INT:
- return BaseINT;
- case ActorData.Attr_VIT:
- return BaseVIT;
- case ActorData.Attr_DEX:
- return BaseDEX;
- case ActorData.Attr_LUK:
- return BaseLUK;
- }
- return 0;
- }
- public void SetBaseFirstAttr(int id, SFloat val)
- {
- if (id == ActorData.Attr_STR)
- {
- BaseSTR = (int)val;
- }
- else if (id == ActorData.Attr_AGI)
- {
- BaseAGI = (int)val;
- }
- else if (id == ActorData.Attr_INT)
- {
- BaseINT = (int)val;
- }
- else if (id == ActorData.Attr_VIT)
- {
- BaseVIT = (int)val;
- }
- else if (id == ActorData.Attr_DEX)
- {
- BaseDEX = (int)val;
- }
- else if (id == ActorData.Attr_LUK)
- {
- BaseLUK = (int)val;
- }
- }
- public void ResetBaseFirstAttr()
- {
- BaseSTR = 1;
- BaseAGI = 1;
- BaseINT = 1;
- BaseVIT = 1;
- BaseDEX = 1;
- BaseLUK = 1;
- }
- public SFloat GetAttr(int id)
- {
- if (id <= Attr_LUK) return GetFirstAttr(id);
- if (id <= Attr_GodPow) return GetSecondAttr(id);
- return 0;
- }
- Dictionary<int, float> oldAttrs = null;
- Dictionary<int, float> oldVals = null;
- Dictionary<int, float> newVals = null;
- Dictionary<int, float> deltaVals = null;
- public Dictionary<int, float> GetPreviewAttr(int[] vals)
- {
- if (oldVals == null)
- oldVals = new Dictionary<int, float>();
- else
- oldVals.Clear();
- if (newVals == null)
- newVals = new Dictionary<int, float>();
- else
- newVals.Clear();
- if (deltaVals == null)
- deltaVals = new Dictionary<int, float>();
- else
- deltaVals.Clear();
- if (oldAttrs == null)
- oldAttrs = new Dictionary<int, float>();
- else
- oldAttrs.Clear();
- for (int i = 0; i < vals.Length; ++i)
- {
- int attrId = i + ActorData.Attr_STR;
- oldAttrs.Add(attrId, GetBaseFirstAttr(attrId));
- }
- for(int idx = ActorData.Attr_Life; idx <= ActorData.Attr_CastAcceleration; idx++)
- {
- oldVals.Add(idx, GetLocalSecondAttr(idx));
- }
- for (int i = 0; i < vals.Length; ++i)
- {
- int attrId = i + ActorData.Attr_STR;
- SetBaseFirstAttr(attrId, vals[i]);
- }
-
- for (int idx = ActorData.Attr_Life; idx <= ActorData.Attr_CastAcceleration; idx++)
- {
- newVals.Add(idx, GetLocalSecondAttr(idx));
- }
- for (int i = 0; i < vals.Length; ++i)
- {
- int attrId = i + ActorData.Attr_STR;
- SetBaseFirstAttr(attrId, oldAttrs[attrId]);
- }
- //for (int idx = ActorData.Attr_Life; idx <= ActorData.Attr_AttackSpeed; idx++)
- //{
- // GetAttr(idx);
- //}
- for (int idx = ActorData.Attr_Life; idx <= ActorData.Attr_CastAcceleration; idx++)
- {
- float deltaVal = newVals[idx] - oldVals[idx];
- deltaVals.Add(idx, deltaVal);
- }
- return deltaVals;
- }
- public Dictionary<int, float> GetPreviewLvUpLocalAttr(int lv)
- {
- if (deltaVals == null)
- deltaVals = new Dictionary<int, float>();
- else
- deltaVals.Clear();
- int oldLv = Level;
- Level = lv;
- for (int i = Attr_Life; i <= Attr_Ten; ++i)
- {
- deltaVals[i] = GetLocalSecondAttr(i);
- }
- Level = oldLv;
- return deltaVals;
- }
-
- public Dictionary<int, float> GetPreviewLvUpAttr(int lv)
- {
- if (deltaVals == null)
- deltaVals = new Dictionary<int, float>();
- else
- deltaVals.Clear();
- int oldLv = Level;
- Level = lv;
- for (int i = Attr_Life; i <= Attr_Ten; ++i)
- {
- deltaVals[i] = GetSecondAttr(i);
- }
- Level = oldLv;
- return deltaVals;
- }
- protected SFloat CalcSecondAttr(int attrId)
- {
- if (attrId < Attr_Life || attrId > Attr_CastAcceleration) return 0;
- //DebugHelper.LogError("属性id:" + attrId + " baseVal:" + GetBaseSecondAttr(attrId) + " additionalVal:" + GetAdditionalAttr(attrId) +" additionalValPercent:"+ GetAdditionalAttrPercent(attrId + 30));
- return (GetBaseSecondAttr(attrId) + GetAdditionalAttr(attrId)) * (1 + GetAdditionalAttrPercent(attrId + 30));
- }
- private BuffParam[] mBuffListParam = null;
- public void SetBuffs(BuffParam[] buffs)
- {
- mBuffListParam = buffs;
- if (mBuffListParam == null) return;
- if (mTriggerBuffs == null)
- mTriggerBuffs = new List<TriggerBuffData>();
- else
- mTriggerBuffs.Clear();
- //Debug.Log("----------------SetBuffs---");
- for (int idx = 0; idx < mBuffListParam.Length; idx++)
- {
- BuffParam buff = mBuffListParam[idx];
- if (buff.buffId == 0 || buff.ratio == 0) continue;
- TriggerBuffData buffData = new TriggerBuffData(buff.buffId, buff.ratio * 0.01f, buff.cd * 0.01f, (BuffTriggerType)buff.type,(BuffTriggerCasterType)buff.casterType,"");
- mTriggerBuffs.Add(buffData);
- }
- }
- private BuffParam[] mDropBuffListParam = null;
- private List<TriggerBuffData> mDropBuffList = null;
- public List<TriggerBuffData> DropBuffList
- {
- get { return mDropBuffList; }
- }
- public void SetDropBuffs(BuffParam[] buffs)
- {
- mDropBuffListParam = buffs;
- if (mDropBuffListParam == null)
- {
- //Debug.Log("----------------清除dropbuff");
- mDropBuffList = null;
- return;
- }
- if (mDropBuffList == null)
- mDropBuffList = new List<TriggerBuffData>();
- else
- mDropBuffList.Clear();
- for(int idx =0; idx < mDropBuffListParam.Length; idx++)
- {
- BuffParam buff = mDropBuffListParam[idx];
- //Debug.Log(buff.buffId + " --------1------------ ");
- if (buff.buffId == 0 || buff.ratio == 0) continue;
- Debug.Log(buff.buffId+$" --------2-----{buff.type}--{buff.casterType}----- "+ buff.funStr);
- TriggerBuffData buffData = new TriggerBuffData(buff.buffId, buff.ratio * 0.01f, buff.cd * 0.01f, (BuffTriggerType)buff.type, (BuffTriggerCasterType)buff.casterType, buff.extendPara.ToString(), buff.funStr);
- mDropBuffList.Add(buffData);
- }
- }
- //目前 該mark 用在pve中 技能激活
- private GvGMark m_pMark = null;
- public GvGMark PveMark
- {
- get { return m_pMark; }
- }
- public void SetPveMark(GvGMark pMark)
- {
- m_pMark = pMark;
- }
- public void ResetFirstSkill()
- {
- if (mSkillMgr.Skills != null && mSkillMgr.Skills.Length > 0)
- {
- if (mCastSkillData == null)
- mCastSkillData = new CastSkillData();
- mCastSkillData.skillIcon = mSkillMgr.Skills[0].SkillDataInfo.skillIcon;
- mCastSkillData.skillId = mSkillMgr.Skills[0].Id;
- mCastSkillData.cdTime = 0;
- mCastSkillData.actorId = ID;
- mCastSkillData.IsForbidden = true;
- mCastSkillData.IsEnhance = false;
- }
- else if(mSkillMgr.RandomSkills!=null && mSkillMgr.RandomSkills.Count > 0)
- {
- if (mCastSkillData == null)
- mCastSkillData = new CastSkillData();
- BaseSkill skill = mSkillMgr.GetRandomSkill(SkillType.Attack1);
- mCastSkillData.skillIcon = skill.SkillDataInfo.skillIcon;
- mCastSkillData.skillId = skill.Id;
- mCastSkillData.cdTime = 0;
- mCastSkillData.actorId = ID;
- mCastSkillData.IsForbidden = true;
- mCastSkillData.IsEnhance = false;
- }
- }
- public void SetAllAttributes(int[] baseFirstAttrs, float[] additionalAttrs,float[] attrPercentList, Dictionary<int, float> extendAttrPercentDic)
- {
- if(baseFirstAttrs!=null)
- {
- for(int idx = Attr_STR;idx<=Attr_LUK;idx++)
- {
- SetBaseFirstAttr(idx, baseFirstAttrs[idx - 1]);
- }
- }
- if(additionalAttrs!=null)
- {
- for (int idx = 0; idx < additionalAttrs.Length; idx++)
- mAdditionalAttrs[idx] = additionalAttrs[idx];
- }
- if(attrPercentList != null)
- {
- for (int idx = 0; idx < attrPercentList.Length; idx++)
- mAttrPercent[idx] = attrPercentList[idx];
- }
- if(extendAttrPercentDic!=null)
- {
- if (mExtendAttrPercentDic == null)
- mExtendAttrPercentDic = new Dictionary<int, SFloat>();
- else
- mExtendAttrPercentDic.Clear();
- foreach(var p in extendAttrPercentDic)
- {
- mExtendAttrPercentDic.Add(p.Key, p.Value);
- }
- }
- }
- public void SetPet(ActorData pet)
- {
- if (mPetData == pet) return;
- mPetData = pet;
- if (mPetData != null)
- mPetId = mPetData.ID;
- else
- mPetId = 0;
- }
- #region PUBLIC_VIRTUAL_METHODS
- public virtual void SetLevel(int lv)
- {
- mLevel = lv;
- }
- public virtual void Dispose()
- {
- if (bDisposed)
- return;
- /*if (mAvatarData != null)
- {
- mAvatarData.Dispose();
- mAvatarData = null;
- }*/
-
- if(mSkillMgr != null)
- {
- mSkillMgr.Dispose();
- mSkillMgr = null;
- }
- bDisposed = true;
- }
- #endregion
- #region static_public_methods
- public static ActorData CloneActorData(ActorData actorData)
- {
- SkillParam[] usedSkills = null;
- if (actorData.mUsedSkills != null)
- {
- int length = actorData.mUsedSkills.Length;
- usedSkills = new SkillParam[length];
- Array.Copy(actorData.mUsedSkills, usedSkills, length);
- }
- if (actorData is HeroActorData)
- {
- HeroActorData heroActorData = actorData as HeroActorData;
- HeroActorData newHeroActorData = ActorData.CreatePlayerActor(actorData.ID, actorData.BaseId, actorData.Level, usedSkills) as HeroActorData;
- newHeroActorData.IsMainRole = heroActorData.IsMainRole;
- newHeroActorData.StrengthLevel = heroActorData.StrengthLevel;
-
- newHeroActorData.SetProfessionId(heroActorData.ProfessionId);
- newHeroActorData.SetFashionData(heroActorData.FashionData);
- newHeroActorData.CloneAllAttributes(actorData);
- newHeroActorData.PetId = heroActorData.PetId;
- newHeroActorData.HeadFrameId = heroActorData.HeadFrameId;
- return newHeroActorData;
- }
- else if (actorData is FellowActorData)
- {
- FellowActorData fellowActorData = actorData as FellowActorData;
- FellowActorData newFellowActorData = CreateFellowActor(actorData.ID, actorData.BaseId, actorData.Level, usedSkills) as FellowActorData;
- newFellowActorData.IsMainRole = fellowActorData.IsMainRole;
- newFellowActorData.StrengthLevel = fellowActorData.StrengthLevel;
- newFellowActorData.CloneAllAttributes(actorData);
- newFellowActorData.PetId = fellowActorData.PetId;
- return newFellowActorData;
- }
- else if (actorData is PetActorData)
- {
- PetActorData petActorData = actorData as PetActorData;
- PetActorData newPetActorData = CreatePetActor(actorData.ID, actorData.BaseId, actorData.Level, usedSkills) as PetActorData;
- newPetActorData.SetStep(petActorData.Step);
- return newPetActorData;
- }
- else if (actorData is NpcActorData)
- {
- NpcActorData newNpcActorData = CreateNpcPlayerActor(actorData.ID, actorData.BaseId, actorData.Level) as NpcActorData;
- newNpcActorData.IsBoss = actorData.IsBoss;
- newNpcActorData.PositionValue = actorData.PositionValue;
- newNpcActorData.IgnoreLife = actorData.IgnoreLife;
- return newNpcActorData;
- }
- return null;
- }
- public static ActorData CreateActorFromJson(JSONObject json)
- {
- long uid = 0;
- int baseId = 0, level = 0, strengthLevel = 0, jobId = 0;
- long petId = 0;
- bool isMainRole = false, isHero = false, isFellow = false, isBoss = false, isNpc = false,isPet = false;
- bool bIsTransferred = false;
- int pos = 0;
- int advanceLevel = 0;
- int headFrameId = 0;
- bool ignoreLife = false;
- if (json.HasField("Base"))
- {
- JSONObject baseJson = json.GetField("Base");
- uid = baseJson.GetField("id").l;
- baseId = (int)baseJson.GetField("bId").n;
- level = (int)baseJson.GetField("lv").n;
- strengthLevel = (int)baseJson.GetField("strengthLevel").n;
- isMainRole = baseJson.GetField("m").b;
- isHero = baseJson.GetField("h").b;
- isFellow = baseJson.GetField("f").b;
- isBoss = baseJson.GetField("b").b;
- isNpc = baseJson.GetField("n").b;
- isPet = baseJson.GetField("p").b;
- petId = baseJson.GetField("petId").l;
- if (baseJson.HasField("jobId"))
- {
- jobId = (int)baseJson.GetField("jobId").n;
- }
- if(baseJson.HasField("advanceLevel"))
- {
- advanceLevel = (int)baseJson.GetField("advanceLevel").n;
- }
- if(baseJson.HasField("frameId"))
- {
- headFrameId = (int)baseJson.GetField("frameId").n;
- }
- pos = (int)baseJson.GetField("pos").n;
- JSONObject fieldObj = baseJson.GetField("ignoreLife");
- if (fieldObj != null)
- {
- ignoreLife = fieldObj.b;
- }
- if (baseJson.HasField("IsTransferred"))
- {
- bIsTransferred = baseJson.GetField("IsTransferred").b;
- }
- }
- int[] baseFirstAttrs = new int[6];
- float[] additionalAttrs = null;
- float[] sencondAttrs = null;
- float[] attrPercent = null;
- Dictionary<int, float> extendAttrPercentDic = null;
- if (json.HasField("Attrs"))
- {
- JSONObject attrsJson = json.GetField("Attrs");
- if(attrsJson.HasField("baseFirstAttr"))
- {
- JSONObject baseFirstAttrJson = attrsJson.GetField("baseFirstAttr");
- additionalAttrs = new float[baseFirstAttrJson.Count];
- for (int idx = 0; idx < baseFirstAttrJson.Count; idx++)
- {
- baseFirstAttrs[idx] = (int)baseFirstAttrJson[idx].n;
- }
- }
- if (attrsJson.HasField("serverSecondAttr"))
- {
- JSONObject baseFirstAttrJson = attrsJson.GetField("serverSecondAttr");
- sencondAttrs = new float[baseFirstAttrJson.Count];
- for (int idx = 0; idx < baseFirstAttrJson.Count; idx++)
- {
- sencondAttrs[idx] = baseFirstAttrJson[idx].f;
- }
- }
- if (attrsJson.HasField("additionalAttr"))
- {
- JSONObject additionalAttrJson = attrsJson.GetField("additionalAttr");
- additionalAttrs = new float[additionalAttrJson.Count];
- for (int idx = 0; idx < additionalAttrJson.Count; idx++)
- {
- additionalAttrs[idx] = additionalAttrJson[idx].f;
- }
- }
- if (attrsJson.HasField("attrPercent"))
- {
- JSONObject attrPercentJson = attrsJson.GetField("attrPercent");
- attrPercent = new float[attrPercentJson.Count];
- for (int idx = 0; idx < attrPercentJson.Count; idx++)
- {
- attrPercent[idx] = attrPercentJson[idx].f;
- }
- }
- if (attrsJson.HasField("extendAttr"))
- {
- JSONObject extendAttrJson = attrsJson.GetField("extendAttr");
- extendAttrPercentDic = new Dictionary<int, float>();
- for (int idx = 0; idx < extendAttrJson.Count; idx++)
- {
- JSONObject temp = extendAttrJson[idx];
- extendAttrPercentDic.Add((int)temp[0].n, temp[1].f);
- }
- }
- }
- SkillParam[] usedSkills = null;
- if (json.HasField("Skills"))
- {
- JSONObject skillsJson = json.GetField("Skills");
- if (!skillsJson.IsNull)
- {
- usedSkills = new SkillParam[skillsJson.Count];
- for (int idx = 0; idx < skillsJson.Count; idx++)
- {
- usedSkills[idx] = new SkillParam(skillsJson[idx]);
- }
- }
- }
- BuffParam[] usedBuffs = null;
- if (json.HasField("Buffs"))
- {
- JSONObject buffsJson = json.GetField("Buffs");
- if (!buffsJson.IsNull)
- {
- usedBuffs = new BuffParam[buffsJson.Count];
- for (int idx = 0; idx < buffsJson.Count; idx++)
- {
- usedBuffs[idx] = new BuffParam(buffsJson[idx]);
- }
- }
- }
- GvGMark pMark = null;
- if (json.HasField("Mark"))
- {
- JSONObject buffsJson = json.GetField("Mark");
- if (null != buffsJson && buffsJson.Count > 0)
- {
- if(null != buffsJson)
- {
- pMark = new GvGMark(buffsJson[0]);
- }
- }
- }
-
- FashionParam fashionParam;
- if (json.HasField("Fashion"))
- {
- JSONObject fashionJson = json.GetField("Fashion");
- fashionParam = new FashionParam(fashionJson);
- }
- else
- {
- fashionParam = default(FashionParam);
- }
- if (isHero)
- {
- HeroActorData hero = ActorData.CreatePlayerActor(uid, baseId, level, usedSkills) as HeroActorData;
- hero.IsMainRole = isMainRole;
- hero.StrengthLevel = strengthLevel;
- hero.SetProfessionId(jobId);
- hero.SetFashionData(fashionParam);
- hero.SetAllAttributes(baseFirstAttrs,additionalAttrs, attrPercent, extendAttrPercentDic);
- hero.PetId = petId;
- hero.HeadFrameId = headFrameId;
- hero.SetBuffs(usedBuffs);
- for (int idx = 0; idx < sencondAttrs.Length; idx++)
- hero.mServerAttrs[idx] = sencondAttrs[idx];
- if(null != pMark)
- {
- hero.SetPveMark(pMark);
- }
- return hero;
- }
- else if (isFellow)
- {
- FellowActorData fellow = CreateFellowActor(uid, baseId, level, usedSkills) as FellowActorData;
- fellow.IsMainRole = isMainRole;
- fellow.StrengthLevel = strengthLevel;
- fellow.SetAllAttributes(baseFirstAttrs,additionalAttrs, attrPercent, extendAttrPercentDic);
- fellow.IsTransferred = bIsTransferred;
- fellow.PetId = petId;
- fellow.SetBuffs(usedBuffs);
- for (int idx = 0; idx < sencondAttrs.Length; idx++)
- fellow.mServerAttrs[idx] = sencondAttrs[idx];
- if (null != pMark)
- {
- fellow.SetPveMark(pMark);
- }
- return fellow;
- }
- else if(isPet)
- {
- PetActorData pet = CreatePetActor(uid, baseId, level, usedSkills) as PetActorData;
- pet.SetStep(advanceLevel);
- for (int idx = 0; idx < sencondAttrs.Length; idx++)
- pet.mServerAttrs[idx] = sencondAttrs[idx];
- return pet;
- }
- else if (isBoss || isNpc)
- {
- if (BattleMgr.Instance.Battle != null)
- {
- Fighter f = BattleMgr.Instance.Battle.FighterMgr.GetFighterByID(uid, eTeamType.Enemy);
- if (f != null)
- {
- f.Actor.SetLevel(level);
- return f.Actor;
- }
- }
- ActorData npc = CreateNpcPlayerActor(uid, baseId, level);
- npc.IsBoss = isBoss;
- npc.PositionValue = pos;
- npc.IgnoreLife = ignoreLife;
- return npc;
- }
- return null;
- }
- public static ActorData CreateNpcPlayerActor(long uid,int baseId, int level)
- {
- ActorData actor = new NpcActorData(baseId);
- actor.Initialize(baseId, level,null);
- actor.ID = uid;
- return actor;
- }
- public static ActorData CreateNpcPlayerActor(int mapId,int levelId,int pos,int baseId, int level)
- {
- ActorData actor = new NpcActorData(baseId);
- actor.Initialize(baseId, level, null);
- actor.ID = CommonUtil.CalcNpcUniqueId(mapId,levelId,pos,baseId);
- return actor;
- }
- public static ActorData CreateFellowActor(ActorParam actorParam)
- {
- if (actorParam == null) return null;
- if (actorParam.uid == 0 || actorParam.baseId == 0) return null;
- FellowActorData hero = CreateFellowActor(actorParam.uid, actorParam.baseId, actorParam.level, actorParam.skills) as FellowActorData;
- hero.IsMainRole = false;
- hero.StrengthLevel = actorParam.strengthLevel;
- hero.SetBuffs(actorParam.buffs);
- return hero;
- }
- public static ActorData CreateFellowActor(int id)
- {
- return CreateFellowActor(0,id, 1,null);
- }
- public static ActorData CreateFellowActor(long uid, int baseId,int level, SkillParam[] usedSkills)
- {
- ActorData actor = new FellowActorData(baseId);
- actor.Initialize(baseId, level,usedSkills);
- actor.ID = uid > 0 ? uid:baseId;
- return actor;
- }
- public static ActorData CreatePetActor(ActorParam actorParam)
- {
- if (actorParam == null) return null;
- if (actorParam.uid == 0 || actorParam.baseId == 0) return null;
- PetActorData pet = CreatePetActor(actorParam.uid, actorParam.baseId, actorParam.level, actorParam.skills) as PetActorData;
- return pet;
- }
- public static ActorData CreatePetActor(long uid, int baseId, int level, SkillParam[] usedSkills)
- {
- ActorData actor = new PetActorData(baseId);
- actor.Initialize(baseId, level, usedSkills);
- actor.ID = uid > 0 ? uid : baseId;
- return actor;
- }
- public static ActorData CreatePetBossActor(long uid, int baseId, int level)
- {
- ActorData actor = new PetBossActorData(baseId);
- actor.Initialize(baseId, level, null);
- actor.ID = uid > 0 ? uid : baseId;
- return actor;
- }
- public static ActorData CreatePlayerActor(LuaTable tblParam)
- {
- if (tblParam == null) return null;
- ActorParam actorParam = new ActorParam();
- if (tblParam["uid"] != null)
- int.TryParse(tblParam["uid"].ToString(), out actorParam.uid);
- if (tblParam["id"] != null)
- int.TryParse(tblParam["id"].ToString(), out actorParam.baseId);
- if (tblParam["lv"] != null)
- int.TryParse(tblParam["lv"].ToString(), out actorParam.level);
- if (tblParam["jobId"] != null)
- int.TryParse(tblParam["jobId"].ToString(), out actorParam.jobId);
- if (tblParam["mainRole"] != null)
- bool.TryParse(tblParam["mainRole"].ToString(), out actorParam.isMainRole);
- List<SkillParam> skillParams = null;
- if (tblParam["skills"] != null)
- {
- LuaTable skills = (LuaTable)tblParam["skills"];
- skillParams = ParseSkillParam(skills);
- actorParam.skills = skillParams != null ? skillParams.ToArray() : null;
- }
- if (tblParam["buffs"] != null)
- {
- List<BuffParam> buffs = ParseBuffParam((LuaTable)tblParam["buffs"]);
- actorParam.buffs = buffs != null ? buffs.ToArray() : null;
- }
- actorParam.strengthLevel = 7;
- return CreatePlayerActor(actorParam);
- }
- public static ActorData CreatePlayerActor(ActorParam actorParam)
- {
- if (actorParam == null) return null;
- if (actorParam.uid == 0 || actorParam.baseId == 0) return null;
- HeroActorData hero = ActorData.CreatePlayerActor(actorParam.uid, actorParam.baseId, actorParam.level, actorParam.skills) as HeroActorData;
- hero.IsMainRole = actorParam.isMainRole;
- hero.StrengthLevel = actorParam.strengthLevel;
- hero.HeadFrameId = actorParam.headFrameId;
- hero.SetProfessionId(actorParam.jobId);
- hero.SetFashionData(actorParam.fashion);
- hero.SetBuffs(actorParam.buffs);
- return hero;
- }
- public static ActorData CreatePlayerActor(int id)
- {
- return CreatePlayerActor(0, id, 1, null);
- }
- public static ActorData CreatePlayerActor(long uid, int baseId, int level, SkillParam[] usedSkills)
- {
- HeroActorData actor = new HeroActorData(baseId);
- actor.Initialize(baseId, level, usedSkills);
- actor.ID = uid > 0 ? uid : baseId;
- return actor;
- }
- public static List<SkillParam> ParseSkillParam(LuaTable param)
- {
- if (param == null) return null;
- List<SkillParam> skillParams = new List<SkillParam>();
- for (int sdx = 1; sdx <= param.Length; sdx++)
- {
- LuaTable skill = (LuaTable)param[sdx];
- int skillId = 0, skillLv = 0,rate = 100;
- if (skill["skillId"] != null)
- int.TryParse(skill["skillId"].ToString(), out skillId);
- if (skill["lv"] != null)
- int.TryParse(skill["lv"].ToString(), out skillLv);
- if (skill["rate"] != null)
- int.TryParse(skill["rate"].ToString(), out rate);
- if (skillId == 0 || skillLv == 0) continue;
- SkillParam sp = new SkillParam(skillId, skillLv,rate);
- skillParams.Add(sp);
- }
- return skillParams;
- }
-
- public static List<BuffParam> ParseBuffParam(LuaTable param)
- {
- if (param == null) return null;
- List<BuffParam> buffs = new List<BuffParam>();
- for (int idx = 1; idx <= param.Length; idx++)
- {
- LuaTable buff = (LuaTable)param[idx];
- int buffId = 0, ratio = 0, cd = 0;
- int type = 0, casterType = 0;
- if (buff.Length >= 1)
- {
- int.TryParse(buff[1].ToString(), out buffId);
- }
- if (buff.Length >= 2)
- {
- int.TryParse(buff[2].ToString(), out ratio);
- }
- if (buff.Length >= 3)
- {
- int.TryParse(buff[3].ToString(), out cd);
- }
- if (buff.Length >= 4)
- {
- int temp = 0;
- int.TryParse(buff[4].ToString(), out temp);
- type = temp;
- }
- if(buff.Length >= 5)
- {
- int temp = 0;
- int.TryParse(buff[5].ToString(), out temp);
- casterType = temp;
- }
- if (buffId == 0 || ratio == 0) continue;
- BuffParam buffData = new BuffParam(buffId, ratio, cd, type);
- buffs.Add(buffData);
- }
- return buffs;
- }
- #endregion
- #region json_methods
- public virtual JSONObject ToJson()
- {
- JSONObject json = new JSONObject();
- json.AddField("Base", BaseToJson());
- json.AddField("Attrs", AttrToJson());
- json.AddField("Skills", SkillToJson());
- json.AddField("Buffs", BuffToJson());
- json.AddField("Mark", MarkToJson());
- json.AddField("Fashion", FashionToJson());
- return json;
- }
- protected virtual JSONObject BaseToJson()
- {
- JSONObject json = new JSONObject();
- json.AddField("id", ID);
- json.AddField("bId", BaseId);
- json.AddField("lv", Level);
- json.AddField("m", IsMainRole);
- json.AddField("h", IsHero);
- json.AddField("f", IsFellow);
- json.AddField("b", IsBoss);
- json.AddField("n", IsNpc);
- json.AddField("p", IsPet);
- json.AddField("frameId",HeadFrameId);
- json.AddField("strengthLevel", StrengthLevel);
- json.AddField("petId", PetData != null ? PetData.ID : 0);
- json.AddField("pos", PositionValue);
- json.AddField("IsTransferred", IsTransferred);
- if (IgnoreLife) json.AddField("ignoreLife", IgnoreLife);
- return json;
- }
- protected virtual JSONObject AttrToJson()
- {
- JSONObject json = new JSONObject();
- JSONObject baseFirstAttrJson = new JSONObject();
- for(int idx = ActorData.Attr_STR; idx <= ActorData.Attr_LUK;idx++)
- {
- baseFirstAttrJson.Add(GetBaseFirstAttr(idx));
- }
- json.AddField("baseFirstAttr", baseFirstAttrJson);
- if (mServerAttrs != null)
- {
- JSONObject serverSecondAttrJson = new JSONObject();
- for (int idx = 0; idx < mServerAttrs.Length; idx++)
- {
- //Debug.Log("Save idx "+ idx.ToString() +" "+ mServerAttrs[idx].ToString());
- serverSecondAttrJson.Add(mServerAttrs[idx]);
- }
- json.AddField("serverSecondAttr", serverSecondAttrJson);
- }
- if (mAdditionalAttrs != null)
- {
- JSONObject additionalAttrJson = new JSONObject();
- for (int idx = 0; idx < s_AttrNum; idx++)
- {
- additionalAttrJson.Add(mAdditionalAttrs[idx]);
- }
- json.AddField("additionalAttr", additionalAttrJson);
- }
- if (mAttrPercent != null)
- {
- JSONObject attrPercentJson = new JSONObject();
- for (int idx = 0; idx < s_AttrNum; idx++)
- {
- attrPercentJson.Add(mAttrPercent[idx]);
- }
- json.AddField("attrPercent", attrPercentJson);
- }
- if (mExtendAttrPercentDic != null)
- {
- JSONObject extendAttrJson = new JSONObject();
- foreach (var p in mExtendAttrPercentDic)
- {
- JSONObject temp = new JSONObject();
- temp.Add(p.Key);
- temp.Add(p.Value);
- extendAttrJson.Add(temp);
- }
- json.AddField("extendAttr", extendAttrJson);
- }
- return json;
- }
- protected virtual JSONObject SkillToJson()
- {
- JSONObject json = new JSONObject();
- if(SkillMgr!=null)
- {
- if(SkillMgr.Skills != null)
- {
- for (int idx = 0; idx < SkillMgr.Skills.Length; idx++)
- {
- json.Add(SkillMgr.Skills[idx].ToJson());
- }
- }
-
- if(SkillMgr.RandomSkills != null)
- {
- for(int idx = 0; idx < SkillMgr.RandomSkills.Count;idx++)
- {
- json.Add(SkillMgr.RandomSkills[idx].ToJson());
- }
- }
- if(SkillMgr.PassiveSkills != null)
- {
- for(int idx =0; idx < SkillMgr.PassiveSkills.Count;idx++)
- {
- json.Add(SkillMgr.PassiveSkills[idx].ToJson());
- }
- }
- }
- return json;
- }
- protected virtual JSONObject MarkToJson()
- {
- JSONObject json = new JSONObject();
- if (PveMark != null)
- {
- json.Add(PveMark.ToJson());
- }
- return json;
- }
- protected virtual JSONObject BuffToJson()
- {
- JSONObject json = new JSONObject();
- if (mBuffListParam != null)
- {
- for (int idx = 0; idx < mBuffListParam.Length; idx++)
- {
- json.Add(mBuffListParam[idx].ToJson());
- }
- }
- return json;
- }
- protected virtual JSONObject FashionToJson()
- {
- JSONObject json = new JSONObject();
- return json;
- }
- #endregion
- }
|