X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Ft_halflife.qc;h=4f6c1ca0e63585c07586d5356551989f1e8af445;hb=4e85c153239969d8dccea38031e18ddb24b6c935;hp=26ad056f2f602227b58892a12774b932cbde52d4;hpb=4337dab09bbbe024bcc77db446ed76962fb17f0d;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/t_halflife.qc b/qcsrc/server/t_halflife.qc index 26ad056f2..4f6c1ca0e 100644 --- a/qcsrc/server/t_halflife.qc +++ b/qcsrc/server/t_halflife.qc @@ -1,4 +1,21 @@ +#if defined(CSQC) +#elif defined(MENUQC) +#elif defined(SVQC) + #include "../dpdefs/progsdefs.qh" + #include "defs.qh" + #include "vehicles/vehicles_def.qh" +#endif +#include "../warpzonelib/util_server.qh" +#include "miscfunctions.qh" +#ifdef CSQC +#define EXACTTRIGGER_TOUCH if(WarpZoneLib_ExactTrigger_Touch()) return +#endif + +.float ladder_time; +.entity ladder_entity; + +#ifdef SVQC .float roomtype; .float radius; .float pitch; @@ -6,57 +23,147 @@ .float rendermode; .vector rendercolor; -void spawnfunc_weapon_crossbow() {}; -void spawnfunc_weapon_handgrenade() {}; -void spawnfunc_ammo_crossbow() {}; -void spawnfunc_ammo_9mmclip() {}; -void spawnfunc_ammo_gaussclip() {}; -void spawnfunc_weapon_rpg() {}; -void spawnfunc_weapon_357() {}; -void ammo_ARgrenades() {}; -void spawnfunc_item_battery() {}; -void spawnfunc_ammo_rpgclip() {}; -void weapon_9mmAR() {}; -void spawnfunc_weapon_tripmine() {}; -void spawnfunc_weapon_snark() {}; -void spawnfunc_ammo_buckshot() {}; -void ammo_9mmAR() {}; -void spawnfunc_ammo_357() {}; -void spawnfunc_weapon_gauss() {}; -void spawnfunc_weapon_hornetgun() {}; -//void spawnfunc_weapon_shotgun() {}; -void spawnfunc_item_healthkit() {}; -void spawnfunc_item_longjump() {}; -void spawnfunc_item_antidote() {}; -void spawnfunc_func_recharge() {}; -void spawnfunc_info_node() {}; -void spawnfunc_env_sound() {}; -void spawnfunc_light_spot() {}; -void spawnfunc_func_healthcharger() {}; - +void spawnfunc_weapon_crossbow() {} +void spawnfunc_weapon_handgrenade() {} +void spawnfunc_ammo_crossbow() {} +void spawnfunc_ammo_9mmclip() {} +void spawnfunc_ammo_gaussclip() {} +void spawnfunc_weapon_rpg() {} +void spawnfunc_weapon_357() {} +void ammo_ARgrenades() {} +void spawnfunc_item_battery() {} +void spawnfunc_ammo_rpgclip() {} +void weapon_9mmAR() {} +void spawnfunc_weapon_tripmine() {} +void spawnfunc_weapon_snark() {} +void spawnfunc_ammo_buckshot() {} +void ammo_9mmAR() {} +void spawnfunc_ammo_357() {} +void spawnfunc_weapon_gauss() {} +void spawnfunc_weapon_hornetgun() {} +//void spawnfunc_weapon_shotgun() {} +void spawnfunc_item_healthkit() {} +void spawnfunc_item_longjump() {} +void spawnfunc_item_antidote() {} +void spawnfunc_func_recharge() {} +void spawnfunc_info_node() {} +void spawnfunc_env_sound() {} +void spawnfunc_light_spot() {} +void spawnfunc_func_healthcharger() {} +#endif void func_ladder_touch() { - if not(other.iscreature) +#ifdef SVQC + if (!other.iscreature) return; if (other.vehicle_flags & VHF_ISVEHICLE) return; +#endif +#ifdef CSQC + if(other.classname != "csqcmodel") + return; +#endif EXACTTRIGGER_TOUCH; other.ladder_time = time + 0.1; other.ladder_entity = self; -}; +} + +#ifdef SVQC +float func_ladder_send(entity to, float sf) +{ + WriteByte(MSG_ENTITY, ENT_CLIENT_LADDER); + + WriteString(MSG_ENTITY, self.classname); + WriteByte(MSG_ENTITY, self.warpzone_isboxy); + WriteByte(MSG_ENTITY, self.skin); + WriteByte(MSG_ENTITY, self.speed); + WriteByte(MSG_ENTITY, self.scale); + WriteCoord(MSG_ENTITY, self.origin_x); + WriteCoord(MSG_ENTITY, self.origin_y); + WriteCoord(MSG_ENTITY, self.origin_z); + + WriteCoord(MSG_ENTITY, self.mins_x); + WriteCoord(MSG_ENTITY, self.mins_y); + WriteCoord(MSG_ENTITY, self.mins_z); + WriteCoord(MSG_ENTITY, self.maxs_x); + WriteCoord(MSG_ENTITY, self.maxs_y); + WriteCoord(MSG_ENTITY, self.maxs_z); + + WriteCoord(MSG_ENTITY, self.movedir_x); + WriteCoord(MSG_ENTITY, self.movedir_y); + WriteCoord(MSG_ENTITY, self.movedir_z); + + WriteCoord(MSG_ENTITY, self.angles_x); + WriteCoord(MSG_ENTITY, self.angles_y); + WriteCoord(MSG_ENTITY, self.angles_z); + + return true; +} + +void func_ladder_link() +{ + Net_LinkEntity(self, false, 0, func_ladder_send); +} void spawnfunc_func_ladder() { EXACTTRIGGER_INIT; self.touch = func_ladder_touch; -}; + + func_ladder_link(); +} void spawnfunc_func_water() { EXACTTRIGGER_INIT; self.touch = func_ladder_touch; -}; + func_ladder_link(); +} + +#elif defined(CSQC) +.float speed; + +void func_ladder_draw() +{ + float dt = time - self.move_time; + self.move_time = time; + if(dt <= 0) { return; } + + trigger_touch_generic(func_ladder_touch); +} + +void ent_func_ladder() +{ + self.classname = strzone(ReadString()); + self.warpzone_isboxy = ReadByte(); + self.skin = ReadByte(); + self.speed = ReadByte(); + self.scale = ReadByte(); + self.origin_x = ReadCoord(); + self.origin_y = ReadCoord(); + self.origin_z = ReadCoord(); + setorigin(self, self.origin); + self.mins_x = ReadCoord(); + self.mins_y = ReadCoord(); + self.mins_z = ReadCoord(); + self.maxs_x = ReadCoord(); + self.maxs_y = ReadCoord(); + self.maxs_z = ReadCoord(); + setsize(self, self.mins, self.maxs); + self.movedir_x = ReadCoord(); + self.movedir_y = ReadCoord(); + self.movedir_z = ReadCoord(); + self.angles_x = ReadCoord(); + self.angles_y = ReadCoord(); + self.angles_z = ReadCoord(); + + self.solid = SOLID_TRIGGER; + self.draw = func_ladder_draw; + self.drawmask = MASK_NORMAL; + self.move_time = time; +} +#endif