예제 #1
0
        private static void checkStoneForItems_Postfix(MineShaft __instance, int x, int y, Farmer who, ref NetPointDictionary <bool, NetBool> ___createLadderDownEvent, bool ___ladderHasSpawned, NetIntDelta ___netStonesLeftOnThisLevel)
        {
            if (!___createLadderDownEvent.ContainsKey(new Point(x, y)))
            {
                double chanceForLadderDown = 0.02 + 1.0 / (double)Math.Max(1, ___netStonesLeftOnThisLevel) + (double)who.LuckLevel / 100.0 + Game1.player.DailyLuck / 5.0;
                if (__instance.EnemyCount == 0)
                {
                    chanceForLadderDown += 0.04;
                }

                chanceForLadderDown = chanceForLadderDown * Config.ChanceForLadderInStoneMultiplier - chanceForLadderDown;

                if (!__instance.mustKillAllMonstersToAdvance() && (___netStonesLeftOnThisLevel == 0 || Game1.random.NextDouble() < chanceForLadderDown) && __instance.shouldCreateLadderOnThisLevel())
                {
                    bool isShaft = !GotShaft && __instance.getMineArea(-1) == 121 && !__instance.mustKillAllMonstersToAdvance() && Game1.random.NextDouble() < 0.2 * Config.ChanceLadderIsShaftMultiplier;
                    if (isShaft || !___ladderHasSpawned)
                    {
                        if (isShaft)
                        {
                            GotShaft = true;
                        }
                        ___createLadderDownEvent[new Point(x, y)] = isShaft;
                    }
                }
            }
            else if (___createLadderDownEvent[new Point(x, y)])
            {
                GotShaft = true;
            }
        }