MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | Zusammenfassung 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 | |
| 63 | BEISPIEL: |
| 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 | |
| 118 | SIEHE 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 | |
| 128 | 29.Jul 2014 Gloinson |