Admiral MOD Addon für Killingspree, Firstblood u. Headshot |
|
2. Level. Variable für "First Blood"
level.firstblood = 0;
Diese Variable müsst ihr in der Datei "_admiral_mod" unter StartGame() einfügen.
Zeilennummer: 26
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:
|
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 XXX **//
level.firstblood = 0; //** Variabel für ersten Kill -FIRST BLOOD-
//** ---Ende für XXX--- **//
maps\mp\gametypes\_admiral_mod_hud::showAutoDownload();
maps\mp\gametypes\_admiral_mod_hud::showClanLevelLogoText();
...
...
...
} |
|
__________________

|
|
|
|
|
|
3. Definition für "Killspree" Text
Den Text musst du in der Datei "_admiral_mod_precache" unter Precache() einfügen.
Zeilennummer: 329
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:
|
Precache() {
...
...
...
if(game["am_use_colored_smokegrenades"] == 1) {
precacheItem("red_smoke_grenade_mp");
precacheItem("blue_smoke_grenade_mp");
precacheItem("green_smoke_grenade_mp");
}
//** hinzugefügt für XXX **//
precachestring(&" ^1Killingspree!");
precachestring(&" ^1Ultra Kill!");
precachestring(&" ^1Rampage!");
precachestring(&" ^1Dominating!");
precachestring(&" ^1Monster Kill!");
precachestring(&" ^1Holy Shit!");
precachestring(&" ^1Slaughter!");
precachestring(&" ^1Unstoppable!");
precachestring(&" ^1Godlike!");
//** ---Ende für XXX--- **//
game["am_precached_done"] = true;
} |
|
Hab den Text jetzt nicht in den "Localised String" definiert, das heisst wenn du den Text Ändern willst musst
du es in der Datei "_admiral_mod_precache" und "_myaddon" machen.
__________________

|
|
|
|
|
|
4. Code für "Headshot", "First Blood" und Aufruf der Datei "_myaddon"
Folgender Code wird in die Datei "_admiral_mod_player" unter
PlayerKilled(eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration) eingefügt,
wobei die Zeilen von 1231 bis 1250 überschrieben werden muessen.
Zeilennummer: 1231
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:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
|
PlayerKilled(eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration) {
...
...
...
break;
case "right_foot":
state = "right_foot";
break;
}
if(state != "none") self maps\mp\gametypes\_admiral_mod_hud::ShowHitFigur(state);
}
//** hinzugefügt für XXX **//
if( sMeansOfDeath == "MOD_HEAD_SHOT" )
{
if(game["am_show_kill_hit_location"] > 0 && isDefined(eAttacker) && isPlayer(eAttacker) && self != eAttacker) {
loc_name = GetHitLocation(sHitLoc);
weapon = maps\mp\gametypes\_admiral_mod_weapons::GetWeaponName(maps\mp\gametypes\_admiral_mod_utils::deleteAMextension(sWeapon));
dist = distance(self.origin,eAttacker.origin);
if(sWeapon == "tnt_bomb_mp") weapon = "TNT";
if(sWeapon == "artillery_mp") weapon = "Artillery";
if(dist < 60 || weapon == "Grenade" || weapon == "TNT" || weapon == "Artillery") dist = randomfloat(30)+60;
s = int(dist/39.37);
// s = s/10.0;
if(game["am_show_kill_hit_location"] == 1) iprintln("^7" + loc_name + ": ^7"+ s + " m (^7"+ weapon +")");
if(game["am_show_kill_hit_location"] == 2) self iprintln("^7" + loc_name + ": ^7"+ s + " m (^7"+ weapon +")");
if(game["am_show_kill_hit_location"] == 3) self iprintlnbold("^7" + loc_name + ": ^7"+ s + " m (^7"+ weapon +")");
}
}
/**/// Kopfschuss Nachrichten und Sounds
if( sMeansOfDeath == "MOD_HEAD_SHOT" )
{
weapon = maps\mp\gametypes\_admiral_mod_weapons::GetWeaponName(maps\mp\gametypes\_admiral_mod_utils::deleteAMextension(sWeapon));
if(sWeapon == "tnt_bomb_mp") weapon = "TNT";
if(sWeapon == "artillery_mp") weapon = "Artillery";
dist = distance(self.origin,eAttacker.origin);
s = int(dist/39.37);
// s = s/10.0;
// eAttacker iprintlnBold ( "^1Head Shot!^7 " , self.name , " ^5eliminiert. Distanz:^3 " , s , " ^5Meter!" ); //** Textnachricht in Bildschirmmitte fuer den Schuetzen **////** s ist die Distanz des kills aus dem Admiral Mod **//
eAttacker playlocalSound ( "headshot" ); //** Soundnachricht fuer den Schuetzen **//
eAttacker.Headshot = 1;
self iprintlnBold ( "^1Head Shot!^7 " , eAttacker.name , " ^5hat Dich eliminiert. ^5Distanz:^3 " , s , " ^5 Meter!" ); //** Textnachricht in Bildschirmmitte fuer den Getöteten **////** s ist die Distanz des kills aus dem Admiral Mod **//
self playlocalSound ( "headshot" ); //** Soundnachricht fuer den Getöteten **//
iprintln ( "^1Head Shot!^7 " , eAttacker.name , " ^5eliminierte^7 " , self.name );//** Textnachricht links unten füralle Spieler **////** s ist die Distanz des kills aus dem Admiral Mod **//
iprintln ( Weapon , " ^5Distanz:^3 " , s , " ^5Meter!" );
}
/**/// durch die Ausgabe von iprintln erscheinen nun 2 Ausgaben links unten für den Kopfschuss
/**/// Nachricht fuer ersten Kill -FIRST BLOOD-
if( level.firstblood == 0 && !isDefined ( self.switching_teams ) )
{
players = getentarray("player", "classname");
if( isPlayer ( eAttacker ) )
{
for( i=0;i < players.size;i++ )
{
if( players[i] != self )
{
players[i] iprintlnbold( "FIRST BLOOD wurde vergossen von ", eAttacker );
/**/// Nachricht wenn Keine Teams vorhanden sind
if( level.teamplay == 0 )
players[i] iprintlnbold( "und das arme Schwein war ", self );
/**/// Nachricht wenn Teams vorhanden sind
else if( eAttacker.pers["team"] != self.pers["team"] && eAttacker != self && level.teamplay == 1 )
players[i] iprintlnbold( "und das arme Schwein war ", self );
else if( eAttacker.pers["team"] == self.pers["team"] && eAttacker != self && level.teamplay == 1 )
players[i] iprintlnbold( "und es hat sein Teammitglied", self , "erwischt" );
if( eAttacker == self ) //** Nachricht wird nur Ausgegeben dei Selbstmord **//
players[i] iprintlnbold( "und er leidet an Schizophrenie" );
if( eAttacker.Headshot == 1 )
wait 2;
players[i] playlocalsound( "firstblood" ); //** Sound für alle Spieler mit Ausnahme des Getöteten **//
}
}
if( isPlayer ( self ) )
{
self iprintlnbold( eAttacker , " hat dein Blut als erster vergossen" ); //** Textnachrichten in Bildschirmmitte an den Getöteten **//
wait 2;
self playLocalSound ( "firstblood" ); //** Soundnachricht für den Getöteten **//
wait 2;
self playLocalSound ( "whyami" ); //** Soundnachricht für den Getöteten **//
}
}
level.firstblood++; //** Erster Kill wurde gemacht Variable != 0 gesetzt **//
}
thread maps\mp\gametypes\_myaddon::Killingspree(eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc);
//** ---Ende für XXX--- **//
self.spawnProtection = undefined;
self maps\mp\gametypes\_admiral_mod_compass::DeleteCamping();
self ClearHud();
self thread maps\mp\gametypes\_admiral_mod_sounds::TalkDeath(); |
|
Die Angabe der Entfernung ist nun mit Metern ohne Kommastellen fixierd.
Für eine Ausgabe mit einer Kommastelle ist der Code in den Zeilen 1248, 1249 und 1267, 1268 wie folgt zu Ändern
Code angehängt. Klicke hier zum Ein-/Ausblenden
code: |
1:
2:
|
s = int(dist/3.937);
s = s/10.0; |
|
__________________

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von {LSB} Squall69: 21.02.2007 10:43.
|
|
|
|
|
|
5. Killingspree
Der Code für die "Killingspree" ist in einer eigenen Datei mit dem Namen "_myaddon"
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:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
|
Killingspree(eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc)
{
self endon("disconnected");
/**/// Textgrösse und Coordinaten für Text
Textsize = 1.5;
xcoord = 0;
ycoord = 0;
if(!isDefined(eAttacker.KillsiRow))
{
eAttacker.KillsiRow = 0;
eAttacker.EndSpree = 0;
}
if(!isDefined(self.KillsiRow))
{
self.KillsiRow = 0;
self.EndSpree = 0;
}
/**/// setzen der var für Killspree wenn man stirbt
if( self.KillsiRow <= 2 )
{
self.KillsiRow = 0;
}
if(isdefined(eAttacker.hud_costumprint))
eAttacker.hud_costumprint destroy();
if(isdefined(self.hud_costumprint))
self.hud_costumprint destroy();
/**/// setzen der var für Killspree Ende
if( self.KillsiRow >= 3 )
self.EndSpree = 1;
/**/// Ckeck ob eine Killspree zu Ende ist
if( self.EndSpree == 1 )
{
if( self.KillsiRow >= 11 )
iprintln ( eAttacker.name , " stopte " , self , " ^1Godlike" );
else if( self.KillsiRow >= 10 )
{
iprintln ( eAttacker.name , " stopte " , self , " ^1Unstoppable" );
}
else if( self.KillsiRow >= 9 )
{
iprintln ( eAttacker.name , " stopte " , self , " ^1Slaughter" );
}
else if( self.KillsiRow >= 8 )
{
iprintln ( eAttacker.name , " stopte " , self , " ^1Holy Shit" );
}
else if( self.KillsiRow >= 7 )
{
iprintln ( eAttacker.name , " stopte " , self , " ^1Monster Kill" );
}
else if( self.KillsiRow >= 6 )
{
iprintln ( eAttacker.name , " stopte " , self , " ^1Dominating" );
}
else if( self.KillsiRow >= 5 )
{
iprintln ( eAttacker.name , " stopte " , self , " ^1Rampage!" );
}
else if( self.KillsiRow >= 4 )
{
iprintln ( eAttacker.name , " stopte " , self , " ^1Ultra Kill" );
}
else if( self.KillsiRow >= 3 )
{
iprintln ( eAttacker.name , " stopte " , self , " ^1Killingspree!" );
}
self playLocalSound ( "whyami" );
/**/// Killingspree ist vorbei setze Variablen neu
self.EndSpree = 0;
self.KillsiRow = 0;
}
/**/// Ckeck ob eine Killspree zu läuft
if( eAttacker != self ) //** ohh für einen Selbstmord gibt es schon gar nix**//
{
sound = undefined;
eAttacker.KillsiRow++;
if( !isdefined ( eAttacker.hud_costumprint ) )
{
eAttacker.hud_costumprint = newClientHudElem ( eAttacker );
eAttacker.hud_costumprint.horzAlign = "left";
eAttacker.hud_costumprint.vertAlign = "top";
eAttacker.hud_costumprint.x = xcoord;
eAttacker.hud_costumprint.y = ycoord;
eAttacker.hud_costumprint.font = "default";
eAttacker.hud_costumprint.fontscale = Textsize;
}
if( eAttacker.KillsiRow == 3 )
{
iprintln ( eAttacker.name , " ^1Killingspree!" );
sound = "killingspree";
eAttacker.hud_costumprint setText( &" ^1Killingspree!" );
}
if( eAttacker.KillsiRow == 4 )
{
iprintln ( eAttacker.name , " ^1Ultra Kill!" );
sound = "ultrakill";
eAttacker.hud_costumprint setText( &" ^1Ultra Kill!" );
}
if( eAttacker.KillsiRow == 5 )
{
iprintln ( eAttacker.name , " ^1Rampage!" );
sound = "rampage";
eAttacker.hud_costumprint setText( &" ^1Rampage!" );
}
if( eAttacker.KillsiRow == 6 )
{
iprintln ( eAttacker , " ^1Dominating!" );
sound = "dominating";
eAttacker.hud_costumprint setText( &" ^1Dominating!" );
}
if( eAttacker.KillsiRow == 7 )
{
iprintln ( eAttacker.name , " ^1Monster Kill!" );
sound = "monsterkill";
eAttacker.hud_costumprint setText( &" ^1Monster Kill!" );
}
if( eAttacker.KillsiRow == 8 )
{
iprintln ( eAttacker.name , " ^1Holy Shit!" );
sound = "holyshit";
eAttacker.hud_costumprint setText( &" ^1Holy Shit!" );
}
if( eAttacker.KillsiRow == 9 )
{
iprintln ( eAttacker.name , " ^1Slaughter!" );
sound = "slaughter";
eAttacker.hud_costumprint setText( &" ^1Slaughter!" );
}
if( eAttacker.KillsiRow == 10 )
{
iprintln ( eAttacker.name , " ^1Unstoppable!" );
sound = "unstoppable";
eAttacker.hud_costumprint setText( &" ^1Unstoppable!" );
}
if( eAttacker.KillsiRow >= 11 )
{
iprintln ( eAttacker.name , " ^1Godlike!" );
sound = "godlike";
eAttacker.hud_costumprint setText( &" ^1Godlike!" );
}
if( eAttacker.Headshot == 1 )
{
wait 2;
eAttacker playLocalSound( sound );
}
else if( eAttacker.Headshot != 1 )
eAttacker playLocalSound( sound );
eAttacker.Headshot = 0;
}
} |
|
Um die Position oder Groesse der Bildschirmanzeige für die Killspree zu ändern musst du die Werte der Variablen
Textsize = 1.5; (Textgrösse )
xcoord = 0; (nach rechts +, nach links -)
ycoord = 0; (nach unten + )
ändern, der Basispunkt der Anzeige ist "Oben - Mitte"
Edit: das mit unstoppable ist nun korrekt.
__________________

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von {LSB} Squall69: 21.02.2007 22:38.
|
|
|
|
|
|
6. Einfügen der Sounds
Die Sounds kannst du in einer neuen Soundalias Datei fixieren oder du verwendest die bestehende (iw_multiplayer2.csv) des Admiral mod.
Folgende Daten sind einzufügen.
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:
|
# MySounds
# Headshot
headshot,,mysounds/headshot.mp3,1,1,,,,1000000,,auto,streamed
# FirstBlood
firstblood,,mysounds/firstblood.mp3,1,1,,,,1000000,,auto,streamed
# Killingspree
killingspree,,mysounds/killingspree.mp3,1,1,,,,1000000,,auto,streamed
ultrakill,,mysounds/ultrakill.mp3,1,1,,,,1000000,,auto,streamed
rampage,,mysounds/rampage.mp3,1,1,,,,1000000,,auto,streamed
dominating,,mysounds/dominating.mp3,1,1,,,,1000000,,auto,streamed
monsterkill,,mysounds/monsterkill.mp3,1,1,,,,1000000,,auto,streamed
holyshit,,mysounds/holyshit.mp3,1,1,,,,1000000,,auto,streamed
slaughter,,mysounds/slaughter.mp3,1,1,,,,1000000,,auto,streamed
unstoppable,,mysounds/unstoppable.mp3,1,1,,,,1000000,,auto,streamed
godlike,,mysounds/godlike.mp3,1,1,,,,1000000,,auto,streamed
# More then one place
hallelujah,,mysounds/hallelujah.mp3,1,1,,,,1000000,,music,streamed
whyami,,mysounds/whyami.mp3,1,1,,,,1000000,,auto,streamed |
|
Sounddateien sind in dem Ordner sounds unter mysounds (neuer Ordner) abzulegen.
__________________

|
|
|
|
|
|
aha, so siehts einfacher aus ;-)
ich wills mit drinhaben, wenn mir n andrer kopf wächst, muss ich nicht lang suchen
das macht ja sinn.
dankeschön
__________________

|
|
|
|
|
|
Wer interesse hat, zusätzlich einen Timeannoucer wie bei Extreme+ einzubauen, der möge hier weiterlesen ;-)
__________________

|
|
|
|
|
|
Original von {LSB} Squall69
Code angehängt. Klicke hier zum Ein-/Ausblenden
code: |
1:
2:
3:
4:
5:
6:
7:
|
/**/// Entfernung in Metern ohne Nachkomma
// s = int(dist/39.37);
/**/// Entfernung in Metern mit einer Nachkommastelle
s = int(dist/3.937);
s = s/10.0;
|
|
Wennst beides gleichzeitig reinmachen willst, ist es so am sinnvollsten, da du dann nur mehr am Zeilenanfang // einügen und löschen musst.
Sinnvoller ist es wohl eher, eine Variable zu nutzen, da man es dann von außerhalb der Mod steuern kann, ohne die Mod noch einmal zu verändern
z.B:
Das in die Datei "_admiral_mod" bei StartGame() rein
Code angehängt. Klicke hier zum Ein-/Ausblenden
code: |
1:
2:
3:
4:
|
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"); |
|
Und das in die Datei "_admiral_mod_player" unter PlayerKilled( ... ) an die zwei besagten Stellen
Code angehängt. Klicke hier zum Ein-/Ausblenden
code: |
1:
2:
3:
4:
|
if(level.nachkomma == "0")
s = int(dist/39.37); // Entfernung in Metern ohne Nachkommastelle
else
s = int(dist/3.937)/10; // Entfernung in Metern mit einer Nachkommastelle |
|
Hab es jetzt nicht getestet, sollte aber funktionieren
Somit kann man jederzeit (z.B: aus der Serverconfig heraus) über die Variable am_meter_mit_nachkomma entscheiden, ob man eine Nachkommastelle haben will oder nicht.
__________________
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 kann und werd ich dir erst anbieten, wenn die restlichen kleinen bugs und wünsche verwirklicht sind.
geb ja keine halbfertige arbeit ab
ne server ip kann ich die nächsten tage geben, sofern der kerl, ders einrichtet, mal den arsch bewegt!!!
__________________

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