Ejemplo n.º 1
0
	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;
	}
Ejemplo n.º 2
0
	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;
	}
Ejemplo n.º 3
0
		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;
		}