Пример #1
0
        //Parameters:
        // type1 and type2 define the type of flask you wanna drink.
        // reason: is just for debugging output to see where does the drinking flask request came from
        // minRequiredCharges: Min number of charges a flask must have to consider it a valid flask to drink.
        // shouldDrinkAll: if you want to drink all the flasks of type1,type2 (true) or just first in the list(false).
        private bool FindDrinkFlask(FlaskAction type1, FlaskAction type2, string reason, int minRequiredCharge = 0, bool shouldDrinkAll = false)
        {
            bool hasDrunk  = false;
            var  flaskList = playerFlaskList.FindAll(x => x.CurrentCharges >= minRequiredCharge &&
                                                     (x.FlaskAction1 == type1 || x.FlaskAction2 == type2) && x.isEnabled);

            foreach (var flask in flaskList)
            {
                if (flask.CurrentCharges >= flask.UseCharges)
                {
                    keyboard.setLatency(GameController.Game.IngameState.CurLatency);
                    if (!keyboard.KeyPressRelease(keyInfo.k[flask.Slot]))
                    {
                        LogError("Warning: High latency ( more than 1000 millisecond ), plugin will fail to work properly.", errmsg_time);
                    }
                    flask.UpdateFlaskChargesInfo();
                    if (Settings.debugMode.Value)
                    {
                        LogMessage("Just Drank Flask on key " + keyInfo.k[flask.Slot] + " cuz of " + reason, logmsg_time);
                    }
                    // if there are multiple flasks, drinking 1 of them at a time is enough.
                    hasDrunk = true;
                    if (!shouldDrinkAll)
                    {
                        return(hasDrunk);
                    }
                }
                else
                {
                    flask.UpdateFlaskChargesInfo();
                }
            }
            return(hasDrunk);
        }
Пример #2
0
        private bool GettingAllFlaskInfo(Element flaskRoot)
        {
            if (Settings.debugMode.Value)
            {
                LogMessage("Getting Inventory Flasks info.", logmsg_time);
            }
            playerFlaskList.Clear();
            try
            {
                var flasksEquipped = flaskRoot.Children;
                for (int j = 0; j < flasksEquipped.Count; j++)
                {
                    InventoryItemIcon flask        = flasksEquipped[j].AsObject <InventoryItemIcon>();
                    Entity            flaskItem    = flask.Item;
                    Charges           flaskCharges = flaskItem.GetComponent <Charges>();
                    Mods        flaskMods          = flaskItem.GetComponent <Mods>();
                    PlayerFlask newFlask           = new PlayerFlask();

                    newFlask.SetSettings(Settings);
                    newFlask.isInstant      = false;
                    newFlask.Slot           = flask.InventPosX;
                    newFlask.Item           = flaskItem;
                    newFlask.MaxCharges     = flaskCharges.ChargesMax;
                    newFlask.UseCharges     = flaskCharges.ChargesPerUse;
                    newFlask.CurrentCharges = flaskCharges.NumCharges;
                    newFlask.flaskRarity    = flaskMods.ItemRarity;
                    newFlask.FlaskName      = GameController.Files.BaseItemTypes.Translate(flaskItem.Path).BaseName;
                    newFlask.FlaskAction2   = FlaskAction.NONE;
                    newFlask.FlaskAction1   = FlaskAction.NONE;

                    //Checking flask action based on flask name type.
                    if (!flaskInfo.FlaskTypes.TryGetValue(newFlask.FlaskName, out newFlask.FlaskAction1))
                    {
                        LogError("Error: " + newFlask.FlaskName + " name not found. Report this error message.", errmsg_time);
                    }

                    //Checking for unique flasks.
                    if (flaskMods.ItemRarity == ItemRarity.Unique)
                    {
                        newFlask.FlaskName = flaskMods.UniqueName;
                        if (Settings.uniqFlaskEnable.Value)
                        {
                            //Enabling Unique flask action 2.
                            if (!flaskInfo.UniqueFlaskNames.TryGetValue(newFlask.FlaskName, out newFlask.FlaskAction2))
                            {
                                LogError("Error: " + newFlask.FlaskName + " unique name not found. Report this error message.", errmsg_time);
                            }
                        }
                        else
                        {
                            //Disabling Unique Flask actions.
                            newFlask.FlaskAction1 = FlaskAction.NONE;
                            newFlask.FlaskAction2 = FlaskAction.NONE;
                        }
                    }

                    //Checking flask mods.
                    FlaskAction action2 = FlaskAction.NONE;
                    foreach (var mod in flaskMods.ItemMods)
                    {
                        if (mod.Name.ToLower().Contains("flaskchargesused"))
                        {
                            newFlask.UseCharges = (int)Math.Floor(newFlask.UseCharges + ((double)(newFlask.UseCharges) * mod.Value1 / 100));
                        }

                        if (mod.Name.ToLower().Contains("instant"))
                        {
                            newFlask.isInstant = true;
                        }

                        // We have already decided action2 for unique flasks.
                        if (flaskMods.ItemRarity == ItemRarity.Unique)
                        {
                            continue;
                        }

                        if (!flaskInfo.FlaskMods.TryGetValue(mod.Name, out action2))
                        {
                            LogError("Error: " + mod.Name + " mod not found. Is it unique flask? If not, report this error message.", errmsg_time);
                        }
                        else if (action2 != FlaskAction.IGNORE)
                        {
                            newFlask.FlaskAction2 = action2;
                        }
                    }

                    // Speedrun mod on mana/life flask wouldn't work when full mana/life is full respectively,
                    // So we will ignore speedrun mod from mana/life flask. Other mods
                    // on mana/life flasks will work.
                    if (newFlask.FlaskAction2 == FlaskAction.SPEEDRUN &&
                        (newFlask.FlaskAction1 == FlaskAction.LIFE ||
                         newFlask.FlaskAction1 == FlaskAction.MANA ||
                         newFlask.FlaskAction1 == FlaskAction.HYBRID))
                    {
                        newFlask.FlaskAction2 = FlaskAction.NONE;
                        if (_WarnFlaskSpeed)
                        {
                            LogError("Warning: Speed Run mod is ignored on mana/life/hybrid flasks. Use Alt Orbs on those flasks.", errmsg_time);
                            _WarnFlaskSpeed = false;
                        }
                    }

                    if (Settings.disableLifeSecUse.Value)
                    {
                        if (newFlask.FlaskAction1 == FlaskAction.LIFE || newFlask.FlaskAction1 == FlaskAction.HYBRID)
                        {
                            if (newFlask.FlaskAction2 == FlaskAction.OFFENSE || newFlask.FlaskAction2 == FlaskAction.DEFENSE)
                            {
                                newFlask.FlaskAction2 = FlaskAction.NONE;
                            }
                        }
                    }

                    if (Settings.treatOffenAsDef.Value)
                    {
                        if (newFlask.FlaskAction1 == FlaskAction.OFFENSE)
                        {
                            newFlask.FlaskAction1 = FlaskAction.DEFENSE;
                        }
                        if (newFlask.FlaskAction2 == FlaskAction.OFFENSE)
                        {
                            newFlask.FlaskAction2 = FlaskAction.DEFENSE;
                        }
                    }
                    newFlask.EnableDisableFlask();
                    playerFlaskList.Add(newFlask);
                }
            }
            catch (Exception e)
            {
                if (Settings.debugMode.Value)
                {
                    LogError("Warning: Error getting all flask Informations.", errmsg_time);
                    LogError(e.Message + e.StackTrace, errmsg_time);
                }
                playerFlaskList.Clear();
                return(false);
            }
            playerFlaskList.Sort((x, y) => x.Slot.CompareTo(y.Slot));
            return(true);
        }