AddAction()

FUNKTION

varargs void AddAction(mixed fun, mixed cmd, int flag, int lvl);

DEFINIERT IN

/std/player/command.c

ARGUMENTE

fun

zu rufende Methode im Spieler oder eine Closure

cmd

ausloesendes Kommandoverb

flag

unscharf ausfuehren

lvl

ab welchem (Magierlevel) funktioniert das Kommando

BESCHREIBUNG

Vorweg: Da es keine (risikolose) Moeglichkeit gibt, ein so definiertes Kommando auch wieder zu entfernen, wird von der Verwendung eher abgeraten. Es sei denn, ihr wisst, dass euer Kommando nicht wieder (ohne ende/reboot) entfernt werden soll.

Dem Spieler wird ein neues Kommando definiert. Dieses kann eine Methode in ihm sein, so wie bei allen Spielerkommandos ueblich, kann aber auch eine Closure (Lfun-Closure oder Lambda) enthalten.

Mittels „flag“ kann man die Kommandoerkennung unscharf halten, d.h. wie bei AddCmd(L) und add_action(E) wird ein ‚cmd‘ bei ‚flag = 1‘ auch schon von Praefix-Strings (hier ohne Leerzeichen) getriggert: AddAction([…], „muh“, 1, 0) wird zB auch von ‚muhtens‘ oder ‚muh4‘ ausgeloest.

Mit „lvl“ begrenzt man die Ausfuehrbarkeit. Spieler haben ein Magierlevel von 0, Seher von 1.

Das Kommando wird in P_LOCALCMDS eingetragen. Diese Property wird nicht gespeichert! Effektiv kann man mit AddAction() ein kommando- gebendes Objekt im Spieler einsparen.

BEMERKUNGEN

  • es gibt _noch_ kein RemoveAction! Per Hand in P_LOCALCMDS editieren kann zu ernsten Fehlern fuehren.

  • echte Spielerkommandos kann man damit _nicht_ ueberschreiben, ein AddAction(…,“sag“,1,0); funktioniert nicht

  • ein generelles AddAction(…,““,1,0); geht nicht

BEISPIELE

...
this_player()->AddAction(symbol_function("zeige_mysterium",
                                         find_object(".../mystzeiger")),
                         "knorfula",0,0);
write(break_string("Wann immer du jetzt das Kommando \"knorfula\" "
                   "eingibst, werden dir Mysterien enthuellt!",78));
...
// im Objekt "knorfula" ...
int zeige_mysterium(string str) {
  string myst;
  myst=environment(TP)->QueryMysterium(str);
  if(myst) {
    write("Du hast ein Mysterium entdeckt!\n");
    write(break_string(myst,78));
    say(break_string(
           TP->Name(WER)+" scheint nach kurzer Konzentration etwas "
           "entdeckt zu haben!",78));
  } else {
    write(break_string(
           "Leider entdeckst du trotz deiner magischen Faehigkeit "
           "kein Mysterium in deiner Umgebung.",78));
    say(break_string(
           TP->Name(WER)+" konzentriert sich sichtbar, sieht dann "
           "jedoch etwas enttaeuscht aus.",78));
  }
  return 1;
}

SIEHE AUCH

Properties:

P_LOCALCMDS

Fehlermeldungen:

../efun/notify_fail, _notify_fail()

Argumentstring:

../efun/query_verb, _unparsed_args()

Sonstiges:

replace_personal(), ../efun/enable_commands

Alternativen:

AddCmd(), ../efun/add_action

  1. Maerz 2004 Gloinson