blob: b200caa385fa55220cadf51b15e716f1326bad63 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// MorgenGrauen MUDlib
2//
3// weapon/description.c -- weapon description handling
4//
5// $Id: description.c 6475 2007-09-19 20:56:40Z Zesstra $
6
7#pragma strict_types
8#pragma save_types
9#pragma no_clone
MG Mud User88f12472016-06-24 23:31:02 +020010#pragma range_check
11
12//#define NEED_PROTOTYPES
13
14#include <thing/properties.h>
15#include <thing/description.h>
16#include <properties.h>
17#include <combat.h>
18#include <thing/material.h>
19
20inherit "/std/thing/description";
21
22void create()
23{
24 ::create();
25 SetProp(P_DAM_DESC,DFLT_DAM_DESC);
26}
27
28string dam_descr()
29{ string re;
30 mixed desc;
31 int max,dam,pos;
32
33 if (!QueryProp(P_NAME) || !QueryProp(P_DAMAGED) || !QueryProp(P_SHORT) ||
34 !(desc=QueryProp(P_DAM_DESC)) || (!stringp(desc) && !pointerp(desc)))
35 return "";
36 re = capitalize(name(WER,2))+" ";
37 max = QueryProp(P_WC)+(dam=QueryProp(P_DAMAGED));
38 // Bei reinen Parierwaffen den AC als max nehmen!
39 if (QueryProp(P_PARRY)==PARRY_ONLY)
40 {
41 max=QueryProp(P_AC)+dam;
42 }
43 if (stringp(desc))
44 return (dam>(max/2))?(re+desc+".\n"):"";
45 pos = (sizeof(desc)*dam/max);
46 // Sonst koennen Parierwaffen, die Schrott sind, buggen
47 if (pos==sizeof(desc)) pos--;
48 if (stringp(desc[pos]))
49 return (re+desc[pos]+".\n");
50 return "";
51}
52
53string short()
54{ string s;
55
56 if (!(s=QueryProp(P_SHORT)))
57 return 0;
58 return s + (QueryProp(P_WIELDED)?" (gezueckt).\n":".\n");
59}
60
61varargs string long()
62{
63 return (process_string(QueryProp(P_LONG)||"") + (dam_descr()||""));
64}
65
66mixed _query_size() {
67 mixed res, wt;
68 if (intp(res=Query(P_SIZE)) && (res>0))
69 return res;
70 wt=QueryProp(P_WEAPON_TYPE);
71 switch (wt) {
72 case WT_SWORD : return 100; // default: Langschwert
73 case WT_AXE : return 80;
74 case WT_CLUB : return 80;
75 case WT_SPEAR : return 180;
76 case WT_KNIFE : return 20;
77 case WT_WHIP : return 200;
78 case WT_STAFF : return 150;
79 }
80 return 10; // alles andere
81}
82
83mapping _query_material() {
84 mixed res,wt;
85
86 if (mappingp(res=Query(P_MATERIAL)))
87 return res;
88 wt=QueryProp(P_WEAPON_TYPE);
89 switch(wt) {
90 case WT_SWORD:
91 return ([MAT_MISC_METAL:100]);
92 case WT_KNIFE:
93 return ([MAT_MISC_METAL:80,MAT_MISC_WOOD:20]);
94 case WT_AXE:
95 return ([MAT_MISC_METAL:50,MAT_MISC_WOOD:50]);
96 case WT_SPEAR:
97 return ([MAT_MISC_METAL:20,MAT_MISC_WOOD:80]);
98 case WT_STAFF:
99 case WT_CLUB:
100 return ([MAT_MISC_WOOD:100]);
101 }
102 return ([MAT_MISC_METAL:100]);
103}
104
105// P_BALANCED_WEAPON und P_TECHNIQUE sind mangels umgesetztem Konzept durch
106// EM-Beschluss fuer obsolet erklaert worden. Zesstra. 26.06.2007
107