public PassiveEffect hasPassiveEffectForTime(EWhenToApply aTimeToApply,float aTargetHPVal,float aMyHP,ElementalType aAttackerType,ElementalType aDefendentType,BetterList<BattleMonster> aAllies,BetterList<BattleMonster> aOpponents,ERangedStatus aRange,BattleMonster aAttacker,ElementalType aAttackingMoveElement,EStatusEffects aStatusEffectInduced = EStatusEffects.None) { for(int i = 0;i<_effects.size;i++) { if(_effects[i].applyAt==aTimeToApply) { if((_effects[i].applyAt==EWhenToApply.AtEndOfMoveQueue)|| (_effects[i].applyAt==EWhenToApply.BattleStart)|| (_effects[i].applyAt==EWhenToApply.WhenHit) ) { return _effects[i]; } if((_effects[i].applyAt==EWhenToApply.WhenAttackingWithMoveType)&&(aAttackingMoveElement==_effects[i].whenMoveElementType)) { return _effects[i]; } if((_effects[i].applyAt==EWhenToApply.WhenTheirHPHigherThan)&&(aTargetHPVal>_effects[i].HPPercentage)) { return _effects[i]; } if((_effects[i].applyAt==EWhenToApply.WhenTheirHPLowerThan)&&(aTargetHPVal<_effects[i].HPPercentage)) { return _effects[i]; } if((_effects[i].applyAt==EWhenToApply.WhenMyHPHigherThan)&&(aMyHP>(1/_effects[i].HPPercentage))) { return _effects[i]; } if((_effects[i].applyAt==EWhenToApply.WhenMyHPLowerThan)&&(aMyHP<(1/_effects[i].HPPercentage))) { return _effects[i]; } if((_effects[i].applyAt==EWhenToApply.WhenAttackerIsType)&&(aAttackerType==_effects[i].whenMoveElementType)) { return _effects[i]; } if((_effects[i].applyAt==EWhenToApply.WhenDefendentIsType)&&(aDefendentType==_effects[i].whenMoveElementType)) { return _effects[i]; } if((_effects[i].applyAt==EWhenToApply.WhenAlliesAreType)&&(listContainsElement(_effects[i].whenMoveElementType,aAllies).size>0)) { return _effects[i]; } if((_effects[i].applyAt==EWhenToApply.WhenDefendentIsType)&&(listContainsElement(_effects[i].whenMoveElementType,aOpponents).size>0)) { return _effects[i]; } if((_effects[i].applyAt==EWhenToApply.WhenOneOpponentisSameAsEffectOwner)&&(listContainsElement(aAttackerType,aOpponents).size>0)) { return _effects[i]; } if((_effects[i].applyAt==EWhenToApply.WhenHitByMoveType)&&(aAttackerType==_effects[i].whenMoveElementType)) { return _effects[i]; } if((_effects[i].applyAt==EWhenToApply.WhenHitByRangeType)&&(aRange==_effects[i].whenRangeType)) { return _effects[i]; } if((_effects[i].applyAt==EWhenToApply.WhenOpponentHasStatusEffect)&&(listContainsStatusEffect(_effects[i].whenStatusEffects,aOpponents).size>0)) { return _effects[i]; } if((_effects[i].applyAt==EWhenToApply.WhenStatusEffectsSuffered)&&((_effects[i].whenStatusEffects&aAttacker.statusEffects)!=EStatusEffects.None)) { return _effects[i]; } if((_effects[i].applyAt==EWhenToApply.WhenHitByMoveTypeAtEndOfMoveQueue)&&(_effects[i].whenMoveElementType==aAttackingMoveElement)) { return _effects[i]; } } } return null; }
public PassiveEffect (PassiveEffectsRow aRow) { id = aRow._ID; name = aRow._EffectName; elementType = ElementalLibrary.REF.getElement(aRow._EffectType); description = aRow._Description; moveRef = MovesLib.REF.getMove(aRow._TakeEffectsFromMove); switch(aRow._EffectClass) { case("Class 1"):effectClass = 1;break; case("Class 2"):effectClass = 2;break; case("Class 3"):effectClass = 4;break; case("Class 4"):effectClass = 8;break; } weighting = aRow._Weighting; switch(aRow._ApplyWhen) { case("At battle start"):applyAt = EWhenToApply.BattleStart;break; case("When hit by %FIELDMOVETYPE%"):applyAt = EWhenToApply.WhenHitByMoveType;break; case("When using move of type %FIELDMOVETYPE%"):applyAt = EWhenToApply.WhenAttackingWithMoveType;break; case("When %STATUSEFFECTSUFFERED%"):applyAt = EWhenToApply.WhenStatusEffectsSuffered;break; case("When defendant is same type"):applyAt = EWhenToApply.WhenDefendentIsType;break; case("When allies are of type %FIELDMOVETYPE%"):applyAt = EWhenToApply.WhenAlliesAreType;break; case("When hit"):applyAt = EWhenToApply.WhenHit;break; case("When HP Higher than %HPPERCENTAGE%"):applyAt = EWhenToApply.WhenMyHPHigherThan;break; case("When HP Lower than %HPPERCENTAGE%"):applyAt = EWhenToApply.WhenMyHPLowerThan;break; case("When defendant HP Lower than %HPPERCENTAGE%"):applyAt = EWhenToApply.WhenTheirHPLowerThan;break; case("When defendant HP Higher than %HPPERCENTAGE%"):applyAt = EWhenToApply.WhenTheirHPHigherThan;break; case("When hit by %MOVERANGETYPE%"):applyAt = EWhenToApply.WhenHitByRangeType;break; case("At end of move queue"):applyAt = EWhenToApply.AtEndOfMoveQueue;break; case("When hit by %FIELDMOVETYPE% at end of move queue"):applyAt = EWhenToApply.WhenHitByMoveTypeAtEndOfMoveQueue;break; case("When one opponent is %FIELDMOVETYPE%"):applyAt = EWhenToApply.WhenOneOpponentisType;break; case("When one opponent is same as effect owner"):applyAt = EWhenToApply.WhenOneOpponentisSameAsEffectOwner;break; } whenMoveElementType = ElementalLibrary.REF.getElement(aRow._MoveElementType); switch(aRow._MoveRangeType) { default: this.whenRangeType = ERangedStatus.MeleeAndRanged;break; case("Melee"):this.whenRangeType = ERangedStatus.Melee;break; case("Ranged"):this.whenRangeType = ERangedStatus.Ranged;break; } whenStatusEffects = (EStatusEffects) aRow._StatusEffectSuffered; HPPercentage = aRow._HPPercentage; }
public float applyPassiveEffectToMonsters(EWhenToApply aWhen,PassiveEffect aEffect,BattleMonster aPassiveEffectOwner,EMonsterPos aEffectOwnerPosition,MoveQueueItem aMoveQueueItem) { float delayAmount = 0f; if(aEffect.applyAt==aWhen) { if(this.containsMonster(aPassiveEffectOwner)) { // Check Splash on this passive effect BetterList<BattleMonster> monsters = new BetterList<BattleMonster>(); if(aMoveQueueItem!=null) monsters = this.getBoostTargetsForMove(positionForMonster(aPassiveEffectOwner),aEffect.moveRef,(BattleMonster) aMoveQueueItem.actioningMonster); else monsters = this.getBoostTargetsForMove(positionForMonster(aPassiveEffectOwner),aEffect.moveRef,aPassiveEffectOwner); if(aEffect.moveRef==null) { Debug.LogError("Passive effect for: "+aPassiveEffectOwner.name+" is "+aEffect.moveRef+" passive effect is: "+aPassiveEffectOwner.monster.passiveEffect.name); return 0f; } if(aEffect.moveRef.elementType!=ElementalLibrary.REF.getElement("Normal")) { // This passive effect can only be applied to monsters of type: aEffect.moveRef.elementType for(int i = 0;i<monsters.size;i++) { if(monsters[i].monster.elementType!=aEffect.moveRef.elementType) { monsters.RemoveAt(i); i--; } } for(int i = 0;i<monsters.size;i++) { monsters[i].applyStatEffectsFromMove(aEffect.moveRef,null,aEffect); delayAmount += monsters[i].applyStatusEffectsForMove(aEffect.moveRef,1,aEffect); this.applyHPBoostsToTeam(aEffect,aPassiveEffectOwner,aMoveQueueItem,this._position); if(aEffect.moveRef.decisiveBlowsImmunity>0f) { monsters[i].criticalHitImmune = true; } if(aEffect.moveRef.oneHitKillInvulnerable>0f) { monsters[i].oneHitKOImmune = true; } } } } else { BetterList<BattleMonster> monsters = this.getTargetsForMove(EMonsterPos.Unset,aEffect.moveRef); for(int i = 0;i<monsters.size;i++) { monsters[i].applyStatEffectsFromMove(aEffect.moveRef,null,aEffect); delayAmount += monsters[i].applyStatusEffectsForMove(aEffect.moveRef,1,aEffect); applyHPEffectToTeam(aEffect,aPassiveEffectOwner,aEffectOwnerPosition); } } } return delayAmount; }