/// <summary> /// /// </summary> /// <param name="commandString"></param> private void commandEntered(string commandString, out bool shouldHide) { shouldHide = true; if (string.IsNullOrWhiteSpace(commandString)) { return; // a blank textbox should close after hitting enter -- even if a command was never run. } var cheat = new VMNetCheatCmd(); var context = new VMCheatContext(); var repetitions = getRepetitions(commandString); switch (trimRepetitions(commandString)) { //These three are special cheatcodes that don't really match the parameterized cheats e.g. moveobjects on case "klapaucius": case "rosebud": context.Amount = (int)VMCheatContext.BudgetCheatPresetAmount.KLAPAUCIUS; context.CheatBehavior = VMCheatContext.VMCheatType.Budget; break; case "motherlode": context.Amount = (int)VMCheatContext.BudgetCheatPresetAmount.MOTHERLODE; context.CheatBehavior = VMCheatContext.VMCheatType.Budget; break; default: context = parseCommandString(commandString); break; } cheat.Context = context; shouldHide = false; if (cheat.Context == null) // the command was not recognized { FSO.HIT.HITVM.Get().PlaySoundEvent(UISounds.Error); // in TS1 this was a dialog but a sound may be less intrusive return; } context.Repetitions = (byte)repetitions; var sndEvent = UISounds.Error; if (context.CheatBehavior != VMCheatContext.VMCheatType.InvalidCheat) { ts1VM.SendCommand(cheat); switch (context.CheatBehavior) // sound feedback { case VMCheatContext.VMCheatType.Budget: sndEvent = UISounds.BuyPlace; break; default: sndEvent = UISounds.Click; break; } shouldHide = true; } FSO.HIT.HITVM.Get().PlaySoundEvent(sndEvent); }
/// <summary> /// Creates a VMCheatContext which includes repetitions, parameters, and CheatBehavior /// </summary> /// <param name="command"></param> /// <returns></returns> private VMCheatContext parseCommandString(string command) { if (command.Length == 0) { return(null); } var baseCmd = command; int NumberOfParameters = 1; // in the future if we want multiple parameters per cheat... string[] parameters = new string[NumberOfParameters]; if (command.Contains(' ')) { baseCmd = command.Substring(0, command.IndexOf(' ')); string parameterString = command.Substring(command.IndexOf(' ') + 1); for (int i = 0; i < NumberOfParameters; i++) { var individualParameter = parameterString; if (string.IsNullOrWhiteSpace(individualParameter)) { break; } if (individualParameter.Contains(' ')) { individualParameter = individualParameter.Substring(0, individualParameter.IndexOf(' ')); parameters[i] = individualParameter; parameterString = parameterString.Substring(parameterString.IndexOf(' ') + 1); continue; } parameters[i] = individualParameter; break; } } trimRepetitions(baseCmd); if (!cheatDefinitions.TryGetValue(baseCmd, out VMCheatContext.VMCheatType cheatType)) { // cheat not defined in cheatDefinitions return(null); } VMCheatContext context = new VMCheatContext() { CheatBehavior = cheatType, }; foreach (var parameter in parameters) { switch (parameter) { case "on": context.Modifier = true; break; // set modifier true case "off": context.Modifier = false; break; // set modifer false default: if (int.TryParse(parameter, out int amount)) //check if the parameter is a number { context.Amount = amount; // if it is amount is set } break; } } return(context); }
public override void Deserialize(BinaryReader reader) { base.Deserialize(reader); Context = new VMCheatContext(); Context.Deserialize(reader); }