private void ReceiveMe(Player player) { var mymod = RewardsMod.Instance; var myworld = ModContent.GetInstance <RewardsWorld>(); KillData data = myworld.Logic.GetPlayerData(player); if (data == null) { throw new ModHelpersException("No player data for " + player.name); } if (!data.Spend((int)this.Pack.Price, player)) { LogHelpers.Warn("Not enough PP. PP out of sync."); //return; // TODO: Add validation of purchases } Item[] items = ShopPackDefinition.OpenPack(player, this.Pack); foreach (var hook in RewardsMod.Instance.OnPointsSpentHooks) { hook(player, this.Pack.Name, this.Pack.Price, items); } if (mymod.SettingsConfig.DebugModeInfo) { LogHelpers.Alert("Purchase made for " + player.name + " of " + this.Pack.Name + " (" + this.Pack.Price + ")"); } }
//////////////// public bool BuyAndOpenPack_Synced(Player player, out string output) { var mymod = RewardsMod.Instance; ItemHelpers.DestroyItem(this.item); if (this.Info == null) { output = "No pack info available."; return(false); } var info = (ShopPackDefinition)this.Info; int price = info.Price; var myworld = ModContent.GetInstance <RewardsWorld>(); KillData data = myworld.Logic.GetPlayerData(player); if (data == null) { output = "No player data for " + player.name; return(false); } if (!data.Spend(price, player)) { Main.NewText("Not enough progress points.", Color.Red); output = ""; return(true); } if (Main.netMode == 0) { Item[] items = ShopPackDefinition.OpenPack(player, info); foreach (var hook in RewardsMod.Instance.OnPointsSpentHooks) { hook(player, info.Name, info.Price, items); } } else if (Main.netMode == 1) { PackPurchaseProtocol.SendSpendToServer(info); } output = player.name + " bought " + info.Name + " (" + info.Price + ")"; return(true); }