Ist das in einer map möglich? Scripter gefragt (zufällige trigger verteilung) |
Animus
Steuerzahler
Dabei seit: 29.04.2008
Beiträge: 198
|
|
|
|
|
|
Animus
Steuerzahler
Dabei seit: 29.04.2008
Beiträge: 198
|
|
hab mir mal überlegt das man das aus badmans script für buchstabenausblenden machen kann. aber ich weis nicht ob ich das mit trigger machen kann. aber bin da wie gesagt nicht gut in solchen sachen was einbinden von scripten und abändern angeht. hinterher geht immer nix mehr und die fehlermeldungen breiten sich aus.
b1 = getent("Buchstabe_1","targetname");
b2 = getent("Buchstabe_2","targetname");
b3 = getent("Buchstabe_3","targetname");
b4 = getent("Buchstabe_4","targetname");
b5 = getent("Buchstabe_5","targetname");
while(1)
{
b1 hide();
wait 1;
b2 hide();
wait 1;
b3 hide();
wait 1;
b4 hide();
wait 1;
b5 hide();
wait 1;
b1 show();
wait 1;
b2 show();
wait 1;
b3 show();
wait 1;
b4 show();
wait 1;
b5 show();
wait 1;
}
|
|
|
|
|
Animus
Steuerzahler
Dabei seit: 29.04.2008
Beiträge: 198
|
|
@Marvin
keine ahnung was du mir damit sagen willst, versteh das nicht was du gepostet hast. das ele.script hat auch keinen zufallsgenerator für auswahl der trigger und einen aufzug will ich auch nicht bauen.
|
|
|
|
|
Animus
Steuerzahler
Dabei seit: 29.04.2008
Beiträge: 198
|
|
die trigger sollen sich nicht bewegen!! bessergesagt dürfen es nicht sonst ist die map nicht spielbar. sie liegen zu nahe bei einander und können weder zur seite noch nach oben oder unten verschoben werden. die trigger sollen effekte auslösen oder einen weiteren triggerhurt "dmg 100" wenn du verstehst. das ist ja mein problem und wie gesagt das ganze muss auf zufall basieren da die map sonst den reiz verliert.
|
|
|
|
|
Animus
Steuerzahler
Dabei seit: 29.04.2008
Beiträge: 198
|
|
hat keiner ne idee oder einen kleinen knochen den er oder sie mir hinwerfen kann?
ok ich lass mal die katze aus dem sacke wie es werden soll! bei der map handelt es sich wieder mal um eine themenmap und zwar von the cube. ärger macht mir jetzt das scripten von den fallenräumen da die per zufall festgelegt werden sollen. nun bräuchte ich hilfe von einem guten scripter oder zumindest jemand der sagen kann ob es möglich ist oder nicht.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Animus: 09.03.2009 21:31.
|
|
|
|
|
|
Die Beta-Version der mp_chelm von Cod2 hatte doch sowas ähnliches, da waren verschiedene Durchgänge (Türen, Löcher, Fenster) entweder vorhanden oder weg, das wurde bei jedem Mapstart anders festgelegt.
Also machbar ist es und ich denke dass dies sich auch auf CoD4 umstricken ließe.
__________________ "Mögest du in interessanten Zeiten leben"
Rincewind, Zaubberer
|
|
|
|
|
Animus
Steuerzahler
Dabei seit: 29.04.2008
Beiträge: 198
|
|
Danke Old Man With Gun!!!
hab mir über das script den schädel zerbrochen, da ich von scripten eigentlich nix verstehe. was jetzt noch probleme macht(hab das script noch nicht probiert obs geht. mach ich aber gleich) ist wie man mehr trigger wieder an machen kann. versteh den abgleich nicht mit an oder aus. mein cube hat 125 räume 3 fallen is da bisl wenig. hab so an 25 gedacht kannst du mir das hinzufügen erklären.
#include maps\mp\_utility;
randomttrigger()
{
//get all triggers and switch them off
randomtrig = getentarray("randomtrigger","targetname");
for (i = 0; i < randomtrig.size; i++)
randomtrig[i] triggerOff();
// now randomly turn on 3 of them
level.t1 = randomintrange (1,randomtrig.size); sucht per zufall einen aus
randomtrig[level.t1] triggerOn(); der ausgesuche wird aktiviert
got_2nd = false; ich nehme an der name der random2
while(!got_2nd)
{
level.t2 = randomintrange (1,randomtrig.size);
if (level.t2 != level.t1) den abgleich ob an oder nicht. das versteh ich nicht die würde ja sehr lang sein bei 25. wie ist der aufbau dieser zeile? zwischen 2 u. 3 nur ein ?
{
randomtrig[level.t2] triggerOn();
got_2nd = true;
}
}
got_3rd = false;
while(!got_3rd)
{
level.t3 = randomintrange (1,randomtrig.size);
if (level.t3 != level.t1 && level.t3 != level.t2)
{
randomtrig[level.t3] triggerOn();
got_3rd = true;
}
}
}
sorry hört sich bestimmt alles bisl dumm an was ich da schreibe aber 3 trigger aktiv reichen mir nicht. bekomme leider keine weitere zeile daraus assoziirt. könntest du mir noch eine "got_4rd" schreiben damit mir das system klar wird?
danke nochmal für die mühe die du dir gemacht hast!
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Animus: 11.03.2009 16:41.
|
|
|
|
|
Animus
Steuerzahler
Dabei seit: 29.04.2008
Beiträge: 198
|
|
danke steinacker!!!
Fehlermeldung:
also nach meinem wissen ist der name der scriptdatei in demfall doch egal aber er wirft mir immer fehler aus beim laden des script.
maps\mp\_randomt.gsc::main(); (pfad stimmt, dateiname auch schon verändert, zonefileeintrag auch schon nach oben verschoben)
hab natürlich das unveränderte von "Old Man With Gun" genommen!
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Animus: 11.03.2009 17:31.
|
|
|
|
|
|
Ich bin in dem Script deiner obigen Beschreibung gefolgt, 10 Trigger von denen 3 zufällig da sein sollen. Desshalb ist der script so geschrieben, das bei der zufälligen auswahl der Trigger am Ende auch wirklich 3 Trigger wieder an sind. Es kann bei der Generierung der Zufallszahl ja durchaus passieren (und das leider nicht selten) das 2x die gleiche Zahl als Ergebnis raus kommt. Desshalb hab ich den Script so geschrieben, das er die zweite Zufallszahl mit der ersten vergleichen soll (ist sie gleich, soll eine andere generiert werden). Das Gleiche habe ich dann mit der 3 Zufallszahl gemacht (die wird mit der ersten und der zeiten verglichen und wird nur dann benutzt, wen sie sich von ihnen unterscheidet). Nur so werden auch sicher 3 Trigger aktiviert (und nicht nur einer oder 2). Je mehr Trigger aktiviert werden sollen, desto komplizierter wird es dann natürlich.
Bei 4 Triggern die da sein sollen, müsstest du die 4. Zahl mit allen 3 vorherigen vergleichen, beim 5. Trigger dann schon mit den 4 vorherigen usw.
um den Script mal ein wenig zu erklären
randomtrig = getentarray("randomtrigger","targetname"); //Ein Array mit dem Namen randomtrig bilden und mit allen Triggern füllen, die den targetname randomtrigger haben
for (i = 0; i < randomtrig.size; i++) //Schleife. Schleife so oft durchlaufen, bis i die Anzahl der Elemente im Array randomtrig erreicht hat (i beginnt bei 0 und wird pro durchlauf um 1 erhöht
randomtrig[i] triggerOff(); //das Element (den Trigger) mit der Nummer i im Array randomtrig ausschalten
level.t1 = randomintrange (0,randomtrig.size-1); //der Variablen level.t1 eine Zufallszahl zuweisen, die zwischen 0 und der Anzahl-1 der Elemente im Array randomtrig liegt
randomtrig[level.t1] triggerOn(); //Das Element (den Trigger), der im Array randomtrig an Position level.t1 steht, wieder einschalten
got_2nd = false; // der Variablen got_2nd den Wert "falsch" zuweisen (wird für die nächste Schleife benötigt)
while(!got_2nd) //die folgenden Zeilen so oft wiederholen, so lange die Variable got_2nd den Wert "falsch" hat
level.t2 = randomintrange (0,randomtrig.size-1); //der Variablen level.t2 eine Zufallszahl zuweisen, die zwischen 0 und der Anzahl-1 der Elemente im Array randomtrig liegt
if (level.t2 != level.t1) // Die Befehle innerhalb des if-Zweiges nur ausführen, wenn die Zufallszahl in der Variablen level.t2 sich von der Zufallszahl aus level.t1 unterscheidet. Sonst wird die Schleife wiederholt
randomtrig[level.t2] triggerOn(); //Das Element (den Trigger), der im Array randomtrig an Position level.t2 steht, wieder einschalten
got_2nd = true; // die Variable got_2nd auf "wahr" setzen. Somit wird die While-Schleife beendet.
got_3rd = false;// der Variablen got_3rd den Wert "falsch" zuweisen (wird für die nächste Schleife benötigt)
while(!got_3rd) //die folgenden Zeilen so oft wiederholen, so lange die Variable got_3rd den Wert "falsch" hat
level.t3 = randomintrange (0,randomtrig.size-1); //der Variablen level.t3 eine Zufallszahl zuweisen, die zwischen 0 und der Anzahl-1 der Elemente im Array randomtrig liegt
if (level.t3 != level.t1 && level.t3 != level.t2) // Die Befehle innerhalb des if-Zweiges nur ausführen, wenn die Zufallszahl in der Variablen level.t3 sich von der Zufallszahl aus level.t1 und der Zufallszahl aus level.t2 unterscheidet. Sonst wird die Schleife wiederholt
randomtrig[level.t3] triggerOn(); //Das Element (den Trigger), der im Array randomtrig an Position level.t3 steht, wieder einschalten
got_3rd = true; // die Variable got_3rd auf "wahr" setzen. Somit wird die While-Schleife beendet.
Edit: hab noch einen kleinen Fehler korrigiert. Ein Array beginnt bei 0 und nicht bei 1 darum die roten Passagen ändern.
__________________
Da die Lichtgeschwindigkeit höher ist als die Schallgeschwindigkeit,
hält man so manchen für einen hellen Kopf, bis man ihn reden hört.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von OLD MAN WITH GUN: 11.03.2009 17:53.
|
|
|
|
|
|
Original von Animus
danke steinacker!!!
Fehlermeldung:
also nach meinem wissen ist der name der scriptdatei in demfall doch egal aber er wirft mir immer fehler aus beim laden des script.
Der Name der Scriptdatei schon, aber nicht der Name der Funktion, die du in dieser Scriptdatei aufrufen willst.
Bei mir im Script heißt die Hauptfunktion randomtrigger()
Du versuchst aber eine Funktion mit den Namen main() aufzurufen, und die gibt es nicht (also error, unknown function)
also entweder nennst du im script die Funktion randomtrigger() um in main(), oder du rufst den Script mit maps\mp\_randomt::randomtrigger(); auf
__________________
Da die Lichtgeschwindigkeit höher ist als die Schallgeschwindigkeit,
hält man so manchen für einen hellen Kopf, bis man ihn reden hört.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von OLD MAN WITH GUN: 11.03.2009 17:37.
|
|
|
|
|
Animus
Steuerzahler
Dabei seit: 29.04.2008
Beiträge: 198
|
|
stimmt hatte zu wenig nur 3! hab 6 jetzt geht trotzdem nicht da sich mein recher aufhängt( eigentlich nur das spiel kann auf meinem 2tft weiter arbeiten aber cod läßt sich nicht beenden)
loadscreen läde fertig
dann kommt herausforderung wird gestartet ...1... (hier schreibt er nur noch die letzten 3 punkte immer und immer wieder)
aber die map startet nicht
kann es sein das er die trigger nicht unterscheiden kann? die haben ja alle den selben targetname und als test hab ich den einen hintstring verpasst. alle vollkommen gleich.
|
|
|
|
|
|
Die müssen alle den gleichen Namen haben, sonst geht es nämlich nicht (unterschieden werden die durch ihre Position im Array).
Bei 3 hätte es aber gehen müssen. Sicher, das alle den gleichen Targetname haben?
In der Fehlermeldung von dir stand RandomIntRange parms: 1 1
Der Zweite Parameter sagt also, es ist nur 1 Element im Array und nicht 3.
Sonst hätte da RandomIntRange parms: 1 3 stehen müssen
__________________
Da die Lichtgeschwindigkeit höher ist als die Schallgeschwindigkeit,
hält man so manchen für einen hellen Kopf, bis man ihn reden hört.
|
|
|
|
|
|
|
|
Impressum ||Datenschutzerklärung
|