Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: AnnoZone Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

FelixA

Insel-Eroberer

  • »FelixA« ist der Autor dieses Themas

Beiträge: 424

Registrierungsdatum: 14. Januar 2010

  • Nachricht senden

1

Mittwoch, 2. Juni 2010, 10:19

Was ist an meinem Script Falsch?

Was Stimmt an diesem Script nicht?
Hier kommt es:

IINITBLOCK()
{
SET_DIPLOMACY( "CG01", "HUMAN01", -127 );
SET_UNIT_VISIBLE( "Ship0", FALSE );
SET_UNIT_VISIBLE( "Krieger", FALSE );
SET_UNIT_VISIBLE( "ANGREIFER", FALSE );
SET_UNIT_VISIBLE( "FEIND", FALSE );
}
IF PLAYER "HUMAN" INHABITANTCOUNT "ALL" > 1000 THEN
{
SHOWTEXT("HILFE.htm");
SET_UNIT_VISIBLE ("ANGREIFER", TRUE );
SET_UNIT_VISIBLE("Krieger", TRUE);
}
IF OBJECT "FEIND2" KILLED THEN
{
SHOWTEXT("SCHIFFE.htm");
ASSIGN_ALL_SHIPS("HUMAN01","CG01");
ASSIGN_OBJECT("HAUPT","CG01");
SET GERNAL = TRUE;
}
IF OBJECT "FEIND" INHABITANTCOUNT "ALL" < 1 THEN
{
KILLPLAYER("CG01");
}
IF PLAYER "HUMAN" INHABITANTCOUNT "ALL" > 2000 &&
GERNAL == TRUE THEN
{
SET_UNIT_VISIBLE( "FEIND", TRUE);
SHOWTEXT("ZERSTÖRE.htm");
}

es funktioniert nicht!

Admiral Drake

Schatzjäger

Beiträge: 2 698

Registrierungsdatum: 3. November 2004

  • Nachricht senden

2

Mittwoch, 2. Juni 2010, 12:06

also wenn du schon sowas reinstellst, dann nutze mal die Funktion speichern und stell das ganze Skript rein.
Hast du Admiral Drakes Skriptbuch gelesen ?
Wenn nicht -> lesen.

Möglicherweise hast du die Figuren falsch angelegt ?
Aber was nutzt die Raterei, wenn man nicht alles sieht.

Übrigens, der kleinste Schreibfehler genügt und das Sktipt bleibt an der Stelle stehen, aber nach sowas musst du selbst nochmal schauen ...

Ich z.B. würde immer alle Namen GROSS schreiben und keine Umlaute verwenden ...
  Nur wer nichts tut, macht auch keine Fehler. Nicht meckern, sondern anpacken !

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Admiral Drake« (2. Juni 2010, 12:09)


FelixA

Insel-Eroberer

  • »FelixA« ist der Autor dieses Themas

Beiträge: 424

Registrierungsdatum: 14. Januar 2010

  • Nachricht senden

3

Mittwoch, 2. Juni 2010, 15:44

Na gut, hier kommt das ganze Script:

[OBJECT_DEFINE]

OBJECT_STADT "FEIND" 4
OBJECT_STADT "FEIND2" 2
OBJECT_FIGUR "Ship0" 1
OBJECT_FIGUR "HAUPTSCHIFF" 179
OBJECT_STADT "HAUPT" 1
OBJECT_FIGUR "Krieger" 18
OBJECT_FIGUR "ANGREIFER" 2


[AREA_DEFINE]



[PLAYERMAPPER_DEFINE]

"HUMAN01" 0
"PIRAT01" 1
"HAENDLER1" 2
"MONGOLEN01" 3
"CG01" 4
"DUMMYPLAYER" 31


[SCRIPT_KERNEL]

IINITBLOCK()
{
SET_DIPLOMACY( "CG01", "HUMAN01", -127 );
SET_UNIT_VISIBLE( "Ship0", FALSE );
SET_UNIT_VISIBLE( "Krieger", FALSE );
SET_UNIT_VISIBLE( "ANGREIFER", FALSE );
SET_UNIT_VISIBLE( "FEIND", FALSE );
}
IF PLAYER "HUMAN" INHABITANTCOUNT "ALL" > 1000 THEN
{
SHOWTEXT("HILFE.htm");
SET_UNIT_VISIBLE( "ANGREIFER", TRUE );
SET_UNIT_VISIBLE( "Krieger", TRUE );
}
IF OBJECT "FEIND2" KILLED THEN
{
SHOWTEXT("SCHIFFE.htm");
ASSIGN_ALL_SHIPS("HUMAN01","CG01");
ASSIGN_OBJECT("HAUPT","CG01");
SET GERNAL = TRUE;
}
IF OBJECT "FEIND" INHABITANTCOUNT "ALL" < 1 THEN
{
KILLPLAYER( "CG01" );
}
IF PLAYER "HUMAN" INHABITANTCOUNT "ALL" > 2000 &&
GERNAL == TRUE THEN
{
SET_UNIT_VISIBLE( "FEIND", TRUE );
SHOWTEXT("ZERSTÖRE.htm");
}


[SIGNALS]

SCHUETTIINITSIG = TRUE
GERNAL = FALSE
  Die Weiten des Universums sind so unergründlich wie der menschliche Verstand!
_____________________________
Felix
ANNO 2071 M.A.UG.-Chefprogrammierer

Admiral Drake

Schatzjäger

Beiträge: 2 698

Registrierungsdatum: 3. November 2004

  • Nachricht senden

4

Mittwoch, 2. Juni 2010, 15:54

hm, was auffällt ist das komische Zeichen bei INITBLOCK, außerdem hast du immer noch Kleinbuchstaben in den Namen.

Die Idents hinter den OBJECT kann ich nicht prüfen, da kann man einiges falsch machen.
Hast du die szenes.cach gelöscht ?

Läuft das Spiel denn los ? Ist wenigstens das Schiff unsichtbar ?
Bei mir in den Sktipten steht oben immer noch ein SET für die Variablen, ich weiß aber nicht, ob das zwingend erforderlich ist.
  Nur wer nichts tut, macht auch keine Fehler. Nicht meckern, sondern anpacken !

FelixA

Insel-Eroberer

  • »FelixA« ist der Autor dieses Themas

Beiträge: 424

Registrierungsdatum: 14. Januar 2010

  • Nachricht senden

5

Mittwoch, 2. Juni 2010, 15:56

GAR NICHTS LÄUFT!
  Die Weiten des Universums sind so unergründlich wie der menschliche Verstand!
_____________________________
Felix
ANNO 2071 M.A.UG.-Chefprogrammierer

anno-michi

Boardsmutje

Beiträge: 909

Registrierungsdatum: 27. Oktober 2009

  • Nachricht senden

6

Mittwoch, 2. Juni 2010, 16:01

@FelixA:

Wie wäre es, wenn du jetzt einmal das machst, was dir Admiral Drake empfohlen hat: Namen alle GROSS schreiben und die Umlaute in AE, UE oder OE ändern!

Dann versuchst du das ganze nochmal.

Wenns immer noch nicht klappt müsste es wohl daran liegen, dass du das Szen vielleicht in einem falschen Ordner hast, oder die szenes.cach nicht gelöscht hast...

Für uns wäre es hilfreich, wenn du ein bisschen datailliertere Antworten geben würdest.

Denn von " GAR NICHTS LÄUFT! " wird man nicht schlau.
Du musst schon sagen WAS nicht läuft; ist es dien PC? das Spiel, das Szen, oder irgendwas anderes?
  Spannende ANNO Let's Plays und andere Gaming-Streams gibts auf meinem YouTube Kanal! :up:
Schau doch mal vorbei!

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »anno-michi« (2. Juni 2010, 16:02)


FelixA

Insel-Eroberer

  • »FelixA« ist der Autor dieses Themas

Beiträge: 424

Registrierungsdatum: 14. Januar 2010

  • Nachricht senden

7

Mittwoch, 2. Juni 2010, 16:16

Inzwischen klappt alles bis zu dem Zeitpunkt, an dem man 1000 Einwohner hat.
Dort erscheint keine Meldung, und das obwohl ich das Scriptbuch benutzt hab.
  Die Weiten des Universums sind so unergründlich wie der menschliche Verstand!
_____________________________
Felix
ANNO 2071 M.A.UG.-Chefprogrammierer

Larnak

Schatzjäger

Beiträge: 3 158

Registrierungsdatum: 28. Februar 2008

  • Nachricht senden

8

Mittwoch, 2. Juni 2010, 16:19

Warum klappt es denn jetzt plötzlich? Ich dachte
"GAR NICHTS LÄUFT!!!!!"
Du musst schon ein bisschen erzählen, wenn Du Hilfe möchtest :hey:

FelixA

Insel-Eroberer

  • »FelixA« ist der Autor dieses Themas

Beiträge: 424

Registrierungsdatum: 14. Januar 2010

  • Nachricht senden

9

Mittwoch, 2. Juni 2010, 16:23

Also: Ich habe jetzt alles Gross geschrieben, aber die Meldung, läuft immer noch nicht und die Feindliche Stadt ist auch noch sichtbar (alles andere, was ich wollte nicht) und etwas scheint immer noch falsch zu sein!
  Die Weiten des Universums sind so unergründlich wie der menschliche Verstand!
_____________________________
Felix
ANNO 2071 M.A.UG.-Chefprogrammierer

anno-michi

Boardsmutje

Beiträge: 909

Registrierungsdatum: 27. Oktober 2009

  • Nachricht senden

10

Mittwoch, 2. Juni 2010, 16:48

Zitat

Original voin FelixA:

...und die Feindliche Stadt ist auch noch sichtbar...


Du musst die Insel auf der die Stadt ist im Editor anlicken und dann auf "Ausgewählte Insel anzeigen"; Dann geht ein Fenster auf, wo du den Haken bei "Stadt sichtbar" wegmachen musst.
  Spannende ANNO Let's Plays und andere Gaming-Streams gibts auf meinem YouTube Kanal! :up:
Schau doch mal vorbei!

Bomi

Meister der Kleintools

Beiträge: 3 175

Registrierungsdatum: 2. Mai 2003

  • Nachricht senden

11

Mittwoch, 2. Juni 2010, 16:56

Quellcode

1
2
3
[PLAYERMAPPER_DEFINE]
"HUMAN01" 0 
IF PLAYER "HUMAN"

So wird das nix, entweder alle "HUMAN" oder alle "HUMAN01"...
  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« (2. Juni 2010, 16:57)


FelixA

Insel-Eroberer

  • »FelixA« ist der Autor dieses Themas

Beiträge: 424

Registrierungsdatum: 14. Januar 2010

  • Nachricht senden

12

Mittwoch, 2. Juni 2010, 17:31

Danke Es Geht! Aber jetzt noch eine Frage: Wie kriege ich die Meldung wieder weg? über X gehts nicht!
  Die Weiten des Universums sind so unergründlich wie der menschliche Verstand!
_____________________________
Felix
ANNO 2071 M.A.UG.-Chefprogrammierer

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »FelixA« (2. Juni 2010, 17:32)


Admiral Drake

Schatzjäger

Beiträge: 2 698

Registrierungsdatum: 3. November 2004

  • Nachricht senden

13

Mittwoch, 2. Juni 2010, 18:42

na geht doch.
@bomi - ich glaub ich werde alt, hab es gesehen und nicht beachtet :D

@FelixA: das ist die Tücke mit den Bedingungen, deine Bedingung ist ja immer noch wahr, also kommt die Meldung immer wieder.
Da hildt eine zweite Variable, mit der du dir merkst, dass die meldung einmal gezeigt wurde.
  Nur wer nichts tut, macht auch keine Fehler. Nicht meckern, sondern anpacken !

FelixA

Insel-Eroberer

  • »FelixA« ist der Autor dieses Themas

Beiträge: 424

Registrierungsdatum: 14. Januar 2010

  • Nachricht senden

14

Mittwoch, 2. Juni 2010, 19:42

Wie geht das? Ich bin noch nicht so gut im scripten!
  Die Weiten des Universums sind so unergründlich wie der menschliche Verstand!
_____________________________
Felix
ANNO 2071 M.A.UG.-Chefprogrammierer

Barbarella

Schatzjäger

Beiträge: 1 886

Registrierungsdatum: 2. Juli 2005

  • Nachricht senden

15

Donnerstag, 3. Juni 2010, 10:31

Ich habe zwar keine Ahnung von dieser Scriptsprache, aber von Programmierung im Allgemeinen.

Du brauchst einen Schalter, laut Admiral Drakes Scriptbuch zu definieren unter SIGNALS.

Dort baust du so etwas ein wie

SET INH1000 = FALSE;

Die Bedingung der IF-Abfrage ergänzt zu auf

IF PLAYER "HUMAN" INHABITANTCOUNT "ALL" > 1000 && INH1000 == FALSE THEN

wobei && UND bedeutet.

In den Anweisungen unterhalb der IF-Bedingung setzt du als erstes
INH1000 = TRUE
zum Zeichen, daß die Bedingung das erste Mal erfüllt wurde.

Damit wird die Bedingung kein zweites mal wahr, der Text wird nur einmal angezeigt.

Das ist wohlgemerkt nur eine Idee von jemandem, der noch nie ein ANNO-Script geshrieben hat...

anno-michi

Boardsmutje

Beiträge: 909

Registrierungsdatum: 27. Oktober 2009

  • Nachricht senden

16

Donnerstag, 3. Juni 2010, 14:39

@Barbarella:

Du hast alles richtig gesagt! :up:
Ganz schön gut für jemanden, der noch nie ein Anno-Script geschrieben hat!

@FelixA:

Wenn du das nicht ganz verstanden hast, kann ich dir einen Vergleich sagen, mit dem du das mit dem Script verstehen wirst:

Der Computer arbeitet sich rasend schnell von oben bis unten durch das Script durch.
Das geht so schnell, dass man keinen zeitlichen Abstand merkt; deshalb hast du diese Meldung nicht wegklicken können, weil sie so schnell wieder da war.

Stell dir vor, ein Zug fährt eine gewisse Bahnstrecke ab, immer im Kreis.
Eine Weiche (Schalter) lenkt ihn immer wieder in den selben Bahnhof.
Obwohl er ja eigentlich schon alle Leute von dort abgehohlt hat.

Deswegen muss man diese Weiche umstellen, damit der Zug eine andere Route nimmt, bzw. am Bahnhof vorbeifährt ohne stehen zu bleiben.

Bei "FALSE" fährt er immer wieder in den Bahnhof und bleibt dort stehen,
bei "TRUE" sind die Weichen so gestellt, dass er am Bahnhof vorbeifährt - ohne Zwischenstopp.

Zuerst, bevor der Zug anfängt zu fahren, sind dalle Weichen auf "FALSE" gestellt - er fährt in jeden Bahnhof rein und bleibt stehen:

Quellcode

1
IF PLAYER "HUMAN" INHABITANTCOUNT "ALL" > 1000 && BAHNHOF1 == FALSE

Wenn du dann im Script das eingibst:

Quellcode

1
2
3
4
5
IF PLAYER "HUMAN" INHABITANTCOUNT "ALL" > 1000 && BAHNHOF1 == FALSE THEN
{
SHOWTEXT("Bahnhof1.htm";);
SET_UNIT_VISIBLE( "BAHNHOF1", TRUE );
}

Am Bahnhof 1 wird der Zug nie wieder halt machen.

Um jetzt mehrere Bahnhöfe zu besuchen musst du dann allerdings noch im Bahnhof 1 die Weichen dür Bahnhof 2 stellen.

das geschieht so, indem du unter

Quellcode

1
2
3
{
SHOWTEXT("Bahnhof1.htm";);
SET_UNIT_VISIBLE( "BAHNHOF1", TRUE );

noch den Befehl für das Stellen der Weiche auf Bahnhof 2 gibst:

Quellcode

1
2
3
4
5
{
SHOWTEXT("Bahnhof1.htm";);
SET_UNIT_VISIBLE( "BAHNHOF1", TRUE );
SET_UNIT_VISIBLE( "BAHNHOF2", TRUE );
}

Jetzt wird der Bahnhof 2 angefahren.

Und dann wie gehabt:

Quellcode

1
2
3
4
5
6
IF PLAYER "HUMAN" INHABITANTCOUNT "ALL" > 1000 && BAHNHOF[color=red]2[/color] == TRUE THEN
{
SHOWTEXT("Bahnhof2.htm";);
SET_UNIT_VISIBLE( "BAHNHOF2", FALSE );
SET_UNIT_VISIBLE( "BAHNHOF3", TRUE );
}

Und immer so weiter.
Aber bau am Anfang nicht so viele Schalter ein, sonst kommst du leicht durcheinander! ;)

Und nicht vergessen:
bei [SIGNALS] immer schön alle Schalter reinschreiben, und zwar so, wie sie am anfang gestellt sein sollten.
Also in unserem Fall wäre das:

Quellcode

1
2
3
4
5
[SIGNALS]

BAHNHOF1 = FALSE
BAHNHOF2 = FALSE
BAHNHOF2 = FALSE

Ich hoffe ich konnte dir das Prinzip der Schalter ein wenig näher bringen :hey:
:hauwech:
  Spannende ANNO Let's Plays und andere Gaming-Streams gibts auf meinem YouTube Kanal! :up:
Schau doch mal vorbei!

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »anno-michi« (3. Juni 2010, 14:43)


FelixA

Insel-Eroberer

  • »FelixA« ist der Autor dieses Themas

Beiträge: 424

Registrierungsdatum: 14. Januar 2010

  • Nachricht senden

17

Donnerstag, 3. Juni 2010, 15:10

Danke, das war mein erstes längeres Script, das muss wohl am Anfang schiefgehen.
  Die Weiten des Universums sind so unergründlich wie der menschliche Verstand!
_____________________________
Felix
ANNO 2071 M.A.UG.-Chefprogrammierer

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »FelixA« (3. Juni 2010, 15:11)


anno-michi

Boardsmutje

Beiträge: 909

Registrierungsdatum: 27. Oktober 2009

  • Nachricht senden

18

Donnerstag, 3. Juni 2010, 15:13

Das wird schon ;)

ich habe auch lang gebraucht, bis ich das alle verstanden haben - und da auch nur, weil es mir Jemand sehr gut erklärt hat...
  Spannende ANNO Let's Plays und andere Gaming-Streams gibts auf meinem YouTube Kanal! :up:
Schau doch mal vorbei!

Admiral Drake

Schatzjäger

Beiträge: 2 698

Registrierungsdatum: 3. November 2004

  • Nachricht senden

19

Donnerstag, 3. Juni 2010, 15:20

@Barbarella: bis auf paar Syntaxfehler - super :up:
unter Signals bitte kein SET verwenden, nur einfach INH1000 = FALSE

Ds SET steht oben und setzt anscheinend einen Anfangswert, was man bei FALSE scheinbar einsparen kann.

Also - du kannst anfangen, dein erstes Sktipt zu bauen :D
  Nur wer nichts tut, macht auch keine Fehler. Nicht meckern, sondern anpacken !

Annoraner

Schatzjäger

Beiträge: 2 028

Registrierungsdatum: 9. Juli 2007

  • Nachricht senden

20

Donnerstag, 3. Juni 2010, 15:51

@ FelixA:

Bitte lade mal das ganze Szen hoch.
Ich denke da kann noch was anderes ausser dem Skript falsch sein....

Gruss
Annoraner