diff --git a/CHANGELOG.md b/CHANGELOG.md index ea885d7..15400b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog Conspiratio.Lib +## 2.2.0 + +_06.12.2022_ + +**[DE]** +- Die Strafe "Einen Monat Kerker" hat nun eine variable Länge, abhängig von der Schwere der Schuld. Die Auswirkung auf die Gesundheit des verurteilten Spielers ist dann entsprechend höher. +- Methode "TestamentVollstrecken" hinzugefügt (ausgelagert aus WinForms Client) +- Rohstoffrechte (Handelszertifikate) werden nun bei jeder Amtsverleihung sowie Kauf einer Zollburg oder eines Räuberlagers gewährt und sind nicht mehr abhängig von Talergrenzen sowie nicht mehr beschränbkt auf maximal 5. +- Bei Spielen mit nur einem aktiven Spieler erhöhen Warenverkäufe des Spielers an die Stadt am Ende der Runde nun korrekt den Lagerstand der Stadt +- Feste benötigen die Waren nun im Lager der Stadt anstelle im Lager der Niederlassung des Spielers. Somit ist es nun überhaupt erst möglich, alle Waren für die größeren Feste zu beschaffen (sofern die Handelszertifikat dafür vorhanden sind). +- Die von den Einwohnern einer Stadt verbrauchten Waren am Rundenende wurden reduziert +- Kleinere Optimierungen + ## 2.1.1 _30.10.2022_ diff --git a/Conspiratio.Lib/Gameplay/Justiz/StrafeKerker.cs b/Conspiratio.Lib/Gameplay/Justiz/StrafeKerker.cs index 1cca6be..a45be57 100644 --- a/Conspiratio.Lib/Gameplay/Justiz/StrafeKerker.cs +++ b/Conspiratio.Lib/Gameplay/Justiz/StrafeKerker.cs @@ -12,13 +12,36 @@ public StrafeKerker() : base("Kerker") public override string StrafeExecute(int opferID, int deliktpunkte) { - double faktor = 10d; - double deliktMultiplikator = (Convert.ToDouble(deliktpunkte) / 100d) + 1d; + // Beispiel mit 2 Deliktpunkten (niederige Schwere der Schuld): + // deliktMultiplikator: 2 / 100 * 10 + 1 = 1,2 + // gesundheitsaenderung = 15 * 1,2 = 18 * -1 = -18 + // laengeStrafeInMonaten = 18 / 10 = 1 (abgerundet) + + // Beispiel mit 5 Deliktpunkten (mittlere Schwere der Schuld): + // deliktMultiplikator: 5 / 100 * 10 + 1 = 1,5 + // gesundheitsaenderung = 15 * 1,5 = 23 * -1 = -23 + // laengeStrafeInMonaten = 23 / 10 = 2 (abgerundet) + + // Beispiel mit 10 Deliktpunkten (hohe Schwere der Schuld): + // deliktMultiplikator: 10 / 100 * 10 + 1 = 2,0 + // gesundheitsaenderung = 15 * 2,0 = 30 * -1 = -30 + // laengeStrafeInMonaten = 30 / 10 = 3 (abgerundet) + + double faktor = 15d; + double deliktMultiplikator = (Convert.ToDouble(deliktpunkte) / 100d * 10d) + 1d; int gesundheitsaenderung = Convert.ToInt32(Math.Abs(Math.Round(faktor * deliktMultiplikator, 0))) * -1; SW.Dynamisch.GetSpWithID(opferID).ErhoeheGesundheit(gesundheitsaenderung); - return SW.Dynamisch.GetSpWithID(opferID).GetName() + " muss einen Monat im Kerker verbringen.\nDie Gesundheit von " + SW.Dynamisch.GetSpWithID(opferID).GetName() + " hat gelitten."; + int laengeStrafeInMonaten = Convert.ToInt32(Math.Abs(Math.Floor(gesundheitsaenderung / 10d))); + if (laengeStrafeInMonaten < 1) + laengeStrafeInMonaten = 1; + if (laengeStrafeInMonaten > 11) + laengeStrafeInMonaten = 11; + + string laengeStrafe = laengeStrafeInMonaten.ToString() + (laengeStrafeInMonaten == 1 ? " Monat" : " Monate"); + + return $"{SW.Dynamisch.GetSpWithID(opferID).GetName()} muss {laengeStrafe} im Kerker verbringen.\nDie Gesundheit von {SW.Dynamisch.GetSpWithID(opferID).GetName()} hat entsprechend gelitten."; } } } diff --git a/Conspiratio.Lib/Gameplay/Justiz/StrafePranger.cs b/Conspiratio.Lib/Gameplay/Justiz/StrafePranger.cs index 3878f8e..e9a3285 100644 --- a/Conspiratio.Lib/Gameplay/Justiz/StrafePranger.cs +++ b/Conspiratio.Lib/Gameplay/Justiz/StrafePranger.cs @@ -25,7 +25,7 @@ public override string StrafeExecute(int opferID, int deliktpunkte) SW.Dynamisch.GetSpWithID(opferID).ErhoeheAnsehen(ansehensaenderung); } - return SW.Dynamisch.GetSpWithID(opferID).GetName() + " muss einen Tag am Pranger verbringen.\nDas Ansehen von " + SW.Dynamisch.GetSpWithID(opferID).GetName() + " hat deutlich gelitten"; + return SW.Dynamisch.GetSpWithID(opferID).GetName() + " muss einen Tag am Pranger verbringen.\nDas Ansehen von " + SW.Dynamisch.GetSpWithID(opferID).GetName() + " hat deutlich gelitten."; } } } diff --git a/Conspiratio.Lib/Gameplay/Kampf/Stuetzpunkt.cs b/Conspiratio.Lib/Gameplay/Kampf/Stuetzpunkt.cs index 72062d2..669e54c 100644 --- a/Conspiratio.Lib/Gameplay/Kampf/Stuetzpunkt.cs +++ b/Conspiratio.Lib/Gameplay/Kampf/Stuetzpunkt.cs @@ -545,6 +545,7 @@ public bool KaufangebotAbgeben(int Preis) SW.Dynamisch.GetHumWithID(SW.Dynamisch.GetAktiverSpieler()).ErhoeheTaler(-Preis); SW.Dynamisch.GetKIwithID(Besitzer).SetTaler(SW.Dynamisch.GetKIwithID(Besitzer).GetTaler() + Preis); Besitzer = SW.Dynamisch.GetAktiverSpieler(); + SW.Dynamisch.GetHumWithID(SW.Dynamisch.GetAktiverSpieler()).NeuesHandelszertifikatVerleihen(3); // Es gibt immer ein Handelszertifikat der Stufe 3 beim Kauf eines Stützpunktes SW.Dynamisch.BelTextAnzeigen($"Euer Angebot wurde angenommen, Ihr seid nun stolzer Besitzer von {Name}."); return true; } diff --git a/Conspiratio.Lib/Gameplay/Personen/HumSpieler.cs b/Conspiratio.Lib/Gameplay/Personen/HumSpieler.cs index 20df2bc..348ea1e 100644 --- a/Conspiratio.Lib/Gameplay/Personen/HumSpieler.cs +++ b/Conspiratio.Lib/Gameplay/Personen/HumSpieler.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.Data.SqlClient; +using System.Linq; using Conspiratio.Lib.Gameplay.Ereignisse; using Conspiratio.Lib.Gameplay.Hinterzimmer; @@ -612,70 +614,62 @@ public int GetNextStadtIDMitWohnsitz(int aktuelleStadtID) } #endregion - #region VersuchHandelszertifikatVerleihen - public void VersuchHandelszertifikatVerleihen() + #region NeuesHandelszertifikatVerleihen + public void NeuesHandelszertifikatVerleihen(int tierStufeRohstoff) { - // Falls nicht schon eines diese Runde verliehen wird - if (GetBekamHandeslzertifikatX() == 0) + if (GetBekamHandeslzertifikatX() != 0) // Pro Runde kann immer nur ein Handelszertifikat verliehen werden, der erste Aufruf gewinnt daher immer + return; + + List rohstoffOhneRecht = new List(); + + // Liste aller RohstoffIDs zur Tier-Stufe ermitteln, für die der Spieler noch kein Rohstoff Recht besitzt. + while (tierStufeRohstoff > 0) { - int handzert = 0; + rohstoffOhneRecht = ErmittleRohstoffeOhneRohstoffrecht(tierStufeRohstoff); - // Handelszertifikate zählen - for (int i = 1; i < SW.Statisch.GetMaxRohID(); i++) - { - if (GetRohstoffrechteX(i)) - { - handzert++; - } - } + if (rohstoffOhneRecht.Any()) + break; // Es gibt auf der aktuellen Tier-Stufe Rohstoffe ohne Recht - // Falls er bereits 2 Rohstoffe besaß - if (handzert >= 2) - { - if (GetTaler() >= 1000000) - { - HandelszertifikatVerleihen(5, 15, SW.Statisch.GetMaxRohID()); - } - else if (GetTaler() >= 500000) - { - HandelszertifikatVerleihen(4, 8, 19); - } - else if (GetTaler() >= 100000) - { - HandelszertifikatVerleihen(3, 8, 15); - } - } + if (tierStufeRohstoff == 1) + break; // Der Spieler bereits alle möglichen Rohstoffrechte auf dieser oder kleineren Tier-Stufen + + // Der Spieler hat alle Rohstoffrechte der aktuellen Tier-Stufe bereits und es handelt sich nicht um Tier-Stufe 1. + // Dann ermitteln wir Liste aller RohstoffIDs zur nächst niedrigeren Tier-Stufe, für die der Spieler noch kein Rohstoff Recht besitzt. + tierStufeRohstoff--; + } + + if (!rohstoffOhneRecht.Any()) // Hat der Spieler bereits alle möglichen Rohstoffrechte? + return; + + int neueRohstoffID; + if (rohstoffOhneRecht.Count() > 1) + { + // Zufälligen Rohstoff aus der Liste wählen + neueRohstoffID = rohstoffOhneRecht[SW.Statisch.Rnd.Next(0, rohstoffOhneRecht.Count())]; } + else + neueRohstoffID = rohstoffOhneRecht.First(); + + SetRohstoffrechteXZuY(neueRohstoffID, true); + SetBekamHandelszertifikatX(neueRohstoffID); } #endregion - #region HandelszertifikatVerleihen - public void HandelszertifikatVerleihen(int anzahlRohstoffrechte, int minRohID, int maxRohID) + #region ErmittleRohstoffeOhneRohstoffrecht + public List ErmittleRohstoffeOhneRohstoffrecht(int tierStufeRohstoff) { - int aktuelleAnzahlRohstoffrechte = 0; - // Rohstoffrecht verleihen - for (int i = 1; i < SW.Statisch.GetMaxRohID(); i++) - { - if (GetRohstoffrechteX(i)) - { - aktuelleAnzahlRohstoffrechte++; - } - } + List rohstoffeOhneRecht = new List(); - // Wenn der Spieler weniger als x Rechte besitzt, bekommt er ein neues verliehen - if (aktuelleAnzahlRohstoffrechte < anzahlRohstoffrechte) + for (int i = 1; i < SW.Statisch.GetMaxRohID(); i++) { - int neuesRecht = SW.Statisch.Rnd.Next(minRohID, maxRohID); + if (SW.Dynamisch.GetRohstoffwithID(i).GetRohStufe() != tierStufeRohstoff) + continue; - // Solange der Spieler das neue Recht aber schon hat, soll ein anderes gewählt werden - while (GetRohstoffrechteX(neuesRecht) == true) - { - neuesRecht = SW.Statisch.Rnd.Next(minRohID, maxRohID); - } - - SetRohstoffrechteXZuY(neuesRecht, true); - SetBekamHandelszertifikatX(neuesRecht); + if (!GetRohstoffrechteX(i)) + rohstoffeOhneRecht.Add(i); } + + return rohstoffeOhneRecht; } #endregion diff --git a/Conspiratio.Lib/Gameplay/Privilegien/FestGeben/FestManager.cs b/Conspiratio.Lib/Gameplay/Privilegien/FestGeben/FestManager.cs index 5f6fa89..a4e3daf 100644 --- a/Conspiratio.Lib/Gameplay/Privilegien/FestGeben/FestManager.cs +++ b/Conspiratio.Lib/Gameplay/Privilegien/FestGeben/FestManager.cs @@ -2,6 +2,7 @@ using System.Linq; using Conspiratio.Lib.Extensions; +using Conspiratio.Lib.Gameplay.Gebiete; using Conspiratio.Lib.Gameplay.Spielwelt; namespace Conspiratio.Lib.Gameplay.Privilegien.FestGeben @@ -126,7 +127,7 @@ public string ErstelleNeuesFest(int stadtID, EnumFestGroesse groesse, EnumFestMu int anteilGesamtvermoegen = SW.Dynamisch.GetAktHum().GetGesamtVermoegen(SW.Dynamisch.GetAktiverSpieler()) / 200; // 0,5 % des Gesamtvermögens - int grundpreis = 800; + int grundpreis = 1200; int geplanteKosten = Convert.ToInt32((grundpreis * faktorGroesse + (grundpreis * faktorMusiker)) * faktorVergangeneSpielzeit) + anteilGesamtvermoegen; if (geplanteKosten > 500000) // Kosten deckeln bei sehr weit fortgeschrittenen Spielen @@ -135,7 +136,7 @@ public string ErstelleNeuesFest(int stadtID, EnumFestGroesse groesse, EnumFestMu Fest fest = new Fest(spielerID, stadtID, groesse, musiker, jahr, geplanteKosten); SW.Dynamisch.Spielstand.Feste.Add(fest); - string message = $"Denkt daran, dass Eure Niederlassung in {GetStadtName(stadtID)} im Jahr {jahr} mit kulinarischen Köstlichkeiten gut gefüllt sein sollte ...{Environment.NewLine}" + + string message = $"Denkt daran, dass die Lager der Stadt {GetStadtName(stadtID)} im Jahr {jahr} mit kulinarischen Köstlichkeiten gut gefüllt sein sollten ...{Environment.NewLine}" + $"Die Musiker werden Euch etwa {geplanteKosten.ToStringGeld()} kosten."; return message; @@ -151,12 +152,14 @@ public string FestFeiern(Fest fest) if (SW.Dynamisch.GetAktuellesJahr() != fest.Jahr) throw new ArgumentOutOfRangeException(nameof(fest), "Das Jahr des Festes ist nicht das aktuelle Jahr."); - int lagerstandObst = SW.Dynamisch.GetAktHum().GetStadtRohstoffAnzahl(fest.StadtID, 3); - int lagerstandBier = SW.Dynamisch.GetAktHum().GetStadtRohstoffAnzahl(fest.StadtID, 4); - int lagerstandFisch = SW.Dynamisch.GetAktHum().GetStadtRohstoffAnzahl(fest.StadtID, 6); - int lagerstandWein = SW.Dynamisch.GetAktHum().GetStadtRohstoffAnzahl(fest.StadtID, 9); - int lagerstandRind = SW.Dynamisch.GetAktHum().GetStadtRohstoffAnzahl(fest.StadtID, 10); - int lagerstandRum = SW.Dynamisch.GetAktHum().GetStadtRohstoffAnzahl(fest.StadtID, 12); + Stadt stadtVomFest = SW.Dynamisch.GetStadtwithID(fest.StadtID); + + int lagerstandObst = stadtVomFest.GetRohstoffIDXVorrat(3); + int lagerstandBier = stadtVomFest.GetRohstoffIDXVorrat(4); + int lagerstandFisch = stadtVomFest.GetRohstoffIDXVorrat(6); + int lagerstandWein = stadtVomFest.GetRohstoffIDXVorrat(9); + int lagerstandRind = stadtVomFest.GetRohstoffIDXVorrat(10); + int lagerstandRum = stadtVomFest.GetRohstoffIDXVorrat(12); int verbrauchProWareKlein = 100; int verbrauchProWareNormal = 200; @@ -421,7 +424,7 @@ public string FestFeiern(Fest fest) // Ware verbrauchen if (verbrauchBier > 0) - SW.Dynamisch.GetAktHum().SetStadtRohstoffAnzahl(fest.StadtID, 4, SW.Dynamisch.GetAktHum().GetStadtRohstoffAnzahl(fest.StadtID, 4) - verbrauchBier); + stadtVomFest.ErhoeheRohstoffVorratWithIDXByY(4, -verbrauchBier); } if ((verbrauchSollFisch > 0) && (erfolgWarenInProzent < 100)) @@ -458,7 +461,7 @@ public string FestFeiern(Fest fest) // Ware verbrauchen if (verbrauchFisch > 0) - SW.Dynamisch.GetAktHum().SetStadtRohstoffAnzahl(fest.StadtID, 6, SW.Dynamisch.GetAktHum().GetStadtRohstoffAnzahl(fest.StadtID, 6) - verbrauchFisch); + stadtVomFest.ErhoeheRohstoffVorratWithIDXByY(6, -verbrauchFisch); } if ((verbrauchSollObst > 0) && (erfolgWarenInProzent < 100)) @@ -489,7 +492,7 @@ public string FestFeiern(Fest fest) // Ware verbrauchen if (verbrauchObst > 0) - SW.Dynamisch.GetAktHum().SetStadtRohstoffAnzahl(fest.StadtID, 3, SW.Dynamisch.GetAktHum().GetStadtRohstoffAnzahl(fest.StadtID, 3) - verbrauchObst); + stadtVomFest.ErhoeheRohstoffVorratWithIDXByY(3, -verbrauchObst); } if ((verbrauchSollWein > 0) && (erfolgWarenInProzent < 100)) @@ -520,7 +523,7 @@ public string FestFeiern(Fest fest) // Ware verbrauchen if (verbrauchWein > 0) - SW.Dynamisch.GetAktHum().SetStadtRohstoffAnzahl(fest.StadtID, 9, SW.Dynamisch.GetAktHum().GetStadtRohstoffAnzahl(fest.StadtID, 9) - verbrauchWein); + stadtVomFest.ErhoeheRohstoffVorratWithIDXByY(9, -verbrauchWein); } if ((verbrauchSollRum > 0) && (erfolgWarenInProzent < 100)) @@ -551,7 +554,7 @@ public string FestFeiern(Fest fest) // Ware verbrauchen if (verbrauchRum > 0) - SW.Dynamisch.GetAktHum().SetStadtRohstoffAnzahl(fest.StadtID, 12, SW.Dynamisch.GetAktHum().GetStadtRohstoffAnzahl(fest.StadtID, 12) - verbrauchRum); + stadtVomFest.ErhoeheRohstoffVorratWithIDXByY(12, -verbrauchRum); } if ((verbrauchSollRind > 0) && (erfolgWarenInProzent < 100)) @@ -582,7 +585,7 @@ public string FestFeiern(Fest fest) // Ware verbrauchen if (verbrauchRind > 0) - SW.Dynamisch.GetAktHum().SetStadtRohstoffAnzahl(fest.StadtID, 10, SW.Dynamisch.GetAktHum().GetStadtRohstoffAnzahl(fest.StadtID, 10) - verbrauchRind); + stadtVomFest.ErhoeheRohstoffVorratWithIDXByY(10, -verbrauchRind); } #endregion diff --git a/Conspiratio.Lib/Gameplay/Rohstoffe/Rohstoff.cs b/Conspiratio.Lib/Gameplay/Rohstoffe/Rohstoff.cs index 8bf95fa..b694221 100644 --- a/Conspiratio.Lib/Gameplay/Rohstoffe/Rohstoff.cs +++ b/Conspiratio.Lib/Gameplay/Rohstoffe/Rohstoff.cs @@ -128,6 +128,11 @@ public string GetRohName() return _name; } + public int GetRohStufe() + { + return _rohStufe; + } + public string GetProdText() { return _produktionstext; diff --git a/Conspiratio.Lib/Gameplay/Spielwelt/DynamischeSpieldaten.cs b/Conspiratio.Lib/Gameplay/Spielwelt/DynamischeSpieldaten.cs index d738ebe..48ebb51 100644 --- a/Conspiratio.Lib/Gameplay/Spielwelt/DynamischeSpieldaten.cs +++ b/Conspiratio.Lib/Gameplay/Spielwelt/DynamischeSpieldaten.cs @@ -14,6 +14,8 @@ using Conspiratio.Lib.Gameplay.Schreibstube; using Conspiratio.Lib.Gameplay.Titel; +using static System.Windows.Forms.AxHost; + namespace Conspiratio.Lib.Gameplay.Spielwelt { /// @@ -588,6 +590,21 @@ public void AmtVonXfreigeben(int id) public void AmtAufStufeXGebietYidZanWvergeben(int x, int y, int z, int w) { GetSpWithID(w).SetAmt(z, y); + + if (w < SW.Statisch.GetMinKIID()) // Menschlicher Spieler? + { + // Rohstoffrecht vergeben, je nach Stufe des Amtes + int tierStufeRohstoff; + if (x == 0) + tierStufeRohstoff = 1; + else if (x == 1) + tierStufeRohstoff = 2; + else // Reich + tierStufeRohstoff = 3; + + GetHumWithID(w).NeuesHandelszertifikatVerleihen(tierStufeRohstoff); + } + if (y != 0) { GetGebietwithID(y, x).SetAmtXtoY(z, w); @@ -601,21 +618,20 @@ public void RohBedarfAktRundenEnde() { for (int k = 1; k < SW.Statisch.GetMaxRohID(); k++) { - for (int i = 1; i < GetAktivSpielerAnzahl(); i++) + for (int i = 1; i <= GetAktivSpielerAnzahl(); i++) { int temp = GetHumWithID(i).GetEinVerkaeufeInStadtXVonRohstoffIDY(j, k); GetStadtwithID(j).ErhoeheRohstoffVorratWithIDXByY(k, temp); GetHumWithID(i).SetEinVerkaeufeInStadtXVonRohstoffIDYAufZ(j, k, 0); } //Und jene auch etwas verbrauchen - GetStadtwithID(j).ErhoeheRohstoffVorratWithIDXByY(k, -GetStadtwithID(j).GetEinwohner() / 4); + GetStadtwithID(j).ErhoeheRohstoffVorratWithIDXByY(k, -GetStadtwithID(j).GetEinwohner() / 10); } } } public void RohPreiseRandomSchwanken() { - int value = 0; if (GetAktuellesJahr() > SW.Statisch.StartJahr + 1) { //alle Staedte @@ -624,7 +640,7 @@ public void RohPreiseRandomSchwanken() //alle Rohstoffe for (int j = 1; j < SW.Statisch.GetMaxRohID(); j++) { - value = SW.Statisch.Rnd.Next(-1, 2); + int value = SW.Statisch.Rnd.Next(-1, 2); GetStadtwithID(i).ErhoeheRohstoffPreisVonIDXByY(j, value); } } @@ -1765,12 +1781,12 @@ public void RundenBestechungenAbwickeln() if (oamtstufe > 5) { - produkt = produkt / 2; + produkt /= 2; } if (oamtstufe > 10) { - produkt = produkt / 2; + produkt /= 2; } int verbesserung = Convert.ToInt32(produkt / 10); @@ -2050,15 +2066,7 @@ public void PrivilegienAktualisieren() #endregion #region 2 - Amt niederlegen - if (GetAktHum().GetAmtID() == 0) - { - GetAktHum().SetPrivilegX(2, false); - } - else - { - GetAktHum().SetPrivilegX(2, true); - GetAktHum().HandelszertifikatVerleihen(2, 1, 8); - } + GetAktHum().SetPrivilegX(2, GetAktHum().GetAmtID() == 0); // Amt niederlegen nur möglich, wenn Amt vorhanden ist #endregion #region 3 - Testament machen @@ -2526,6 +2534,120 @@ public void VersuchTitelVerleihen(int spielerId) } #endregion + #region TestamentVollstrecken + public void TestamentVollstrecken() + { + // Alle Attribute vom Erben werden nun übernommen + int fixerErbe = GetHumWithID(GetAktiverSpieler()).GetErbeSpielerID(); + + if (fixerErbe == 0) + { + // Spieler scheidet aus + + // Die Frau soll nicht mehr verheiratet sein + if (GetHumWithID(GetAktiverSpieler()).GetVerheiratet() != 0) + GetKIwithID(GetHumWithID(GetAktiverSpieler()).GetVerheiratet()).SetVerheiratet(0); + + bool last = false; + + if (GetAktiverSpieler() == GetAktivSpielerAnzahl() && GetAktiverSpieler() > 1) + last = true; + + // Stützpunkte des verstorbenen Spielers wieder zufälligen KI-Spielern zuteilen + for (int i = 0; i < GetStuetzpunkte().Length; i++) + { + if (GetStuetzpunkte()[i].Besitzer == GetAktiverSpieler()) + GetStuetzpunkte()[i].BesitzerStuetzpunktZufaelligSetzen(); + } + + CreateSpielerX(GetAktiverSpieler(), 0, "", true, 0, 0); // Aktuelles Spieler Objekt initialisieren (auf null setzen führt ansonsten z.B. in der Statistik zu Problemen beim Zugriff: NullReference Exception) + SetAktivSpielerAnzahl(GetAktivSpielerAnzahl() - 1); + + // Ist der Spieler der letzte und nicht einzige in der Liste? Dann wird nicht geordnet und einfach ein neues Jahr gestartet + if (last) + { + SetAktiverSpieler(1); + ErhoehAktuellesJahrUmEins(); + } + else + { + // Ist der Spieler nicht der letzte, so muss die Liste neu geordnet werden (Spieler rücken nach) + int i = GetAktiverSpieler(); + + while (i + 1 <= GetAktivSpielerAnzahl() + 1) + { + SetHumX(i, GetHumWithID(i + 1), i + 1); + i++; + } + } + } + else + { + // Verschiedene Zustände des verstorbenen Charakters zurücksetzen, die nicht vererbt werden + GetHumWithID(GetAktiverSpieler()).SetSitztImKerker(false); // Soll nicht im Schuldturm sitzen, wenn der verstorbene Charakter vorher verurteilt wurde + GetHumWithID(GetAktiverSpieler()).SetDeliktpunkte(0); + GetHumWithID(GetAktiverSpieler()).SetKindBekommen(false); + GetHumWithID(GetAktiverSpieler()).SetSpieltKartenGegenSpielerID(0); + + for (int i = 0; i < SW.Statisch.GetMaxGesetze(); i++) + GetHumWithID(GetAktiverSpieler()).SetBegingVerbrechenX(i, 0); // Gesetzesbrüche zurücksetzen (werden nicht vererbt) + + if (fixerErbe >= SW.Statisch.GetMinKIID()) + { + // Frau erbt + int FrauKIID = GetHumWithID(GetAktiverSpieler()).GetVerheiratet(); + + string nname = GetKIwithID(GetHumWithID(GetAktiverSpieler()).GetVerheiratet()).GetName(); + + GetHumWithID(GetAktiverSpieler()).ErhoeheTaler(GetSpWithID(FrauKIID).GetTaler()); + GetHumWithID(GetAktiverSpieler()).SetName(nname); + GetHumWithID(GetAktiverSpieler()).SetAlter(GetSpWithID(FrauKIID).GetAlter()); + GetHumWithID(GetAktiverSpieler()).SetMaennlich(GetSpWithID(FrauKIID).GetMaennlich()); + GetHumWithID(GetAktiverSpieler()).SetVerheiratet(0); + GetHumWithID(GetAktiverSpieler()).SetErbeSpielerID(0); + + // +2 Damit die Frau nicht womöglich in derselben Runde stirbt + GetHumWithID(GetAktiverSpieler()).SetVerbleibendeJahre(GetSpWithID(FrauKIID).GetVerbleibendeJahre() + 2); + + GetHumWithID(GetAktiverSpieler()).SetGesundheit(GetSpWithID(FrauKIID).GetGesundheit()); + + // Kinder bleiben die gleichen + + // Amt wird uebernommen + AmtAufStufeXGebietYidZanWvergeben(GetStufeVonAmtmitIDx(GetKIwithID(FrauKIID).GetAmtsInformationen().GetAmtsID()), GetKIwithID(FrauKIID).GetAmtsInformationen().GetGebietsID(), GetKIwithID(FrauKIID).GetAmtsInformationen().GetAmtsID(), GetAktiverSpieler()); + + // KI neu anlegen da die Frau sonst doppelt existieren würde + KIXneuAnlegen(FrauKIID); + } + else + { + // Kind erbt + GetHumWithID(GetAktiverSpieler()).SetErbeSpielerID(0); + + string nname = GetHumWithID(GetAktiverSpieler()).GetKindX(fixerErbe).GetKindName(); + GetHumWithID(GetAktiverSpieler()).SetName(nname); + + int nalter = GetHumWithID(GetAktiverSpieler()).GetKindX(fixerErbe).GetAlter(); + GetHumWithID(GetAktiverSpieler()).SetAlter(nalter); + + bool maennlich = GetHumWithID(GetAktiverSpieler()).GetKindX(fixerErbe).GetMaennlich(); + GetHumWithID(GetAktiverSpieler()).SetMaennlich(maennlich); + + GetHumWithID(GetAktiverSpieler()).SetGesundheit(SW.Statisch.GetMaxGesundheit()); + + int verbleibendeJahre = SW.Statisch.Rnd.Next(SW.Statisch.GetHumminVerblJahre(), SW.Statisch.GetHummaxVerblJahre()); + GetHumWithID(GetAktiverSpieler()).SetVerbleibendeJahre(verbleibendeJahre); + + // Das Kind hat noch keine Kinder!!! + for (int i = SW.Statisch.GetMinKindSlotNr(); i < SW.Statisch.GetMaxKinderAnzahl(); i++) + GetHumWithID(GetAktiverSpieler()).GetKindX(i).SetName(""); + + // Das Kind ist nicht verheiratet + GetHumWithID(GetAktiverSpieler()).SetVerheiratet(0); + } + } + } + #endregion // Private Methoden #region GetLeereWahlID diff --git a/Conspiratio.Lib/Properties/AssemblyInfo.cs b/Conspiratio.Lib/Properties/AssemblyInfo.cs index 72d3ba6..6d51dd6 100644 --- a/Conspiratio.Lib/Properties/AssemblyInfo.cs +++ b/Conspiratio.Lib/Properties/AssemblyInfo.cs @@ -30,5 +30,5 @@ // // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, // indem Sie "*" wie unten gezeigt eingeben: -[assembly: AssemblyVersion("2.1.1")] -[assembly: AssemblyFileVersion("2.1.1")] +[assembly: AssemblyVersion("2.2.0")] +[assembly: AssemblyFileVersion("2.2.0")]