ActorData.cs 61 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956
  1. using UnityEngine;
  2. using System.Collections;
  3. using System;
  4. using System.Collections.Generic;
  5. using LuaInterface;
  6. public enum ActorType
  7. {
  8. None = 0,
  9. Hero = 1,
  10. Fellow = 2,
  11. Monster = 3,
  12. Pet = 4
  13. }
  14. public class ActorData
  15. {
  16. #region ATTR_TYPE
  17. public const int Attr_STR = 1; //力量 [一级]
  18. public const int Attr_AGI = 2; //敏捷 [一级]
  19. public const int Attr_INT = 3; //智力 [一级]
  20. public const int Attr_VIT = 4; //体质 [一级]
  21. public const int Attr_DEX = 5; //灵巧 [一级]
  22. public const int Attr_LUK = 6; //幸运 [一级]
  23. public const int Attr_Life = 7; // 生命 [二级]
  24. public const int Attr_Sp = 8; //蓝量 [二级]
  25. public const int Attr_Attack = 9; //物攻 [二级]
  26. public const int Attr_MagicAttack = 10; //魔攻 [二级]
  27. public const int Attr_Defense = 11; //物防 [二级]
  28. public const int Attr_MagicDefense = 12; //魔防 [二级]
  29. public const int Attr_Hit = 13; //命中 [二级]
  30. public const int Attr_Dodge = 14; //闪避 [二级]
  31. public const int Attr_Crit = 15; //暴击 [二级]
  32. public const int Attr_Ten = 16; //韧性 [二级]
  33. public const int Attr_AttackSpeed = 17; //攻速
  34. public const int Attr_CastAcceleration = 18; //施法加速
  35. public const int Attr_MaxHp = 19;
  36. public const int Attr_MaxSp = 20;
  37. public const int Attr_GodPow = 21; //神威
  38. public const int Attr_STR_Percent = 31;
  39. public const int Attr_AGI_Percent = 32;
  40. public const int Attr_INT_Percent = 33;
  41. public const int Attr_VIT_Percent = 34;
  42. public const int Attr_DEX_Percent = 35;
  43. public const int Attr_LUK_Percent = 36;
  44. public const int Attr_Life_Percent = 37;
  45. public const int Attr_Sp_Percent = 38;
  46. public const int Attr_Attack_Percent = 39;
  47. public const int Attr_MagicAttack_Percent = 40;
  48. public const int Attr_Defense_Percent = 41;
  49. public const int Attr_MagicDefense_Percent = 42;
  50. public const int Attr_Hit_Percent = 43;
  51. public const int Attr_Dodge_Percent = 44;
  52. public const int Attr_Crit_Percent = 45;
  53. public const int Attr_Ten_Percent = 46;
  54. public const int Attr_AttackSpeed_Percent = 47;
  55. public const int Attr_CastAcceleration_Percent = 48;
  56. public const int Attr_MaxHp_Percent = 49;
  57. public const int Attr_MaxSp_Percent = 50;
  58. public const int Attr_RealHurt_Percent = 51;
  59. public const int Attr_Nature_None_Damage_Percent = 71; //对无属性目标伤害加成/减免百分比
  60. public const int Attr_Nature_Water_Damage_Percent = 72; //对水属性目标的伤害加成/减免百分比
  61. public const int Attr_Nature_Ground_Damage_Percent = 73; //对地属性目标的伤害加成/减免百分比
  62. public const int Attr_Nature_Fire_Damage_Percent = 74; //对火属性目标的伤害加成/减免百分比
  63. public const int Attr_Nature_Wind_Damage_Percent = 75; //对风属性目标的伤害加成/减免百分比
  64. public const int Attr_Nature_Saint_Damage_Percent = 76; //对圣属性目标的伤害加成/减免百分比
  65. public const int Attr_Nature_Dark_Damage_Percent = 77; //对暗属性目标的伤害加成/减免百分比
  66. public const int Attr_Nature_Read_Damage_Percent = 78; //对念属性目标的伤害加成/减免百分比
  67. public const int Attr_Nature_None_AntiDamage_Percent = 81; //抗无属性伤害加成/减免百分比
  68. public const int Attr_Nature_Water_AntiDamage_Percent = 82; //抗水属性伤害加成/减免百分比
  69. public const int Attr_Nature_Ground_AntiDamage_Percent = 83; //抗地属性伤害加成/减免百分比
  70. public const int Attr_Nature_Fire_AntiDamage_Percent = 84; //抗火属性伤害加成/减免百分比
  71. public const int Attr_Nature_Wind_AntiDamage_Percent = 85; //抗风属性伤害加成/减免百分比
  72. public const int Attr_Nature_Saint_AntiDamage_Percent = 86; //抗圣属性伤害加成/减免百分比
  73. public const int Attr_Nature_Dark_AntiDamage_Percent = 87; //抗暗属性伤害加成/减免百分比
  74. public const int Attr_Nature_Read_AntiDamage_Percent = 88; //抗念属性伤害加成/减免百分比
  75. public const int Attr_Penetration_Percent = 91; //忽视物防
  76. public const int Attr_Magic_Penetration_Percent = 92; //忽视魔防
  77. public const int Attr_PhysicDamage_Percent = 93; //物伤加成/减免百分比
  78. public const int Attr_MagicDamage_Percent = 94; //魔法伤害加成/减免百分比
  79. public const int Attr_Anti_PhysicDamage_Percent = 95; //抗物伤加成
  80. public const int Attr_Anti_MagicDamage_Percent = 96; //抗魔法加成
  81. public const int Attr_CritDamage_Percent = 97; //暴击伤害百分比
  82. public const int Attr_PhysicDamageReflect_Percent = 98; //物理伤害反射百分比
  83. public const int Attr_MagicDamageReflect_Percent = 99; //魔法伤害反射百分比
  84. public const int Attr_FixedSingTime_Percent = 100; //固定吟唱加成/减免百分比
  85. public const int Attr_VariableSingTime_Percent = 101; //可变吟唱加成/减免百分比
  86. public const int s_FirstAttrNum = 6;
  87. public const int s_SecondAttrNum = 10; //二级属性的个数
  88. public const int s_AttrNum = 30;
  89. public const int s_AllAttrNum = 101;
  90. #endregion
  91. #region BASIC_PROPERTIES
  92. protected SFloat[] mAdditionalAttrs = null;
  93. protected SFloat[] mAttrPercent = null;
  94. protected SFloat[] mServerAttrs = null;//服务器计算的2级属性 只有伙伴 主角 宠物有 NPC还走本地二级属性
  95. protected Dictionary<int, SFloat> mExtendAttrPercentDic = null;
  96. protected List<TriggerBuffData> mTriggerBuffs = null;
  97. public List<TriggerBuffData> TriggerBuffs
  98. {
  99. get { return mTriggerBuffs; }
  100. }
  101. public SFloat[] AdditionAttrs
  102. {
  103. get { return mAdditionalAttrs; }
  104. }
  105. public SFloat[] AttrPercents
  106. {
  107. get { return mAttrPercent; }
  108. }
  109. public int IActorType
  110. {
  111. get { return (int)mActorType; }
  112. }
  113. public int JobType
  114. {
  115. get { return (int)Profession; }
  116. }
  117. protected ActorType mActorType = ActorType.None;
  118. public ActorType AType
  119. {
  120. get { return mActorType; }
  121. }
  122. public bool valid = false;
  123. private int mBaseId = 0;
  124. public int BaseId
  125. {
  126. get { return mBaseId; }
  127. set { mBaseId = value; }
  128. }
  129. private long mId = 0;
  130. public long ID
  131. {
  132. get { return mId; }
  133. set { mId = value; }
  134. }
  135. private bool mIsRecordActor = false;
  136. public bool IsRecordActor
  137. {
  138. get { return mIsRecordActor; }
  139. set { mIsRecordActor = value; }
  140. }
  141. private CastSkillData mCastSkillData;
  142. protected AvatarData mAvatarData;
  143. protected SkillManager mSkillMgr;
  144. public AvatarData AvatarData { get { return mAvatarData; } }
  145. public SkillManager SkillMgr { get { return mSkillMgr; } }
  146. //站位
  147. public Position_Type PositionRule
  148. {
  149. get
  150. {
  151. if (PositionValue <= 3)
  152. return Position_Type.Position_Front;
  153. else
  154. return Position_Type.Position_Back;
  155. }
  156. }
  157. public Vector3 Rot { get { return mAvatarData.rot; } }
  158. public Vector3 Offset { get { return mAvatarData.offset; } }
  159. public bool IsFront { get { return PositionRule == Position_Type.Position_Front; } }
  160. public bool IsBack { get { return PositionRule == Position_Type.Position_Back; } }
  161. public virtual int AvatarID { get { return 0; } }
  162. public virtual string Name { get { return ""; } set { } }
  163. public virtual string Description { get { return ""; } }
  164. public virtual ProfessionType Profession { get { return ProfessionType.Pro_Type_0; } }
  165. public virtual int JobStage { get { return 0; } }
  166. public virtual int JobBranch { get { return 0; } }
  167. public virtual int PositionValue { get { return 0; } set { } }
  168. public virtual bool IgnoreLife { get { return false; } set { } }
  169. public virtual ulong FighterInstanceId { get; set; }
  170. public virtual bool IsHero { get { return false; } }
  171. public virtual bool IsFellow { get { return false; } }
  172. public virtual bool IsNpc { get { return false; } }
  173. public virtual bool IsPet { get { return false; } }
  174. public virtual bool IsBoss { get; set; }
  175. public virtual string HeadIcon { get; set;}
  176. public virtual int HeadFrameId { get; set;}
  177. public virtual string BattleBigIcon { get; }
  178. public virtual int NatureId { get { return 0; } }
  179. public virtual bool ShowHpBar { get { return false; } }
  180. public virtual string AnimCtrlName
  181. {
  182. get { return ""; }
  183. }
  184. public virtual string ShowAnimCtrlName
  185. {
  186. get { return ""; }
  187. }
  188. //狂暴id
  189. public int RageId { get; set; }
  190. public bool IsMainRole { get; set; }
  191. public virtual NpcBaseData NpcData { get { return null; } }
  192. public bool IsHaving = false;
  193. public bool IsShowBoss { get; set; }
  194. public virtual int Gender { get; set; }
  195. protected int mLevel;
  196. public int Level
  197. {
  198. get { return mLevel; }
  199. set { mLevel = value; }
  200. }
  201. protected int mStrengthLevel;
  202. public int StrengthLevel
  203. {
  204. get { return mStrengthLevel; }
  205. set { mStrengthLevel = value; }
  206. }
  207. //UI 显示的等级 1.推图BOOSlv = 关卡 2.爬塔lv = 爬塔层数
  208. protected int mShowLevel;
  209. public int ShowLevel
  210. {
  211. get { return mShowLevel; }
  212. set { mShowLevel = value; }
  213. }
  214. private SBool bInvincible = false;
  215. public SBool Invincible
  216. {
  217. get { return bInvincible; }
  218. set { bInvincible = value; }
  219. }
  220. protected Dictionary<int, SFloat> mEquipTotalAttrs;
  221. public Dictionary<int, SFloat> MEquipTotalAttrs
  222. {
  223. get { return mEquipTotalAttrs; }
  224. set { mEquipTotalAttrs = value; }
  225. }
  226. private bool bDisposed = false;
  227. public bool IsDisposed
  228. {
  229. get { return bDisposed; }
  230. }
  231. public virtual string SkillFrameEventName { get { return ""; } }
  232. public virtual string ProfessionIcon { get { return ""; } }
  233. public virtual CastSkillData CastSkillParam
  234. {
  235. get { return mCastSkillData; }
  236. }
  237. public bool IsTransferred { get; set; } //是否转职
  238. public string IdleSound { get { return mAvatarData != null ? mAvatarData.IdleSound : ""; } }
  239. public string RunSound { get { return mAvatarData != null ? mAvatarData.RunSound : ""; } }
  240. public string DieSound { get { return mAvatarData != null ? mAvatarData.DieSound : ""; } }
  241. public string HitSound { get { return mAvatarData != null ? mAvatarData.HitSound : ""; } }
  242. public string PetIcon { get { return mPetData != null ? mPetData.HeadIcon : ""; } }
  243. public virtual int BornEffectId { get { return 0; } }
  244. #endregion
  245. #region ATTR_PROPERTIES
  246. /*****************************一级属性**********************************************/
  247. public virtual SInt BaseSTR { get { return 1; } set { } }
  248. public virtual SInt BaseAGI { get { return 1; } set { } }
  249. public virtual SInt BaseINT { get { return 1; } set { } }
  250. public virtual SInt BaseVIT { get { return 1; } set { } }
  251. public virtual SInt BaseDEX { get { return 1; } set { } }
  252. public virtual SInt BaseLUK { get { return 1; } set { } }
  253. public virtual SInt STR { get { return 0; } } //力量
  254. public virtual SInt AGI { get { return 0; } } //敏捷
  255. public virtual SInt INT { get { return 0; } } //智力
  256. public virtual SInt VIT { get { return 0; } } //体质
  257. public virtual SInt DEX { get { return 0; } } //灵巧
  258. public virtual SInt LUK { get { return 0; } } //幸运
  259. /********************************角色基础成长二级属性属性*****************************/
  260. public virtual SFloat BaseLife { get { return 0; } }
  261. public virtual SFloat BaseSp { get { return 0; } }
  262. public virtual SFloat BaseAttack { get { return 0; } }
  263. public virtual SFloat BaseMagicAttack { get { return 0; } }
  264. public virtual SFloat BaseDefense {get { return 0; } }
  265. public virtual SFloat BaseMagicDefense { get { return 0; } }
  266. public virtual SFloat BaseCrit { get { return 0; } }
  267. public virtual SFloat BaseCritDamage { get { return 0; } }
  268. public virtual SFloat BaseDodge { get { return 0; } }
  269. public virtual SFloat BaseHit { get { return 0; } }
  270. public virtual SFloat BaseTen { get { return 0; } }
  271. public virtual SFloat BaseAttackSpeed { get { return 0; } }
  272. //(有服务器数据返回服务器 无 返回本地)
  273. /********************************二级属性[in battle]*******************************************/
  274. public virtual SFloat Life { get { return 0; }} //生命
  275. public virtual SFloat LocalLife
  276. {
  277. get
  278. {
  279. return CalcSecondAttr(Attr_Life);
  280. }
  281. }
  282. public virtual SFloat Sp { get { return 0; }} //蓝量
  283. public virtual SFloat LocalSp
  284. {
  285. get
  286. {
  287. return CalcSecondAttr(Attr_Sp);
  288. }
  289. }
  290. public virtual SFloat MinAttack { get { return Attack; } } //最小物攻
  291. public virtual SFloat Attack { get { return 0; } } //物攻
  292. public virtual SFloat LocalAttack
  293. {
  294. get
  295. {
  296. return CalcSecondAttr(Attr_Attack);
  297. }
  298. }
  299. public virtual SFloat MinMagicAttack { get { return MagicAttack; } } //最少魔攻
  300. public virtual SFloat MagicAttack { get { return 0; } } //魔攻
  301. public virtual SFloat LocalMagicAttack
  302. {
  303. get
  304. {
  305. return CalcSecondAttr(Attr_MagicAttack);
  306. }
  307. }
  308. public virtual SFloat Defense { get { return 0; } } //物防
  309. public virtual SFloat LocalDefense
  310. {
  311. get
  312. {
  313. return CalcSecondAttr(Attr_Defense);
  314. }
  315. }
  316. public virtual SFloat MagicDefense { get { return 0; } } //魔防
  317. public virtual SFloat LocalMagicDefense
  318. {
  319. get
  320. {
  321. return CalcSecondAttr(Attr_MagicDefense);
  322. }
  323. }
  324. public virtual SFloat Crit { get { return 0; } } //暴击
  325. public virtual SFloat LocalCrit
  326. {
  327. get
  328. {
  329. return CalcSecondAttr(Attr_Crit);
  330. }
  331. }
  332. public virtual SFloat CritDamagePercent { get { return GetAdditionalAttrPercent(Attr_CritDamage_Percent); } } //暴击伤害百分比
  333. public virtual SFloat Dodge { get { return 0; } } //闪避
  334. public virtual SFloat LocalDodge
  335. {
  336. get
  337. {
  338. return CalcSecondAttr(Attr_Dodge);
  339. }
  340. }
  341. public virtual SFloat Hit { get { return 0; } } //命中率
  342. public virtual SFloat LocalHit
  343. {
  344. get
  345. {
  346. return CalcSecondAttr(Attr_Hit);
  347. }
  348. }
  349. public virtual SFloat Ten { get { return 0; } } //韧性
  350. public virtual SFloat LocalTen
  351. {
  352. get
  353. {
  354. return CalcSecondAttr(Attr_Ten);
  355. }
  356. }
  357. public virtual SFloat AttackSpeed { get { return 0; } } //攻击速度
  358. public virtual SFloat LocalAttackSpeed
  359. {
  360. get
  361. {
  362. return CalcSecondAttr(Attr_AttackSpeed);
  363. }
  364. }
  365. public virtual SFloat CastAcceleration { get { return 0; } } //施法加速
  366. public virtual SFloat LocalCastAcceleration
  367. {
  368. get
  369. {
  370. return CalcSecondAttr(Attr_CastAcceleration);
  371. }
  372. }
  373. public virtual SFloat GodPower { get { return 0; } } //神威值
  374. public virtual SFloat LocalGodPower { get { return 0; } } //神威值
  375. public virtual SFloat Penetration { get { return GetAdditionalAttrPercent(Attr_Penetration_Percent); } } //忽视物防
  376. public virtual SFloat MagicPenetration { get { return GetAdditionalAttrPercent(Attr_Magic_Penetration_Percent); } } //忽视魔防
  377. public virtual SFloat VariableSingTime { get { return 0; } }
  378. public virtual SInt PerfectDodgeRate { get { return 0; } }
  379. public virtual SFloat DefPercent { get { return GetAdditionalAttrPercent(ActorData.Attr_Defense_Percent); } } //防御百分比
  380. public virtual SFloat MagicDefPercent { get { return GetAdditionalAttrPercent(ActorData.Attr_MagicDefense_Percent); } } //魔防百分比
  381. #endregion
  382. private long mPetId = 0;
  383. public long PetId
  384. {
  385. get { return mPetId; }
  386. set { mPetId = value; }
  387. }
  388. private ActorData mPetData = null;
  389. public ActorData PetData
  390. {
  391. get { return mPetData; }
  392. }
  393. public long GetuId()
  394. {
  395. return ID;
  396. }
  397. public long GetBaseId()
  398. {
  399. return BaseId;
  400. }
  401. public bool HasPet { get { return mPetData!=null; } }
  402. protected ActorData(int id)
  403. {
  404. IsMainRole = false;
  405. mBaseId = id;
  406. mAdditionalAttrs = new SFloat[s_AttrNum];
  407. mAttrPercent = new SFloat[s_AttrNum];
  408. mServerAttrs = new SFloat[s_AllAttrNum];
  409. mExtendAttrPercentDic = new Dictionary<int, SFloat>();
  410. ResetServerSecondAttr();
  411. }
  412. public virtual void RefreshSkills(SkillParam[] usedSkills)
  413. {
  414. }
  415. protected void SetUsedSkill(SkillParam[] usedSkills)
  416. {
  417. mUsedSkills = usedSkills;
  418. }
  419. private SkillParam[] mUsedSkills = null;
  420. public virtual void Initialize(int id, int level, SkillParam[] usedSkills)
  421. {
  422. mBaseId = id;
  423. mLevel = level;
  424. mShowLevel = level;
  425. mUsedSkills = usedSkills;
  426. mEquipTotalAttrs = new Dictionary<int, SFloat>();
  427. for (int i = Attr_Life; i <= Attr_MaxSp_Percent; ++i)
  428. {
  429. mEquipTotalAttrs.Add(i, 0);
  430. }
  431. }
  432. //平均技能等级
  433. public virtual int GetNverageSkillsLv()
  434. {
  435. int nNverageSkilllv = 0;
  436. if(null != mUsedSkills)
  437. {
  438. for (int i = 0; i < mUsedSkills.Length; i++)
  439. {
  440. nNverageSkilllv += mUsedSkills[i].skillLv;
  441. }
  442. //if (mUsedSkills.Length > 0)
  443. //{
  444. // nNverageSkilllv = (int)Math.Ceiling((float)nNverageSkilllv / mUsedSkills.Length);
  445. //}
  446. nNverageSkilllv = nNverageSkilllv - mUsedSkills.Length;
  447. }
  448. return nNverageSkilllv>=0 ? nNverageSkilllv:0;
  449. }
  450. public virtual float GetScale()
  451. {
  452. float fCurScale = 1;
  453. if (IsPet)
  454. {
  455. int nNverageSkillLv = GetNverageSkillsLv();
  456. string strScales = GlobalConfig.Instance.GetConfigStrValue(GlobalConfig.c_pet_scale_level);
  457. string[] strInfos = StringUtil.split(strScales, ';');
  458. for (int i = 0; i < strInfos.Length; i++)
  459. {
  460. string[] strDatas = StringUtil.split(strInfos[i], ':');
  461. if (strDatas.Length >= 2)
  462. {
  463. int nLevel = 0;
  464. float fScale = 1;
  465. int.TryParse(strDatas[0], out nLevel);
  466. float.TryParse(strDatas[1], out fScale);
  467. if (nLevel <= nNverageSkillLv)
  468. {
  469. fCurScale = fScale;
  470. }
  471. else
  472. {
  473. break;
  474. }
  475. }
  476. }
  477. }
  478. return fCurScale;
  479. }
  480. public void SetEquipTotalAttr(int id, float val)
  481. {
  482. mEquipTotalAttrs[id] = val;
  483. }
  484. public float GetEquipTotalAttr(int id)
  485. {
  486. return mEquipTotalAttrs[id];
  487. }
  488. //-----------------------------------------服务器二级属性
  489. public SFloat GetSeverSecondAttr(int attrId)
  490. {
  491. if (mServerAttrs.Length < attrId) return 0;
  492. return mServerAttrs[attrId - 1];
  493. }
  494. public void SetServerSecondAttr(int id, double val)
  495. {
  496. float fVal = (float)val;
  497. float.TryParse(val.ToString(), out fVal);
  498. if (id < Attr_STR || id > Attr_GodPow)
  499. {
  500. mServerAttrs[id - 1] = fVal * 0.0001f;
  501. }
  502. else
  503. {
  504. mServerAttrs[id - 1] = fVal;
  505. }
  506. }
  507. public void SetServerSecondAttr(int id, float val)
  508. {
  509. if (id < Attr_STR || id > Attr_GodPow)
  510. {
  511. mServerAttrs[id - 1] = val * 0.0001f;
  512. }
  513. else
  514. {
  515. mServerAttrs[id - 1] = val;
  516. }
  517. }
  518. public void SetServerSecondAttr(int id, SFloat val)
  519. {
  520. if (id < Attr_STR || id > Attr_GodPow)
  521. {
  522. mServerAttrs[id - 1] = val * 0.0001f;
  523. }
  524. else
  525. {
  526. mServerAttrs[id - 1] = val;
  527. }
  528. }
  529. public void ResetServerSecondAttr()
  530. {
  531. for (int i = 0; i < mServerAttrs.Length; i++)
  532. {
  533. mServerAttrs[i] = -1;//服务器没有计算 默认-1 取本地
  534. if (i >= Attr_Nature_Water_Damage_Percent - 1 && i <= Attr_VariableSingTime_Percent - 1)//下面区间服务器有计算 默认为0
  535. {
  536. mServerAttrs[i] = 0;
  537. }
  538. }
  539. }
  540. //----------------------------------------
  541. public SFloat GetAdditionalAttr(int attrId)
  542. {
  543. if (attrId < Attr_STR || attrId > Attr_GodPow) return 0;
  544. return mAdditionalAttrs[attrId - 1];
  545. }
  546. public void SetAdditionalAttr(int id, float val)
  547. {
  548. if (id < Attr_STR || id > Attr_GodPow) return;
  549. mAdditionalAttrs[id - 1] = val;
  550. }
  551. public void SetAdditionalAttr(int id, SFloat val)
  552. {
  553. if (id < Attr_STR || id > Attr_GodPow) return;
  554. mAdditionalAttrs[id - 1] = val;
  555. }
  556. public void ResetAdditionalAttr()
  557. {
  558. for(int i = 0; i < mAdditionalAttrs.Length; ++i)
  559. {
  560. mAdditionalAttrs[i] = 0;
  561. }
  562. }
  563. public void ResetAdditionalAttrPercent()
  564. {
  565. for (int i = 0; i < mAttrPercent.Length; ++i)
  566. {
  567. mAttrPercent[i] = 0;
  568. }
  569. }
  570. public SFloat GetAdditionalAttrPercent(int attrId)
  571. {
  572. if (attrId < Attr_STR_Percent) return 0;
  573. if(attrId >= Attr_Nature_None_Damage_Percent && attrId <= Attr_VariableSingTime_Percent)
  574. {
  575. SFloat val;
  576. val = mServerAttrs[attrId - 1];
  577. if (val >= 0)
  578. return val;
  579. mExtendAttrPercentDic.TryGetValue(attrId, out val);
  580. return val;
  581. }
  582. return mAttrPercent[attrId - Attr_STR_Percent];
  583. }
  584. public void SetAdditionalAttrPercent(int id, float val)
  585. {
  586. if (id < Attr_STR_Percent) return;
  587. if (id >= Attr_Nature_None_Damage_Percent && id <= Attr_VariableSingTime_Percent)
  588. {
  589. if (mExtendAttrPercentDic.ContainsKey(id))
  590. mExtendAttrPercentDic[id] = val;
  591. else
  592. mExtendAttrPercentDic.Add(id, val);
  593. return;
  594. }
  595. mAttrPercent[id - Attr_STR_Percent] = val;
  596. }
  597. public void SetAdditionalAttrPercent(int id, SFloat val)
  598. {
  599. if (id < Attr_STR_Percent) return;
  600. if (id > Attr_RealHurt_Percent && id < Attr_Nature_None_Damage_Percent) return;
  601. if (id >= Attr_Nature_None_Damage_Percent && id <= Attr_VariableSingTime_Percent)
  602. {
  603. if (mExtendAttrPercentDic.ContainsKey(id))
  604. mExtendAttrPercentDic[id] = val;
  605. else
  606. mExtendAttrPercentDic.Add(id, val);
  607. return;
  608. }
  609. mAttrPercent[id - Attr_STR_Percent] = val;
  610. }
  611. public SFloat GetFinalAttr(int attrId)
  612. {
  613. if (attrId <= Attr_GodPow)
  614. return GetAttr(attrId);
  615. else
  616. return GetAdditionalAttrPercent(attrId);
  617. }
  618. public void CloneAllAttributes(ActorData actorData)
  619. {
  620. for(int idx = Attr_STR;idx<=Attr_LUK;idx++)
  621. {
  622. SetBaseFirstAttr(idx, actorData.GetBaseFirstAttr(idx));
  623. }
  624. int length = 0;
  625. if (actorData.AdditionAttrs != null)
  626. {
  627. length = actorData.AdditionAttrs.Length;
  628. if (mAdditionalAttrs == null || mAdditionalAttrs.Length != length)
  629. mAdditionalAttrs = new SFloat[length];
  630. for (int idx = 0; idx < length; idx++)
  631. mAdditionalAttrs[idx] = actorData.AdditionAttrs[idx];
  632. }
  633. if (actorData.AttrPercents != null)
  634. {
  635. length = actorData.AttrPercents.Length;
  636. if (mAttrPercent == null || mAttrPercent.Length != length)
  637. mAttrPercent = new SFloat[length];
  638. for (int idx = 0; idx < length; idx++)
  639. mAttrPercent[idx] = actorData.AttrPercents[idx];
  640. }
  641. if(actorData.mExtendAttrPercentDic != null)
  642. {
  643. if (mExtendAttrPercentDic == null)
  644. mExtendAttrPercentDic = new Dictionary<int, SFloat>();
  645. else
  646. mExtendAttrPercentDic.Clear();
  647. foreach(var p in actorData.mExtendAttrPercentDic)
  648. {
  649. mExtendAttrPercentDic.Add(p.Key, p.Value);
  650. }
  651. }
  652. }
  653. public void CloneData(ActorData from)
  654. {
  655. //DebugHelper.LogError("----------------CloneData-------------");
  656. if(from.AdditionAttrs != null)
  657. {
  658. for(int idx = 0; idx < from.AdditionAttrs.Length;idx++)
  659. {
  660. mAdditionalAttrs[idx] = from.AdditionAttrs[idx];
  661. //DebugHelper.LogError("AdditionalAttr: " + mAdditionalAttrs[idx]);
  662. }
  663. }
  664. if(from.AttrPercents!=null)
  665. {
  666. for (int idx = 0; idx < from.AttrPercents.Length; idx++)
  667. {
  668. mAttrPercent[idx] = from.AttrPercents[idx];
  669. }
  670. }
  671. }
  672. public SFloat GetBaseSecondAttr(int attrId)
  673. {
  674. switch (attrId)
  675. {
  676. case Attr_Life:
  677. return BaseLife;
  678. case Attr_Sp:
  679. return BaseSp;
  680. case Attr_Attack:
  681. return BaseAttack;
  682. case Attr_MagicAttack:
  683. return BaseMagicAttack;
  684. case Attr_Defense:
  685. return BaseDefense;
  686. case Attr_MagicDefense:
  687. return BaseMagicDefense;
  688. case Attr_Hit:
  689. return BaseHit;
  690. case Attr_Crit:
  691. return BaseCrit;
  692. case Attr_Dodge:
  693. return BaseDodge;
  694. case Attr_Ten:
  695. return BaseTen;
  696. case Attr_AttackSpeed:
  697. return BaseAttackSpeed;
  698. }
  699. return 0;
  700. }
  701. //返回本地计算属性
  702. public SFloat GetLocalSecondAttr(int attrId)
  703. {
  704. switch (attrId)
  705. {
  706. case Attr_Life:
  707. return LocalLife;
  708. case Attr_Sp:
  709. return LocalSp;
  710. case Attr_Attack:
  711. return LocalAttack;
  712. case Attr_MagicAttack:
  713. return LocalMagicAttack;
  714. case Attr_Defense:
  715. return LocalDefense;
  716. case Attr_MagicDefense:
  717. return LocalMagicDefense;
  718. case Attr_Hit:
  719. return LocalHit;
  720. case Attr_Crit:
  721. return LocalCrit;
  722. case Attr_Dodge:
  723. return LocalDodge;
  724. case Attr_Ten:
  725. return LocalTen;
  726. case Attr_AttackSpeed:
  727. return LocalAttackSpeed;
  728. case Attr_CastAcceleration:
  729. return LocalCastAcceleration;
  730. }
  731. return 0;
  732. }
  733. //有服务器属性 返回服务器属性 没有返回本地属性
  734. public SFloat GetSecondAttr(int attrId)
  735. {
  736. switch(attrId)
  737. {
  738. case Attr_Life:
  739. return Life;
  740. case Attr_Sp:
  741. return Sp;
  742. case Attr_Attack:
  743. return Attack;
  744. case Attr_MagicAttack:
  745. return MagicAttack;
  746. case Attr_Defense:
  747. return Defense;
  748. case Attr_MagicDefense:
  749. return MagicDefense;
  750. case Attr_Hit:
  751. return Hit;
  752. case Attr_Crit:
  753. return Crit;
  754. case Attr_Dodge:
  755. return Dodge;
  756. case Attr_Ten:
  757. return Ten;
  758. case Attr_AttackSpeed:
  759. return AttackSpeed;
  760. case Attr_CastAcceleration:
  761. return CastAcceleration;
  762. case Attr_GodPow:
  763. return GodPower;
  764. }
  765. return 0;
  766. }
  767. public SFloat GetFirstAttr(int id)
  768. {
  769. switch (id)
  770. {
  771. case ActorData.Attr_STR:
  772. return STR;
  773. case ActorData.Attr_AGI:
  774. return AGI;
  775. case ActorData.Attr_INT:
  776. return INT;
  777. case ActorData.Attr_VIT:
  778. return VIT;
  779. case ActorData.Attr_DEX:
  780. return DEX;
  781. case ActorData.Attr_LUK:
  782. return LUK;
  783. }
  784. return 0;
  785. }
  786. public SFloat GetBaseFirstAttr(int id)
  787. {
  788. switch (id)
  789. {
  790. case ActorData.Attr_STR:
  791. return BaseSTR;
  792. case ActorData.Attr_AGI:
  793. return BaseAGI;
  794. case ActorData.Attr_INT:
  795. return BaseINT;
  796. case ActorData.Attr_VIT:
  797. return BaseVIT;
  798. case ActorData.Attr_DEX:
  799. return BaseDEX;
  800. case ActorData.Attr_LUK:
  801. return BaseLUK;
  802. }
  803. return 0;
  804. }
  805. public void SetBaseFirstAttr(int id, SFloat val)
  806. {
  807. if (id == ActorData.Attr_STR)
  808. {
  809. BaseSTR = (int)val;
  810. }
  811. else if (id == ActorData.Attr_AGI)
  812. {
  813. BaseAGI = (int)val;
  814. }
  815. else if (id == ActorData.Attr_INT)
  816. {
  817. BaseINT = (int)val;
  818. }
  819. else if (id == ActorData.Attr_VIT)
  820. {
  821. BaseVIT = (int)val;
  822. }
  823. else if (id == ActorData.Attr_DEX)
  824. {
  825. BaseDEX = (int)val;
  826. }
  827. else if (id == ActorData.Attr_LUK)
  828. {
  829. BaseLUK = (int)val;
  830. }
  831. }
  832. public void ResetBaseFirstAttr()
  833. {
  834. BaseSTR = 1;
  835. BaseAGI = 1;
  836. BaseINT = 1;
  837. BaseVIT = 1;
  838. BaseDEX = 1;
  839. BaseLUK = 1;
  840. }
  841. public SFloat GetAttr(int id)
  842. {
  843. if (id <= Attr_LUK) return GetFirstAttr(id);
  844. if (id <= Attr_GodPow) return GetSecondAttr(id);
  845. return 0;
  846. }
  847. Dictionary<int, float> oldAttrs = null;
  848. Dictionary<int, float> oldVals = null;
  849. Dictionary<int, float> newVals = null;
  850. Dictionary<int, float> deltaVals = null;
  851. public Dictionary<int, float> GetPreviewAttr(int[] vals)
  852. {
  853. if (oldVals == null)
  854. oldVals = new Dictionary<int, float>();
  855. else
  856. oldVals.Clear();
  857. if (newVals == null)
  858. newVals = new Dictionary<int, float>();
  859. else
  860. newVals.Clear();
  861. if (deltaVals == null)
  862. deltaVals = new Dictionary<int, float>();
  863. else
  864. deltaVals.Clear();
  865. if (oldAttrs == null)
  866. oldAttrs = new Dictionary<int, float>();
  867. else
  868. oldAttrs.Clear();
  869. for (int i = 0; i < vals.Length; ++i)
  870. {
  871. int attrId = i + ActorData.Attr_STR;
  872. oldAttrs.Add(attrId, GetBaseFirstAttr(attrId));
  873. }
  874. for(int idx = ActorData.Attr_Life; idx <= ActorData.Attr_CastAcceleration; idx++)
  875. {
  876. oldVals.Add(idx, GetLocalSecondAttr(idx));
  877. }
  878. for (int i = 0; i < vals.Length; ++i)
  879. {
  880. int attrId = i + ActorData.Attr_STR;
  881. SetBaseFirstAttr(attrId, vals[i]);
  882. }
  883. for (int idx = ActorData.Attr_Life; idx <= ActorData.Attr_CastAcceleration; idx++)
  884. {
  885. newVals.Add(idx, GetLocalSecondAttr(idx));
  886. }
  887. for (int i = 0; i < vals.Length; ++i)
  888. {
  889. int attrId = i + ActorData.Attr_STR;
  890. SetBaseFirstAttr(attrId, oldAttrs[attrId]);
  891. }
  892. //for (int idx = ActorData.Attr_Life; idx <= ActorData.Attr_AttackSpeed; idx++)
  893. //{
  894. // GetAttr(idx);
  895. //}
  896. for (int idx = ActorData.Attr_Life; idx <= ActorData.Attr_CastAcceleration; idx++)
  897. {
  898. float deltaVal = newVals[idx] - oldVals[idx];
  899. deltaVals.Add(idx, deltaVal);
  900. }
  901. return deltaVals;
  902. }
  903. public Dictionary<int, float> GetPreviewLvUpLocalAttr(int lv)
  904. {
  905. if (deltaVals == null)
  906. deltaVals = new Dictionary<int, float>();
  907. else
  908. deltaVals.Clear();
  909. int oldLv = Level;
  910. Level = lv;
  911. for (int i = Attr_Life; i <= Attr_Ten; ++i)
  912. {
  913. deltaVals[i] = GetLocalSecondAttr(i);
  914. }
  915. Level = oldLv;
  916. return deltaVals;
  917. }
  918. public Dictionary<int, float> GetPreviewLvUpAttr(int lv)
  919. {
  920. if (deltaVals == null)
  921. deltaVals = new Dictionary<int, float>();
  922. else
  923. deltaVals.Clear();
  924. int oldLv = Level;
  925. Level = lv;
  926. for (int i = Attr_Life; i <= Attr_Ten; ++i)
  927. {
  928. deltaVals[i] = GetSecondAttr(i);
  929. }
  930. Level = oldLv;
  931. return deltaVals;
  932. }
  933. protected SFloat CalcSecondAttr(int attrId)
  934. {
  935. if (attrId < Attr_Life || attrId > Attr_CastAcceleration) return 0;
  936. //DebugHelper.LogError("属性id:" + attrId + " baseVal:" + GetBaseSecondAttr(attrId) + " additionalVal:" + GetAdditionalAttr(attrId) +" additionalValPercent:"+ GetAdditionalAttrPercent(attrId + 30));
  937. return (GetBaseSecondAttr(attrId) + GetAdditionalAttr(attrId)) * (1 + GetAdditionalAttrPercent(attrId + 30));
  938. }
  939. private BuffParam[] mBuffListParam = null;
  940. public void SetBuffs(BuffParam[] buffs)
  941. {
  942. mBuffListParam = buffs;
  943. if (mBuffListParam == null) return;
  944. if (mTriggerBuffs == null)
  945. mTriggerBuffs = new List<TriggerBuffData>();
  946. else
  947. mTriggerBuffs.Clear();
  948. //Debug.Log("----------------SetBuffs---");
  949. for (int idx = 0; idx < mBuffListParam.Length; idx++)
  950. {
  951. BuffParam buff = mBuffListParam[idx];
  952. if (buff.buffId == 0 || buff.ratio == 0) continue;
  953. TriggerBuffData buffData = new TriggerBuffData(buff.buffId, buff.ratio * 0.01f, buff.cd * 0.01f, (BuffTriggerType)buff.type,(BuffTriggerCasterType)buff.casterType,"");
  954. mTriggerBuffs.Add(buffData);
  955. }
  956. }
  957. private BuffParam[] mDropBuffListParam = null;
  958. private List<TriggerBuffData> mDropBuffList = null;
  959. public List<TriggerBuffData> DropBuffList
  960. {
  961. get { return mDropBuffList; }
  962. }
  963. public void SetDropBuffs(BuffParam[] buffs)
  964. {
  965. mDropBuffListParam = buffs;
  966. if (mDropBuffListParam == null)
  967. {
  968. //Debug.Log("----------------清除dropbuff");
  969. mDropBuffList = null;
  970. return;
  971. }
  972. if (mDropBuffList == null)
  973. mDropBuffList = new List<TriggerBuffData>();
  974. else
  975. mDropBuffList.Clear();
  976. for(int idx =0; idx < mDropBuffListParam.Length; idx++)
  977. {
  978. BuffParam buff = mDropBuffListParam[idx];
  979. //Debug.Log(buff.buffId + " --------1------------ ");
  980. if (buff.buffId == 0 || buff.ratio == 0) continue;
  981. Debug.Log(buff.buffId+$" --------2-----{buff.type}--{buff.casterType}----- "+ buff.funStr);
  982. 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);
  983. mDropBuffList.Add(buffData);
  984. }
  985. }
  986. //目前 該mark 用在pve中 技能激活
  987. private GvGMark m_pMark = null;
  988. public GvGMark PveMark
  989. {
  990. get { return m_pMark; }
  991. }
  992. public void SetPveMark(GvGMark pMark)
  993. {
  994. m_pMark = pMark;
  995. }
  996. public void ResetFirstSkill()
  997. {
  998. if (mSkillMgr.Skills != null && mSkillMgr.Skills.Length > 0)
  999. {
  1000. if (mCastSkillData == null)
  1001. mCastSkillData = new CastSkillData();
  1002. mCastSkillData.skillIcon = mSkillMgr.Skills[0].SkillDataInfo.skillIcon;
  1003. mCastSkillData.skillId = mSkillMgr.Skills[0].Id;
  1004. mCastSkillData.cdTime = 0;
  1005. mCastSkillData.actorId = ID;
  1006. mCastSkillData.IsForbidden = true;
  1007. mCastSkillData.IsEnhance = false;
  1008. }
  1009. else if(mSkillMgr.RandomSkills!=null && mSkillMgr.RandomSkills.Count > 0)
  1010. {
  1011. if (mCastSkillData == null)
  1012. mCastSkillData = new CastSkillData();
  1013. BaseSkill skill = mSkillMgr.GetRandomSkill(SkillType.Attack1);
  1014. mCastSkillData.skillIcon = skill.SkillDataInfo.skillIcon;
  1015. mCastSkillData.skillId = skill.Id;
  1016. mCastSkillData.cdTime = 0;
  1017. mCastSkillData.actorId = ID;
  1018. mCastSkillData.IsForbidden = true;
  1019. mCastSkillData.IsEnhance = false;
  1020. }
  1021. }
  1022. public void SetAllAttributes(int[] baseFirstAttrs, float[] additionalAttrs,float[] attrPercentList, Dictionary<int, float> extendAttrPercentDic)
  1023. {
  1024. if(baseFirstAttrs!=null)
  1025. {
  1026. for(int idx = Attr_STR;idx<=Attr_LUK;idx++)
  1027. {
  1028. SetBaseFirstAttr(idx, baseFirstAttrs[idx - 1]);
  1029. }
  1030. }
  1031. if(additionalAttrs!=null)
  1032. {
  1033. for (int idx = 0; idx < additionalAttrs.Length; idx++)
  1034. mAdditionalAttrs[idx] = additionalAttrs[idx];
  1035. }
  1036. if(attrPercentList != null)
  1037. {
  1038. for (int idx = 0; idx < attrPercentList.Length; idx++)
  1039. mAttrPercent[idx] = attrPercentList[idx];
  1040. }
  1041. if(extendAttrPercentDic!=null)
  1042. {
  1043. if (mExtendAttrPercentDic == null)
  1044. mExtendAttrPercentDic = new Dictionary<int, SFloat>();
  1045. else
  1046. mExtendAttrPercentDic.Clear();
  1047. foreach(var p in extendAttrPercentDic)
  1048. {
  1049. mExtendAttrPercentDic.Add(p.Key, p.Value);
  1050. }
  1051. }
  1052. }
  1053. public void SetPet(ActorData pet)
  1054. {
  1055. if (mPetData == pet) return;
  1056. mPetData = pet;
  1057. if (mPetData != null)
  1058. mPetId = mPetData.ID;
  1059. else
  1060. mPetId = 0;
  1061. }
  1062. #region PUBLIC_VIRTUAL_METHODS
  1063. public virtual void SetLevel(int lv)
  1064. {
  1065. mLevel = lv;
  1066. }
  1067. public virtual void Dispose()
  1068. {
  1069. if (bDisposed)
  1070. return;
  1071. /*if (mAvatarData != null)
  1072. {
  1073. mAvatarData.Dispose();
  1074. mAvatarData = null;
  1075. }*/
  1076. if(mSkillMgr != null)
  1077. {
  1078. mSkillMgr.Dispose();
  1079. mSkillMgr = null;
  1080. }
  1081. bDisposed = true;
  1082. }
  1083. #endregion
  1084. #region static_public_methods
  1085. public static ActorData CloneActorData(ActorData actorData)
  1086. {
  1087. SkillParam[] usedSkills = null;
  1088. if (actorData.mUsedSkills != null)
  1089. {
  1090. int length = actorData.mUsedSkills.Length;
  1091. usedSkills = new SkillParam[length];
  1092. Array.Copy(actorData.mUsedSkills, usedSkills, length);
  1093. }
  1094. if (actorData is HeroActorData)
  1095. {
  1096. HeroActorData heroActorData = actorData as HeroActorData;
  1097. HeroActorData newHeroActorData = ActorData.CreatePlayerActor(actorData.ID, actorData.BaseId, actorData.Level, usedSkills) as HeroActorData;
  1098. newHeroActorData.IsMainRole = heroActorData.IsMainRole;
  1099. newHeroActorData.StrengthLevel = heroActorData.StrengthLevel;
  1100. newHeroActorData.SetProfessionId(heroActorData.ProfessionId);
  1101. newHeroActorData.SetFashionData(heroActorData.FashionData);
  1102. newHeroActorData.CloneAllAttributes(actorData);
  1103. newHeroActorData.PetId = heroActorData.PetId;
  1104. newHeroActorData.HeadFrameId = heroActorData.HeadFrameId;
  1105. return newHeroActorData;
  1106. }
  1107. else if (actorData is FellowActorData)
  1108. {
  1109. FellowActorData fellowActorData = actorData as FellowActorData;
  1110. FellowActorData newFellowActorData = CreateFellowActor(actorData.ID, actorData.BaseId, actorData.Level, usedSkills) as FellowActorData;
  1111. newFellowActorData.IsMainRole = fellowActorData.IsMainRole;
  1112. newFellowActorData.StrengthLevel = fellowActorData.StrengthLevel;
  1113. newFellowActorData.CloneAllAttributes(actorData);
  1114. newFellowActorData.PetId = fellowActorData.PetId;
  1115. return newFellowActorData;
  1116. }
  1117. else if (actorData is PetActorData)
  1118. {
  1119. PetActorData petActorData = actorData as PetActorData;
  1120. PetActorData newPetActorData = CreatePetActor(actorData.ID, actorData.BaseId, actorData.Level, usedSkills) as PetActorData;
  1121. newPetActorData.SetStep(petActorData.Step);
  1122. return newPetActorData;
  1123. }
  1124. else if (actorData is NpcActorData)
  1125. {
  1126. NpcActorData newNpcActorData = CreateNpcPlayerActor(actorData.ID, actorData.BaseId, actorData.Level) as NpcActorData;
  1127. newNpcActorData.IsBoss = actorData.IsBoss;
  1128. newNpcActorData.PositionValue = actorData.PositionValue;
  1129. newNpcActorData.IgnoreLife = actorData.IgnoreLife;
  1130. return newNpcActorData;
  1131. }
  1132. return null;
  1133. }
  1134. public static ActorData CreateActorFromJson(JSONObject json)
  1135. {
  1136. long uid = 0;
  1137. int baseId = 0, level = 0, strengthLevel = 0, jobId = 0;
  1138. long petId = 0;
  1139. bool isMainRole = false, isHero = false, isFellow = false, isBoss = false, isNpc = false,isPet = false;
  1140. bool bIsTransferred = false;
  1141. int pos = 0;
  1142. int advanceLevel = 0;
  1143. int headFrameId = 0;
  1144. bool ignoreLife = false;
  1145. if (json.HasField("Base"))
  1146. {
  1147. JSONObject baseJson = json.GetField("Base");
  1148. uid = baseJson.GetField("id").l;
  1149. baseId = (int)baseJson.GetField("bId").n;
  1150. level = (int)baseJson.GetField("lv").n;
  1151. strengthLevel = (int)baseJson.GetField("strengthLevel").n;
  1152. isMainRole = baseJson.GetField("m").b;
  1153. isHero = baseJson.GetField("h").b;
  1154. isFellow = baseJson.GetField("f").b;
  1155. isBoss = baseJson.GetField("b").b;
  1156. isNpc = baseJson.GetField("n").b;
  1157. isPet = baseJson.GetField("p").b;
  1158. petId = baseJson.GetField("petId").l;
  1159. if (baseJson.HasField("jobId"))
  1160. {
  1161. jobId = (int)baseJson.GetField("jobId").n;
  1162. }
  1163. if(baseJson.HasField("advanceLevel"))
  1164. {
  1165. advanceLevel = (int)baseJson.GetField("advanceLevel").n;
  1166. }
  1167. if(baseJson.HasField("frameId"))
  1168. {
  1169. headFrameId = (int)baseJson.GetField("frameId").n;
  1170. }
  1171. pos = (int)baseJson.GetField("pos").n;
  1172. JSONObject fieldObj = baseJson.GetField("ignoreLife");
  1173. if (fieldObj != null)
  1174. {
  1175. ignoreLife = fieldObj.b;
  1176. }
  1177. if (baseJson.HasField("IsTransferred"))
  1178. {
  1179. bIsTransferred = baseJson.GetField("IsTransferred").b;
  1180. }
  1181. }
  1182. int[] baseFirstAttrs = new int[6];
  1183. float[] additionalAttrs = null;
  1184. float[] sencondAttrs = null;
  1185. float[] attrPercent = null;
  1186. Dictionary<int, float> extendAttrPercentDic = null;
  1187. if (json.HasField("Attrs"))
  1188. {
  1189. JSONObject attrsJson = json.GetField("Attrs");
  1190. if(attrsJson.HasField("baseFirstAttr"))
  1191. {
  1192. JSONObject baseFirstAttrJson = attrsJson.GetField("baseFirstAttr");
  1193. additionalAttrs = new float[baseFirstAttrJson.Count];
  1194. for (int idx = 0; idx < baseFirstAttrJson.Count; idx++)
  1195. {
  1196. baseFirstAttrs[idx] = (int)baseFirstAttrJson[idx].n;
  1197. }
  1198. }
  1199. if (attrsJson.HasField("serverSecondAttr"))
  1200. {
  1201. JSONObject baseFirstAttrJson = attrsJson.GetField("serverSecondAttr");
  1202. sencondAttrs = new float[baseFirstAttrJson.Count];
  1203. for (int idx = 0; idx < baseFirstAttrJson.Count; idx++)
  1204. {
  1205. sencondAttrs[idx] = baseFirstAttrJson[idx].f;
  1206. }
  1207. }
  1208. if (attrsJson.HasField("additionalAttr"))
  1209. {
  1210. JSONObject additionalAttrJson = attrsJson.GetField("additionalAttr");
  1211. additionalAttrs = new float[additionalAttrJson.Count];
  1212. for (int idx = 0; idx < additionalAttrJson.Count; idx++)
  1213. {
  1214. additionalAttrs[idx] = additionalAttrJson[idx].f;
  1215. }
  1216. }
  1217. if (attrsJson.HasField("attrPercent"))
  1218. {
  1219. JSONObject attrPercentJson = attrsJson.GetField("attrPercent");
  1220. attrPercent = new float[attrPercentJson.Count];
  1221. for (int idx = 0; idx < attrPercentJson.Count; idx++)
  1222. {
  1223. attrPercent[idx] = attrPercentJson[idx].f;
  1224. }
  1225. }
  1226. if (attrsJson.HasField("extendAttr"))
  1227. {
  1228. JSONObject extendAttrJson = attrsJson.GetField("extendAttr");
  1229. extendAttrPercentDic = new Dictionary<int, float>();
  1230. for (int idx = 0; idx < extendAttrJson.Count; idx++)
  1231. {
  1232. JSONObject temp = extendAttrJson[idx];
  1233. extendAttrPercentDic.Add((int)temp[0].n, temp[1].f);
  1234. }
  1235. }
  1236. }
  1237. SkillParam[] usedSkills = null;
  1238. if (json.HasField("Skills"))
  1239. {
  1240. JSONObject skillsJson = json.GetField("Skills");
  1241. if (!skillsJson.IsNull)
  1242. {
  1243. usedSkills = new SkillParam[skillsJson.Count];
  1244. for (int idx = 0; idx < skillsJson.Count; idx++)
  1245. {
  1246. usedSkills[idx] = new SkillParam(skillsJson[idx]);
  1247. }
  1248. }
  1249. }
  1250. BuffParam[] usedBuffs = null;
  1251. if (json.HasField("Buffs"))
  1252. {
  1253. JSONObject buffsJson = json.GetField("Buffs");
  1254. if (!buffsJson.IsNull)
  1255. {
  1256. usedBuffs = new BuffParam[buffsJson.Count];
  1257. for (int idx = 0; idx < buffsJson.Count; idx++)
  1258. {
  1259. usedBuffs[idx] = new BuffParam(buffsJson[idx]);
  1260. }
  1261. }
  1262. }
  1263. GvGMark pMark = null;
  1264. if (json.HasField("Mark"))
  1265. {
  1266. JSONObject buffsJson = json.GetField("Mark");
  1267. if (null != buffsJson && buffsJson.Count > 0)
  1268. {
  1269. if(null != buffsJson)
  1270. {
  1271. pMark = new GvGMark(buffsJson[0]);
  1272. }
  1273. }
  1274. }
  1275. FashionParam fashionParam;
  1276. if (json.HasField("Fashion"))
  1277. {
  1278. JSONObject fashionJson = json.GetField("Fashion");
  1279. fashionParam = new FashionParam(fashionJson);
  1280. }
  1281. else
  1282. {
  1283. fashionParam = default(FashionParam);
  1284. }
  1285. if (isHero)
  1286. {
  1287. HeroActorData hero = ActorData.CreatePlayerActor(uid, baseId, level, usedSkills) as HeroActorData;
  1288. hero.IsMainRole = isMainRole;
  1289. hero.StrengthLevel = strengthLevel;
  1290. hero.SetProfessionId(jobId);
  1291. hero.SetFashionData(fashionParam);
  1292. hero.SetAllAttributes(baseFirstAttrs,additionalAttrs, attrPercent, extendAttrPercentDic);
  1293. hero.PetId = petId;
  1294. hero.HeadFrameId = headFrameId;
  1295. hero.SetBuffs(usedBuffs);
  1296. for (int idx = 0; idx < sencondAttrs.Length; idx++)
  1297. hero.mServerAttrs[idx] = sencondAttrs[idx];
  1298. if(null != pMark)
  1299. {
  1300. hero.SetPveMark(pMark);
  1301. }
  1302. return hero;
  1303. }
  1304. else if (isFellow)
  1305. {
  1306. FellowActorData fellow = CreateFellowActor(uid, baseId, level, usedSkills) as FellowActorData;
  1307. fellow.IsMainRole = isMainRole;
  1308. fellow.StrengthLevel = strengthLevel;
  1309. fellow.SetAllAttributes(baseFirstAttrs,additionalAttrs, attrPercent, extendAttrPercentDic);
  1310. fellow.IsTransferred = bIsTransferred;
  1311. fellow.PetId = petId;
  1312. fellow.SetBuffs(usedBuffs);
  1313. for (int idx = 0; idx < sencondAttrs.Length; idx++)
  1314. fellow.mServerAttrs[idx] = sencondAttrs[idx];
  1315. if (null != pMark)
  1316. {
  1317. fellow.SetPveMark(pMark);
  1318. }
  1319. return fellow;
  1320. }
  1321. else if(isPet)
  1322. {
  1323. PetActorData pet = CreatePetActor(uid, baseId, level, usedSkills) as PetActorData;
  1324. pet.SetStep(advanceLevel);
  1325. for (int idx = 0; idx < sencondAttrs.Length; idx++)
  1326. pet.mServerAttrs[idx] = sencondAttrs[idx];
  1327. return pet;
  1328. }
  1329. else if (isBoss || isNpc)
  1330. {
  1331. if (BattleMgr.Instance.Battle != null)
  1332. {
  1333. Fighter f = BattleMgr.Instance.Battle.FighterMgr.GetFighterByID(uid, eTeamType.Enemy);
  1334. if (f != null)
  1335. {
  1336. f.Actor.SetLevel(level);
  1337. return f.Actor;
  1338. }
  1339. }
  1340. ActorData npc = CreateNpcPlayerActor(uid, baseId, level);
  1341. npc.IsBoss = isBoss;
  1342. npc.PositionValue = pos;
  1343. npc.IgnoreLife = ignoreLife;
  1344. return npc;
  1345. }
  1346. return null;
  1347. }
  1348. public static ActorData CreateNpcPlayerActor(long uid,int baseId, int level)
  1349. {
  1350. ActorData actor = new NpcActorData(baseId);
  1351. actor.Initialize(baseId, level,null);
  1352. actor.ID = uid;
  1353. return actor;
  1354. }
  1355. public static ActorData CreateNpcPlayerActor(int mapId,int levelId,int pos,int baseId, int level)
  1356. {
  1357. ActorData actor = new NpcActorData(baseId);
  1358. actor.Initialize(baseId, level, null);
  1359. actor.ID = CommonUtil.CalcNpcUniqueId(mapId,levelId,pos,baseId);
  1360. return actor;
  1361. }
  1362. public static ActorData CreateFellowActor(ActorParam actorParam)
  1363. {
  1364. if (actorParam == null) return null;
  1365. if (actorParam.uid == 0 || actorParam.baseId == 0) return null;
  1366. FellowActorData hero = CreateFellowActor(actorParam.uid, actorParam.baseId, actorParam.level, actorParam.skills) as FellowActorData;
  1367. hero.IsMainRole = false;
  1368. hero.StrengthLevel = actorParam.strengthLevel;
  1369. hero.SetBuffs(actorParam.buffs);
  1370. return hero;
  1371. }
  1372. public static ActorData CreateFellowActor(int id)
  1373. {
  1374. return CreateFellowActor(0,id, 1,null);
  1375. }
  1376. public static ActorData CreateFellowActor(long uid, int baseId,int level, SkillParam[] usedSkills)
  1377. {
  1378. ActorData actor = new FellowActorData(baseId);
  1379. actor.Initialize(baseId, level,usedSkills);
  1380. actor.ID = uid > 0 ? uid:baseId;
  1381. return actor;
  1382. }
  1383. public static ActorData CreatePetActor(ActorParam actorParam)
  1384. {
  1385. if (actorParam == null) return null;
  1386. if (actorParam.uid == 0 || actorParam.baseId == 0) return null;
  1387. PetActorData pet = CreatePetActor(actorParam.uid, actorParam.baseId, actorParam.level, actorParam.skills) as PetActorData;
  1388. return pet;
  1389. }
  1390. public static ActorData CreatePetActor(long uid, int baseId, int level, SkillParam[] usedSkills)
  1391. {
  1392. ActorData actor = new PetActorData(baseId);
  1393. actor.Initialize(baseId, level, usedSkills);
  1394. actor.ID = uid > 0 ? uid : baseId;
  1395. return actor;
  1396. }
  1397. public static ActorData CreatePetBossActor(long uid, int baseId, int level)
  1398. {
  1399. ActorData actor = new PetBossActorData(baseId);
  1400. actor.Initialize(baseId, level, null);
  1401. actor.ID = uid > 0 ? uid : baseId;
  1402. return actor;
  1403. }
  1404. public static ActorData CreatePlayerActor(LuaTable tblParam)
  1405. {
  1406. if (tblParam == null) return null;
  1407. ActorParam actorParam = new ActorParam();
  1408. if (tblParam["uid"] != null)
  1409. int.TryParse(tblParam["uid"].ToString(), out actorParam.uid);
  1410. if (tblParam["id"] != null)
  1411. int.TryParse(tblParam["id"].ToString(), out actorParam.baseId);
  1412. if (tblParam["lv"] != null)
  1413. int.TryParse(tblParam["lv"].ToString(), out actorParam.level);
  1414. if (tblParam["jobId"] != null)
  1415. int.TryParse(tblParam["jobId"].ToString(), out actorParam.jobId);
  1416. if (tblParam["mainRole"] != null)
  1417. bool.TryParse(tblParam["mainRole"].ToString(), out actorParam.isMainRole);
  1418. List<SkillParam> skillParams = null;
  1419. if (tblParam["skills"] != null)
  1420. {
  1421. LuaTable skills = (LuaTable)tblParam["skills"];
  1422. skillParams = ParseSkillParam(skills);
  1423. actorParam.skills = skillParams != null ? skillParams.ToArray() : null;
  1424. }
  1425. if (tblParam["buffs"] != null)
  1426. {
  1427. List<BuffParam> buffs = ParseBuffParam((LuaTable)tblParam["buffs"]);
  1428. actorParam.buffs = buffs != null ? buffs.ToArray() : null;
  1429. }
  1430. actorParam.strengthLevel = 7;
  1431. return CreatePlayerActor(actorParam);
  1432. }
  1433. public static ActorData CreatePlayerActor(ActorParam actorParam)
  1434. {
  1435. if (actorParam == null) return null;
  1436. if (actorParam.uid == 0 || actorParam.baseId == 0) return null;
  1437. HeroActorData hero = ActorData.CreatePlayerActor(actorParam.uid, actorParam.baseId, actorParam.level, actorParam.skills) as HeroActorData;
  1438. hero.IsMainRole = actorParam.isMainRole;
  1439. hero.StrengthLevel = actorParam.strengthLevel;
  1440. hero.HeadFrameId = actorParam.headFrameId;
  1441. hero.SetProfessionId(actorParam.jobId);
  1442. hero.SetFashionData(actorParam.fashion);
  1443. hero.SetBuffs(actorParam.buffs);
  1444. return hero;
  1445. }
  1446. public static ActorData CreatePlayerActor(int id)
  1447. {
  1448. return CreatePlayerActor(0, id, 1, null);
  1449. }
  1450. public static ActorData CreatePlayerActor(long uid, int baseId, int level, SkillParam[] usedSkills)
  1451. {
  1452. HeroActorData actor = new HeroActorData(baseId);
  1453. actor.Initialize(baseId, level, usedSkills);
  1454. actor.ID = uid > 0 ? uid : baseId;
  1455. return actor;
  1456. }
  1457. public static List<SkillParam> ParseSkillParam(LuaTable param)
  1458. {
  1459. if (param == null) return null;
  1460. List<SkillParam> skillParams = new List<SkillParam>();
  1461. for (int sdx = 1; sdx <= param.Length; sdx++)
  1462. {
  1463. LuaTable skill = (LuaTable)param[sdx];
  1464. int skillId = 0, skillLv = 0,rate = 100;
  1465. if (skill["skillId"] != null)
  1466. int.TryParse(skill["skillId"].ToString(), out skillId);
  1467. if (skill["lv"] != null)
  1468. int.TryParse(skill["lv"].ToString(), out skillLv);
  1469. if (skill["rate"] != null)
  1470. int.TryParse(skill["rate"].ToString(), out rate);
  1471. if (skillId == 0 || skillLv == 0) continue;
  1472. SkillParam sp = new SkillParam(skillId, skillLv,rate);
  1473. skillParams.Add(sp);
  1474. }
  1475. return skillParams;
  1476. }
  1477. public static List<BuffParam> ParseBuffParam(LuaTable param)
  1478. {
  1479. if (param == null) return null;
  1480. List<BuffParam> buffs = new List<BuffParam>();
  1481. for (int idx = 1; idx <= param.Length; idx++)
  1482. {
  1483. LuaTable buff = (LuaTable)param[idx];
  1484. int buffId = 0, ratio = 0, cd = 0;
  1485. int type = 0, casterType = 0;
  1486. if (buff.Length >= 1)
  1487. {
  1488. int.TryParse(buff[1].ToString(), out buffId);
  1489. }
  1490. if (buff.Length >= 2)
  1491. {
  1492. int.TryParse(buff[2].ToString(), out ratio);
  1493. }
  1494. if (buff.Length >= 3)
  1495. {
  1496. int.TryParse(buff[3].ToString(), out cd);
  1497. }
  1498. if (buff.Length >= 4)
  1499. {
  1500. int temp = 0;
  1501. int.TryParse(buff[4].ToString(), out temp);
  1502. type = temp;
  1503. }
  1504. if(buff.Length >= 5)
  1505. {
  1506. int temp = 0;
  1507. int.TryParse(buff[5].ToString(), out temp);
  1508. casterType = temp;
  1509. }
  1510. if (buffId == 0 || ratio == 0) continue;
  1511. BuffParam buffData = new BuffParam(buffId, ratio, cd, type);
  1512. buffs.Add(buffData);
  1513. }
  1514. return buffs;
  1515. }
  1516. #endregion
  1517. #region json_methods
  1518. public virtual JSONObject ToJson()
  1519. {
  1520. JSONObject json = new JSONObject();
  1521. json.AddField("Base", BaseToJson());
  1522. json.AddField("Attrs", AttrToJson());
  1523. json.AddField("Skills", SkillToJson());
  1524. json.AddField("Buffs", BuffToJson());
  1525. json.AddField("Mark", MarkToJson());
  1526. json.AddField("Fashion", FashionToJson());
  1527. return json;
  1528. }
  1529. protected virtual JSONObject BaseToJson()
  1530. {
  1531. JSONObject json = new JSONObject();
  1532. json.AddField("id", ID);
  1533. json.AddField("bId", BaseId);
  1534. json.AddField("lv", Level);
  1535. json.AddField("m", IsMainRole);
  1536. json.AddField("h", IsHero);
  1537. json.AddField("f", IsFellow);
  1538. json.AddField("b", IsBoss);
  1539. json.AddField("n", IsNpc);
  1540. json.AddField("p", IsPet);
  1541. json.AddField("frameId",HeadFrameId);
  1542. json.AddField("strengthLevel", StrengthLevel);
  1543. json.AddField("petId", PetData != null ? PetData.ID : 0);
  1544. json.AddField("pos", PositionValue);
  1545. json.AddField("IsTransferred", IsTransferred);
  1546. if (IgnoreLife) json.AddField("ignoreLife", IgnoreLife);
  1547. return json;
  1548. }
  1549. protected virtual JSONObject AttrToJson()
  1550. {
  1551. JSONObject json = new JSONObject();
  1552. JSONObject baseFirstAttrJson = new JSONObject();
  1553. for(int idx = ActorData.Attr_STR; idx <= ActorData.Attr_LUK;idx++)
  1554. {
  1555. baseFirstAttrJson.Add(GetBaseFirstAttr(idx));
  1556. }
  1557. json.AddField("baseFirstAttr", baseFirstAttrJson);
  1558. if (mServerAttrs != null)
  1559. {
  1560. JSONObject serverSecondAttrJson = new JSONObject();
  1561. for (int idx = 0; idx < mServerAttrs.Length; idx++)
  1562. {
  1563. //Debug.Log("Save idx "+ idx.ToString() +" "+ mServerAttrs[idx].ToString());
  1564. serverSecondAttrJson.Add(mServerAttrs[idx]);
  1565. }
  1566. json.AddField("serverSecondAttr", serverSecondAttrJson);
  1567. }
  1568. if (mAdditionalAttrs != null)
  1569. {
  1570. JSONObject additionalAttrJson = new JSONObject();
  1571. for (int idx = 0; idx < s_AttrNum; idx++)
  1572. {
  1573. additionalAttrJson.Add(mAdditionalAttrs[idx]);
  1574. }
  1575. json.AddField("additionalAttr", additionalAttrJson);
  1576. }
  1577. if (mAttrPercent != null)
  1578. {
  1579. JSONObject attrPercentJson = new JSONObject();
  1580. for (int idx = 0; idx < s_AttrNum; idx++)
  1581. {
  1582. attrPercentJson.Add(mAttrPercent[idx]);
  1583. }
  1584. json.AddField("attrPercent", attrPercentJson);
  1585. }
  1586. if (mExtendAttrPercentDic != null)
  1587. {
  1588. JSONObject extendAttrJson = new JSONObject();
  1589. foreach (var p in mExtendAttrPercentDic)
  1590. {
  1591. JSONObject temp = new JSONObject();
  1592. temp.Add(p.Key);
  1593. temp.Add(p.Value);
  1594. extendAttrJson.Add(temp);
  1595. }
  1596. json.AddField("extendAttr", extendAttrJson);
  1597. }
  1598. return json;
  1599. }
  1600. protected virtual JSONObject SkillToJson()
  1601. {
  1602. JSONObject json = new JSONObject();
  1603. if(SkillMgr!=null)
  1604. {
  1605. if(SkillMgr.Skills != null)
  1606. {
  1607. for (int idx = 0; idx < SkillMgr.Skills.Length; idx++)
  1608. {
  1609. json.Add(SkillMgr.Skills[idx].ToJson());
  1610. }
  1611. }
  1612. if(SkillMgr.RandomSkills != null)
  1613. {
  1614. for(int idx = 0; idx < SkillMgr.RandomSkills.Count;idx++)
  1615. {
  1616. json.Add(SkillMgr.RandomSkills[idx].ToJson());
  1617. }
  1618. }
  1619. if(SkillMgr.PassiveSkills != null)
  1620. {
  1621. for(int idx =0; idx < SkillMgr.PassiveSkills.Count;idx++)
  1622. {
  1623. json.Add(SkillMgr.PassiveSkills[idx].ToJson());
  1624. }
  1625. }
  1626. }
  1627. return json;
  1628. }
  1629. protected virtual JSONObject MarkToJson()
  1630. {
  1631. JSONObject json = new JSONObject();
  1632. if (PveMark != null)
  1633. {
  1634. json.Add(PveMark.ToJson());
  1635. }
  1636. return json;
  1637. }
  1638. protected virtual JSONObject BuffToJson()
  1639. {
  1640. JSONObject json = new JSONObject();
  1641. if (mBuffListParam != null)
  1642. {
  1643. for (int idx = 0; idx < mBuffListParam.Length; idx++)
  1644. {
  1645. json.Add(mBuffListParam[idx].ToJson());
  1646. }
  1647. }
  1648. return json;
  1649. }
  1650. protected virtual JSONObject FashionToJson()
  1651. {
  1652. JSONObject json = new JSONObject();
  1653. return json;
  1654. }
  1655. #endregion
  1656. }