- Weihnachtsitem (Sonnensegel)

- Iteminfos könenn in den XML-Dateien stehen, brauchen keine eigene Datei mehr
- NEUSTART übernimmt das vorherige Parteialter
This commit is contained in:
Enno Rehling 2004-12-20 22:59:42 +00:00
parent a5239bb241
commit d4da3b1223
10 changed files with 233 additions and 67 deletions

View File

@ -120,6 +120,7 @@ restart_race(unit *u, const race * rc)
unit * nu = addplayer(u->region, f); unit * nu = addplayer(u->region, f);
order ** ordp = &u->orders; order ** ordp = &u->orders;
f->subscription = u->faction->subscription; f->subscription = u->faction->subscription;
f->age = u->faction->age;
fset(f, FFL_RESTART); fset(f, FFL_RESTART);
if (f->subscription) { if (f->subscription) {
sql_print(("UPDATE subscriptions set faction='%s', race='%s' where id=%u;\n", 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 static int
restart(unit * u, struct order * ord) restart_cmd(unit * u, struct order * ord)
{ {
init_tokens(ord); init_tokens(ord);
skip_token(); /* skip keyword */ skip_token(); /* skip keyword */
@ -1091,7 +1092,7 @@ parse_quit(void)
break; break;
case K_RESTART: case K_RESTART:
if (u->number > 0) { if (u->number > 0) {
if (restart(u, ord)!=0) ord = NULL; if (restart_cmd(u, ord)!=0) ord = NULL;
} }
break; break;
} }
@ -2211,35 +2212,42 @@ display_item(faction *f, unit *u, const item_type * itype)
char t[NAMESIZE + 1]; char t[NAMESIZE + 1];
char filename[MAX_PATH]; char filename[MAX_PATH];
const char *name; const char *name;
const char *info;
const char *key;
if (u && *i_find(&u->items, itype) == NULL) return false; if (u && *i_find(&u->items, itype) == NULL) return false;
name = resourcename(itype->rtype, 0); name = resourcename(itype->rtype, 0);
sprintf(filename, "%s/%s/items/%s", resourcepath(), locale_name(f->locale), name); key = mkname("iteminfo", name);
fp = fopen(filename, "r"); info = locale_string(f->locale, key);
if (!fp) {
name = locale_string(f->locale, resourcename(itype->rtype, 0)); if (info==key) {
sprintf(filename, "%s/%s/items/%s", resourcepath(), locale_name(f->locale), name); sprintf(filename, "%s/%s/items/%s", resourcepath(), locale_name(f->locale), name);
fp = fopen(filename, "r"); fp = fopen(filename, "r");
} if (!fp) {
if (!fp) { name = locale_string(f->locale, resourcename(itype->rtype, 0));
name = resourcename(itype->rtype, 0); sprintf(filename, "%s/%s/items/%s", resourcepath(), locale_name(f->locale), name);
sprintf(filename, "%s/%s/items/%s", resourcepath(), locale_name(default_locale), name); fp = fopen(filename, "r");
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); 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", 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; return true;
} }

View File

@ -19,6 +19,7 @@
#include "xerewards.h" #include "xerewards.h"
#include "artrewards.h" #include "artrewards.h"
#include "weapons.h" #include "weapons.h"
#include "speedsail.h"
#include "racespoils.h" #include "racespoils.h"
#if GROWING_TREES #if GROWING_TREES
# include "seed.h" # include "seed.h"
@ -42,6 +43,7 @@ register_items(void)
register_catapultammo(); register_catapultammo();
register_racespoils(); register_racespoils();
register_artrewards(); register_artrewards();
register_speedsail();
} }
void void

View File

@ -175,6 +175,12 @@
<File <File
RelativePath=".\seed.c"> RelativePath=".\seed.c">
</File> </File>
<File
RelativePath=".\speedsail.c">
</File>
<File
RelativePath=".\speedsail.h">
</File>
<File <File
RelativePath=".\weapons.c"> RelativePath=".\weapons.c">
</File> </File>

View File

@ -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 <config.h>
#include <eressea.h>
#include "speedsail.h"
/* kernel includes */
#include <faction.h>
#include <item.h>
#include <message.h>
#include <movement.h>
#include <plane.h>
#include <region.h>
#include <ship.h>
#include <unit.h>
/* util includes */
#include <functions.h>
/* libc includes */
#include <assert.h>
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);
}

View File

@ -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

View File

@ -587,7 +587,7 @@ shipspeed (const ship * sh, const unit * u)
a = a_find(sh->attribs, &at_speedup); a = a_find(sh->attribs, &at_speedup);
while (a != NULL) { while (a != NULL) {
k += a->data.i; k += a->data.sa[0];
a = a->nexttype; a = a->nexttype;
} }

View File

@ -159,10 +159,10 @@ attrib_type at_shiptrail = {
static int static int
age_speedup(attrib *a) age_speedup(attrib *a)
{ {
if(a->data.i > 0) { if (a->data.sa[0] > 0) {
--a->data.i; 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 = { attrib_type at_speedup = {

View File

@ -7,6 +7,19 @@
_a: including article (ein Troll, a troll) _a: including article (ein Troll, a troll)
--> -->
<namespace name="iteminfo">
<string name="speedsail">
<text locale="de">
Setzt eine Einheit dieses Segel auf einem Schiff, so erhöht
sich dessen Reichweite kurzfristig um 50 Regionen.
</text>
<text locale="en">
A unit setting this sail on a ship temporarily increases the
ship's range by 50 regions.
</text>
</string>
</namespace>
<namespace name="school"> <namespace name="school">
<string name="none"> <string name="none">
<text locale="de">Kein Magiegebiet</text> <text locale="de">Kein Magiegebiet</text>
@ -575,6 +588,14 @@
<text locale="de">Katapultmunition</text> <text locale="de">Katapultmunition</text>
<text locale="en">ammunition</text> <text locale="en">ammunition</text>
</string> </string>
<string name="speedsail">
<text locale="de">Sonnensegel</text>
<text locale="en">solar sail</text>
</string>
<string name="speedsail_p">
<text locale="de">Sonnensegel</text>
<text locale="en">solar sails</text>
</string>
<string name="elfspoil"> <string name="elfspoil">
<text locale="de">Elfenohr</text> <text locale="de">Elfenohr</text>
@ -3947,33 +3968,23 @@
</string> </string>
<string name="miracle_doctor"> <string name="miracle_doctor">
<text locale="de"> <text locale="de">
Wenn einem der Alchemist nicht weiterhelfen kann, geht Wenn einem der Alchemist nicht weiterhelfen kann, geht man zu dem
man zu dem gelehrten Tybiedmagier. Seine Tränke und Tinkturen helfen gegen
gelehrten Tybiedmagier. Seine Tränke und Tinkturen alles, was man sonst nicht bekommen kann. Ob nun die kryptische
helfen gegen alles, Formel unter dem Holzschuh des untreuen Ehemannes wirklich geholfen
was man sonst nicht bekommen kann. Ob nun die kryptische hat - nun, der des Lesens nicht mächtige Bauer wird es nie wissen.
Formel unter dem Dem Magier hilft es auf jeden Fall... beim Füllen seines
Holzschuh des untreuen Ehemannes wirklich geholfen hat - Geldbeutels. 50 Silber pro Stufe lassen sich so in einer Woche
nun, der des verdienen.
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.
</text> </text>
<text locale="en"> <text locale="en">
If the local alchemist could not help you, you should If the local alchemist could not help you, you should visit a
visit a scholar of Tybied. His potions and tinctures may help when nothing
scholar of Tybied. His potions and tinctures may help else does. If the cryptic formula under the wooden shoes of the
when nothing unfaithful husband really helped? - well, the peasant, who isn't
else does. If the cryptic formula under the wooden shoes capable of reading, will never know. At least it helped the mage...
of the to fill his purse. In one week he can earn 50 silver per level that
unfaithful husband really helped? - well, the peasant, way.
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.
</text> </text>
</string> </string>
@ -5783,63 +5794,63 @@
<text locale="de">Unbekannte Partei</text> <text locale="de">Unbekannte Partei</text>
<text locale="en">unknown faction</text> <text locale="en">unknown faction</text>
</string> </string>
<string name="spinx00"> <string name="spinx00">
<text locale="de">Das Schiff des Elfen hat ein rotes Segel</text> <text locale="de">Das Schiff des Elfen hat ein rotes Segel</text>
</string> </string>
<string name="spinx01"> <string name="spinx01">
<text locale="de">Der Zwerg hat eine Nuss dabei</text> <text locale="de">Der Zwerg hat eine Nuss dabei</text>
</string> </string>
<string name="spinx02"> <string name="spinx02">
<text locale="de">Die Katze führt eine Hellebarde</text> <text locale="de">Die Katze führt eine Hellebarde</text>
</string> </string>
<string name="spinx03"> <string name="spinx03">
<text locale="de">Das Schiff mit dem grünen Segel liegt links neben dem mit einem weissen Segel</text> <text locale="de">Das Schiff mit dem grünen Segel liegt links neben dem mit einem weissen Segel</text>
</string> </string>
<string name="spinx04"> <string name="spinx04">
<text locale="de">Auf dem Schiff mit grünen Segeln kam der Speerkämpfer</text> <text locale="de">Auf dem Schiff mit grünen Segeln kam der Speerkämpfer</text>
</string> </string>
<string name="spinx05"> <string name="spinx05">
<text locale="de">Der Krieger mit dem Kreis im Wappen hat einen Keks</text> <text locale="de">Der Krieger mit dem Kreis im Wappen hat einen Keks</text>
</string> </string>
<string name="spinx06"> <string name="spinx06">
<text locale="de">Der Krieger des mittleren Schiffs hat ein Schwert</text> <text locale="de">Der Krieger des mittleren Schiffs hat ein Schwert</text>
</string> </string>
<string name="spinx07"> <string name="spinx07">
<text locale="de">Auf dem gelben Segel prankt ein Kreuz als Wappen</text> <text locale="de">Auf dem gelben Segel prankt ein Kreuz als Wappen</text>
</string> </string>
<string name="spinx08"> <string name="spinx08">
<text locale="de">Der Mensch kam mit dem ersten Schiff</text> <text locale="de">Der Mensch kam mit dem ersten Schiff</text>
</string> </string>
<string name="spinx09"> <string name="spinx09">
<text locale="de">Das Schiff mit dem Stern im Wappen liegt neben dem der einen Mandelkern hat</text> <text locale="de">Das Schiff mit dem Stern im Wappen liegt neben dem der einen Mandelkern hat</text>
</string> </string>
<string name="spinx10"> <string name="spinx10">
<text locale="de">Das Schiff des Kriegers, der ein Apfel hat, liegt neben dem, der ein Kreuz als Wappen hat</text> <text locale="de">Das Schiff des Kriegers, der ein Apfel hat, liegt neben dem, der ein Kreuz als Wappen hat</text>
</string> </string>
<string name="spinx11"> <string name="spinx11">
<text locale="de">Der Krieger mit dem Turm im Wappen trägt eine Axt</text> <text locale="de">Der Krieger mit dem Turm im Wappen trägt eine Axt</text>
</string> </string>
<string name="spinx12"> <string name="spinx12">
<text locale="de">Das Schiff des Menschen liegt neben dem blauen Schiff</text> <text locale="de">Das Schiff des Menschen liegt neben dem blauen Schiff</text>
</string> </string>
<string name="spinx13"> <string name="spinx13">
<text locale="de">Das Insekt trägt einen Baum als Wappen</text> <text locale="de">Das Insekt trägt einen Baum als Wappen</text>
</string> </string>
<string name="spinx14"> <string name="spinx14">
<text locale="de">Das Schiff mit dem Stern im Wappen liegt neben dem des Kriegers, der einen Zweihänder führt</text> <text locale="de">Das Schiff mit dem Stern im Wappen liegt neben dem des Kriegers, der einen Zweihänder führt</text>
</string> </string>

View File

@ -202,6 +202,14 @@
<text locale="fr">"heavy fog makes it impossible to leave the region. ($int36($id))"</text> <text locale="fr">"heavy fog makes it impossible to leave the region. ($int36($id))"</text>
<text locale="en">"heavy fog makes it impossible to leave the region. ($int36($id))"</text> <text locale="en">"heavy fog makes it impossible to leave the region. ($int36($id))"</text>
</message> </message>
<message name="use_speedsail" section="events">
<type>
<arg name="unit" type="unit"/>
</type>
<text locale="de">"$unit($unit) setzt ein Sonnensegel. Die Geschwindigkeit des Schiffes erhöht sich dramatisch."</text>
<text locale="fr">"$unit($unit) sets a solar sail. The ship's speed is greatly increased."</text>
<text locale="en">"$unit($unit) sets a solar sail. The ship's speed is greatly increased."</text>
</message>
<message name="use_questkey_wrongregion" section="events"> <message name="use_questkey_wrongregion" section="events">
<type> <type>
<arg name="region" type="region"/> <arg name="region" type="region"/>

View File

@ -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() function test_movement()
west = direction("west") west = direction("west")
east = direction("east") east = direction("east")
@ -302,7 +322,8 @@ function test_fail()
print(f) print(f)
end end
test_movement() test_sail()
-- test_movement()
-- test_fail() -- test_fail()
-- test_handler() -- test_handler()
-- test_parser() -- test_parser()