public static void CreateEventFromDiplomacy(DiplomaticEntity sender, DiplomaticEntity target, Relation newRelation, Relation oldRelation) { int RelationImproved = newRelation > oldRelation ? 1 : 0; GalacticEventType type = DetermineDiplomaticEventType(sender.diplomaticType == 2, target.diplomaticType == 2, newRelation); GalacticEvents.AddNewEvent(type, int1: sender.id, int2: target.id, int3: (int?)newRelation, int4: (int?)oldRelation, int5: sender.diplomaticType, int6: target.diplomaticType); }
public void fight(Ship Attacker, Ship Defender, Field BattleField) { Core core = Core.Instance; //init values this.attackerId = Attacker.id; this.defenderId = Defender.id; this.attackerUserId = Attacker.userid; this.defenderUserId = Defender.userid; this.starId = BattleField.starId ?? 0; this.spaceX = BattleField.x; this.spaceY = BattleField.y; this.systemX = Defender.systemX; this.systemY = Defender.systemY; this.attackerDamageDealt = 0; this.defenderDamageDealt = 0; this.attackerHitPointsRemain = Attacker.hitpoints; this.defenderHitPointsRemain = Defender.hitpoints; this.AttackerName = Attacker.NAME; this.DefenderName = Defender.NAME; this.DefenderHasRead = false; this.MessageDT = DateTime.Now; this.DefenderShield = Defender.damagereduction; this.AttackerShield = Attacker.damagereduction; this.AttackerExperience = Attacker.Experience; this.DefenderExperience = Defender.Experience; this.AttackerShipHullId = Attacker.hullid; this.DefenderShipHullId = Defender.hullid; this.AttackerShipHullImageId = Attacker.shipHullsImage; this.DefenderShipHullImageId = Defender.shipHullsImage; this.AttackerEvasion = Attacker.FullDefense(); this.AttackerMaxHitPoints = Attacker.CombatMaxHitpoint; this.attackerStartHitpoint = Attacker.hitpoints; Attacker.CombatStartHitpoint = Attacker.hitpoints; this.DefenderEvasion = Defender.FullDefense(); this.DefenderMaxHitPoints = Defender.CombatMaxHitpoint; this.DefenderStartHitpoint = Defender.hitpoints; Defender.CombatStartHitpoint = Defender.hitpoints; //mock the Tanscendence Defense if (Defender.isTranscension()) { Defender.shipModules.Clear(); Defender.shipModules.Add(new ShipModule(Defender.id, 1105, 1, 1)); Defender.shipModules.Add(new ShipModule(Defender.id, 1105, 2, 2)); } //get target Field modifiers: Tuple <byte, byte> systemXY = null; if (this.starId != 0 && this.systemX != 0 && this.systemY != 0) { systemXY = new Tuple <byte, byte>((byte)(this.systemX), (byte)(this.systemY)); } this.CombatField = new SpacegameServer.Core.CombatField(BattleField, systemXY); /* * ObjectDescription targetFieldObjDesc = Core.Instance.TargetFieldObject(BattleField, systemXY); * objectOnMap = null; * Dictionary<short,ObjectWeaponModificator> ObjectWeaponModificator = null; * if (targetFieldObjDesc != null) * { * objectOnMap = core.ObjectsOnMap.ContainsKey(targetFieldObjDesc.id) ? core.ObjectsOnMap[targetFieldObjDesc.id] : null; * ObjectWeaponModificator = core.ObjectWeaponModificators.ContainsKey(targetFieldObjDesc.id) ? core.ObjectWeaponModificators[targetFieldObjDesc.id] : null; * } */ int defenseBonus = this.CombatField.objectOnMap != null ? this.CombatField.objectOnMap.Defensebonus : 0; //fight: int battleCounter = 0; bool defenderFights = true; var AttackerEvasion = Attacker.FullDefense(); double HitValue = Lockable.rnd.Next(0, AttackerEvasion + Defender.FullDefense()); if (HitValue < AttackerEvasion) { defenderFights = false; } while (battleCounter < 100 && Attacker.hitpoints > 0 && Defender.hitpoints > 0) { if (defenderFights) { if (Defender.crew >= 0 && Defender.energy >= 0) { this.createBattleRound(Defender, Attacker, 0, battleCounter, defenderFights); } } else { this.createBattleRound(Attacker, Defender, defenseBonus, battleCounter, defenderFights); } defenderFights = !defenderFights; battleCounter++; } Attacker.CombatStartHitpoint = Attacker.hitpoints; Defender.CombatStartHitpoint = Defender.hitpoints; var Systemname = this.starId != 0 ? Core.Instance.stars[this.starId].systemname : ""; if (Attacker.hitpoints <= 0) { GalacticEvents.AddNewEvent(GalacticEventType.CombatDefenderWins, int1: Attacker.id, int2: Defender.id, int3: Attacker.hullid, int4: Defender.hullid, int5: this.spaceX, int6: this.spaceY, string1: Attacker.NAME, string2: Defender.NAME, string3: Systemname, string4: Attacker.userid.ToString(), string5: Defender.userid.ToString()); Defender.Experience += Attacker.ExperienceBase(); Attacker.destroy(); } if (Defender.hitpoints <= 0) { GalacticEvents.AddNewEvent(GalacticEventType.CombatAttackerWins, int1: Attacker.id, int2: Defender.id, int3: Attacker.hullid, int4: Defender.hullid, int5: this.spaceX, int6: this.spaceY, string1: Attacker.NAME, string2: Defender.NAME, string3: Systemname, string4: Attacker.userid.ToString(), string5: Defender.userid.ToString()); Attacker.Experience += Defender.ExperienceBase(); Defender.destroy(); } if (Core.Instance.users[Attacker.userid].showCombatPopup) { int x = Attacker.userid; core.SendCombat(this, x); } }
public bool Abandon(int previousOwnerId, ref List <Ship> ships) { Core Core = Core.Instance; if (!Core.users.Any(e => e.Value.AiId == 3)) { return(false); } User Separatist = Core.users.First(e => e.Value.AiId == 3).Value; User oldUser = Core.users[this.userId]; List <Lockable> elementsToLock = new List <Lockable>(1); elementsToLock.Add(this); List <Ship> shipsChangingOwnership = new List <Ship>(); foreach (var ship in this.field.ships.Where(e => e.userid == oldUser.id && e.systemX == this.SystemX && e.systemY == this.SystemY)) { shipsChangingOwnership.Add(ship); elementsToLock.Add(ship); } if (!LockingManager.lockAllOrSleep(elementsToLock)) { return(false); } try { if (this.userId != previousOwnerId) { return(false); } this.userId = Separatist.id; foreach (var colBuilding in this.colonyBuildings) { colBuilding.userId = this.userId; } foreach (var ship in shipsChangingOwnership) { ship.userid = Separatist.id; ships.Add(ship); } //save colony and buildings Core.dataConnection.saveColonyFull(this.planet, this, false); //save Ships Core.dataConnection.saveShips(shipsChangingOwnership); GalacticEvents.AddNewEvent(GalacticEventType.ColonyAbandoned, int1: previousOwnerId, int2: this.id, string1: this.name); } catch (Exception ex) { Core.writeExceptionToLog(ex); } finally { LockingManager.unlockAll(elementsToLock); } return(true); }