Hier noch der vollständige Code plus Erklärungen. Vielleicht hat ja jemand Lust es auszuprobieren.
Zuerst wird ein beliebiges Item erstellt, mit dem die Aura aktiviert wird. In das Feld ScriptOverride wird ein ActionScript eingetragen. Items sind in den meisten Fällen Verbrauchsgegenstände, werden also nach der Benuzung aus dem Inventar entfernt. Damit das nicht passiert, muss das Feld CanDestroy den Wert 0 bekommen.
Eintrag für statica1
Code:
INSERT INTO "_Template_Item" VALUES ("AuraFlasche","AuraFlasche","items_props/item_flasche_rot","","items_props/item_flasche_rot","","infoid_crafted_alc_antidot","","on:Use:Aurascript.xml","1","0.30000001192092896","icons/alchimie_item_trank_antidot","lookat_crafted_alc_antidot","1","1","NONE","100","1","","1","0","no info","TaMagiekunde","no info","0","1","0","1","Nehmen","0","","");
Eintrag für Savegame
Code:
INSERT INTO "_Instance_Item" VALUES (X'36863425868444FDB4FE03E061382F5B',null,null,null,null,"AuraFlasche","AuraFlasche","items_props/item_flasche_rot","","items_props/item_flasche_rot","","infoid_crafted_alc_antidot","","on:Use:Aurascript.xml","1","0.30000001192092896","icons/alchimie_item_trank_antidot","lookat_crafted_alc_antidot","1","1","NONE","100","1","","1","0","no info","TaMagiekunde","no info","0","1","0","1","Nehmen","0","","",null,null,null,null,null,null,null,null,null,null,null,null,null);
ActionScript und Statement, die den Auraeffekt auf den Helden anwenden.
Code:
INSERT INTO "_Scripts_ActionScripts" VALUES ("Aurascript.xml",X'004846F86D48DFD68F82C76552633A9D',X'773EC9A43BD733FB9867FF54BB375A6C');
INSERT INTO "_Scripts_Statements" VALUES (X'3D9B832C7D498EE6B3DA0F7EDADC8712','Action','AddStatusEffect who="Hero" id="mod_hero_aura" showInConsole="true" actionSelection="script,quest,dialog" seCategory="all,item,statuseffect"; ',X'773EC9A43BD733FB9867FF54BB375A6C');
INSERT INTO "_Scripts_Statements" VALUES (X'004846F86D48DFD68F82C76552633A9D','Begin','2c839b3d-497d-e68e-b3da-0f7edadc8712',X'773EC9A43BD733FB9867FF54BB375A6C');
Danach wird ein Eintrag in _Template_Statuseffects erstellt. Ich habe dazu einfach den Effekt, der auf den Hordenanführer angewendet wird, dupliziert und nur die Id geändert.
Code:
INSERT INTO "_Template_Statuseffects" VALUES ("mod_hero_aura","a1_aura_anfuehrer_self","Skeleton_Root","","textures:icons/status_fx_good_plus.dds","a1_horde_anfuehrer_self","a1_horde_anfuehrer_aura_name","a1_horde_anfuehrer_aura_short","a1_horde_anfuehrer_aura_long","a1_horde_anfuehrer_target");
Dann wird ein Eintrag mit der gleichen Id in der Tabelle
_Scripts_StatusEffectScripts erstellt. In die Felder
StatusEffectOnTriggerRef und
StatusEffectOnTriggerBlock werden die GUID und die BlockGUID des Statement mit der Schleifenanweisung eingetragen.
Code:
INSERT INTO "_Scripts_StatusEffectScripts" VALUES (X'7618EBB1F6CA3A9978A92F47B663B071',"mod_hero_aura","",X'00000000000000000000000000000000',X'00000000000000000000000000000000',X'A4A9F818EBE4ED4A53CE700598976C09',X'00000000000000000000000000000000',X'C3826A25A2AD8814F0D37DDA3BE9395C',X'00000000000000000000000000000000',"","","0","1");
Die Schleife ist ein einfaches Statement.
LoopAction ist die Anweisung für eine Schleife,
count="10" legt die Anzahl der Schleifendurchläufe fest und
script="SetScript_aura_loop.xml" ist das ActionScript, das bei jeden Schleifendurchlauf aufgerufen werden soll.
Code:
INSERT INTO "_Scripts_Statements" VALUES (X'A4A9F818EBE4ED4A53CE700598976C08','Action','LoopAction count="10" track="0" script="SetScript_aura_loop.xml',X'C3826A25A2AD8814F0D37DDA3BE9395C');
INSERT INTO "_Scripts_Statements" VALUES (X'A4A9F818EBE4ED4A53CE700598976C09','Begin','18f8a9a4-e4eb-4aed-53ce-700598976c08',X'C3826A25A2AD8814F0D37DDA3BE9395C');
Das ActionScript ruft ein weiteres Statement auf.
Code:
INSERT INTO "_Scripts_ActionScripts" VALUES ("SetScript_aura_loop.xml",X'A4A9F818EBE4ED4A53CE700598976C07',X'C3826A25A2AD8814F0D37DDA3BE9395B');
Dieses Statement enthält eine
RunActionScriptInRadius Anweisung, die dafür sorgt, dass ein weiteres ActionScript aufgerufen wird.
radius="30" legt den Durchmesser der Aura fest, also den Wirkungsbereich der Aura. Mit
WaitAction duration="10" wird eine Pause von 10 Awkunden festgelegt. Je nachdem, welche Aktion im aufgerufenem ActionScript durchgeführt wird, sollte die Pausendauer angepasst werden.
Code:
INSERT INTO "_Scripts_Statements" VALUES (X'A4A9F818EBE4ED4A53CE700598976C06','Action','RunActionScriptInRadius radius="30" script="SetScript_hero_aura_statuseffects.xml_1" actionSelection="script,dialog,quest" seCategory="all,behaviour,trigger"; WaitAction duration="10" permanent="false" actionSelection="script" seCategory="all,scripting"; ',X'C3826A25A2AD8814F0D37DDA3BE9395B');
INSERT INTO "_Scripts_Statements" VALUES (X'A4A9F818EBE4ED4A53CE700598976C07','Begin','18f8a9a4-e4eb-4aed-53ce-700598976c06',X'C3826A25A2AD8814F0D37DDA3BE9395B');
Ds letze ActionScript ruft dann das Statement auf, das die innerhalb der Aura durchzuführende Aktion beschreibt.
Code:
INSERT INTO "_Scripts_ActionScripts" VALUES ("SetScript_hero_aura_statuseffects.xml_1",X'A4A9F818EBE4ED4A53CE700598976C05',X'C3826A25A2AD8814F0D37DDA3BE9395A');
Dieses Statement ist etwas komplexer als die bisherigen. Hier ist nicht nur eine einfache Anweisung enthalten, sondern in diesem Fall ist das Durchführen der Anweisung von einer Bedingung abhängig. Der Verweis auf die Tabelle erfolgt in der Conditionzeile des Statements. ConditionGUID und ConditionBlockGUID werden als Identifikatoren angegeben, d. h. beide Werte müssen für den Eintrag in
_Scripts_Conditions in BLOBs umgewandelt werden. Die Bedingung besagt, dass die Aktion des Statements nur auf NPCs angwendet werden soll, die dem Helden nicht freundlich (stance="Friendly") gesinnt sind. (Könnte man eventuell auch anders formulieren, ich bin der Sache nicht weiter auf den Grund gegangen.)
Code:
INSERT INTO "_Scripts_Conditions" VALUES (X'B23688E4CF432528BA867B8D6E735835','Atom','CheckFactionRelation entityA="Hero" entityB="AimedEntity" stance="Friendly"; ',X'803946BDA4D0C024539103D9AE309420',X'C3826A25A2AD8814F0D37DDA3BE9395A');
INSERT INTO "_Scripts_Conditions" VALUES (X'B23688E4CF432528BA867B8D6E735836','Not','e48836b2-43cf-2825-ba86-7b8d6e735835',X'803946BDA4D0C024539103D9AE309420',X'C3826A25A2AD8814F0D37DDA3BE9395A');
INSERT INTO "_Scripts_Conditions" VALUES (X'B23688E4CF432528BA867B8D6E735837','And','e48836b2-43cf-2825-ba86-7b8d6e735836',X'803946BDA4D0C024539103D9AE309420',X'C3826A25A2AD8814F0D37DDA3BE9395A');
Wenn die Begingung zutrifft soll die Aktion ausgeführt werden. Hurt ist die Anweisung, dass jemandem Schaden zugefügt werden soll. Das Argument
who="AimedEntity" bestimmt, wem der Schaden zugefügt weden soll. Bei der Aura bezieht sich AimedEntity auf jeden nicht freundlich gesinnten NPC.
fixedDamage="20" legt einen festen Schaden von 20 TP fest,
dice="20" legt die Art des Würfels fest, in diesem Fall eben ein W20. Hier könnte auch 6 oder 3 stehen, dann wäre es entsprechen ein W6 bzw. ein W3 an variablem Schaden.
diceAmount="2" legt die Anzahl der Würfel fest, die gerollt werden sollen.
Code:
INSERT INTO "_Scripts_Statements" VALUES (X'A4A9F818EBE4ED4A53CE700598976C01','Condition','e48836b2-43cf-2825-ba86-7b8d6e735837;bd463980-d0a4-24c0-5391-03d9ae309420',X'C3826A25A2AD8814F0D37DDA3BE9395A');
INSERT INTO "_Scripts_Statements" VALUES (X'A4A9F818EBE4ED4A53CE700598976C02','Action','Hurt who="AimedEntity" fixedDamage="20" dice="20" diceAmount="2" effect="Ignifaxius_Impact" damageType="fire" actionSelection="script,quest,dialog" seCategory="all,item,attributes"; ',X'C3826A25A2AD8814F0D37DDA3BE9395A');
INSERT INTO "_Scripts_Statements" VALUES (X'A4A9F818EBE4ED4A53CE700598976C03','Then','18f8a9a4-e4eb-4aed-53ce-700598976c02',X'C3826A25A2AD8814F0D37DDA3BE9395A');
INSERT INTO "_Scripts_Statements" VALUES (X'A4A9F818EBE4ED4A53CE700598976C04','If','18f8a9a4-e4eb-4aed-53ce-700598976c01;18f8a9a4-e4eb-4aed-53ce-700598976c03',X'C3826A25A2AD8814F0D37DDA3BE9395A');
INSERT INTO "_Scripts_Statements" VALUES (X'A4A9F818EBE4ED4A53CE700598976C05','Begin','18f8a9a4-e4eb-4aed-53ce-700598976c04',X'C3826A25A2AD8814F0D37DDA3BE9395A');
Statt einer Hurt Anweisung können natürlich auch andere Aktionen durchgeführt werden. Der Eintrag
TransferEntity location="_graveyard_" entryPoint="hellgate" snapToGround="false" actionSelection="script,quest,dialog" seCategory="all,item,transfer"; lässt alle Gegner einfach verschwinden und
AddStatusEffect who="AimedEntity" id="burning" showInConsole="true" actionSelection="script,quest,dialog" seCategory="all,item,statuseffect"; setzt alle Gegner in Brand.
Ein solch mächtiges Artefakt würde ich natürlich niemals einem Helden einfach so geben. Ich würde die Aura/das Item noch so anpassen, dass sie nur von Magieanwendern und nur dreimal benutzt werden kann.