/// <summary> /// Check we have our NPC banker ready. /// </summary> public static void VerifyAndCreate(EconDataStruct data) { // we look up our bank record based on our bogus NPC Steam Id/ BankAccountStruct myNpcAccount = data.Accounts.FirstOrDefault( a => a.SteamId == EconomyConsts.NpcMerchantId); // Do it have an account already? if (myNpcAccount == null) { //nope, lets construct our bank record with a new balance myNpcAccount = AccountManager.CreateNewDefaultAccount(EconomyConsts.NpcMerchantId, EconomyScript.Instance.ServerConfig.NpcMerchantName, 0); //ok lets apply it data.Accounts.Add(myNpcAccount); data.CreditBalance -= myNpcAccount.BankBalance; EconomyScript.Instance.ServerLogger.WriteInfo("Banker Account Created."); } else { EconomyScript.Instance.ServerLogger.WriteInfo("Banker Account Exists."); } // ShipSale was added recently, so this makes sure the list is created in existing data stores. if (data.ShipSale == null) data.ShipSale = new List<ShipSaleStruct>(); }
/// <summary> /// Check we have our NPC banker ready. /// </summary> public static void VerifyAndCreate(EconDataStruct data) { // we look up our bank record based on our bogus NPC Steam Id/ var myNpcAccount = data.Accounts.FirstOrDefault( a => a.SteamId == EconomyConsts.NpcMerchantId); // Do it have an account already? if (myNpcAccount == null) { //nope, lets construct our bank record with a new balance myNpcAccount = AccountManager.CreateNewDefaultAccount(EconomyConsts.NpcMerchantId, EconomyConsts.NpcMerchantName, 0); //ok lets apply it data.Accounts.Add(myNpcAccount); EconomyScript.Instance.ServerLogger.Write("Banker Account Created."); } else { EconomyScript.Instance.ServerLogger.Write("Banker Account Exists."); } }
private void InitServer() { _isInitialized = true; // Set this first to block any other calls from UpdateAfterSimulation(). _isServerRegistered = true; ServerLogger.Init("EconomyServer.Log"); // comment this out if logging is not required for the Server. ServerLogger.Write("Economy Server Log Started"); ServerLogger.Write("Economy Server Version {0}", EconomyConsts.ModCommunicationVersion); if (ServerLogger.IsActive) VRage.Utils.MyLog.Default.WriteLine(String.Format("##Mod## Economy Server Logging File: {0}", ServerLogger.LogFile)); ServerLogger.Write("RegisterMessageHandler"); MyAPIGateway.Multiplayer.RegisterMessageHandler(EconomyConsts.ConnectionId, _messageHandler); ServerLogger.Write("LoadBankContent"); Config = EconDataManager.LoadConfig(); // Load config first. Data = EconDataManager.LoadData(Config.DefaultPrices); // start the timer last, as all data should be loaded before this point. ServerLogger.Write("Attaching Event timer."); _timerEvents = new Timer(10000); _timerEvents.Elapsed += TimerEventsOnElapsed; _timerEvents.Start(); }
protected override void UnloadData() { if (_isClientRegistered) { if (MyAPIGateway.Utilities != null) { MyAPIGateway.Utilities.MessageEntered -= GotMessage; } if (!_isServerRegistered) // if not the server, also need to unregister the messagehandler. { ClientLogger.Write("UnregisterMessageHandler"); MyAPIGateway.Multiplayer.UnregisterMessageHandler(EconomyConsts.ConnectionId, _messageHandler); } if (DelayedConnectionRequestTimer != null) { DelayedConnectionRequestTimer.Stop(); DelayedConnectionRequestTimer.Close(); } ClientLogger.Write("Closed"); ClientLogger.Terminate(); } if (_isServerRegistered) { ServerLogger.Write("UnregisterMessageHandler"); MyAPIGateway.Multiplayer.UnregisterMessageHandler(EconomyConsts.ConnectionId, _messageHandler); if (_timerEvents != null) { ServerLogger.Write("Stopping Event timer."); _timerEvents.Stop(); _timerEvents.Elapsed -= TimerEventsOnElapsed; _timerEvents = null; } Data = null; ServerLogger.Write("Closed"); ServerLogger.Terminate(); } base.UnloadData(); }
private static void ValidateAndUpdateData(EconDataStruct data, List<MarketItemStruct> defaultPrices) { EconomyScript.Instance.ServerLogger.Write("Validating and Updating Data."); // Add missing items that are covered by Default items. foreach (var defaultItem in defaultPrices) { foreach (var market in data.Markets) { var item = market.MarketItems.FirstOrDefault(e => e.TypeId.Equals(defaultItem.TypeId) && e.SubtypeName.Equals(defaultItem.SubtypeName)); if (item == null) { market.MarketItems.Add(new MarketItemStruct { TypeId = defaultItem.TypeId, SubtypeName = defaultItem.SubtypeName, BuyPrice = defaultItem.BuyPrice, SellPrice = defaultItem.SellPrice, IsBlacklisted = defaultItem.IsBlacklisted, Quantity = defaultItem.Quantity }); EconomyScript.Instance.ServerLogger.Write("MarketItem Adding Default item: {0} {1}.", defaultItem.TypeId, defaultItem.SubtypeName); } else { // Disable any blackmarket items. if (!defaultItem.IsBlacklisted) item.IsBlacklisted = false; } } } // Buy/Sell - check we have our NPC banker ready NpcMerchantManager.VerifyAndCreate(data); }
private static EconDataStruct InitData() { EconomyScript.Instance.ServerLogger.Write("Creating new EconDataStruct."); EconDataStruct data = new EconDataStruct(); data.Accounts = new List<BankAccountStruct>(); data.Markets = new List<MarketStruct>(); data.OrderBook = new List<OrderBookStruct>(); return data; }
private static void CheckDefaultMarket(EconDataStruct data, List<MarketItemStruct> defaultPrices) { EconomyScript.Instance.ServerLogger.Write("Checking Default Market Data."); var market = data.Markets.FirstOrDefault(m => m.MarketId == EconomyConsts.NpcMerchantId); if (market == null) { market = new MarketStruct { MarketId = EconomyConsts.NpcMerchantId, MarketZoneType = MarketZoneType.FixedSphere, DisplayName = "Default Zone", MarketZoneSphere = new BoundingSphereD(Vector3D.Zero, EconomyConsts.DefaultTradeRange), // Center of the game world. MarketItems = new List<MarketItemStruct>() }; data.Markets.Add(market); } // Add missing items that are covered by Default items. foreach (var defaultItem in defaultPrices) { var item = market.MarketItems.FirstOrDefault(e => e.TypeId.Equals(defaultItem.TypeId) && e.SubtypeName.Equals(defaultItem.SubtypeName)); if (item == null) { market.MarketItems.Add(new MarketItemStruct { TypeId = defaultItem.TypeId, SubtypeName = defaultItem.SubtypeName, BuyPrice = defaultItem.BuyPrice, SellPrice = defaultItem.SellPrice, IsBlacklisted = defaultItem.IsBlacklisted, Quantity = defaultItem.Quantity }); EconomyScript.Instance.ServerLogger.Write("MarketItem Adding Default item: {0} {1}.", defaultItem.TypeId, defaultItem.SubtypeName); } else { // Disable any blackmarket items. if (!defaultItem.IsBlacklisted) item.IsBlacklisted = false; } } }
public static void SaveData(EconDataStruct data) { string filename = GetDataFilename(); TextWriter writer = MyAPIGateway.Utilities.WriteFileInLocalStorage(filename, typeof(EconDataStruct)); writer.Write(MyAPIGateway.Utilities.SerializeToXML<EconDataStruct>(data)); writer.Flush(); writer.Close(); }
public static void SaveData(EconDataStruct data) { TextWriter writer = MyAPIGateway.Utilities.WriteFileInWorldStorage(WorldStorageDataFilename, typeof(EconDataStruct)); writer.Write(MyAPIGateway.Utilities.SerializeToXML<EconDataStruct>(data)); writer.Flush(); writer.Close(); }
private static void ValidateAndUpdateData(EconDataStruct data, List<MarketItemStruct> defaultPrices) { EconomyScript.Instance.ServerLogger.WriteInfo("Validating and Updating Data."); // Add missing items that are covered by Default items. foreach (var defaultItem in defaultPrices) { foreach (var market in data.Markets) { var item = market.MarketItems.FirstOrDefault(e => e.TypeId.Equals(defaultItem.TypeId) && e.SubtypeName.Equals(defaultItem.SubtypeName)); var isNpcMerchant = market.MarketId == EconomyConsts.NpcMerchantId; // make sure no stock is added to player markets. // TODO: remove this later. It's a temporary fix to setup the new Open property. // Added 01.125. if (isNpcMerchant) market.Open = true; if (item == null) { market.MarketItems.Add(new MarketItemStruct { TypeId = defaultItem.TypeId, SubtypeName = defaultItem.SubtypeName, BuyPrice = defaultItem.BuyPrice, SellPrice = defaultItem.SellPrice, IsBlacklisted = defaultItem.IsBlacklisted, Quantity = isNpcMerchant ? defaultItem.Quantity : 0 }); EconomyScript.Instance.ServerLogger.WriteVerbose("MarketItem Adding Default item: {0} {1}.", defaultItem.TypeId, defaultItem.SubtypeName); } else { // Disable any blackmarket items. if (defaultItem.IsBlacklisted) item.IsBlacklisted = true; } } } // Buy/Sell - check we have our NPC banker ready NpcMerchantManager.VerifyAndCreate(data); // Initial check of account on server load. AccountManager.CheckAccountExpiry(data); }