SetAttackChats()

FUNKTION

void SetAttackChats(int chance, mixed strs);

DEFINIERT IN

/std/npc/chat.c

ARGUMENTE

int chance
Prozentuale Wahrscheinlichkeit einer Ausgabe
mixed strs
Array mit den verschiedenen Moeglichkeiten der Monsterchats

BESCHREIBUNG

Der NPC gibt mit der Wahrscheinlichkeit <chance> waehrend des Kampfes pro Heartbeat einen zufaellig gewaehlten Text aus dem Array <strs> in den Raum aus. Dabei wird per Default send_room() ohne erneutes Umbrechen mit den Messagetypen MT_LOOK|MT_LISTEN|MT_FEEL|MT_SMELL verwendet.

Die einzelnen Arrayelemente koennen:

  • Strings sein
  • Closures sein, deren Rueckgabe ausgegeben wird und die zusaetzlich einen aenderbaren und in send_room() verwendeten ‘msg_typ’ per Referenz uebergeben bekommen
  • Arrays mit der Struktur ({<string|closure msg >, <int msg_typ>}) sein, fuer die obige Regeln auf ‘msg’ angewendet werden und bei denen ‘msg_typ’ im send_room() verwendet wird

Fuer keine Ausgabe muss man einen Leerstring “” zurueckgeben oder verwenden. In allen Funktionen ist this_player() das Monster selbst. Normalerweise muss man die Nachrichten selbst umbrechen, ausser man uebergibt die Message-Typen explizit und uebergibt kein MSG_DONT_WRAP.

BEMERKUNGEN

  • ausserhalb des Kampf werden keine AttackChats ausgegeben, man muss dann SetChats() verwenden
  • die strings werden (noch) durch process_string() geschickt, dieses sollte man aber nicht mehr verwenden
  • ‘chance’ gilt sowohl fuer Attack- als auch normale Chats
  • ‘chance’ wird in der Property P_CHAT_CHANCE abgelegt. Um einen NPC voruebergehend ‘stillzulegen’, kann man P_CHAT_CHANCE auf 0 setzen
  • Spieler koennen P_CHAT_CHANCE temporaer auf 0 setzen (‘stillen’)
  • NPC haben bei Abwesenheit von Spielern in der Regel keinen Heartbeat, weswegen dann auch die Chats ausgeschaltet sind
  • send_room() bekommt immer MSG_DONT_STORE|MSG_DONT_BUFFER uebergeben

Man kann AttackChats nutzen, um Monsterspells zu realisieren. Besser ist es aber, dafuer ‘AddSpell’ zu benutzen, ausser man moechte zB die Spielerfaehigkeit des Abschaltens der Chats verwenden.

BEISPIELE

protected string knirschschrei(int msg_typ);

SetAttackChats( 20,
 ({"Der Ork tritt Dir in den Hintern.\n",
   ({"Der Ork bruellt: Lebend kommst Du hier nicht raus!\n", MT_LISTEN}),
   ({"Der Ork blutet schon aus mehreren Wunden.\n", MT_LOOK}),
   #'knirschschrei}));

protected string knirsch(int msg_typ) {
  object helm = this_player()->QueryArmourByType(AT_HELMET);
  if (objectp(helm)) {
    // AC nur dann senken, wenn sie nicht schon 0 ist.
    if (helm->QueryProp(P_AC)>0) {
      helm->Damage(1);
      msg_typ = MT_LISTEN|MT_FEEL;
      return ("Der Ork schreit dich so laut an, dass dabei "+
              helm->QueryOwn(WER)+" "+
              helm->name(RAW)+" beschaedigt wird.");
    }
  }
  return ""; // keine Meldung
}

SIEHE AUCH

  1. April 2017 Gloinson