forked from github/server
merge spell callback changes.
This commit is contained in:
commit
5d710fa79f
|
@ -10,14 +10,12 @@
|
|||
|
||||
<!-- shared spells -->
|
||||
<spell name="create_roi" ship="true" rank="5" index="130">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="50" cost="fixed"/>
|
||||
<resource name="money" amount="3000" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_aots" ship="true" rank="5" index="125">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="50" cost="fixed"/>
|
||||
<resource name="money" amount="3000" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
|
@ -25,12 +23,10 @@
|
|||
|
||||
<!-- draig spells -->
|
||||
<spell name="earn_silver#draig" ship="true" variable="true" rank="5" index="159">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="1" cost="level"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_firesword" ship="true" rank="5" index="148">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="100" cost="fixed"/>
|
||||
<resource name="p10" amount="1" cost="fixed"/>
|
||||
<resource name="sword" amount="1" cost="fixed"/>
|
||||
|
@ -38,19 +34,16 @@
|
|||
</spell>
|
||||
|
||||
<spell name="create_trollbelt" ship="true" rank="5" index="48">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="20" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
</spell>
|
||||
|
||||
<!-- gwyrrd spells -->
|
||||
<spell name="earn_silver#gwyrrd" ship="true" variable="true" rank="5" index="159">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="1" cost="level"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_magicherbbag" ship="true" rank="5" index="165">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="30" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
<resource name="p2" amount="1" cost="fixed"/>
|
||||
|
@ -58,18 +51,15 @@
|
|||
|
||||
<!-- illaun spells -->
|
||||
<spell name="earn_silver#illaun" ship="true" variable="true" rank="5" index="159">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="1" cost="level"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_dreameye" ship="true" rank="5" index="149">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="dragonhead" amount="1" cost="fixed"/>
|
||||
<resource name="permaura" amount="5" cost="fixed"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_invisibility_sphere" ship="true" rank="5" index="178">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="150" cost="fixed"/>
|
||||
<resource name="money" amount="30000" cost="fixed"/>
|
||||
<resource name="permaura" amount="3" cost="fixed"/>
|
||||
|
@ -77,12 +67,10 @@
|
|||
|
||||
<!-- cerddor spells -->
|
||||
<spell name="earn_silver#cerddor" ship="true" variable="true" rank="5" index="159">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="1" cost="level"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_roqf" ship="true" rank="5" index="63">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="20" cost="fixed"/>
|
||||
<resource name="money" amount="1000" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
|
@ -90,25 +78,21 @@
|
|||
|
||||
<!-- tybied spells -->
|
||||
<spell name="earn_silver#tybied" ship="true" variable="true" rank="5" index="159">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="1" cost="level"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_antimagic" ship="true" rank="5" index="38">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="50" cost="fixed"/>
|
||||
<resource name="money" amount="3000" cost="fixed"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_rop" ship="true" rank="5" index="1">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="100" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
<resource name="money" amount="4000" cost="fixed"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_bagofholding" ship="true" rank="5" index="155">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="30" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
<resource name="money" amount="5000" cost="fixed"/>
|
||||
|
@ -116,7 +100,6 @@
|
|||
|
||||
<!-- gray magic -->
|
||||
<spell name="create_runesword" ship="true" rank="5" index="135">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="100" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
<resource name="money" amount="1000" cost="fixed"/>
|
||||
|
@ -124,20 +107,17 @@
|
|||
</spell>
|
||||
|
||||
<spell name="create_chastitybelt" ship="true" rank="5" index="134">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="50" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
<resource name="money" amount="3000" cost="fixed"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_focus" ship="true" rank="5" index="2">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="100" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_ror" ship="true" rank="5" index="3">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="100" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
</spell>
|
||||
|
|
|
@ -10,14 +10,12 @@
|
|||
|
||||
<!-- shared spells -->
|
||||
<spell name="create_roi" ship="true" rank="5" index="130">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="50" cost="fixed"/>
|
||||
<resource name="money" amount="3000" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_aots" ship="true" rank="5" index="125">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="50" cost="fixed"/>
|
||||
<resource name="money" amount="3000" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
|
@ -39,7 +37,6 @@
|
|||
</spell>
|
||||
<spell name="earn_silver#illaun" ship="true" variable="true" rank="5" index="159">
|
||||
<!-- Wahrsagen -->
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="1" cost="level"/>
|
||||
</spell>
|
||||
<spell name="flee" rank="5" index="20" variable="true" combat="1">
|
||||
|
@ -106,7 +103,6 @@
|
|||
</spell>
|
||||
<spell name="create_dreameye" ship="true" rank="5" index="149">
|
||||
<!-- Erschaffe ein Traumauge -->
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="dragonhead" amount="1" cost="fixed"/>
|
||||
<resource name="permaura" amount="5" cost="fixed"/>
|
||||
</spell>
|
||||
|
@ -119,7 +115,6 @@
|
|||
</spell>
|
||||
<spell name="earn_silver#draig" ship="true" variable="true" rank="5" index="159">
|
||||
<!-- Kleine Flüche -->
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="1" cost="level"/>
|
||||
</spell>
|
||||
<spell name="fireball" rank="5" index="4" variable="true" combat="2">
|
||||
|
@ -189,7 +184,6 @@
|
|||
</spell>
|
||||
<spell name="create_firesword" ship="true" rank="5" index="148">
|
||||
<!-- Erschaffe ein Flammenschwert -->
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="100" cost="fixed"/>
|
||||
<resource name="oil" amount="10" cost="fixed"/>
|
||||
<resource name="sword" amount="1" cost="fixed"/>
|
||||
|
@ -205,7 +199,6 @@
|
|||
<!-- new cerddor -->
|
||||
<spell name="earn_silver#cerddor" ship="true" variable="true" rank="5" index="159">
|
||||
<!-- Gaukeleien -->
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="1" cost="level"/>
|
||||
</spell>
|
||||
<spell name="song_of_healing" rank="5" index="10" variable="true" combat="3">
|
||||
|
@ -269,7 +262,6 @@
|
|||
</spell>
|
||||
<spell name="create_roqf" ship="true" rank="5" index="63">
|
||||
<!-- Miriams flinke Finger -->
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="20" cost="fixed"/>
|
||||
<resource name="money" amount="1000" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
|
@ -304,12 +296,11 @@
|
|||
<!-- new gwyrrd -->
|
||||
<spell name="blessedharvest" rank="5" index="25" ship="true" far="true" variable="true">
|
||||
<!-- Segen der Erde -->
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<function name="cast" value="cast_blessedharvest"/>
|
||||
<resource name="aura" amount="1" cost="level"/>
|
||||
</spell>
|
||||
<spell name="earn_silver#gwyrrd" ship="true" variable="true" rank="5" index="159">
|
||||
<!-- Viehheilung -->
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="1" cost="level"/>
|
||||
</spell>
|
||||
<spell name="stonegolem" rank="4" index="32" variable="true">
|
||||
|
@ -394,21 +385,18 @@
|
|||
<!-- new tybied - spells known to all schools -->
|
||||
<spell name="create_potion_p2" ship="true" rank="5" variable="true">
|
||||
<!-- Wasser des Lebens -->
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="2" cost="linear"/>
|
||||
<resource name="h4" amount="1" cost="linear"/><!-- Baumringel -->
|
||||
<resource name="h6" amount="1" cost="linear"/><!-- Gurgelkraut -->
|
||||
</spell>
|
||||
<spell name="create_potion_p0" ship="true" rank="5" variable="true">
|
||||
<!-- Siebenmeilentee -->
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="2" cost="linear"/>
|
||||
<resource name="h12" amount="1" cost="linear"/><!-- Windbeutel -->
|
||||
<resource name="h17" amount="1" cost="linear"/><!-- Höhlenglimm -->
|
||||
</spell>
|
||||
<spell name="create_potion_p9" ship="true" rank="5" variable="true">
|
||||
<!-- Pferdeglück -->
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="3" cost="linear"/>
|
||||
<resource name="h0" amount="1" cost="linear"/><!-- Flachwurz -->
|
||||
<resource name="h8" amount="1" cost="linear"/><!-- Blasenmorchel -->
|
||||
|
@ -416,7 +404,6 @@
|
|||
</spell>
|
||||
<spell name="create_potion_peasantblood" ship="true" rank="5" variable="true">
|
||||
<!-- Bauernblut -->
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="3" cost="linear"/>
|
||||
<resource name="h14" amount="1" cost="linear"/><!-- Alraune -->
|
||||
<resource name="h6" amount="1" cost="linear"/><!-- Gurgelkraut -->
|
||||
|
@ -426,7 +413,6 @@
|
|||
|
||||
<spell name="create_potion_ointment" ship="true" rank="5" variable="true">
|
||||
<!-- Wundsalbe -->
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="4" cost="linear"/>
|
||||
<resource name="h4" amount="1" cost="linear"/><!-- Baumringel -->
|
||||
<resource name="h15" amount="1" cost="linear"/><!-- Steinbeißer -->
|
||||
|
@ -435,7 +421,6 @@
|
|||
</spell>
|
||||
<spell name="create_potion_p3" ship="true" rank="5" variable="true">
|
||||
<!-- Schaffenstrunk -->
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="4" cost="linear"/>
|
||||
<resource name="h12" amount="1" cost="linear"/><!-- Windbeutel -->
|
||||
<resource name="h6" amount="1" cost="linear"/><!-- Gurgelkraut -->
|
||||
|
@ -444,7 +429,6 @@
|
|||
</spell>
|
||||
<spell name="create_potion_p14" ship="true" rank="5" variable="true">
|
||||
<!-- Heiltrank -->
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="5" cost="linear"/>
|
||||
<resource name="h0" amount="1" cost="linear"/><!-- Flachwurz -->
|
||||
<resource name="h8" amount="1" cost="linear"/><!-- Blasenmorchel -->
|
||||
|
@ -454,7 +438,6 @@
|
|||
</spell>
|
||||
<spell name="create_potion_p13" ship="true" rank="5" variable="true">
|
||||
<!-- Elixier der Macht -->
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="5" cost="linear"/>
|
||||
<resource name="h14" amount="1" cost="linear"/><!-- Alraune -->
|
||||
<resource name="h8" amount="1" cost="linear"/><!-- Blasenmorchel -->
|
||||
|
@ -472,39 +455,33 @@
|
|||
|
||||
<!-- common spells: randomly given, one per level -->
|
||||
<spell name="create_trollbelt" ship="true" rank="5" index="48">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="20" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_antimagic" ship="true" rank="5" index="38">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="50" cost="fixed"/>
|
||||
<resource name="money" amount="3000" cost="fixed"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_rop" ship="true" rank="5" index="1">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="100" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
<resource name="money" amount="4000" cost="fixed"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_bagofholding" ship="true" rank="5" index="155">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="30" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
<resource name="money" amount="5000" cost="fixed"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_focus" ship="true" rank="5" index="2">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="100" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_ror" ship="true" rank="5" index="3">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="100" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
</spell>
|
||||
|
@ -518,7 +495,7 @@
|
|||
</spell>
|
||||
<spell name="raindance" rank="5" index="26" ship="true" far="true" variable="true">
|
||||
<!-- Regentanz -->
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<function name="cast" value="cast_blessedharvest"/>
|
||||
<resource name="aura" amount="1" cost="level"/>
|
||||
</spell>
|
||||
<spell name="irongolem" rank="4" index="33" variable="true">
|
||||
|
|
|
@ -10,14 +10,12 @@
|
|||
|
||||
<!-- shared spells -->
|
||||
<spell name="create_roi" ship="true" rank="5" index="130">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="50" cost="fixed"/>
|
||||
<resource name="money" amount="3000" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_aots" ship="true" rank="5" index="125">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="50" cost="fixed"/>
|
||||
<resource name="money" amount="3000" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
|
@ -494,12 +492,10 @@
|
|||
|
||||
<!-- draig spells -->
|
||||
<spell name="earn_silver#draig" ship="true" variable="true" rank="5" index="159">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="1" cost="level"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_firesword" ship="true" rank="5" index="148">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="100" cost="fixed"/>
|
||||
<resource name="p10" amount="1" cost="fixed"/>
|
||||
<resource name="sword" amount="1" cost="fixed"/>
|
||||
|
@ -507,7 +503,6 @@
|
|||
</spell>
|
||||
|
||||
<spell name="create_trollbelt" ship="true" rank="5" index="48">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="20" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
</spell>
|
||||
|
@ -520,12 +515,10 @@
|
|||
</spell>
|
||||
|
||||
<spell name="earn_silver#gwyrrd" ship="true" variable="true" rank="5" index="159">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="1" cost="level"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_magicherbbag" ship="true" rank="5" index="165">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="30" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
<resource name="p2" amount="1" cost="fixed"/>
|
||||
|
@ -533,18 +526,15 @@
|
|||
|
||||
<!-- illaun spells -->
|
||||
<spell name="earn_silver#illaun" ship="true" variable="true" rank="5" index="159">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="1" cost="level"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_dreameye" ship="true" rank="5" index="149">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="dragonhead" amount="1" cost="fixed"/>
|
||||
<resource name="permaura" amount="5" cost="fixed"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_invisibility_sphere" ship="true" rank="5" index="178">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="150" cost="fixed"/>
|
||||
<resource name="money" amount="30000" cost="fixed"/>
|
||||
<resource name="permaura" amount="3" cost="fixed"/>
|
||||
|
@ -558,12 +548,10 @@
|
|||
</spell>
|
||||
|
||||
<spell name="earn_silver#cerddor" ship="true" variable="true" rank="5" index="159">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="1" cost="level"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_roqf" ship="true" rank="5" index="63">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="20" cost="fixed"/>
|
||||
<resource name="money" amount="1000" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
|
@ -583,25 +571,21 @@
|
|||
|
||||
<!-- tybied spells -->
|
||||
<spell name="earn_silver#tybied" ship="true" variable="true" rank="5" index="159">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="1" cost="level"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_antimagic" ship="true" rank="5" index="38">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="50" cost="fixed"/>
|
||||
<resource name="money" amount="3000" cost="fixed"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_rop" ship="true" rank="5" index="1">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="100" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
<resource name="money" amount="4000" cost="fixed"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_bagofholding" ship="true" rank="5" index="155">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="30" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
<resource name="money" amount="5000" cost="fixed"/>
|
||||
|
@ -609,7 +593,6 @@
|
|||
|
||||
<!-- gray magic -->
|
||||
<spell name="create_runesword" ship="true" rank="5" index="135">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="100" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
<resource name="money" amount="1000" cost="fixed"/>
|
||||
|
@ -617,20 +600,17 @@
|
|||
</spell>
|
||||
|
||||
<spell name="create_chastitybelt" ship="true" rank="5" index="134">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="50" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
<resource name="money" amount="3000" cost="fixed"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_focus" ship="true" rank="5" index="2">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="100" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
</spell>
|
||||
|
||||
<spell name="create_ror" ship="true" rank="5" index="3">
|
||||
<function name="cast" value="lua_castspell"/>
|
||||
<resource name="aura" amount="100" cost="fixed"/>
|
||||
<resource name="permaura" amount="1" cost="fixed"/>
|
||||
</spell>
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
require 'eressea.e3.rules'
|
||||
require 'eressea.spells'
|
||||
|
||||
eressea.log.debug("rules for game E3")
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
-- the "raindance" spell
|
||||
function raindance(r, mage, level, force)
|
||||
if (create_curse(mage, r, "blessedharvest", force, 1+force*2, 100 * force)) then
|
||||
-- slightly crooked way of reporting an action to everyone in the region
|
||||
local msg = message.create("raindance_effect")
|
||||
msg:set_unit("mage", mage)
|
||||
if (msg:report_action(r, mage, 3)) then
|
||||
local msg2 = message.create("raindance_effect")
|
||||
msg2:set_unit("mage", nil)
|
||||
msg2:report_action(r, mage, 4)
|
||||
end
|
||||
end
|
||||
return level
|
||||
end
|
||||
|
||||
-- the "blessed harvest" spell
|
||||
function blessedharvest(r, mage, level, force)
|
||||
if create_curse(mage, r, "blessedharvest", force, 1+force*2, 50 * force) then
|
||||
-- slightly crooked way of reporting an action to everyone in the region
|
||||
local msg = message.create("harvest_effect")
|
||||
msg:set_unit("mage", mage)
|
||||
if (msg:report_action(r, mage, 3)) then
|
||||
local msg2 = message.create("harvest_effect")
|
||||
msg2:set_unit("mage", nil)
|
||||
msg2:report_action(r, mage, 4)
|
||||
end
|
||||
for idx, rn in ipairs(r.adj) do
|
||||
-- nur landregionen haben moral>=0
|
||||
if r.morale>=0 then
|
||||
create_curse(mage, r, "blessedharvest", force, force*2, 50 * force)
|
||||
end
|
||||
end
|
||||
end
|
||||
return level
|
||||
end
|
|
@ -20,3 +20,4 @@ require 'tests.magicbag'
|
|||
require 'tests.process'
|
||||
require 'tests.xmas'
|
||||
require 'tests.production'
|
||||
require 'tests.spells'
|
||||
|
|
|
@ -5,11 +5,12 @@ require 'tests.e3.rules'
|
|||
require 'tests.e3.parser'
|
||||
require 'tests.e3.morale'
|
||||
require 'tests.e3.items'
|
||||
require 'tests.e3.production'
|
||||
require 'tests.spells'
|
||||
require 'tests.economy'
|
||||
require 'tests.orders'
|
||||
require 'tests.common'
|
||||
require 'tests.items'
|
||||
require 'tests.magicbag'
|
||||
require 'tests.process'
|
||||
require 'tests.e3.production'
|
||||
require 'tests.production'
|
||||
|
|
|
@ -32,10 +32,9 @@ function test_raindance()
|
|||
u:add_order("ARBEITEN")
|
||||
process_orders()
|
||||
process_orders()
|
||||
assert_equal(500, r:get_resource("money"))
|
||||
process_orders()
|
||||
assert_equal(800, r:get_resource("money"))
|
||||
process_orders()
|
||||
assert_equal(900, r:get_resource("money"))
|
||||
assert_equal(600, r:get_resource("money"))
|
||||
end
|
||||
|
||||
function test_magic()
|
||||
|
|
|
@ -0,0 +1,83 @@
|
|||
require 'lunit'
|
||||
module("tests.spells", package.seeall, lunit.testcase)
|
||||
|
||||
function setup()
|
||||
eressea.free_game()
|
||||
eressea.settings.set("nmr.removenewbie", "0")
|
||||
eressea.settings.set("nmr.timeout", "0")
|
||||
eressea.settings.set("NewbieImmunity", "0")
|
||||
eressea.settings.set("rules.food.flags", "4")
|
||||
eressea.settings.set("rules.encounters", "0")
|
||||
eressea.settings.set("magic.regeneration.enable", "0")
|
||||
end
|
||||
|
||||
function test_create_bogus()
|
||||
local r = region.create(0, 0, "plain")
|
||||
local f = faction.create("human")
|
||||
local u = unit.create(f, r, 1)
|
||||
u.race = "elf"
|
||||
u:set_skill("magic", 10)
|
||||
u.magic = 'gwyrrd'
|
||||
u:clear_orders()
|
||||
u:add_order("ZAUBERE 'Erschaffe Katastrophe'")
|
||||
process_orders()
|
||||
assert_equal(f.messages[3], 'error173') -- HACKity HACK
|
||||
end
|
||||
|
||||
function test_create_roi()
|
||||
local r = region.create(0, 0, "plain")
|
||||
local f = faction.create("human")
|
||||
local u = unit.create(f, r, 1)
|
||||
u.race = "elf"
|
||||
u:set_skill("magic", 10)
|
||||
u.magic = 'gwyrrd'
|
||||
u.aura = 100
|
||||
u:add_item("money", 3000)
|
||||
u:add_spell("create_roi")
|
||||
u:clear_orders()
|
||||
u:add_order("ZAUBERE 'Erschaffe einen Ring der Unsichtbarkeit'")
|
||||
local amax = u.aura_max
|
||||
process_orders()
|
||||
assert_equal(1, u:get_item("roi"))
|
||||
assert_equal(50, u.aura)
|
||||
assert_equal(amax - 1, u.aura_max)
|
||||
end
|
||||
|
||||
function test_create_aots()
|
||||
local r = region.create(0, 0, "plain")
|
||||
local f = faction.create("human")
|
||||
local u = unit.create(f, r, 1)
|
||||
u.race = "elf"
|
||||
u:set_skill("magic", 10)
|
||||
u.magic = 'gwyrrd'
|
||||
u.aura = 100
|
||||
u:add_item("money", 3000)
|
||||
u:add_spell("create_aots")
|
||||
u:clear_orders()
|
||||
u:add_order("ZAUBERE 'Erschaffe ein Amulett des wahren Sehens'")
|
||||
local amax = u.aura_max
|
||||
process_orders()
|
||||
assert_equal(1, u:get_item("aots"))
|
||||
assert_equal(50, u.aura)
|
||||
assert_equal(amax - 1, u.aura_max)
|
||||
end
|
||||
|
||||
function test_create_dreameye()
|
||||
local r = region.create(0, 0, "plain")
|
||||
local f = faction.create("human")
|
||||
local u = unit.create(f, r, 1)
|
||||
u.race = "elf"
|
||||
u:set_skill("magic", 10)
|
||||
u.magic = 'gwyrrd'
|
||||
u.aura = 100
|
||||
u:add_item("dragonhead", 1)
|
||||
u:add_spell("create_dreameye")
|
||||
u:clear_orders()
|
||||
u:add_order("ZAUBERE 'Erschaffe ein Traumauge'")
|
||||
local amax = u.aura_max
|
||||
process_orders()
|
||||
assert_equal(1, u:get_item("dreameye"))
|
||||
assert_equal(100, u.aura)
|
||||
assert_equal(amax - 5, u.aura_max)
|
||||
end
|
||||
|
|
@ -268,6 +268,23 @@ static int tolua_faction_setkey(lua_State * L)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int tolua_faction_get_messages(lua_State * L)
|
||||
{
|
||||
faction *self = (faction *)tolua_tousertype(L, 1, 0);
|
||||
int i = 1;
|
||||
mlist *ml;
|
||||
if (!self->msgs) {
|
||||
return 0;
|
||||
}
|
||||
lua_newtable(L);
|
||||
for (ml = self->msgs->begin; ml; ml = ml->next, ++i) {
|
||||
lua_pushnumber(L, i);
|
||||
lua_pushstring(L, ml->msg->type->name);
|
||||
lua_rawset(L, -3);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int tolua_faction_count_msg_type(lua_State *L) {
|
||||
faction *self = (faction *)tolua_tousertype(L, 1, 0);
|
||||
const char *str = tolua_tostring(L, 2, 0);
|
||||
|
@ -637,6 +654,7 @@ void tolua_faction_open(lua_State * L)
|
|||
|
||||
/* tech debt hack, siehe https://paper.dropbox.com/doc/Weihnachten-2015-5tOx5r1xsgGDBpb0gILrv#:h=Probleme-mit-Tests-(Nachtrag-0 */
|
||||
tolua_function(L, TOLUA_CAST "count_msg_type", tolua_faction_count_msg_type);
|
||||
tolua_variable(L, TOLUA_CAST "messages", tolua_faction_get_messages, NULL);
|
||||
|
||||
tolua_function(L, TOLUA_CAST "get_key", tolua_faction_getkey);
|
||||
tolua_function(L, TOLUA_CAST "set_key", tolua_faction_setkey);
|
||||
|
|
|
@ -193,6 +193,13 @@ static int tolua_unit_set_id(lua_State * L)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int tolua_unit_get_auramax(lua_State * L)
|
||||
{
|
||||
unit *self = (unit *)tolua_tousertype(L, 1, 0);
|
||||
lua_pushinteger(L, max_spellpoints(self->region, self));
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int tolua_unit_get_hpmax(lua_State * L)
|
||||
{
|
||||
unit *self = (unit *)tolua_tousertype(L, 1, 0);
|
||||
|
@ -1033,6 +1040,7 @@ void tolua_unit_open(lua_State * L)
|
|||
tolua_variable(L, TOLUA_CAST "race", &tolua_unit_get_race,
|
||||
tolua_unit_set_race);
|
||||
tolua_variable(L, TOLUA_CAST "hp_max", &tolua_unit_get_hpmax, 0);
|
||||
tolua_variable(L, TOLUA_CAST "aura_max", &tolua_unit_get_auramax, 0);
|
||||
|
||||
tolua_function(L, TOLUA_CAST "show", &tolua_bufunit);
|
||||
}
|
||||
|
|
|
@ -92,6 +92,20 @@ TOLUA_PKG(locale);
|
|||
TOLUA_PKG(log);
|
||||
TOLUA_PKG(game);
|
||||
|
||||
int tolua_toid(lua_State * L, int idx, int def)
|
||||
{
|
||||
int no = 0;
|
||||
int type = lua_type(L, idx);
|
||||
if (type == LUA_TNUMBER) {
|
||||
no = (int)tolua_tonumber(L, idx, def);
|
||||
}
|
||||
else {
|
||||
const char *str = tolua_tostring(L, idx, NULL);
|
||||
no = str ? atoi36(str) : def;
|
||||
}
|
||||
return no;
|
||||
}
|
||||
|
||||
int log_lua_error(lua_State * L)
|
||||
{
|
||||
const char *error = lua_tostring(L, -1);
|
||||
|
|
|
@ -18,6 +18,7 @@ extern "C" {
|
|||
struct _dictionary_;
|
||||
struct selist;
|
||||
|
||||
int tolua_toid(struct lua_State *L, int idx, int def);
|
||||
int tolua_sqlite_open(struct lua_State *L);
|
||||
int tolua_bindings_open(struct lua_State *L, const struct _dictionary_ *d);
|
||||
int tolua_itemlist_next(struct lua_State *L);
|
||||
|
|
|
@ -2658,8 +2658,7 @@ expandwork(region * r, request * work_begin, request * work_end, int maxwork)
|
|||
const curse_type *blessedharvest_ct = ct_find("blessedharvest");
|
||||
if (blessedharvest_ct) {
|
||||
int happy =
|
||||
(int)curse_geteffect(get_curse(r->attribs, blessedharvest_ct));
|
||||
happy = MIN(happy, jobs);
|
||||
(int)(jobs * curse_geteffect(get_curse(r->attribs, blessedharvest_ct)));
|
||||
earnings += happy;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,7 +24,9 @@ without prior permission by the authors of Eressea.
|
|||
#include <util/parser.h>
|
||||
#include <util/resolve.h>
|
||||
|
||||
#include <kernel/callbacks.h>
|
||||
#include <kernel/config.h>
|
||||
#include <kernel/callbacks.h>
|
||||
#include <kernel/equipment.h>
|
||||
#include <kernel/faction.h>
|
||||
#include <kernel/spell.h>
|
||||
|
@ -157,23 +159,12 @@ static void push_param(lua_State * L, char c, spllprm * param)
|
|||
}
|
||||
|
||||
/** callback to use lua for spell functions */
|
||||
static int lua_callspell(castorder * co)
|
||||
static int lua_callspell(castorder * co, const char *fname)
|
||||
{
|
||||
lua_State *L = (lua_State *)global.vm_state;
|
||||
const char *fname = co->sp->sname;
|
||||
unit *caster = co_get_caster(co);
|
||||
region * r = co_get_region(co);
|
||||
int result = -1;
|
||||
const char *hashpos = strchr(fname, '#');
|
||||
char fbuf[64];
|
||||
|
||||
if (hashpos != NULL) {
|
||||
ptrdiff_t len = hashpos - fname;
|
||||
assert(len < (ptrdiff_t) sizeof(fbuf));
|
||||
memcpy(fbuf, fname, len);
|
||||
fbuf[len] = '\0';
|
||||
fname = fbuf;
|
||||
}
|
||||
|
||||
lua_getglobal(L, fname);
|
||||
if (lua_isfunction(L, -1)) {
|
||||
|
@ -456,6 +447,7 @@ use_item_lua(unit *u, const item_type *itype, int amount, struct order *ord)
|
|||
return result;
|
||||
}
|
||||
|
||||
|
||||
/* compat code for old data files */
|
||||
static int caldera_read(trigger *t, struct gamedata *data)
|
||||
{
|
||||
|
@ -470,43 +462,24 @@ struct trigger_type tt_caldera = {
|
|||
caldera_read
|
||||
};
|
||||
|
||||
|
||||
int tolua_toid(lua_State * L, int idx, int def)
|
||||
{
|
||||
int no = 0;
|
||||
int type = lua_type(L, idx);
|
||||
if (type == LUA_TNUMBER) {
|
||||
no = (int)tolua_tonumber(L, idx, def);
|
||||
}
|
||||
else {
|
||||
const char *str = tolua_tostring(L, idx, NULL);
|
||||
no = str ? atoi36(str) : def;
|
||||
}
|
||||
return no;
|
||||
}
|
||||
|
||||
void register_tolua_helpers(void)
|
||||
{
|
||||
tt_register(&tt_caldera);
|
||||
at_register(&at_direction);
|
||||
at_register(&at_building_action);
|
||||
|
||||
register_function((pf_generic)lua_callspell, TOLUA_CAST "lua_castspell");
|
||||
register_function((pf_generic)lua_initfamiliar,
|
||||
TOLUA_CAST "lua_initfamiliar");
|
||||
register_function((pf_generic)lua_getresource,
|
||||
TOLUA_CAST "lua_getresource");
|
||||
register_function((pf_generic)lua_changeresource,
|
||||
TOLUA_CAST "lua_changeresource");
|
||||
register_function((pf_generic)lua_equipmentcallback,
|
||||
TOLUA_CAST "lua_equip");
|
||||
callbacks.cast_spell = lua_callspell;
|
||||
|
||||
register_function((pf_generic)lua_wage, TOLUA_CAST "lua_wage");
|
||||
register_function((pf_generic)lua_maintenance,
|
||||
TOLUA_CAST "lua_maintenance");
|
||||
register_function((pf_generic)lua_initfamiliar, "lua_initfamiliar");
|
||||
register_function((pf_generic)lua_getresource, "lua_getresource");
|
||||
register_function((pf_generic)lua_changeresource, "lua_changeresource");
|
||||
register_function((pf_generic)lua_equipmentcallback, "lua_equip");
|
||||
|
||||
register_function((pf_generic)lua_wage, "lua_wage");
|
||||
register_function((pf_generic)lua_maintenance, "lua_maintenance");
|
||||
|
||||
item_use_fun = use_item_lua;
|
||||
res_produce_fun = produce_resource_lua;
|
||||
res_limit_fun = limit_resource_lua;
|
||||
register_item_give(lua_giveitem, TOLUA_CAST "lua_giveitem");
|
||||
register_item_give(lua_giveitem, "lua_giveitem");
|
||||
}
|
||||
|
|
|
@ -15,8 +15,8 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
struct lua_State;
|
||||
|
||||
void register_tolua_helpers(void);
|
||||
int tolua_toid(struct lua_State *L, int idx, int def);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ alliance.test.c
|
|||
ally.test.c
|
||||
build.test.c
|
||||
building.test.c
|
||||
# callbacks.test.c
|
||||
command.test.c
|
||||
config.test.c
|
||||
# connection.test.c
|
||||
|
@ -38,6 +39,7 @@ alliance.c
|
|||
ally.c
|
||||
build.c
|
||||
building.c
|
||||
callbacks.c
|
||||
command.c
|
||||
config.c
|
||||
connection.c
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
#include <platform.h>
|
||||
#include "callbacks.h"
|
||||
|
||||
struct callbacks callbacks;
|
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
Copyright (c) 1998-2015, Enno Rehling <enno@eressea.de>
|
||||
Katja Zedel <katze@felidae.kn-bremen.de
|
||||
Christian Schlittchen <corwin@amber.kn-bremen.de>
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
**/
|
||||
|
||||
#ifndef H_KRNL_CALLBACKS_H
|
||||
#define H_KRNL_CALLBACKS_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct castorder;
|
||||
|
||||
extern struct callbacks {
|
||||
int (*cast_spell)(struct castorder *co, const char *fname);
|
||||
} callbacks;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* H_KRNL_CALLBACKS_H */
|
|
@ -594,9 +594,6 @@ static void json_spells(cJSON *json) {
|
|||
if (strcmp(item->string, "index") == 0) {
|
||||
continue;
|
||||
}
|
||||
else if (strcmp(item->string, "cast") == 0) {
|
||||
sp->cast_fun = (spell_f)get_function(item->valuestring);
|
||||
}
|
||||
else if (strcmp(item->string, "syntax") == 0) {
|
||||
sp->syntax = strdup(item->valuestring);
|
||||
}
|
||||
|
|
|
@ -33,7 +33,30 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
static critbit_tree cb_fumbles;
|
||||
|
||||
static critbit_tree cb_spell_fun;
|
||||
void add_spellcast(const char *sname, spell_f fun)
|
||||
{
|
||||
size_t len;
|
||||
char data[64];
|
||||
|
||||
len = cb_new_kv(sname, strlen(sname), &fun, sizeof(fun), data);
|
||||
assert(len <= sizeof(data));
|
||||
cb_insert(&cb_spell_fun, data, len);
|
||||
}
|
||||
|
||||
spell_f get_spellcast(const char *sname)
|
||||
{
|
||||
void * match;
|
||||
spell_f result = NULL;
|
||||
|
||||
if (cb_find_prefix(&cb_spell_fun, sname, strlen(sname) + 1, &match, 1, 0)) {
|
||||
cb_get_kv(match, &result, sizeof(result));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static critbit_tree cb_fumble_fun;
|
||||
void add_fumble(const char *sname, fumble_f fun)
|
||||
{
|
||||
size_t len;
|
||||
|
@ -41,7 +64,7 @@ void add_fumble(const char *sname, fumble_f fun)
|
|||
|
||||
len = cb_new_kv(sname, strlen(sname), &fun, sizeof(fun), data);
|
||||
assert(len <= sizeof(data));
|
||||
cb_insert(&cb_fumbles, data, len);
|
||||
cb_insert(&cb_fumble_fun, data, len);
|
||||
}
|
||||
|
||||
fumble_f get_fumble(const char *sname)
|
||||
|
@ -49,7 +72,7 @@ fumble_f get_fumble(const char *sname)
|
|||
void * match;
|
||||
fumble_f result = NULL;
|
||||
|
||||
if (cb_find_prefix(&cb_fumbles, sname, strlen(sname) + 1, &match, 1, 0)) {
|
||||
if (cb_find_prefix(&cb_fumble_fun, sname, strlen(sname) + 1, &match, 1, 0)) {
|
||||
cb_get_kv(match, &result, sizeof(result));
|
||||
}
|
||||
return result;
|
||||
|
@ -71,7 +94,8 @@ static void free_spell_cb(void *cbdata) {
|
|||
}
|
||||
|
||||
void free_spells(void) {
|
||||
cb_clear(&cb_fumbles);
|
||||
cb_clear(&cb_fumble_fun);
|
||||
cb_clear(&cb_spell_fun);
|
||||
cb_clear(&cb_spells);
|
||||
selist_foreach(spells, free_spell_cb);
|
||||
selist_free(spells);
|
||||
|
|
|
@ -40,7 +40,6 @@ extern "C" {
|
|||
int sptyp;
|
||||
int rank; /* Reihenfolge der Zauber */
|
||||
struct spell_component *components;
|
||||
spell_f cast_fun;
|
||||
} spell;
|
||||
|
||||
typedef struct spellref {
|
||||
|
@ -51,6 +50,9 @@ extern "C" {
|
|||
void add_fumble(const char *sname, fumble_f fun);
|
||||
fumble_f get_fumble(const char *sname);
|
||||
|
||||
void add_spellcast(const char *sname, spell_f fun);
|
||||
spell_f get_spellcast(const char *sname);
|
||||
|
||||
struct spellref *spellref_create(struct spell *sp, const char *name);
|
||||
void spellref_free(struct spellref *spref);
|
||||
struct spell *spellref_get(struct spellref *spref);
|
||||
|
|
|
@ -279,11 +279,8 @@ parse_function(xmlNodePtr node, pf_generic * funPtr, xmlChar ** namePtr)
|
|||
xmlChar *propValue = xmlGetProp(node, BAD_CAST "value");
|
||||
assert(propValue != NULL);
|
||||
fun = get_function((const char *)propValue);
|
||||
if (fun != NULL) {
|
||||
xmlFree(propValue);
|
||||
|
||||
propValue = xmlGetProp(node, BAD_CAST "name");
|
||||
}
|
||||
*namePtr = propValue;
|
||||
*funPtr = fun;
|
||||
return 0;
|
||||
|
@ -1311,7 +1308,6 @@ static int parse_spellbooks(xmlDocPtr doc)
|
|||
|
||||
static int parse_spells(xmlDocPtr doc)
|
||||
{
|
||||
pf_generic cast = 0;
|
||||
xmlXPathContextPtr xpath = xmlXPathNewContext(doc);
|
||||
xmlXPathObjectPtr spells;
|
||||
|
||||
|
@ -1386,44 +1382,9 @@ static int parse_spells(xmlDocPtr doc)
|
|||
sp->sptyp |= REGIONSPELL;
|
||||
|
||||
k = xml_ivalue(node, "combat", 0);
|
||||
if (k >= 0 && k <= 3)
|
||||
if (k >= 0 && k <= 3) {
|
||||
sp->sptyp |= modes[k];
|
||||
|
||||
/* reading eressea/spells/spell/function */
|
||||
|
||||
xpath->node = node;
|
||||
result = xmlXPathEvalExpression(BAD_CAST "function", xpath);
|
||||
|
||||
if (result->nodesetval->nodeNr == 0) {
|
||||
cast = get_function(sp->sname);
|
||||
if (!cast) {
|
||||
log_error("no spell cast function registered for '%s'\n", sp->sname);
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (k = 0; k != result->nodesetval->nodeNr; ++k) {
|
||||
xmlNodePtr node = result->nodesetval->nodeTab[k];
|
||||
pf_generic fun;
|
||||
|
||||
parse_function(node, &fun, &propValue);
|
||||
assert(propValue != NULL);
|
||||
if (strcmp((const char *)propValue, "cast") == 0) {
|
||||
if (fun) {
|
||||
cast = fun;
|
||||
}
|
||||
else {
|
||||
log_error("unknown function name '%s' for spell '%s'\n", (const char *)propValue, sp->sname);
|
||||
}
|
||||
}
|
||||
else {
|
||||
log_error("unknown function type '%s' for spell '%s'\n", (const char *)propValue, sp->sname);
|
||||
}
|
||||
xmlFree(propValue);
|
||||
}
|
||||
}
|
||||
sp->cast_fun = (spell_f)cast;
|
||||
xmlXPathFreeObject(result);
|
||||
|
||||
/* reading eressea/spells/spell/resource */
|
||||
xpath->node = node;
|
||||
result = xmlXPathEvalExpression(BAD_CAST "resource", xpath);
|
||||
|
|
22
src/magic.c
22
src/magic.c
|
@ -23,10 +23,12 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|||
|
||||
#include "skill.h"
|
||||
#include "study.h"
|
||||
#include "helpers.h"
|
||||
#include "laws.h"
|
||||
|
||||
#include <kernel/ally.h>
|
||||
#include <kernel/building.h>
|
||||
#include <kernel/callbacks.h>
|
||||
#include <kernel/curse.h>
|
||||
#include <kernel/faction.h>
|
||||
#include <kernel/item.h>
|
||||
|
@ -2996,8 +2998,26 @@ spell *unit_getspell(struct unit *u, const char *name, const struct locale * lan
|
|||
|
||||
int cast_spell(struct castorder *co)
|
||||
{
|
||||
const char *fname = co->sp->sname;
|
||||
const char *hashpos = strchr(fname, '#');
|
||||
char fbuf[64];
|
||||
spell_f fun;
|
||||
|
||||
const spell *sp = co->sp;
|
||||
return sp->cast_fun(co);
|
||||
if (hashpos != NULL) {
|
||||
ptrdiff_t len = hashpos - fname;
|
||||
assert(len < (ptrdiff_t) sizeof(fbuf));
|
||||
memcpy(fbuf, fname, len);
|
||||
fbuf[len] = '\0';
|
||||
fname = fbuf;
|
||||
}
|
||||
|
||||
fun = get_spellcast(sp->sname);
|
||||
if (!fun) {
|
||||
log_warning("no spell function for %s, try callback", sp->sname);
|
||||
return callbacks.cast_spell(co, fname);
|
||||
}
|
||||
return fun(co);
|
||||
}
|
||||
|
||||
static critbit_tree cb_spellbooks;
|
||||
|
|
|
@ -380,8 +380,8 @@ void test_multi_cast(CuTest *tc) {
|
|||
struct locale * lang;
|
||||
|
||||
test_setup();
|
||||
add_spellcast("fireball", cast_fireball);
|
||||
sp = create_spell("fireball");
|
||||
sp->cast_fun = cast_fireball;
|
||||
CuAssertPtrEquals(tc, sp, find_spell("fireball"));
|
||||
|
||||
lang = test_create_locale();
|
||||
|
|
219
src/spells.c
219
src/spells.c
|
@ -1104,8 +1104,9 @@ static int sp_blessedharvest(castorder * co)
|
|||
|
||||
if (create_curse(mage, &r->attribs, ct_find("blessedharvest"), co->force,
|
||||
duration, 1.0, 0)) {
|
||||
message *seen = msg_message("harvest_effect", "mage", mage);
|
||||
message *unseen = msg_message("harvest_effect", "mage", NULL);
|
||||
const char * effect = co->sp->sname[0]=='b' ? "harvest_effect" : "raindance_effect";
|
||||
message *seen = msg_message(effect, "mage", mage);
|
||||
message *unseen = msg_message(effect, "mage", NULL);
|
||||
report_effect(r, mage, seen, unseen);
|
||||
msg_release(seen);
|
||||
msg_release(unseen);
|
||||
|
@ -2930,10 +2931,6 @@ static int dc_read_compat(struct attrib *a, void *target, gamedata *data)
|
|||
}
|
||||
return AT_READ_FAIL; /* we don't care for the attribute. */
|
||||
}
|
||||
|
||||
attrib_type at_deathcloud_compat = {
|
||||
"zauber_todeswolke", NULL, NULL, NULL, NULL, dc_read_compat
|
||||
};
|
||||
#endif
|
||||
|
||||
/* ------------------------------------------------------------- */
|
||||
|
@ -6499,6 +6496,99 @@ int sp_becomewyrm(castorder * co)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------- */
|
||||
/* Name: Plappermaul
|
||||
* Stufe: 4
|
||||
* Gebiet: Cerddor
|
||||
* Kategorie: Einheit
|
||||
*
|
||||
* Wirkung:
|
||||
* Einheit ausspionieren. Gibt auch Zauber und Kampfstatus aus. Wirkt
|
||||
* gegen Magieresistenz. Ist diese zu hoch, so wird der Zauber entdeckt
|
||||
* (Meldung) und der Zauberer erhaelt nur die Talente, nicht die Werte
|
||||
* der Einheit und auch keine Zauber.
|
||||
*
|
||||
* Flag:
|
||||
* (UNITSPELL | TESTCANSEE)
|
||||
*/
|
||||
static int sp_babbler(castorder * co)
|
||||
{
|
||||
unit *target;
|
||||
region *r = co_get_region(co);
|
||||
unit *mage = co->magician.u;
|
||||
int cast_level = co->level;
|
||||
spellparameter *pa = co->par;
|
||||
message *msg;
|
||||
|
||||
/* wenn kein Ziel gefunden, Zauber abbrechen */
|
||||
if (pa->param[0]->flag == TARGET_NOTFOUND)
|
||||
return 0;
|
||||
|
||||
target = pa->param[0]->data.u;
|
||||
|
||||
if (target->faction == mage->faction) {
|
||||
/* Die Einheit ist eine der unsrigen */
|
||||
cmistake(mage, co->order, 45, MSG_MAGIC);
|
||||
}
|
||||
|
||||
/* Magieresistenz Unit */
|
||||
if (target_resists_magic(mage, target, TYP_UNIT, 0)) {
|
||||
spy_message(5, mage, target);
|
||||
msg = msg_message("babbler_resist", "unit mage", target, mage);
|
||||
}
|
||||
else {
|
||||
spy_message(100, mage, target);
|
||||
msg = msg_message("babbler_effect", "unit", target);
|
||||
}
|
||||
r_addmessage(r, target->faction, msg);
|
||||
msg_release(msg);
|
||||
return cast_level;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------- */
|
||||
/* Name: Traumdeuten
|
||||
* Stufe: 7
|
||||
* Kategorie: Einheit
|
||||
*
|
||||
* Wirkung:
|
||||
* Wirkt gegen Magieresistenz. Spioniert die Einheit aus. Gibt alle
|
||||
* Gegenstaende, Talente mit Stufe, Zauber und Kampfstatus an.
|
||||
*
|
||||
* Magieresistenz hier pruefen, wegen Fehlermeldung
|
||||
*
|
||||
* Flag:
|
||||
* (UNITSPELL)
|
||||
*/
|
||||
static int sp_readmind(castorder * co)
|
||||
{
|
||||
unit *target;
|
||||
unit *mage = co->magician.u;
|
||||
int cast_level = co->level;
|
||||
spellparameter *pa = co->par;
|
||||
|
||||
/* wenn kein Ziel gefunden, Zauber abbrechen */
|
||||
if (pa->param[0]->flag == TARGET_NOTFOUND)
|
||||
return 0;
|
||||
|
||||
target = pa->param[0]->data.u;
|
||||
|
||||
if (target->faction == mage->faction) {
|
||||
/* Die Einheit ist eine der unsrigen */
|
||||
cmistake(mage, co->order, 45, MSG_MAGIC);
|
||||
}
|
||||
|
||||
/* Magieresistenz Unit */
|
||||
if (target_resists_magic(mage, target, TYP_UNIT, 0)) {
|
||||
cmistake(mage, co->order, 180, MSG_MAGIC);
|
||||
/* "Fuehlt sich beobachtet" */
|
||||
ADDMSG(&target->faction->msgs, msg_message("stealdetect", "unit", target));
|
||||
return 0;
|
||||
}
|
||||
spy_message(2, mage, target);
|
||||
|
||||
return cast_level;
|
||||
}
|
||||
|
||||
typedef struct spelldata {
|
||||
const char *sname;
|
||||
spell_f cast;
|
||||
|
@ -6656,18 +6746,24 @@ static spelldata spell_functions[] = {
|
|||
{ "firestorm", sp_immolation, 0 },
|
||||
{ "coldfront", sp_immolation, 0 },
|
||||
{ "acidrain", sp_immolation, 0 },
|
||||
{ "blabbermouth", sp_babbler, NULL },
|
||||
{ "summon_familiar", sp_summon_familiar, NULL },
|
||||
{ "meteor_rain", sp_kampfzauber, NULL },
|
||||
{ "fireball", sp_kampfzauber, NULL },
|
||||
{ "hail", sp_kampfzauber, NULL },
|
||||
{ "readmind", sp_readmind, NULL },
|
||||
{ "blessedharvest", sp_blessedharvest, NULL },
|
||||
{ "raindance", sp_blessedharvest, NULL },
|
||||
{ 0, 0, 0 }
|
||||
};
|
||||
|
||||
static void register_spelldata(void)
|
||||
{
|
||||
int i;
|
||||
char zText[32];
|
||||
strcpy(zText, "fumble_");
|
||||
for (i = 0; spell_functions[i].sname; ++i) {
|
||||
spelldata *data = spell_functions + i;
|
||||
if (data->cast) {
|
||||
register_function((pf_generic)data->cast, data->sname);
|
||||
add_spellcast(data->sname, data->cast);
|
||||
}
|
||||
if (data->fumble) {
|
||||
add_fumble(data->sname, data->fumble);
|
||||
|
@ -6675,117 +6771,18 @@ static void register_spelldata(void)
|
|||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------- */
|
||||
/* Name: Plappermaul
|
||||
* Stufe: 4
|
||||
* Gebiet: Cerddor
|
||||
* Kategorie: Einheit
|
||||
*
|
||||
* Wirkung:
|
||||
* Einheit ausspionieren. Gibt auch Zauber und Kampfstatus aus. Wirkt
|
||||
* gegen Magieresistenz. Ist diese zu hoch, so wird der Zauber entdeckt
|
||||
* (Meldung) und der Zauberer erhaelt nur die Talente, nicht die Werte
|
||||
* der Einheit und auch keine Zauber.
|
||||
*
|
||||
* Flag:
|
||||
* (UNITSPELL | TESTCANSEE)
|
||||
*/
|
||||
static int sp_babbler(castorder * co)
|
||||
{
|
||||
unit *target;
|
||||
region *r = co_get_region(co);
|
||||
unit *mage = co->magician.u;
|
||||
int cast_level = co->level;
|
||||
spellparameter *pa = co->par;
|
||||
message *msg;
|
||||
|
||||
/* wenn kein Ziel gefunden, Zauber abbrechen */
|
||||
if (pa->param[0]->flag == TARGET_NOTFOUND)
|
||||
return 0;
|
||||
|
||||
target = pa->param[0]->data.u;
|
||||
|
||||
if (target->faction == mage->faction) {
|
||||
/* Die Einheit ist eine der unsrigen */
|
||||
cmistake(mage, co->order, 45, MSG_MAGIC);
|
||||
}
|
||||
|
||||
/* Magieresistenz Unit */
|
||||
if (target_resists_magic(mage, target, TYP_UNIT, 0)) {
|
||||
spy_message(5, mage, target);
|
||||
msg = msg_message("babbler_resist", "unit mage", target, mage);
|
||||
}
|
||||
else {
|
||||
spy_message(100, mage, target);
|
||||
msg = msg_message("babbler_effect", "unit", target);
|
||||
}
|
||||
r_addmessage(r, target->faction, msg);
|
||||
msg_release(msg);
|
||||
return cast_level;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------- */
|
||||
/* Name: Traumdeuten
|
||||
* Stufe: 7
|
||||
* Kategorie: Einheit
|
||||
*
|
||||
* Wirkung:
|
||||
* Wirkt gegen Magieresistenz. Spioniert die Einheit aus. Gibt alle
|
||||
* Gegenstaende, Talente mit Stufe, Zauber und Kampfstatus an.
|
||||
*
|
||||
* Magieresistenz hier pruefen, wegen Fehlermeldung
|
||||
*
|
||||
* Flag:
|
||||
* (UNITSPELL)
|
||||
*/
|
||||
static int sp_readmind(castorder * co)
|
||||
{
|
||||
unit *target;
|
||||
unit *mage = co->magician.u;
|
||||
int cast_level = co->level;
|
||||
spellparameter *pa = co->par;
|
||||
|
||||
/* wenn kein Ziel gefunden, Zauber abbrechen */
|
||||
if (pa->param[0]->flag == TARGET_NOTFOUND)
|
||||
return 0;
|
||||
|
||||
target = pa->param[0]->data.u;
|
||||
|
||||
if (target->faction == mage->faction) {
|
||||
/* Die Einheit ist eine der unsrigen */
|
||||
cmistake(mage, co->order, 45, MSG_MAGIC);
|
||||
}
|
||||
|
||||
/* Magieresistenz Unit */
|
||||
if (target_resists_magic(mage, target, TYP_UNIT, 0)) {
|
||||
cmistake(mage, co->order, 180, MSG_MAGIC);
|
||||
/* "Fuehlt sich beobachtet" */
|
||||
ADDMSG(&target->faction->msgs, msg_message("stealdetect", "unit", target));
|
||||
return 0;
|
||||
}
|
||||
spy_message(2, mage, target);
|
||||
|
||||
return cast_level;
|
||||
}
|
||||
|
||||
void register_magicresistance(void);
|
||||
|
||||
void register_spells(void)
|
||||
{
|
||||
register_borders();
|
||||
|
||||
at_register(&at_deathcloud_compat);
|
||||
#ifdef COMPAT_DEATHCLOUD
|
||||
at_deprecate("zauber_todeswolke", dc_read_compat);
|
||||
#endif
|
||||
|
||||
/* init_firewall(); */
|
||||
ct_register(&ct_firewall);
|
||||
ct_register(&ct_deathcloud);
|
||||
|
||||
register_function((pf_generic)sp_blessedharvest, "cast_blessedharvest");
|
||||
register_function((pf_generic)sp_summon_familiar, "cast_familiar");
|
||||
register_function((pf_generic)sp_babbler, "cast_babbler");
|
||||
register_function((pf_generic)sp_readmind, "cast_readmind");
|
||||
register_function((pf_generic)sp_kampfzauber, "combat_spell");
|
||||
|
||||
register_spelldata();
|
||||
|
||||
register_unitcurse();
|
||||
|
|
|
@ -27,6 +27,7 @@ extern "C" {
|
|||
struct unit;
|
||||
struct message;
|
||||
|
||||
void register_magicresistance(void);
|
||||
void register_spells(void);
|
||||
void set_spelldata(struct spell *sp);
|
||||
|
||||
|
|
Loading…
Reference in New Issue