Ejemplo n.º 1
0
 public RelayVar(bool booleanValue = false, int integerValue = -1, string stringValue = "", EffectData effectValue = null, Globals.BoostsTable boosts = null, Globals.Type[] types = null, Globals.SecondaryEffect[] secondaries = null)
 {
     endEventHere      = false;
     this.booleanValue = booleanValue;
     this.integerValue = integerValue;
     this.stringValue  = stringValue;
     this.effectValue  = effectValue;
     this.boosts       = boosts;
     this.types        = types;
     this.secondaries  = secondaries;
 }
Ejemplo n.º 2
0
    public bool Boost(Globals.BoostsTable boost, TargetableElement target = null, BattleElement source = null, EffectData effect = null)
    {
        bool success = false;

        if (this.currentEvent != null)
        {
            if (target == null)
            {
                target = this.currentEvent.target;
            }
            if (source == null)
            {
                source = this.currentEvent.source;
            }
            if (effect == null)
            {
                effect = this.effectInEvent;
            }
        }

        if (target == null || !(target.sourceElement is PokemonCharacter) || ((PokemonCharacter)target.sourceElement).pokemonData.hp <= 0)
        {
            return(false);
        }
        if (!((PokemonCharacter)target.sourceElement).pokemonData.isActive)
        {
            return(false);
        }
        //if (this.gen > 5 && !target.side.foe.pokemonLeft) return false;
        RelayVar relayVar = new RelayVar(boosts: boost);

        boost = RunEvent("Boost", target, source, effect, relayVar).boosts;
        string[] boostedNames = boost.GetBoostedNames();
        foreach (string boostName in boostedNames)
        {
            int boostBy = ((PokemonCharacter)target.sourceElement).pokemonData.BoostBy(boostName, boost.GetBoostValue(boostName));

            if (boostBy != 0)
            {
                success  = true;
                relayVar = new RelayVar(integerValue: boostBy);
                RunEvent("AfterEachBoost", target, source, effect, relayVar);
            }
        }
        relayVar = new RelayVar(boosts: boost);
        RunEvent("AfterBoost", target, source, effect, relayVar);

        return(success);
    }
Ejemplo n.º 3
0
    int CalculateMoveStat(string statName, int boost = 0, int modifier = 1)
    {
        statName = Globals.getId(statName);
        if (statName == "hp")
        {
            return(source.pokemonData.maxhp);
        }

        //Should be baseStat???
        int stat = activeData.pokemonStats.GetStatValue(statName);

        if (activeData.pokemonWasInWonderRoom)
        {
            if (statName == "def")
            {
                stat = activeData.pokemonStats.GetStatValue("spd");
            }
            else if (statName == "spd")
            {
                stat = activeData.pokemonStats.GetStatValue("def");
            }
        }

        //BOOST
        Globals.BoostsTable boosts = new Globals.BoostsTable();
        boosts.SetBoostValue(statName, boost);
        Battle.RelayVar relayVar = new Battle.RelayVar(boosts: boosts);
        relayVar = battle.RunEvent("ModifyBoost", source.targetScript, null, null, relayVar);
        boost    = relayVar.boosts.GetBoostValue(statName);
        boost    = Mathf.Clamp(boost, -6, 6);

        if (boost >= 0)
        {
            stat = Mathf.FloorToInt(stat * boosts.boostTable[boost]);
        }
        else
        {
            stat = Mathf.FloorToInt(stat / boosts.boostTable[-boost]);
        }
        //END BOOST

        //stat modifier
        stat = stat * modifier; //if float problems check showdown github

        return(stat);
    }
Ejemplo n.º 4
0
    //Called when hit a target
    public int TryMoveHit(TargetableElement target)
    {
        activeData.zBrokeProtect = false;
        bool hitResult = true;

        if (battle.SingleEvent("Try", activeData.moveData, null, source.targetScript, target.sourceElement, activeData.moveData).getEndEvent())
        {
            return(-1);
        }

        //Affecting directly to a side o to the field
        if (target.teamTarget != null || target.battleTarget != null)
        {
            if (target.battleTarget != null)
            {
                hitResult = !battle.RunEvent("TryHitField", target, source, activeData.moveData).getEndEvent();
            }
            else
            {
                hitResult = !battle.RunEvent("TryHitSide", target, source, activeData.moveData).getEndEvent();
            }

            if (!hitResult)
            {
                return(-1);
            }

            return(MoveHit(target));
        }

        //Immunity
        hitResult = !battle.RunEvent("TryImmunity", target, source, activeData.moveData).getEndEvent();
        if (!hitResult)
        {
            return(-1);
        }

        if (activeData.moveData.ignoreImmunity == "")
        {
            activeData.moveData.ignoreImmunity = (activeData.moveData.category == Globals.MoveCategory.Status) ? "All" : "";
        }

        //TryHit
        hitResult = !battle.RunEvent("TryHit", target, source, activeData.moveData).getEndEvent();
        if (!hitResult)
        {
            return(-1);
        }

        //Immunity
        if (((PokemonCharacter)target.sourceElement).pokemonData.HasImmunity(activeData.moveType) &&
            activeData.moveData.ignoreImmunity == "")
        {
            return(-1);
        }

        //Powder Immunity
        if (target.sourceElement is PokemonCharacter && (activeData.moveData.flags & Globals.MoveFlags.Powder) != 0 &&
            target != source.targetScript && TypeChart.HasImmunity("powder", ((PokemonCharacter)target.sourceElement).pokemonData.types))
        {
            return(-1);
        }

        //Prankster Immunity
        if (activeData.pranksterBoosted && target.sourceElement is PokemonCharacter && source.pokemonData.HasAbilityActive(new string[] { "prankster" }) &&
            ((PokemonCharacter)target.sourceElement).pokemonData.team != source.pokemonData.team &&
            TypeChart.HasImmunity("prankster", ((PokemonCharacter)target.sourceElement).pokemonData.types)
            )
        {
            return(-1);
        }

        //Now it surely hits!!!

        //Breaks protect
        if (activeData.moveData.breaksProtect)
        {
            //Remove ShieldVolatiles
            //Remove ShieldConditions
        }

        //StealsBoosts
        if (activeData.moveData.stealsBoosts && target.sourceElement is PokemonCharacter)
        {
            Globals.BoostsTable boosts = ((PokemonCharacter)target.sourceElement).pokemonData.boosts.ShallowCopy();
            boosts.ClearNegatives();
            if (boosts.HasPositiveBoosts())
            {
                battle.Boost(boosts, source.targetScript, source);
                ((PokemonCharacter)target.sourceElement).pokemonData.SetBoosts(boosts);
            }
        }

        //If MultiHit (here?)

        //Else
        int damage = MoveHit(target);

        activeData.totalDamage += damage;

        //set to target gotAttacked
        if ((target.sourceElement is PokemonCharacter) && source.pokemonData != ((PokemonCharacter)target.sourceElement).pokemonData)
        {
            ((PokemonCharacter)target.sourceElement).pokemonData.GotAttacked(activeData.moveId, damage, source);
        }

        //return if no damage
        if (damage < 0)
        {
            return(damage);
        }

        //eachevent update
        battle.EventForActives("Update");

        //Secondary events
        if ((target.sourceElement is PokemonCharacter) && !activeData.negateSecondary && !(activeData.hasSheerForce /*&& source.pokemonData.HasAbilityActive(new string[] { "sheerforce" })*/))
        {
            battle.SingleEvent("AfterMoveSecondary", activeData.moveData, null, target, source, activeData.moveData);
            battle.RunEvent("AfterMoveSecondary", target, source, activeData.moveData);
        }

        return(damage);
    }
Ejemplo n.º 5
0
    public MoveData(
        /*EventMethods*/ Callbacks.EventCallback basePowerCallback = null, Callbacks.EventCallback beforeMoveCallback = null, Callbacks.EventCallback beforeTurnCallback = null, Callbacks.EventCallback damageCallback = null, Callbacks.EventCallback durationCallback = null, Callbacks.EventCallback onAfterDamage = null, Callbacks.EventCallback onAfterMoveSecondary = null, Callbacks.EventCallback onAfterEachBoost = null, Callbacks.EventCallback onAfterHit = null, Callbacks.EventCallback onAfterSetStatus = null, Callbacks.EventCallback onAfterSwitchInSelf = null, Callbacks.EventCallback onAfterUseItem = null, Callbacks.EventCallback onAfterBoost = null, Callbacks.EventCallback onAfterMoveSecondarySelf = null, Callbacks.EventCallback onAfterMove = null, Callbacks.EventCallback onAfterMoveSelf = null, Callbacks.EventCallback onAllyTryAddVolatile = null, Callbacks.EventCallback onAllyBasePower = null, Callbacks.EventCallback onAllyModifyAtk = null, Callbacks.EventCallback onAllyModifySpD = null, Callbacks.EventCallback onAllyBoost = null, Callbacks.EventCallback onAllySetStatus = null, Callbacks.EventCallback onAllyTryHitSide = null, Callbacks.EventCallback onAllyFaint = null, Callbacks.EventCallback onAllyAfterUseItem = null, Callbacks.EventCallback onAllyModifyMove = null, Callbacks.EventCallback onAnyTryPrimaryHit = null, Callbacks.EventCallback onAnyTryMove = null, Callbacks.EventCallback onAnyDamage = null, Callbacks.EventCallback onAnyBasePower = null, Callbacks.EventCallback onAnySetWeather = null, Callbacks.EventCallback onAnyModifyDamage = null, Callbacks.EventCallback onAnyRedirectTarget = null, Callbacks.EventCallback onAnyAccuracy = null, Callbacks.EventCallback onAnyTryImmunity = null, Callbacks.EventCallback onAnyFaint = null, Callbacks.EventCallback onAnyModifyBoost = null, Callbacks.EventCallback onAnyDragOut = null, Callbacks.EventCallback onAnySetStatus = null, Callbacks.EventCallback onAttract = null, Callbacks.EventCallback onAccuracy = null, Callbacks.EventCallback onFoeAccuracy = null, Callbacks.EventCallback onBasePower = null, Callbacks.EventCallback onTryImmunity = null, Callbacks.EventCallback onBeforeMove = null, Callbacks.EventCallback onBeforeSwitchIn = null, Callbacks.EventCallback onBeforeSwitchOut = null, Callbacks.EventCallback onBeforeTurn = null, Callbacks.EventCallback onBoost = null, Callbacks.EventCallback onChargeMove = null, Callbacks.EventCallback onCheckShow = null, Callbacks.EventCallback onCopy = null, Callbacks.EventCallback onDamage = null, Callbacks.EventCallback onDeductPP = null, Callbacks.EventCallback onDisableMove = null, Callbacks.EventCallback onDragOut = null, Callbacks.EventCallback onEat = null, Callbacks.EventCallback onEatItem = null, Callbacks.EventCallback onEnd = null, Callbacks.EventCallback onFaint = null, Callbacks.EventCallback onFlinch = null, Callbacks.EventCallback onFoeAfterDamage = null, Callbacks.EventCallback onFoeBasePower = null, Callbacks.EventCallback onFoeBeforeMove = null, Callbacks.EventCallback onFoeDisableMove = null, Callbacks.EventCallback onFoeMaybeTrapPokemon = null, Callbacks.EventCallback onFoeModifyDef = null, Callbacks.EventCallback onFoeRedirectTarget = null, Callbacks.EventCallback onFoeSwitchOut = null, Callbacks.EventCallback onFoeTrapPokemon = null, Callbacks.EventCallback onFoeTryMove = null, Callbacks.EventCallback onHit = null, Callbacks.EventCallback onHitField = null, Callbacks.EventCallback onHitSide = null, Callbacks.EventCallback onImmunity = null, Callbacks.EventCallback onLockMove = null, Callbacks.EventCallback onLockMoveTarget = null, Callbacks.EventCallback onModifyAccuracy = null, Callbacks.EventCallback onFoeModifyAccuracy = null, Callbacks.EventCallback onModifyAtk = null, Callbacks.EventCallback onModifyBoost = null, Callbacks.EventCallback onModifyCritRatio = null, Callbacks.EventCallback onModifyDamage = null, Callbacks.EventCallback onModifyDef = null, Callbacks.EventCallback onModifyMove = null, Callbacks.EventCallback onModifyPriority = null, Callbacks.EventCallback onModifySecondaries = null, Callbacks.EventCallback onModifySpA = null, Callbacks.EventCallback onModifySpD = null, Callbacks.EventCallback onModifySpe = null, Callbacks.EventCallback onModifyWeight = null, Callbacks.EventCallback onMoveAborted = null, Callbacks.EventCallback onMoveFail = null, Callbacks.EventCallback onNegateImmunity = null, Callbacks.EventCallback onOverrideAction = null, Callbacks.EventCallback onPrepareHit = null, Callbacks.EventCallback onPreStart = null, Callbacks.EventCallback onPrimal = null, Callbacks.EventCallback onRedirectTarget = null, Callbacks.EventCallback onResidual = null, Callbacks.EventCallback onRestart = null, Callbacks.EventCallback onSetAbility = null, Callbacks.EventCallback onSetStatus = null, Callbacks.EventCallback onSourceAccuracy = null, Callbacks.EventCallback onSourceBasePower = null, Callbacks.EventCallback onSourceFaint = null, Callbacks.EventCallback onSourceHit = null, Callbacks.EventCallback onSourceModifyAccuracy = null, Callbacks.EventCallback onSourceModifyAtk = null, Callbacks.EventCallback onSourceModifyDamage = null, Callbacks.EventCallback onSourceModifySecondaries = null, Callbacks.EventCallback onSourceModifySpA = null, Callbacks.EventCallback onSourceTryHeal = null, Callbacks.EventCallback onSourceTryPrimaryHit = null, Callbacks.EventCallback onStallMove = null, Callbacks.EventCallback onStart = null, Callbacks.EventCallback onSwitchIn = null, Callbacks.EventCallback onSwitchOut = null, Callbacks.EventCallback onTakeItem = null, Callbacks.EventCallback onTerrain = null, Callbacks.EventCallback onTrapPokemon = null, Callbacks.EventCallback onTry = null, Callbacks.EventCallback onTryAddVolatile = null, Callbacks.EventCallback onTryEatItem = null, Callbacks.EventCallback onTryHeal = null, Callbacks.EventCallback onTryHit = null, Callbacks.EventCallback onTryHitField = null, Callbacks.EventCallback onTryHitSide = null, Callbacks.EventCallback onTryMove = null, Callbacks.EventCallback onTryPrimaryHit = null, Callbacks.EventCallback onType = null, Callbacks.EventCallback onUpdate = null, Callbacks.EventCallback onUseMoveMessage = null, Callbacks.EventCallback onWeather = null, Callbacks.EventCallback onWeatherModifyDamage = null, Callbacks.EventCallback onAfterSubDamage = null, Callbacks.EventCallback onEffectiveness = null, Callbacks.EventCallback onFoeDeductPP = null,
        /*EffectData*/ string id = "", string name = "", int num = -1, bool affectsFainted = false, string desc = "", int[] drain = null, int duration = -1, EffectData effect = null, string isZ = "", int onBasePowerPriority = 0, int onBeforeMovePriority = 0,
        /*EffectData (modifier priorities)*/ int onModifyAccuracyPriority = 0, int onModifyAtkPriority = 0, int onModifyCritRatioPriority = 0, int onModifyDefPriority = 0, int onModifyMovePriority = 0, int onModifyPriorityPriority = 0, int onModifySpAPriority = 0, int onModifySpDPriority = 0, int onModifyWeightPriority = 0,
        /*EffectData*/ int onResidualOrder            = 0, int[] recoil = null, Globals.SecondaryEffect[] secondaries = null, Globals.SelfEffect self = null, string shortDesc = "", string status = "",
        /*EffectType*/ Globals.EffectTypes effectType = Globals.EffectTypes.Null,
        /*Effect*/ bool exists    = false, int time   = 0,
        /*MoveData*/ int accuracy = -1, int basePower = -1, Globals.MoveCategory category = Globals.MoveCategory.Null, Globals.MoveFlags flags = Globals.MoveFlags.None, int pp = 0, int priority = 0, Globals.Type type = Globals.Type.Null, Globals.BoostsTable boosts = null, bool breaksProtect = false, Globals.ContestTypes contestType = Globals.ContestTypes.Null, int critRatio = 1, int damage = -1, bool damageByLevel = false, Globals.MoveCategory defensiveCategory = Globals.MoveCategory.Null, bool ignoreAbility = false, bool ignoreAccuracy = false, bool ignoreDefensive = false, string ignoreImmunity = "", bool ignoreNegativeOffensive = false, bool ignoreOffensive = false, bool ignorePositiveDefensive = false, bool isViable = false, bool mindBlownRecoil = false, bool noFaint = false, Globals.OHKO ohko = Globals.OHKO.Null, string selfdestruct = "", bool sideCondition = false, bool stealsBoosts = false, bool useTargetOffensive = false, bool useSourceDefensive = false, string volatileStatus = "", bool willCrit = false, int zMovePower = 0, string zMoveEffect = "", Globals.BoostsTable zMoveBoost = null)
    {
        /*EventMethods*/
        this.eventMethods = new EventMethods(basePowerCallback, beforeMoveCallback, beforeTurnCallback, damageCallback, durationCallback, onAfterDamage, onAfterMoveSecondary, onAfterEachBoost, onAfterHit, onAfterSetStatus, onAfterSwitchInSelf, onAfterUseItem, onAfterBoost, onAfterMoveSecondarySelf, onAfterMove, onAfterMoveSelf, onAllyTryAddVolatile, onAllyBasePower, onAllyModifyAtk, onAllyModifySpD, onAllyBoost, onAllySetStatus, onAllyTryHitSide, onAllyFaint, onAllyAfterUseItem, onAllyModifyMove, onAnyTryPrimaryHit, onAnyTryMove, onAnyDamage, onAnyBasePower, onAnySetWeather, onAnyModifyDamage, onAnyRedirectTarget, onAnyAccuracy, onAnyTryImmunity, onAnyFaint, onAnyModifyBoost, onAnyDragOut, onAnySetStatus, onAttract, onAccuracy, onFoeAccuracy, onBasePower, onTryImmunity, onBeforeMove, onBeforeSwitchIn, onBeforeSwitchOut, onBeforeTurn, onBoost, onChargeMove, onCheckShow, onCopy, onDamage, onDeductPP, onDisableMove, onDragOut, onEat, onEatItem, onEnd, onFaint, onFlinch, onFoeAfterDamage, onFoeBasePower, onFoeBeforeMove, onFoeDisableMove, onFoeMaybeTrapPokemon, onFoeModifyDef, onFoeRedirectTarget, onFoeSwitchOut, onFoeTrapPokemon, onFoeTryMove, onHit, onHitField, onHitSide, onImmunity, onLockMove, onLockMoveTarget, onModifyAccuracy, onFoeModifyAccuracy, onModifyAtk, onModifyBoost, onModifyCritRatio, onModifyDamage, onModifyDef, onModifyMove, onModifyPriority, onModifySecondaries, onModifySpA, onModifySpD, onModifySpe, onModifyWeight, onMoveAborted, onMoveFail, onNegateImmunity, onOverrideAction, onPrepareHit, onPreStart, onPrimal, onRedirectTarget, onResidual, onRestart, onSetAbility, onSetStatus, onSourceAccuracy, onSourceBasePower, onSourceFaint, onSourceHit, onSourceModifyAccuracy, onSourceModifyAtk, onSourceModifyDamage, onSourceModifySecondaries, onSourceModifySpA, onSourceTryHeal, onSourceTryPrimaryHit, onStallMove, onStart, onSwitchIn, onSwitchOut, onTakeItem, onTerrain, onTrapPokemon, onTry, onTryAddVolatile, onTryEatItem, onTryHeal, onTryHit, onTryHitField, onTryHitSide, onTryMove, onTryPrimaryHit, onType, onUpdate, onUseMoveMessage, onWeather, onWeatherModifyDamage, onAfterSubDamage, onEffectiveness, onFoeDeductPP);
        /*EffectData*/
        this.id             = id;
        this.name           = name;
        this.num            = num;
        this.affectsFainted = affectsFainted;
        this.desc           = desc;
        this.duration       = duration;
        this.drain          = drain;
        this.effect         = effect;
        this.effectType     = effectType;
        this.isZ            = isZ;

        this.onBasePowerPriority  = onBasePowerPriority;
        this.onBeforeMovePriority = onBeforeMovePriority;

        this.onModifyAccuracyPriority  = onModifyAccuracyPriority;
        this.onModifyAtkPriority       = onModifyAtkPriority;
        this.onModifyCritRatioPriority = onModifyCritRatioPriority;
        this.onModifyDefPriority       = onModifyDefPriority;
        this.onModifyMovePriority      = onModifyMovePriority;
        this.onModifyPriorityPriority  = onModifyPriorityPriority;
        this.onModifySpAPriority       = onModifySpAPriority;
        this.onModifySpDPriority       = onModifySpDPriority;
        this.onModifyWeightPriority    = onModifyWeightPriority;

        this.onResidualOrder = onResidualOrder;
        this.recoil          = recoil;
        this.secondaries     = secondaries;
        this.self            = self;
        this.shortDesc       = shortDesc;
        this.status          = status;

        /*Effect*/
        this.exists = exists;
        this.time   = time;

        /*MoveData*/
        this.effectType              = effectType;
        this.accuracy                = accuracy;
        this.basePower               = basePower;
        this.category                = category;
        this.flags                   = flags;
        this.pp                      = pp;
        this.priority                = priority;
        this.type                    = type;
        this.boosts                  = boosts;
        this.breaksProtect           = breaksProtect;
        this.contestType             = contestType;
        this.critRatio               = critRatio;
        this.damage                  = damage;
        this.damageByLevel           = damageByLevel;
        this.defensiveCategory       = defensiveCategory;
        this.ignoreAbility           = ignoreAbility;
        this.ignoreAccuracy          = ignoreAccuracy;
        this.ignoreDefensive         = ignoreDefensive;
        this.ignoreImmunity          = ignoreImmunity;
        this.ignoreNegativeOffensive = ignoreNegativeOffensive;
        this.ignoreOffensive         = ignoreOffensive;
        this.ignorePositiveDefensive = ignorePositiveDefensive;
        this.isViable                = isViable;
        this.mindBlownRecoil         = mindBlownRecoil;
        this.noFaint                 = noFaint;
        this.ohko                    = ohko;
        this.selfdestruct            = selfdestruct;
        this.sideCondition           = sideCondition;
        this.stealsBoosts            = stealsBoosts;
        this.useTargetOffensive      = useTargetOffensive;
        this.useSourceDefensive      = useSourceDefensive;
        this.volatileStatus          = volatileStatus;
        this.willCrit                = willCrit;
        this.zMovePower              = zMovePower;
        this.zMoveEffect             = zMoveEffect;
        this.zMoveBoost              = zMoveBoost;
    }