[Tutorial] Explosive Modelle

-tiger-
Vorlage von display | Modsonline

1. Öffnet im Radianten das com_propane_tank.map Prefab, ihr findet es unter: Prefab --> Misc_Models --> com_propane_tank.map. Speichert das Prefab mit einem anderen Namen ab zb. explo_propane_tank.

2. Erstellt nun einen Brush der genauso groß ist wie das Model. Nun überzieht ihr den Brush mit der clip_nosight Textur. Drückt die Taste 4, damit ist die Grid Größe 8 ausgewählt ist. Markiert den Brush, geht dann oben im Radianten auf Brush --> Arbitrary sided cylinder, gebt in dem neuen Fenster die Zahl 12 ein damit der Brush 12 Zylinderseiten bekommt.

3. Markiert das Model und drückt die Taste N, im Entity Fenster gebt ihr unter Key: targetname und unter value: explodable_model ein. Macht einen Haken vor NO_SHADOW und NO_STATIC_SHADOWS, dadurch werden keine Schatten für das Model erstellt. Achtet darauf das das Model mittig ausgerichtet ist (origin 0 0 0). Markiert jetzt noch den Brush und drückt W. Dadurch wird das skript_model mit dem Brush verbunden, jetzt speichern.



Platziert das Prefab in eure Map und speichert eure Map ab. Nun könnt ihr eure Map Kompilieren.

maps\mp\_explosive_models::main(); fügt diese Zeile in euremap.gsc ein, rawfile,maps/mp/_explosive_models.gsc und die Zeile fügt ihr unter update your zone file ein.

Erstellt eine neue .gsc Datei und speichert es unter raw/maps/mp als _explosive_models.gsc ab.

_explosive_models.gsc:

Code einblendenCode 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:
main()
{
models = getentarray("explodable_model", "targetname");
if (models.size > 0)
{
level.breakables_fx["explode"] = loadfx( "explosions/grenadeexp_metal" );
}

level.barrelExpSound = "explo_metal_rand";

for(i = 0; i < models.size; i++)
{
models[i] thread explodable_model_think();
}
}

explodable_model_think()
{
//targeted brushmodels take priority over proximity based breakables - nate
if (isdefined(self.target))
{
targ = getent(self.target,"targetname");
if(targ.classname == "script_brushmodel")
{
self.remove = targ;
}
}
accumulate = 40;
threshold = 0;
dmg = 0;

self setcandamage(true);
while(1)
{
self waittill("damage", amount, other);
if (amount >= threshold)
{
dmg += amount;
if (dmg >= accumulate)
{
self thread explodable_model_explode();
}
}
}
}

explodable_model_explode()
{
Self = getentarray("explodable_model", "targetname");

if (isdefined (self.remove))
{
self.remove delete();
}

if(isdefined(self))
{
origin = self getorigin();
range = 200;
maxdamage = 200;
mindamage = 1;

self playsound (level.barrelExpSound);
playfx(level.breakables_fx["explode"], origin);
radiusDamage(origin, range, maxdamage, mindamage);

self delete();
}
}



skript info:

range ist Größe des Schadens Radius,
maxdamage ist Maximale Größe des Player Schadens
explosions/grenadeexp_metal ist der Effekt
barrelExpSound ist der soundalias Name
Marvin
Nur mal ne fräge:

Kann man dafür auch ein anderes Model als das im Beispiel nehmenEin Fragezeichen Keinen Plan?

Marvin
-tiger-

Zitat:

Original von Marvin
Nur mal ne fräge:

Kann man dafür auch ein anderes Model als das im Beispiel nehmenEin Fragezeichen Keinen Plan?

Marvin


Ja, man kann jedes XModel dafür verwenden. Aber es muss dann zu ein skript_model gemacht werden.
Marvin
Ahh danke, jetzt kann ich auch mal andere Fässer zum explodieren bringen! Augenzwinkern

mfg Marvin
jtms
Danke tiger für das Script Freude
Ich dachte mir, wenn ich eine fetten Tank habe soll der ja mehr schaden machen als so ein winziger gasbehälter, deshalb hab ich das script ein bisschen erweitert:

Code einblendenCode 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:
main()
{
models = getentarray("explodable_model", "targetname");
if (models.size > 0)
{
level.breakables_fx["explode"] = loadfx( "explosions/grenadeexp_metal" );
}
 
level.barrelExpSound = "explo_metal_rand";
 
for(i = 0; i < models.size; i++)
{
models[i] thread explodable_model_think();
}
}
 
explodable_model_think()
{
//targeted brushmodels take priority over proximity based breakables - nate
if (isdefined(self.target))
{
targ = getent(self.target,"targetname");
if(targ.classname == "script_brushmodel")
{
self.remove = targ;
}
}
accumulate = 40;
threshold = 0;
dmg = 0;
 
self setcandamage(true);
while(1)
{
self waittill("damage", amount, other);
if (amount >= threshold)
{
dmg += amount;
if (dmg >= accumulate)
{
self thread explodable_model_explode();
}
}
}
}
 
explodable_model_explode()
{
Self = getentarray("explodable_model", "targetname");
 
if (isdefined (self.remove))
{
self.remove delete();
}
 
if(isdefined(self))
{
origin = self getorigin();

if (isdefined(self.range))
{
	range = self.range;
}
else
{
	range = 200;
}

if (isdefined(self.mindamage))
{
	mindamage = self.mindamage;
}
else
{
	mindamage = 1;
} 

if (isdefined(self.maxdamage))
{
	maxdamage = self.maxdamage;
}
else
{
	maxdamage = 300;
} 
 
self playsound (level.barrelExpSound);
playfx(level.breakables_fx["explode"], origin);
radiusDamage(origin, range, maxdamage, mindamage);
 
self delete();
}
}





1.: Bist du damit einverstanden, dass ich in deinem script rumpfusche?
2.: funktioniert das so?

LG
JTMS
Hippie

Zitat:

1.: Bist du damit einverstanden, dass ich in deinem script rumpfusche? 2.: funktioniert das so?


zu 1.
Ist es nicht ein bisserl spät um nach der Erlaubnis zu fragen? Hast doch schon darin rumgebastelt :/

zu 2.
Wenn du nicht weißt was passiert wenn du mit Parametern spielst, laß' es.

Nur meine Meinung cool
jtms
Ich weiß sehr wohl was ich da geschreiben habe. Es gibt auch keinen fehler.