Beispiel #1
0
        internal static TileCheckActionEventArgs TileCheckActionEvent(Farmer who, GameLocation location, Vector2 tile, string action)
        {
            var args = new TileCheckActionEventArgs
            {
                GameLocation = location,
                TileLocation = tile,
                Action       = action,
                Farmer       = who,
                Cancelled    = false
            };

            if (TileCheckAction != null)
            {
                TileCheckAction.Invoke(Mod.instance, args);
            }
            return(args);
        }
Beispiel #2
0
        private void OnTileAction(object sender, TileCheckActionEventArgs args)
        {
            if (args.Cancelled)
            {
                return;                 //already eaten by someone else
            }
            var parameters = args.Action.Split(' ');

            if (parameters.Length < 1)
            {
                return;
            }
            bool lockFound = false;

            if (parameters[0] == "LockedDoorWarp" && (Game1.timeOfDay <int.Parse(parameters[4]) || Game1.timeOfDay> int.Parse(parameters[5])))
            {
                lockFound = true;
            }
            else if (parameters[0] == "Door" && parameters.Length > 1 && Game1.player.getFriendshipLevelForNPC(parameters[1]) < 500)
            {
                lockFound = true;
            }
            else if (parameters[0] == "SkullDoor" && !args.Farmer.hasUnlockedSkullDoor && !args.Farmer.hasSkullKey)
            {
                lockFound = true;
            }
            else if (parameters[0] == "WarpCommunityCenter" && !(Game1.MasterPlayer.mailReceived.Contains("ccDoorUnlock") || Game1.MasterPlayer.mailReceived.Contains("JojaMember")))
            {
                lockFound = true;
            }
            else if (parameters[0] == "WarpWomensLocker" && Game1.player.IsMale)
            {
                lockFound = true;
            }
            else if (parameters[0] == "WarpMensLocker" && !Game1.player.IsMale)
            {
                lockFound = true;
            }
            else if (parameters[0] == "WizardHatch" && (Game1.player.friendshipData.ContainsKey("Wizard") && Game1.player.friendshipData["Wizard"].Points >= 1000))
            {
                lockFound = true;
            }
            else if (parameters[0] == "EnterSewer" && !Game1.player.hasRustyKey && !Game1.player.mailReceived.Contains("OpenedSewer"))
            {
                lockFound = true;
            }

            bool cached = LockCache.Contains(GenerateCacheKey(parameters[0], args.GameLocation, args.TileLocation.X, args.TileLocation.Y));

            if (!cached && !Game1.player.hasItemInInventory(LockpickItemId, 1))
            {
                return;                                                                 //we're done here
            }
            if (lockFound)
            {
                args.Cancelled = true;
                if (cached)
                {
                    OpenLock(args.Action.Split(' '), (int)args.TileLocation.X, (int)args.TileLocation.Y);
                }
                else
                {
                    string key = string.Join("^", new[] { "l", ((int)args.TileLocation.X).ToString(), ((int)args.TileLocation.Y).ToString(), args.Action });
                    Game1.currentLocation.lastQuestionKey = "lockpick";
                    Game1.currentLocation.createQuestionDialogue(Helper.Translation.Get("use"), new[] { new Response(key, Helper.Translation.Get("yes")), new Response("No", Helper.Translation.Get("no")) }, AcceptLockpick);
                }
            }
        }