#ifndef SERVER_DEFS_H #define SERVER_DEFS_H #include "../common/weapons/all.qh" #define INDEPENDENT_ATTACK_FINISHED noref float require_spawnfunc_prefix; // if this float exists, only functions with spawnfunc_ name prefix qualify as spawn functions #define BUTTON_ATCK button0 #define BUTTON_JUMP button2 #define BUTTON_ATCK2 button3 #define BUTTON_ZOOM button4 #define BUTTON_CROUCH button5 #define BUTTON_HOOK button6 #define BUTTON_INFO button7 #define BUTTON_CHAT buttonchat #define BUTTON_USE buttonuse #define BUTTON_DRAG button8 #define BUTTON_ZOOMSCRIPT button9 #define BUTTON_JETPACK button10 // Globals float g_cloaked, g_footsteps, g_grappling_hook, g_instagib; float g_warmup_limit; float g_warmup_allguns; float g_warmup_allow_timeout; float warmup_stage; float g_pickup_respawntime_weapon; float g_pickup_respawntime_superweapon; float g_pickup_respawntime_ammo; float g_pickup_respawntime_short; float g_pickup_respawntime_medium; float g_pickup_respawntime_long; float g_pickup_respawntime_powerup; float g_pickup_respawntimejitter_weapon; float g_pickup_respawntimejitter_superweapon; float g_pickup_respawntimejitter_ammo; float g_pickup_respawntimejitter_short; float g_pickup_respawntimejitter_medium; float g_pickup_respawntimejitter_long; float g_pickup_respawntimejitter_powerup; float g_jetpack; float sv_clones; float sv_foginterval; float player_count; float currentbots; float bots_would_leave; void UpdateFrags(entity player, float f); .float totalfrags; float team1_score, team2_score, team3_score, team4_score; float maxclients; // flag set on worldspawn so that the code knows if it is dedicated or not float server_is_dedicated; // Fields .void(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) event_damage; //.string wad; //.string map; //.float worldtype; // Needed for dynamic clientwalls .float inactive; // Clientwall disappears when inactive .float alpha_max, alpha_min; .float fade_start, fade_end, fade_vertical_offset; .float default_solid; // Variable to store default self.solid for clientwalls .float pain_finished; //Added by Supajoe .float pain_frame; //" .float crouch; // Crouching or not? .float strength_finished; .float invincible_finished; .float superweapons_finished; .float cnt; // used in too many places .float count; //.float cnt2; .float play_time; .int respawn_flags; .float respawn_time; .float respawn_time_max; .float death_time; .float fade_time; .float fade_rate; // weapon animation vectors: .vector anim_fire1; .vector anim_fire2; .vector anim_idle; .vector anim_reload; void() player_setupanimsformodel; void setanim(entity e, vector anim, float looping, float override, float restart); .string mdl; .string playermodel; .string playerskin; .float species; .float respawntime; .float respawntimejitter; //.float chasecam; .float damageforcescale; const float MIN_DAMAGEEXTRARADIUS = 2; const float MAX_DAMAGEEXTRARADIUS = 16; .float damageextraradius; //.float gravity; .float dmg; // for railgun damage (hitting multiple enemies) .float railgunhit; .float railgunhitsolidbackup; .vector railgunhitloc; .float air_finished; .float dmgtime; .float killcount; .float damage_dealt, typehitsound; .float watersound_finished; .float iscreature; .float damagedbycontents; .float damagedbytriggers; .float pushable; .float teleportable; .vector oldvelocity; .float pauseregen_finished; .float pauserothealth_finished; .float pauserotarmor_finished; .float pauserotfuel_finished; .string item_pickupsound; // definitions for weaponsystem // more WEAPONTODO: move these to their proper files .entity weaponentity; .entity exteriorweaponentity; .vector weaponentity_glowmod; //.int weapon; // current weapon .int switchweapon; // weapon requested to switch to .int switchingweapon; // weapon currently being switched to (is copied from switchweapon once switch is possible) .string weaponname; // name of .weapon // WEAPONTODO .float autoswitch; //float WEP_ACTION(float wpn, float wrequest); float client_hasweapon(entity cl, float wpn, float andammo, float complain); void w_clear(); void w_ready(); // VorteX: standalone think for weapons, so normal think on weaponentity can be reserved by weaponflashes (which needs update even player dies) .float weapon_nextthink; .void() weapon_think; // weapon states (self.weaponentity.state) const int WS_CLEAR = 0; // no weapon selected const int WS_RAISE = 1; // raise frame const int WS_DROP = 2; // deselecting frame const int WS_INUSE = 3; // fire state const int WS_READY = 4; // idle frame // there is 2 weapon tics that can run in one server frame const int W_TICSPERFRAME = 2; void weapon_defaultspawnfunc(float wpn); float gameover; float intermission_running; float intermission_exittime; float alreadychangedlevel; .float version; // footstep interval .float nextstep; float blockSpectators; //if set, new or existing spectators or observers will be removed unless they become a player within g_maxplayers_spectator_blocktime seconds .float spectatortime; //point in time since the client is spectating or observing void checkSpectatorBlock(); float game_completion_ratio; // 0 at start, 1 near end .float winning; .float jointime; // time of joining .float alivetime; // time of being alive .float motd_actived_time; // used for both motd and campaign_message float nJoinAllowed(entity ignore); .float spawnshieldtime; .float item_spawnshieldtime; .entity flagcarried; .int playerid; float playerid_last; .float noalign; // if set to 1, the item or spawnpoint won't be dropped to the floor .vector spawnorigin; .vector death_origin; .vector killer_origin; float default_player_alpha; float default_weapon_alpha; .float() customizeentityforclient; .float cvar_cl_handicap; .float cvar_cl_clippedspectating; .float cvar_cl_autoscreenshot; .float cvar_cl_jetpack_jump; .float cvar_cl_movement_track_canjump; .float cvar_cl_newusekeysupported; .string cvar_g_xonoticversion; .string cvar_cl_weaponpriority; .string cvar_cl_weaponpriorities[10]; .float cvar_cl_gunalign; .float cvar_cl_noantilag; .string weaponorder_byimpulse; .float cvar_cl_allow_uid2name; .float cvar_cl_allow_uidtracking; .string stored_netname; .float version_nagtime; string gamemode_name; float startitem_failed; string W_Apply_Weaponreplace(string in); void FixIntermissionClient(entity e); void FixClientCvars(entity e); // WEAPONTODO: remove this WepSet weaponsInMap; .float respawn_countdown; // next number to count float bot_waypoints_for_items; .float attack_finished_for[WEP_MAXCOUNT]; .float attack_finished_single; #ifdef INDEPENDENT_ATTACK_FINISHED #define ATTACK_FINISHED_FOR(ent,w) ((ent).(attack_finished_for[(w) - WEP_FIRST])) #else #define ATTACK_FINISHED_FOR(ent,w) ((ent).attack_finished_single) #endif #define ATTACK_FINISHED(ent) ATTACK_FINISHED_FOR(ent,(ent).weapon) // assault game mode: Which team is attacking in this round? float assault_attacker_team; // speedrun: when 1, player auto teleports back when capture timeout happens .float speedrunning; // database float ServerProgsDB; float TemporaryDB; .float team_saved; float some_spawn_has_been_used; float have_team_spawns; // 0 = no team spawns requested, -1 = team spawns requested but none found, 1 = team spawns requested and found float have_team_spawns_forteam[17]; // 0 = this team has no spawns, 1 = this team has spawns; team 0 is the "no-team" // set when showing a kill countdown .entity killindicator; .float killindicator_teamchange; void Damage (entity targ, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force); float lockteams; .float parm_idlesince; float sv_maxidle; float sv_maxidle_spectatorsareidle; float tracebox_hits_trigger_hurt(vector start, vector mi, vector ma, vector end); float next_pingtime; .float Version; .int SendFlags; .bool(entity to, int sendflags) SendEntity; // player sounds, voice messages // TODO implemented fall and falling #define ALLPLAYERSOUNDS \ _VOICEMSG(death) \ _VOICEMSG(drown) \ _VOICEMSG(fall) \ _VOICEMSG(falling) \ _VOICEMSG(gasp) \ _VOICEMSG(jump) \ _VOICEMSG(pain100) \ _VOICEMSG(pain25) \ _VOICEMSG(pain50) \ _VOICEMSG(pain75) #define ALLVOICEMSGS \ _VOICEMSG(attack) \ _VOICEMSG(attackinfive) \ _VOICEMSG(coverme) \ _VOICEMSG(defend) \ _VOICEMSG(freelance) \ _VOICEMSG(incoming) \ _VOICEMSG(meet) \ _VOICEMSG(needhelp) \ _VOICEMSG(seenflag) \ _VOICEMSG(taunt) \ _VOICEMSG(teamshoot) #define _VOICEMSG(m) .string playersound_##m; ALLPLAYERSOUNDS ALLVOICEMSGS #undef _VOICEMSG // reserved sound names for the future (some models lack sounds for them): // _VOICEMSG(flagcarriertakingdamage) \ // _VOICEMSG(getflag) \ // reserved sound names for the future (ALL models lack sounds for them): // _VOICEMSG(affirmative) \ // _VOICEMSG(attacking) \ // _VOICEMSG(defending) \ // _VOICEMSG(roaming) \ // _VOICEMSG(onmyway) \ // _VOICEMSG(droppedflag) \ // _VOICEMSG(negative) \ // _VOICEMSG(seenenemy) \ string globalsound_fall; string globalsound_metalfall; string globalsound_step; string globalsound_metalstep; const float VOICETYPE_PLAYERSOUND = 10; const float VOICETYPE_TEAMRADIO = 11; const float VOICETYPE_LASTATTACKER = 12; const float VOICETYPE_LASTATTACKER_ONLY = 13; const float VOICETYPE_AUTOTAUNT = 14; const float VOICETYPE_TAUNT = 15; void PrecachePlayerSounds(string f); void PrecacheGlobalSound(string samplestring); void UpdatePlayerSounds(); void ClearPlayerSounds(); void PlayerSound(.string samplefield, float channel, float voicetype); void GlobalSound(string samplestring, float channel, float voicetype); void FakeGlobalSound(string samplestring, float channel, float voicetype); void VoiceMessage(string type, string message); float GetPlayerSoundSampleField_notFound; .string GetVoiceMessageSampleField(string type); // autotaunt system .float cvar_cl_autotaunt; .float cvar_cl_voice_directional; .float cvar_cl_voice_directional_taunt_attenuation; .float version_mismatch; float independent_players; #define INDEPENDENT_PLAYERS (autocvar__independent_players ? (autocvar__independent_players > 0) : independent_players) #define IS_INDEPENDENT_PLAYER(e) ((e).solid == SOLID_TRIGGER) #define MAKE_INDEPENDENT_PLAYER(e) (((e).solid = SOLID_TRIGGER) + ((e).frags = FRAGS_PLAYER_NONSOLID)) // we're using + here instead of , because fteqcc sucks string clientstuff; .float phase; .int pressedkeys; .float porto_forbidden; .string fog; string cvar_changes; string cvar_purechanges; float cvar_purechanges_count; float game_starttime; //point in time when the countdown to game start is over float round_starttime; //point in time when the countdown to round start is over .float stat_game_starttime; .float stat_round_starttime; void W_Porto_Remove (entity p); .int projectiledeathtype; .string message2; .float stat_allow_oldvortexbeam; // reset to 0 on weapon switch // may be useful to all weapons .float bulletcounter; // Nexball .entity ballcarried; // Also used for keepaway .float metertime; float g_nexball_meter_period; void SUB_DontUseTargets(); void SUB_UseTargets(); .void() reset; // if set, an entity is reset using this .void() reset2; // if set, an entity is reset using this (after calling ALL the reset functions for other entities) void ClientData_Touch(entity e); //vector debug_shotorg; // if non-zero, overrides the shot origin of all weapons .float wasplayer; float servertime, serverprevtime, serverframetime; .float ammo_fuel; .vector prevorigin; //flood fields .float nickspamtime; // time of last nick change .float nickspamcount; .float floodcontrol_chat; .float floodcontrol_chatteam; .float floodcontrol_chattell; .float floodcontrol_voice; .float floodcontrol_voiceteam; .float stat_shotorg; // networked stat for trueaim HUD string matchid; .float last_pickup; .float hit_time; .float typehit_time; .float damage_dealt_total; .float stat_leadlimit; bool radar_showennemies; #ifdef PROFILING float client_cefc_accumulator; float client_cefc_accumulatortime; #endif .float weapon_load[WEP_MAXCOUNT]; .int ammo_none; // used by the reloading system, must always be 0 .float clip_load; .float old_clip_load; .float clip_size; .entity lastrocket; .float minelayer_mines; .float vortex_charge; .float vortex_charge_rottime; .float vortex_chargepool_ammo; .float hagar_load; .int grab; // 0 = can't grab, 1 = owner can grab, 2 = owner and team mates can grab, 3 = anyone can grab #define PROJECTILE_MAKETRIGGER(e) (e).solid = SOLID_CORPSE; (e).dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE // when doing this, hagar can go through clones // #define PROJECTILE_MAKETRIGGER(e) (e).solid = SOLID_BBOX .float spectatee_status; .float zoomstate; .float restriction; .entity clientdata; .entity personal; string deathmessage; .float just_joined; .float cvar_cl_weaponimpulsemode; .float selectweapon; // last selected weapon of the player .float ballistics_density; // wall piercing factor, larger = bullet can pass through more const float ACTIVE_NOT = 0; const float ACTIVE_ACTIVE = 1; const float ACTIVE_IDLE = 2; const float ACTIVE_BUSY = 2; const float ACTIVE_TOGGLE = 3; .float active; .void (float act_state) setactive; .entity realowner; //float serverflags; .float team_forced; // can be a team number to force a team, or 0 for default action, or -1 for forced spectator .float player_blocked; .float weapon_blocked; // weapon use disabled .float frozen; // for freeze attacks .float revive_progress; .float revival_time; // time at which player was last revived .float revive_speed; // NOTE: multiplier (anything above 1 is instaheal) .entity iceblock; .entity frozen_by; // for ice fields .entity muzzle_flash; .float misc_bulletcounter; // replaces uzi & hlac bullet counter. .float stat_respawn_time; // shows respawn time, and is negative when awaiting respawn void PlayerUseKey(); typedef vector(entity player, entity spot, vector current) spawn_evalfunc_t; .spawn_evalfunc_t spawn_evalfunc; string modname; .float missile_flags; const int MIF_SPLASH = 2; const int MIF_ARC = 4; const int MIF_PROXY = 8; const int MIF_GUIDED_MANUAL = 16; const int MIF_GUIDED_HEAT = 32; const int MIF_GUIDED_LASER = 64; const int MIF_GUIDED_AI = 128; const int MIF_GUIDED_TAG = 128; #define MIF_GUIDED_ALL (MIF_GUIDED_MANUAL | MIF_GUIDED_HEAT | MIF_GUIDED_LASER | MIF_GUIDED_AI | MIF_GUIDED_TAG) #define MIF_GUIDED_TRACKING (MIF_GUIDED_HEAT | MIF_GUIDED_LASER | MIF_GUIDED_AI | MIF_GUIDED_TAG) #define MIF_GUIDED_CONFUSABLE (MIF_GUIDED_HEAT | MIF_GUIDED_AI) #define MISSILE_IS_CONFUSABLE(m) ((m.missile_flags & MIF_GUIDED_CONFUSABLE) ? true : false) #define MISSILE_IS_GUIDED(m) ((m.missile_flags & MIF_GUIDED_ALL) ? true : false) #define MISSILE_IS_TRACKING(m) ((m.missile_flags & MIF_GUIDED_TRACKING) ? true : false) //// .entity player_stats; //.float playerid; .string playernick; .float elos; .float ranks; .string cvar_cl_physics; .float init_for_player_needed; .void(entity) init_for_player; #endif