blob: f8dd285b9f25d095158f042dece3de0ab6360489 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001Zusammenfassung zu Fernkampfwaffen
2==================================
3
4 Schusswaffe:
5 ============
6 Standardobjekt: /std/ranged_weapon.c
7
8 P_WC: gibt den Schaden im Nahkampf an (wenn man damit auf einen
9 Gegner einpruegelt. Default 30.
10 P_QUALITY: nur beim Nahkampf relevant. Default 100.
11 P_NR_HANDS: Boegen und Armbrueste sind in jedem Fall zweihaendig.
12 P_SHOOTING_WC: Die Basis-Waffenklasse der Fernwaffe.
13 P_RANGE: Reichweite der Waffe. Default 50.
14 P_STRETCH_TIME: Anzahl der Runden, die zum Laden/Spannen der Waffe
15 benoetigt werden. Default 1.
16 P_AMMUNITION: Benoetigter Munitionstyp.
17
18 Eine HitFunc wirkt sich auf die P_WC aus, nicht auf P_SHOOTING_WC!
19
20 Methoden:
21 static int cmd_shoot(string str);
22 * Befehlsauswertung und Schussvorbereitung, wird durch
23 AddCmd( ({"schiess", "schiesse"}), "cmd_shoot");
24 verknuepft
25
26 static int shoot_dam(mapping shoot);
27 * Schadensermittlung
28
29 static string FindRangedTarget(string str, mapping shoot);
30 * Gegnerermittlung
31
32 Munition:
33 =========
34 Standardobjekt: Nutzung von /std/unit ist empfohlen
35
36 P_SHOOTING_WC: legt die Munitionsstaerke fest
37 P_DAM_TYPE: legt die Schadensart des Schussangriffs fest
38
39 Eine HitFunc in der Munition wirkt sich auf P_SHOOTING_WC aus!
40
41 Allgemeines:
42 ============
43 In der Waffe legt man ueber P_AMMUNITION fest, welche Art Munition
44 damit verschossen werden kann. In der Munition muss diese Munition
45 auch als ID gesetzt werden.
46
47 Ueber P_STRETCH_TIME legt man fest, alle wieviel Runden die
48 Fernkampfwaffe abgefeuert werden kann (default: 1).
49
50 Der verursachte Schaden wird aus der Staerke der Fernkampfwaffe
51 und der Staerke der Munition bestimmt. In beiden wird diese in der
52 Property P_SHOOTING_WC angegeben.
53
54 Zusaetzlich kann man in P_RANGE die Reichweite der Fernkampfwaffe
55 festlegen. Hat man einen Raum A, der sich innerhalb eines anderen
56 Raumes befindet (z.B. Transporter), so kann man mittels P_SHOOTING_AREA
57 dessen 'Groesse' festlegen. Mit einer Waffe, deren P_RANGE mindestens
58 gleich diesem Zahlenwert ist, kann aus diesem Raum heraus geschossen
59 werden.
60 Alternativ kann man in A einen anderen Raum B)in die Property
61 P_TARGET_AREA schreiben.
62
63BEISPIEL:
64 // #1 siehe auch /doc/beispiele/fernwaffen fuer ladbaren Code
65
66 // #2 eine einfache, aber gute Schleuder
67 inherit "/std/ranged_weapon";
68
69 void create() {
70 if (!clonep(this_object())) return;
71 ::create();
72
73 SetProp(P_SHORT, "Eine Schleuder");
74 SetProp(P_INFO,
75 "Die Syntax lautet: schleuder <geschoss> auf <ziel>\n");
76 // sonstige Objektprops ...
77
78 RemoveCmd(({"schiess", "schiesse"})); // entferne Default-Kommando
79 AddCmd(({"schleuder", "schleudere"}), #'cmd_shoot);
80
81 SetProp(P_WC, 10); // eine Schleuder ist erstmal harmlos
82 SetProp(P_DAM_TYPE, DT_WHIP);
83
84 SetProp(P_SHOOTING_WC, 90); // ziemlich gute Schleuder
85 SetProp(P_NR_HANDS, 1); // einhaendig
86 SetProp(P_WEAPON_TYPE, WT_RANGED_WEAPON);
87 SetProp(P_AMMUNITION, MUN_STONE);
88 SetProp(P_STRETCH_TIME, 1);
89 SetProp(P_RANGE, 30); // 30 weit kann man damit nur schleudern
90 }
91
92 // #3 passende Munition
93 inherit "/std/unit";
94
95 void create() {
96 if (!clonep(this_object())) return;
97 ::create();
98
99 SetProp(P_NAME, ({"Schleuderstein", "Schleudersteine"}) );
100 SetProp(P_LONG, break_string(
101 "Hervorragend geformte Schleudersteine aus Murmelnit.", 78));
102 SetProp(P_GENDER, MALE);
103 SetProp(P_AMOUNT, 1);
104 SetProp(P_SHOOTING_WC, 50);
105 SetProp(P_DAM_TYPE, ({DT_BLUDGEON}));
106 SetProp(P_WEAPON_TYPE, WT_AMMU);
107 SetProp(P_MATERIAL, MAT_STONE);
108
109 SetGramsPerUnits(60,1);
110 SetCoinsPerUnits(25,1);
111
112 AddId(MUN_STONE);
113 AddSingularId(({"stein", "schleuderstein"}));
114 AddPluralId(({"steine", "schleudersteine"}));
115 AddClass(CL_AMMUNITION);
116 }
117
118SIEHE AUCH:
119 Generell: P_SHOOTING_WC, P_STRETCH_TIME, P_AMMUNITION
120 Methoden: FindRangedTarget(L), shoot_dam(L)
121 Gebiet: P_RANGE, P_SHOOTING_AREA, P_TARGET_AREA
122 Waffen: P_WEAPON_TYPE, P_WC, P_EQUIP_TIME, P_NR_HANDS
123 Kampf: Attack(L), Defend(L), P_DISABLE_ATTACK, P_ATTACK_BUSY
124 Team: PresentPosition(L)
125 Sonstiges: P_NOGET
126 Balance: fernwaffen, waffen, balance
127
12829.Jul 2014 Gloinson