Opferlamm-Clan Board
www.opferlamm-clan.de
Verantwortlich für diese bösen Machenschaften: siehe Impressum

Registrierung Kalender Mitgliederliste Suche Häufig gestellte Fragen Zur Startseite

Opferlamm-Clan Board » Call of Duty 2 » Call of Duty 2 - Mapping » CoD2-Mapping-Tutorials » Explodierende Fässer (Multiplayer) » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Thema ist geschlossen
Zum Ende der Seite springen Explodierende Fässer (Multiplayer)
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
yoda yoda ist männlich
Böser Admin

images/avatars/avatar-12.jpg


Dabei seit: 21.01.2004
Beiträge: 12.269


Text Explodierende Fässer (Multiplayer) Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:

Original von bangingbernie
Tutorial für explodierende Fässer (Multiplayer) / Englisches Original von FlesyM

1. Radiant

Erstellt ein script_model mit jedem xmodel eines Fasses, welches Ihr benutzen wollt.

(Rechtsklick 2D-Fenster -> script_model, xmodel auswählen und dann dorthin platzieren, wo
Ihr es hinhaben wollt)

Taste "N" drücken und dann unter "Key" targetname und unter "Value" barrel# eingeben, wobei
die Raute für eine Zahl steht, falls Ihr mehrere Fässer benutzen wollt.

Dann erstellt einen trigger_damage, der das Fass ziemlich eng umfasst.

(Rechtsklick 2D-Fenster -> trigger/damage und dann die entsprechende Grösse eingeben)

Klickt "MELEE_NO" an, damit beim bashen kein Fass explodiert. ;-)

Dann die folgenden Werte eingeben:

"target" barrel#
"targetname" barrel_trig


Dann erstellt Ihr ein script_brushmodel aus einem clip brush, der das Fass umgibt (gleiche Grösse wie der trigger)
und einen origin brush, der sich mit dem script_model deckt, damit kein Spieler durch das Fass läuft.

(Jedes script_brushmodel braucht einen origin brush; die Texturen findet Ihr im tools-Untermenü. Alle brushes auswählen,
inklusive des origin_brush. Rechtsklick 2D-Fenster -> shift und Linksklick, um nur einen brush der entity zu wählen; shift,
alt und Linksklick, um die ganze entity auszuwählen)

Entsprechend dem trigger gebt Ihr nun die folgenden Werte ein:

"target" barrel#
"targetname" barrel_clip


---

2. Scripting

Erstellt eine neue Text-Datei und gebt Ihr den Namen barrels.gsc (kommt dann im iwd-File in maps/mp).

Tragt dort folgendes ein:

barrelInit()
{
level._effect["barrel_fire"] = loadfx ("fx/fire/tank_fire_engine.efx");
level._effect["barrel_explosion"] = loadfx("fx/explosions/ammo_supply_exp.efx");
precacheModel("xmodel/prop_barrel_black");

barrel_trig = getentarray("barrel_trig", "targetname");
barrel_clip = getentarray("barrel_clip", "targetname");

//nebeneinander stehende Fässer explodieren ebenfalls
for( k = 0 ; k < barrel_trig.size ; k++ ) {
barrel1 = getent(barrel_trig[k].target, "targetname");
barrel1.trig = barrel_trig[k];
level.barrels[k] = barrel1;
}

for( k = 0 ; k < barrel_clip.size ; k++ ) {
barrel2 = getent(barrel_clip[k].target, "targetname");
barrel2.clip = barrel_clip[k];
}


//Zustand (explodiert/nicht explodiert) und Namen der Fässer, Löst dann den thread für jedes Fass aus
for( k = 0 ; k < level.barrels.size ; k++ ) {
level.barrels[k].name = "barrel ^" + k + "#" + k;
level.barrels[k].exploded = false;
level.barrels[k].soundOrigin = spawn("script_origin", level.barrels[k].origin);
level.barrels[k] thread barrelThink();
}
}

barrelThink()
{
if (self.exploded == true)
wait(120);

self entityOn();
self.trig entityOn();
self.clip entityOn();

self.accDamage = 0;
self.onfire = false;
self.exploded = false;

while(isdefined (self))
{
self.trig waittill("damage", amount);

self.accDamage = self.accDamage + amount;

//iprintlnbold(self.name + " 's damage = " + self.accDamage);

if (self.exploded != true)
{
if (self.accDamage > 80 && self.onfire != true) //catch fire
{
self.onfire = true;
self thread barrelFire(); //fire start
self thread barrelFireDamage(); //self injury start
}
if (self.accDamage > 80 && self.onfire == true)
{
//nothing
}
if (self.accDamage > 200) //explosion
{
self.onfire = false;
self.exploded = true;
self.soundOrigin playsound("barrel_explosion_imminent");
wait(4); //lenght of sound file
self thread barrelExplode();
self.trig entityOff();
self.clip entityOff();
self entityOff();
self barrelThink();
break;
}
} else //(self.exploded == true)
break;
}

}

//Schaden. Nur ein thread pro Fass
barrelFireDamage()
{
while (self.exploded != true)
{
self.trig notify ("damage", 10);
wait(randomint(2)+1);
}
}


//FX wird ausgelöst. Nur ein thread pro Fass existiert
barrelFire()
{
while(self.exploded != true) //keeps playing the effect until exploded
{
self.soundOrigin playsound("barrel_fire");
playfx(level._effect["barrel_fire"], self.origin + (0,0,32));
radiusDamage(self.origin + (0,0,12), 75, 10, 0);
wait(2);
}

}

barrelExplode()
{
//Nebenstehende Fässer explodieren; abhängig vom Schadensradius
for (k = 0; k < level.barrels.size; k++)
{
if ( level.barrels[k].exploded != true && level.barrels[k] != self)
{
dist = distance(level.barrels[k].origin, self.origin);
if (dist < 100 && dist != 0)
level.barrels[k].trig notify("damage", ((1-(dist/100))*100)+100); // zwischen 100 und 200 Schaden
}
}

self.soundOrigin playsound("barrel_explosion");
playfx(level._effect["barrel_explosion"], self.origin);

//Rundherum grosser Schaden
radiusDamage(self.origin + (0,0,12), 400, 200, 30);

//self.trig notify ("damage", 5); //Finale Explosion
}

//Fässer-Respawn
entityOff()
{
if (!isdefined (self.realOrigin))
self.realOrigin = self.origin;

if (self.origin == self.realorigin)
self.origin += (0, 0, -10000);
}

entityOn()
{
if (isDefined (self.realOrigin) )
self.origin = self.realOrigin;
}


---

3. Auslösen des Thread

Tragt in Eure mp_EureMap.gsc folgendes ein:

maps\mp\barrels::barrelInit();

Das sollte dann so aussehen:

main()
{
maps\mp\mp_EureMap_fx::main(); //falls Ihr eine fx.gsc habt
maps\mp\barrels::barrelInit();
maps\mp\_load::main();
//...usw.
}


Damit Ihr auch den entsprechenden Sound habt, tragt Ihr in Eurer csv.Datei im soundaliases-Ordner
noch folgende Werte ein:

barrel_explosion,,explosions/exp_armoredcar.wav,0.8,1,,,,50,1000,local,stre
amed,,,,mp_EureMap,,,,,,,,
barrel_explosion_imminent,,misc/metal_stress01.wav,0.6,1,,,,50,500,local,st
reamed,,,,mp_EureMap,,,,,,,,
barrel_fire,,fire/Fire_Sm_loop01.wav,0.01,1,,,,50,400,auto,streamed,,,,mp_E
ureMap,,,,,,,,


Das War's.

---

Falls ich was vergessen/falsch übersetzt habe, hier ist der Original-Thread:
http://www.modsonline.com/Forums-top-22940.html

P.S.: Wenn Ihr ein's der folgenden Fässer verwendet, fällt die Prozedur des Erstellens eines script_brushmodels und origin brush weg, da es hierfür collmaps gibt:

prop_barrel_benzin
prop_barrel_benzin_snow
prop_barrel_benzin_wet


Dann folgendes in der barrels.gsc weglassen:

barrel_clip = getentarray("barrel_clip", "targetname");

und

for( k = 0 ; k < barrel_clip.size ; k++ ) {
barrel2 = getent(barrel_clip[k].target, "targetname");
barrel2.clip = barrel_clip[k];
}


Funktioniert einwandfrei; Bilder anbei :-)






---

Fragen könnt ihr hier stellen:
Explodierende Fässer (Multiplayer)

__________________
"Fürs Internet sollte das Baumhaus-Prinzip gelten:
Wer zu alt ist, um ohne Hilfe reinzukommen, soll uns darin auch keine Vorschriften machen."

Diskutiere nie mit einem Idioten - zuerst zwingt er Dich auf sein Niveau herab und dann schlägt er Dich mit Erfahrung...
yoda ist offline Homepage von yoda Beiträge von yoda suchen Nehmen Sie yoda in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Thema ist geschlossen
Opferlamm-Clan Board » Call of Duty 2 » Call of Duty 2 - Mapping » CoD2-Mapping-Tutorials » Explodierende Fässer (Multiplayer)

Impressum ||Datenschutzerklärung

Forensoftware: Wbb - WoltLab GmbH || zum Archiv