Typen bei Zuweisungen repariert.
LDMud 3.6.1 prueft auch Typen zur Laufzeit bei
Zuweisungen.
Change-Id: I3846154fe79b4b139101443011282e54022ea1d8
diff --git a/std/living/description.c b/std/living/description.c
index 04e65e2..4802a1b 100644
--- a/std/living/description.c
+++ b/std/living/description.c
@@ -326,13 +326,15 @@
return Query(P_REAL_RACE,F_VALUE)||QueryProp(P_RACE);
}
-static mixed _set_name(mixed nm )
+static <string|string*> _set_name(<string|string*> nm )
{
string lvnam;
- lvnam = nm;
- if(pointerp(nm)) lvnam = nm[0];
+ if (pointerp(nm))
+ lvnam = nm[WER];
+ else
+ lvnam = nm;
set_living_name(lower_case(lvnam));
- return Set(P_NAME, nm);
+ return Set(P_NAME, nm, F_VALUE);
}
int _query_container()
@@ -340,7 +342,7 @@
return 0;
}
-int is_class_member(mixed str) {
+int is_class_member(<string|string*> str) {
// Keine Klasse, keine Mitgliedschaft ...
if (!str || (!stringp(str) && !pointerp(str)) || str=="")
return 0;
diff --git a/std/player/base.c b/std/player/base.c
index 61815a2..95d70c0 100644
--- a/std/player/base.c
+++ b/std/player/base.c
@@ -1503,7 +1503,6 @@
* @see short_score()
*/
static int score(string arg) {
- string tmp, gender;
int i,sz,val;
mixed ind;
object *enem1, *enem2, *inv;
@@ -1514,12 +1513,13 @@
}
int plev = LEPMASTER->QueryLevel();
-
- switch(tmp = QueryProp(P_GENDER)) {
+ <string|int> tmp = QueryProp(P_GENDER);
+ string gender;
+ switch(tmp) {
case MALE: gender = "maennlich"; break;
case FEMALE: gender = "weiblich"; break;
case NEUTER: gender = "neutral"; break;
- default: gender = lower_case(tmp);
+ default: gender = "unbekannt";
}
ind = m_indices(QueryProp(P_ATTRIBUTES));
diff --git a/std/room/description.c b/std/room/description.c
index 47390e4..9aa0971 100644
--- a/std/room/description.c
+++ b/std/room/description.c
@@ -61,12 +61,10 @@
static void WriteRoomMessage()
{
- int tim, msgid;
- string *room_msg,func;
- mixed *func_msg;
+ int msgid;
- room_msg = (string *)QueryProp(P_ROOM_MSG);
- func_msg = QueryProp(P_FUNC_MSG);
+ string *room_msg = QueryProp(P_ROOM_MSG);
+ <string|string*> func_msg = QueryProp(P_FUNC_MSG);
if ((!room_msg || !sizeof(room_msg)) && !func_msg)
return;
@@ -81,6 +79,7 @@
if (func_msg)
{
+ string func;
if (stringp(func_msg))
func=(string)func_msg;
else
@@ -90,10 +89,9 @@
}
while (remove_call_out("WriteRoomMessage")!=-1);
- tim=QueryProp(P_MSG_PROB);
if(this_object() && sizeof(filter(
deep_inventory(this_object()), #'interactive))) //')))
- call_out("WriteRoomMessage", (tim<15 ? 15 : tim));
+ call_out("WriteRoomMessage", max(15, QueryProp(P_MSG_PROB)));
}
varargs string int_long(mixed viewer,mixed viewpoint,int flags)
diff --git a/std/unit.c b/std/unit.c
index ae715f2..fd3820a 100644
--- a/std/unit.c
+++ b/std/unit.c
@@ -176,10 +176,9 @@
void AddSingularId(mixed str)
{
- string *ids;
+ string **ids=Query(U_IDS);
if (!pointerp(str))
str=({str});
- ids=Query(U_IDS);
Set(U_IDS,({ids[0]+str,ids[1]}));
}
@@ -193,8 +192,7 @@
void AddPluralId(mixed str)
{
- string *ids;
-
+ string **ids;
if (!pointerp(str))
str=({str});
ids=Query(U_IDS);
@@ -317,7 +315,7 @@
varargs int id(string str,int lvl)
{
- string s1,s2,*ids;
+ string s1,s2,**ids;
int i;
if (!str) return 0;
@@ -333,31 +331,28 @@
return 1;
}
- ids=Query(U_IDS);
+ ids=Query(U_IDS);
if (!ids)
return 0;
-
- //die casts auf 'mixed' sind absicht. Sonst geht der Driver offenbar davon
- //aus, dass ids[1] ein String ist. Es ist aber aber ein Array von Strings
- //und genau das will auch match_item() haben. ;-) Zesstra
- if (match_item(str,(mixed)ids[1] )) {
+
+ if (match_item(str, ids[1] )) {
SetProp(U_REQ, amount);
return 1;
}
- if (match_item(str,(mixed)ids[0] )) {
+ if (match_item(str, ids[0] )) {
SetProp(U_REQ,1);
return 1;
}
if (sscanf(str,"%s %s",s1,s2) && s1[0..3]=="alle" &&
- match_item(s2,(mixed)ids[1] )) {
+ match_item(s2, ids[1] )) {
SetProp(U_REQ, amount);
return 1;
}
- if (sscanf(str,"%d %s",i,s1)==2 && i==1 && match_item(s1,(mixed)ids[0] )) {
+ if (sscanf(str,"%d %s",i,s1)==2 && i==1 && match_item(s1, ids[0] )) {
SetProp(U_REQ,1);
return 1;
}
- if (sscanf(str,"%d %s",i,s1)==2 && match_item(s1,(mixed)ids[1] ) &&
+ if (sscanf(str,"%d %s",i,s1)==2 && match_item(s1, ids[1] ) &&
i<=amount && i>0) {
SetProp(U_REQ,i);
return 1;