Noetige Files fuer die Abentuerergilde.
Der Inhalt von /gilden/files.abenteurer wird fuer die vollstaendige
Funktionstuechtigkeit der Abenteurergilde benoetigt.
diff --git a/gilden/files.abenteurer/std_abenteurer.c b/gilden/files.abenteurer/std_abenteurer.c
new file mode 100644
index 0000000..9214ff5
--- /dev/null
+++ b/gilden/files.abenteurer/std_abenteurer.c
@@ -0,0 +1,190 @@
+/* Humni, 2005-07-01 : habbich mal gebaut */
+
+/* Verwendung: 1. Erben
+ 2. Entweder die Einzelfunktionen aufrufen oder einfach
+ BuildUp(int spielerlevel) aufrufen und danach noch
+ bei Bedarf modifizieren.
+*/
+
+inherit "/std/npc";
+
+#include <properties.h>
+#include <language.h>
+#include <new_skills.h>
+#include <combat.h>
+
+// In das Kommando-Array kommen die ganzen Befehle, die der NPC kann.
+string* attack_kommandos;
+string* defend_kommandos;
+mapping row_kommandos;
+
+
+create()
+{
+ ::create();
+
+ attack_kommandos=({});
+ defend_kommandos=({});
+ row_kommandos=([]);
+ SetProp(P_GUILD,"abenteurer");
+ seteuid(getuid(this_object()));
+}
+
+/* Mal als simpel-Methode eingebaut, vielleicht kann das ja irgend ein NPC
+ auch noch so brauchen.*/
+AddAttackCommand(string str)
+{
+ attack_kommandos+=({str});
+}
+
+AddDefendCommand(string str)
+{
+ defend_kommandos+=({str});
+}
+
+AddRowCommand(int row, string str)
+{
+ string * com;
+ if (!pointerp(row_kommandos[row]))
+ {
+ row_kommandos+=([row:({str})]);
+ }
+ else
+ {
+ com=row_kommandos[row];
+ com+=({str});
+ row_kommandos+=([row:com]);
+ }
+}
+
+/* Sehr simpel gemacht, gebe ich gerne zu.*/
+AddPreferedRow(int row)
+{
+ AddDefendCommand(sprintf("team reihe %d",row));
+}
+
+/* BuildSkills: Baut die Skills im NPC auf.
+
+ Idee: Level genauso gross wie Mindeslevel fuer Spell: Ability 1000. Danach pro Level>Mindestlevel +1000, bis zu 10000.
+
+ Kampfspells: Saeurestrahl, Feuerball, Schnell, Ausweichen, Kampfschrei.
+ */
+BuildSkills(int level)
+{
+ int val;
+ if (level>=11)
+ {
+ val=((level>21)?10000:(level-10)*1000);
+ ModifySkill("pfeil",val);
+ AddAttackCommand("pfeil");
+ AddAttackCommand("pfeil");
+ AddRowCommand(2,"pfeil");
+ AddRowCommand(2,"pfeil");
+ }
+ if (level>=15)
+ {
+ val=((level>25)?10000:(level-14)*1000);
+ ModifySkill("feuerball",val);
+ AddAttackCommand("feuerball");
+ AddAttackCommand("feuerball");
+ AddRowCommand(3,"feuerball");
+ AddRowCommand(3,"feuerball");
+ AddRowCommand(2,"feuerball");
+ AddRowCommand(3,"feuerball");
+ AddRowCommand(4,"feuerball");
+ }
+ if (level>=30)
+ {
+ val=((level>40)?10000:(level-30)*1000);
+ ModifySkill("saeurestrahl",val);
+ AddAttackCommand("saeurestrahl");
+ AddAttackCommand("saeurestrahl");
+ AddRowCommand(4,"saeurestrahl");
+ AddRowCommand(4,"saeurestrahl");
+ AddRowCommand(4,"saeurestrahl");
+ AddRowCommand(4,"saeurestrahl");
+ AddRowCommand(3,"saeurestrahl");
+ }
+ if (level>=17)
+ {
+ val=((level>27)?10000:(level-16)*1000);
+ ModifySkill("schnell",val);
+ AddRowCommand(1,"schnell");
+ AddRowCommand(1,"schnell");
+ }
+ if (level>=12)
+ {
+ val=((level>27)?10000:(level-16)*1000);
+ ModifySkill("ausweichen",val);
+ AddRowCommand(1,"ausweichen");
+ AddRowCommand(1,"ausweichen");
+ AddRowCommand(1,"ausweichen");
+ }
+ if (level>=13)
+ {
+ val=((level>13)?10000:(level-12)*1000);
+ ModifySkill("kampfschrei",val);
+ AddAttackCommand("kampfschrei");
+ AddAttackCommand("kampfschrei");
+ }
+
+ ModifySkill(SK_FIGHT,([SI_SKILLABILITY:((level>50)?10000:level*200)]),150,"ANY");
+}
+
+//Nachbau...geklaut aus /std/player/skills.c
+
+StdSkill_Fight(object me, string sname, mapping sinfo)
+{
+ int val, w;
+ object enemy;
+
+ if (!mappingp(sinfo) || !objectp(sinfo[P_WEAPON]))
+ return 0;
+
+ w = ([WT_KNIFE : 8,
+ WT_SWORD : 5,
+ WT_AXE : 4,
+ WT_SPEAR : 6,
+ WT_CLUB : 1,
+ WT_WHIP : 9,
+ WT_STAFF : 7])[sinfo[P_WEAPON]->QueryProp(P_WEAPON_TYPE)];
+
+
+ val = sinfo[SI_SKILLABILITY]*(sinfo[P_WEAPON]->QueryProp(P_WC)*
+ (w*QueryAttribute(A_DEX)+
+ (10-w)*QueryAttribute(A_STR))/800)
+ /MAX_ABILITY;
+
+ sinfo[SI_SKILLDAMAGE]+=val;
+
+ //Naja, gut. Lernen hab ich nicht uebernommen, das tut der NPC nicht.
+
+}
+
+void SpellAttack(object enemy)
+{
+ int row;
+ string* cmds;
+ row=PresentPosition();
+ cmds=attack_kommandos;
+ if (pointerp(row_kommandos[row]))
+ cmds+=row_kommandos[row];
+ if (sizeof(cmds)>0)
+ command(cmds[random(sizeof(cmds))]);
+ ::SpellAttack(enemy);
+}
+
+int Defend(int dam, mixed dam_type, mixed spell, object enemy)
+{
+ if (sizeof(defend_kommandos)>0)
+ command(defend_kommandos[random(sizeof(defend_kommandos))]);
+ ::Defend(dam,dam_type,spell,enemy);
+}
+
+BuildUp(int spielerlevel)
+{
+ // Sehr simpel, zugegeben.
+ create_default_npc(spielerlevel);
+ BuildSkills(spielerlevel);
+ AddPreferedRow(spielerlevel>30?4:(spielerlevel>15?3:(spielerlevel>11?2:1)));
+}