blob: aad2938c60fd97851ab11682af804c1bd2d79479 [file] [log] [blame]
// MorgenGrauen MUDlib
//
// weapon/description.c -- weapon description handling
//
// $Id: description.c 6475 2007-09-19 20:56:40Z Zesstra $
#pragma strict_types
#pragma save_types
#pragma no_clone
#pragma pedantic
#pragma range_check
//#define NEED_PROTOTYPES
#include <thing/properties.h>
#include <thing/description.h>
#include <properties.h>
#include <combat.h>
#include <thing/material.h>
inherit "/std/thing/description";
void create()
{
::create();
SetProp(P_DAM_DESC,DFLT_DAM_DESC);
}
string dam_descr()
{ string re;
mixed desc;
int max,dam,pos;
if (!QueryProp(P_NAME) || !QueryProp(P_DAMAGED) || !QueryProp(P_SHORT) ||
!(desc=QueryProp(P_DAM_DESC)) || (!stringp(desc) && !pointerp(desc)))
return "";
re = capitalize(name(WER,2))+" ";
max = QueryProp(P_WC)+(dam=QueryProp(P_DAMAGED));
// Bei reinen Parierwaffen den AC als max nehmen!
if (QueryProp(P_PARRY)==PARRY_ONLY)
{
max=QueryProp(P_AC)+dam;
}
if (stringp(desc))
return (dam>(max/2))?(re+desc+".\n"):"";
pos = (sizeof(desc)*dam/max);
// Sonst koennen Parierwaffen, die Schrott sind, buggen
if (pos==sizeof(desc)) pos--;
if (stringp(desc[pos]))
return (re+desc[pos]+".\n");
return "";
}
string short()
{ string s;
if (!(s=QueryProp(P_SHORT)))
return 0;
return s + (QueryProp(P_WIELDED)?" (gezueckt).\n":".\n");
}
varargs string long()
{
return (process_string(QueryProp(P_LONG)||"") + (dam_descr()||""));
}
mixed _query_size() {
mixed res, wt;
if (intp(res=Query(P_SIZE)) && (res>0))
return res;
wt=QueryProp(P_WEAPON_TYPE);
switch (wt) {
case WT_SWORD : return 100; // default: Langschwert
case WT_AXE : return 80;
case WT_CLUB : return 80;
case WT_SPEAR : return 180;
case WT_KNIFE : return 20;
case WT_WHIP : return 200;
case WT_STAFF : return 150;
}
return 10; // alles andere
}
mapping _query_material() {
mixed res,wt;
if (mappingp(res=Query(P_MATERIAL)))
return res;
wt=QueryProp(P_WEAPON_TYPE);
switch(wt) {
case WT_SWORD:
return ([MAT_MISC_METAL:100]);
case WT_KNIFE:
return ([MAT_MISC_METAL:80,MAT_MISC_WOOD:20]);
case WT_AXE:
return ([MAT_MISC_METAL:50,MAT_MISC_WOOD:50]);
case WT_SPEAR:
return ([MAT_MISC_METAL:20,MAT_MISC_WOOD:80]);
case WT_STAFF:
case WT_CLUB:
return ([MAT_MISC_WOOD:100]);
}
return ([MAT_MISC_METAL:100]);
}
// P_BALANCED_WEAPON und P_TECHNIQUE sind mangels umgesetztem Konzept durch
// EM-Beschluss fuer obsolet erklaert worden. Zesstra. 26.06.2007