Sie sind nicht angemeldet.

Bomi

Meister der Kleintools

  • »Bomi« ist der Autor dieses Themas

Beiträge: 3 175

Registrierungsdatum: 2. Mai 2003

  • Nachricht senden

1

Sonntag, 23. April 2006, 04:27

Abfrage umdrehen?

Man kann ja mit

IF AREA "X" TOUCHED_BY_SHIP_FROM "PLAYER"

abfragen, ob ein Schiff eines bestimmten Spielers sich in einem bestimmten Bereich befindet. Davon brauche ich genau das Gegenteil: Ich möchte Anweisungen ausführen, wenn sich KEIN Schiff des Players im betreffenden Bereich befindet. Folgendes habe ich erfolglos versucht, um das Ergebnis umzudrehen:

IF != AREA "X" TOUCHED_BY_SHIP_FROM "PLAYER"
IF !! AREA "X" TOUCHED_BY_SHIP_FROM "PLAYER"
IF AREA "X" TOUCHED_BY_SHIP_FROM "PLAYER" == FALSE
IF AREA "X" TOUCHED_BY_SHIP_FROM "PLAYER" == 0

Jemand sonst noch 'ne Idee?
  ATH, Bomi

Contests: 2008 BEC BOC 1602 | 2007 BEC BOC | 2006 BEC BOC | 2005 BEC BOC | 2004 BEC

ANNOTunesANNOToolsMetropolaris, Georgolaris1602-Zeugs1503-SzenarienDieter's 1503-Editor

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Bomi« (23. April 2006, 04:28)


annokrat

Schatzjäger

Beiträge: 4 772

Registrierungsdatum: 15. November 2003

  • Nachricht senden

2

Sonntag, 23. April 2006, 06:32

da hast du sicher keine chance.
ich bin an ähnlichen dingen auch schon verzweifelt, z.b. würde ich gern abfragen wie viel mhhs ein spieler auf einer insel bereits gebaut hat, wobei schon der bezug auf eine insel die md-ler offensichtlich überfordert hat. schau dir die originalskripte an, sie sind an "einfacher" (ich bin stolz auf meine höffliche formulierung) struktur kaum zu übertreffen.
wenn du dann noch irgendwelche skriptbefehle, die erweiterete möglichkeiten bieten könnten,testest, dann wirst du feststellen, dass sie nicht funktionieren.

leider sind skripte wie in "schnitzeljagd" oder "feuerberge" das übliche, und nur diese befehle wurden halbwegs zum laufen gebracht.

annokrat
  anno 1503, das beste anno aller zeiten.
anno 1701, das anno für ewige anfänger.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »annokrat« (23. April 2006, 12:22)


Bomi

Meister der Kleintools

  • »Bomi« ist der Autor dieses Themas

Beiträge: 3 175

Registrierungsdatum: 2. Mai 2003

  • Nachricht senden

3

Sonntag, 23. April 2006, 08:01

Zitat

Original von annokrat
da hast du sicher keine chance

Doch, gerade nach stundenlanger Fummelei geschafft :P

Es ging darum, dass jedesmal, wenn ein Schiff eine Insel anläuft, einmal eine Anweisung ausgeführ werden soll. Mit "IF AREA TOUCHED_BY_SHIP_FROM" würde die Anweisung aber solange ausgeführt werden, wie das Schiff sich in AREA befindet. Es war also ein Flag notwendig, das zusätzlich abgefragt werden muss:

Quellcode

1
2
3
4
5
6
IF FLAG == FALSE &&
   AREA "X" TOUCHED_BY_SHIP_FROM "PLAYER" THEN
{
  MACHIRGENDWAS;
  FLAG = TRUE;
}
Wenn das Schiff nu die Insel anläuft, wird einmal die Anweisung ausgeführt. Das Flag muss aber zurückgesetzt werden, sobald das Schiff außerhalb der AREA ist, sonst funktioniert die obige Abfrage beim nächsten Anlaufen der Insel ja nicht mehr (FLAG wäre immer noch TRUE).

Habe das jetzt so gelöst: Um die Insel herum sind oben, unten, links und rechts 20 Einheiten breite Streifen gelegt und als AREAs definiert (I= Insel, O,U,L,R= Streifen/AREAs):

OOOOOOOOOOOO
OOOOOOOOOOOO
LLIIIIIIIIRR
LLIIIIIIIIRR
LLIIIIIIIIRR
LLIIIIIIIIRR
UUUUUUUUUUUU
UUUUUUUUUUUU


Wenn das Schiff jetzt von der Insel ablegt, muss es diese AREAs durchqueren. Das kann man wiederum mit "IF AREA TOUCHED_BY_SHIP_FROM" abfangen und das Flag zurücksetzen:

Quellcode

1
2
3
4
5
6
7
IF AREA "OBEN" TOUCHED_BY_SHIP_FROM "PLAYER" || 
   AREA "UNTEN" TOUCHED_BY_SHIP_FROM "PLAYER" || 
   AREA "LINKS" TOUCHED_BY_SHIP_FROM "PLAYER" || 
   AREA "RECHTS" TOUCHED_BY_SHIP_FROM "PLAYER" THEN
{
  FLAG = FALSE;
}
Klimmzüge am Brotkasten, aber egal, funktioniert :konfus:

Edit: Ansonste haste recht, was MD da mit der Scriptsprache abgeliefert hat, ist unter aller Sau ;-(
  ATH, Bomi

Contests: 2008 BEC BOC 1602 | 2007 BEC BOC | 2006 BEC BOC | 2005 BEC BOC | 2004 BEC

ANNOTunesANNOToolsMetropolaris, Georgolaris1602-Zeugs1503-SzenarienDieter's 1503-Editor

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Bomi« (23. April 2006, 08:04)


annokrat

Schatzjäger

Beiträge: 4 772

Registrierungsdatum: 15. November 2003

  • Nachricht senden

4

Sonntag, 23. April 2006, 12:39

dass du mit work-arounds zum ziel kommst, ist mir klar. ich nutze diesen weg auch. allerdings wuchsen bei mir dadurch manche skripte ungeahnter grösse heran und konnten nicht mehr von 1503 ausgeführt werden. ich überschritt auch schon die maximale variablenzahl.
ursache war eine ähnliche konstruktion mit areas um inseln herum um eine relativ einfache information zu erhalten.

könntest du nicht über die ganze insel ein area drüberlegen, bis zum format 256x256 sollte dies doch gelingen.
musst aber, nach meiner erinnerung, beachten, dass ein area maximal 255 einheiten ausdehnung haben kann.

annokrat
  anno 1503, das beste anno aller zeiten.
anno 1701, das anno für ewige anfänger.

Bomi

Meister der Kleintools

  • »Bomi« ist der Autor dieses Themas

Beiträge: 3 175

Registrierungsdatum: 2. Mai 2003

  • Nachricht senden

5

Montag, 24. April 2006, 06:47

Zitat

Original von annokrat
könntest du nicht über die ganze insel ein area drüberlegen, bis zum format 256x256 sollte dies doch gelingen.

Wenn das Schiff die Insel erreicht, befindet es sich direkt in zwei Areas gleichzeitig, wenn es die Insel verläßt, wird also nicht mehr der benötigte Area-Wechsel zum Zurücksetzen des Flags ausgelöst - außerdem habe ich die Erfahrung gemacht, dass es bei sich überschneidenden Areas mitunter Probleme gibt, die Areas werden dann einfach nicht erkannt...
  ATH, Bomi

Contests: 2008 BEC BOC 1602 | 2007 BEC BOC | 2006 BEC BOC | 2005 BEC BOC | 2004 BEC

ANNOTunesANNOToolsMetropolaris, Georgolaris1602-Zeugs1503-SzenarienDieter's 1503-Editor

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Bomi« (24. April 2006, 06:47)


drkohler

Master of Editor

Beiträge: 1 578

Registrierungsdatum: 18. Juni 2003

  • Nachricht senden

6

Montag, 24. April 2006, 11:51

Zitat

Original von Bomi
Wenn das Schiff die Insel erreicht, befindet es sich direkt in zwei Areas gleichzeitig, wenn es die Insel verläßt, wird also nicht mehr der benötigte Area-Wechsel zum Zurücksetzen des Flags ausgelöst - außerdem habe ich die Erfahrung gemacht, dass es bei sich überschneidenden Areas mitunter Probleme gibt, die Areas werden dann einfach nicht erkannt...
Das ist richtig (sollte eigentlich im Readme stehen): Areas dürfen sich nicht berühren/überschneiden...

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »drkohler« (24. April 2006, 11:51)