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 4 » Fix-Dateien, Modding-Fragen, Scripting » Atombombe » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Atombombe 1 Bewertungen - Durchschnitt: 10,001 Bewertungen - Durchschnitt: 10,001 Bewertungen - Durchschnitt: 10,001 Bewertungen - Durchschnitt: 10,001 Bewertungen - Durchschnitt: 10,00
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
pf1995
Weichei


Dabei seit: 26.05.2011
Beiträge: 5


Atombombe Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 unglücklich

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 ist offline Beiträge von pf1995 suchen Nehmen Sie pf1995 in Ihre Freundesliste auf
serthy
Codemeister


images/avatars/avatar-104.jpg


Dabei seit: 29.07.2010
Beiträge: 628


Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

gibt mehrere möglichkeiten
die stungranate ist höchstwahrscheinlich eine gescriptete waffe
(nehme ich jetzt mal an)
versuche mal eine neue granate in den weaponfiles zu erstellen die einen schaden von min und max 1 anrichtet aber mit einem radius von 10000000000000 oder so
somit kann man in der Callback_PlayerDamage über vPoint herausfinden wo die granate explodiert war
dann einfach alle spieler in einem array aufführen und mit einem shellshock 'stunnen'natürlich eine eigene effect.efx datei erstellen so wie du willst und halt jeweils da aufrufen wann wo wie du willst
timing geht damit auch perfekt

war das in etwa so wie du das woltest?
serthy ist offline E-Mail an serthy senden Beiträge von serthy suchen Nehmen Sie serthy in Ihre Freundesliste auf
pf1995
Weichei


Dabei seit: 26.05.2011
Beiträge: 5


Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 ist offline Beiträge von pf1995 suchen Nehmen Sie pf1995 in Ihre Freundesliste auf
serthy
Codemeister


images/avatars/avatar-104.jpg


Dabei seit: 29.07.2010
Beiträge: 628


Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

okay, ^^
ich glaub dir alles zu erklären dauert etwas zu lange
ich werfde im laufe der woche (oder vll länger wegen mein bday und männertag und wochenende Zunge raus ) ein atombomben-script schreiben
ist zwar für cod2, wird aber zu 99% auch bei cod4 gehen
serthy ist offline E-Mail an serthy senden Beiträge von serthy suchen Nehmen Sie serthy in Ihre Freundesliste auf
pf1995
Weichei


Dabei seit: 26.05.2011
Beiträge: 5


Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hm, vielen Dank smile
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 grosses Grinsen


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:
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.

pf1995 ist offline Beiträge von pf1995 suchen Nehmen Sie pf1995 in Ihre Freundesliste auf
serthy
Codemeister


images/avatars/avatar-104.jpg


Dabei seit: 29.07.2010
Beiträge: 628


Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

oh also du hast doch schon bisschen ahnung :p (mehr als ich)

Zitat:

//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 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:
#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 einblendenCode 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 einblendenCode 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.

serthy ist offline E-Mail an serthy senden Beiträge von serthy suchen Nehmen Sie serthy in Ihre Freundesliste auf
pf1995
Weichei


Dabei seit: 26.05.2011
Beiträge: 5


Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

die init() hab ich in der globallogic.gsc geaddet, damit ist meine variable
jedenfalls ingame da gewesen und entsprechend gesetzt worden.

Zitat:

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?

Zitat:

oh also du hast doch schon bisschen ahnung :p (mehr als ich)

ich habe eher das gegenteilige gefühl^^ (oder war das ironie? grosses Grinsen )
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 smile
pf1995 ist offline Beiträge von pf1995 suchen Nehmen Sie pf1995 in Ihre Freundesliste auf
serthy
Codemeister


images/avatars/avatar-104.jpg


Dabei seit: 29.07.2010
Beiträge: 628


Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

-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.

serthy ist offline E-Mail an serthy senden Beiträge von serthy suchen Nehmen Sie serthy in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Opferlamm-Clan Board » Call of Duty 4 » Fix-Dateien, Modding-Fragen, Scripting » Atombombe

Impressum ||Datenschutzerklärung

Forensoftware: Wbb - WoltLab GmbH || zum Archiv