Code:
public class GameTable : GameObject
{
// Fields
[Tunable]
private static int AmountToWinBeforeWonMoneyBuff;
private GameData curGame;
private static List<Type> gti;
[Tunable]
private static int kSmallBetAmount;
private int mCompulsiveGamblerMoneyMod;
private WinningsOnTable mWinnings;
private GameData nextGame;
private static readonly string sLocalizationKey;
// Methods
static GameTable();
public GameTable();
public static bool CanLoseMoney(Sim a);
public override void ClearUseList();
public bool HasMoneyToBet(Sim a, int amount);
public override bool IsObjectInFrontOfMe(IGameObject gameObject);
private static string LocalizeString(string name, params object[] parameters);
public override void OnCreation();
public override void OnStartup();
public Sim OtherPlayer(Sim player);
public bool ScootInActor(Sim actor);
// Properties
public int CompulsiveGamblerMoneyMod { get; set; }
public static List<Type> GameTableInteractions { get; }
public int Losings { get; }
private WinningsOnTable SimWinnings { get; }
public int Winnings { get; }
// Nested Types
public sealed class AccuseCheat : ImmediateInteraction<Sim, GameTable>, IMultiplayer
{
// Fields
public static readonly InteractionDefinition Singleton;
// Methods
static AccuseCheat();
public AccuseCheat();
protected override BaseInteractionResult RunAndReturnInteractionResult();
// Properties
public Sim[] Opponents { get; }
// Nested Types
[HasSpecializedTuning(typeof(GameTable.AccuseCheat.SpecializedTuning))]
private sealed class Definition : InteractionDefinition<Sim, GameTable, GameTable.AccuseCheat>
{
// Methods
public Definition();
protected override bool Test(Sim a, GameTable target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback);
}
public class SpecializedTuning : SpecializedInteractionTuning
{
// Fields
public float ContinueChance;
public float FistFightChance;
public const float kContinueChance = 5f;
public const float kFistFightChance = 5f;
public const int kMoneyTransfer = 5;
public const float kRelationshipDelta = 5f;
public int MoneyTransfer;
public float RelationshipDelta;
public const string XMLContinueChance = "ContinueChance";
public const string XMLFistFightChance = "FistFightChance";
public const string XMLMoneyTransfer = "MoneyTransfer";
public const string XMLRelationshipDelta = "RelationshipDelta";
// Methods
public SpecializedTuning();
public override void Load(DataNode rootNode, bool bIsClone);
public override void WriteToXml(XmlTextWriter xmlWriter, string whitespace);
}
}
public sealed class BetClothes : GameTable.BetHuge
{
// Fields
public static readonly InteractionDefinition Singleton;
// Methods
static BetClothes();
public BetClothes();
protected override BaseInteractionResult DoBet(Sim Actor, GameTable Target, GameTable.BetHuge.SpecializedTuning st);
// Nested Types
[HasSpecializedTuning(typeof(GameTable.BetHuge.SpecializedTuning))]
private sealed class Definition : InteractionDefinition<Sim, GameTable, GameTable.BetClothes>
{
// Methods
public Definition();
protected override bool Test(Sim a, GameTable target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback);
}
}
public class BetHuge : ImmediateInteraction<Sim, GameTable>, IMultiplayer
{
// Fields
public static readonly InteractionDefinition Singleton;
// Methods
static BetHuge();
public BetHuge();
protected virtual BaseInteractionResult DoBet(Sim Actor, GameTable Target, SpecializedTuning st);
protected override BaseInteractionResult RunAndReturnInteractionResult();
// Properties
public Sim[] Opponents { get; }
// Nested Types
[HasSpecializedTuning(typeof(GameTable.BetHuge.SpecializedTuning))]
private sealed class Definition : InteractionDefinition<Sim, GameTable, GameTable.BetHuge>
{
// Methods
public Definition();
public override InteractionTestResult Test(ref InteractionInstanceParameters parameters, ref GreyedOutTooltipCallback greyedOutTooltipCallback);
protected override bool Test(Sim a, GameTable target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback);
}
protected class SpecializedTuning : SpecializedInteractionTuning
{
// Fields
public const bool kSureLose = false;
public const bool kSureWin = false;
public const int kWinAmount = 100;
public bool SureLose;
public bool SureWin;
public int WinAmount;
public const string XMLSureLose = "SureLose";
public const string XMLSureWin = "SureWin";
public const string XMLWinAmount = "WinAmount";
// Methods
public SpecializedTuning();
public override void Load(DataNode rootNode, bool bIsClone);
public override void WriteToXml(XmlTextWriter xmlWriter, string whitespace);
}
}
private sealed class ChangeIntoPajamas : Interaction<Sim, Sim>
{
// Fields
public static readonly InteractionDefinition Singleton;
// Methods
static ChangeIntoPajamas();
public ChangeIntoPajamas();
protected override BaseInteractionResult RunAndReturnInteractionResult();
// Nested Types
private sealed class Definition : InteractionDefinition<Sim, Sim, GameTable.ChangeIntoPajamas>
{
// Methods
public Definition();
protected override bool Test(Sim a, Sim target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback);
}
}
public sealed class Cheat : ImmediateInteraction<Sim, GameTable>, IMultiplayer
{
// Fields
public static readonly InteractionDefinition Singleton;
// Methods
static Cheat();
public Cheat();
protected override BaseInteractionResult RunAndReturnInteractionResult();
// Properties
public Sim[] Opponents { get; }
// Nested Types
[HasSpecializedTuning(typeof(GameTable.Cheat.SpecializedTuning))]
private sealed class Definition : InteractionDefinition<Sim, GameTable, GameTable.Cheat>
{
// Methods
public Definition();
protected override bool Test(Sim a, GameTable target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback);
}
private class SpecializedTuning : SpecializedInteractionTuning
{
// Fields
public const bool kSureWin = false;
public bool SureWin;
public const string XMLSureWin = "SureWin";
// Methods
public SpecializedTuning();
public override void Load(DataNode rootNode, bool bIsClone);
public override void WriteToXml(XmlTextWriter xmlWriter, string whitespace);
}
}
[Persistable]
private class GameData
{
// Fields
public Sim accusor;
public int betAmount;
public Sim bettor;
public Sim cheater;
public bool clothesBet;
public float continueChance;
public float fistFightChance;
public int moneyTransfer;
public float relationshipDelta;
public Sim sureWinner;
// Methods
public GameData();
public void Initialize();
// Properties
public bool IsDefault { get; }
}
public sealed class InviteToJoin : ImmediateInteraction<Sim, Sim>
{
// Fields
public static readonly InteractionDefinition Singleton;
// Methods
static InviteToJoin();
public InviteToJoin();
protected override BaseInteractionResult RunAndReturnInteractionResult();
// Nested Types
private sealed class Definition : InteractionDefinition<Sim, Sim, GameTable.InviteToJoin>
{
// Methods
public Definition();
protected override bool Test(Sim a, Sim target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback);
public string Tooltip();
}
}
public sealed class JoinGame : Interaction<Sim, GameTable>
{
// Fields
public static readonly InteractionDefinition Singleton;
// Methods
static JoinGame();
public JoinGame();
protected override BaseInteractionResult RunAndReturnInteractionResult();
// Nested Types
private sealed class Definition : InteractionDefinition<Sim, GameTable, GameTable.JoinGame>
{
// Methods
public Definition();
protected override bool Test(Sim a, GameTable target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback);
public string Tooltip();
}
}
public sealed class PlayGameA : Interaction<Sim, GameTable>, IMultiplayer
{
// Fields
private InteractionInstance mInstance;
private Sim mPlayerX;
private Sim mPlayerY;
public static readonly InteractionDefinition Singleton;
public Sim targetSim;
// Methods
static PlayGameA();
public PlayGameA();
private int CalculateOdds(Sim sim);
private Sim CalculateWinner();
public override void Cleanup();
private bool DoAccuseCheat();
private void DoCheat();
private void DoWin(Sim winner, Sim loser, StateMachineClient CurrentStateMachine, string sFirstPlayer, bool firstWinner);
private Sim GetFirstPlayer();
public void PlayGame(StateMachineClient CurrentStateMachine);
protected override BaseInteractionResult RunAndReturnInteractionResult();
private void SetupCurrentGame();
// Properties
public Sim[] Opponents { get; }
// Nested Types
[HasSpecializedTuning(typeof(GameTable.PlayGameA.SpecializedTuning))]
public sealed class Definition : InteractionDefinition<Sim, GameTable, GameTable.PlayGameA>
{
// Methods
public Definition();
public InteractionInstance CreateInstance(IGameObject target, IActor actor, InteractionPriority priority, bool isAutonomous, bool cancellableByPlayer, Sim simToTarget);
public InteractionInstance CreateInstance(IGameObject target, IActor actor, InteractionPriority priority, bool isAutonomous, bool cancellableByPlayer, Sim simToTarget, InteractionInstance linkedInstance);
protected override bool Test(Sim a, GameTable target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback);
}
private class SpecializedTuning : SpecializedInteractionTuning
{
// Fields
public float BaseProbability;
public float CheaterMod;
public float CompulsiveGamblerMod;
public const float kBaseProbability = 50f;
public const float kCheaterMod = 5f;
public const float kCompulsiveGamblerMod = 5f;
public const float kMoodMod = 5f;
public const float kPlayerAAccuseChance = 5f;
public const float kPlayerABetClothesChance = 5f;
public const float kPlayerABetHugeChance = 5f;
public const float kPlayerACheatChance = 5f;
public const float kSkillMod = 5f;
public const float kSkillUpdatePerMinute = 5f;
public const float kWiseMod = 5f;
public float MoodMod;
public float PlayerAAccuseChance;
public float PlayerABetClothesChance;
public float PlayerABetHugeChance;
public float PlayerACheatChance;
public float SkillMod;
public float SkillUpdatePerMinute;
public float WiseMod;
public const string XMLBaseProbability = "BaseProbability";
public const string XMLCheaterMod = "CheaterMod";
public const string XMLCompulsiveGamblerMod = "CompulsiveGamblerMod";
public const string XMLMoodMod = "MoodMod";
public const string XMLPlayerAAccuseChance = "PlayerAAccuseChance";
public const string XMLPlayerABetClothesChance = "PlayerABetClothesChance";
public const string XMLPlayerABetHugeChance = "PlayerABetHugeChance";
public const string XMLPlayerACheatChance = "PlayerACheatChance";
public const string XMLSkillMod = "SkillMod";
public const string XMLSkillUpdateTimer = "SkillUpdatePerMinute";
public const string XMLWiseMod = "WiseMod";
// Methods
public SpecializedTuning();
public override void Load(DataNode rootNode, bool bIsClone);
public override void WriteToXml(XmlTextWriter xmlWriter, string whitespace);
}
}
private sealed class PlayGameB : Interaction<Sim, GameTable>
{
// Fields
public static readonly InteractionDefinition Singleton;
// Methods
static PlayGameB();
public PlayGameB();
protected override BaseInteractionResult RunAndReturnInteractionResult();
// Nested Types
private sealed class Definition : InteractionDefinition<Sim, GameTable, GameTable.PlayGameB>
{
// Methods
public Definition();
protected override bool Test(Sim a, GameTable target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback);
}
}
public sealed class PlayGameWith : ImmediateInteraction<Sim, GameTable>
{
// Fields
public static readonly InteractionDefinition Singleton;
// Methods
static PlayGameWith();
public PlayGameWith();
public override void Cleanup();
protected override BaseInteractionResult RunAndReturnInteractionResult();
// Nested Types
private sealed class Definition : InteractionDefinition<Sim, GameTable, GameTable.PlayGameWith>
{
// Methods
public Definition();
protected override bool Test(Sim a, GameTable target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback);
private string Tooltip();
}
}
private sealed class PracticeCards : Interaction<Sim, GameTable>
{
// Fields
public static readonly InteractionDefinition Singleton;
// Methods
static PracticeCards();
public PracticeCards();
public override void Cleanup();
public void DoPractice(StateMachineClient smc, Interaction<Sim, GameTable>.LoopData ld);
protected override BaseInteractionResult RunAndReturnInteractionResult();
// Nested Types
[HasSpecializedTuning(typeof(GameTable.PracticeCards.SpecializedTuning))]
private sealed class Definition : InteractionDefinition<Sim, GameTable, GameTable.PracticeCards>
{
// Methods
public Definition();
protected override bool Test(Sim a, GameTable target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback);
public string ToolTip();
}
private class SpecializedTuning : SpecializedInteractionTuning
{
// Fields
public int FunValueStopPracticing;
public const int kFunValueStopPracticing = 100;
public const float kMaximumAutonomousPractice = 120f;
public const float kSkillUpdatePerMinute = 5f;
public float MaximumAutonomousPractice;
public float SkillUpdatePerMinute;
public const string XMLFunValueStopPracticing = "FunValueStopPracticing";
public const string XMLMaximumAutonomousPractice = "MaximumAutonomousPractice";
public const string XMLSkillUpdatePerMinute = "SkillUpdatePerMinute";
// Methods
public SpecializedTuning();
public override void Load(DataNode rootNode, bool bIsClone);
public override void WriteToXml(XmlTextWriter xmlWriter, string whitespace);
}
}
[Persistable]
private class WinningsOnTable
{
// Fields
private Sim mPlayerX;
private Sim mPlayerY;
private GameTable mTable;
private int mWinningsX;
private int mWinningsY;
// Methods
public WinningsOnTable();
public WinningsOnTable(GameTable table);
public void AddWinnings(Sim sim, int amount);
public int GetWinnings(Sim sim);
public void Reset();
public void SetPlayers(Sim PlayerX, Sim PlayerY);
}
}