|
|
| Operator für einmaliges Ereignis |
 |
Ich benutz den Nukes Killingspree, den ich in den AdmiralMOD eingefügt habe und würde gerne in das Script dazu FIRSTBLOOD einfügen
Hier mal ein Ausschnitt des Scripts, das die Killsounds steuert:
if(killcount == 4)
{
//iprintln(killcount);
iprintln("" + attacker.name + " ^1Ultra Kill!");
attacker iprintlnBold("^1Ultra Kill!");
//playSoundOnPlayers("ultrakill");
self playlocalSound("ultrakill");
attacker playlocalSound("ultrakill");
wait (2);
}
Wie heisst der Operator, der hier (killcount == 4) die zwei "==" ersetzen kann, der ein einmaliges Ereignis auslöst??
so hab i das mal umgeschrieben, nur der Operator fehlt mir (sind die zwei "??"), der das eben einmalig macht:
if(killcount ?? 1)
{
//iprintln(killcount);
iprintln("" + attacker.name + " ^1First Blood!");
attacker iprintlnBold("^1First Blood!");
//playSoundOnPlayers("firstblood");
self playlocalSound("firstblood");
attacker playlocalSound("firstblood");
wait (2);
}
kann mir da wer helfen??
__________________

|
|
|
|
|
 | |
 |
|
|
| RE: Operator für einmaliges Ereignis |
 |
Original von Kellerkind
Du stellst dir die falsche Frage. So wird die Bedingung ja schon nur einmal erfüllt, dann wenn die Anzahl der Kills exakt 4 ist
== 4
Sonst gibt es nur
!= nicht 4 währe immer außer bei 4 Kills
>= beim 5. 6. 7. [...] Kill
<= beim 1. 2. 3. aber nicht beim 4. 5. 6. [...] Kill
öhm, das ab der 3 tut, jeder spieler, der 3 4 5 usw in reihe tötet, ohne selbst getötet zu werden, erhält anzeige und sound, passt feini
nach selbstmord oder tod ist der killcount dann wieder auf 0
nur komisch ist, dass nach einem sturz, oder einem minenfeld, der das leben kostet, alle sounds hintereinander ausgeführt werden, OHNE anzeige!!!!
wär das script nicht etwa 8000 zeichen zu lang, könnt ichs ja mal posten, aber wer mir da helfen will, dem kann ich das gern per mail zusenden
soweit mal 1000 dank
PS von mike bekam ich seine moddateien zugesendet, aber zwischen admiral mod und extreme+ mod liegen ein paar lichtjährchen, was die scripts angeht, so wie ich das als laie sehe...
trotzdem danke
__________________

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Nightwing: 08.02.2007 17:41.
|
|
|
|
|
 | |
|
|
Soll die Textausgabe wirklich so wie in deinem Post sein?
iprintln............... klein links unten fuer alle
attacker iprintlnBold............... Bildschirmmitte fuer Schuetzen
__________________

|
|
|
|
|
 |
|
|
Original von {LSB} Squall69
Soll die Textausgabe wirklich so wie in deinem Post sein?
iprintln............... klein links unten fuer alle
attacker iprintlnBold............... Bildschirmmitte fuer Schuetzen
Jawoll, bis jetzt störts keinen der 5 Testzocker, im Gegenteil.
ich post hier mal die ganze datei _shmod.gsc, die für die ausführung dieser sounds verantwortlich ist
et voila, hier isch se:
Messages(sMeansOfDeath, attacker)
{
killcount = undefined;
self.pers["kill_spree"] = 0;
//if(getCvar("spree") == "")
// setCvar("spree", "0");
if(sMeansOfDeath == "MOD_HEAD_SHOT")
{
distance = distance(Attacker.origin , self.origin); //Inches
meters = distance * 0.0254; //Meters
feet = distance / 12; //Feet
if(!isDefined("shm_metric") || getcvar("shm_metric") == "")
setcvar("shm_metric", "meters");
if(getCVar("shm_metric") != "feet")
{
attacker iprintlnBold("^1Head Shot!^7 " + self.name + " ^5eliminiert. Distanz:^3 " + meters + " ^5Meter!"); //Message to attacker
attacker playlocalSound("headshot");//voice message to attacker
self iprintlnBold("^1Head Shot!^7 " + attacker.name + " ^5hat Dich eliminiert. ^5Distanz:^3 " + meters + " ^5 Meter!"); //Message to death person
self playlocalSound("headshot"); //voice message to dead person
iprintln("^1Head Shot!^7 " + attacker.name + " ^5eliminierte^7 " + self.name + "^5. Distanz:^3 " + meters + " ^5Meter!"); //Message to every player
}
wait (2);
}
attacker.pers["kill_spree"]++;//this is ok
killcount = attacker.pers["kill_spree"];
if(killcount == 3)
{
//iprintln(killcount);
iprintln("" + attacker.name + " ^1Killing Spree!");
attacker iprintlnBold("^1Killing Spree!");
//playSoundOnPlayers("killingspree");
self playlocalSound("killingspree");
attacker playlocalSound("killingspree");
wait (2);
}
if(killcount == 4)
{
//iprintln(killcount);
iprintln("" + attacker.name + " ^1Ultra Kill!");
attacker iprintlnBold("^1Ultra Kill!");
//playSoundOnPlayers("ultrakill");
self playlocalSound("ultrakill");
attacker playlocalSound("ultrakill");
wait (2);
}
if(killcount == 5)
{
//iprintln(killcount);
iprintln("" + attacker.name + " ^1Rampage!");
attacker iprintlnBold("^1Rampage!");
//playSoundOnPlayers("rampage");
self playlocalSound("rampage");
attacker playlocalSound("rampage");
wait (2);
}
if(killcount == 6)
{
//iprintln(killcount);
iprintln("" + attacker.name + " ^1Dominating!");
attacker iprintlnBold("^1Dominating!");
//playSoundOnPlayers("dominating");
self playlocalSound("dominating");
attacker playlocalSound("dominating");
wait (2);
}
if(killcount == 7)
{
//iprintln(killcount);
iprintln("" + attacker.name + " ^1Monster Kill!");
attacker iprintlnBold("^1Monster Kill!");
//playSoundOnPlayers("monsterkill");
self playlocalSound("monsterkill");
attacker playlocalSound("monsterkill");
wait (2);
}
if(killcount ==
{
//iprintln(killcount);
iprintln("" + attacker.name + " ^1Holy Shit!");
attacker iprintlnBold("^1Holy Shit!");
//playSoundOnPlayers("holyshit");
self playlocalSound("holyshit");
attacker playlocalSound("holyshit");
wait (2);
}
if(killcount == 9)
{
//iprintln(killcount);
iprintln("" + attacker.name + " ^1Slaughter!");
attacker iprintlnBold("^1Slaughter!");
//playSoundOnPlayers("slaughter");
self playlocalSound("slaughter");
attacker playlocalSound("slaughter");
wait (2);
}
if(killcount == 10)
{
//iprintln(killcount);
iprintln("" + attacker.name + " ^1Unstopable!");
attacker iprintlnBold("^1Unstopable!");
//playSoundOnPlayers("unstoppable");
self playlocalSound("unstoppable");
attacker playlocalSound("unstoppable");
wait (2);
}
if(killcount >= 11)
{
//iprintln(killcount);
iprintln("" + attacker.name + " ^1Godlike!");
attacker iprintlnBold("^1Godlike!");
//playSoundOnPlayers("godlike");
self playlocalSound("godlike");
attacker playlocalSound("godlike");
wait (2);
}
}
playSoundOnPlayers(sound, team)
{
players = getentarray("player", "classname");
if(level.splitscreen)
{
if(isdefined(players[0]))
players[0] playLocalSound(sound);
}
else
{
if(isdefined(team))
{
for(i = 0; i < players.size; i++)
{
if((isdefined(players[i].pers["team"])) && (players[i].pers["team"] == team))
players[i] playLocalSound(sound);
}
}
else
{
for(i = 0; i < players.size; i++)
players[i] playLocalSound(sound);
}
}
}
__________________

|
|
|
|
|
|
|
Das mit dem "first blood" hat nichts mit dem deiner "killingspree" zu tun.
Wen du es wirklich so haben willst dan def. dir eine neue Variabel auf "level" Basis
level.myvar=0;
und dann nimmst du deinen komischen "print & sound" code
if( level.myvar == 0 )
{
iprintln("" + attacker.name + " ^1First Blood!");
attacker iprintlnBold("^1First Blood!");
self playlocalSound("firstblood");
attacker playlocalSound("firstblood");
level.myvar++;
wait (2);
}
__________________

|
|
|
|
|
 | |
 | |
|
|
Was ich dir geschrieben hab funktioniert 100%tig.
Viele Wege fueren nach Rom einer durch den dunklen Wald und ein anderer das Seeufer entlang.
Warum ich es so geloest habe, ist einfach erklaert. Er hat nicht viel Ahnung vom den Scripts und ich hab sein Script so erweitert das er es auch verstehen sollte.
Die killcount var hab ich nicht verwendet da "first blood" nichts mit mit einer "Killingspree" zu schaffen hat, denn falls er sich entschliesst es woanders unerzubringen funktieoniert es auch weiterhin, desshalb auch level.
__________________

|
|
|
|
|
|
|
Du hast die Variabe level.firstblood=0; zu spaet definiert.
Wo genau es in den Admiral mod .gsc Files hingehoert kann ich dir leider nicht sagen.
Aber auf alle faelle kannst du deine var in den Gametyp .gsc files defienieren. Such dort nach Callback_StartGameType() hier ist dann der richtige Platz.
Musst halt fuer jeden Spieltyp extra machen.
Aber in Callback_StartGameType() muss auch ein File vom Admiral mod aufgerfufen werden, wenn du deine Variable es in diesem File plazierst musst du es nur einmal tun,
da dieser Aufruf schon in allen Gametyps enthalten ist.
Und dein Print fuer "first blood" solltest du eigentlich wo anders unterbringen, das macht dann ein weiterbearbeiten und wiederfinden wesentlich einfacher.
Such mal in einem der Gametyps nach Callback_PlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration)
Innerhalb dieser Funktion muss wieder ein File bzw eine Funktion des Admiral Mod aufgerufen werden. Dort waer dann auch ein guter Platz fuer dein "first blood"
__________________

|
|
|
|
|
 |
Kelli
... sehr viel alleine
 
Dabei seit: 09.11.2006
Beiträge: 2.504

|
|
Kellerkind
Ich bin mir jetzt auch sicher das bei meiner Lösung bei jedem Spieler beim ersten Kill getriggert wird. Mich würde zu fortbildungszwecken jetzt nur mal interessieren ob das bei Squall69´s Schnipsel auch so ist, oder wenn nicht warum eigentlich nicht
.
Original von Nightwing
[...]nur 1 problem, der firstblood sound kommt bei JEDEM kill, nicht nur beim allerersten...
Original von {LSB} Squall69
Du hast die Variabe level.firstblood=0; zu spaet definiert.
[...]
Such mal in einem der Gametyps nach Callback_PlayerKilled [...]
Dort waer dann auch ein guter Platz fuer dein "first blood"[...]
Original von {LSB} Squall69
Bei mir erfolgt der Print nur einmal da meine Variable def wird wenn die Karte laedt und sie nicht an einen Spieler gebunden ist sondern eine allgemeine var ist.
Nach dem Nachtrag^^^^"Such mal in einem der[...]guter Platz fuer dein "first blood"", ja. Damit ist es dann klar. Genau das hab ich gemeint.
__________________ „ Allah ist Groß, und wir sind armselige Tröpfe mit unseren ganzen Wissenschaften Herrlichkeit.“
Dieser Beitrag wurde 420 mal editiert, zum letzten Mal von der Bundesregierung Niemand: Heute, 11:42.
https://kkde.de/scum/
|
|
|
|
|
 |
|
|
Kellerkind es funktieniert auch wenn er es in seiner headshot,killingspree Datei laesst.
Original von {LSB} Squall69
Und dein Print fuer "first blood" solltest du eigentlich wo anders unterbringen, das macht dann ein weiterbearbeiten und wiederfinden wesentlich einfacher.
Such mal in einem der Gametyps nach Callback_PlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration)
Innerhalb dieser Funktion muss wieder ein File bzw eine Funktion des Admiral Mod aufgerufen werden. Dort waer dann auch ein guter Platz fuer dein "first blood"
Gruender warum er es in eine andere Funktion packen soll?
Ich weiss von mir selbst das man nie Zufrieden ist mit dem was man hat , und da seine Prints etwas komisch sind bin ich mir sicher das er sie noch aendern wird.
Und wenn er diesen Platz waehlt kann er alles was zu dem Kill gehoert in seine prints einbauen ohne gross scripten zu koennen.
BBB has drawn the first blood and the victim was GGG
Holy shit the first blood was a headshot
First bood was drawn with a shot in the right hand
BBBB used the kar98 for the first blood
First blood was a Teamkill
Ein weiter Grund sind dann die code Aenderungen, denn er muss mindestens den Fix machen das die Nachricht nicht kommt wenn er das Team wechselt.
Und wenn er es in der richtigen Funktion hat ist es dann auch logisch weshalb er diesen Fix benoetigt.
zb wenn er nicht haben will das first blood bei einen Teamkill ausgegeben wird findet er hier auch gleich ein Beispiel.
__________________

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von {LSB} Squall69: 09.02.2007 13:58.
|
|
|
|
|
|
|
SO hab i das jetzt mal reingesetzt, wenn ich connecte, tuts auch, mal nachher mim kumpel testen
ist das level.firstblood richtig so an der stelle?
die killprints inbold hab ich jetzt mal weg, unrecht hast du nicht ;-)
noch was: firstblood kommt auch bei selbstmord, sturz etc, das ist schon korrekt so, oder?? ist ja das erste blut so gesehen *lach*
auf jeden fall möcht ich mich bei euch ganz herzlich bedanken, supertolle arbeit!!!!
darf ich so unverschämt sein, und an andrer stelle noch ein winziges scriptproblem erläutern??
Callback_StartGameType()
{
level.splitscreen = isSplitScreen();
// defaults if not defined in level script
if(!isdefined(game["allies"]))
game["allies"] = "american";
if(!isdefined(game["axis"]))
game["axis"] = "german";
// server cvar overrides
if(getCvar("scr_allies") != "")
game["allies"] = getCvar("scr_allies");
if(getCvar("scr_axis") != "")
game["axis"] = getCvar("scr_axis");
precacheStatusIcon("hud_status_dead");
precacheRumble("damage_heavy");
precacheString(&"PLATFORM_PRESS_TO_SPAWN");
// * AdmiralMOD *
if(game["am_enabled"] == 1) maps\mp\gametypes\_admiral_mod_precache:
recache();
thread maps\mp\gametypes\_menus::init();
thread maps\mp\gametypes\_serversettings::init();
thread maps\mp\gametypes\_clientids::init();
thread maps\mp\gametypes\_teams::init();
thread maps\mp\gametypes\_weapons::init();
thread maps\mp\gametypes\_scoreboard::init();
thread maps\mp\gametypes\_killcam::init();
thread maps\mp\gametypes\_shellshock::init();
thread maps\mp\gametypes\_hud_playerscore::init();
thread maps\mp\gametypes\_deathicons::init();
thread maps\mp\gametypes\_hearticons::init();
thread maps\mp\gametypes\_tnticons::init();
thread maps\mp\gametypes\_damagefeedback::init();
thread maps\mp\gametypes\_objpoints::init();
thread maps\mp\gametypes\_healthoverlay::init();
thread maps\mp\gametypes\_grenadeindicators::init();
level.xenon = (getcvar("xenonGame") == "true");
if(level.xenon) // Xenon only
thread maps\mp\gametypes\_richpresence::init();
else // PC only
thread maps\mp\gametypes\_quickmessages::init();
setClientNameMode("auto_change");
spawnpointname = "mp_dm_spawn";
spawnpoints = getentarray(spawnpointname, "classname");
if(!spawnpoints.size)
{
maps\mp\gametypes\_callbacksetup::AbortLevel();
return;
}
level.firstblood=0;
for(i = 0; i < spawnpoints.size; i++)
spawnpoints[i] placeSpawnpoint();
allowed[0] = "dm";
maps\mp\gametypes\_gameobjects::main(allowed);
// Time limit per map
if(getCvar("scr_dm_timelimit") == "")
setCvar("scr_dm_timelimit", "30");
else if(getCvarFloat("scr_dm_timelimit") > 1440)
setCvar("scr_dm_timelimit", "1440");
level.timelimit = getCvarFloat("scr_dm_timelimit");
setCvar("ui_dm_timelimit", level.timelimit);
makeCvarServerInfo("ui_dm_timelimit", "30");
// Score limit per map
if(getCvar("scr_dm_scorelimit") == "")
setCvar("scr_dm_scorelimit", "100");
level.scorelimit = getCvarInt("scr_dm_scorelimit");
setCvar("ui_dm_scorelimit", level.scorelimit);
makeCvarServerInfo("ui_dm_scorelimit", "100");
// Force respawning
if(getCvar("scr_forcerespawn") == "")
setCvar("scr_forcerespawn", "0");
if(!isdefined(game["state"]))
game["state"] = "playing";
level.QuickMessageToAll = true;
level.mapended = false;
thread startGame();
thread updateGametypeCvars();
//thread maps\mp\gametypes\_teams::addTestClients();
// * AdmiralMOD *
if(game["am_enabled"] == 1) maps\mp\gametypes\_admiral_mod::StartGame();
}
dummy()
{
waittillframeend;
if(isdefined(self))
level notify("connecting", self);
}
__________________

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Nightwing: 09.02.2007 18:21.
|
|
|
|
|
|
|
Hier ist es ok.
Tipp um ein Bearbeiten und Wiederfinden zu vereinfachen:
Wenn du etwas zu einem bestehen Script hinzufuegst mach dir gleich Notizen dafuer im Script und such nach aehnlichen Dingen in der Funktion wie zB.
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
|
level.QuickMessageToAll = true;
level.mapended = false;
/////// Hinzugefuegt fuer meinen server ////////////
level.firstblood=0; // allgemeine Variabel fuer first kill
//////////////////////////////////////////////////////// |
|
Wie vorher beschrieben ist hier auch der Aufruf fuer den Admiral Mod wo du ebenfalls deine var def kannst.
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
|
// * AdmiralMOD *
if(game["am_enabled"] == 1) maps\mp\gametypes\_admiral_mod::StartGame(); |
|
Wie schon erwaehnt hast du dadurch den Vorteil das du deine Varibel nur eimal def musst und nicht fuer jeden Spieltyp seperat.
maps\mp\gametypes\ ...Pfad
_admiral_mod ...Dateiname
StartGame() ...Funktion
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
|
// * MM Missionen *
level.highscore_text = "";
level.bomb_on_the_map_allies = 0;
level.bomb_on_the_map_axis = 0;
/////// Hinzugefuegt fuer meinen server ////////////
level.firstblood=0; // allgemeine Variabel fuer first kill
////////////////////////////////////////////////////////
// * Sprint Schritte unterdrücken, solage bei S&D nach dem planten PlayerSounds ausgegeben werden *
level.sd_sound_play = undefined; |
|
__________________

|
|
|
|
|
|
|
na super!!!
i hab für jeden spieltyp ne .gsc und in jeder ist das callback player connected enthalten, also hab ichs in denen, die ich anbiete einfach reingetan, tut ja auch ;-)
also in dm, tdm, ctf, ctb
und in der _shmod.gsc ist dann headshot, killsound und firstblood definiert.
super dank dir
__________________

|
|
|
|
|
|
|
 |
Impressum ||Datenschutzerklärung
|