public bool ProcessTrade(bool oneTimeOnly) { var fac1 = FactionByProposingFactionID; var fac2 = FactionByAcceptingFactionID; double metalFac1toFac2 = 0; double energyFac1toFac2 = 0; double dropshipsFac1toFac2 = 0; double bombersFac1toFac2 = 0; double warpsFac1toFac2 = 0; foreach (var te in TreatyEffects.Where(x => x.TreatyEffectType.IsOneTimeOnly == oneTimeOnly)) { var tr = te.TreatyEffectType; if (tr.EffectGiveMetal == true) { if (fac1 == te.FactionByGivingFactionID) metalFac1toFac2 += te.Value ?? 0; else metalFac1toFac2 -= te.Value ?? 0; } if (tr.EffectGiveEnergy == true) { if (fac1 == te.FactionByGivingFactionID) energyFac1toFac2 += te.Value ?? 0; else energyFac1toFac2 -= te.Value ?? 0; } if (tr.EffectGiveDropships == true) { if (fac1 == te.FactionByGivingFactionID) dropshipsFac1toFac2 += te.Value ?? 0; else dropshipsFac1toFac2 -= te.Value ?? 0; } if (tr.EffectGiveBombers == true) { if (fac1 == te.FactionByGivingFactionID) bombersFac1toFac2 += te.Value ?? 0; else bombersFac1toFac2 -= te.Value ?? 0; } if (tr.EffectGiveWarps == true) { if (fac1 == te.FactionByGivingFactionID) warpsFac1toFac2 += te.Value ?? 0; else warpsFac1toFac2 -= te.Value ?? 0; } } if (fac1.Metal < metalFac1toFac2 || fac2.Metal < -metalFac1toFac2) return false; if (fac1.EnergyProducedLastTurn < energyFac1toFac2 || fac2.EnergyProducedLastTurn < -energyFac1toFac2) return false; if (fac1.Dropships < dropshipsFac1toFac2 || fac2.Dropships < -dropshipsFac1toFac2) return false; if (fac1.Bombers < bombersFac1toFac2 || fac2.Bombers < -bombersFac1toFac2) return false; if (fac1.Warps < warpsFac1toFac2 || fac2.Warps < -warpsFac1toFac2) return false; fac1.ProduceMetal(-metalFac1toFac2); fac2.ProduceMetal(metalFac1toFac2); fac1.EnergyProducedLastTurn -= energyFac1toFac2; fac2.EnergyProducedLastTurn += energyFac1toFac2; fac1.ProduceDropships(-dropshipsFac1toFac2); fac2.ProduceDropships(dropshipsFac1toFac2); fac1.ProduceBombers(-bombersFac1toFac2); fac2.ProduceBombers(bombersFac1toFac2); fac1.ProduceWarps(-warpsFac1toFac2); fac2.ProduceWarps(warpsFac1toFac2); foreach (var te in TreatyEffects.Where(x => x.TreatyEffectType.IsOneTimeOnly == oneTimeOnly && x.TreatyEffectType.EffectGiveInfluence == true)) { var org = te.Planet.PlanetFactions.FirstOrDefault(x => x.FactionID == te.GivingFactionID); if (org != null) { var entry = te.Planet.PlanetFactions.FirstOrDefault(x => x.FactionID == te.ReceivingFactionID); if (entry == null) { entry = new PlanetFaction() { PlanetID = te.Planet.PlanetID, FactionID = te.ReceivingFactionID }; te.Planet.PlanetFactions.Add(entry); } entry.Influence += org.Influence; org.Influence = 0; } } return true; }
public bool ProcessTrade(bool oneTimeOnly) { var fac1 = FactionByProposingFactionID; var fac2 = FactionByAcceptingFactionID; double metalFac1toFac2 = 0; double energyFac1toFac2 = 0; double dropshipsFac1toFac2 = 0; double bombersFac1toFac2 = 0; double warpsFac1toFac2 = 0; foreach (var te in TreatyEffects.Where(x => x.TreatyEffectType.IsOneTimeOnly == oneTimeOnly)) { var tr = te.TreatyEffectType; if (tr.EffectGiveMetal == true) { if (fac1 == te.FactionByGivingFactionID) { metalFac1toFac2 += te.Value ?? 0; } else { metalFac1toFac2 -= te.Value ?? 0; } } if (tr.EffectGiveEnergy == true) { if (fac1 == te.FactionByGivingFactionID) { energyFac1toFac2 += te.Value ?? 0; } else { energyFac1toFac2 -= te.Value ?? 0; } } if (tr.EffectGiveDropships == true) { if (fac1 == te.FactionByGivingFactionID) { dropshipsFac1toFac2 += te.Value ?? 0; } else { dropshipsFac1toFac2 -= te.Value ?? 0; } } if (tr.EffectGiveBombers == true) { if (fac1 == te.FactionByGivingFactionID) { bombersFac1toFac2 += te.Value ?? 0; } else { bombersFac1toFac2 -= te.Value ?? 0; } } if (tr.EffectGiveWarps == true) { if (fac1 == te.FactionByGivingFactionID) { warpsFac1toFac2 += te.Value ?? 0; } else { warpsFac1toFac2 -= te.Value ?? 0; } } } if (fac1.Metal < metalFac1toFac2 || fac2.Metal < -metalFac1toFac2) { return(false); } if (fac1.EnergyProducedLastTurn < energyFac1toFac2 || fac2.EnergyProducedLastTurn < -energyFac1toFac2) { return(false); } if (fac1.Dropships < dropshipsFac1toFac2 || fac2.Dropships < -dropshipsFac1toFac2) { return(false); } if (fac1.Bombers < bombersFac1toFac2 || fac2.Bombers < -bombersFac1toFac2) { return(false); } if (fac1.Warps < warpsFac1toFac2 || fac2.Warps < -warpsFac1toFac2) { return(false); } fac1.ProduceMetal(-metalFac1toFac2); fac2.ProduceMetal(metalFac1toFac2); fac1.EnergyProducedLastTurn -= energyFac1toFac2; fac2.EnergyProducedLastTurn += energyFac1toFac2; fac1.ProduceDropships(-dropshipsFac1toFac2); fac2.ProduceDropships(dropshipsFac1toFac2); fac1.ProduceBombers(-bombersFac1toFac2); fac2.ProduceBombers(bombersFac1toFac2); fac1.ProduceWarps(-warpsFac1toFac2); fac2.ProduceWarps(warpsFac1toFac2); foreach (var te in TreatyEffects.Where(x => x.TreatyEffectType.IsOneTimeOnly == oneTimeOnly && x.TreatyEffectType.EffectGiveInfluence == true)) { var org = te.Planet.PlanetFactions.FirstOrDefault(x => x.FactionID == te.GivingFactionID); if (org != null) { var entry = te.Planet.PlanetFactions.FirstOrDefault(x => x.FactionID == te.ReceivingFactionID); if (entry == null) { entry = new PlanetFaction() { PlanetID = te.Planet.PlanetID, FactionID = te.ReceivingFactionID }; te.Planet.PlanetFactions.Add(entry); } entry.Influence += org.Influence; org.Influence = 0; } } return(true); }
public ActionResult SendDropships(int planetID, int count, bool? useWarp) { var db = new ZkDataContext(); Account acc = db.Accounts.Single(x => x.AccountID == Global.AccountID); if (acc.Faction == null) return Content("Join a faction first"); Planet planet = db.Planets.SingleOrDefault(x => x.PlanetID == planetID); int there = planet.PlanetFactions.Where(x => x.FactionID == acc.FactionID).Sum(x => (int?)x.Dropships) ?? 0; bool accessible = useWarp == true ? planet.CanDropshipsWarp(acc.Faction) : planet.CanDropshipsAttack(acc.Faction); if (!accessible) return Content(string.Format("That planet cannot be attacked")); if (Global.Server.GetPlanetBattles(planet).Any(x => x.IsInGame)) return Content("Battle in progress on the planet, cannot send ships"); int cnt = Math.Max(count, 0); int capa = acc.GetDropshipCapacity(); if (cnt + there > capa) return Content("Too many ships, increase fleet size"); cnt = Math.Min(cnt, (int)acc.GetDropshipsAvailable()); if (useWarp == true) cnt = Math.Min(cnt, (int)acc.GetWarpAvailable()); if (cnt > 0) { acc.SpendDropships(cnt); if (useWarp == true) acc.SpendWarps(cnt); if (planet.Account != null) { Global.Server.GhostPm(planet.Account.Name, string.Format( "Warning: long range scanners detected fleet of {0} ships inbound to your planet {1} {3}/Planetwars/Planet/{2}", cnt, planet.Name, planet.PlanetID, GlobalConst.BaseSiteUrl)); } PlanetFaction pac = planet.PlanetFactions.SingleOrDefault(x => x.FactionID == acc.FactionID); if (pac == null) { pac = new PlanetFaction { FactionID = Global.FactionID, PlanetID = planetID }; db.PlanetFactions.InsertOnSubmit(pac); } pac.Dropships += cnt; pac.DropshipsLastAdded = DateTime.UtcNow; if (cnt > 0) { db.Events.InsertOnSubmit(Global.CreateEvent("{0} sends {1} {2} dropships to {3} {4} {5}", acc, cnt, acc.Faction, planet.Faction, planet, useWarp == true ? "using warp drives" : "")); } db.SubmitChanges(); } return RedirectToAction("Planet", new { id = planetID }); }
/// <summary> /// Spread influence through wormholes /// </summary> public void SpreadInfluence() { foreach (var planet in Planets) { var sumInfluence = planet.PlanetFactions.Sum(x => (double?)x.Influence) ?? 0; var freeRoom = GlobalConst.PlanetWarsMaximumIP - sumInfluence; if (freeRoom > 0) { var spreads = new Dictionary <Faction, double>(); var hasInhibitor = planet.PlanetStructures.Any(x => x.IsActive && x.StructureType.EffectBlocksInfluenceSpread == true); // check all linked planets to spread influence here foreach (var link in planet.LinksByPlanetID1.Union(planet.LinksByPlanetID2)) { var otherPlanet = link.PlanetID1 == planet.PlanetID ? link.PlanetByPlanetID2 : link.PlanetByPlanetID1; if (otherPlanet.Faction != null) { if (otherPlanet.Faction != planet.Faction && hasInhibitor) { continue; } // diplomacy check if (!otherPlanet.Faction.GaveTreatyRight(planet, x => x.EffectPreventInfluenceSpread == true)) { var spread = otherPlanet.PlanetStructures.Where(x => x.IsActive).Sum(x => (double?)(x.StructureType.EffectInfluenceSpread ?? 0)) ?? 0; double oldVal; spreads.TryGetValue(otherPlanet.Faction, out oldVal); spreads[otherPlanet.Faction] = oldVal + spread; } } } // handle guerilla jumpgates foreach (var guerillaWormhole in planet.PlanetStructuresByTargetPlanetID.Where(x => x.IsActive && x.StructureType.EffectRemoteInfluenceSpread > 0)) { var sourcePlanet = guerillaWormhole.Planet; if (sourcePlanet.Faction != null) { if (sourcePlanet.Faction != planet.Faction && hasInhibitor) { continue; } // diplomacy check if (!sourcePlanet.Faction.GaveTreatyRight(planet, x => x.EffectPreventInfluenceSpread == true)) { var spread = guerillaWormhole.StructureType.EffectRemoteInfluenceSpread ?? 0; double oldVal; spreads.TryGetValue(sourcePlanet.Faction, out oldVal); spreads[sourcePlanet.Faction] = oldVal + spread; } } } // same-planet spread if (planet.Faction != null) { var autospread = planet.PlanetStructures.Where(x => x.IsActive).Sum(x => (double?)(x.StructureType.EffectInfluenceSpread ?? 0)) ?? 0; double oldVal2; spreads.TryGetValue(planet.Faction, out oldVal2); spreads[planet.Faction] = oldVal2 + autospread; } /* * Replacement proposal for free = 0 * var sumSpreads = spreads.Sum(x => x.Value); * double squeeze = 1.0; * if (sumSpreads > 100) * squeeze = 100 / sumSpreads * foreach spread IP * IP *= squeeze * end for * sumSpreads = 100 * end if * * if (sumSpreads > freeRoom) * factor = (100 - sumSpreads)/(100 - freeRoom) * foreach current IP * IP *= factor * end for * end if * that is it */ if (spreads.Count > 0) { var sumSpreads = spreads.Sum(x => x.Value); double squeeze = 1.0; if (sumSpreads > freeRoom) { squeeze = freeRoom / sumSpreads; } foreach (var kvp in spreads) { var entry = planet.PlanetFactions.SingleOrDefault(x => x.FactionID == kvp.Key.FactionID); if (entry == null) { entry = new PlanetFaction() { FactionID = kvp.Key.FactionID, PlanetID = planet.PlanetID }; planet.PlanetFactions.Add(entry); } var gain = kvp.Value * squeeze; /*if (kvp.Key != planet.Faction && entry.Influence < GlobalConst.InfluenceToCapturePlanet && entry.Influence + gain >= GlobalConst.InfluenceToCapturePlanet) * { * entry.Influence = GlobalConst.InfluenceToCapturePlanet - 0.1; * } * else */ entry.Influence += gain; if (entry.Influence > GlobalConst.PlanetWarsMaximumIP) { entry.Influence = GlobalConst.PlanetWarsMaximumIP; } } } } } }
/// <summary> /// Process planet wars turn /// </summary> /// <param name="mapName"></param> /// <param name="extraData"></param> /// <param name="db"></param> /// <param name="winNum">0 = attacker wins, 1 = defender wins</param> /// <param name="players"></param> /// <param name="text"></param> /// <param name="sb"></param> public static void EndTurn(string mapName, List<string> extraData, ZkDataContext db, int? winNum, List<Account> players, StringBuilder text, SpringBattle sb, List<Account> attackers) { if (extraData == null) extraData = new List<string>(); Galaxy gal = db.Galaxies.Single(x => x.IsDefault); Planet planet = gal.Planets.Single(x => x.Resource.InternalName == mapName); text.AppendFormat("Battle on {1}/PlanetWars/Planet/{0} has ended\n", planet.PlanetID, GlobalConst.BaseSiteUrl); Faction attacker = attackers.Where(x => x.Faction != null).Select(x => x.Faction).First(); var defenders = players.Where(x => x.FactionID != attacker.FactionID && x.FactionID != null).ToList(); bool isAttackerWinner; bool wasAttackerCcDestroyed = false; bool wasDefenderCcDestroyed = false; if (winNum != null) { if (winNum == 0) isAttackerWinner = true; else isAttackerWinner = false; wasAttackerCcDestroyed = extraData.Any(x => x.StartsWith("hqkilled,0")); wasDefenderCcDestroyed = extraData.Any(x => x.StartsWith("hqkilled,1")); } else { text.AppendFormat("No winner on this battle!"); Trace.TraceError("PW battle without a winner {0}", sb != null ? sb.SpringBattleID : (int?)null); return; } int dropshipsSent = (planet.PlanetFactions.Where(x => x.Faction == attacker).Sum(x => (int?)x.Dropships) ?? 0); bool isLinked = planet.CanDropshipsAttack(attacker); string influenceReport = ""; // distribute influence // save influence gains // give influence to main attackers double planetDropshipDefs = (planet.PlanetStructures.Where(x => x.IsActive).Sum(x => x.StructureType.EffectDropshipDefense) ?? 0); double planetIpDefs = (planet.PlanetStructures.Where(x => x.IsActive).Sum(x => x.StructureType.EffectReduceBattleInfluenceGain) ?? 0); double baseInfluence = GlobalConst.BaseInfluencePerBattle; double influence = baseInfluence; double effectiveShips = Math.Max(0, (dropshipsSent - planetDropshipDefs)); double shipBonus = effectiveShips*GlobalConst.InfluencePerShip; double defenseBonus = -planetIpDefs; double techBonus = attacker.GetFactionUnlocks().Count() * GlobalConst.InfluencePerTech; double ipMultiplier = 1; string ipReason; if (!isAttackerWinner) { if (wasDefenderCcDestroyed) { ipMultiplier = 0.2; ipReason = "from losing but killing defender's CC"; } else { ipMultiplier = 0; ipReason = "from losing horribly"; } } else { if (wasAttackerCcDestroyed) { ipReason = "from losing own CC"; ipMultiplier = 0.5; } else { ipReason = "from winning flawlessly"; } } if (!isLinked && effectiveShips < GlobalConst.DropshipsForFullWarpIPGain) { var newMult = effectiveShips/GlobalConst.DropshipsForFullWarpIPGain; ipMultiplier *= newMult ; ipReason = ipReason + string.Format(" and reduced to {0}% because only {1} of {2} ships needed for warp attack got past defenses", (int)(newMult*100.0), (int)effectiveShips, GlobalConst.DropshipsForFullWarpIPGain); } influence = (influence + shipBonus + techBonus) * ipMultiplier + defenseBonus; if (influence < 0) influence = 0; influence = Math.Floor(influence * 100) / 100; // main winner influence PlanetFaction entry = planet.PlanetFactions.FirstOrDefault(x => x.Faction == attacker); if (entry == null) { entry = new PlanetFaction { Faction = attacker, Planet = planet, }; planet.PlanetFactions.Add(entry); } entry.Influence += influence; // clamping of influence // gained over 100, sole owner if (entry.Influence >= 100) { entry.Influence = 100; foreach (var pf in planet.PlanetFactions.Where(x => x.Faction != attacker)) pf.Influence = 0; } else { var sumOthers = planet.PlanetFactions.Where(x => x.Faction != attacker).Sum(x => (double?)x.Influence) ?? 0; if (sumOthers + entry.Influence > 100) { var excess = sumOthers + entry.Influence - 100; foreach (var pf in planet.PlanetFactions.Where(x => x.Faction != attacker)) pf.Influence -= pf.Influence / sumOthers * excess; } } try { influenceReport = String.Format("{0} gained {1} influence ({2}% {3} of {4}{5}{6}{7})", attacker.Shortcut, influence, (int)(ipMultiplier * 100.0), ipReason, baseInfluence + " base", techBonus > 0 ? " +" + techBonus + " from techs" : "", shipBonus > 0 ? " +" + shipBonus + " from dropships" : "", defenseBonus != 0 ? " -" + -defenseBonus + " from defenses" : ""); } catch (Exception ex) { Trace.TraceError(ex.ToString()); } // distribute metal var attackersTotalMetal = Math.Floor(GlobalConst.PlanetWarsAttackerMetal); var defendersTotalMetal = Math.Floor(GlobalConst.PlanetWarsDefenderMetal); var attackerMetal = Math.Floor(attackersTotalMetal / attackers.Count); var defenderMetal = Math.Floor(defendersTotalMetal / defenders.Count); foreach (Account w in attackers) { w.ProduceMetal(attackerMetal); var ev = Global.CreateEvent("{0} gained {1} metal from battle {2}", w, attackerMetal, sb); db.Events.InsertOnSubmit(ev); text.AppendLine(ev.PlainText); } foreach (Account w in defenders) { w.ProduceMetal(defenderMetal); var ev = Global.CreateEvent("{0} gained {1} metal from battle {2}", w, defenderMetal, sb); db.Events.InsertOnSubmit(ev); text.AppendLine(ev.PlainText); } // remove dropships foreach (var pf in planet.PlanetFactions.Where(x => x.Faction == attacker)) pf.Dropships = 0; // add attack points foreach (Account acc in players) { int ap = acc.Faction == attacker ? GlobalConst.AttackPointsForVictory : GlobalConst.AttackPointsForDefeat; if (acc.Faction != null) { AccountPlanet apentry = planet.AccountPlanets.SingleOrDefault(x => x.AccountID == acc.AccountID); if (apentry == null) { apentry = new AccountPlanet { AccountID = acc.AccountID, PlanetID = planet.PlanetID }; db.AccountPlanets.InsertOnSubmit(apentry); } apentry.AttackPoints += ap; } acc.PwAttackPoints += ap; } // paranoia! try { var mainEvent = Global.CreateEvent("{0} attacked {1} {2} in {3} and {4}. {5}", attacker, planet.Faction, planet, sb, isAttackerWinner ? "won. " : "lost. ", influenceReport ); db.Events.InsertOnSubmit(mainEvent); text.AppendLine(mainEvent.PlainText); } catch (Exception ex) { Trace.TraceError(ex.ToString()); } // destroy pw structures killed ingame if (!isAttackerWinner) { var handled = new List<string>(); foreach (string line in extraData.Where(x => x.StartsWith("structurekilled"))) { string[] data = line.Substring(16).Split(','); string unitName = data[0]; if (handled.Contains(unitName)) continue; handled.Add(unitName); foreach (PlanetStructure s in planet.PlanetStructures.Where(x => x.StructureType.IngameUnitName == unitName)) { if (s.StructureType.IsIngameDestructible) { s.IsActive = false; s.ActivatedOnTurn = gal.Turn + (int)(s.StructureType.TurnsToActivate * (GlobalConst.StructureIngameDisableTimeMult - 1)); var ev = Global.CreateEvent("{0} has been disabled on {1} planet {2}. {3}", s.StructureType.Name, planet.Faction, planet, sb); db.Events.InsertOnSubmit(ev); text.AppendLine(ev.PlainText); } } } } else { // attacker won disable all foreach (var s in planet.PlanetStructures.Where(x => x.StructureType.IsIngameDestructible)) { s.IsActive = false; s.ActivatedOnTurn = gal.Turn + (int)(s.StructureType.TurnsToActivate * (GlobalConst.StructureIngameDisableTimeMult - 1)); } // destroy structures by battle (usually defenses) foreach (PlanetStructure s in planet.PlanetStructures.Where(x => x.StructureType.BattleDeletesThis).ToList()) planet.PlanetStructures.Remove(s); var ev = Global.CreateEvent("All structures have been disabled on {0} planet {1}. {2}", planet.Faction, planet, sb); db.Events.InsertOnSubmit(ev); text.AppendLine(ev.PlainText); } db.SaveChanges(); gal.DecayInfluence(); gal.SpreadInfluence(); // process faction energies foreach (var fac in db.Factions.Where(x => !x.IsDeleted)) fac.ProcessEnergy(gal.Turn); // process production gal.ProcessProduction(); // process treaties foreach (var tr in db.FactionTreaties.Where(x => x.TreatyState == TreatyState.Accepted || x.TreatyState == TreatyState.Suspended)) { if (tr.ProcessTrade(false)) { tr.TreatyState = TreatyState.Accepted; if (tr.TurnsTotal != null) { tr.TurnsRemaining--; if (tr.TurnsRemaining <= 0) { tr.TreatyState = TreatyState.Invalid; db.FactionTreaties.DeleteOnSubmit(tr); } } } else tr.TreatyState = TreatyState.Suspended; } // burn extra energy foreach (var fac in db.Factions.Where(x => !x.IsDeleted)) fac.ConvertExcessEnergyToMetal(); int? oldOwner = planet.OwnerAccountID; gal.Turn++; db.SaveChanges(); db = new ZkDataContext(); // is this needed - attempt to fix setplanetownersbeing buggy PlanetwarsController.SetPlanetOwners(db, sb); gal = db.Galaxies.Single(x => x.IsDefault); planet = gal.Planets.Single(x => x.Resource.InternalName == mapName); if (planet.OwnerAccountID != oldOwner && planet.OwnerAccountID != null) { text.AppendFormat("Congratulations!! Planet {0} was conquered by {1} !! {3}/PlanetWars/Planet/{2}\n", planet.Name, planet.Account.Name, planet.PlanetID, GlobalConst.BaseSiteUrl); } try { // store history foreach (Planet p in gal.Planets) { db.PlanetOwnerHistories.InsertOnSubmit(new PlanetOwnerHistory { PlanetID = p.PlanetID, OwnerAccountID = p.OwnerAccountID, OwnerClanID = p.OwnerAccountID != null ? p.Account.ClanID : null, OwnerFactionID = p.OwnerFactionID, Turn = gal.Turn }); } db.SubmitChanges(); } catch (Exception ex) { Trace.TraceError(ex.ToString()); text.AppendLine("error saving history: " + ex); } //rotate map if (GlobalConst.RotatePWMaps) { db = new ZkDataContext(); gal = db.Galaxies.Single(x => x.IsDefault); planet = gal.Planets.Single(x => x.Resource.InternalName == mapName); var mapList = db.Resources.Where(x => x.MapPlanetWarsIcon != null && x.Planets.Where(p => p.GalaxyID == gal.GalaxyID).Count() == 0 && x.FeaturedOrder != null && x.ResourceID != planet.MapResourceID && x.MapWaterLevel == planet.Resource.MapWaterLevel).ToList(); if (mapList.Count > 0) { int r = new Random().Next(mapList.Count); int resourceID = mapList[r].ResourceID; Resource newMap = db.Resources.Single(x => x.ResourceID == resourceID); text.AppendLine(String.Format("Map cycler - {0} maps found, selected map {1} to replace map {2}", mapList.Count, newMap.InternalName, planet.Resource.InternalName)); planet.Resource = newMap; gal.IsDirty = true; } else { text.AppendLine("Map cycler - no maps found"); } db.SaveChanges(); } }
public static MvcHtmlString PrintInfluence(this HtmlHelper helper, PlanetFaction planetFaction) { return PrintInfluence(helper, planetFaction.Faction, planetFaction.Influence); }