|
 |
pf1995
Weichei
Dabei seit: 26.05.2011
Beiträge: 5

|
|
Hallo,
Ich versuche, einen Sprengsatz zu erzeugen, der die gesamte Map zuerst durch eine
Druckwelle(concussion_grenade.efx, distort effekt)
stunnt (Handgranate)
und dannach ein dickes, kugelförmiges Leuchten über die Map fegt, jeder der mit dem Leuchten in Kontakt kommt, stirbt.
Das Problem ist nur, dass die Granaten / das C4 immer nur einen Effekt zulassen. Das RPG hat zusätzlich einen (ignite, schätzungsweise das Feuer der Raketenzündung)
Jetzt stellt sich mir die Frage, wie ich den Stunneffekt mit dem RPG verbinde; wie ich die Leute erst dann sterben lasse, wenn das Leuchten "ungefähr" bei ihnen ist, ist mir ebenfalls ein Rätsel
Kann mir eventuell einer einen Stoß in die richtige Richtung geben?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von pf1995: 30.05.2011 16:10.
|
|
|
|
|
pf1995
Weichei
Dabei seit: 26.05.2011
Beiträge: 5

|
|
also erstelle ich in meinem mod-ordner eine neue .gsc,
//setze variable, um das script zu steuern
//precache den shellshock
//starte effekt
//starte shellshock
//get derzeitige koordinaten
//get explosionskoordinaten
//errechne distanz
//starte explosions effekt
//wait distanz / ausbreitungsgeschwindigkeit
//töte spieler
wenn alles perfekt getimed ist, sollte der player also direkt beim auftreffen
des leuchtens sterben ...
nun habe ich allerdings das problem, noch nicht intensiv mit den scripts
in kontakt gekommen zu sein.
>wie lese ich den vPoint aus? ich habe kein return statement gefunden
>welche funktion bringt mir die koordinaten des players?
>wie töte ich per script den player?
>wie bekomme ich überhaupt die information, dass die nate hochgegangen ist?!
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von pf1995: 30.05.2011 21:12.
|
|
|
|
|
pf1995
Weichei
Dabei seit: 26.05.2011
Beiträge: 5

|
|
Hm, vielen Dank
Es tut mir leid, dass ich aufgrund meiner
Unkenntnis zur Last falle, aber falls es irgendwie zu gebrauchen ist, ich
habe mal ein Code / Pseudocode - Gemisch geschrieben. Vielleicht ist ja
irgendwie ein Ansatz, ... irgendwie ^^
Ich wünsche dir dann mal alles Gute und viel Spaß in der nächsten Woche
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:
|
init()
{
if(GetDvar( "svr_macht" ) == "") SetDvar("svr_macht", "1"); //rettungsvariable vor der Macht
precacheShellshock("flashbang");
thread force();
}
force()
{
for(;;)
{
if(GetDvar( "svr_macht" ) == "1")
{
//if (bombe ist explodiert) thread detonation
}
}
}
detonation()
{
// get explosionsKords: ek
lfx = LoadFX( "shockwelle" ); //lade effekt
pfx = PlayFX( lfx, ek ); //spiele effekt ab
players = level.players;
ttd = []; //time to die
for(i = 0;i < players.size;i++) //jeden player bangen .. ahm, flashbangen
{
player = players[i];
if (player.sessionstate == "playing") //tote oder zuschauer shocken? näää
{
player ShellShock( "flashbang", 50);
pk = GetEye(); //laut cod4-script-doc.c.la die position des auges eines spielers / einer AI
distanz = Distance(pk, ek);
ttd[ttd.size] = distanz/10*100 //10m pro sekunde fiktiver rechenwert
} // *100 weil später in der forschleife mit hundertstel
}
lfx2 = LoadFX( "explosion" ); //effekt laden
pfx2 = PlayFX( lfx2, ek ); //effekt abspielen
b_ttd_notEmpty = true;
while(b_ttd_notEmpty)
{
for(i = 0;i < ttd.size;i++) //jeden kleinen moment alle positionen durchgehen
{
ttd[i] - 1; //time to die von kandidat i -1 hundertstel
if(ttd[i] <= 0)
{
players[i].sessionstate = "death"; //spieler umlegen?!
}
b_ttd_notEmpty = isEmpty(ttd); //ist schon alles leer?
wait 0.01;
}
}
}
isEmpty(ttd)
{
b = false;
for(i = 0;i < ttd.size && !b;i++)
{
if(ttd[i] > 0)
{
b = true;
}
}
return b;
} |
|
der Pseudocode in den Kommentaren fehlt mir einfach, und ob
das Grundgerüst des Programms richtig ist, die Implementierung
mal vorne weg gelassen, ... kp ^^
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von pf1995: 30.05.2011 22:45.
|
|
|
|
|
serthy
Codemeister
  
Dabei seit: 29.07.2010
Beiträge: 628

|
|
oh also du hast doch schon bisschen ahnung :p (mehr als ich)
//jeden player bangen .. ahm, flashbangen
muhaha ^^
also ein paar dinge:
-mache am besten oben eine init() funktion hin, die du beim laden des spieltyps aufrust, dadrin precachesd du alle effekte, models, shellshocks etc.
mein ansatz war der grade eben, lol
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:
|
#include maps\mp\gametypes\_grz_utils;
init()
{
game["effect"]["atombomb_down"] = loadFx( "fx/zombie/mine_explode.efx" );
game["effect"]["atombomb_up"] = loadFx( "fx/zombie/mine_explode.efx" );
game["effect"]["atombomb_glow"] = loadFx( "fx/zombie/mine_explode.efx" );
level.atombomb_timetilldeath = 6;
}
atombomb_start()
{
self playsound( "atomic_income" );
playFx( game["effect"]["atombomb_glow"] , self.origin );
self thread atombomb_damage();
self waittill( "atombomb_explode" );
playFx( game["effect"]["atombomb_up"] , self.origin );
playFx( game["effect"]["atombomb_down"] , self.origin );
}
atombomb_damage()
{
eInflictor = self;
eAttacker = self;
iDFlags = 1;
sWeapon = "none";
sMeansOfDeath = "MOD_UNKNOWN";
vPoint = self.origin;
sHitLoc = "none";
psOffsetTime = 0;
players = getentarray( "player" , "classname" );
for( i = 0 ; i < players.size ; i++ )
{
player = players[i];
if( player.sessionstate != "playing" )
continue;
iDamage = player.health + player.maxhealth;
vDir = vectorNormalize( player.origin - self.origin );
player thread atombomb_death( eInflictor , eAttacker , iDamage , iDFlags , sMeansOfDeath , sWeapon , vPoint , vDir , sHitLoc , psOffsetTime );
}
}
atombomb_death( eInflictor , eAttacker , iDamage , iDFlags , sMeansOfDeath , sWeapon , vPoint , vDir , sHitLoc , psOffsetTime )
{
self shellshock( "default" , level.atombomb_timetilldeath );
wait level.atombomb_timetilldeath;
eAttacker notify( "atombomb_explode" );
self finishPlayerDamage( eInflictor , eAttacker , iDamage , iDFlags , sMeansOfDeath , sWeapon , vPoint , vDir , sHitLoc , psOffsetTime );
}
|
|
der code ist an MW2 angelehnt, mit der tactical nuke
(alle sterben, ohne mapende)
wenn du die entfernung zum explosionsort unbeding mit einbringen willst, dann habe ich folgenden vorschlag:
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
|
getDamage( player , iDamage , iRange )
{
dist = distance( player.origin , vPoint );
percent = ( iRange - dist ) / iRange;
iDamage *= percent;
return iDamage;
} |
|
so hast du den schaden je nach entfernung
auch würde ich anstatt 'default'-shellshock selber einen shellshock erstellen, den der hat mir eben beim testn nicht ganz gefallen
und ich muss mir noch was überlegen zu dem schaden, wenn du die spieler töten willst und dafür punkte haben möchtest, musst du
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
|
player [[level.callbackPlayerDamage]]( self , eAttacker , iDamage , iDFlags , sMeansOfDeath , sWeapon , self.origin , vDir , "none" , 0 ); |
|
einfügen, das problem dabei ist das deine teammitglieder nicht betroffen sind (bei friendlyfire aus), da müsste man einen extra parameter einfügen
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von serthy: 30.05.2011 23:15.
|
|
|
|
|
pf1995
Weichei
Dabei seit: 26.05.2011
Beiträge: 5

|
|
die init() hab ich in der globallogic.gsc geaddet, damit ist meine variable
jedenfalls ingame da gewesen und entsprechend gesetzt worden.
das problem dabei ist das deine teammitglieder nicht betroffen sind (bei friendlyfire aus), da müsste man einen extra parameter einfügen
naja, wenn friendlyfire in echtzeit verändert werden kann, wie zb die variable "g_gravity", könnte man das für den schaden ändern
Bei deinem Code für die Explosionsrange müsste man noch was ändern,
weil mein Gedanke ja war die Spieler zu verschonen, BIS .. zu dem Zeitpunkt an dem sie das Leuchten des Effekts erreicht, ich habe vor, den Effekt langsam genug zu gestalten, dass man davon auch was mitbekommt^^
was ich logisch noch nicht ganz kapiert habe, das Script hat ja jeder,
sprich jeder spieler geht das players-array durch und setzt die funktion
atombomb_death auf sie ein?!
der andere punkt ist, wo gedenkst du atombomb_start() zu starten?
kann man in den waffendefinitionen ein event festlegen, dass vom
script abgefragt wird, oder wie machst du das?
oh also du hast doch schon bisschen ahnung :p (mehr als ich)
ich habe eher das gegenteilige gefühl^^ (oder war das ironie?
)
ich weiß einfach nicht genau,
wie ich das script nun auch mit der waffe verbinde, wie ich die entsprechenden funktionen genau an den zeitpunkten starte, bei
denen sie gestartet werden sollen
ps: eventuell wäre ja ein chatsystem eine bessere lösung, um unverständlichkeiten direkt zu erkennen und zu klären
|
|
|
|
|
serthy
Codemeister
  
Dabei seit: 29.07.2010
Beiträge: 628

|
|
-also als test habe ich mir ein shop gebastelt, wie die quickmessages und dann mit z.b. V-4-1 gestartet
-wenn du eine waffe haben willst, die sozusagen die bombe abfeuert, könntest du wie oben schon beschrieben über vPoint gehen und mit
if( sWeapon == "bombe_mp" ) - den script starten
-wenn du einige spieler raushaben möchtest die nicht betroffen sind, einfach:
if( player.is_no_target ) continue;
-das mit der zeit würde ich dann mit dem kleinen damage-script machen, anstatt damage halt die zeit nehmen und die aus der kl. funktion kommende zeit subtrahieren, sollte gehen
-und nein das war nicht ironisch gemeint
-und ich würde eher eine extra variable mit einfügen, anstatt friendly fire zu ändern, find ich persönlich sicherer
-du könntest es auch so machen, dass sobald du die waffe bekommst eine schleife startest die aller 0.05 sekinden deine aktuelle waffe abfragt, und ob du den attackbutton-drückst (bzw bei cod4 kann jede taste abgefragt werden, glaube ich) und dann daraus den script starten, es gibt da ziemlich viele verschiedene möglichkeiten
mein xf ist serthy, bin allerdings nicht allzuoft da
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von serthy: 31.05.2011 18:05.
|
|
|
|
|
|
|
|
 |
Impressum ||Datenschutzerklärung
|