|
 |
First Blood Script beim Admiral MOD |
|
|
| First Blood Script beim Admiral MOD |
 |
Hi
Im Team Deathmatch und bei einem Selbstmord tut es nicht so, wie es soll, ich finde aber den Fehler nicht...
OLD MAN oder Bernie, könntet IHR da mal nen Blick draufwerfen bitte??
Hier der Code:
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
|
//** Nachricht für ersten Kill - FIRST BLOOD - **//
if( level.firstblood == 0 && !isDefined ( self.switching_teams ) ){
players = getentarray("player", "classname");
level.firstblood++; //** Erster Kill wurde gemacht Variable != 0 gesetzt **//
if( isPlayer ( eAttacker ) ){ //** Wenn Spieler Spieler Schütze ist **//
for( i=0;i < players.size;i++ ){ //** Variable die alle Spieler Anzahl x definiert **//
if( players[i] != self && players[i] != eAttacker && eAttacker != self ){ //** Alle Spieler ausser Schütze und Getöteter und Schütze ist kein Selbstmörder **//
players[i] playlocalsound( "firstblood" ); //** Sound für alle Spieler mit Ausnahme des Schützen des Getöteten und des Selbstmörders**//
players[i] iprintlnbold( "^1First Blood! ^5wurde vergossen von^7 ", eAttacker.name ); //** Text für alle Spieler mit Ausnahme des Schützen des Getöteten und des Selbstmörders **//
if( level.teamplay == 0 )
players[i] iprintlnbold( "^5...und das arme Schwein war^7 ", self.name ); //** Text wenn keine Teams vorhanden sind **//
else if( eAttacker.pers["team"] != self.pers["team"] && level.teamplay == 1 ) //** Text wenn Teams vorhanden sind und Opfer nicht im gleichen Team ist **//
players[i] iprintlnbold( "^5...und das arme Schwein war^7 ", self.name ); //** Text für Gegner Team **//
else if( eAttacker.pers["team"] == self.pers["team"] && level.teamplay == 1 ) //** Text wenn Teams vorhanden sind und Opfer im gleichen Team ist **//
players[i] iprintlnbold( "^5...und es hat Dein Teammitglied^7", self.name , "^5erwischt!^7!" ); //** Text für Opfer Team **//
}
}
if( eAttacker != self ){ //** Schütze jedoch nicht Getöteter - Nachricht an Beide **//
if( eAttacker.Headshot == 1 )
wait 1.5;
eAttacker playlocalsound( "firstblood" ); //** Sound für den Schützen mit Wartezeit beim Headshot**//
self playlocalsound( "firstblood" ); //** Sounds für den Getöteten mit Wartezeit zwischen den Sounds **//
wait 1.5;
self playLocalSound ( "whyami" );
eAttacker iprintlnbold( " ^1First Blood! ^5wurde von Dir vergossen!" ); //** Text für den Schützen **//
eAttacker iprintlnbold( "^5...und das arme Schwein war^7 ", self.name );
self iprintlnbold( "^1First Blood!" ); //** Text für den Getöteten mit Ausnahme eines Selbstmörders **//
self iprintlnbold( eAttacker.name , " ^5hat Dein Blut als Erster vergossen!" );
}
for( i=0;i < players.size;i++ ){ //** Variable die alle Spieler Anzahl x definiert **//
if( players[i] != self && players[i] != eAttacker && eAttacker == self){ //** Spieler ist Selbstmörder **//
players[i] playlocalsound( "firstblood" ); //** Sound für alle Spieler **//
self playlocalsound( "firstblood" ); //** Sound für den Selbstmörder **//
wait 1.5;
self playLocalSound ( "hallelujah" );
players[i] iprintlnbold( "^1First Blood! ^5wurde vergossen von^7 ", eAttacker.name ); //** Text für alle Spieler mit Ausnahme des Schützen des Getöteten und des Selbstmörders **//
self iprintlnbold( " ^1First Blood!" ); //** Text für den Selbstmörder **//
self iprintlnbold( " ^5...und es war Dein eigenes Blut!" );
if( level.teamplay == 0 && players[i] != self)
players[i] iprintlnbold( "^5...und er leidet an Schizophrenie!" ); //** Text wenn keine Teams vorhanden sind **//
else if( eAttacker.pers["team"] != self.pers["team"] && players[i] != self && level.teamplay == 1 ) //** Text wenn Teams vorhanden sind und Selbstmörder nicht im gleichen Team ist **//
players[i] iprintlnbold( "^5...und er leidet an Schizophrenie!"); //** Text für Gegner Team **//
else if( eAttacker.pers["team"] == self.pers["team"] && players[i] != self && level.teamplay == 1 ) //** Text wenn Teams vorhanden sind und Selbstmörder im gleichen Team ist **//
players[i] iprintlnbold( "^5Dein Teammitglied", self.name , "^5leidet an Schizophrenie!" ); //** Text für Selbstmörder Team **//
}
}
}
}
thread maps\mp\gametypes\_myaddon::Killingspree(eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc);
//** ---Ende für HELLZone_AM--- **//
|
|
level.teamplay = 1 bedeutet, dass in der z.b. tdm.cfg die variable gesetzt wird, 0 bedeutet ergo dann kein teamplay
wenn noch n code benötigt wird, um den fehler zu finden, bitte sagen.
Danke ToM
__________________

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Nightwing: 24.04.2007 23:58.
|
|
|
|
|
|
|
also Ripper:
Speziell DIESES Script hier ist noch fehlerhaft.
Grundsätzlich:
Du öffnest / entpackst die Datei zzzz_amblabla.iwd (mit Totalcommander)
unter der Ordnerstruktur maps/mp/gametypes findest Du die benötigten Files (tdm.gsc z. B.)
Darin nimmst Du die änderungen vor, die Squall 69 in dem anderen Topic beschrieben hat.
Saug auch das Programm, das er anbietet, denn mit dem Editor macht das keinen Spass und keinen Sinn!!
ToM
__________________

|
|
|
|
|
|
|
@ OLD MAN
stimm ich dir zu, da hab ich es zu ungenau ausgedrückt.
Neuer Versuch der Fehlerbeschreibung:
also der fehler besteht darin, das bei jedem kill das firstblood ausgeführt wurde, sound und text, aber nur bei teambasierten spielen.
beim dm tut das ganze so, wie es soll.
zu deinen änderungen:
ändere es gerade um, testen kann ich es erst die nächsten tage, da die lieben testpersonen *lach* grad alle unterwegs sind.
die erkenntnisse werde ich auf jeden fall hier posten.
vielen dank einstweilen
ToM
PS: ich stell den neuen code hier rein, vielleicht siehst du noch einen fehler, auch bei den teammitteilungen.
EDIT: bei tdm tut es immer noch nicht. ich kanns zwar nur mit nem selbstmord testen, aber jeder selbstmord = firstblood.
sieht so aus, wie wenn der nach dem ersten kill die variable nicht ungleich null setzt...
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
|
//** Nachricht für ersten Kill - FIRST BLOOD - **//
if( level.firstblood == 0 && !isDefined ( self.switching_teams ) ){
players = getentarray("player", "classname");
level.firstblood++; //** Erster Kill wurde gemacht Variable != 0 gesetzt **//
if( isPlayer ( eAttacker ) ){ //** Wenn Spieler Spieler Schütze ist **//
for( i=0;i < players.size;i++ ){ //** Variable die alle Spieler Anzahl x definiert **//
if( players[i] != self && players[i] != eAttacker && eAttacker != self ){ //** Alle Spieler ausser Schütze und Getöteter und Schütze ist kein Selbstmörder **//
players[i] playlocalsound( "firstblood" ); //** Sound für alle Spieler mit Ausnahme des Schützen des Getöteten und des Selbstmörders**//
players[i] iprintlnbold( "^1First Blood! ^5wurde vergossen von^7 ", eAttacker.name ); //** Text für alle Spieler mit Ausnahme des Schützen des Getöteten und des Selbstmörders **//
if( level.teamplay == 0 )
players[i] iprintlnbold( "^5...und das arme Schwein war^7 ", self.name ); //** Text wenn keine Teams vorhanden sind **//
else if( eAttacker.pers["team"] != self.pers["team"] && level.teamplay == 1 ) //** Text wenn Teams vorhanden sind und Opfer nicht im gleichen Team ist **//
players[i] iprintlnbold( "^5...und das arme Schwein war^7 ", self.name ); //** Text für Gegner Team **//
else if( eAttacker.pers["team"] == self.pers["team"] && level.teamplay == 1 ) //** Text wenn Teams vorhanden sind und Opfer im gleichen Team ist **//
players[i] iprintlnbold( "^5...und es hat Dein Teammitglied^7", self.name , "^5erwischt!^7!" ); //** Text für Opfer Team **//
}
}
if( eAttacker != self ){ //** Schütze jedoch nicht Getöteter - Nachricht an Beide **//
if( eAttacker.Headshot == 1 )
wait 1.5;
eAttacker playlocalsound( "firstblood" ); //** Sound für den Schützen mit Wartezeit beim Headshot**//
self playlocalsound( "firstblood" ); //** Sounds für den Getöteten mit Wartezeit zwischen den Sounds **//
wait 1.5;
self playLocalSound ( "whyami" );
eAttacker iprintlnbold( " ^1First Blood! ^5wurde von Dir vergossen!" ); //** Text für den Schützen **//
eAttacker iprintlnbold( "^5...und das arme Schwein war^7 ", self.name );
self iprintlnbold( "^1First Blood!" ); //** Text für den Getöteten mit Ausnahme eines Selbstmörders **//
self iprintlnbold( eAttacker.name , " ^5hat Dein Blut als Erster vergossen!" );
}
for( i=0;i < players.size;i++ ){ //** Variable die alle Spieler Anzahl x definiert **//
if( eAttacker == self ){ //** Spieler ist Selbstmörder **//
players[i] playlocalsound( "firstblood" ); //** Sound für alle Spieler **//
wait 1.5;
self playLocalSound ( "hallelujah" );
if( players[i] != self && players[i] != eAttacker )
players[i] iprintlnbold( "^1First Blood! ^5wurde vergossen von^7 ", eAttacker.name ); //** Text für alle Spieler mit Ausnahme des Schützen des Getöteten und des Selbstmörders **//
self iprintlnbold( " ^1First Blood!" ); //** Text für den Selbstmörder **//
self iprintlnbold( " ^5...und es war Dein eigenes Blut!" );
if( level.teamplay == 0 && players[i] != self)
players[i] iprintlnbold( "^5...und er leidet an Schizophrenie!" ); //** Text wenn keine Teams vorhanden sind **//
else if( eAttacker.pers["team"] != self.pers["team"] && players[i] != self && level.teamplay == 1 ) //** Text wenn Teams vorhanden sind und Selbstmörder nicht im gleichen Team ist **//
players[i] iprintlnbold( "^5...und er leidet an Schizophrenie!"); //** Text für Gegner Team **//
else if( eAttacker.pers["team"] == self.pers["team"] && players[i] != self && level.teamplay == 1 ) //** Text wenn Teams vorhanden sind und Selbstmörder im gleichen Team ist **//
players[i] iprintlnbold( "^5Dein Teammitglied", self.name , "^5leidet an Schizophrenie!" ); //** Text für Selbstmörder Team **//
}
}
}
}
thread maps\mp\gametypes\_myaddon::Killingspree(eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc);
//** ---Ende für HELLZone_AM--- **//
|
|
__________________

Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von Nightwing: 29.04.2007 17:39.
|
|
|
|
|
|
|
Ok ich glaub den fehler gefunden zu haben.
level.firstblood = 0;
war in der globalen datei _admiral_mod.gsc drin, in der funktion StartGame();
ausschnitt:
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
|
StartGame() {
if(game["am_enabled"] != 1) return;
if(game["am_error_logfile"] == 1) logPrint("StartGame\n");
// * MM Missionen *
level.highscore_text = "";
level.bomb_on_the_map_allies = 0;
level.bomb_on_the_map_axis = 0;
// * Sprint Schritte unterdrücken, solage bei S&D nach dem planten PlayerSounds ausgegeben werden *
level.sd_sound_play = undefined;
//** hinzugefügt für HELLZone_AM **//
level.firstblood = 0; //** Variabel für ersten Kill -FIRST BLOOD- **//
//** Headshot Distanzangabe mit oder ohne Komma **//
if (getCvar("am_meter_mit_nachkomma") == "") // ist am_meter_mit_nachkomma gesetzt?
setCvar("am_meter_mit_nachkomma", "0"); // wenn nicht, setze sie auf 0
level.nachkomma = getcvar("am_meter_mit_nachkomma"); //** Variable definieren, die in der Config liegt **//
//** ---Ende für HELLZone_AM--- **//
maps\mp\gametypes\_admiral_mod_hud::showAutoDownload();
maps\mp\gametypes\_admiral_mod_hud::showClanLevelLogoText();
thread maps\mp\gametypes\_admiral_mod_hud::showMessages();
thread maps\mp\gametypes\_admiral_mod_hud::showNextMap();
maps\mp\gametypes\_admiral_mod_hud::InitLifes();
thread maps\mp\gametypes\_admiral_mod_hud::UpdateLifes();
maps\mp\gametypes\_admiral_mod_squad::InitSquads();
|
|
ich habe es nun bei allen gamearten in die funktion startGame(); (mit klein "s")
eingefügt und in der globalen auskommentiert
hier der code der tdm.gsc:
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
|
startGame()
{
level.starttime = getTime();
if(game["am_tournament_mode"] == 1 && (game["am_tournament_halftime"] == "no_halftime_running" || game["am_tournament_halftime"] == "wait_for_second_halftime_running")) {
maps\mp\gametypes\_admiral_mod_tournament::CheckHalftimes();
}
if(level.timelimit > 0)
{
level.clock = newHudElem();
level.clock.horzAlign = "left";
level.clock.vertAlign = "top";
level.clock.x = 8;
level.clock.y = 2;
level.clock.font = "default";
level.clock.fontscale = 2;
level.clock setTimer(level.timelimit * 60);
if(isDefined(game["am_show_time"]) && game["am_show_time"] == 0) level.clock.alpha = 0;
// * AdmiralMOD *
level.clock.sort = 50;
//** hinzugefügt für HELLZone_AM **//
level.firstblood = 0; //** Variabel für ersten Kill -FIRST BLOOD- **//
thread maps\mp\gametypes\_myaddon::Timeannouncer();
level.clock.color = (0,0,1); //** Farbe Clock **//
//** ---Ende für HELLZone_AM--- **//
}
for(;;)
{
checkTimeLimit();
wait 1;
}
}
|
|
ich hoff echt mal, das dies des rätsels lösung ist, bei dem timeannouncer wars auf jeden fall auch die lösung.
ich konnte es bis jetzt nur mit selbstmorden testen, aber da kommt dann das FB nur das erste mal, davor war es ja dauernd.
Nun denke ich, das es dann auch bei keinem selbstmord nur einmal tun müsste.
die zeit wirds bringen...
@ OLD MAN:
wirf doch trotzdem bitte nen blick auf die neuen codes, ob dir irgendein (programmier)fehler auffällt, wäre sehr dankbar
deine vermutungen und änderungen beim anderen script waren sehr hilfreich, nochmals danke
ToM
__________________

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Nightwing: 29.04.2007 18:11.
|
|
|
|
|
|
|
Also ich habe jetzt mal den Original Am mit dem Firstblood erweitert.
Ich habe level.firstblood = 0; in der globalen _admiral_mod.gsc drin und das funktioniert tadellos (auch in den teambasierten gametypes. Habs mit tdm und ctf getestet).
Wenn du einen Mitspieler zum testen brauchst, es gibt dafür einen Eintrag in der Serverconfig
set am_error_bots "0"
Die 0 mit der von dir gewünschten Anzahl der Bots ersetzen und Server neu starten.
__________________
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.
|
|
|
|
|
|
|
das mit den bots iss so ne sache, meines wissens wollen die mit dem punkbuster nicht tun, und auf meinem homeserver zum testen daheim läuft nur windoofs. aber da bin ich grad auch am testen.
da bestand das problem nicht, da ich glaube, das windows die fehler versucht auszubügeln...
EDIT: das bots doof sind, wissen wir ja, aber die tummeln sich lieber zuhauf als spectator, wie das game zu betreten...
ist es generell falsch, das ich das level.firstblood in jedem gametyp in der funktion startGame definiert habe?
oder ist es nur der umständlichere, aber trotzdem richtige weg?
warum es bei mir nicht mehr tut, in der globalen datei die variable zu definieren, weiss ich nicht.
danke, das du dir extra wegen mir soviel mühe machst!!!
ps: das ganze könn mer gern auch mal auf meinem richtigen server (siehe signatur) ansehen, wenn deinerseits zeit und interesse besteht.
ToM
__________________

Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von Nightwing: 29.04.2007 18:54.
|
|
|
|
|
|
|
Original von Nightwing
das mit den bots iss so ne sache, meines wissens wollen die mit dem punkbuster nicht tun, und auf meinem homeserver zum testen daheim läuft nur windoofs.
Naja ich habe es momentan auch nur mit Windows versucht (allerdings sehe ich nichts, was bei Linux nicht auch funktionieren sollte).
Original von Nightwingist es generell falsch, das ich das level.firstblood in jedem gametyp in der funktion startGame definiert habe?
oder ist es nur der umständlichere, aber trotzdem richtige weg?
Ich würde sagen, lediglich umständlicher, aber nicht richtiger oder falscher.
__________________
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.
|
|
|
|
|
|
|
Original von OLD MAN WITH GUN
Ich würde sagen, lediglich umständlicher, aber nicht richtiger oder falscher.
na das hör ich gern.
lieber umständlich und es tut wie einfach und es mag nicht tun, warum auch immer
in der globalen datei hatte ich auch den aufruf für meinen eingebauten Timeannouncer(); drin.
ist man innerhalb der letzten 5 minuten ins spiel gekommen, hätte die uhrzeitfarbe nicht mehr blau sein dürfen, sondern grün. das tat so nicht.
nun habe ich den aufruf auch in die einzelnen dateien rein in die funktion startgame();
und siehe da, es tut.
manchmal denke ich echt, der modder hat sich auch beim unleserlich machen des codes sehr mühe gegeben
EDIT: Ich bekam von dem Modder, Matthias Lorenz, mal eine Antwort.
Er kommt erst im Sommer dazu, die AM weiterzumachen, aber er wird sich meine Änderungen wohl ansehen
na das wär doch cool
Original von OLD MAN WITH GUN
Naja ich habe es momentan auch nur mit Windows versucht (allerdings sehe ich nichts, was bei Linux nicht auch funktionieren sollte).
das dachte ich auch mal...
das mit dem firstblood hat unter windows in der entwicklungsphase sauber getan, unter linux jedoch nicht.
beispiel:
eine freundin, die programmiererin ist, hat sich das angesehen und den fehler dann gefunden:
eAttacker.name
self.name
in win tuts auch ohne das .name, bei linux eben nicht.
leider hat die gute grade urlaub und kann mir daher nicht helfen, daher der post hier, aber immer gut, wenn man mehrere Leute zur hand hat
ToM
__________________

Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von Nightwing: 01.05.2007 23:27.
|
|
|
|
|
|
|
Original von Nightwing
das mit dem firstblood hat unter windows in der entwicklungsphase sauber getan, unter linux jedoch nicht.
beispiel:
eine freundin, die programmiererin ist, hat sich das angesehen und den fehler dann gefunden:
eAttacker.name
self.name
in win tuts auch ohne das .name, bei linux eben nicht.
Das mit und ohne dem .name ist aber auch so ziemlich das einzinste, wo es Unterschiede gibt (zumal der .name für die die Warnungen "WARNING: Non-localized Game Message string is not allowed to have letters in it." verantwortlich ist. Bei Windows geht es ohne .name und es gibt keine Meldungen.)
Genau das ist z.B. auch der Grund, warum es z.B. bei der extreme Mod eine Windows und eine Linux Version gibt. Die Extreme Mod verzichtet weitestgehend auf das .name und gibt bei der Windows Version die Spielernamen des öfteren aus (bei Headshots, Begrüßung usw.), die Linuxversion verzichtet bei diesen Textmeldungen auf die Ausgabe der Spielernamen und nutzt dementspreched andere localized stringfiles (um die Warnmeldungen zu verhindern).
Das ist jedenfalls der einzige Unterschied den ich persönlich kenne (zumal bei mir bis jetzt alles, was ich gescriptet habe, unter beiden Betriebsystemen problemlos lief).
__________________
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
|