Hexerei-Mod


Aus einer Idee heraus entstand diese Mod. Sie soll jeden Mapper befähigen etwas besonderes in seine/ihre Map einzubauen. Helden können per Skript in Hexer und Hexen umgewandelt werden. Dadurch haben sie keine aktive Fähigkeit mehr, dafür aber bis zu 4 Zauber.

Doch nun kommen wir zu dem, weshalb du hier bist. ;3

Installation

Alles was die Modifikation umfasst kommt in das lokale Skript.

Die Basisfunktionen findes du hier. Diese Funktionen müssen sich auf jeden Fall in deinem Skript befinden.

Die Comforts brauchst du nur zu kopieren, wenn du sie nicht sowieso schon im Skript verwendest.

Ist bis dahin nichts schief gegangen, hast du die Mod erfolgreich installiert.

Hexer/Hexe erzeugen

Einen Hexer erzeugt man ebenfalls im lokalen Skript. Das ist aber nicht das Problem, denn man kann die Initialisierung entweder in die Mission_LocalOnMapStart oder in eine eigene Funktion packen. Im lezteren Falle muss diese Funktion nur innerhalb eines MSF aufgerufen werden. Und zwar so:

function MeinMSF()
      Logic.ExecuteInLuaLocalState("MeinHexer()");
end

Die Standardfunktion zum Erstellen eines Hexers ist Spellcaster:new. Diese Funktion ermöglicht auch das Einstellen der HomeEntity oder von Perks. Der Protoryp sieht wie folgt aus:

function Spellcaster:new(_name,_homeEntity,_homeDistance,_startMana,_alchemist,_goodAlchemist,_beastmaster,_bigGameHunter,
                         _fortressBreaker,_TalentedMage,_masterMage,_sharpEyes,_warlock)
Argument Typ Beschreibung
_name String Der Skriptname des Ritters, der zum Hexenmeister gemacht wird
_homeEntity String, Number Optional: Name oder EntityID der Basis. Dieser Ort wird vom Hexenmeister benötigt um das Zauberbuch einzustellen und ggf. Manatränke herzustellen.
_homeDistance Number Optional: Entfernung auf die sich der Hexer der Basis nähern muss.
_startMana Number Optional: Ermöglicht das Einstellen der Startzauberpunkte
_alchemist Boolean Optional: Wenn diese Option true ist, kann der Hexer in der Basis Manatränke herstellen. Manatränke können jedoch von jedem Helden benutzt werden. Alle Manatränke landen im selben Pool. Momentan sind die Kosten 500 Gold und 10 Kräuter.
_goodAlchemist Boolean Optional: Macht nur Sinn in Verbindung mit dem Perk "Alchemist". Die Kosten zur Trankherstellung werden um 20% gesenkt.
_beastmaster Boolean Optional: Ist diese Option true kann der Held die doppelte Anzahl Wölfe und Tiger pro gesprochenen Zauber beschwören.
_bigGameHunter Boolean Optional: Diese Option verleiht dem Hexer dreifachen Magieschaden gegen Wildtiere.
_fortressBreaker Boolean Optional: Mit dieser Option löst der Hexer doppelten Schaden gegen Gebäude aus.
_TalentedMage Boolean Optional: Der Held regeneriert 2 Zauberpunkte pro Zyklus.
_masterMage Boolean Optional: Der Held regeneriert 3 Zauberpunkte pro Zyklus.
_sharpEyes Boolean Optional: Der Held bekommt einen Bonus von 15 Prozent auf die Zauberdistanz.
_warlock Boolean Optional: Der Held bekommt einen Bonus von 15 Prozent auf den Effektbereich von Gebietsschaden-Zauber.

Ein Beispiel zur Erstellung eines Hexers/ einer Hexe:

g_Witcher =  Spellcaster:new("hakim","holyShrine",750,10,true,true,true,true)

Nun haben wir den Helden Hakim zum Hexer gemacht. Seine Heimatbasis ist die Entity "holyShrine" und im Umkreis von 750 scm kann er sein Zauberbuch dort verwalten. Außerdem hat er die ersten 4 Perks erlernt.

Spezielle Erzeugungsfunktionen

Es gibt spezialisierte Funktionen zum erstellen eines Hexers:

function Spellcaster:newBeastmaster(_name,_homeEntity,_homeDistance,_startMana)

Ein Bestienmeister verfügt über die Perks "SharpEyes", "BeastMaster" und "BigGameHunter". Außerdem ist bereits "Wölfe beschwören" erlernt und im Slot 1 eingestellt.

function Spellcaster:newWarlock(_name,_homeEntity,_homeDistance,_startMana)

Ein Warlock verfügt über die Perks "Warlock", "TalentedMage" und "FortressBreaker". Außerdem ist bereits "Blitzschlag" erlernt und im Slot 1 eingestellt.

function Spellcaster:newHealer(_name,_homeEntity,_homeDistance,_startMana)

Der Heiler hat die Perks "SharpEyes", "TalentedMage" und "Alchemist" zur Verfügung. Außerdem ist bereits "Große Heilung" erlernt und im Slot 1 eingestellt. Das Mana des Heilers wird immer mindestens auf 6 eingestellt.

function Spellcaster:newGotfather(_name,_homeEntity,_homeDistance,_startMana)

Der Pate ist die geeignete Voreinstellung für einen KI-Hexer. Er hat alle Perks zur Verfügungung und hat die Zauber "Große Heilung", "Blitzschlag", "Himmlische Strafe" und "Tiger beschwören" in seinem Zauberbuch eingestellt.

Diese Funktionen sind genauso anzuwenden wie Spellcaster:new. Einziger Unterschied ist, dass sie fest vorgesehene Perkauswahlen treffen.

Perks

Perks und veränderte Zauberpunkte kann man benutzen, wenn man dem Spieler mehrere Hexer zur Verfügung stellt. So kann man ihnen unterschiedliche Stärken geben. Gedacht sind die Perks jedoch eigentlich gewesen um KI-Hexer stärker zu machen. Perks kann man auch im Verlauf des Spiels als Belohnung für erfüllte Quests an den Spielerhelden vergeben. Der Spieler merkt von der Existenz der Perks höchstens die Verbesserung der Fähigkeiten. Sie werden aus Mangel an Anzeigefläche im Spiel nicht angezeigt.

Um Perks nachträglich hinzuzufügen kann man den Hexer entweder durch sein eigenes Objekt oder durch die Liste aller Hexer über seinen Namen referenzieren.

Logic.ExecuteInLuaLocalState("g_SpellcasterList['hakim'].Perks.Alchemist = true");

Dieses Beispiel referenziert über die Liste.

Logic.ExecuteInLuaLocalState("g_Witcher.Perks.Alchemist = true");

Vorausgesetzt das Objekt "hakim" wurde in g_Witcher gespeichert, passiert hier das selbe.

Eine Liste aller Perks für nachträgliches freischalten:

<object>.Perks.Alchemist      = true;    -- Erlaubt es Manatränke herzustellen
<object>.Perks.BeastMaster    = true;    -- Hexer beschwören die doppelte Anzahl an Tieren
<object>.Perks.BigGameHunter  = true;    -- Dreifacher Schaden gegen Raubtiere
<object>.Perks.FortressBraker = true;    -- Doppelter Zauberschaden gegen Gebäude
<object>.Perks.GoodAlchemist  = true;    -- Reduziert Kosten für die Trankherstellung
<object>.Perks.TalentedMage   = true;    -- Doppelte Manaregeneration per Zyklus
<object>.Perks.MasterMage     = true;    -- Dreifache Manaregeneration per Zyklus
<object>.Perks.SharpEyes      = true;    -- Erhöht die Zauberdistanz prozentual (15%)
<object>.Perks.Warlock        = true;    -- Erhöht prozentual (15%) die Gebietsgröße

Natürlich muss <object> durch den Variablennamen des Objektes ersetzt werden. ;)

Zauber

Ohne Zauber ist ein Hexer nicht viel wert. Lerne hier, wie du Zauber einfügen kannst.

Zauber eintragen

Für den Spieler genügt es einen Zauber einfach in das Zauberbuch einzutragen. Dafür gibt es die Methode :learnSpell.

function Spellcaster:learnSpell(...)

Die Funktion nimmt eine unbestimmte Anzahl von Strings auf. Diese Strings müssen dem Namen des Zaubers entsprechen.

g_Witcher:learnSpell("BellOfHeaven","Lightning","SummonTrebuchet");

In diesem Fall trägt der in g_Witcher gespeicherte Hexer die Zauber "Heilige Glocke", "Blitzschlag" und "Trebuchet erschaffen" in sein Zauberbuch ein. Die Eingetragenen Zauber sind aber noch nicht eingestellt. Das muss der Spieler noch in der Heimatbasis erledigen. KI-Hexer sind dazu nicht in der Lage!

Will man einen Zauber direkt in einen speziellen Slot schreiben, muss man die Methode :AttachSpell verwenden.

g_Witcher.Spells:AttachSpell(g_Witcher,1,"Healing");
Spells:AttachSpell(g_Witcher,1,"Healing");

Beide Aufrufe tun das selbe. Der Hexer in g_Witcher bekommt den Zauber "Heilung" in den 1. Slot eingetragen. Diese Funktion fügt den Zauber zusätzlich der Sammlung hinzu. KI-Hexer können nur so einen aktiven Zauber bekommen!

Liste der Zauber

  • Lightning - Blizschlag
  • Sunfire - Sonnenfeuer
  • BigExplosion - Große Explosion
  • Fountain - Kochendes Wasser
  • CallHornet - Hornissen rufen
  • Frost - Frosthauch
  • SummonWolves - Wölfe beschwören
  • SummonTigers - Tiger beschwören
  • SummonTrebuchet - Trebuchet erschaffen
  • Healing - Heilung
  • SuperHealing - Große Heilung
  • BellOfHeaven - Heilige Glocke
  • Satisfaction - Segnung
  • InflictFear - Angst
  • Thunderstorm - Himmlische Strafe

Werte verändern

Manchmal ist es nötig Werte nachträglich anzupassen. Vorallem bei KI-Hexern ist dies meistens unumgänglich.

<object>.Stats.Range.Distance = 5000; -- veränderte Auslösedistanz für Zauber

<object>.Stats.Mana.Current = 50;     -- verändertes aktuelles Mana
<object>.Stats.Range.Max = 50;        -- zusätzlich muss man das maximale Mana anpassen

<object>.Stats.Time.Timer = 66;       -- veränderter Zyklenzähler für Manaregeneration
<object>.Stats.Time.Recharge = 66;    -- zusätzlich muss man den Maximalwert des Zählers verändern

Bei den Werten für den Zyklenzähler muss man unbedingt darauf achten diese nur für KIs zu verändern!

Achtung, KI-Hexer

Ich habe eine wohl gemerkt primitive Steuerung für KI-Hexer in den Mod integriert. Sobald ein Hexer nicht vom menschlichen Spieler kontrolliert wird und sich Feinde in der nähe befinden wird dieser beginnen diese zu attackieren. Und zwar mit Zaubern. Dabei ist zu beachten, dass der Hexer jeweils nur 1 Angriffszauber (z.B. Lightning, Sunfire, CallHornet), 1 Verteidigungszauber (z.B. InflictFear, BellOfHeaven, Thunderstorm), 1 Heilungszauber (Healing oder SuperHealing) und 1 Beschwörungszauber (SummonWolves, SummonTigers) besitzen darf.

Des weiteren gilt, dass der Hexer nur dann Tiere beschwört, wenn er keinen Angriffszauber hat oder er zu wenig Mana hat und die Tierbeschwörung billiger ist.

Demo-Map

Erklärt Fortbildung, Zauberauswahl, Kampf und das Brauen von Manatränken.
Hexerei-Tutorial

Zurück zu Funktionssammlungen | Drucken | Tags
Sofern nicht anders angegeben, steht der Inhalt dieser Seite unter Lizenz Creative Commons Attribution-ShareAlike 3.0 License