Ahso, hab bisher noch nicht mit den Templates gearbeitet...lernt man mehr (ichzuminderst).

Mein simpler "Shooting Range für Anfänger Probleme..." ist jetzt fertig"...kann das Level aber noch nicht verschicken (damn GMX Account), erst am Montag.

Also Poste ich mal nur das Skript......schau
dir die shoot Befehle an...
Der Skill "precision" gibt an wie weits die Waffe abhängig von der Entfernung zum Ziel nach rechts verzieht.

Trotzdem, keine Waffe ist eine Punktwaffe...fänd ich langweilig wenn jede Waffe punktgenau trifft...


Bmap arrow=<arrow.pcx>;
skill testskill {val 0;}
skill testskill2 {val 0;}

skill fishmove {x 0;y 0;}
skill fish {pan 0; tilt 0;x 0; y 0; z 0;}
// Fishkamera Skills
skill unittouched {val 0;}
skill fishview {val 0;}

// Cursor Skills
skill cursorpos {x 0; y 0; z 0;}
skill waypoint {x 0; y 0; z 0;}
skill waypointset {val 0;}

///rainbow fish skills
skill playermove {x 0; y 0; z 0;}

action Start_entity {
mouse_range=1000;
mouse_mode=1;
mouse_map=arrow;
my.tilt=-90; // Fisch schaut nach unten.

while (1) {
if (fishview==0) {

mouse_pos.x=pointer.x;
mouse_pos.y=pointer.y;
mouse_pos.z=pointer.z;

// Kamera wird an Fisch angehängt also ne Fischkamera.
camera.x=my.x;
camera.z=my.z;
camera.y=my.y;
camera.pan=my.pan;
camera.tilt=my.tilt;
camera.roll=my.roll;
fish.x=my.x;
fish.y=my.y;
fish.z=my.z;
//Fishkamera bleibt auf konstanter Höhe über dem Boden.
Sonar me,500;
if (result>299) {my.z-=1*time;}
if (result<301) {my.z+=1*time;}

//Steuerung der Fishkamera per Cursor Tasten.
my.x+=10*key_force.y*time;
my.y-=10*key_force.x*time;

//Fishkamera bewegt sich nicht über Map Rand hinaus.
if (my.x>340) {my.x-=5;}
if (my.x<-340) {my.x+=5;}
if (my.y>295) {my.y-=5;}
if (my.y<-295) {my.y+=5;}


// Mit der linken Maustaste Einheit bewegen
if (mouse_left==1)&&(Unittouched==1) {mouse_mode=0; create <fish.mdl>,cursorpos,cursor_action;wait 16;
unittouched=0;}
//Das Wait sorgt dafür das nicht meherere klicks

}

wait 1;}
}


Action cursor_action {

my.passable=on;
my.roll=90;
my.scale_x=0.5;
my.scale_y=0.5;
my.scale_z=0.5;
while (1) {
if (fishview==0) {
sonar me,200;
if (result>50) {my.z-=1*time;} //cursor etwas höher damit über gebäude
if (result<50) {my.z+=1*time;}

//Cursor bewegt sich mit Cursortasten/Maus.
my.x+=20*mouse_force.y*time;
my.y-=20*mouse_force.x*time;
my.x+=10*key_force.y*time;
my.y-=10*key_force.x*time;

my.skill11+=1;
if ((mouse_left==1)&&(my.skill11>10)) {waypointset=1; my.skill11=0; Waypoint.x=my.x; Waypoint.y=my.y;Waypoint.z=my.z; mouse_mode=1; remove me; end;}
}
wait 1;}
}

/// Skills für Baufahrzeug
skill baufahrzmove {x 1; y 0; z 0;}

action Baufahrzeug_event {
if (event_type==event_touch) {cursorpos.x=my.x; cursorpos.y=my.y;
cursorpos.z=my.z;unittouched=1;my.skill10=1;}


}

action Baufahrzeug_action {

my.enable_touch=on; //Löst Event aus, wenn von Maus berührt worden.
my.event=Baufahrzeug_event;

while(1) {

if (fishview==0) {
sonar me,200;
if (result>25) {my.z-=1*time;}
if (result<25) {my.z+=1*time;}

temp.x = my.skill12 - my.x;
temp.y = my.skill13 - my.y;
//temp.z = my.skill14 - my.z;
to_angle my_angle,temp;

my.skill15=ang(my.pan-my_angle.pan);

if (my.skill15>3) {my.pan-=2.5;}
if (my.skill15<-3) {my.pan+=2.5;}

if (((my.x<my.skill12+3)&&(my.x>my.skill12-3))&&((my.y<my.skill13+3)&&(my.y>my.skill13-3)))
{my.skill40=111; }]else { move me,baufahrzmove,nullskill;}
//
if ((my.skill10==1)&&(waypointset==1)) { // wenn ich berührt wurde und der wegpunkt gesetzt wurde
my.skill12=waypoint.x;
my.skill13=waypoint.y;
my.skill14=waypoint.z;

my.skill10=0;
waypointset=0;}
} else {
my.visible=off;

camera.x=my.x; camera.z=my.z;camera.y=my.y;
camera.tilt+=10*mouse_force.y;
camera.pan-=10*mouse_force.x;
//////// Player movement
sonar me,500;


my.pan=camera.pan;
playermove.x=20*key_force.y*time;
move me,playermove,nullskill;

}

wait 1;}

}

/////////////
/////////////
// Rainbow Fish
skill shootstart {x 0;y 0; z 0;}
skill shootstartpan {pan 0;}
skill shootstarttilt {tilt 0;}
skill shootend {x 0;y 0;z 0;}
skill shootfired {val 0;}
//
skill weaponrange {val 5000;}
skill shootcadenz {val 5;}
skill precision {val 0;}
//
skill ammonition {val 300;}
skill shootimpact {x 0; y 0; z 0;}
skill playerhight {val 30;}
on_space Crosshair_action;


action Crosshair_action {
mouse_mode=0;
fishview=1;
fish.x+=160;
fish.y+=160;

create <croshair.bmp>,fish,crosshair2_action;
while(1) {
if ((mouse_left==1)&&(shootfired==0)) { call player_schuss; }
wait 1;}
}

skill crosspos {x 0; y 0; z 0;}
skill crossmove {x 0; y 0; z 0;}
skill crossnearer {x 10; y 0; z 0;}
action crosshair2_action {
my.facing=off;
my.oriented=on;
my.scale_x=0.2;
my.scale_y=0.2;
my.scale_z=0.2;


while (1) {
my.z=fish.z;
my.tilt=camera.tilt;
my.pan=camera.pan;
my.unlit=on;
my.ambient=100;
my.passable=off;
camera.tilt+=10*mouse_force.y*time;

my.X = camera.X +(90-camera.tilt) * COS(camera.pan);
my.Y = camera.Y +(90-camera.tilt) * SIN(camera.pan);
my.z = camera.z +(90-camera.tilt) *tan (camera.tilt);


wait 1;}
}

action player_schuss {


shootstartpan=camera.pan;
shootstarttilt=camera.tilt;
shootfired = 1;
testskill2=shootfired;

shootstart.X = camera.X +120 * COS(camera.pan); // nicht selber treffen
shootstart.Y = camera.Y +120 * SIN(camera.pan);
shootstart.z = camera.z +120 *tan (camera.tilt);

shootend.X = shootstart.X +random(precision)+weaponrange * COS(shootstartpan);
shootend.Y = shootstart.Y +random(precision)+weaponrange * SIN(shootstartpan);
shootend.z = shootstart.z+weaponrange*tan(shootstarttilt);

shoot shootstart,shootend;
camera.tilt+=random(1);
camera.pan+=random(1);
playerhight=shootstart.x;
// pl=shootstarttilt;
shootimpact.x = target.x;
shootimpact.y = target.y;
shootimpact.z = target.z;
//play_sound explo_sound,300;
create <testhole.bmp>,shootimpact,impact_action;
wait shootcadenz;
shootfired = 0;
testskill=shootfired;

}

// schuss loch und ammozähler
action impact_action {
set my.passable on;
set my.oriented on;
my.ambient=50;
ammonition-=1;
my.pan=shootstartpan;
//emit 5,aufschlag,particle_scatter;
wait 128; // wann der schussverschwindet

remove me;
end;
}


///// Sniper Mode
skill nightvision {val 0;}
on_n night_vision;
action night_vision { //
//
if (nightvision == 0) { //
camera.arc = 30;
camera.fog= camera.fog - 50;
camera.ambient = camera.ambient + 50; // stärke von restlichtverstärker
nightvision=1;
} else {
set fog_color 2; // Später Umgebungslicht von Hauptskript..
camera.arc = 50;
camera.fog=10;
camera.ambient=camera.ambient-50;
nightvision=0;
}
}


////// Flying Fish
skill flyingfishmove { x 0;y 0; z 0;}
skill fishstart {x 0;y 0; z 0;}
skill maximalFish {val 60;}
var fishdir [3];
var fishangle [3];
skill Points {val 0;}

action flyfish_thrower {
while (1) {
fishstart.x=camera.x;
fishstart.y=camera.y;
fishstart.z=camera.z+50;
maximalfish-=1;
create <fish.mdl>,fishstart,flying_fish;
wait 55;
}
}

on_enter flyfish_thrower;

action fishhit_event {
if (event_type==event_shoot) {
if (ammonition>0) {points+=10;}
maximalfish+=1; remove me;end;}
}

action flying_fish {
my.enable_shoot=on;
my.event=fishhit_event;
while (1) {
if (maximalfish>0) {
my.tilt=10;
my.pan+=5*time;
}
flyingfishmove.x=10*time;
move me,flyingfishmove, nullskill;
// Too much fishes will kill player....

if (maximalfish<1) {
// turns fish to player...
vec_set(fishdir,camera.x);
vec_sub(fishdir,my.x);
to_angle fishangle,fishdir;
my.pan=fishangle.pan;
my.tilt=fishangle.tilt;
}

wait 1;
}

}


font standart_font,<msgfont.bmp>,12,16;

panel debug_panel {
pos_x 0;
pos_y 12;
flags visible,refresh;
digits 40,2,4,standart_font,1,Ammonition;
digits 40,90,4,standart_font,1,Points;

}

Skript "includen" ne Ebene basteln...ein Fishmodel drauflegen..Skript an fish.mdl anfügen..Crosshair Sprite in Work speichern..

Space= Aussteigen aus Fishmobil
N= Sniper Mode...
Enter = Fishattack


Funktionierts?