using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace TBTK{ public enum _PerkType{ NewUnitAbility, NewFactionAbility, ModifyUnit, ModifyUnitAbility, ModifyFactionAbility, ModifyEffect, //~ ModifyPerkCost, //~ Unit, //modify a particular set of unit //~ Unit_All, //~ UnitAbility, //modify a particular set of unit ability //~ UnitAbility_All, //~ FactionAbility, //modify a particular set of faction ability //~ FactionAbility_All, //~ NewUnitAbility, //unlock new unit ability //~ NewFactionAbility, //unlock new faction ability } [System.Serializable] public class Perk : TBTKItem { public _PerkType type; public bool repeatable=false; //not in use public bool unlocked=false; public int cost=1; //public int minLevel=1; //min level to reach before becoming available (check GameControl.levelID) public int minPerkPoint=0; //min amount of perk unlocked public List prereq=new List(); //prerequisite perk before becoming available, element is removed as the perk is unlocked in runtime public enum _StatsType{ Modifier, Multiplier } public _StatsType statsType=_StatsType.Multiplier; public bool IsMultiplier(){ return statsType==_StatsType.Multiplier; } public int abilityPID; //for new ability to be add (both faction and unit) public Stats stats=new Stats(); public bool applyToAll=true; public List itemPIDList=new List(); //for item being modified public enum _EffModType{ Append, Replace } public bool AppendEffect(){ return effModType==_EffModType.Append; } public _EffModType effModType=_EffModType.Append; public List effIDList=new List(); //for ability and unit hit effects public List unitImmuneEffIDList=new List(); //effect that unit is immuned to public bool IsUnlocked(){ return unlocked; } public int GetCost(){ return cost; } public void VerifyItemPIDList(){ for(int i=0; i0){ string text=GetMissingPrereq(); if(text!="") return "Require: "+text; //~ string text="Require: "; bool req=false; //~ for(int i=0; i( prereq ); clone.statsType=statsType; clone.abilityPID=abilityPID; clone.stats=stats.Clone(); clone.applyToAll=applyToAll; clone.itemPIDList=new List( itemPIDList ); clone.effModType=effModType; clone.effIDList=new List( effIDList ); clone.unitImmuneEffIDList=new List( unitImmuneEffIDList ); return clone; } public bool CheckID(int prefabID){ return applyToAll ? true : itemPIDList.Contains(prefabID); //if(applyToAll) return true; //~ else if(type==_PerkType.ModifyUnit) return unitPIDList.Contains(prefabID); //~ else if(type==_PerkType.ModifyUnitAbility) return uAbilityPIDList.Contains(prefabID); //~ else if(type==_PerkType.ModifyFactionAbility) return fAffectPIDList.Contains(prefabID); //~ else if(type==_PerkType.ModifyEffect) return effectPIDList.Contains(prefabID); //~ return false; } public List ModifyEffectList(int prefabID, List list){ if(effIDList.Count==0 || !CheckID(prefabID)) return list; if(AppendEffect()){ for(int i=0; i ModifyImmuneEffectList(int prefabID, List list){ if(unitImmuneEffIDList.Count==0 || !CheckID(prefabID)) return list; for(int i=0; i { return CheckID(prefabID) ? abilityPID : -1 ; }; return; } if(!IsMultiplier()){ GetModHP = (prefabID) => { return CheckID(prefabID) ? stats.hp : 0 ; }; GetModAP = (prefabID) => { return CheckID(prefabID) ? stats.ap : 0 ; }; GetModHPRegen = (prefabID) => { return CheckID(prefabID) ? stats.hpRegen : 0 ; }; GetModAPRegen = (prefabID) => { return CheckID(prefabID) ? stats.apRegen : 0 ; }; GetModAttack = (prefabID) => { return CheckID(prefabID) ? stats.attack : 0 ; }; GetModDefense = (prefabID) => { return CheckID(prefabID) ? stats.defense : 0 ; }; GetModHit = (prefabID) => { return CheckID(prefabID) ? stats.hit : 0 ; }; GetModDodge = (prefabID) => { return CheckID(prefabID) ? stats.dodge : 0 ; }; GetModDmgHPMin = (prefabID) => { return CheckID(prefabID) ? stats.dmgHPMin : 0 ; }; GetModDmgHPMax = (prefabID) => { return CheckID(prefabID) ? stats.dmgHPMax : 0 ; }; GetModDmgAPMin = (prefabID) => { return CheckID(prefabID) ? stats.dmgAPMin : 0 ; }; GetModDmgAPMax = (prefabID) => { return CheckID(prefabID) ? stats.dmgAPMax : 0 ; }; GetModCritC = (prefabID) => { return CheckID(prefabID) ? stats.critChance : 0 ; }; GetModCritR = (prefabID) => { return CheckID(prefabID) ? stats.critReduc : 0 ; }; GetModCritM = (prefabID) => { return CheckID(prefabID) ? stats.critMultiplier : 0 ; }; GetModCDmgMul = (prefabID) => { return CheckID(prefabID) ? stats.cDmgMultip : 0 ; }; GetModCHitPen = (prefabID) => { return CheckID(prefabID) ? stats.cHitPenalty : 0 ; }; GetModCCritPen = (prefabID) => { return CheckID(prefabID) ? stats.cCritPenalty : 0 ; }; GetModODmgMul = (prefabID) => { return CheckID(prefabID) ? stats.oDmgMultip : 0 ; }; GetModOHitPen = (prefabID) => { return CheckID(prefabID) ? stats.oHitPenalty : 0 ; }; GetModOCritPen = (prefabID) => { return CheckID(prefabID) ? stats.oCritPenalty : 0 ; }; GetModARange = (prefabID) => { return CheckID(prefabID) ? stats.attackRange : 0 ; }; GetModARangeMin = (prefabID) => { return CheckID(prefabID) ? stats.attackRangeMin : 0 ; }; GetModMRange = (prefabID) => { return CheckID(prefabID) ? stats.moveRange : 0 ; }; GetModTPrioity = (prefabID) => { return CheckID(prefabID) ? stats.turnPriority : 0 ; }; GetModSight = (prefabID) => { return CheckID(prefabID) ? stats.sight : 0 ; }; GetModMoveLim = (prefabID) => { return CheckID(prefabID) ? stats.moveLimit : 0 ; }; GetModAttackLim = (prefabID) => { return CheckID(prefabID) ? stats.attackLimit : 0 ; }; GetModCounterLim = (prefabID) => { return CheckID(prefabID) ? stats.counterLimit : 0 ; }; GetModAbilityLim = (prefabID) => { return CheckID(prefabID) ? stats.abilityLimit : 0 ; }; GetModAbDur = (prefabID) => { return CheckID(prefabID) ? stats.abDuration : 0 ; }; GetModAbCD = (prefabID) => { return CheckID(prefabID) ? stats.abCooldown : 0 ; }; GetModAbUseLim = (prefabID) => { return CheckID(prefabID) ? stats.abUseLimit : 0 ; }; GetModAbAPCost = (prefabID) => { return CheckID(prefabID) ? stats.abApCost : 0 ; }; GetModAbAOE = (prefabID) => { return CheckID(prefabID) ? stats.abAoeRange : 0 ; }; GetModAbEffHitC = (prefabID) => { return CheckID(prefabID) ? stats.abEffHitChance : 0 ; }; GetModEffDuration = (prefabID) => { return CheckID(prefabID) ? stats.effduration : 0 ; }; GetModEffHP = (prefabID) => { return CheckID(prefabID) ? stats.effHP : 0 ; }; GetModEffAP = (prefabID) => { return CheckID(prefabID) ? stats.effAP : 0 ; }; } if(IsMultiplier()){ GetMulHP = (prefabID) => { return CheckID(prefabID) ? stats.hp : 1 ; }; GetMulAP = (prefabID) => { return CheckID(prefabID) ? stats.ap : 1 ; }; GetMulHPRegen = (prefabID) => { return CheckID(prefabID) ? stats.hpRegen : 1 ; }; GetMulAPRegen = (prefabID) => { return CheckID(prefabID) ? stats.apRegen : 1 ; }; GetMulAttack = (prefabID) => { return CheckID(prefabID) ? stats.attack : 1 ; }; GetMulDefense = (prefabID) => { return CheckID(prefabID) ? stats.defense : 1 ; }; GetMulHit = (prefabID) => { return CheckID(prefabID) ? stats.hit : 1 ; }; GetMulDodge = (prefabID) => { return CheckID(prefabID) ? stats.dodge : 1 ; }; GetMulDmgHPMin = (prefabID) => { return CheckID(prefabID) ? stats.dmgHPMin : 1 ; }; GetMulDmgHPMax = (prefabID) => { return CheckID(prefabID) ? stats.dmgHPMax : 1 ; }; GetMulDmgAPMin = (prefabID) => { return CheckID(prefabID) ? stats.dmgAPMin : 1 ; }; GetMulDmgAPMax = (prefabID) => { return CheckID(prefabID) ? stats.dmgAPMax : 1 ; }; GetMulCritC = (prefabID) => { return CheckID(prefabID) ? stats.critChance : 1 ; }; GetMulCritR = (prefabID) => { return CheckID(prefabID) ? stats.critReduc : 1 ; }; GetMulCritM = (prefabID) => { return CheckID(prefabID) ? stats.critMultiplier : 1 ; }; GetMulCDmgMul = (prefabID) => { return CheckID(prefabID) ? stats.cDmgMultip : 1 ; }; GetMulCHitPen = (prefabID) => { return CheckID(prefabID) ? stats.cHitPenalty : 1 ; }; GetMulCCritPen = (prefabID) => { return CheckID(prefabID) ? stats.cCritPenalty : 1 ; }; GetMulODmgMul = (prefabID) => { return CheckID(prefabID) ? stats.oDmgMultip : 1 ; }; GetMulOHitPen = (prefabID) => { return CheckID(prefabID) ? stats.oHitPenalty : 1 ; }; GetMulOCritPen = (prefabID) => { return CheckID(prefabID) ? stats.oCritPenalty : 1 ; }; GetMulARange = (prefabID) => { return CheckID(prefabID) ? stats.attackRange : 1 ; }; GetMulARangeMin = (prefabID) => { return CheckID(prefabID) ? stats.attackRangeMin : 1 ; }; GetMulMRange = (prefabID) => { return CheckID(prefabID) ? stats.moveRange : 1 ; }; GetMulTPrioity = (prefabID) => { return CheckID(prefabID) ? stats.turnPriority : 1 ; }; GetMulSight = (prefabID) => { return CheckID(prefabID) ? stats.sight : 1 ; }; GetMulMoveLim = (prefabID) => { return CheckID(prefabID) ? stats.moveLimit : 1 ; }; GetMulAttackLim = (prefabID) => { return CheckID(prefabID) ? stats.attackLimit : 1 ; }; GetMulCounterLim = (prefabID) => { return CheckID(prefabID) ? stats.counterLimit : 1 ; }; GetMulAbilityLim = (prefabID) => { return CheckID(prefabID) ? stats.abilityLimit : 1 ; }; GetMulAbDur = (prefabID) => { return CheckID(prefabID) ? stats.abDuration : 1 ; }; GetMulAbCD = (prefabID) => { return CheckID(prefabID) ? stats.abCooldown : 1 ; }; GetMulAbUseLim = (prefabID) => { return CheckID(prefabID) ? stats.abUseLimit : 1 ; }; GetMulAbAPCost = (prefabID) => { return CheckID(prefabID) ? stats.abApCost : 1 ; }; GetMulAbAOE = (prefabID) => { return CheckID(prefabID) ? stats.abAoeRange : 1 ; }; GetMulAbEffHitC = (prefabID) => { return CheckID(prefabID) ? stats.abEffHitChance : 1 ; }; GetMulEffDuration = (prefabID) => { return CheckID(prefabID) ? stats.effduration : 1 ; }; GetMulEffHP = (prefabID) => { return CheckID(prefabID) ? stats.effHP : 1 ; }; GetMulEffAP = (prefabID) => { return CheckID(prefabID) ? stats.effAP : 1 ; }; } } public Func GetAbilityPID = (prefabID) => { return -1 ; }; public Func GetModHP = (prefabID) => { return 0; }; public Func GetModAP = (prefabID) => { return 0; }; public Func GetModHPRegen = (prefabID) => { return 0; }; public Func GetModAPRegen = (prefabID) => { return 0; }; public Func GetModAttack = (prefabID) => { return 0; }; public Func GetModDefense = (prefabID) => { return 0; }; public Func GetModHit = (prefabID) => { return 0; }; public Func GetModDodge = (prefabID) => { return 0; }; public Func GetModDmgHPMin = (prefabID) => { return 0; }; public Func GetModDmgHPMax = (prefabID) => { return 0; }; public Func GetModDmgAPMin = (prefabID) => { return 0; }; public Func GetModDmgAPMax = (prefabID) => { return 0; }; public Func GetModCritC = (prefabID) => { return 0; }; public Func GetModCritR = (prefabID) => { return 0; }; public Func GetModCritM = (prefabID) => { return 0; }; public Func GetModCDmgMul = (prefabID) => { return 0; }; public Func GetModCHitPen = (prefabID) => { return 0; }; public Func GetModCCritPen = (prefabID) => { return 0; }; public Func GetModODmgMul = (prefabID) => { return 0; }; public Func GetModOHitPen = (prefabID) => { return 0; }; public Func GetModOCritPen = (prefabID) => { return 0; }; public Func GetModARange = (prefabID) => { return 0; }; public Func GetModARangeMin = (prefabID) => { return 0; }; public Func GetModMRange = (prefabID) => { return 0; }; public Func GetModTPrioity = (prefabID) => { return 0; }; public Func GetModSight = (prefabID) => { return 0; }; public Func GetModMoveLim = (prefabID) => { return 0; }; public Func GetModAttackLim = (prefabID) => { return 0; }; public Func GetModCounterLim = (prefabID) => { return 0; }; public Func GetModAbilityLim = (prefabID) => { return 0; }; public Func GetModAbDur = (prefabID) => { return 0; }; public Func GetModAbCD = (prefabID) => { return 0; }; public Func GetModAbUseLim = (prefabID) => { return 0; }; public Func GetModAbAPCost = (prefabID) => { return 0; }; public Func GetModAbAOE = (prefabID) => { return 0; }; public Func GetModAbEffHitC = (prefabID) => { return 0; }; public Func GetModAbSwFacDur = (prefabID) => { return 0; }; public Func GetModEffDuration = (prefabID) => { return 0; }; public Func GetModEffHP = (prefabID) => { return 0; }; public Func GetModEffAP = (prefabID) => { return 0; }; public Func GetMulHP = (prefabID) => { return 1; }; public Func GetMulAP = (prefabID) => { return 1; }; public Func GetMulHPRegen = (prefabID) => { return 1; }; public Func GetMulAPRegen = (prefabID) => { return 1; }; public Func GetMulAttack = (prefabID) => { return 1; }; public Func GetMulDefense = (prefabID) => { return 1; }; public Func GetMulHit = (prefabID) => { return 1; }; public Func GetMulDodge = (prefabID) => { return 1; }; public Func GetMulDmgHPMin = (prefabID) => { return 1; }; public Func GetMulDmgHPMax = (prefabID) => { return 1; }; public Func GetMulDmgAPMin = (prefabID) => { return 1; }; public Func GetMulDmgAPMax = (prefabID) => { return 1; }; public Func GetMulCritC = (prefabID) => { return 1; }; public Func GetMulCritR = (prefabID) => { return 1; }; public Func GetMulCritM = (prefabID) => { return 1; }; public Func GetMulCDmgMul = (prefabID) => { return 1; }; public Func GetMulCHitPen = (prefabID) => { return 1; }; public Func GetMulCCritPen = (prefabID) => { return 1; }; public Func GetMulODmgMul = (prefabID) => { return 1; }; public Func GetMulOHitPen = (prefabID) => { return 1; }; public Func GetMulOCritPen = (prefabID) => { return 1; }; public Func GetMulARange = (prefabID) => { return 1; }; public Func GetMulARangeMin = (prefabID) => { return 1; }; public Func GetMulMRange = (prefabID) => { return 1; }; public Func GetMulTPrioity = (prefabID) => { return 1; }; public Func GetMulSight = (prefabID) => { return 1; }; public Func GetMulMoveLim = (prefabID) => { return 1; }; public Func GetMulAttackLim = (prefabID) => { return 1; }; public Func GetMulCounterLim = (prefabID) => { return 1; }; public Func GetMulAbilityLim = (prefabID) => { return 1; }; public Func GetMulAbDur = (prefabID) => { return 1; }; public Func GetMulAbCD = (prefabID) => { return 1; }; public Func GetMulAbUseLim = (prefabID) => { return 1; }; public Func GetMulAbAPCost = (prefabID) => { return 1; }; public Func GetMulAbAOE = (prefabID) => { return 1; }; public Func GetMulAbEffHitC = (prefabID) => { return 1; }; public Func GetMulAbSwFacDur = (prefabID) => { return 1; }; public Func GetMulEffDuration = (prefabID) => { return 1; }; public Func GetMulEffHP = (prefabID) => { return 1; }; public Func GetMulEffAP = (prefabID) => { return 1; }; } }