diff --git a/src/common/gamecode/laws.c b/src/common/gamecode/laws.c
index 9a6ce501b..5cf85bd76 100644
--- a/src/common/gamecode/laws.c
+++ b/src/common/gamecode/laws.c
@@ -120,6 +120,7 @@ restart_race(unit *u, const race * rc)
unit * nu = addplayer(u->region, f);
order ** ordp = &u->orders;
f->subscription = u->faction->subscription;
+ f->age = u->faction->age;
fset(f, FFL_RESTART);
if (f->subscription) {
sql_print(("UPDATE subscriptions set faction='%s', race='%s' where id=%u;\n",
@@ -975,7 +976,7 @@ transfer_faction(faction *f, faction *f2)
}
static int
-restart(unit * u, struct order * ord)
+restart_cmd(unit * u, struct order * ord)
{
init_tokens(ord);
skip_token(); /* skip keyword */
@@ -1091,7 +1092,7 @@ parse_quit(void)
break;
case K_RESTART:
if (u->number > 0) {
- if (restart(u, ord)!=0) ord = NULL;
+ if (restart_cmd(u, ord)!=0) ord = NULL;
}
break;
}
@@ -2211,35 +2212,42 @@ display_item(faction *f, unit *u, const item_type * itype)
char t[NAMESIZE + 1];
char filename[MAX_PATH];
const char *name;
+ const char *info;
+ const char *key;
if (u && *i_find(&u->items, itype) == NULL) return false;
name = resourcename(itype->rtype, 0);
- sprintf(filename, "%s/%s/items/%s", resourcepath(), locale_name(f->locale), name);
- fp = fopen(filename, "r");
- if (!fp) {
- name = locale_string(f->locale, resourcename(itype->rtype, 0));
+ key = mkname("iteminfo", name);
+ info = locale_string(f->locale, key);
+
+ if (info==key) {
sprintf(filename, "%s/%s/items/%s", resourcepath(), locale_name(f->locale), name);
fp = fopen(filename, "r");
- }
- if (!fp) {
- name = resourcename(itype->rtype, 0);
- sprintf(filename, "%s/%s/items/%s", resourcepath(), locale_name(default_locale), name);
- fp = fopen(filename, "r");
- }
- if (!fp) return false;
-
- buf[0]='\0';
- while (fgets(t, NAMESIZE, fp) != NULL) {
- if (t[strlen(t) - 1] == '\n') {
- t[strlen(t) - 1] = 0;
+ if (!fp) {
+ name = locale_string(f->locale, resourcename(itype->rtype, 0));
+ sprintf(filename, "%s/%s/items/%s", resourcepath(), locale_name(f->locale), name);
+ fp = fopen(filename, "r");
}
- strcat(buf, t);
+ if (!fp) {
+ name = resourcename(itype->rtype, 0);
+ sprintf(filename, "%s/%s/items/%s", resourcepath(), locale_name(default_locale), name);
+ fp = fopen(filename, "r");
+ }
+ if (!fp) return false;
+
+ buf[0]='\0';
+ while (fgets(t, NAMESIZE, fp) != NULL) {
+ if (t[strlen(t) - 1] == '\n') {
+ t[strlen(t) - 1] = 0;
+ }
+ strcat(buf, t);
+ }
+ fclose(fp);
+ info = buf;
}
- fclose(fp);
- name = buf;
ADDMSG(&f->msgs, msg_message("displayitem", "weight item description",
- itype->weight/1000, itype->rtype, strdup(name)));
+ itype->weight/1000, itype->rtype, strdup(info)));
return true;
}
diff --git a/src/common/items/items.c b/src/common/items/items.c
index 740125e05..e1c90bc94 100644
--- a/src/common/items/items.c
+++ b/src/common/items/items.c
@@ -19,6 +19,7 @@
#include "xerewards.h"
#include "artrewards.h"
#include "weapons.h"
+#include "speedsail.h"
#include "racespoils.h"
#if GROWING_TREES
# include "seed.h"
@@ -42,6 +43,7 @@ register_items(void)
register_catapultammo();
register_racespoils();
register_artrewards();
+ register_speedsail();
}
void
diff --git a/src/common/items/items.vcproj b/src/common/items/items.vcproj
index 51d357868..093c178dc 100644
--- a/src/common/items/items.vcproj
+++ b/src/common/items/items.vcproj
@@ -175,6 +175,12 @@
+
+
+
+
diff --git a/src/common/items/speedsail.c b/src/common/items/speedsail.c
new file mode 100644
index 000000000..08afc0fc0
--- /dev/null
+++ b/src/common/items/speedsail.c
@@ -0,0 +1,84 @@
+/* vi: set ts=2:
+ *
+ *
+ * Eressea PB(E)M host Copyright (C) 1998-2003
+ * Christian Schlittchen (corwin@amber.kn-bremen.de)
+ * Katja Zedel (katze@felidae.kn-bremen.de)
+ * Henning Peters (faroul@beyond.kn-bremen.de)
+ * Enno Rehling (enno@eressea-pbem.de)
+ * Ingo Wilken (Ingo.Wilken@informatik.uni-oldenburg.de)
+ *
+ * This program may not be used, modified or distributed without
+ * prior permission by the authors of Eressea.
+ */
+
+#include
+#include
+#include "speedsail.h"
+
+/* kernel includes */
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+/* util includes */
+#include
+
+/* libc includes */
+#include
+
+static int
+use_speedsail(struct unit * u, const struct item_type * itype, int amount, struct order * ord)
+{
+ struct plane * p = rplane(u->region);
+ unused(amount);
+ unused(itype);
+ if (p!=NULL) {
+ ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "use_realworld_only", ""));
+ return EUNUSABLE;
+ } else {
+ if (u->ship) {
+ attrib * a = a_find(u->ship->attribs, &at_speedup);
+ if (a!=NULL) {
+ a = a_add(&u->ship->attribs, a_new(&at_speedup));
+ a->data.sa[0] = 50; /* speed */
+ a->data.sa[1] = 50; /* decay */
+ ADDMSG(&u->faction->msgs, msg_message("use_speedsail", "unit", u));
+ return 0;
+ } else {
+ cmistake(u, ord, 211, MSG_EVENT);
+ }
+ } else {
+ cmistake(u, ord, 144, MSG_EVENT);
+ }
+ return EUNUSABLE;
+ }
+}
+
+static resource_type rt_speedsail = {
+ { "speedsail", "speedsail_p" },
+ { "speedsail", "speedsail_p" },
+ RTF_ITEM,
+ &res_changeitem
+};
+
+
+item_type it_speedsail = {
+ &rt_speedsail, /* resourcetype */
+ 0, 0, 0, /* flags, weight, capacity */
+ NULL, /* construction */
+ &use_speedsail,
+ NULL,
+ NULL
+};
+
+void
+register_speedsail(void)
+{
+ it_register(&it_speedsail);
+}
diff --git a/src/common/items/speedsail.h b/src/common/items/speedsail.h
new file mode 100644
index 000000000..0c9da1758
--- /dev/null
+++ b/src/common/items/speedsail.h
@@ -0,0 +1,26 @@
+/* vi: set ts=2:
+ *
+ *
+ * Eressea PB(E)M host Copyright (C) 1998-2003
+ * Christian Schlittchen (corwin@amber.kn-bremen.de)
+ * Katja Zedel (katze@felidae.kn-bremen.de)
+ * Henning Peters (faroul@beyond.kn-bremen.de)
+ * Enno Rehling (enno@eressea-pbem.de)
+ * Ingo Wilken (Ingo.Wilken@informatik.uni-oldenburg.de)
+ *
+ * This program may not be used, modified or distributed without
+ * prior permission by the authors of Eressea.
+ */
+
+#ifndef H_ITM_SPEEDVIAL
+#define H_ITM_SPEEDVIAL
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern void register_speedsail(void);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/common/kernel/eressea.c b/src/common/kernel/eressea.c
index 694ad372e..312914649 100644
--- a/src/common/kernel/eressea.c
+++ b/src/common/kernel/eressea.c
@@ -587,7 +587,7 @@ shipspeed (const ship * sh, const unit * u)
a = a_find(sh->attribs, &at_speedup);
while (a != NULL) {
- k += a->data.i;
+ k += a->data.sa[0];
a = a->nexttype;
}
diff --git a/src/common/kernel/movement.c b/src/common/kernel/movement.c
index 2a3c520c5..776eae61e 100644
--- a/src/common/kernel/movement.c
+++ b/src/common/kernel/movement.c
@@ -159,10 +159,10 @@ attrib_type at_shiptrail = {
static int
age_speedup(attrib *a)
{
- if(a->data.i > 0) {
- --a->data.i;
+ if (a->data.sa[0] > 0) {
+ a->data.sa[0] = a->data.sa[0] - a->data.sa[1];
}
- return a->data.i;
+ return a->data.sa[0]>0;
}
attrib_type at_speedup = {
diff --git a/src/res/de/strings.xml b/src/res/de/strings.xml
index 6ac40b431..146a16243 100644
--- a/src/res/de/strings.xml
+++ b/src/res/de/strings.xml
@@ -7,6 +7,19 @@
_a: including article (ein Troll, a troll)
-->
+
+
+
+ Setzt eine Einheit dieses Segel auf einem Schiff, so erhöht
+ sich dessen Reichweite kurzfristig um 50 Regionen.
+
+
+ A unit setting this sail on a ship temporarily increases the
+ ship's range by 50 regions.
+
+
+
+
Kein Magiegebiet
@@ -575,6 +588,14 @@
Katapultmunition
ammunition
+
+ Sonnensegel
+ solar sail
+
+
+ Sonnensegel
+ solar sails
+
Elfenohr
@@ -3947,33 +3968,23 @@
- Wenn einem der Alchemist nicht weiterhelfen kann, geht
- man zu dem
- gelehrten Tybiedmagier. Seine Tränke und Tinkturen
- helfen gegen alles,
- was man sonst nicht bekommen kann. Ob nun die kryptische
- Formel unter dem
- Holzschuh des untreuen Ehemannes wirklich geholfen hat -
- nun, der des
- Lesens nicht mächtige Bauer wird es nie wissen. Dem
- Magier hilft es
- auf jeden Fall... beim Füllen seines Geldbeutels. 50
- Silber pro Stufe
- lassen sich so in einer Woche verdienen.
+ Wenn einem der Alchemist nicht weiterhelfen kann, geht man zu dem
+ gelehrten Tybiedmagier. Seine Tränke und Tinkturen helfen gegen
+ alles, was man sonst nicht bekommen kann. Ob nun die kryptische
+ Formel unter dem Holzschuh des untreuen Ehemannes wirklich geholfen
+ hat - nun, der des Lesens nicht mächtige Bauer wird es nie wissen.
+ Dem Magier hilft es auf jeden Fall... beim Füllen seines
+ Geldbeutels. 50 Silber pro Stufe lassen sich so in einer Woche
+ verdienen.
- If the local alchemist could not help you, you should
- visit a
- scholar of Tybied. His potions and tinctures may help
- when nothing
- else does. If the cryptic formula under the wooden shoes
- of the
- unfaithful husband really helped? - well, the peasant,
- who isn't
- capable of reading, will never know. At least it helped
- the mage...
- to fill his purse. In one week he can earn 50 silver per
- level that way.
+ If the local alchemist could not help you, you should visit a
+ scholar of Tybied. His potions and tinctures may help when nothing
+ else does. If the cryptic formula under the wooden shoes of the
+ unfaithful husband really helped? - well, the peasant, who isn't
+ capable of reading, will never know. At least it helped the mage...
+ to fill his purse. In one week he can earn 50 silver per level that
+ way.
@@ -5783,63 +5794,63 @@
Unbekannte Partei
unknown faction
-
+
Das Schiff des Elfen hat ein rotes Segel
-
+
Der Zwerg hat eine Nuss dabei
-
+
Die Katze führt eine Hellebarde
-
+
Das Schiff mit dem grünen Segel liegt links neben dem mit einem weissen Segel
-
+
Auf dem Schiff mit grünen Segeln kam der Speerkämpfer
-
+
Der Krieger mit dem Kreis im Wappen hat einen Keks
-
+
Der Krieger des mittleren Schiffs hat ein Schwert
-
+
Auf dem gelben Segel prankt ein Kreuz als Wappen
-
+
Der Mensch kam mit dem ersten Schiff
-
+
Das Schiff mit dem Stern im Wappen liegt neben dem der einen Mandelkern hat
-
+
Das Schiff des Kriegers, der ein Apfel hat, liegt neben dem, der ein Kreuz als Wappen hat
-
+
Der Krieger mit dem Turm im Wappen trägt eine Axt
-
+
Das Schiff des Menschen liegt neben dem blauen Schiff
-
+
Das Insekt trägt einen Baum als Wappen
-
+
Das Schiff mit dem Stern im Wappen liegt neben dem des Kriegers, der einen Zweihänder führt
diff --git a/src/res/messages.xml b/src/res/messages.xml
index 25d81f1b6..c00b0d662 100644
--- a/src/res/messages.xml
+++ b/src/res/messages.xml
@@ -202,6 +202,14 @@
"heavy fog makes it impossible to leave the region. ($int36($id))"
"heavy fog makes it impossible to leave the region. ($int36($id))"
+
+
+
+
+ "$unit($unit) setzt ein Sonnensegel. Die Geschwindigkeit des Schiffes erhöht sich dramatisch."
+ "$unit($unit) sets a solar sail. The ship's speed is greatly increased."
+ "$unit($unit) sets a solar sail. The ship's speed is greatly increased."
+
diff --git a/src/scripts/samples.lua b/src/scripts/samples.lua
index df539be66..d1e463c43 100644
--- a/src/scripts/samples.lua
+++ b/src/scripts/samples.lua
@@ -1,3 +1,23 @@
+function test_sail()
+ r0 = terraform(0, 0, "plain")
+
+ orcs = add_faction("enno@eressea.de", "orc", "de")
+ orcs.age = 20
+
+ orc = add_unit(orcs, r0)
+ orc.number = 1
+ orc:add_item("speedsail", orc.number)
+
+ orc:clear_orders()
+ orc:add_order("NUMMER PARTEI orcs")
+ orc:add_order("NUMMER EINHEIT orc")
+ orc:add_order("BENENNE EINHEIT Orks")
+ orc:add_order("ZEIGEN \"Sonnensegel\"")
+
+ process_orders()
+ write_reports()
+end
+
function test_movement()
west = direction("west")
east = direction("east")
@@ -302,7 +322,8 @@ function test_fail()
print(f)
end
-test_movement()
+test_sail()
+-- test_movement()
-- test_fail()
-- test_handler()
-- test_parser()