MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | FindGroup() |
| 2 | |
| 3 | FUNKTION: |
| 4 | object*FindGroup(object pl,int who); |
| 5 | |
| 6 | DEFINIERT IN: |
| 7 | /std/spellbook.c |
| 8 | |
| 9 | ARGUMENTE: |
| 10 | pl |
| 11 | Lebewesen, von welchem die Freunde oder Feinde in der Umgebung |
| 12 | gefunden werden sollen. |
| 13 | who |
| 14 | Flag, welches anzeigt, ob Freunde oder Feinde gefunden werden |
| 15 | sollen (Konstanten definiert in '/sys/new_skills.h'): |
| 16 | FG_ENEMIES - (Wert -1) Feinde sollen gefunden werden |
| 17 | FG_FRIENDS - (Wert 1) Freunde sollen gefunden werden |
| 18 | FG_ALL - (Wert 0) alle Lebewesen sollen gefunden werden |
| 19 | |
| 20 | RUeCKGABEWERT: |
| 21 | Array mit gefundenen Lebewesen |
| 22 | |
| 23 | BESCHREIBUNG: |
| 24 | Bei Spells, die sich auf mehrere Gegner auswirken oder bei denen man |
| 25 | per Hand ein Opfer auswaehlen moechte, laesst sich mittels der |
| 26 | Funktion FindGroup() eine Liste von Lebewesen ermitteln, welche in |
| 27 | der Umgebung von <pl> zu finden sind. |
| 28 | Je nachdem, was man denn genau vorhat, kann man sich von der |
| 29 | Funktion freundlich oder feindlich gesinnte Lebewesen heraussuchen |
| 30 | lassen. |
| 31 | Will man die freundlich gesinnten Lebewesen ermitteln, so uebergibt |
| 32 | man in <who> die Konstante FG_FRIENDS, bei feindlich gesinnten die |
| 33 | Konstante FG_ENEMIES, und wenn man alle Lebewesen bekommen moechte |
| 34 | schliesslich FG_ALL. |
| 35 | Bei der Auswahl gelten folgende Regeln: |
| 36 | (1) Lebewesen, mit denen <pl> im Kampf ist, sind grundsaetzlich |
| 37 | feindlich gesinnt. |
| 38 | (2) Teammitglieder von <pl> sind grundsaetzlich freundlich |
| 39 | gesinnt. |
| 40 | (3) Spieler sind gegenueber Spielern freundlich gesinnt, NPCs |
| 41 | gegenueber NPCs. NPCs kann man hierbei mit Hilfe der Property |
| 42 | P_FRIEND den Spielern zuordnen. |
| 43 | (4) Daraus folgt natuerlich, dass Spieler und NPCs grundsaetzlich |
| 44 | eine feindliche Einstellung gegenueber haben, sofern die NPCs |
| 45 | nicht die Property P_FRIEND gesetzt haben |
| 46 | (was standardmaessig natuerlich nicht der Fall ist). |
| 47 | (5) Netztote werden nicht erkannt. |
| 48 | (6) Magier werden nicht erkannt, wenn sie unsichtbar sind. |
| 49 | (7) Ein Magier wird als feindlich gesinnt nur dann erkannt, wenn |
| 50 | <pl> mit ihm im Kampf ist. |
| 51 | (6) Sucht man feindlich gesinnte Lebewesen, so werden die, welche |
| 52 | eine von den Properties P_NO_ATTACK oder P_NO_GLOBAL_ATTACK |
| 53 | gesetzt haben, nicht erkannt. |
| 54 | Die Property P_FRIEND sollte man in NPCs setzen, die dem Spieler |
| 55 | hilfreich beiseite stehen, z.B. vom Spieler beschworene HilfsNPCs. |
| 56 | |
| 57 | BEISPIELE: |
| 58 | Wenn man einen Feuerball nach jemandem wirft, so trifft dieser unter |
| 59 | Umstaenden auch andere, wenn er gross genug ist. Man nimmt hierbei |
| 60 | an, dass sich die freundlich gesinnten Lebewesen des Gegners auch |
| 61 | naeher bei ihm befinden als die feindlich gesinnten: |
| 62 | victim->Defend(500,DT_FIRE,([SP_SHOW_DAMAGE:1]),caster); |
| 63 | victimList=FindGroup(victim,FG_FRIENDS); |
| 64 | map_objects(victimList, |
| 65 | "Defend", |
| 66 | 100, |
| 67 | DT_FIRE, |
| 68 | ([SP_SHOW_DAMAGE:1]), |
| 69 | caster); |
| 70 | Hiermit trifft man also auch die Freunde von <victim>. |
| 71 | |
| 72 | SIEHE AUCH: |
| 73 | FindGroupN(), FindGroupP(), P_FRIEND, P_NO_GLOBAL_ATTACK |
| 74 | |
| 75 | ---------------------------------------------------------------------------- |
| 76 | Last modified: Mon Jan 28 21:45:00 2002 by Tiamak |