| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466 |
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- public class PetActorData : ActorData
- {
- private int mStep = 0;
- public int Step
- {
- get { return mStep; }
- }
- protected PetBaseData mBaseData;
- public PetBaseData BaseData { get { return mBaseData; } }
- protected PetAdvanceData mPetAdvanceData;
- protected int[] mAdvanceMaxLevels = null;
- #region OVERRIDE_FIELDS
- protected string mName;
- public override string Name
- {
- get { return mName; }
- }
- public override string HeadIcon
- {
- get { return mBaseData.headIcon; }
- set { }
- }
- public override int PositionValue
- {
- get { return mBaseData.position; }
- }
- public override string AnimCtrlName
- {
- get { return mBaseData.battleCtrl; }
- }
- public override string ShowAnimCtrlName
- {
- get { return mBaseData.showCtrl; }
- }
- public override int NatureId
- {
- get { return mBaseData.natureId; }
- }
- public override int AvatarID
- {
- get
- {
- return mBaseData.avatarId;
- }
- }
- public override ProfessionType Profession
- {
- get
- {
- return (ProfessionType)mBaseData.profession;
- }
- }
- public override bool IsPet
- {
- get { return true; }
- }
- public override SFloat LocalLife
- {
- get
- {
- SFloat addHpRate = 0;
- int addHp = 0;
- CalcAdvanceData(Attr_Life, mBaseData.hpRate, out addHpRate, out addHp);
- SFloat hp = mBaseData.life * (1 + addHpRate) + addHp;
- return (hp + GetAdditionalAttr(Attr_Life)) * (1 + GetAdditionalAttrPercent(Attr_Life + 30));
- }
- }
- public override SFloat Life
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_Life);
- if (0 <= ServerData)
- return ServerData;
-
- return LocalLife;
- }
- }
- public override SFloat LocalSp
- {
- get
- {
- SFloat addSpRate = 0;
- int addSp = 0;
- CalcAdvanceData(Attr_Sp, mBaseData.spRate, out addSpRate, out addSp);
- SFloat sp = mBaseData.sp * (1 + addSpRate) + addSp;
- return (sp + GetAdditionalAttr(Attr_Sp)) * (1 + GetAdditionalAttrPercent(Attr_Sp + 30));
- }
- }
- public override SFloat Sp
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_Sp);
- if (0 <= ServerData)
- return ServerData;
-
- return LocalSp;
- }
- }
- public override SFloat LocalAttack
- {
- get
- {
- SFloat addAtkRate = 0;
- int addAtk = 0;
- CalcAdvanceData(Attr_Attack, mBaseData.atkRate, out addAtkRate, out addAtk);
- SFloat attack = mBaseData.attack * (1 + addAtkRate) + addAtk;
- return (attack + GetAdditionalAttr(Attr_Attack)) * (1 + GetAdditionalAttrPercent(Attr_Attack + 30));
- }
- }
- public override SFloat Attack
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_Attack);
- if (0 <= ServerData)
- return ServerData;
- return LocalAttack;
- }
- }
- public override SFloat LocalMagicAttack
- {
- get
- {
- SFloat addMagicAtkRate = 0;
- int addMagicAtk = 0;
- CalcAdvanceData(Attr_MagicAttack, mBaseData.matkRate, out addMagicAtkRate, out addMagicAtk);
- SFloat magicAttack = mBaseData.magicAttack * (1 + addMagicAtkRate) + addMagicAtk;
- return (magicAttack + GetAdditionalAttr(Attr_MagicAttack)) * (1 + GetAdditionalAttrPercent(Attr_MagicAttack + 30));
- }
- }
- public override SFloat MagicAttack
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_MagicAttack);
- if (0 <= ServerData)
- return ServerData;
- return LocalMagicAttack;
- }
- }
- public override SFloat LocalDefense
- {
- get
- {
- SFloat addDefRate = 0;
- int addDef = 0;
- CalcAdvanceData(Attr_Defense, mBaseData.defRate, out addDefRate, out addDef);
- SFloat def = mBaseData.defense * (1 + addDefRate) + addDef;
- return (def + GetAdditionalAttr(Attr_Defense)) * (1 + GetAdditionalAttrPercent(Attr_Defense + 30));
- }
- }
- public override SFloat Defense
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_Defense);
- if (0 <= ServerData)
- return ServerData;
-
- return LocalDefense;
- }
- }
- public override SFloat LocalMagicDefense
- {
- get
- {
- SFloat addMagicDefRate = 0;
- int addMagicDef = 0;
- CalcAdvanceData(Attr_MagicDefense, mBaseData.mdefRate, out addMagicDefRate, out addMagicDef);
- SFloat magicDef = mBaseData.magicDefense * (1 + addMagicDefRate) + addMagicDef;
- return (magicDef + GetAdditionalAttr(Attr_MagicDefense)) * (1 + GetAdditionalAttrPercent(Attr_MagicDefense + 30));
- }
- }
- public override SFloat MagicDefense
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_MagicDefense);
- if (0 <= ServerData)
- return ServerData;
-
- return LocalMagicDefense;
- }
- }
- public override SFloat LocalCrit
- {
- get
- {
- SFloat addCritRate = 0;
- int addCrit = 0;
- CalcAdvanceData(Attr_Crit, mBaseData.critRate, out addCritRate, out addCrit);
- SFloat crit = mBaseData.crit * (1 + addCritRate) + addCrit;
- return (crit + GetAdditionalAttr(Attr_Crit)) * (1 + GetAdditionalAttrPercent(Attr_Crit + 30));
- }
- }
- public override SFloat Crit
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_Crit);
- if (0 <= ServerData)
- return ServerData;
-
- return LocalCrit;
- }
- }
- public override SFloat LocalDodge
- {
- get
- {
- SFloat addDodgeRate = 0;
- int addDodge = 0;
- CalcAdvanceData(Attr_Dodge, mBaseData.dodgeRate, out addDodgeRate, out addDodge);
- SFloat dodge = mBaseData.dodge * (1 + addDodgeRate) + addDodge;
- return (dodge + GetAdditionalAttr(Attr_Dodge)) * (1 + GetAdditionalAttrPercent(Attr_Dodge + 30));
- }
- }
- public override SFloat Dodge
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_Dodge);
- if (0 <= ServerData)
- return ServerData;
-
- return LocalDodge;
- }
- }
- public override SFloat LocalAttackSpeed
- {
- get { return mBaseData.attackSpeed; }
- }
- public override SFloat AttackSpeed
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_AttackSpeed);
- if (0 <= ServerData)
- return ServerData;
- return LocalAttackSpeed;
- }
- }
- public override SFloat CritDamagePercent
- {
- get { return 0; }
- }
- public override SFloat LocalHit
- {
- get
- {
- SFloat addHitRate = 0;
- int addHit = 0;
- CalcAdvanceData(Attr_Hit, mBaseData.hitRate, out addHitRate, out addHit);
- SFloat hit = mBaseData.hit * (1 + addHitRate) + addHit;
- return (hit + GetAdditionalAttr(Attr_Hit)) * (1 + GetAdditionalAttrPercent(Attr_Hit + 30));
- }
- }
- public override SFloat Hit
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_Hit);
- if (0 <= ServerData)
- return ServerData;
-
- return LocalHit;
- }
- }
- public override SFloat LocalTen
- {
- get
- {
- SFloat addTenRate = 0;
- int addTen = 0;
- CalcAdvanceData(Attr_Ten, mBaseData.tenRate, out addTenRate, out addTen);
- SFloat ten = mBaseData.ten * (1 + addTenRate) + addTen;
- return (ten + GetAdditionalAttr(Attr_Ten)) * (1 + GetAdditionalAttrPercent(Attr_Ten + 30));
- }
- }
- public override SFloat Ten
- {
- get
- {
- SFloat ServerData = GetSeverSecondAttr(Attr_Ten);
- if (0 <= ServerData)
- return ServerData;
-
- return LocalTen;
- }
- }
- #endregion
- public PetActorData(int id):base(id)
- {
- mActorType = ActorType.Pet;
- }
- public override void Initialize(int id, int level, SkillParam[] usedSkills)
- {
- base.Initialize(id, level, usedSkills);
- Gender = (int)Role_Gender.Male;
- mBaseData = new PetBaseData(id);
- mPetAdvanceData = new PetAdvanceData(id);
- mAvatarData = new AvatarData(AvatarID);
- mName = I18N.T(mBaseData.petName);
- mAdvanceMaxLevels = StringUtil.split2Int(GlobalConfig.Instance.GetConfigStrValue(208),';');
- if (mSkillMgr == null)
- {
- mSkillMgr = new SkillManager(this);
- }
- mSkillMgr.InitNormalSkills(mBaseData.normalSkillIds);
- if (usedSkills != null)
- {
- mSkillMgr.InitRandomSkills(usedSkills);
- }
- else
- {
- mSkillMgr.InitRandomSkills(mBaseData.testSkills.ToArray());
- }
- mSkillMgr.SetReserveSkill(mBaseData.emptySkillId);
- ResetFirstSkill();
- valid = mBaseData.valid && mAvatarData.valid;
- }
- public override void RefreshSkills(SkillParam[] usedSkills)
- {
- SetUsedSkill(usedSkills);
- if (usedSkills != null)
- {
- mSkillMgr.InitRandomSkills(usedSkills);
- }
- }
- public void SetStep(int step)
- {
- if (mStep == step) return;
- mStep = step;
- /*ResetAdditionalAttrPercent();
- for(int attrId = ActorData.Attr_STR_Percent; attrId <= ActorData.Attr_VariableSingTime_Percent; attrId++)
- {
- SFloat val = CalcAdditionalAttrPercent(attrId);
- SetAdditionalAttrPercent(attrId, val);
- }*/
- }
- private SFloat CalcAdditionalAttrPercent(int attrId)
- {
- SFloat addTotalAttr = 0;
- for (int idx = mStep; idx >= 1; idx--)
- {
- List<ValType> valList;
- List<ValType> valRateList;
- mPetAdvanceData.advanceData.TryGetValue(idx, out valList);
- mPetAdvanceData.advanceRateData.TryGetValue(idx, out valRateList);
- int addVal = TryGetVal(attrId, valList);
- addTotalAttr += addVal * 0.0001f;
- }
- return addTotalAttr;
- }
- protected override JSONObject BaseToJson()
- {
- JSONObject json = base.BaseToJson();
- json.AddField("advanceLevel", mStep);
- return json;
- }
- public override void Dispose()
- {
- if (mBaseData != null)
- {
- mBaseData.Dispose();
- mBaseData = null;
- }
- base.Dispose();
- }
- private void CalcAdvanceData(int attrId,SFloat baseRate,out SFloat addTotalRate, out int addTotalAttr)
- {
- addTotalRate = 0;
- addTotalAttr = 0;
- for(int idx = mStep;idx>=1;idx--)
- {
- List<ValType> valList;
- List<ValType> valRateList;
- mPetAdvanceData.advanceData.TryGetValue(idx, out valList);
- mPetAdvanceData.advanceRateData.TryGetValue(idx, out valRateList);
- int addVal = TryGetVal(attrId, valList);
- int addRate = TryGetVal(attrId, valRateList);
- if(idx == mStep)
- {
- addTotalRate += ((mLevel - mAdvanceMaxLevels[idx-1]) * addRate)/10000.0f;
- }
- else
- {
- addTotalRate += ((mAdvanceMaxLevels[idx] - mAdvanceMaxLevels[idx - 1]) * addRate) / 10000.0f;
- }
- // addTotalAttr +=addVal;
- }
- if (mStep > 0)
- {
- addTotalRate += (mAdvanceMaxLevels[0] - 1) * baseRate;
- }
- else
- {
- addTotalRate += (mLevel - 1) * baseRate;
- }
- }
- private int TryGetVal(int attrId, List<ValType> list)
- {
- if (list == null) return 0;
- for(int idx =0; idx < list.Count;idx++)
- {
- if(list[idx].id == attrId)
- {
- return list[idx].val;
- }
- }
- return 0;
- }
- }
|