| P_SENSITIVE |
| *********** |
| |
| |
| NAME |
| ==== |
| |
| P_SENSITIVE "sensitive" |
| |
| |
| DEFINIERT IN |
| ============ |
| |
| /sys/thing/moving.h |
| |
| |
| BESCHREIBUNG |
| ============ |
| |
| Diese Property kann in Objekten gesetzt werden, die auf bestimmte |
| Schadensarten empfindlich reagieren sollen. Moegliche Anwendungsfaelle: |
| - Das Lebewesen, in dessen Inventar sich ein Objekt befindet, erleidet |
| einen Angriff mit der fraglichen Schadensart (Beispiel: eine |
| Pusteblume, die bei Angriff mit Luftschaden auseinanderfaellt). |
| - Zwei Objekte treffen im gleichen Environment aufeinander, wobei |
| eines empfindlich auf eine Schadensart reagiert, und das zweite diese |
| Schadensart mitbringt, d.h. die Empfindlichkeit ausloesen kann. |
| (Beispiel: ein feuerempfindlicher Postsack wird angesengt, wenn eine |
| brennende Fackel ins gleiche Inventar kommt.) |
| Das Ausloesen dieser Empfindlichkeit ist unabhaengig davon, welches |
| Objekt zuerst da war. |
| |
| Die Property enthaelt ein Array aus Arrays: |
| ({<sensprops_1>, <sensprops_2>, ..., <sensprops_n>}) |
| |
| |
| |
| wobei jeder Eintrag <sensprops> jeweils folgende Struktur hat: |
| ({string list_key, string damtype, int treshold, mixed options }) |
| |
| |
| |
| Die Eintraege haben dabei folgende Bedeutung: |
| |
| |
| |
| list_key: Kann einen von folgenden drei Werten annehmen |
| 1) SENSITIVE_INVENTORY, passive Eigenschaft; zeigt an, dass das |
| Objekt empfindlich auf aktive Objekte reagiert, die in das |
| Inventory des Containers hineinbewegt werden |
| 2) SENSITIVE_ATTACK, passive Eigenschaft; zeigt an, dass das |
| Objekt empfindlich auf aeussere Einfluesse bzw. Angriffe |
| auf ein Lebewesen reagiert, in dessen Inventar es sich befindet |
| 3) SENSITIVE_INVENTORY_TRIGGER, aktive Eigenschaft; zeigt an, dass |
| das Objekt eine Ausstrahlung auf andere Objekte im Inventar |
| hat. Wird ausgeloest, wenn das Objekt ins Inventar hineinbewegt |
| wird. |
| damtype: eine Schadensart (DT_FIRE, DT_WATER, ...) |
| treshold: hat zwei Bedeutungen abhaengig von dem Wert in list_key: |
| 1) Fuer Objekte mit SENSITIVE_INVENTORY oder SENSITIVE_ATTCK ist |
| dies der Schadenswert, ab dem das Objekt benachrichtigt werden |
| soll. |
| Hier wird ein Wert in "Defend-Einheiten" erwartet, d.h. das |
| Zehnfache dessen, was am Ende in LP abgezogen wuerde. |
| 2) Fuer Objekte mit SENSITIVE_INVENTORY_TRIGGER ist dies der |
| Schadenswert, mit dem das Objekt andere bereits im Inventar |
| des Containers befindliche Objekte beeinflusst, die eine |
| entsprechende Empfindlichkeit gesetzt haben |
| options: Optionale Daten, die der programmierende Magier selbst |
| definieren kann. Werden an die in den betroffenen Objekten |
| aufgerufenen Funktionen durchgereicht. |
| |
| Ein SENSITIVE_ATTACK-Objekt, dessen Trigger-Bedingungen erfuellt sind, |
| wird durch folgenden Funktionsaufruf darueber informiert: |
| trigger_sensitive_attack(object enemy, string damtype, int damage, |
| mixed spell, mixed options) |
| |
| |
| |
| Ein SENSITIVE_INVENTORY-Objekt, dessen Trigger-Bedingungen erfuellt sind, |
| wird durch folgenden Funktionsaufruf darueber informiert: |
| trigger_sensitive_inv(object whodid, string damtype, int threshold, |
| mixed options, mixed options) |
| |
| Die beiden Funktionen muessen selbst ge-/ueberschrieben werden. |
| |
| |
| BEMERKUNGEN |
| =========== |
| |
| 1. P_SENSITIVE-Objekte kosten Rechenzeit bei jedem Angriff oder jedem |
| move() - daher bitte sparsam verwenden |
| 2. Ist P_SENSITIVE nicht statisch, sondern wird es situationsabhaengig |
| geaendert, muss man das environment() jeweils selbst ueber seine |
| neue Empfindlichkeit benachrichtigen. Dies geschieht mit den |
| Funktionen RemoveSensitiveObject() bzw.InsertSensitiveObject(), |
| siehe deren Manpages. |
| |
| |
| BEISPIEL |
| ======== |
| |
| Beispiel 1: |
| Beispielcode eines Objektes mit SENSITIVE_ATTACK und SENSITIVE_INVENTORY |
| siehe hier: /doc/beispiele/testobjekte/attack_busy_sensitive_testobj.c |
| |
| Beispiel 2: |
| Ein Eiszapfen, der bei Feuerangriffen oder bei heissen Gegenstaenden im |
| gemeinsamen Environment zerschmelzen soll: |
| |
| void create() { |
| SetProp( P_SENSITIVE, ({ ({SENSITIVE_ATTACK, DT_FIRE, 100}), |
| ({SENSITIVE_INVENTORY, DT_FIRE, 100}) }) ); |
| [...] |
| } |
| |
| varargs void trigger_sensitive_attack() { |
| remove(); |
| } |
| |
| varargs void trigger_sensitive_inv() { |
| call_out("remove",0); // verzoegert, wegen move() |
| } |
| |
| varargs int remove(int silent) { |
| if(!silent) { |
| object room = all_environment(this_object())[<1]; |
| tell_room(room, Name()+" zerschmilzt.\n"); |
| } |
| return ::remove(); |
| } |
| |
| - wird eine Fackel mit |
| SetProp(P_SENSITIVE,({({SENSITIVE_INVENTORY_TRIGGER,DT_FIRE,250})})) |
| in das gleiche environment() wie dieser Zapfen bewegt wird, loest |
| diese im Zapfen trigger_sensitive_inv() aus |
| - wird ein Angriff mit DT_FIRE und initialem Schaden > 100 auf das |
| environment() veruebt, loest dies im Zapfen trigger_sensitive_attack() |
| aus |
| |
| |
| SIEHE AUCH |
| ========== |
| |
| Properties: P_SENSITIVE_ATTACK, P_SENSITIVE_INVENTORY, |
| P_SENSITIVE_INVENTORY_TRIGGER |
| Funktionen: InsertSensitiveObject(L), RemoveSensitiveObject(L), |
| CheckSensitiveAttack(L), Defend(), |
| insert_sensitive_inv(L), insert_sensitive_inv_trigger(L), |
| trigger_sensitive_inv(L), trigger_sensitive_attack(L) |
| Defines: /sys/sensitive.h |
| |
| Letzte Aenderung: 10. Januar 2015, Arathorn |