//=================================================================================================================================
//
// EINBINDEN DER UNTERORDNER UND SCRIPTS
//
//=================================================================================================================================
#include <acknex.h>
#include <default.c>
#include "defines.c"
#include "particles.c"
var debugvar_1;
var debugvar_2;
var debugvar_3;
var playercount = 0;
ENTITY* my_id[3000];
//=================================================================================================================================
//
// FUNKTIONEN
//
//=================================================================================================================================
function on_client_event() // terminate client when server disconnects
{
if (event_type == EVENT_LEAVE) sys_exit("Spiel verlassen!");
}
function player_rungame() // reskill2 player when client disconnects
{
if (event_type == EVENT_DISCONNECT) ent_remove(me);
}
//=================================================================================================================================
//
// AKTIONEN
//
//=================================================================================================================================
action flybullet()
{
set(my, PASSABLE | SHADOW | CAST);
while(1)
{
c_move(my, vector(40*time_step,0,0), NULL, GLIDE | IGNORE_FLAG2 | IGNORE_PASSABLE);
c_scan(my, my.pan, vector(360,0,20), IGNORE_FLAG2 | IGNORE_PASSABLE | IGNORE_ME);
if(you)
{
if(you.status == 3)
{
break;
}
else if((you.player_id != my.own_id) && (you.player_team != my.own_team) && (you.status == 2 || you.status == 0))
{
you.health -= 50;
break;
}
else if(my.x >= 5000 && my.x <= -5000 && my.y >= 5000 && my.y <= -5000)
{
break;
}
}
wait(1);
}
ExploA2();
ExploB2();
ExploC2();
ExploD2();
killflare2();
ent_remove(my);
}
action spieleraktion()
{
////////////////////////////////////////////////////// ERSTELLEN DER VIEWS UND LOKALEN OBJEKTE
VIEW* mycam = view_create(500);
mycam.size_x = screen_size.x;
mycam.size_y = screen_size.y;
mycam.tilt = -90;
set(mycam, SHOW);
VIEW* minimap = view_create(1000);
minimap.pos_x = 10;
minimap.pos_y = 10;
minimap.size_x = 250;
minimap.size_y = 150;
set(minimap, SHOW);
reset(camera, SHOW);
PANEL* MM_border = pan_create("", 2000);
MM_border.pos_x = 6;
MM_border.pos_y = 6;
MM_border.bmap = bmap_create("MM_Frame.tga");
set(MM_border, SHOW);
ENTITY* bulget[3000];
////////////////////////////////////////////////////// ERSTELLEN DER EVENTS UND FLAGS
my.event = player_rungame;
my.emask |= ENABLE_DISCONNECT;
my.smask |= NOSEND_FRAME; // don't send animation
set(my, CAST | SHADOW | FAT);
////////////////////////////////////////////////////// ERSTELLEN DER SKILLS
//my.skill1 wird vom Mainscript erstellt und gibt die SpielerID an.
my.health = 1000;
my.energy = 3000;
////////////////////////////////////////////////////// ERSTELLEN DER LOKALEN DATENTYPEN
var aniprozent = 0;
var skill1_old = 0, skill2_old = 0, skill3_old = 0, skill4_old = 0, skill5_old = 0, skill6_old = 0, skill7_old = 0, skill8_old = 0, skill9_old = 0, skill10_old = 0;
var skill11_old = 0, skill12_old = 0, skill13_old = 0, skill14_old = 0, skill15_old = 0;
var skill42_old = 0, skill43_old = 0, skill44_old = 0;
var skill59_old = 0, skill50_old = 0, skill51_old = 0, skill52_old = 0, skill53_old = 0;
var skill97_old = 0, skill98_old = 0, skill99_old = 0;
var bulnumb = 0;
var distance = 0;
VECTOR* my_vertex = nullvector;
VECTOR* my_boneang = {x=0; y=0; z=0;}
ANGLE* my_newboneang;
////////////////////////////////////////////////////// ERSTELLEN DER KOLLISIONSHÜLLE
wait(1);
c_setminmax(my);
vec_set(my.max_x, vector(my.max_x-12, my.max_y, my.max_z+30));
vec_set(my.min_x, vector(my.min_x, my.min_y, my.min_z));
////////////////////////////////////////////////////// MAINCODE
while (1)
{
if (my.client_id == dplay_id) // player created by this client?
{
if (key_w-key_s != my.skill2) { // forward/backward key state changed?
my.skill2 = key_w-key_s;
send_skill(my.skill2,0); // send the key state in reliable mode
}
if (key_a-key_d != my.skill3) { // rotation key changed?
my.skill3 = key_a-key_d;
send_skill(my.skill3,0); // send rotation state in reliable mode
}
if (key_shift != my.skill8) { // running key state changed?
my.skill8 = key_shift;
send_skill(my.skill8,0); // send the key state in reliable mode
}
if (mouse_right != my.skill6) {
my.skill6 = mouse_right;
send_skill(my.skill6,0);
}
if (mouse_left != my.skill5) {
my.skill5 = mouse_left;
send_skill(my.skill5,0);
}
if (key_e != my.button_e) {
my.button_e = key_e;
send_skill(my.button_e,0);
}
if (key_space != my.button_space) {
my.button_space = key_space;
send_skill(my.button_space,0);
}
if (key_enter != my.button_enter) {
my.button_enter = key_enter;
send_skill(my.button_enter,0);
}
if (key_tab != my.button_tab) {
my.button_tab = key_tab;
send_skill(my.button_tab,0);
}
}
if (connection & CONNECT_SERVER) // running on the server?
{
if (my.skill1 != skill1_old) {
send_skill(my.skill1,SEND_ALL);
skill1_old = my.skill1;
}
if (my.skill2 != skill2_old) {
send_skill(my.skill2,SEND_ALL);
skill2_old = my.skill2;
}
if (my.skill3 != skill3_old) {
send_skill(my.skill3,SEND_ALL);
skill3_old = my.skill3;
}
if (my.skill4 != skill4_old) {
send_skill(my.skill4,SEND_ALL);
skill4_old = my.skill4;
}
if (my.skill5 != skill5_old) {
send_skill(my.skill5,SEND_ALL);
skill5_old = my.skill5;
}
if (my.skill5 != skill5_old) {
send_skill(my.skill5,SEND_ALL);
skill5_old = my.skill5;
}
if (my.skill6 != skill6_old) {
send_skill(my.skill6,SEND_ALL);
skill6_old = my.skill6;
}
if (my.skill8 != skill8_old) {
send_skill(my.skill8,SEND_ALL);
skill8_old = my.skill8;
}
if (my.skill10 != skill10_old) {
send_skill(my.skill10,SEND_ALL);
skill10_old = my.skill10;
}
if (my.skill11 != skill11_old) {
send_skill(my.skill11,SEND_ALL);
skill11_old = my.skill11;
}
if (my.skill42 != skill12_old) {
send_skill(my.skill12,SEND_ALL);
skill12_old = my.skill12;
}
if (my.skill15 != skill15_old) {
send_skill(my.skill15,SEND_ALL);
skill15_old = my.skill15;
}
if (my.skill42 != skill42_old) {
send_skill(my.skill12,SEND_ALL);
skill12_old = my.skill12;
}
if (my.skill43 != skill43_old) {
send_skill(my.skill13,SEND_ALL);
skill13_old = my.skill13;
}
if (my.skill44 != skill44_old) {
send_skill(my.skill14,SEND_ALL);
skill14_old = my.skill14;
}
if (my.skill50 != skill50_old) {
send_skill(my.skill50,SEND_ALL);
skill50_old = my.skill50;
}
if (my.skill51 != skill51_old) {
send_skill(my.skill51,SEND_ALL);
skill51_old = my.skill51;
}
if (my.skill53 != skill53_old) {
send_skill(my.skill53,SEND_ALL);
skill53_old = my.skill53;
}
if (my.skill97 != skill97_old) {
send_skill(my.skill97,SEND_ALL);
skill97_old = my.skill97;
}
if (my.skill98 != skill98_old) {
send_skill(my.skill98,SEND_ALL);
skill98_old = my.skill98;
}
if (my.skill99 != skill99_old) {
send_skill(my.skill99,SEND_ALL);
skill99_old = my.skill99;
}
}
if(my.status == 0)
{
my.pan += my.skill3*10*time_step;
distance = my.skill2*(10*(my.skill8+1))*time_step;
c_move(my, vector(distance,0,0), NULL, GLIDE | IGNORE_SPRITES | IGNORE_PASSABLE);
if(my.y < -500 && my.y > -1160 && (my.x > 530 || my.x < -530))
{
vec_set(mycam.x, vector(my.x, my.y, my.z + 400));
}
else
{
c_move(my, NULL, vector(0,0,-1), GLIDE | IGNORE_SPRITES | IGNORE_PASSABLE);
vec_set(mycam.x, vector(my.x, my.y, my.z + 800));
}
minimap.tilt = -90;
vec_set(minimap.x, vector(my.x, my.y, my.z + 1300));
if(my.button_e == 1 && my.get_e == 0)
{
if(my.get_map == 0)
{
set(minimap, SHOW); set(MM_border, SHOW); my.get_map = 1;
}
else
{
reset(minimap, SHOW); reset(MM_border, SHOW); my.get_map = 0;
}
my.get_e = 1;
}
else if(my.button_e == 0 && my.get_e == 1)
{
my.get_e = 0;
}
if(my.skill5 == 1 && my.get_shot1 == 0)
{
if(bulget[bulnumb] != NULL)
{
ent_remove(bulget[bulnumb]);
bulget[bulnumb] = NULL;
}
bulget[bulnumb] = ent_create("Bullet.mdl", my.x, flybullet);
bulget[bulnumb].own_id = my.player_id;
bulget[bulnumb].own_team = my.player_team;
bulget[bulnumb].pan = my.pan;
bulnumb ++;
if(bulnumb >= 2980){bulnumb = 0;}
my.get_shot1 = 1;
}
else if(my.skill5 == 0 && my.get_shot1 == 1)
{
my.get_shot1 = 0;
}
if(my.health <= 1)
{
ExploA();
ExploB();
ExploC();
ExploD();
killflare();
ent_morph(my, "Spielmodell_killed.mdl");
my.status = 1;
}
}
else
{
if(my.button_space == 1 && my.get_space == 0)
{
ent_morph(my, "Spielmodell.mdl");
my.health = 1000;
random_seed(0);
vec_set(my.x, vector(-350+random(700),0,50));
wait(1);
my.status = 0;
my.get_space = 1;
}
else if(my.button_enter == 1 && my.get_enter == 0)
{
ent_morph(my, "Spielmodell.mdl");
my.health = 1000;
random_seed(0);
vec_set(my.x, vector(-350+random(700),0,50));
wait(1);
my.status = 0;
my.get_enter = 1;
}
}
if(my.button_space == 0 && my.get_space == 1){my.get_space = 0;}
if(my.button_enter == 0 && my.get_enter == 1){my.get_enter = 0;}
wait(1);
}
}
//=================================================================================================================================
//
// DAS MAINSCRIPT UND SERVERTEST/SENDEN
//
//=================================================================================================================================
function main()
{
video_mode = 8;
if (!connection) { // not started with -cl / -sv -cl?
if (!session_connect(app_name,"")) // no client found on the localhost?
session_open(app_name); // start as server
}
do { wait(1); }
while (dplay_status < 2); // wait until the session is opened or joined
dplay_entrate = 4; // 16 ticks/4 = 4 updates per second
dplay_smooth = 0; // dead reckoning not needed
dplay_localfunction = 2;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Basis
shadow_stencil = 2;
shadow_mode |= IGNORE_MODELS;
level_load ("mp_game.wmb");
vec_set(camera.x, vector(0, 0, 0));
vec_set(camera.pan, vector (0, -90, 0)); // set a proper camera rotation
vec_set(sky_color.red, vector (10, 10, 10)); // Sky Color
mouse_mode = 2;
mouse_pointer = 1;
mouse_spot.x = 16;
mouse_spot.y = 16;
mouse_map = bmap_create("cursor.png");
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (connection & CONNECT_SERVER) { // this instance of the game runs on the server
video_window(0,0,0,"Servertest");
random_seed(0); // allow random player positions
my_id[playercount] = ent_create ("Spielmodell.mdl", vector(-350+random(700),0,50), spieleraktion); // create OWN player
wait(1);
my_id[playercount].skill1 = playercount;
playercount += 1;
send_var_to(NULL,playercount);
}
else
{ // otherwise, it runs on a connected client
video_window(0,0,0,player_name);
random_seed(0); // allow random player positions
my_id[playercount] = ent_create ("Spielmodell.mdl", vector(-350+random(700),0,50), spieleraktion); // create other players
wait(1);
my_id[playercount].skill1 = playercount;
playercount += 1;
send_var_to(NULL,playercount);
}
while(1)
{
vec_set(mouse_pos.x, mouse_cursor.x);
wait(1);
}
}