forked from github/server
special_direction jetzt von LUA aus benutzbar. Neuer Testcode für special directions.
This commit is contained in:
parent
70237ce12f
commit
df26ef19be
|
@ -2760,24 +2760,6 @@ magic(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
attrib *
|
|
||||||
create_special_direction(region *r, int x, int y, int duration,
|
|
||||||
const char *desc, const char *keyword)
|
|
||||||
|
|
||||||
{
|
|
||||||
attrib *a = a_add(&r->attribs, a_new(&at_direction));
|
|
||||||
spec_direction *d = (spec_direction *)(a->data.v);
|
|
||||||
|
|
||||||
d->active = false;
|
|
||||||
d->x = x;
|
|
||||||
d->y = y;
|
|
||||||
d->duration = duration;
|
|
||||||
d->desc = strdup(desc);
|
|
||||||
d->keyword = strdup(keyword);
|
|
||||||
|
|
||||||
return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
spell_info(const struct spell * sp, const struct locale * lang)
|
spell_info(const struct spell * sp, const struct locale * lang)
|
||||||
{
|
{
|
||||||
|
|
|
@ -365,8 +365,6 @@ extern void remove_familiar(struct unit * mage);
|
||||||
extern void create_newfamiliar(struct unit * mage, struct unit * familiar);
|
extern void create_newfamiliar(struct unit * mage, struct unit * familiar);
|
||||||
extern void create_newclone(struct unit * mage, struct unit * familiar);
|
extern void create_newclone(struct unit * mage, struct unit * familiar);
|
||||||
extern struct unit * has_clone(struct unit * mage);
|
extern struct unit * has_clone(struct unit * mage);
|
||||||
extern struct attrib *create_special_direction(struct region *r, int x, int y, int duration,
|
|
||||||
const char *desc, const char *keyword);
|
|
||||||
|
|
||||||
extern struct plane * astral_plane;
|
extern struct plane * astral_plane;
|
||||||
|
|
||||||
|
|
|
@ -221,6 +221,24 @@ attrib_type at_direction = {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
attrib *
|
||||||
|
create_special_direction(region *r, region * rt, int duration,
|
||||||
|
const char *desc, const char *keyword)
|
||||||
|
|
||||||
|
{
|
||||||
|
attrib *a = a_add(&r->attribs, a_new(&at_direction));
|
||||||
|
spec_direction *d = (spec_direction *)(a->data.v);
|
||||||
|
|
||||||
|
d->active = false;
|
||||||
|
d->x = rt->x;
|
||||||
|
d->y = rt->y;
|
||||||
|
d->duration = duration;
|
||||||
|
d->desc = strdup(desc);
|
||||||
|
d->keyword = strdup(keyword);
|
||||||
|
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
/* Moveblock wird zur Zeit nicht über Attribute, sondern ein Bitfeld
|
/* Moveblock wird zur Zeit nicht über Attribute, sondern ein Bitfeld
|
||||||
r->moveblock gemacht. Sollte umgestellt werden, wenn kompliziertere
|
r->moveblock gemacht. Sollte umgestellt werden, wenn kompliziertere
|
||||||
Dinge gefragt werden. */
|
Dinge gefragt werden. */
|
||||||
|
@ -371,12 +389,11 @@ koor_reldirection(int ax, int ay, int bx, int by)
|
||||||
spec_direction *
|
spec_direction *
|
||||||
special_direction(const region * from, const region * to)
|
special_direction(const region * from, const region * to)
|
||||||
{
|
{
|
||||||
spec_direction *sd;
|
|
||||||
const attrib *a = a_findc(from->attribs, &at_direction);
|
const attrib *a = a_findc(from->attribs, &at_direction);
|
||||||
|
|
||||||
while (a!=NULL) {
|
while (a!=NULL) {
|
||||||
sd = (spec_direction *)a->data.v;
|
spec_direction * sd = (spec_direction *)a->data.v;
|
||||||
if (sd->active && sd->x==to->x && sd->y==to->y) return sd;
|
if (sd->x==to->x && sd->y==to->y) return sd;
|
||||||
a = a->nexttype;
|
a = a->nexttype;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -389,7 +406,7 @@ reldirection(const region * from, const region * to)
|
||||||
|
|
||||||
if (dir==NODIRECTION) {
|
if (dir==NODIRECTION) {
|
||||||
spec_direction *sd = special_direction(from, to);
|
spec_direction *sd = special_direction(from, to);
|
||||||
if (sd!=NULL) return D_SPECIAL;
|
if (sd!=NULL && sd->active) return D_SPECIAL;
|
||||||
}
|
}
|
||||||
return dir;
|
return dir;
|
||||||
}
|
}
|
||||||
|
|
|
@ -154,6 +154,9 @@ void runhash(struct region * r);
|
||||||
void free_regionlist(region_list *rl);
|
void free_regionlist(region_list *rl);
|
||||||
void add_regionlist(region_list **rl, struct region *r);
|
void add_regionlist(region_list **rl, struct region *r);
|
||||||
extern struct spec_direction * special_direction(const region * from, const region * to);
|
extern struct spec_direction * special_direction(const region * from, const region * to);
|
||||||
|
extern struct attrib *create_special_direction(struct region *r, struct region *rt,
|
||||||
|
int duration, const char *desc,
|
||||||
|
const char *keyword);
|
||||||
|
|
||||||
int woodcount(const struct region * r);
|
int woodcount(const struct region * r);
|
||||||
int deathcount(const struct region * r);
|
int deathcount(const struct region * r);
|
||||||
|
|
|
@ -3621,10 +3621,10 @@ sp_chaossuction(castorder *co)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
create_special_direction(r, rt->x, rt->y, 2,
|
create_special_direction(r, rt, 2,
|
||||||
"Ein Wirbel aus reinem Chaos zieht über die Region.",
|
"Ein Wirbel aus reinem Chaos zieht über die Region.",
|
||||||
"Wirbel");
|
"Wirbel");
|
||||||
create_special_direction(rt, r->x, r->y, 2,
|
create_special_direction(rt, r, 2,
|
||||||
"Ein Wirbel aus reinem Chaos zieht über die Region.",
|
"Ein Wirbel aus reinem Chaos zieht über die Region.",
|
||||||
"Wirbel");
|
"Wirbel");
|
||||||
|
|
||||||
|
|
|
@ -3,11 +3,11 @@
|
||||||
#include "list.h"
|
#include "list.h"
|
||||||
|
|
||||||
// kernel includes
|
// kernel includes
|
||||||
|
#include <kernel/building.h>
|
||||||
#include <kernel/plane.h>
|
#include <kernel/plane.h>
|
||||||
#include <kernel/region.h>
|
#include <kernel/region.h>
|
||||||
#include <kernel/unit.h>
|
|
||||||
#include <kernel/building.h>
|
|
||||||
#include <kernel/ship.h>
|
#include <kernel/ship.h>
|
||||||
|
#include <kernel/unit.h>
|
||||||
|
|
||||||
// lua includes
|
// lua includes
|
||||||
#include <lua.hpp>
|
#include <lua.hpp>
|
||||||
|
@ -157,6 +157,14 @@ region_next(const region& r, int dir)
|
||||||
return r_connect(&r, (direction_t)dir);
|
return r_connect(&r, (direction_t)dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
region_adddirection(region& r, region &rt, const char * name, const char * info)
|
||||||
|
{
|
||||||
|
create_special_direction(&r, &rt, -1, info, name);
|
||||||
|
spec_direction * sd = special_direction(&r, &rt);
|
||||||
|
sd->active = 1;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
bind_region(lua_State * L)
|
bind_region(lua_State * L)
|
||||||
{
|
{
|
||||||
|
@ -172,6 +180,7 @@ bind_region(lua_State * L)
|
||||||
.property("info", ®ion_getinfo, ®ion_setinfo)
|
.property("info", ®ion_getinfo, ®ion_setinfo)
|
||||||
.property("terrain", ®ion_getterrain)
|
.property("terrain", ®ion_getterrain)
|
||||||
.def("add_notice", ®ion_addnotice)
|
.def("add_notice", ®ion_addnotice)
|
||||||
|
.def("add_direction", ®ion_adddirection)
|
||||||
|
|
||||||
.def("get_flag", ®ion_getflag)
|
.def("get_flag", ®ion_getflag)
|
||||||
.def("set_flag", ®ion_setflag)
|
.def("set_flag", ®ion_setflag)
|
||||||
|
|
|
@ -22,6 +22,8 @@ function test_movement()
|
||||||
r3 = terraform(3, 0, "plain")
|
r3 = terraform(3, 0, "plain")
|
||||||
r4 = terraform(4, 0, "glacier")
|
r4 = terraform(4, 0, "glacier")
|
||||||
|
|
||||||
|
r0:add_direction(r4, "Wirbel", "Nimm die Abkürzung, Luke")
|
||||||
|
|
||||||
r0:set_road(east, 1.0)
|
r0:set_road(east, 1.0)
|
||||||
r1:set_road(west, 1.0)
|
r1:set_road(west, 1.0)
|
||||||
r1:set_road(east, 1.0)
|
r1:set_road(east, 1.0)
|
||||||
|
@ -50,6 +52,10 @@ function test_movement()
|
||||||
ships[i] = add_ship("boat", ocean)
|
ships[i] = add_ship("boat", ocean)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
astra = mkunit(orcs, r0, 1)
|
||||||
|
astra:add_order("NACH Wirbel")
|
||||||
|
astra:add_order("NUMMER EINHEIT astr")
|
||||||
|
|
||||||
foot = mkunit(orcs, r0, 1)
|
foot = mkunit(orcs, r0, 1)
|
||||||
foot:add_order("ROUTE W W")
|
foot:add_order("ROUTE W W")
|
||||||
foot:add_order("NUMMER EINHEIT foot")
|
foot:add_order("NUMMER EINHEIT foot")
|
||||||
|
@ -408,3 +414,6 @@ end
|
||||||
if foot.region ~= w1 then
|
if foot.region ~= w1 then
|
||||||
print "ERROR: Fusseinheit hat ihr NACH nicht korrekt ausgeführt"
|
print "ERROR: Fusseinheit hat ihr NACH nicht korrekt ausgeführt"
|
||||||
end
|
end
|
||||||
|
if astra.region ~= r4 then
|
||||||
|
print "ERROR: Astraleinheit konnte Wirbel nicht benutzen"
|
||||||
|
end
|
||||||
|
|
Loading…
Reference in New Issue