forked from github/server
Move quest objects to the module that uses them (museum portals).
This commit is contained in:
parent
d7803eb318
commit
13165f2354
|
@ -2769,7 +2769,6 @@ void attrib_init(void)
|
|||
register_bordertype(&bt_wall);
|
||||
register_bordertype(&bt_illusionwall);
|
||||
register_bordertype(&bt_road);
|
||||
register_bordertype(&bt_questportal);
|
||||
|
||||
register_function((pf_generic) & minimum_wage, "minimum_wage");
|
||||
|
||||
|
|
|
@ -458,58 +458,6 @@ border_type bt_illusionwall = {
|
|||
b_uvisible, /* uvisible */
|
||||
};
|
||||
|
||||
/***
|
||||
* special quest door
|
||||
***/
|
||||
|
||||
bool b_blockquestportal(const connection * b, const unit * u,
|
||||
const region * r)
|
||||
{
|
||||
if (b->data.i > 0)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
static const char *b_namequestportal(const connection * b, const region * r,
|
||||
const struct faction *f, int gflags)
|
||||
{
|
||||
const char *bname;
|
||||
int lock = b->data.i;
|
||||
unused_arg(b);
|
||||
unused_arg(r);
|
||||
|
||||
if (gflags & GF_ARTICLE) {
|
||||
if (lock > 0) {
|
||||
bname = "a_gate_locked";
|
||||
} else {
|
||||
bname = "a_gate_open";
|
||||
}
|
||||
} else {
|
||||
if (lock > 0) {
|
||||
bname = "gate_locked";
|
||||
} else {
|
||||
bname = "gate_open";
|
||||
}
|
||||
}
|
||||
if (gflags & GF_PURE)
|
||||
return bname;
|
||||
return LOC(f->locale, mkname("border", bname));
|
||||
}
|
||||
|
||||
border_type bt_questportal = {
|
||||
"questportal", VAR_INT,
|
||||
b_opaque,
|
||||
NULL, /* init */
|
||||
NULL, /* destroy */
|
||||
b_read, /* read */
|
||||
b_write, /* write */
|
||||
b_blockquestportal, /* block */
|
||||
b_namequestportal, /* name */
|
||||
b_rvisible, /* rvisible */
|
||||
b_fvisible, /* fvisible */
|
||||
b_uvisible, /* uvisible */
|
||||
};
|
||||
|
||||
/***
|
||||
* roads. meant to replace the old at_road or r->road attribute
|
||||
***/
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
Copyright (c) 1998-2010, Enno Rehling <enno@eressea.de>
|
||||
Katja Zedel <katze@felidae.kn-bremen.de
|
||||
Christian Schlittchen <corwin@amber.kn-bremen.de>
|
||||
Katja Zedel <katze@felidae.kn-bremen.de
|
||||
Christian Schlittchen <corwin@amber.kn-bremen.de>
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
|
@ -25,6 +25,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|||
|
||||
/* kernel includes */
|
||||
#include <kernel/building.h>
|
||||
#include <kernel/connection.h>
|
||||
#include <kernel/faction.h>
|
||||
#include <kernel/item.h>
|
||||
#include <kernel/move.h>
|
||||
|
@ -42,6 +43,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|||
#include <util/base36.h>
|
||||
#include <util/functions.h>
|
||||
#include <util/goodies.h>
|
||||
#include <util/language.h>
|
||||
|
||||
#include <storage.h>
|
||||
|
||||
|
@ -68,9 +70,9 @@ static void a_finalizemuseumgivebackcookie(attrib * a)
|
|||
|
||||
static void
|
||||
a_writemuseumgivebackcookie(const attrib * a, const void *owner,
|
||||
struct storage *store)
|
||||
struct storage *store)
|
||||
{
|
||||
museumgivebackcookie *gbc = (museumgivebackcookie *) a->data.v;
|
||||
museumgivebackcookie *gbc = (museumgivebackcookie *)a->data.v;
|
||||
WRITE_INT(store, gbc->warden_no);
|
||||
WRITE_INT(store, gbc->cookie);
|
||||
}
|
||||
|
@ -78,7 +80,7 @@ a_writemuseumgivebackcookie(const attrib * a, const void *owner,
|
|||
static int
|
||||
a_readmuseumgivebackcookie(attrib * a, void *owner, struct storage *store)
|
||||
{
|
||||
museumgivebackcookie *gbc = (museumgivebackcookie *) a->data.v;
|
||||
museumgivebackcookie *gbc = (museumgivebackcookie *)a->data.v;
|
||||
READ_INT(store, &gbc->warden_no);
|
||||
READ_INT(store, &gbc->cookie);
|
||||
return AT_READ_OK;
|
||||
|
@ -104,23 +106,23 @@ static void a_initmuseumgiveback(attrib * a)
|
|||
|
||||
static void a_finalizemuseumgiveback(attrib * a)
|
||||
{
|
||||
museumgiveback *gb = (museumgiveback *) a->data.v;
|
||||
museumgiveback *gb = (museumgiveback *)a->data.v;
|
||||
i_freeall(&gb->items);
|
||||
free(a->data.v);
|
||||
}
|
||||
|
||||
static void
|
||||
a_writemuseumgiveback(const attrib * a, const void *owner,
|
||||
struct storage *store)
|
||||
struct storage *store)
|
||||
{
|
||||
museumgiveback *gb = (museumgiveback *) a->data.v;
|
||||
museumgiveback *gb = (museumgiveback *)a->data.v;
|
||||
WRITE_INT(store, gb->cookie);
|
||||
write_items(store, gb->items);
|
||||
}
|
||||
|
||||
static int a_readmuseumgiveback(attrib * a, void *owner, struct storage *store)
|
||||
{
|
||||
museumgiveback *gb = (museumgiveback *) a->data.v;
|
||||
museumgiveback *gb = (museumgiveback *)a->data.v;
|
||||
READ_INT(store, &gb->cookie);
|
||||
read_items(store, &gb->items);
|
||||
return AT_READ_OK;
|
||||
|
@ -145,26 +147,27 @@ void warden_add_give(unit * src, unit * u, const item_type * itype, int n)
|
|||
/* has the giver a cookie corresponding to the warden */
|
||||
for (a = a_find(src->attribs, &at_museumgivebackcookie);
|
||||
a && a->type == &at_museumgivebackcookie; a = a->next) {
|
||||
if (((museumgivebackcookie *) (a->data.v))->warden_no == u->no)
|
||||
if (((museumgivebackcookie *)(a->data.v))->warden_no == u->no)
|
||||
break;
|
||||
}
|
||||
|
||||
/* if not give it one */
|
||||
if (a == NULL || a->type != &at_museumgivebackcookie) {
|
||||
a = a_add(&src->attribs, a_new(&at_museumgivebackcookie));
|
||||
gbc = (museumgivebackcookie *) a->data.v;
|
||||
gbc = (museumgivebackcookie *)a->data.v;
|
||||
gbc->warden_no = u->no;
|
||||
gbc->cookie = aw->data.i;
|
||||
assert(aw->data.i < INT_MAX);
|
||||
aw->data.i++;
|
||||
} else {
|
||||
gbc = (museumgivebackcookie *) (a->data.v);
|
||||
}
|
||||
else {
|
||||
gbc = (museumgivebackcookie *)(a->data.v);
|
||||
}
|
||||
|
||||
/* now we search for the warden's corresponding item list */
|
||||
for (a = a_find(u->attribs, &at_museumgiveback);
|
||||
a && a->type == &at_museumgiveback; a = a->next) {
|
||||
gb = (museumgiveback *) a->data.v;
|
||||
gb = (museumgiveback *)a->data.v;
|
||||
if (gb->cookie == gbc->cookie) {
|
||||
break;
|
||||
}
|
||||
|
@ -173,7 +176,7 @@ void warden_add_give(unit * src, unit * u, const item_type * itype, int n)
|
|||
/* if there's none, give it one */
|
||||
if (!gb) {
|
||||
a = a_add(&u->attribs, a_new(&at_museumgiveback));
|
||||
gb = (museumgiveback *) a->data.v;
|
||||
gb = (museumgiveback *)a->data.v;
|
||||
gb->cookie = gbc->cookie;
|
||||
}
|
||||
|
||||
|
@ -299,7 +302,7 @@ void create_museum(void)
|
|||
|
||||
static int
|
||||
use_museumexitticket(unit * u, const struct item_type *itype, int amount,
|
||||
order * ord)
|
||||
order * ord)
|
||||
{
|
||||
attrib *a;
|
||||
region *r;
|
||||
|
@ -329,11 +332,11 @@ use_museumexitticket(unit * u, const struct item_type *itype, int amount,
|
|||
if (a) {
|
||||
for (a = a_find(warden->attribs, &at_museumgiveback);
|
||||
a && a->type == &at_museumgiveback; a = a->next) {
|
||||
if (((museumgiveback *) (a->data.v))->cookie == unit_cookie)
|
||||
if (((museumgiveback *)(a->data.v))->cookie == unit_cookie)
|
||||
break;
|
||||
}
|
||||
if (a && a->type == &at_museumgiveback) {
|
||||
museumgiveback *gb = (museumgiveback *) (a->data.v);
|
||||
museumgiveback *gb = (museumgiveback *)(a->data.v);
|
||||
item *it;
|
||||
|
||||
for (it = gb->items; it; it = it->next) {
|
||||
|
@ -356,7 +359,7 @@ use_museumexitticket(unit * u, const struct item_type *itype, int amount,
|
|||
|
||||
static int
|
||||
use_museumticket(unit * u, const struct item_type *itype, int amount,
|
||||
order * ord)
|
||||
order * ord)
|
||||
{
|
||||
attrib *a;
|
||||
region *r = u->region;
|
||||
|
@ -397,8 +400,65 @@ use_museumticket(unit * u, const struct item_type *itype, int amount,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/***
|
||||
* special quest door
|
||||
***/
|
||||
|
||||
bool b_blockquestportal(const connection * b, const unit * u,
|
||||
const region * r)
|
||||
{
|
||||
if (b->data.i > 0)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
static const char *b_namequestportal(const connection * b, const region * r,
|
||||
const struct faction *f, int gflags)
|
||||
{
|
||||
const char *bname;
|
||||
int lock = b->data.i;
|
||||
unused_arg(b);
|
||||
unused_arg(r);
|
||||
|
||||
if (gflags & GF_ARTICLE) {
|
||||
if (lock > 0) {
|
||||
bname = "a_gate_locked";
|
||||
}
|
||||
else {
|
||||
bname = "a_gate_open";
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (lock > 0) {
|
||||
bname = "gate_locked";
|
||||
}
|
||||
else {
|
||||
bname = "gate_open";
|
||||
}
|
||||
}
|
||||
if (gflags & GF_PURE)
|
||||
return bname;
|
||||
return LOC(f->locale, mkname("border", bname));
|
||||
}
|
||||
|
||||
border_type bt_questportal = {
|
||||
"questportal", VAR_INT,
|
||||
b_opaque,
|
||||
NULL, /* init */
|
||||
NULL, /* destroy */
|
||||
b_read, /* read */
|
||||
b_write, /* write */
|
||||
b_blockquestportal, /* block */
|
||||
b_namequestportal, /* name */
|
||||
b_rvisible, /* rvisible */
|
||||
b_fvisible, /* fvisible */
|
||||
b_uvisible, /* uvisible */
|
||||
};
|
||||
|
||||
void register_museum(void)
|
||||
{
|
||||
register_bordertype(&bt_questportal);
|
||||
|
||||
at_register(&at_warden);
|
||||
at_register(&at_museumexit);
|
||||
at_register(&at_museumgivebackcookie);
|
||||
|
|
Loading…
Reference in New Issue