private static string getZoneHintMessage(ZoneType zone, bool justUnlocked) { if (zone == ZoneType.Void) { return($"no hint for Void(area {InterOp.get_player_area()})"); } var items = HintObjects.GetOrElse(zone, new List <Checkable>()); var found = items.FindAll(i => i.Has()); if (!justUnlocked && !HaveHintForZone(zone)) { return($"{zone}: {found.Count}/?? key items (Hint not unlocked)"); } if (items.Count > 0) { var g = found.Count == items.Count ? "$" : ""; if (found.Count > 0) { return($"{zone}: {g}{found.Count}/{items.Count}{g} key items\nfound: {String.Join(", ", found.Select(i => i.DisplayName))}"); } else { return($"{zone}: {found.Count}/{items.Count} key items"); } } return($"No key items in {zone}"); }
public static void ResolveUberStateChange(UberState state, UberValue old) { try { UberId key = state.GetUberId(); if (!UberStates.TryGetValue(key, out UberState oldState)) { oldState = state.Clone(); oldState.Value = old; UberStates.Add(key, oldState); } UberValue value = state.Value; if (value.Int == old.Int) { return; } var oldValFmt = old.FmtVal(state.Type); // get this now because we overwrite the value by reference if (ShouldRevert(state)) { Randomizer.Log($"Reverting state change of {state.Name} from {oldValFmt} to {state.FmtVal()}", false); oldState.Write(); return; } HandleSpecial(state); UberStates[key].Value = state.Value; var pos = InterOp.get_position(); bool found = false; if (value.Int > 0) { var id = state.GetUberId(); if (SkipUberStateMapCount.GetOrElse(key, 0) > 0) { var p = id.toCond().Pickup().Concat(id.toCond(state.ValueAsInt()).Pickup()); if (p.NonEmpty) { SkipUberStateMapCount[key] -= 1; Randomizer.Log($"Suppressed granting {p} from {id}={state.ValueAsInt()}. Will suppress {SkipUberStateMapCount[key]} more times", false, "DEBUG"); return; } } found = SeedController.OnUberState(state); } if (SyncedUberStates.Contains(key)) { Randomizer.Client.SendUpdate(key, state.ValueAsFloat()); } BonusItemController.OnUberState(state); var zone = ZoneType.Void; if (InterOp.get_game_state() == GameState.Game) { zone = InterOp.get_player_area().toZone(); } if (!NeedsNewGameInit && (value.Int == 0 || !found) && !(state.GroupName == "statsUberStateGroup" || state.GroupName == "achievementsGroup" || state.GroupID == 8 || state.GroupID == 10)) { Randomizer.Debug($"State change: {state.GroupName}.{state.Name} ({state.GroupID}|{state.ID}) {state.Type} {oldValFmt}->{state.FmtVal()} at ({Math.Round(pos.X)}, {Math.Round(pos.Y)}) in {zone}"); } //Randomizer.Debug($"{state.GroupName}.{state.Name}, {state.GroupID}, {state.ID}, {state.Type}, {oldValFmt}, {state.FmtVal()}, {zone}, {Math.Round(pos.X)},{Math.Round(pos.Y)}"); } catch (Exception e) { Randomizer.Error($"USC.Update {state}", e); } }