serthy
Codemeister
  
Dabei seit: 29.07.2010
Beiträge: 628

|
|
| eigenes geschütz erstellen |
 |
hey leute
hab mir mal komplett modsonline von cod 2 und cod 4 durchgsehen und mir die meisten einträge angeschaut, und ja ich bin viel schlauer geworden
nun mal eine frage
ich würde mir gerne einen eigenen geschützturm (z.b. wie ein flak-vierling oder eine flak) mappen/scripten
ich weiß, das man den player mit link to oder so (genaue befehle hab ich nicht im kopf, stehen aber in einen script) an das geschütz bindet
man ermittelt dann die angles vom player und richtet die kanone dann darauf aus, das ist bis jetzt das kleinere problem
dann weiß ich das man script origins an die geschützrohre linkt und da seine fx abspielt
mit viel bastelarbeit könnte ich das eventuell hinbekommen
(es müsste ja ein origin gesetzt werden um das sich das geschütz bzwdie rohre bewegen, steh grad aufm schlauch)
nur weiß ich leider noch nicht wie man den schaden an das geschütz bindet, es muss ja schiessen und am ziel auch eine 'einschlag-fx' abspielen sowie schaden anrichten
achso es soll natürlich für den multiplayer sein
ich schreib morgen mal weiter und versuch ein script zu entwickeln xD
ich hoffe ihr könnt mir helfen, ich hab zu so einen thema noch nirgends was gelesen
Serthy *<:-D
Edit:
ich würde ein credits-system dazu einfügen, wo man pro runde und pro kills/killstreak bestimmte punkte bekommt
grundlagen kenn ich schon, nur wollte ich wissen ob man und wie weit man das mapseitig machen muss und wie weit man das modweitig machen kann?
mapseitig hab ich bereits eine creditsanzeige, give_ammo script usw
aber ich kann ja keinen gesamten minimod in die gsc kloppen?
da ich vom scripten vll 5 % versteh und von modden 10 % weniger
frag ich euch mal
in einem jahr sieht das ganz anders aus :p
Lg serthy
Dieser Beitrag wurde 5 mal editiert, zum letzten Mal von serthy: 10.12.2010 17:38.
|
|
|
|
|
 |
serthy
Codemeister
  
Dabei seit: 29.07.2010
Beiträge: 628

|
|
| RE: eigenen geschützturm erstellen |
 |
hey hab mir mal 4-5 scripte für benutzbare flaks flugzeuge panzer jeeps und vierlinge angesehn und den den ich teilweise verstanden hab war der script aus der map chelmfinal für die benutzbare flak-88
hier der script:
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:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
|
//oraco aug.2006
//flak simulator script by Julian
main(){
precacheShader("white"); //needed for drawing crosshair
level.targetcolor = (1,1,1); //crosshair color, red=reload, green=fire, dot=target collision
level.angles = (0,0,0); //the angles where player is looking at; horizontal and verticle
level.lastangles = (0,0,0); //last angle in the cycle
level.barrelangles = (0,0,0); //angles where the gun barrel is aimming at, direction it shoots
level.gunpoint = (0,0,0); //the tip of the gun point, where we play light and smoke fx when shot
level.nohit = 1; //no hit is 1 if there is no target collision if shot
level.flak_inuse = 0; //only one person can use flak at a time, inuse =0 or 1
level.reloaddelay = 3;
//off or on by cvar "/seta chelm_flak 1" (1=on, 0=off, undefined=off, default=on)
if(isdefined(getcvar("chelm_flak")) && getcvar("chelm_flak") == "0")
wait 0.1;
else{
if(!isdefined(getcvar("chelm_flakdelay")))
level.reloaddelay = 12;
else{
if(getcvar("chelm_flakdelay") == "0")
level.reloaddelay = 3;
else if(getcvar("chelm_flakdelay") == "1")
level.reloaddelay = 6;
else if(getcvar("chelm_flakdelay") == "2")
level.reloaddelay = 9;
else if(getcvar("chelm_flakdelay") == "3")
level.reloaddelay = 12;
else if(getcvar("chelm_flakdelay") == "4")
level.reloaddelay = 15;
else if(getcvar("chelm_flakdelay") == "5")
level.reloaddelay = 18;
else if(getcvar("chelm_flakdelay") == "6")
level.reloaddelay = 21;
else if(getcvar("chelm_flakdelay") == "7")
level.reloaddelay = 24;
else if(getcvar("chelm_flakdelay") == "8")
level.reloaddelay = 27;
else
level.reloaddelay = 3;
}
wait 5; //I need this cuz i need the gametypes to finish initializing
thread flak_operator();
thread flak_aim();
thread flak_shoot();
//thread debugflak();
}
}
//==============================Custom Flak88 starts=======================
// allowing only one player to use the flak at a time by pressing F
// moves the player in position and transfers control
flak_operator(){
playerlink = getent("playerlink", "targetname");
outlink = getent("outlink", "targetname");
level.flak_trig = getent("flak_trig", "targetname");
while(1){
players = getentarray("player", "classname");
for(i=0; i<players.size; i++){
player = players[i];
if(isdefined(player) && player istouching(level.flak_trig) && player useButtonPressed() && (level.flak_inuse == 0))
{
while(player useButtonPressed())
wait 0.01;
while(player istouching (level.flak_trig)){
//draw crosshair the dumb way ===========
if (isdefined (player.ch))
player.ch destroy();
player.ch = newClientHudElem(player);
player.ch.x = 316;
player.ch.y = 238;
player.ch.alpha = 0.5;
player.ch.color = level.targetcolor;
player.ch setshader("white", 2, 4);
if (isdefined (player.ch1))
player.ch1 destroy();
player.ch1 = newClientHudElem(player);
player.ch1.x = 322;
player.ch1.y = 238;
player.ch1.alpha = 0.5;
player.ch1.color = level.targetcolor;
player.ch1 setshader("white", 2, 4);
if (isdefined (player.ch2))
player.ch2 destroy();
player.ch2 = newClientHudElem(player);
player.ch2.x = 318;
player.ch2.y = 240;
player.ch2.alpha = 0.5;
player.ch2.color = level.targetcolor;
player.ch2 setshader("white", 4, 2);
if(level.nohit==0){
if (isdefined (player.cd))
player.cd destroy();
player.cd = newClientHudElem(player);
player.cd.x = 318;
player.cd.y = 243;
player.cd.alpha = 0.5;
player.cd.color = (1,1,1);
player.cd setshader("white", 4, 1);
}
else{
if (isdefined (player.cd))
player.cd destroy();
}
//end draw crosshair===================
level.flak_inuse = 1;
player.origin = playerlink.origin;
player linkto(playerlink);
//disable weapons
player disableWeapon();
level.angles = (0-player.angles[0], 180+player.angles[1], 0-player.angles[2]);
level.flak_operator = player;
if(player useButtonPressed()){
while(player useButtonPressed())
wait 0.01;
player unlink();
player enableWeapon();
wait 0.1;
player.origin = outlink.origin;
player linkto(outlink);
wait 0.1;
player unlink();
level.flak_operator = undefined;
break;
}
if(!isdefined(level.flak_operator) || !isdefined(player) || !isAlive(level.flak_operator) || !isAlive(player)){
level.flak_operator = undefined;
break;
}
wait 0.01;
//wait 0.5;
}
level.flak_inuse = 0;
//clear crosshair===========
if (isdefined (player.ch))
player.ch destroy();
if (isdefined (player.ch1))
player.ch1 destroy();
if (isdefined (player.ch2))
player.ch2 destroy();
if (isdefined (player.cd))
player.cd destroy();
//end clear crosshair=======
}
}
wait 0.01;
}
}
//IW - extracted from _utility
vectorScale (vec, scale)
{
vec = (vec[0] * scale, vec[1] * scale, vec[2] * scale);
return vec;
}
//shooting mechanism
flak_shoot(){
timer = level.reloaddelay + 18;
while(1){
if(isdefined(level.flak_operator) && (level.flak_operator attackButtonPressed()) && (timer>(level.reloaddelay+17))){
temp_angles = level.angles;
level.angles += (5,0,5);
level.flak_operator playSound("flak_fire");
playfx(level.flak_light, level.gunpoint);
playfx(level._effect["thin_light_smoke_M"], level.gunpoint);
//shake em
earthquake(0.3, 0.3, level.flak_operator.origin, 100);
wait 0.1;
if(level.nohit == 0 && isdefined(level.hit)){
playfx(level._effect["bombexplosion"], level.hit.origin);
level.hit playSound("building_explosion1");
radiusDamage(vectorScale(level.hit.origin, 0.98), 180, 400, 25);
//scoring system
players = getentarray("player", "classname");
for(i=0; i<players.size; i++){
player = players[i];
away = distance(player.origin, level.hit.origin);
if(away<180){
if(player.health<=0){
level.flak_operator.score++;
iprintln(level.flak_operator.name + "^7 killed "+ player.name + "^7 with ^2Flak88\n");
}
}
}
}
level.angles = temp_angles;
timer = 0;
level.hit = undefined;
}
if((timer==level.reloaddelay+5) && isdefined(level.flak_operator))
level.flak_operator playSound("flak_reloading");
if(timer<(level.reloaddelay+18)){
level.targetcolor = (1,0,0);
timer++;
}
else
level.targetcolor = (0,1,0);
wait 0.2;
}
}
//flak's aim, movement, shooting mechanism
flak_aim(){
//get&spawn ents
pointhit = spawn("script_model", (0,0,0));
flak_chase = getent("flak_chase", "targetname");
flak_gun = getent("flak_gun", "targetname");
flak_barrel = getent("flak_barrel", "targetname");
played = 0;
//main loop
while(1){
//flak's movement======================================
rotate0 = level.angles[0];
rotate1 = level.angles[1];
rotate2 = level.angles[2];
if(level.angles[0]<-6)
rotate0 = -6;
if(level.angles[0]>30)
rotate0 = 30;
if(level.angles[1]<350 && level.angles[1]>270)
rotate1 = 350;
if(level.angles[1]>100 && level.angles[1]<300)
rotate1 = 100;
if(!(level.lastangles == (rotate0, rotate1, rotate2)))
{
flak_chase rotateto((0, rotate1, 0), 0.65);
flak_gun rotateto((rotate0, rotate1, 0), 0.65);
flak_barrel rotateto((rotate0, rotate1, 0), 0.65);
played = 0;
}
else{
if(played == 0){
flak_chase playSound("flak_stop");
played = 1;
}
}
level.lastangles = (rotate0, rotate1, rotate2);
//flak's movement vector calculation===================
origin = anglestoforward(flak_barrel.angles);
origin = (0,0,0)-origin;
shortorigin = vectorScale(origin, 350);
farorigin = vectorScale(origin, 10000);
level.gunpoint = vectorScale(origin, 230);
//flak's target aim position calculation ===============
coll_detect = bulletTrace(shortorigin, farorigin, false, undefined);
//if there is collision then there is a target to play explosion
if(!(coll_detect["fraction"] == 1)){
level.nohit = 0;
pointhit.origin = coll_detect["position"];
//pointhit.origin = vectorScale(pointhit.origin, 0.1);
//level.hit.origin is the position of the target
level.hit = pointhit;
}
else{
level.nohit=1;
}
//else there is no place to play explosion, shooting into sky
wait 0.2; //<-- loop's only wait command, !!important value!!
}
}
//==============================Custom Flak88 ends======================= |
|
wobei das hier der schuss an sich ist:
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:
|
flak_shoot(){
timer = level.reloaddelay + 18;
while(1){
if(isdefined(level.flak_operator) && (level.flak_operator attackButtonPressed()) && (timer>(level.reloaddelay+17))){
temp_angles = level.angles;
level.angles += (5,0,5);
level.flak_operator playSound("flak_fire");
playfx(level.flak_light, level.gunpoint);
playfx(level._effect["thin_light_smoke_M"], level.gunpoint);
//shake em
earthquake(0.3, 0.3, level.flak_operator.origin, 100);
wait 0.1;
if(level.nohit == 0 && isdefined(level.hit)){
playfx(level._effect["bombexplosion"], level.hit.origin);
level.hit playSound("building_explosion1");
radiusDamage(vectorScale(level.hit.origin, 0.98), 180, 400, 25);
//scoring system
players = getentarray("player", "classname");
for(i=0; i<players.size; i++){
player = players[i];
away = distance(player.origin, level.hit.origin);
if(away<180){
if(player.health<=0){
level.flak_operator.score++;
iprintln(level.flak_operator.name + "^7 killed "+ player.name + "^7 with ^2Flak88\n");
}
}
}
}
|
|
hier ist das ziel ja als level.hit.origin definiert, kann mir das jmd mal erläutern?
außerdem steht hier wo die fx beim schuss abgespielt werden:
level.gunpoint = (0,0,0); //the tip of the gun point, where we play light and smoke fx when shot
und
playfx(level.flak_light, level.gunpoint);
playfx(level._effect["thin_light_smoke_M"], level.gunpoint);
wie definiere ich das? müsste ich diesen origin setzen? oder ist ein neues xmodel erstellt worden mit dem origin an der'geschützmündung'?
(ist hier z.b. ein normales flak xmodel verwendet worden? da sich ja nur der obere teil bewegt und der untere fest ist müssten es doch im prinzip 2 xmodel sein, oder?)
und zu guter letzt noch die frage was es mit dem 'level'befehl auf sich hat
ich hoffe ihr könnt mir antworten
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von serthy: 10.12.2010 16:08.
|
|
|
|
|
serthy
Codemeister
  
Dabei seit: 29.07.2010
Beiträge: 628

|
|
okay leute zum aus und absitzen hab ich es ja schon gebracht, jetzt muss ich das ganze noch zum rotieren bringen
dazu werde ich:
>den standfuß mir aus brushes bauen, der fest steht
>das geschütz, (script_brushmodel mit originstab in der achse)wo der player 'draufsitzt' und auch hinverlinkt wird (targetname|frame) das bewegt sich jedoch nur in die y-richtung, da es ja auf dem standfu0 rotiert ergo:>> rotateto((0,wiknel_y_wo_der_spieler_hinschaut,0),time)
>das geschützrohr (script_brushmodel mit originwürfel in der achse) mit targetname|barrel soll/darf sich nur in eine richtung drehen, nach oben und unten, also die x-achse..da man aber die bewegung nicht ausführen kann wenn das rohr mit dem geschütz verbunden ist, muss man das rohr auf der y-achse genauso rotieren lassen wie das geschütz ergo:>> rotateto((winkel_x_wo_spieler_hinschaut,winkel_y_wo_spieler_hinschaut,0),ti
me)
soweit so gut
die winkel bekomme ich mit getplayerangles(); raus
und dazu sieht mein script folgendermaßen aus (erstmal nur mit dem geschütz in eine richtung rotierend, ohne rohr):
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:
|
main()
{
thread linker();
}
linker()
{
trigger = getent( "trig_art","targetname");
playerlink = getent( "link","targetname");
playerunlink = getent( "unlink","targetname");
barrel = getent( "barrel","targetname");
while (1)
{
trigger waittill ("trigger",player);
player.origin = playerlink.origin;
player linkto (playerlink);
player disableWeapon();
iprintln(linked to artillery");
if(player useButtonPressed())
{
while(player useButtonPressed())
wait 0.01;
player unlink();
player enableWeapon();
wait 0.1;
player.origin = playerunlink.origin;
player linkto(playerunlink);
wait 0.1;
player unlink();
iprintln("unlinked");
}
}
while (1)
{
trigger waittill("trigger",player)
while (player.sessionstate == "playing")
{
targetangles = player getplayerangles();
barrel rotateto((0,targetangles[1],0),1);
wait0.1
}
}
}
|
|
wie es nicht anders zu erwarten war ein script compile error mit bad syntax...
könnte mir ein etwas erfahrener scripter eventuell mal diese eine sache berichtigen? ich hab schon in diversen foren gesucht und nirgendswo hab ich das passende gefunden.. wär sehr nett
aber ich bleib am basteln
serthy
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von serthy: 12.12.2010 22:19.
|
|
|
|
|
|
|
Wäre schön, wenn Du den Fehler posten würdest. Da steht immer dabei, in welcher Zeile der Fehler liegt....
__________________

|
|
|
|
|
|
|
Der Fehler tritt doch wohl beim kompilieren auf? Diese Konsole (die kleine, schwarze
) meine ich.
__________________

|
|
|
|
|
 |
serthy
Codemeister
  
Dabei seit: 29.07.2010
Beiträge: 628

|
|
omg jungs ich könnt euch knutschen
ich hab geschafft xD
ich hab einfach mal nur den rotationsscript ausprobiert und es funktioniert einwandfrei
in 5 min kommt der script mit hoffentlich schon 2 bewegungen
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:
|
main()
{
thread linker();
thread rotate();
thread smoke();
}
linker()
{
trigger = getent( "trig_art","targetname");
playerlink = getent( "link","targetname");
playerunlink = getent( "unlink","targetname");
while (1)
{
trigger waittill ("trigger",player);
player.origin = playerlink.origin;
player linkto (playerlink);
player disableWeapon();
iprintln("^3linked to aartillery");
if(player useButtonPressed())
{
while(player useButtonPressed())
wait 0.01;
player unlink();
player enableWeapon();
wait 0.1;
player.origin = playerunlink.origin;
player linkto(playerunlink);
wait 0.1;
player unlink();
iprintln("unlinked");
}
}
}
rotate()
{
barrel = getent("barrel","targetname");
gun = getent("gun","targetname");
trigger_rotate = getent("trig_rotate","targetname");
playerlink = getent( "link","targetname");
gunori = getent("gun_ori","targetname");
gunori enablelinkto();
gunori linkto(gun);
while(1)
{
trigger_rotate waittill ("trigger", player);
while(player.sessionstate == "playing" && player useButtonPressed())
{
targetangles = player getplayerangles();
barrel rotateto((0,targetangles[1],0),1);
gun rotateto((targetangles[0],targetangles[1],0),1);
wait 0.1;
if(player attackButtonPressed())
{
earthquake(0.3, 0.3, playerlink.origin, 100);
iprintln("Earthquake");
playfxontag(level._effect["smoke_plumeBG"], gunori, "tag_origin" );
wait 0.1;
}
}
}
}
smoke()
{
}
|
|
so jetzt ist nur das problem dass wenn ich mich vom geschütz weglinke also wieder normal auf der map rumlaufe, bewegt sich das geschütz immernoch mit... jemand eine idee?
ich hab im geshütz ein trigger multiple (trig_rotate|targetname) geht aber trotzdem nicht
wie sag ich dem spiel das ich nur das bewegen kann solange ich f drücke und nicht länger?
gelöst, script verbessert hab ein player usebuttonpressed() eingefügt
OKAY leute und weiter gehts
ich habe jetzt ein tag_origin (targetname|gun_ori, achtung das kleine dreieck muss ein script_model sein!) vorne an das rohr gelinkt und will da ein effekt abspielen wenn ich schießen drücke
außerdem will ich das ich 3 sekunden warten muss eh ich erneut schießen kann
mit wait 3; klappt es nicht, da bewegt sich das ganze geschütz 3 sekunden nicht, mhh mal weiter basteln
und mit dem fx hab ich auhc noch ein problem
ich update mal eben mein script
ich hab die zeile
playfxontag(level._effect["smoke_plumeBG"], gunori, "tag_origin" );
eingefügt und im ordner maps/mp eine _fx.gsc
und hab sie nat. in meiner haupt gsc aufgerufen
verzweifluuuung xD
irgendetwas stimmt mit meiner _fx.gsc nicht
selbst wenn sie leer ist kommt ein error
unknown function 41166
wenn ich den eintrag aus der main gsc lösche geht es (nur ohne effekt) schreib ich maps\mp\mp_test_fx::main(); rein kommt der error
hier nochmal meine mp_test_fx.gsc:
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
|
main()
{
test_fx();
}
test_fx()
{
level._effect["flak_explosion"] = loadfx ("fx/explosions/flak88_explosion.efx");
} |
|
weiß jemand rat?
okay alles geht einwandfrei
ich weiß nicht woran es lag, hab einfach alle ein paar mal neu geschrieben ^^
jetzt kommen wir wohl zu dem schwersten...
dem schaden
...
Dieser Beitrag wurde 9 mal editiert, zum letzten Mal von serthy: 13.12.2010 21:32.
|
|
|
|
|
serthy
Codemeister
  
Dabei seit: 29.07.2010
Beiträge: 628

|
|
sooooo
leute jetzt gehts ans eingemachte
ich weiß zur schadensübertragung nur soviel:
das i-wie ermittelt wird ob eine collision zwischen geschütz und dem vektor ist
aber wie man das genau macht weiß ich leider echt nicht
vll ein script_origin in 100000000 units entfernung platzeiren und dann mit dem geschütz verlinken und das dazwischen ermitteln und dann rausfinden wo die collision ist und da einen damage erzeuigen
jetztbrauch ich aber echt eure hilfe :S
bitte helft mir
ich hab herausgefunden was man braucht aber ob das alles so stimmt weiß ich leider nicht
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:
|
rotate()
{
pointhit = spawn("script_model", (0,0,0));
barrel = getent("barrel","targetname");
gun = getent("gun","targetname");
gunstart = getent("gun_origin","targetname");
gunstart enablelinkto();
gunstart linkto(gun);
trigger_rotate = getent("trig_rotate","targetname");
playerlink = getent( "link","targetname");
gunori = getent("gun_ori","targetname");
gunori enablelinkto();
gunori linkto(gun);
while(1)
{
trigger_rotate waittill ("trigger", player);
while(player.sessionstate == "playing" && player useButtonPressed())
{
targetangles = player getplayerangles();
barrel rotateto((0,targetangles[1],0),0.7);
gun rotateto((targetangles[0],targetangles[1],0),0.7);
wait 0.1;
if(player attackButtonPressed() && isdefined(level.hit))
{
earthquake(0.3, 0.3, playerlink.origin, 100);
iprintln("Boom");
playfxontag(level._effect["flak_explosion"], gunori, "tag_origin");
radiusDamage(vectorScale(level.hit.origin, 0.98), 180, 400, 25);
wait 0.1;
}
}
}
start = gunstart.origin;
direction = anglesToForward(gun.angles);
direction = (0,0,0)-direction;
tracestart = start;
traceend = start + direction;
coll_detect = bulletTrace(tracestart, traceend, false, undefined);
if(isdefined (coll_detect["fraction"]== 1))
{
pointhit.origin = coll_detect["position"];
level.hit = pointhit;
}
}
|
|
es geht hauptsächlich um den letzten teil mit der collisionsabfrage
bitte kann mal jemand drüber schauen und sagen was grob falsch ist?
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von serthy: 15.12.2010 00:17.
|
|
|
|
|
 | |
|
|
 |
Impressum ||Datenschutzerklärung
|