public static string Abandon(int colonyId, int userId) { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; //moveShip SpacegameServer.Core.Colony colony = core.colonies[colonyId]; //prepare output string ret = ""; XMLGroups.MoveResultTree scan = new XMLGroups.MoveResultTree(); scan.ships = new List <Core.Ship>(); scan.stars = new List <Core.SystemMap>(); scan.colonies = new List <Core.Colony>(); //call abandon if (!colony.Abandon(userId, ref scan.ships)) { return(ret); } scan.colonies.Add(colony); //create xml BusinessConnector.Serialize <BC.XMLGroups.MoveResultTree>(scan, ref ret); return(ret); }
public static SpacegameServer.BC.BusinessConnector createServer() { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; //new SpacegameServer.Core.SpaceServerCore(); -> Singleton SpacegameServer.BC.BusinessConnector bc = new BC.BusinessConnector(); return(bc); }
public static string Repair(int shipId, int userId) { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; //moveShip SpacegameServer.Core.Ship ship = core.ships[shipId]; SpacegameServer.Core.User user = core.users[userId]; Core.Colony colony = null; var IsRepaired = ship.Repair(user, ref colony); //core.colonize(ship, user, newname, ref ret); //do the action //ship.colonize(user, newname, ref ret); //calc the xml result XMLGroups.MoveResultTree scan = new XMLGroups.MoveResultTree(); scan.ships = new List <Core.Ship>(); scan.stars = new List <Core.SystemMap>(); scan.colonies = new List <Core.Colony>(); scan.ships.Add(ship); scan.colonies.Add(colony); string ret = ""; BusinessConnector.Serialize <BC.XMLGroups.MoveResultTree>(scan, ref ret); return(ret); }
public static bool deconstructBuilding(int userId, int colonyId, int buildingId) { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; //ToDo: eventually the xml will be generated here: return(SpacegameServer.Core.ColonyBuildingActions.deconstruct(userId, colonyId, buildingId));; }
public string buildShip() { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; //moveShip SpacegameServer.Core.User user = core.users[userId]; SpacegameServer.Core.ShipBuild builder = new Core.ShipBuild(core); string retValue = ""; int newShipId = 0; //builder.build(shipTemplateId, userId, colonyId, fastBuild, ref retValue); Core.ShipBuildErrorCode errorCode = 0; int errorValue = 0; if (builder.build2(shipTemplateId, userId, colonyId, fastBuild, ref newShipId, ref errorCode, ref errorValue)) { SpacegameServer.BC.XMLGroups.shipBuild built = new SpacegameServer.BC.XMLGroups.shipBuild(); built.Colonies = new List <Core.Colony>(); built.Colonies.Add(core.colonies[colonyId]); built.ship = core.ships[newShipId]; BusinessConnector.Serialize <SpacegameServer.BC.XMLGroups.shipBuild>(built, ref retValue, true); } else { retValue = "<error><errorCode>" + ((int)errorCode).ToString() + "</errorCode>" + "<errorValue>" + errorValue.ToString() + "</errorValue></error>"; } return(retValue); }
public static string buildBuilding(int userId, int colonyId, int tileNr, short buildingId) { string xml = ""; SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; //moveShip SpacegameServer.Core.User user = core.users[userId]; int newBuildingId = -1; SpacegameServer.Core.ColonyBuildingActions.build(userId, colonyId, tileNr, buildingId, ref newBuildingId); if (newBuildingId == -1) { xml = @"<buildResult> <result>0</result> </buildResult>"; return(xml); } Core.ColonyBuilding newBuilding = core.colonyBuildings[newBuildingId]; SpacegameServer.BC.XMLGroups.ColonyBuildings buildResult = new XMLGroups.ColonyBuildings(newBuilding); BusinessConnector.Serialize <SpacegameServer.BC.XMLGroups.ColonyBuildings>(buildResult, ref xml, true); return(xml); }
public ShipMove(int _shipId, byte _direction, int _userId, int _duration = 1, int _attackedShipId = 0) { shipId = _shipId; direction = _direction; userId = _userId; duration = _duration; attackedShipId = _attackedShipId; core = SpacegameServer.Core.Core.Instance; }
public static bool deconstruct(int userId, int colonyId, int buildingId) { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; Colony colony = core.colonies[colonyId]; if (colony == null) { return(false); } if (!deconstructCheck(userId, colony, buildingId)) { return(false); } List <Lockable> elementsToLock = new List <Lockable>(1); elementsToLock.Add(colony); if (!LockingManager.lockAllOrSleep(elementsToLock)) { return(false); } try { //owner may have been changed by another thread, so check it again after locking if (!deconstructCheck(userId, colony, buildingId)) { return(false); } ColonyBuilding itemToRemove = colony.colonyBuildings.Single(colonyBuilding => colonyBuilding.id == buildingId); itemToRemove.Recycle(colony); colony.colonyBuildings.Remove(itemToRemove); core.colonyBuildings.TryRemove(buildingId); Core.Instance.dataConnection.saveColonyGoods(colony); Core.Instance.dataConnection.DeconstructBuilding(userId, buildingId); } catch (Exception ex) { SpacegameServer.Core.Core.Instance.writeExceptionToLog(ex); return(false); } finally { //release the ressources LockingManager.unlockAll(elementsToLock); } return(true); }
public static string buildModules(int userId, int colonyId) { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; //moveShip SpacegameServer.Core.User user = core.users[userId]; string retValue = ""; SpacegameServer.Core.Modules.build(userId, colonyId, ref retValue); //ToDo: eventually the xml will be generated here: return(retValue); }
public static bool build(int userId, int colonyId, ref string xml) { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; // lock colony Colony colony = core.colonies[colonyId]; if (colony == null) { return(false); } for (int i = 0; i < 10; i++) { bool colonyLocked = false; colonyLocked = colony.setLock(); if (colonyLocked) { //userId may have been changed by another thread, so check it again after locking if (colony.userId != userId) { colony.removeLock(); return(false); } Core.Instance.dataConnection.buildModules(userId, colonyId, ref xml); // get colony data (goods, later population (colony ships)) Core.Instance.dataConnection.getColonyStock(core, colony); //release the ressources and return true colony.removeLock(); BC.XMLGroups.Colonize bCCol = new BC.XMLGroups.Colonize(); bCCol.Colony = colony; BC.BusinessConnector.Serialize <BC.XMLGroups.Colonize>(bCCol, ref xml); return(true); } else { Thread.Sleep(Lockable.rnd.Next(0, 50)); } } return(true); }
public static void rename(int userId, int colonyId, string name) { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; if (!core.colonies.ContainsKey(colonyId)) { return; } if (core.colonies[colonyId].userId != userId) { return; } core.colonies[colonyId].rename(name); }
public static void changeActive(int userId, int colonyBuildingId) { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; if (!core.colonyBuildings.ContainsKey(colonyBuildingId)) { return; } if (core.colonyBuildings[colonyBuildingId].userId != userId) { return; } core.colonyBuildings[colonyBuildingId].changeActive(); }
public static void delete(int userId, int templateId) { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; SpacegameServer.Core.User user = core.users[userId]; if (core.shipTemplate.ContainsKey(templateId)) //if(core.shipTemplate.ElementAtOrDefault(templateId) != null) { SpacegameServer.Core.ShipTemplate template = core.shipTemplate[templateId]; if (template.userId != userId) { return; } SpacegameServer.Core.ShipTemplate.delete(template); } }
public string rename() { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; //moveShip SpacegameServer.Core.Ship ship = core.ships[shipId]; SpacegameServer.Core.User user = core.users[userId]; if (ship.userid != userId) { return(""); } ship.rename(newname); return(""); }
public static string selfdestruct(int _userId, int _shipId) { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; SpacegameServer.Core.Ship ship = core.ships[_shipId]; if (ship.userid != _userId) { return(""); } if (ship.isTranscension()) { return(""); } ship.selfDestruct(); return(""); }
public static string MovePathFleet(List <int> fleetIds, List <byte> directions, int userId, int attackedShipId = 0) { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; BC.XMLGroups.MovePathResult Pathresult = new XMLGroups.MovePathResult(); Pathresult.StepResults = new List <string>(); foreach (var direction in directions) { Pathresult.StepResults.Add(MoveFleet(fleetIds, direction, userId, attackedShipId)); } string ret = ""; //BusinessConnector.Serialize<SpacegameServer.Core.Ship>(ship, ref x); BusinessConnector.Serialize <BC.XMLGroups.MovePathResult>(Pathresult, ref ret); return(ret); }
public static string constructSpaceStation(int shipId, int userId) { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; //moveShip SpacegameServer.Core.Ship ship = core.ships[shipId]; SpacegameServer.Core.User user = core.users[userId]; int newShipId = 0; var FinishedConstruction = ship.createSpaceStation(user, ref newShipId); //core.colonize(ship, user, newname, ref ret); //do the action //ship.colonize(user, newname, ref ret); //calc the xml result XMLGroups.MoveResultTree scan = new XMLGroups.MoveResultTree(); scan.ships = new List <Core.Ship>(); scan.stars = new List <Core.SystemMap>(); scan.colonies = new List <Core.Colony>(); if (FinishedConstruction) { core.getUserScans(ship.userid, core.ships[newShipId], ref scan.ships, ref scan.stars, ref scan.colonies); //ship.userid = -1; scan.ships.Add(ship); //if the scan range of the new base is 0, it is not included so add it to the result manually if (!scan.ships.Any(e => e.id == newShipId)) { scan.ships.Add(core.ships[newShipId]); } } string ret = ""; BusinessConnector.Serialize <BC.XMLGroups.MoveResultTree>(scan, ref ret); return(ret); }
public static string transcensionAdd(int shipId, int userId) { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; //break if the elements if ((!core.ships.ContainsKey(shipId)) || (!core.users.ContainsKey(userId))) { return(""); } //moveShip SpacegameServer.Core.Ship ship = core.ships[shipId]; SpacegameServer.Core.User user = core.users[userId]; int stationId; ship.transcensionAdd(user, out stationId); //calc the xml result XMLGroups.MoveResultTree scan = new XMLGroups.MoveResultTree(); scan.ships = new List <Core.Ship>(); scan.stars = new List <Core.SystemMap>(); scan.colonies = new List <Core.Colony>(); ship.userid = -1; scan.ships.Add(ship); if (stationId != 0 && core.ships.ContainsKey(stationId)) { scan.ships.Add(core.ships[stationId]); } string ret = ""; BusinessConnector.Serialize <BC.XMLGroups.MoveResultTree>(scan, ref ret); return(ret); }
public static string refit(int userId, string refitXml) { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; SpacegameServer.Core.User user = core.users[userId]; XmlDocument doc = new XmlDocument(); doc.LoadXml(refitXml); string shipString = doc.DocumentElement.SelectSingleNode("/Ship/ShipId").InnerText; int shipId; if (!Int32.TryParse(shipString, out shipId)) { return(""); } SpacegameServer.Core.Ship ship = core.ships[shipId]; if (!ship.refit(refitXml)) { return(""); } //calc the xml result XMLGroups.MoveResultTree scan = new XMLGroups.MoveResultTree(); scan.ships = new List <Core.Ship>(); scan.stars = new List <Core.SystemMap>(); scan.colonies = new List <Core.Colony>(); scan.ships.Add(ship); string ret = ""; BusinessConnector.Serialize <BC.XMLGroups.MoveResultTree>(scan, ref ret); return(ret); }
public static bool acceptTrade(int userId, int senderId, int senderType, int tradeOfferIdInt, int receiverId, int receiverType, ref string output) { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; SpacegameServer.Core.UserSpaceObject sender = null; SpacegameServer.Core.UserSpaceObject receiver = null; if (senderType == 0) { if (core.ships.ContainsKey(senderId)) { sender = core.ships[senderId]; } } if (senderType == 1) { if (core.colonies.ContainsKey(senderId)) { sender = core.colonies[senderId]; } } if (receiverType == 0) { if (core.ships.ContainsKey(receiverId)) { receiver = core.ships[receiverId]; } } if (receiverType == 1) { if (core.colonies.ContainsKey(receiverId)) { receiver = core.colonies[receiverId]; } } if (sender == null || receiver == null) { return(false); } List <Lockable> toLock = new List <Lockable>(); toLock.Add(sender); toLock.Add(receiver); if (!LockingManager.lockAllOrSleep(toLock)) { return(false); } //make changes //Core.Instance.dataConnection.deconstructBuilding(userId, buildingId, ref xml); //atm : call sql procedure: Core.Instance.dataConnection.acceptTrade(userId, senderId, senderType, tradeOfferIdInt, ref output); //save changes /* * List<AsyncSaveable> toSave = new List<AsyncSaveable>(); * toSave.Add(sender); * toSave.Add(receiver); * DataConnectors.SqlConnector.saveAsync(toSave); */ // get colony data (goods, later population (colony ships)) //Core.Instance.dataConnection.getColonyStock(core, colony); List <UserSpaceObject> toUpdate = new List <UserSpaceObject>(); toUpdate.Add(sender); toUpdate.Add(receiver); Core.Instance.dataConnection.updateStock(toUpdate); //unlock LockingManager.unlockAll(toLock); Core.Instance.DeleteTrade(tradeOfferIdInt); return(true); }
public CommNode(Core.CommunicationNode node, Core.User user) { this.node = node; this.user = user; core = SpacegameServer.Core.Core.Instance; }
public User(int _userId, Core.User user = null) { userId = _userId; core = SpacegameServer.Core.Core.Instance; this.user = user; }
public Message(Core.User user) { this.user = user; core = SpacegameServer.Core.Core.Instance; }
public static bool transfer(int userId,string transfer, ref string xml) { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; SpacegameServer.Core.UserSpaceObject sender = null; SpacegameServer.Core.UserSpaceObject receiver = null; //check XML for sender and receiver XmlDocument doc = new XmlDocument(); doc.LoadXml(transfer); //string xml = "<transfer><sender><shipId>1760</shipId><goods></goods></sender><receiver><colonyId>11</colonyId><goods><good><goodsId>50</goodsId><amount>3</amount></good></goods></receiver></transfer>"; //.SelectSingleNode("/book/title"); XmlNode senderShipNode = doc.DocumentElement.SelectSingleNode("/transfer/sender/shipId"); XmlNode senderColonyNode = doc.DocumentElement.SelectSingleNode("/transfer/sender/colonyId"); XmlNode receiverShipNode = doc.DocumentElement.SelectSingleNode("/transfer/receiver/shipId"); XmlNode receiverColonyNode = doc.DocumentElement.SelectSingleNode("/transfer/receiver/colonyId"); int senderUserId = 0, receiverUserId = 0; if (senderShipNode != null) { string sendStr = senderShipNode.InnerText; int senderId; if (Int32.TryParse(sendStr, out senderId)) { if (core.ships.ContainsKey(senderId)) { sender = core.ships[senderId]; senderUserId = core.ships[senderId].userid; } } } if (senderColonyNode != null) { string ColonyStr = senderColonyNode.InnerText; int ColonyId; if (Int32.TryParse(ColonyStr, out ColonyId)) { if (core.colonies.ContainsKey(ColonyId)) { sender = core.colonies[ColonyId]; senderUserId = core.colonies[ColonyId].userId; } } } if (receiverShipNode != null) { string receiverStr = receiverShipNode.InnerText; int receiverId; if (Int32.TryParse(receiverStr, out receiverId)) { if (core.ships.ContainsKey(receiverId)) { receiver = core.ships[receiverId]; receiverUserId = core.ships[receiverId].userid; } } } if (receiverColonyNode != null) { string receiverStr = receiverColonyNode.InnerText; int receiverId; if (Int32.TryParse(receiverStr, out receiverId)) { if (core.colonies.ContainsKey(receiverId)) { receiver = core.colonies[receiverId]; receiverUserId = core.colonies[receiverId].userId; } } } if (sender == null || receiver == null) return false; //check that one does not move cargo from a neutral (0) space station (hullId 201) if( sender is Ship) { var SendShip = (Ship)sender; if (SendShip.hullid == 201 && SendShip.userid == 0) return false; } if (receiver is Ship) { var RecShip = (Ship)receiver; if (RecShip.hullid == 201 && RecShip.userid == 0) return false; } //test if goods are received: var receive = false; XmlNode sentNode = doc.DocumentElement.SelectSingleNode("/transfer/sender/goods/good"); XmlNode receiveNode = doc.DocumentElement.SelectSingleNode("/transfer/receiver/goods/good"); if (receiveNode != null) receive = true; //if trade is between users, and goods are received, check that they are at war if (receive && senderUserId != receiverUserId && receiverUserId != 0) { //check that both are enemies (or player 0 is involved) if (receive && Core.Instance.userRelations.getRelation(Core.Instance.users[senderUserId], Core.Instance.users[receiverUserId]) != 0) { return false; } } List<Lockable> toLock = new List<Lockable>(); toLock.Add(sender); toLock.Add(receiver); if (!LockingManager.lockAllOrSleep(toLock)) return false; //make changes //Core.Instance.dataConnection.deconstructBuilding(userId, buildingId, ref xml); //atm : call sql procedure: Core.Instance.dataConnection.transfer(userId, transfer, ref xml); //save changes /* List<AsyncSaveable> toSave = new List<AsyncSaveable>(); toSave.Add(sender); toSave.Add(receiver); DataConnectors.SqlConnector.saveAsync(toSave); */ // get colony data (goods, later population (colony ships)) //Core.Instance.dataConnection.getColonyStock(core, colony); List<UserSpaceObject> toUpdate = new List<UserSpaceObject>(); toUpdate.Add(sender); toUpdate.Add(receiver); Core.Instance.dataConnection.updateStock(toUpdate); //unlock LockingManager.unlockAll(toLock); return true; }
public static bool transfer2(int userId, SpacegameServer.Core.Transfer transfer, ref string xml) { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; SpacegameServer.Core.UserSpaceObject sender = null; SpacegameServer.Core.UserSpaceObject receiver = null; Ship SenderShip = null; Ship TargetShip = null; Colony SenderColony = null; Colony TargetColony = null; int senderUserId = 0; int receiverUserId = 0; //for sender and receiver if (transfer.Sender < 1 || transfer.SenderType < 1 || transfer.TargetType < 1) return false; if (transfer.SenderType == 1) { if (core.ships.ContainsKey(transfer.Sender)) { SenderShip = core.ships[transfer.Sender]; sender = core.ships[transfer.Sender]; senderUserId = SenderShip.userid; } } if (transfer.SenderType == 2) { if (core.colonies.ContainsKey(transfer.Sender)) { SenderColony = core.colonies[transfer.Sender]; sender = core.colonies[transfer.Sender]; senderUserId = SenderColony.userId; } } if (transfer.TargetType == 1) { if (core.ships.ContainsKey(transfer.Target)) { TargetShip = core.ships[transfer.Target]; receiver = core.ships[transfer.Target]; receiverUserId = core.ships[transfer.Target].userid; } else { } } if (transfer.TargetType == 2) { if (core.colonies.ContainsKey(transfer.Target)) { TargetColony = core.colonies[transfer.Target]; receiver = core.colonies[transfer.Target]; receiverUserId = TargetColony.userId; } //mock a target for srap and recycling actions if (transfer.Target < 1) { TargetShip = Ship.createTransferMock(); receiver = TargetShip; receiverUserId = 0; } } if (sender == null || receiver == null) return false; if (!TransferChecks(userId, sender, receiver, transfer, SenderShip, TargetShip, SenderColony, TargetColony)) return false; List<Lockable> toLock = new List<Lockable>(); toLock.Add(sender); if (receiver.GetUserId() != 0) { toLock.Add(receiver); } if (!LockingManager.lockAllOrSleep(toLock)) return false; if (!TransferChecks(userId, sender, receiver, transfer, SenderShip, TargetShip, SenderColony, TargetColony)) { LockingManager.unlockAll(toLock); return false; } try { if (SenderShip != null) SenderShip.RemoveAllTrades(); if (TargetShip != null) TargetShip.RemoveAllTrades(); foreach (var transferLine in transfer.Goods) { //var Good = Core.Instance.Goods[transferLine.Id]; sender.addGood((short)transferLine.Id, -transferLine.Qty); //recycle: if (transfer.Target == 0) { Core.Instance.Goods[transferLine.Id].Recycle(sender, transferLine.Qty); } //add goods if it is not scrapping or rececling... if (TargetShip == null || TargetShip.id > 0) receiver.addGood((short)transferLine.Id, transferLine.Qty); } //Core.Instance.dataConnection.saveShipGoods(this); //core.dataConnection.saveColonyGoods(colony); if (SenderShip != null) Core.Instance.dataConnection.saveShipGoods(SenderShip); if (TargetShip != null && transfer.Target > 0) Core.Instance.dataConnection.saveShipGoods(TargetShip); if (SenderColony != null) Core.Instance.dataConnection.saveColonyGoods(SenderColony); if (TargetColony != null && transfer.Target > 0) Core.Instance.dataConnection.saveColonyGoods(TargetColony); } catch (Exception e) { Core.Instance.writeExceptionToLog(e); return false; } finally { //unlock LockingManager.unlockAll(toLock); } return true; }
public static bool BuildModules(int userId, SpacegameServer.Core.Transfer transfer, ref string xml) { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; if (!core.colonies.ContainsKey(transfer.Sender)) { return(false); } Colony colony = core.colonies[transfer.Sender]; if (colony.userId != userId) { return(false); } User user = Core.Instance.users[userId]; //check if modules are researched: foreach (var moduleLine in transfer.Goods) { if (moduleLine.Qty < 0) { return(false); } //check that the Module exists if (!Core.Instance.Modules.Any(e => e != null && e.goodsId == moduleLine.Id)) { return(false); } Module toBuild = Core.Instance.Modules.First(e => e != null && e.goodsId == moduleLine.Id); if (!user.hasModuleResearch(toBuild)) { return(false); } } if (!Modules.checkGoodsAvailability(colony, transfer)) { return(false); } List <Lockable> elementsToLock = new List <Lockable>(3); elementsToLock.Add(colony); if (!LockingManager.lockAllOrSleep(elementsToLock)) { return(false); } try { if (!Modules.checkGoodsAvailability(colony, transfer)) { return(false); } //remove TemplateModules foreach (var moduleLine in transfer.Goods) { Module toBuild = core.Modules.First(e => e != null && e.goodsId == moduleLine.Id); foreach (var costs in toBuild.ModulesCosts) { colony.addGood(costs.goodsId, -costs.amount * moduleLine.Qty, false); } colony.addGood(toBuild.goodsId, moduleLine.Qty, false); } Core.Instance.dataConnection.saveColonyGoods(colony); } catch (Exception ex) { SpacegameServer.Core.Core.Instance.writeExceptionToLog(ex); } finally { //release the ressources and return true LockingManager.unlockAll(elementsToLock); } return(true); }
public static string createUpdate(int userId, string templateXml) { /* * <?xml version="1.0" encoding="utf-8" ?> * <ShipTemplate> * <ShipTemplateId>1</ShipTemplateId> * <ShipTemplateHullId>1</ShipTemplateHullId> * <name>testName</name> * <shipHullsImage>1</shipHullsImage> * <gif>scout.png</gif> * <modulePositions> * <modulePosition> * <posX>3</posX> * <posY>3</posY> * <moduleId>1</moduleId> * </modulePosition> * <modulePosition> * <posX>2</posX> * <posY>3</posY> * <moduleId>2</moduleId> * </modulePosition> * </modulePositions> * </ShipTemplate> */ SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; SpacegameServer.Core.User user = core.users[userId]; XmlDocument doc = new XmlDocument(); doc.LoadXml(templateXml); string templateIdString = doc.DocumentElement.SelectSingleNode("/ShipTemplate/ShipTemplateId").InnerText; int templateId; if (!Int32.TryParse(templateIdString, out templateId)) { return(""); } SpacegameServer.Core.ShipTemplate newTemplate = null; SpacegameServer.Core.ShipTemplate oldTemplate = null; if (!SpacegameServer.Core.ShipTemplate.createUpdate(templateXml, userId, ref newTemplate, ref oldTemplate)) { return(""); } //calc the xml result SpacegameServer.BC.XMLGroups.ShipTemplates ShipTemplate = new SpacegameServer.BC.XMLGroups.ShipTemplates(); ShipTemplate.ShipTemplate.Add(newTemplate); if (oldTemplate != null) { ShipTemplate.ShipTemplate.Add(oldTemplate); } string ret = ""; BusinessConnector.Serialize <SpacegameServer.BC.XMLGroups.ShipTemplates>(ShipTemplate, ref ret); return(ret); }
public static BC.XMLGroups.MoveResultTree MoveFleet2(List <int> fleetIds, byte direction, int userId, int duration = 1, int attackedShipId = 0) { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; BC.XMLGroups.MoveResultTree scan = new BC.XMLGroups.MoveResultTree(); scan.result = 0; List <Core.Ship> fleet = new List <Core.Ship>(); foreach (var shipId in fleetIds) { if (!core.ships.ContainsKey(shipId)) { return(scan); } fleet.Add(core.ships[shipId]); } if (fleet.Count == 0) { return(scan); } byte result = 0; //Todo: move kann auch occupyColony zurücksenden string combatLog = ""; //SpacegameServer.Core.Classes.ShipMovement move = new SpacegameServer.Core.Classes.ShipMovement(); Core.Combat Combat = null; SpacegameServer.Core.Ship.MoveFleet(fleet, direction, userId, duration, ref result, ref combatLog, ref Combat, attackedShipId); if (Combat != null) { SpacegameServer.BC.XMLGroups.CombatMessages messages = new SpacegameServer.BC.XMLGroups.CombatMessages(); messages.messages.Add(Combat); combatLog = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(messages); } //move.move(ship, direction, userId, duration, ref result, ref combatLog); /* * scanResult scan = new scanResult(); * scan.ships.ship = new List<Core.Ship>(); * scan.stars.star = new List<Core.StarMap>(); * scan.colonies.colony = new List<Core.Colony>(); * * * core.getUserScans(ship.userid, ship, ref scan.ships.ship, ref scan.stars.star, ref scan.colonies.colony); * scan.result = result; * scan.combatLog = combatLog; */ scan.ships = new List <Core.Ship>(); scan.stars = new List <Core.SystemMap>(); scan.colonies = new List <Core.Colony>(); var MaxScanrange = fleet.Select(s => s.scanRange).Max(); var BestScanner = fleet.First(e => e.scanRange == MaxScanrange); core.getUserScans(userId, BestScanner, ref scan.ships, ref scan.stars, ref scan.colonies); //user tried to move into an area that was neutral to him //fetch the system/colony that creatd the neutral area if (result == 31) { scan.ships = new List <Core.Ship>(); scan.stars = new List <Core.SystemMap>(); scan.colonies = new List <Core.Colony>(); core.getAreaCreator(direction, userId, BestScanner, ref scan.ships, ref scan.stars, ref scan.colonies); } scan.result = result; scan.combatLog = combatLog; return(scan); }
public static bool build(int userId, int colonyId, int tileNr, short buildingId, ref int newBuildingId) { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; //check against research if (!Core.Instance.users.ContainsKey(userId)) { return(false); } var User = Core.Instance.users[userId]; if (!User.hasGameObjectEnabled(3, buildingId)) { return(false); } Colony colony = core.colonies[colonyId]; if (colony == null) { return(false); } Building template = core.Buildings[buildingId]; if (template == null) { return(false); } //check on building count in case of mines, hydrocarbon, rare chemicals if (buildingId == 2 || buildingId == 6) { if (ColonyBuildingActions.countBuildings(colony, buildingId) >= ColonyBuildingActions.allowedBuildings(colony, buildingId)) { return(false); } } //check tile position if (colony.colonyBuildings.Any(e => e.planetSurfaceId == tileNr)) { return(false); } // lock colony List <Lockable> elementsToLock = new List <Lockable>(1); elementsToLock.Add(colony); if (!LockingManager.lockAllOrSleep(elementsToLock)) { return(false); } try { //userId may have been changed by another thread, so check it again after locking if (colony.userId != userId) { colony.removeLock(); return(false); } //test ressources on colony var costOK = true; foreach (var cost in template.BuildingCosts) { if (!colony.goods.Any(e => e.goodsId == cost.goodsId)) { costOK = false; break; } if (colony.goods.Find(e => e.goodsId == cost.goodsId).amount < cost.amount) { costOK = false; break; } } if (!costOK) { colony.removeLock(); return(false); } if (template.oncePerColony) { if (colony.colonyBuildings.Any(e => e.buildingId == template.id)) { colony.removeLock(); return(false); } } //Special Ressourcen /* * if (template.id > 1029 && template.id < 1035) * { * var star = Core.Instance.stars[colony.starId]; * if (star.ressourceid != template.id - 1030) * { * colony.removeLock(); * return false; * } * } */ //Create Building var newId = (int)core.identities.colonyBuildingId.getNext(); newBuildingId = newId; var building = new ColonyBuilding(core, newId, colony, template, tileNr, userId); /* * var building = new ColonyBuilding(newId); * building.colonyId = colony.id; * building.colony = colony; * building.planetSurfaceId = tileNr; * building.userId = userId; * building.buildingId = buildingId; * building.isActive = true; * building.underConstruction = false; * building.remainingHitpoint = 100; * building.building = template; * colony.colonyBuildings.Add(building); * Core.Instance.colonyBuildings.Add(newId, building); */ foreach (var cost in template.BuildingCosts) { colony.addGood(cost.goodsId, -cost.amount); } /*check auf: * TODO - Feld frei? * TODO - Forschung */ //Todo: Scanrange, CommNode if (building.buildingId == 51) { building.colony.scanRange = Math.Max(building.colony.scanRange, (byte)7); core.dataConnection.saveSingleColony(building.colony); } if (building.buildingId == 64) { building.colony.scanRange = Math.Max(building.colony.scanRange, (byte)9); core.dataConnection.saveSingleColony(building.colony); } core.dataConnection.saveColonyBuildings(building); core.dataConnection.saveColonyGoods(colony); CommunicationNode.createCommNodeBuilding(building); //Core.Instance.dataConnection.buildBuilding(userId, colonyId, tileNr, buildingId, ref xml); // get colony data (goods, later population (colony ships)) //Core.Instance.dataConnection.getColonyStock(core, colony); //Core.Instance.dataConnection.getColonyBuildings(core, colony); } catch (Exception ex) { core.writeExceptionToLog(ex); } finally { LockingManager.unlockAll(elementsToLock); } return(true); }
public string colonize() { SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance; //fetch user and ship objects SpacegameServer.Core.Ship ship = core.ships[shipId]; SpacegameServer.Core.User user = core.users[userId]; //create result data sctructure string ret = ""; XMLGroups.MoveResultTree scan = new XMLGroups.MoveResultTree(); scan.ships = new List <Core.Ship>(); scan.stars = new List <Core.SystemMap>(); scan.colonies = new List <Core.Colony>(); //fetch planet if (!core.stars.ContainsKey((int)ship.systemid)) { return(ret); } Core.SolarSystemInstance planet = core.stars[(int)ship.systemid].getPlanet(ship.getSystemCoords()); if (planet == null) { return(ret); } if (!user.CanColonize(planet)) { return(ret); } //var MajorColony = //create Colony Core.Colony newColony = null; if (!ship.colonize(user, newname, ref scan.ships, ref newColony, planet)) { return(ret); } scan.ships.Add(ship); string shipRet = ""; /* * BusinessConnector.Serialize<List<SpacegameServer.Core.Ship>>(scan.ships, ref shipRet, true); * //shipRet += ret; * * // remove </ArrayOfShip> , add ret , add </ArrayOfShip> * shipRet = shipRet.Substring(0, shipRet.Length - "</ArrayOfShip>".Length); * shipRet = shipRet + ret + "</ArrayOfShip>"; */ SpacegameServer.BC.XMLGroups.Colonize response = new XMLGroups.Colonize(); response.respCode = 1; response.Colony = newColony; response.ships = scan.ships; //response.planet = planet; response.ColonyPlanet = new XMLGroups.ColonyPlanet(planet.id, planet, planet.surfaceFields); //response.planet2 = new XMLGroups.ColonyPlanets(); //response.planet2 //response.planets.AddRange(core.planets.Where(e => e.Value.colonyId == colonyId).Select(e => new XMLGroups.ColonyPlanet(e.Value.id, e.Value, e.Value.surfaceFields))); BusinessConnector.Serialize <SpacegameServer.BC.XMLGroups.Colonize>(response, ref shipRet, true); return(shipRet); }