Beispieldateien

Modifizieren eines Kampf-Ereignisses anhand eines Bogens

----------


// Ein Bogen
// ---------
// Er gibt 3 verschiedene Schadensmeldungen aus und macht 3 verschiedene Schadenstypen
// Beispiel fuer ET_ATTACK

inherit "weapon";

#include <combat.h>
#include <properties.h>
#include <events.h>
#include <living/combat.h>

int zaehler = 0;
int ladung = 0; // wird geaendert durch pfeileinlegen
void pfeilschaden(mixed data, string type, int prio);

void create()
{
  if (!clonep()) return;
  ::create();
  AddId(({"bogen"}), ({"boegen"}));
  SetProp(P_NAME, "Langbogen");
  SetProp(P_PLURAL, "Langboegen");
  SetProp(P_GENDER, MALE);
  SetProp(P_WC, 60);
  SetProp(P_WEAPON_TYPE, WT_CLUB);
  SetProp(P_VALUE, 840);
  SetProp(P_WEIGHT, 800);
  SetProp(P_BULKINESS, 100);
  SetProp(P_DAM_TYPE, ({DT_BLUDGEON}));
  SetProp(P_NR_HANDS, 2);
  SetProp(P_LONG,
    "Ein schmaler Langbogen. Mit der richtigen Munition wird er eine maechtige Waffe sein.");
  SetProp(P_INFO,
    "Welch Schrecken verbreitete sich unter den Gegnern, als sich die Pfeile in der Luft ploetzlich "
    "in magisches Feuer verwandelten ...");

  listen_event(ET_ATTACK, EPRIO_MODIFY, #'pfeilschaden);
}

void pfeilschaden(mixed data, string type, int prio)
{
  if (!data[E_ACTOR] || QueryWieldedBy() != data[E_ACTOR]) return;
  ++ zaehler;
  if (!ladung)
  {
    data[E_COMBAT_DAM_TYPES] = ({DT_BLUDGEON});
    ladung = 1; // "magisch aufladen" fuer Testzwecke
    return;
  }

  ladung = 0; // Pfeil verschiessen und entladen
  if (zaehler == 5)
  {
    zaehler = 0;
    data[E_COMBAT_DAM_TYPES] = ({DT_MAGIC, DT_FIRE});
    data[E_COMBAT_DAMAGE] += 150; // 150 Zusatzschaden, magischer Feuerschaden
    data[E_COMBAT_MSGS] = ({"", "Du schiesst einen magischen Feuerpfeil@@adverb@@ nach@@ wem@@.",
      "@@Name@@ schiesst einen magischen Feuerpfeil@@adverb@@ nach @@Dir@@.",
      "@@Name@@ schiesst einen magischen Feuerpfeil@@adverb@@ nach@@ wem@@."});
    return;
  }
  data[E_COMBAT_MSGS] = ({"", "Du schiesst einen Pfeil@@adverb@@ nach@@ wem@@.",
    "@@Name@@ schiesst einen Pfeil@@adverb@@ nach @@Dir@@.",
    "@@Name@@ schiesst einen Pfeil@@adverb@@ nach@@ wem@@."});
  data[E_COMBAT_DAMAGE] += 100; // 100 Zusatzschaden
  data[E_COMBAT_DAM_TYPES] = ({DT_PIERCE}); // Pfeilschaden
  return;
}