public bool CanLookup( string fname, LookupType type, SkillDef scontext=null, Character ccontext=null, Character tcontext=null, Equipment econtext=null, Item icontext=null, Formula f=null ) { switch(type) { case LookupType.Auto: return (icontext != null && icontext.HasParam(fname)) || (econtext != null && econtext.HasParam(fname)) || (scontext != null && scontext.HasParam(fname)) || (ccontext != null && ccontext.HasStat(fname)) || (tcontext != null && tcontext.HasStat(fname)); case LookupType.SkillParam: return scontext.HasParam(fname); case LookupType.ItemParam: { if(icontext == null && scontext != null) { icontext = scontext.InvolvedItem; } if(icontext == null && econtext != null) { icontext = econtext.baseItem; } return icontext != null && icontext.HasParam(fname); } case LookupType.ReactedItemParam: { icontext = scontext.currentReactedSkill.InvolvedItem; return icontext != null && icontext.HasParam(fname); } case LookupType.ActorStat: if(scontext != null) { return scontext.character.HasStat(fname); } if(econtext != null) { return econtext.wielder.HasStat(fname); } if(ccontext != null) { return ccontext.HasStat(fname); } return false; case LookupType.ActorMountStat: { Character m = null; if(scontext != null) { m = scontext.currentTargetCharacter.mountedCharacter; } if(econtext != null) { m = econtext.wielder.mountedCharacter; } if(tcontext != null) { m = tcontext.mountedCharacter; } if(m != null) { return m.HasStat(fname); } // Debug.Log("can lookup "+fname+" on mount "+m+" ? "+(m != null && m.HasStat(fname))); return false; } case LookupType.ActorMounterStat: { Character m = null; if(scontext != null) { m = scontext.currentTargetCharacter.mountingCharacter; } if(econtext != null) { m = econtext.wielder.mountingCharacter; } if(tcontext != null) { m = tcontext.mountingCharacter; } if(m != null) { return m.HasStat(fname); } return false; } case LookupType.ActorEquipmentParam: if(scontext != null) { ccontext = scontext.character; } else if(ccontext == null && econtext != null) { if(econtext.Matches(f.equipmentSlots, f.equipmentCategories)) { return econtext.HasParam(fname); } else { ccontext = econtext.wielder; } } return CanLookupEquipmentParamOn(fname, type, ccontext, f); case LookupType.ActorMountEquipmentParam: if(scontext != null) { ccontext = scontext.character.mountedCharacter; } else if(ccontext == null && econtext != null) { if(econtext.Matches(f.equipmentSlots, f.equipmentCategories)) { return econtext.HasParam(fname); } else { ccontext = econtext.wielder.mountedCharacter; } } return CanLookupEquipmentParamOn(fname, type, ccontext, f); case LookupType.ActorMounterEquipmentParam: if(scontext != null) { ccontext = scontext.character.mountingCharacter; } else if(ccontext == null && econtext != null) { if(econtext.Matches(f.equipmentSlots, f.equipmentCategories)) { return econtext.HasParam(fname); } else { ccontext = econtext.wielder.mountingCharacter; } } return CanLookupEquipmentParamOn(fname, type, ccontext, f); case LookupType.ActorSkillParam: if(scontext != null) { return scontext.HasParam(fname); } return false; case LookupType.ActorStatusEffect: if(scontext != null) { return scontext.character.HasStatusEffect(fname); } if(econtext != null) { return econtext.wielder.HasStatusEffect(fname); } if(ccontext != null) { return ccontext.HasStatusEffect(fname); } return false; case LookupType.ActorMountStatusEffect: { Character m = null; if(scontext != null) { m = scontext.character.mountedCharacter; } if(econtext != null) { m = econtext.wielder.mountedCharacter; } if(ccontext != null) { m = ccontext.mountedCharacter; } return m != null && m.HasStatusEffect(fname); } case LookupType.ActorMounterStatusEffect: { Character m = null; if(scontext != null) { m = scontext.character.mountingCharacter; } if(econtext != null) { m = econtext.wielder.mountingCharacter; } if(ccontext != null) { m = ccontext.mountingCharacter; } return m != null && m.HasStatusEffect(fname); } case LookupType.TargetStat: if(scontext != null) { return scontext.currentTargetCharacter.HasStat(fname); } if(tcontext != null) { return tcontext.HasStat(fname); } return false; case LookupType.TargetMountStat: { Character m = null; if(scontext != null) { m = scontext.currentTargetCharacter.mountedCharacter; } if(tcontext != null) { m = tcontext.mountedCharacter; } if(m != null) { return m.HasStat(fname); } return false; } case LookupType.TargetMounterStat: { Character m = null; if(scontext != null) { m = scontext.currentTargetCharacter.mountingCharacter; } if(tcontext != null) { m = tcontext.mountingCharacter; } if(m != null) { return m.HasStat(fname); } return false; } case LookupType.TargetStatusEffect: if(scontext != null) { return scontext.currentTargetCharacter.HasStatusEffect(fname); } if(tcontext != null) { return tcontext.HasStatusEffect(fname); } return false; case LookupType.TargetMountStatusEffect: { Character m = null; if(scontext != null) { m = scontext.currentTargetCharacter.mountedCharacter; } if(tcontext != null) { m = tcontext.mountedCharacter; } return m != null && m.HasStatusEffect(fname); } case LookupType.TargetMounterStatusEffect: { Character m = null; if(scontext != null) { m = scontext.currentTargetCharacter.mountingCharacter; } if(tcontext != null) { m = tcontext.mountingCharacter; } return m != null && m.HasStatusEffect(fname); } case LookupType.TargetEquipmentParam: if(scontext != null) { ccontext = scontext.currentTargetCharacter; } else if(tcontext != null) { ccontext = tcontext; } else { ccontext = null; } return CanLookupEquipmentParamOn(fname, type, ccontext, f); case LookupType.TargetMountEquipmentParam: if(scontext != null) { ccontext = scontext.currentTargetCharacter.mountedCharacter; } else if(tcontext != null) { ccontext = tcontext.mountedCharacter; } else { ccontext = null; } return CanLookupEquipmentParamOn(fname, type, ccontext, f); case LookupType.TargetMounterEquipmentParam: if(scontext != null) { ccontext = scontext.currentTargetCharacter.mountingCharacter; } else if(tcontext != null) { ccontext = tcontext.mountingCharacter; } else { ccontext = null; } return CanLookupEquipmentParamOn(fname, type, ccontext, f); case LookupType.TargetSkillParam: case LookupType.ActorMountSkillParam: case LookupType.ActorMounterSkillParam: case LookupType.TargetMountSkillParam: case LookupType.TargetMounterSkillParam: return false; case LookupType.NamedFormula: return HasFormula(fname); case LookupType.ReactedSkillParam: if(scontext != null) { return true; } return false; case LookupType.ReactedEffectType: if(scontext != null) { string[] fnames = f.searchReactedStatNames; return scontext.currentReactedSkill.lastEffects. Where(fx => fx.Matches(fnames, f.searchReactedStatChanges, f.searchReactedEffectCategories)). Count() > 0; } return false; case LookupType.SkillEffectType: if(scontext != null) { string[] fnames = f.searchReactedStatNames; return scontext.lastEffects. Where(fx => fx.Matches(fnames, f.searchReactedStatChanges, f.searchReactedEffectCategories)). Count() > 0; } return false; } return false; }
public bool CanLookup( string fname, LookupType type, SkillDef scontext = null, Character ccontext = null, Character tcontext = null, Equipment econtext = null, Item icontext = null, Formula f = null ) { switch (type) { case LookupType.Auto: return((icontext != null && icontext.HasParam(fname)) || (econtext != null && econtext.HasParam(fname)) || (scontext != null && scontext.HasParam(fname)) || (ccontext != null && ccontext.HasStat(fname)) || (tcontext != null && tcontext.HasStat(fname))); case LookupType.SkillParam: return(scontext.HasParam(fname)); case LookupType.ItemParam: { if (icontext == null && scontext != null) { icontext = scontext.InvolvedItem; } if (icontext == null && econtext != null) { icontext = econtext.baseItem; } return(icontext != null && icontext.HasParam(fname)); } case LookupType.ReactedItemParam: { icontext = scontext.currentReactedSkill.InvolvedItem; return(icontext != null && icontext.HasParam(fname)); } case LookupType.ActorStat: if (scontext != null) { return(scontext.character.HasStat(fname)); } if (econtext != null) { return(econtext.wielder.HasStat(fname)); } if (ccontext != null) { return(ccontext.HasStat(fname)); } return(false); case LookupType.ActorMountStat: { Character m = null; if (scontext != null) { m = scontext.currentTargetCharacter.mountedCharacter; } if (econtext != null) { m = econtext.wielder.mountedCharacter; } if (tcontext != null) { m = tcontext.mountedCharacter; } if (m != null) { return(m.HasStat(fname)); } // Debug.Log("can lookup "+fname+" on mount "+m+" ? "+(m != null && m.HasStat(fname))); return(false); } case LookupType.ActorMounterStat: { Character m = null; if (scontext != null) { m = scontext.currentTargetCharacter.mountingCharacter; } if (econtext != null) { m = econtext.wielder.mountingCharacter; } if (tcontext != null) { m = tcontext.mountingCharacter; } if (m != null) { return(m.HasStat(fname)); } return(false); } case LookupType.ActorEquipmentParam: if (scontext != null) { ccontext = scontext.character; } else if (ccontext == null && econtext != null) { if (econtext.Matches(f.equipmentSlots, f.equipmentCategories)) { return(econtext.HasParam(fname)); } else { ccontext = econtext.wielder; } } return(CanLookupEquipmentParamOn(fname, type, ccontext, f)); case LookupType.ActorMountEquipmentParam: if (scontext != null) { ccontext = scontext.character.mountedCharacter; } else if (ccontext == null && econtext != null) { if (econtext.Matches(f.equipmentSlots, f.equipmentCategories)) { return(econtext.HasParam(fname)); } else { ccontext = econtext.wielder.mountedCharacter; } } return(CanLookupEquipmentParamOn(fname, type, ccontext, f)); case LookupType.ActorMounterEquipmentParam: if (scontext != null) { ccontext = scontext.character.mountingCharacter; } else if (ccontext == null && econtext != null) { if (econtext.Matches(f.equipmentSlots, f.equipmentCategories)) { return(econtext.HasParam(fname)); } else { ccontext = econtext.wielder.mountingCharacter; } } return(CanLookupEquipmentParamOn(fname, type, ccontext, f)); case LookupType.ActorSkillParam: if (scontext != null) { return(scontext.HasParam(fname)); } return(false); case LookupType.ActorStatusEffect: if (scontext != null) { return(scontext.character.HasStatusEffect(fname)); } if (econtext != null) { return(econtext.wielder.HasStatusEffect(fname)); } if (ccontext != null) { return(ccontext.HasStatusEffect(fname)); } return(false); case LookupType.ActorMountStatusEffect: { Character m = null; if (scontext != null) { m = scontext.character.mountedCharacter; } if (econtext != null) { m = econtext.wielder.mountedCharacter; } if (ccontext != null) { m = ccontext.mountedCharacter; } return(m != null && m.HasStatusEffect(fname)); } case LookupType.ActorMounterStatusEffect: { Character m = null; if (scontext != null) { m = scontext.character.mountingCharacter; } if (econtext != null) { m = econtext.wielder.mountingCharacter; } if (ccontext != null) { m = ccontext.mountingCharacter; } return(m != null && m.HasStatusEffect(fname)); } case LookupType.TargetStat: if (scontext != null) { return(scontext.currentTargetCharacter.HasStat(fname)); } if (tcontext != null) { return(tcontext.HasStat(fname)); } return(false); case LookupType.TargetMountStat: { Character m = null; if (scontext != null) { m = scontext.currentTargetCharacter.mountedCharacter; } if (tcontext != null) { m = tcontext.mountedCharacter; } if (m != null) { return(m.HasStat(fname)); } return(false); } case LookupType.TargetMounterStat: { Character m = null; if (scontext != null) { m = scontext.currentTargetCharacter.mountingCharacter; } if (tcontext != null) { m = tcontext.mountingCharacter; } if (m != null) { return(m.HasStat(fname)); } return(false); } case LookupType.TargetStatusEffect: if (scontext != null) { return(scontext.currentTargetCharacter.HasStatusEffect(fname)); } if (tcontext != null) { return(tcontext.HasStatusEffect(fname)); } return(false); case LookupType.TargetMountStatusEffect: { Character m = null; if (scontext != null) { m = scontext.currentTargetCharacter.mountedCharacter; } if (tcontext != null) { m = tcontext.mountedCharacter; } return(m != null && m.HasStatusEffect(fname)); } case LookupType.TargetMounterStatusEffect: { Character m = null; if (scontext != null) { m = scontext.currentTargetCharacter.mountingCharacter; } if (tcontext != null) { m = tcontext.mountingCharacter; } return(m != null && m.HasStatusEffect(fname)); } case LookupType.TargetEquipmentParam: if (scontext != null) { ccontext = scontext.currentTargetCharacter; } else if (tcontext != null) { ccontext = tcontext; } else { ccontext = null; } return(CanLookupEquipmentParamOn(fname, type, ccontext, f)); case LookupType.TargetMountEquipmentParam: if (scontext != null) { ccontext = scontext.currentTargetCharacter.mountedCharacter; } else if (tcontext != null) { ccontext = tcontext.mountedCharacter; } else { ccontext = null; } return(CanLookupEquipmentParamOn(fname, type, ccontext, f)); case LookupType.TargetMounterEquipmentParam: if (scontext != null) { ccontext = scontext.currentTargetCharacter.mountingCharacter; } else if (tcontext != null) { ccontext = tcontext.mountingCharacter; } else { ccontext = null; } return(CanLookupEquipmentParamOn(fname, type, ccontext, f)); case LookupType.TargetSkillParam: case LookupType.ActorMountSkillParam: case LookupType.ActorMounterSkillParam: case LookupType.TargetMountSkillParam: case LookupType.TargetMounterSkillParam: return(false); case LookupType.NamedFormula: return(HasFormula(fname)); case LookupType.ReactedSkillParam: if (scontext != null) { return(true); } return(false); case LookupType.ReactedEffectType: if (scontext != null) { string[] fnames = f.searchReactedStatNames; return(scontext.currentReactedSkill.lastEffects. Where(fx => fx.Matches(fnames, f.searchReactedStatChanges, f.searchReactedEffectCategories)). Count() > 0); } return(false); case LookupType.SkillEffectType: if (scontext != null) { string[] fnames = f.searchReactedStatNames; return(scontext.lastEffects. Where(fx => fx.Matches(fnames, f.searchReactedStatChanges, f.searchReactedEffectCategories)). Count() > 0); } return(false); } return(false); }