forked from github/server
read weight, capacity and flags of items
This commit is contained in:
parent
af77a1d8e5
commit
12e15978b8
|
@ -113,11 +113,11 @@ extern "C" {
|
||||||
/* bitfield values for item_type::flags */
|
/* bitfield values for item_type::flags */
|
||||||
#define ITF_NONE 0x0000
|
#define ITF_NONE 0x0000
|
||||||
#define ITF_HERB 0x0001 /* this item is a herb */
|
#define ITF_HERB 0x0001 /* this item is a herb */
|
||||||
#define ITF_CURSED 0x0010 /* cursed object, cannot be given away */
|
#define ITF_CURSED 0x0002 /* cursed object, cannot be given away */
|
||||||
#define ITF_NOTLOST 0x0020 /* special object (quests), cannot be lost through death etc. */
|
#define ITF_NOTLOST 0x0004 /* special object (quests), cannot be lost through death etc. */
|
||||||
#define ITF_BIG 0x0040 /* big item, e.g. does not fit in a bag of holding */
|
#define ITF_BIG 0x0008 /* big item, e.g. does not fit in a bag of holding */
|
||||||
#define ITF_ANIMAL 0x0080 /* an animal */
|
#define ITF_ANIMAL 0x0010 /* an animal */
|
||||||
#define ITF_VEHICLE 0x0100 /* a vehicle, drawn by two animals */
|
#define ITF_VEHICLE 0x0020 /* a vehicle, drawn by two animals */
|
||||||
|
|
||||||
/* error codes for item_type::use */
|
/* error codes for item_type::use */
|
||||||
#define ECUSTOM -1
|
#define ECUSTOM -1
|
||||||
|
|
|
@ -139,14 +139,34 @@ void json_building(cJSON *json, building_type *bt) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void json_item(cJSON *json, item_type *st) {
|
void json_item(cJSON *json, item_type *itype) {
|
||||||
cJSON *child;
|
cJSON *child;
|
||||||
|
const char *flags[] = {
|
||||||
|
"herb", "cursed", "nodrop", "big", "animal", "vehicle", 0
|
||||||
|
};
|
||||||
if (json->type!=cJSON_Object) {
|
if (json->type!=cJSON_Object) {
|
||||||
log_error_n("ship %s is not a json object: %d", json->string, json->type);
|
log_error_n("ship %s is not a json object: %d", json->string, json->type);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (child=json->child;child;child=child->next) {
|
for (child=json->child;child;child=child->next) {
|
||||||
switch(child->type) {
|
switch(child->type) {
|
||||||
|
case cJSON_Number:
|
||||||
|
if (strcmp(child->string, "weight")==0) {
|
||||||
|
itype->weight = child->valueint;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (strcmp(child->string, "capacity")==0) {
|
||||||
|
itype->capacity = child->valueint;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
log_error_n("item %s contains unknown attribute %s", json->string, child->string);
|
||||||
|
break;
|
||||||
|
case cJSON_Array:
|
||||||
|
if (strcmp(child->string, "flags")==0) {
|
||||||
|
itype->flags = json_flags(child, flags);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
log_error_n("item %s contains unknown attribute %s", json->string, child->string);
|
||||||
case cJSON_Object:
|
case cJSON_Object:
|
||||||
default:
|
default:
|
||||||
log_error_n("item %s contains unknown attribute %s", json->string, child->string);
|
log_error_n("item %s contains unknown attribute %s", json->string, child->string);
|
||||||
|
|
|
@ -86,10 +86,11 @@ static void test_races(CuTest * tc)
|
||||||
static void test_items(CuTest * tc)
|
static void test_items(CuTest * tc)
|
||||||
{
|
{
|
||||||
const char * data = "{\"items\": { "
|
const char * data = "{\"items\": { "
|
||||||
"\"axe\" : {},"
|
"\"axe\" : { \"weight\" : 2},"
|
||||||
"\"horse\" : {}"
|
"\"horse\" : { \"flags\" : [ \"animal\", \"big\" ], \"capacity\" : 20 }"
|
||||||
"}}";
|
"}}";
|
||||||
cJSON *json = cJSON_Parse(data);
|
cJSON *json = cJSON_Parse(data);
|
||||||
|
const item_type * itype;
|
||||||
|
|
||||||
test_cleanup();
|
test_cleanup();
|
||||||
|
|
||||||
|
@ -99,7 +100,17 @@ static void test_items(CuTest * tc)
|
||||||
CuAssertPtrEquals(tc, 0, (void *)get_resourcetype(R_HORSE));
|
CuAssertPtrEquals(tc, 0, (void *)get_resourcetype(R_HORSE));
|
||||||
|
|
||||||
json_config(json);
|
json_config(json);
|
||||||
CuAssertPtrNotNull(tc, it_find("axe"));
|
|
||||||
|
itype = it_find("axe");
|
||||||
|
CuAssertPtrNotNull(tc, itype);
|
||||||
|
CuAssertIntEquals(tc, 2, itype->weight);
|
||||||
|
CuAssertIntEquals(tc, 0, itype->flags);
|
||||||
|
|
||||||
|
itype = it_find("horse");
|
||||||
|
CuAssertPtrNotNull(tc, itype);
|
||||||
|
CuAssertIntEquals(tc, 20, itype->capacity);
|
||||||
|
CuAssertIntEquals(tc, ITF_ANIMAL|ITF_BIG, itype->flags);
|
||||||
|
|
||||||
CuAssertPtrNotNull(tc, rt_find("axe"));
|
CuAssertPtrNotNull(tc, rt_find("axe"));
|
||||||
CuAssertPtrNotNull(tc, (void *)get_resourcetype(R_HORSE));
|
CuAssertPtrNotNull(tc, (void *)get_resourcetype(R_HORSE));
|
||||||
}
|
}
|
||||||
|
|
|
@ -235,6 +235,7 @@ void log_error_n(const char *format, ...)
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, format);
|
va_start(args, format);
|
||||||
_log_write(logfile, 0, prefix, format, args);
|
_log_write(logfile, 0, prefix, format, args);
|
||||||
|
fputc('\n', logfile);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -245,7 +246,7 @@ void log_error_n(const char *format, ...)
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, format);
|
va_start(args, format);
|
||||||
_log_write(stderr, stdio_codepage, prefix, format, args);
|
_log_write(stderr, stdio_codepage, prefix, format, args);
|
||||||
fputc('\n', logfile);
|
fputc('\n', stderr);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue