s2ext

Bitte logg dich ein oder registriere dich.

Einloggen mit Benutzername, Passwort und Sitzungslänge
Erweiterte Suche  

Neuigkeiten:

Fehler und Spammer oder Probleme beim Login hier melden.

Autor Thema: Zufallsereignis Invasionen  (Gelesen 5138 mal)

trewq

  • Newbie
  • *
  • Beiträge: 31
Zufallsereignis Invasionen
« am: Februar 18, 2012, 15:47:52 Nachmittag »

Nachdem mir aufgefallen ist, dass die Zufallsmaps nach einigen Spieltagen kaum noch Herausforderungen darstellen habe ich mal ein Skript erstellt, welches für zufällige Invasionen seitens einiger Eingeborer sorgt. Die Invasionen orientieren sich stark an dem Zufallsevent mit den angeschwemmten Kisten. Jedoch landet in diesem Fall ein Segelfloß auf der Insel. Mit dabei sind zwischen einem und drei aggressiven Eingeborenen, welche das ganze etwas interessanter werden lassen sollen. Wenn die Invasoren nicht alle vernichtet werden verschwinden diese nach einigen Tagen wieder (mitsamt dem Boot versteht sich). Wenn man sie alle tötet bleibt das Boot erhalten. Im Boot sind Items eingelagert.
[spoiler:1m124iwj]Wer schnell ist kann die Items natürlich auch einfach stehlen und warten bis die Eingeborenen von alleine abziehen
Die ersten 10 Tage nach dem Laden des Skripts gibt es noch keine Invasionen, damit der Spieler etwas Zeit hat sich vorzubereiten[/spoiler:1m124iwj]
Ein bekannter unerwünschter Effekt tritt jedoch auf: Da die aggressiven Eingeborenen und die Krieger ständig ihre ID ändern kann ich diese nicht gezielt löschen, sondern muss alle aggressiven Eingeborenen löschen. Bei Zufallsmaps ist das kein Problem, da dort ansonsten keine aggressiven Eingeborenen bzw Krieger auftauchen. Bei selbst erstellten Maps rate ich von der Verwendung dieses Skripts jedoch ab, sofern dort aggressive Eingeborene (IDs 49-52) oder Krieger (IDs 53-56) vorkommen.

Verendung des Skripts:
    downloaden
    in den Ordner modsS2Extsysscripts verschieben
    per
addscript oder extendscript in die gewünschte Map einfügen[/list]

Ich bitte um Kommentare, was ihr vom Skript haltet, Bugs, Fragen, usw.
« Letzte Änderung: Januar 01, 1970, 01:00:00 Vormittag von Guest »
Gespeichert

Utopia

  • Newbie
  • *
  • Beiträge: 24
Re: Zufallsereignis Invasionen
« Antwort #1 am: Februar 22, 2012, 13:17:46 Nachmittag »

Hey, du kannst doch die ID der erstellten Objekte bzw. Units einer Variablen zuweisen lassen mit $objid = create (object, 1); als bespiel... Weil der Befehl Create erstellt ein Object Unit oder Info und gibt dabei auch die ID als Wert zurück, die du wie im Beispiel erhaten kannst. Somit hättest immer die IDs von den besagten Eingeborenen gespeichert und könntest auf diese zugreifen ;) Hilfts dir was um das Problem mit dem Löschen genau dieser Eingeborenen zu beseitigen?

Greetz Utopia
« Letzte Änderung: Januar 01, 1970, 01:00:00 Vormittag von Guest »
Gespeichert

trewq

  • Newbie
  • *
  • Beiträge: 31
Re: Zufallsereignis Invasionen
« Antwort #2 am: Februar 22, 2012, 17:25:11 Nachmittag »

Das Problem bei den EIngeborenen ist, dass sie ihre ID ändern, nachdem sie erstellt wurden (lässt sich wunderbar im Debugmodus beobachten). Es nutzt also nichts die ID zu speichern, mit der sie starten (Das hatte ich Anfangs auch versucht ;) ,auch zum prüfen, ob noch Angreifer da sind. Allerdings tauchte dann immer das Problem auf, dass die ID´s nicht existierten, obwohl mich genau diese Einheiten gerade beschossen haben auf einer ansonsten vollkommen leeren Insel). Notwendig wäre es die ID zu haben, mit der die Unit zu dem Zeitpunkt unterwegs ist, zu dem sie gelöscht werden soll.
Das Ändern der IDs geschieht, da die aggressiven Eingeborenen eigentlich aus 4 verschiedenen Einheiten bestehen. Solange man außer Sicht ist behalten sie ihre Ursprungsid. Sobald der Spieler entdeckt wird wird aus dem aggressiven Eingeborenen jedoch ein Bogenschütze. Sprich die erstellte Unit löscht sich selbst und erstellt automatisch eine neue, welche natürlich auch eine neue ID hat. Auch wenn die Unit in den Nahkampf geht wird sie ersetzt. Wodurch sich die ID wieder ändert. Genauso bei der Flucht.
Deshalb muss ich auch nur für die aggressiven  Eingeborenen gleich eine Radikalkur bei 4 verschiedenen Units machen, da ich ja nicht weiß, in welchem Modus sich  der Eingeborene gerade befindet, sprich welche Einheit gerade existiert. Der User sieht jedoch immer nur eine Unit und merkt gar nicht, dass er es eigentlich mit bis zu 4 verschiedenen Units zu tun hat.

Beim Boot wende ich übrigens genau die von die beschriebene Methode an. (Schließlich muss auch dieses bei einem Rückzug wieder gelöscht werden)  Da funktioniert das auch wunderbar, da ein Boot seine ID behält.

Krieger und aggressive Eingeborene weisen hier somit eine (äußerst unangenehme) Besonderheit auf. Andere Units wären kein Problem.

Würde ich also Löwen oder Raptoren nehmen würde das mit dem ID merken funktionieren. Nur kann ich schlecht argumentieren, dass die mit dem Boot gekommen sind  :lol:
« Letzte Änderung: Januar 01, 1970, 01:00:00 Vormittag von Guest »
Gespeichert

Utopia

  • Newbie
  • *
  • Beiträge: 24
Re: Zufallsereignis Invasionen
« Antwort #3 am: Februar 22, 2012, 17:57:48 Nachmittag »

Meine Idee wäre noch zu schauen ob diese Eingeborenen diese gebrauchten IDs alle vormerken, sprich im Editor ma gucken wenn du nen Eingeborenen erstellst und du danach eine weitere Unit erstellst, ob ein größerer Sprung zwischen den ID Nummern besteht..
« Letzte Änderung: Januar 01, 1970, 01:00:00 Vormittag von Guest »
Gespeichert

trewq

  • Newbie
  • *
  • Beiträge: 31
Re: Zufallsereignis Invasionen
« Antwort #4 am: Februar 22, 2012, 19:43:58 Nachmittag »

Die Eingeborenen nehmen anscheinend die nächsthöhere freie(!) ID an. Schließlich wird einfach eine neue Unit gespawnt. Das bringt mich aber nicht weiter. Selbst wenn ich per loop("units") {$highestid=loop_id();} die derzeit höchste ID herausfinden könnte, da die Eingeborenen kein Ereignis auslösen, wenn sie sich löschen (Und erst recht kein globales Ereignis. Ein lokales Ereignis könnte ich mit einem Script nämlich ebenfalls nicht abfangen, da dies nur bei der entsprechenden Unit auftreten würde, während mein Script ja irgendwo auf der Map, z.B. in einer Info oder auch direkt beim Spieler platziert ist.). Ich kann einen ID-Wechsel also nicht abfangen. Denn wenn ich das könnte, dann wäre es evtl möglich mit der gerade beschriebenen Schleife die derzeit höchste ID abzufragen. Die neue Unit hätte demnach $highestid+1 als ID. Natürlich nur, wenn diese Schleife schnell genug abläuft, ohne dass in der Zwischenzeit eine neue Unit irgendwo anders auf der Map entsteht.
« Letzte Änderung: Januar 01, 1970, 01:00:00 Vormittag von Guest »
Gespeichert

Utopia

  • Newbie
  • *
  • Beiträge: 24
Re: Zufallsereignis Invasionen
« Antwort #5 am: Februar 22, 2012, 23:33:57 Nachmittag »

Das is natürlich blöd gemacht, dass das Anhand der Generierung einer neuen Unit erfolgt und dadurch natürlich mit höherer ID . Ne Frage zwischendrin, ich hab noch nie Eingeborene beim Mappen gebraucht. Wenn du also den aggressiven Eingeborenen erstellst, dann hat der selbst die Eigenschaft sich in nem Krieger oder nen Flitzi umzugenerieren? Wenn sich der umgeneriert wird natürlich die neue ID erzeugt, weil anderer Typ von Unit... Finde ich ist nicht praktisch gelöst, weil dadurch die ID Anzahl unnötig hoch ansteigt, weiß ja nicht obs dadurch wenn es zum Beispiel schon bis ID 1.000.000 geht obs das Spiel beeinträchtigt...

Zu einer weiteren Idee. Was ist wenn du selbst festlegst ob ein Bogenschütze oder ein Krieger erstellt wird? Können die sich auch nochma zu nem aggressiven Eingeborenen umgenerieren? Weil wenn nicht dann lass doch 3 mal ne Schleife mit ner Randomzahl von 0 bis 2 durchlaufen. Zum Beispiel:

Randomwerte 0 bis 2

0 = kein Kämpfer
1 = Bogi a.k.a Flitzi^^
2 = Krieger

1. Durchlauf:
Random (1 bis 2) (weil ja mindestens einer erzeugt werden soll deswegen 1 bis 2 ;) )
2. Durchlauf:
Random (0 bis 2)
3. Durchlauf
Random (0 bis 2)

Kleiner Hinweis ist jetzt nicht in Scriptcode geschrieben^^ Hab jetz keine Lust gehabt zu suchen wie es als Script aussieht, hoffe aber du verstehst wie ich es mein^^

Greetz Utopia
« Letzte Änderung: Januar 01, 1970, 01:00:00 Vormittag von Guest »
Gespeichert

trewq

  • Newbie
  • *
  • Beiträge: 31
Re: Zufallsereignis Invasionen
« Antwort #6 am: Februar 23, 2012, 10:16:07 Vormittag »

Zitat von: "Utopia"
Wenn du also den aggressiven Eingeborenen erstellst, dann hat der selbst die Eigenschaft sich in nem Krieger oder nen Flitzi umzugenerieren?
Richtig. Das ist im Script der Definition zu finden. Die aggressiven Eingeborenen tauchen sogar als eigene Datei auf (units_aggressive_native).

Zitat
Können die sich auch nochma zu nem aggressiven Eingeborenen umgenerieren?
Ja. Der normale (also derjenige, der zu weit vom Spieler entfernt ist und somit nicht angreift) kann zum Bogenschützen werden. Der Bogenschütze kann jedoch entweder zum normalen oder zum Nahkämpfer, oder zum Flüchtenden werden. Der Flüchtende kann wieder zum normalen werden (wenn er sich weit genug geheilt hat). Der Nahkämpfer kann entweder zum Bogenschützen oder zum Flüchtenden werden. Wenn man also Pech hat ändert so ein aggressiver Eingeborener seine ID beliebig oft. Der aggressive Eingeborene kann also von jedem Modus in jeden beliebigen anderen Modus wechseln, auch wenn er manchmal Zwischenschritte benötigt. Es ist also nicht möglich ihn auf eine ID festzunageln.
« Letzte Änderung: Januar 01, 1970, 01:00:00 Vormittag von Guest »
Gespeichert

Utopia

  • Newbie
  • *
  • Beiträge: 24
Re: Zufallsereignis Invasionen
« Antwort #7 am: Februar 23, 2012, 11:37:07 Vormittag »

Da stellt sich die Frage, wer auch immer das Script zum Eingeborenen geschrieben hat ob es dort auch eine Funktion gibt, die verbietet, dass der Eingeborene seine Unit wechselt.
« Letzte Änderung: Januar 01, 1970, 01:00:00 Vormittag von Guest »
Gespeichert

trewq

  • Newbie
  • *
  • Beiträge: 31
Re: Zufallsereignis Invasionen
« Antwort #8 am: Februar 23, 2012, 19:10:56 Nachmittag »

Zitat von: "Utopia"
Da stellt sich die Frage, wer auch immer das Script zum Eingeborenen geschrieben hat ob es dort auch eine Funktion gibt, die verbietet, dass der Eingeborene seine Unit wechselt.
Leider nicht. Aber damit hast du mich auf eine Idee gebracht =D . Per def_override setze ich den Eingeborenen einfach ein neues Script ein. Dieses verbietet den an der Invasion beteiligten Eingeborenen den Unitwechsel. Dadurch kann ich dann tatsächlich auch wählen, ob ein Nahkämpfer oder ein Fernkämpfer erstellt wird. Fernkämpfer brauchen nun eine Mindestentfernung um kämpfen zu können (sind also ohne Bewachung im Nahkampf leicht zu besiegen, was aber auch nicht schädlich ist. Es sind schließlich FERNkämpfer).
Andere aggressive Eingeborene haben zwar auch das neue Script, verhalten sich aber wie bisher (Sprich die gehen auch in den Nahkampf, wenn man ihnen zu nahe kommt.).
Allerdings ist nun aus einer Datei ein Ordner mit insgesamt 3 Dateien geworden. Geladen werden muss nur das Script invasion.s2s Die anderen beiden werden von dort aus aufgerufen. Sie müssen nur an der richtigen Stelle sein (sprich einfach den Ordner Invasion, den ihr nach dem entpacken der .zip-Datei bekommt und in dem die drei Dateien auch alle drin sind an die Position modsS2Extsysscripts verschieben).
« Letzte Änderung: Januar 01, 1970, 01:00:00 Vormittag von Guest »
Gespeichert

Utopia

  • Newbie
  • *
  • Beiträge: 24
Re: Zufallsereignis Invasionen
« Antwort #9 am: Februar 23, 2012, 20:41:16 Nachmittag »

So kann man das auch lösen  ^o) an sich ein nettes Script, hilft bei Zufallsmaps auf jeden Fall gegen lange Weile... Aber nicht passend zu meiner Map^^
« Letzte Änderung: Januar 01, 1970, 01:00:00 Vormittag von Guest »
Gespeichert

sechsauge

  • Newbie
  • *
  • Beiträge: 38
Antw:Zufallsereignis Invasionen
« Antwort #10 am: November 17, 2015, 14:57:18 Nachmittag »

Das ist ein geniales Script... hätte ich gern standardmäßig als Option dabei. Also Haarwachstum, erw. Feuerstelle.... Invasionen... etc...

Und ich muss mal sagen... wenn die mit dem Boot ankommen... nachdem ich schon 10 Tage da bin.... dann bin ICH der Eingeborene ;D

10 Tage finde ich zu wenig. Wenn Du Überleben spielst... also bin bei Tag 19 und einigermaßen versorgt... hätte auch Speere, um einen ordentlichen Bandenkrieg bestreiten zu können. Aber ich glaub... am Tag 10 wäre das noch recht hart für mich gewesen.

Für Dein technisches Problem hätte ich eine sehr einfache Lösung. Mach es einfach so. So wie Du es geschrieben hast. Das Problem, welches daraus folgt... also das die bereits vom Spieler gesichteten Indianer nicht mehr gelöscht werden würden.... Das IST DOCH GARKEIN Problem... es ist logisch!

Die kommen auf die Insel... sind Kannibalen... haben DICH... also Futter gefunden und jagen Dich jetzt. Warum sollten die wieder verschwinden?? °_°
Wenn Du ihnen allerdings ausgewichen bist und unentdeckt geblieben bist, dann gehen sie wieder... warum sollten sie bleiben?

Finde ich mal genial.
Es wäre schon, wenn man durch das Besiegen der Invasoren stärker werden würde. Ich erinnere mich da an Stranded I. Ein Löwe brachte 10 exp. Hatte man 50 exp zusammen, bekam man 5 HP dazu.

Grüße
sechsauge
Gespeichert