X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fgamemodes%2Fgamemode%2Fonslaught%2Fsv_onslaught.qc;h=6240975d72506a11bc1e5629fbd861b3d21f6d32;hp=3128bae26684ecace22264ff3ef5fba9c3bd5d2a;hb=ce80a3d3800ee2f5ce8a8d93ccb6b835a46ec5f6;hpb=a568545ed787883224aa1cff980bd5b50a661edc diff --git a/qcsrc/common/gamemodes/gamemode/onslaught/sv_onslaught.qc b/qcsrc/common/gamemodes/gamemode/onslaught/sv_onslaught.qc index 3128bae26..6240975d7 100644 --- a/qcsrc/common/gamemodes/gamemode/onslaught/sv_onslaught.qc +++ b/qcsrc/common/gamemodes/gamemode/onslaught/sv_onslaught.qc @@ -2,6 +2,14 @@ #include "sv_controlpoint.qh" #include "sv_generator.qh" +#include +#include +#include +#include +#include +#include +#include + bool g_onslaught; float autocvar_g_onslaught_teleport_wait; @@ -39,9 +47,7 @@ bool clientcamera_send(entity this, entity to, int sf) WriteVector(MSG_ENTITY, this.origin); - WriteAngle(MSG_ENTITY, this.angles_x); - WriteAngle(MSG_ENTITY, this.angles_y); - WriteAngle(MSG_ENTITY, this.angles_z); + WriteAngleVector(MSG_ENTITY, this.angles); return true; } @@ -84,14 +90,14 @@ void ons_CaptureShield_Reset(entity this) this.team = this.enemy.team; } -void ons_CaptureShield_Spawn(entity generator, bool is_generator) +void ons_CaptureShield_Spawn(entity this, Model shield_model) { entity shield = new(ons_captureshield); IL_PUSH(g_onsshields, shield); - shield.enemy = generator; - shield.team = generator.team; - shield.colormap = generator.colormap; + shield.enemy = this; + shield.team = this.team; + shield.colormap = this.colormap; shield.reset = ons_CaptureShield_Reset; settouch(shield, ons_CaptureShield_Touch); setcefc(shield, ons_CaptureShield_Customize); @@ -99,13 +105,12 @@ void ons_CaptureShield_Spawn(entity generator, bool is_generator) set_movetype(shield, MOVETYPE_NOCLIP); shield.solid = SOLID_TRIGGER; shield.avelocity = '7 0 11'; - shield.scale = 1; - shield.model = ((is_generator) ? "models/onslaught/generator_shield.md3" : "models/onslaught/controlpoint_shield.md3"); + shield.scale = this.scale; - precache_model(shield.model); - setorigin(shield, generator.origin); - _setmodel(shield, shield.model); - setsize(shield, shield.scale * shield.mins, shield.scale * shield.maxs); + float shield_extra_size = 1.20; // hitbox is 20% larger than the object itself + setorigin(shield, this.origin); + setmodel(shield, shield_model); + setsize(shield, shield_extra_size * this.mins, shield_extra_size * this.maxs); } @@ -313,15 +318,15 @@ void ons_DelayedLinkSetup(entity this) // Main Control Point Functions // ============================= -int ons_ControlPoint_CanBeLinked(entity cp, int teamnumber) +int ons_ControlPoint_CanBeLinked(entity cp, int teamnum) { - if(cp.aregensneighbor & BIT(teamnumber)) return 2; - if(cp.arecpsneighbor & BIT(teamnumber)) return 1; + if(cp.aregensneighbor & BIT(teamnum)) return 2; + if(cp.arecpsneighbor & BIT(teamnum)) return 1; return 0; } -int ons_ControlPoint_Attackable(entity cp, int teamnumber) +int ons_ControlPoint_Attackable(entity cp, int teamnum) // -2: SAME TEAM, attackable by enemy! // -1: SAME TEAM! // 0: off limits @@ -339,16 +344,16 @@ int ons_ControlPoint_Attackable(entity cp, int teamnumber) else if(cp.goalentity) { // if there's already an icon built, nothing happens - if(cp.team == teamnumber) + if(cp.team == teamnum) { - a = ons_ControlPoint_CanBeLinked(cp, teamnumber); + a = ons_ControlPoint_CanBeLinked(cp, teamnum); if(a) // attackable by enemy? return -2; // EMERGENCY! return -1; } // we know it can be linked, so no need to check // but... - a = ons_ControlPoint_CanBeLinked(cp, teamnumber); + a = ons_ControlPoint_CanBeLinked(cp, teamnum); if(a == 2) // near our generator? return 3; // EMERGENCY! return 1; @@ -356,9 +361,9 @@ int ons_ControlPoint_Attackable(entity cp, int teamnumber) else { // free point - if(ons_ControlPoint_CanBeLinked(cp, teamnumber)) + if(ons_ControlPoint_CanBeLinked(cp, teamnum)) { - a = ons_ControlPoint_CanBeLinked(cp, teamnumber); // why was this here NUM_TEAM_1 + NUM_TEAM_2 - t + a = ons_ControlPoint_CanBeLinked(cp, teamnum); // why was this here NUM_TEAM_1 + NUM_TEAM_2 - t if(a == 2) return 4; // GET THIS ONE NOW! else @@ -411,7 +416,10 @@ void ons_ControlPoint_Icon_Damage(entity this, entity inflictor, entity attacker { sound(this, CH_TRIGGER, SND_GRENADE_IMPACT, VOL_BASE, ATTEN_NORM); pointparticles(EFFECT_ROCKET_EXPLODE, this.origin, '0 0 0', 1); - Send_Notification(NOTIF_ALL, NULL, MSG_INFO, APP_TEAM_NUM(this.team, INFO_ONSLAUGHT_CPDESTROYED), this.owner.message, attacker.netname); + if (this.owner.message != "") + Send_Notification(NOTIF_ALL, NULL, MSG_INFO, APP_TEAM_NUM(this.team, INFO_ONSLAUGHT_CPDESTROYED), this.owner.message, attacker.netname); + else + Send_Notification(NOTIF_ALL, NULL, MSG_INFO, APP_TEAM_NUM(this.team, INFO_ONSLAUGHT_CPDESTROYED_NONAME), attacker.netname); GameRules_scoring_add(attacker, ONS_TAKES, 1); GameRules_scoring_add(attacker, SCORE, 10); @@ -554,9 +562,18 @@ void ons_ControlPoint_Icon_BuildThink(entity this) if(IS_PLAYER(this.owner.ons_toucher)) { - Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_ONSLAUGHT_CAPTURE, this.owner.ons_toucher.netname, this.owner.message); - Send_Notification(NOTIF_ALL_EXCEPT, this.owner.ons_toucher, MSG_CENTER, APP_TEAM_NUM(this.owner.ons_toucher.team, CENTER_ONS_CAPTURE_TEAM), this.owner.message); - Send_Notification(NOTIF_ONE, this.owner.ons_toucher, MSG_CENTER, CENTER_ONS_CAPTURE, this.owner.message); + if(this.owner.message != "") + { + Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_ONSLAUGHT_CAPTURE, this.owner.ons_toucher.netname, this.owner.message); + Send_Notification(NOTIF_ALL_EXCEPT, this.owner.ons_toucher, MSG_CENTER, APP_TEAM_NUM(this.owner.ons_toucher.team, CENTER_ONS_CAPTURE_TEAM), this.owner.message); + Send_Notification(NOTIF_ONE, this.owner.ons_toucher, MSG_CENTER, CENTER_ONS_CAPTURE, this.owner.message); + } + else + { + Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_ONSLAUGHT_CAPTURE_NONAME, this.owner.ons_toucher.netname); + Send_Notification(NOTIF_ALL_EXCEPT, this.owner.ons_toucher, MSG_CENTER, APP_TEAM_NUM(this.owner.ons_toucher.team, CENTER_ONS_CAPTURE_TEAM_NONAME)); + Send_Notification(NOTIF_ONE, this.owner.ons_toucher, MSG_CENTER, CENTER_ONS_CAPTURE_NONAME); + } GameRules_scoring_add(this.owner.ons_toucher, ONS_CAPS, 1); GameRules_scoring_add_team(this.owner.ons_toucher, SCORE, 10); } @@ -748,7 +765,7 @@ void ons_DelayedControlPoint_Setup(entity this) onslaught_updatelinks(); // captureshield setup - ons_CaptureShield_Spawn(this, false); + ons_CaptureShield_Spawn(this, MDL_ONS_CP_SHIELD); CSQCMODEL_AUTOINIT(this); } @@ -772,8 +789,6 @@ void ons_ControlPoint_Setup(entity cp) cp.islinked = false; cp.isshielded = true; - if(cp.message == "") { cp.message = "a"; } - // appearence setmodel(cp, MDL_ONS_CP_PAD1); @@ -866,6 +881,7 @@ void ons_camSetup(entity this) FOREACH_CLIENT(true, it.clientcamera = cam;); + // NOTE: engine networked WriteByte(MSG_ALL, SVC_SETVIEWANGLES); WriteAngle(MSG_ALL, cam.angles_x); WriteAngle(MSG_ALL, cam.angles_y); @@ -988,7 +1004,7 @@ void ons_GeneratorThink(entity this) { Send_Notification(NOTIF_ONE, it, MSG_CENTER, CENTER_ONS_NOTSHIELDED_TEAM); msg_entity = it; - soundto(MSG_ONE, this, CHAN_AUTO, SND(ONS_GENERATOR_ALARM), VOL_BASE, ATTEN_NONE); + soundto(MSG_ONE, this, CHAN_AUTO, SND(ONS_GENERATOR_ALARM), VOL_BASE, ATTEN_NONE, 0); } else Send_Notification(NOTIF_ONE, it, MSG_CENTER, APP_TEAM_NUM(this.team, CENTER_ONS_NOTSHIELDED)); @@ -1032,7 +1048,7 @@ void ons_DelayedGeneratorSetup(entity this) this.bot_basewaypoint = this.nearestwaypoint; // captureshield setup - ons_CaptureShield_Spawn(this, true); + ons_CaptureShield_Spawn(this, MDL_ONS_GEN_SHIELD); onslaught_updatelinks(); @@ -1053,16 +1069,15 @@ void onslaught_generator_touch(entity this, entity toucher) void ons_GeneratorSetup(entity gen) // called when spawning a generator entity on the map as a spawnfunc { // declarations - int teamnumber = gen.team; + int teamnum = gen.team; // main setup gen.ons_worldgeneratornext = ons_worldgeneratorlist; // link generator into ons_worldgeneratorlist ons_worldgeneratorlist = gen; - gen.netname = sprintf("%s generator", Team_ColoredFullName(teamnumber)); - gen.classname = "onslaught_generator"; + gen.netname = sprintf("%s generator", Team_ColoredFullName(teamnum)); gen.solid = SOLID_BBOX; - gen.team_saved = teamnumber; + gen.team_saved = teamnum; IL_PUSH(g_saved_team, gen); set_movetype(gen, MOVETYPE_NONE); gen.lasthealth = gen.max_health = autocvar_g_onslaught_gen_health; @@ -1084,7 +1099,7 @@ void ons_GeneratorSetup(entity gen) // called when spawning a generator entity o // model handled by CSQC setsize(gen, GENERATOR_MIN, GENERATOR_MAX); setorigin(gen, (gen.origin + CPGEN_SPAWN_OFFSET)); - gen.colormap = 1024 + (teamnumber - 1) * 17; + gen.colormap = 1024 + (teamnum - 1) * 17; // generator placement droptofloor(gen);