- Intakte Straßen trotz zerstörter Karawanserei
This commit is contained in:
Enno Rehling 2004-10-17 21:44:26 +00:00
parent 94a703a375
commit 3858781bd5
3 changed files with 56 additions and 41 deletions

View File

@ -841,20 +841,7 @@ gebaeude_stuerzt_ein(region * r, building * b)
int opfer = 0;
int road = 0;
struct message * msg;
/*
"$building($crashed) stürzte ein.$if($road," Beim Einsturz wurde die halbe Straße vernichtet.","")$if($victims,"$int($victims) $if($eq($victims,1),"ist","sind"),"") zu beklagen."
*/
/* Falls Karawanserei, Damm oder Tunnel einstürzen, wird die schon
* gebaute Straße zur Hälfte vernichtet */
for (d=0;d!=MAXDIRECTIONS;++d) if (rroad(r, d) > 0 &&
(b->type == bt_find("caravan") ||
b->type == bt_find("dam") ||
b->type == bt_find("tunnel")))
{
rsetroad(r, d, rroad(r, d) / 2);
road = 1;
}
for (u = r->units; u; u = u->next) {
if (u->building == b) {
int loss = 0;
@ -873,6 +860,15 @@ gebaeude_stuerzt_ein(region * r, building * b)
}
}
/* Falls Karawanserei, Damm oder Tunnel einstürzen, wird die schon
* gebaute Straße zur Hälfte vernichtet */
if (b->type == bt_find("caravan") || b->type == bt_find("dam") || b->type == bt_find("tunnel")) {
for (d=0;d!=MAXDIRECTIONS;++d) if (rroad(r, d) > 0) {
road = 1;
/* vernichtung findet erst in destroy_building statt! */
break;
}
}
msg = msg_message("buildingcrash", "region building opfer road", r, b, opfer, road);
add_message(&r->msgs, msg);
for (u=r->units; u; u=u->next) {

View File

@ -469,6 +469,16 @@ void
destroy_building(building * b)
{
unit *u;
direction_t d;
static const struct building_type * bt_caravan, * bt_dam, * bt_tunnel;
boolean init = false;
if (!init) {
init = true;
bt_caravan = bt_find("caravan");
bt_dam = bt_find("dam");
bt_tunnel = bt_find("tunnel");
}
if (!bfindhash(b->no)) return;
for (u=b->region->units; u; u=u->next) {
@ -479,6 +489,15 @@ destroy_building(building * b)
update_lighthouse(b);
bunhash(b);
/* Falls Karawanserei, Damm oder Tunnel einstürzen, wird die schon
* gebaute Straße zur Hälfte vernichtet */
if (b->type == bt_caravan || b->type == bt_dam || b->type == bt_tunnel) {
region * r = b->region;
for (d=0;d!=MAXDIRECTIONS;++d) if (rroad(r, d) > 0) {
rsetroad(r, d, rroad(r, d) / 2);
}
}
#if 0 /* Memoryleak. Aber ohne klappt das Rendern nicht! */
removelist(&b->region->buildings, b);
#endif

View File

@ -1366,8 +1366,8 @@ travel(unit * u, region * next, int flucht, region_list ** routep)
ut = getunit(first, u->faction);
if (ut) {
boolean found = false;
if (get_keyword(ut->thisorder) == K_DRIVE
&& !fval(ut, UFL_LONGACTION) && !LongHunger(ut)) {
if (get_keyword(ut->thisorder) == K_DRIVE) {
if (!fval(ut, UFL_LONGACTION) && !LongHunger(ut)) {
init_tokens(ut->thisorder);
skip_token();
u2 = getunit(first, ut->faction);
@ -1376,8 +1376,7 @@ travel(unit * u, region * next, int flucht, region_list ** routep)
add_message(&u->faction->msgs, new_message(
u->faction, "transport%u:unit%u:target%r:start%r:end",
u, ut, first, current));
if(!(terrain[current->terrain].flags & WALK_INTO)
&& get_item(ut, I_HORSE)) {
if (!(terrain[current->terrain].flags & WALK_INTO) && get_item(ut, I_HORSE)) {
cmistake(u, u->thisorder, 67, MSG_MOVE);
cmistake(ut, ut->thisorder, 67, MSG_MOVE);
continue;
@ -1395,6 +1394,7 @@ travel(unit * u, region * next, int flucht, region_list ** routep)
}
}
}
}
if (!found) {
if (cansee(u->faction, u->region, ut, 0)) {
cmistake(u, u->thisorder, 90, MSG_MOVE);