X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fgamemodes%2Fgamemode%2Fonslaught%2Fsv_onslaught.qc;h=975c1192fe65937515edc14d8143258810a84b87;hb=0394852103d5d410a54f14daa6fc698d0cdbd74f;hp=c20a4fac74a160b62e9d876a35092fd6afc5a2b4;hpb=e7e4e095eaeac5b8dbc60723f239547bdee88ef5;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/gamemodes/gamemode/onslaught/sv_onslaught.qc b/qcsrc/common/gamemodes/gamemode/onslaught/sv_onslaught.qc index c20a4fac7..975c1192f 100644 --- a/qcsrc/common/gamemodes/gamemode/onslaught/sv_onslaught.qc +++ b/qcsrc/common/gamemodes/gamemode/onslaught/sv_onslaught.qc @@ -2,6 +2,11 @@ #include "sv_controlpoint.qh" #include "sv_generator.qh" +#include +#include +#include +#include + bool g_onslaught; float autocvar_g_onslaught_teleport_wait; @@ -27,7 +32,6 @@ float autocvar_g_onslaught_teleport_radius; float autocvar_g_onslaught_spawn_choose; float autocvar_g_onslaught_click_radius; -void FixSize(entity e); entity cam; // ======================= @@ -40,9 +44,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; } @@ -114,12 +116,6 @@ void ons_CaptureShield_Spawn(entity generator, bool is_generator) // Junk Pile // ========== -void setmodel_fixsize(entity e, Model m) -{ - setmodel(e, m); - FixSize(e); -} - void onslaught_updatelinks() { entity l; @@ -320,15 +316,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 @@ -346,16 +342,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; @@ -363,9 +359,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 @@ -400,11 +396,11 @@ void ons_ControlPoint_Icon_Damage(entity this, entity inflictor, entity attacker ons_notification_time[this.team] = time; } - TakeResource(this, RESOURCE_HEALTH, damage); + TakeResource(this, RES_HEALTH, damage); if(this.owner.iscaptured) - WaypointSprite_UpdateHealth(this.owner.sprite, GetResourceAmount(this, RESOURCE_HEALTH)); + WaypointSprite_UpdateHealth(this.owner.sprite, GetResource(this, RES_HEALTH)); else - WaypointSprite_UpdateBuildFinished(this.owner.sprite, time + (this.max_health - GetResourceAmount(this, RESOURCE_HEALTH)) / (this.count / ONS_CP_THINKRATE)); + WaypointSprite_UpdateBuildFinished(this.owner.sprite, time + (this.max_health - GetResource(this, RES_HEALTH)) / (this.count / ONS_CP_THINKRATE)); this.pain_finished = time + 1; // particles on every hit pointparticles(EFFECT_SPARKS, hitloc, force*-1, 1); @@ -414,11 +410,14 @@ void ons_ControlPoint_Icon_Damage(entity this, entity inflictor, entity attacker else sound(this, CH_TRIGGER, SND_ONS_HIT2, VOL_BASE+0.3, ATTEN_NORM); - if (GetResourceAmount(this, RESOURCE_HEALTH) < 0) + if (GetResource(this, RES_HEALTH) < 0) { 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); @@ -438,7 +437,7 @@ void ons_ControlPoint_Icon_Damage(entity this, entity inflictor, entity attacker this.owner.waslinked = this.owner.islinked; if(this.owner.model != "models/onslaught/controlpoint_pad.md3") - setmodel_fixsize(this.owner, MDL_ONS_CP_PAD1); + setmodel(this.owner, MDL_ONS_CP_PAD1); //setsize(this, '-32 -32 0', '32 32 8'); delete(this); @@ -449,13 +448,13 @@ void ons_ControlPoint_Icon_Damage(entity this, entity inflictor, entity attacker bool ons_ControlPoint_Icon_Heal(entity targ, entity inflictor, float amount, float limit) { - float hlth = GetResourceAmount(targ, RESOURCE_HEALTH); - float true_limit = ((limit != RESOURCE_LIMIT_NONE) ? limit : targ.max_health); + float hlth = GetResource(targ, RES_HEALTH); + float true_limit = ((limit != RES_LIMIT_NONE) ? limit : targ.max_health); if (hlth <= 0 || hlth >= true_limit) return false; - GiveResourceWithLimit(targ, RESOURCE_HEALTH, amount, true_limit); - hlth = GetResourceAmount(targ, RESOURCE_HEALTH); + GiveResourceWithLimit(targ, RES_HEALTH, amount, true_limit); + hlth = GetResource(targ, RES_HEALTH); if(targ.owner.iscaptured) WaypointSprite_UpdateHealth(targ.owner.sprite, hlth); else @@ -486,9 +485,9 @@ void ons_ControlPoint_Icon_Think(entity this) _friendly_count = _friendly_count * (autocvar_g_onslaught_cp_proxydecap_dps * ONS_CP_THINKRATE); _enemy_count = _enemy_count * (autocvar_g_onslaught_cp_proxydecap_dps * ONS_CP_THINKRATE); - GiveResourceWithLimit(this, RESOURCE_HEALTH, (_friendly_count - _enemy_count), this.max_health); + GiveResourceWithLimit(this, RES_HEALTH, (_friendly_count - _enemy_count), this.max_health); this.SendFlags |= CPSF_STATUS; - if(GetResourceAmount(this, RESOURCE_HEALTH) <= 0) + if(GetResource(this, RES_HEALTH) <= 0) { ons_ControlPoint_Icon_Damage(this, this, this, 1, 0, DMG_NOWEP, this.origin, '0 0 0'); return; @@ -497,10 +496,10 @@ void ons_ControlPoint_Icon_Think(entity this) if (time > this.pain_finished + 5) { - if(GetResourceAmount(this, RESOURCE_HEALTH) < this.max_health) + if(GetResource(this, RES_HEALTH) < this.max_health) { - GiveResourceWithLimit(this, RESOURCE_HEALTH, this.count, this.max_health); - WaypointSprite_UpdateHealth(this.owner.sprite, GetResourceAmount(this, RESOURCE_HEALTH)); + GiveResourceWithLimit(this, RES_HEALTH, this.count, this.max_health); + WaypointSprite_UpdateHealth(this.owner.sprite, GetResource(this, RES_HEALTH)); } } @@ -519,7 +518,7 @@ void ons_ControlPoint_Icon_Think(entity this) } // damaged fx - if(random() < 0.6 - GetResourceAmount(this, RESOURCE_HEALTH) / this.max_health) + if(random() < 0.6 - GetResource(this, RES_HEALTH) / this.max_health) { Send_Effect(EFFECT_ELECTRIC_SPARKS, this.origin + randompos('-10 -10 -20', '10 10 20'), '0 0 0', 1); @@ -541,13 +540,13 @@ void ons_ControlPoint_Icon_BuildThink(entity this) if(!a) return; - GiveResource(this, RESOURCE_HEALTH, this.count); + GiveResource(this, RES_HEALTH, this.count); this.SendFlags |= CPSF_STATUS; - if (GetResourceAmount(this, RESOURCE_HEALTH) >= this.max_health) + if (GetResource(this, RES_HEALTH) >= this.max_health) { - SetResourceAmountExplicit(this, RESOURCE_HEALTH, this.max_health); + SetResourceExplicit(this, RES_HEALTH, this.max_health); this.count = autocvar_g_onslaught_cp_regen * ONS_CP_THINKRATE; // slow repair rate from now on setthink(this, ons_ControlPoint_Icon_Think); sound(this, CH_TRIGGER, SND_ONS_CONTROLPOINT_BUILT, VOL_BASE, ATTEN_NORM); @@ -557,13 +556,22 @@ void ons_ControlPoint_Icon_BuildThink(entity this) Send_Effect(EFFECT_CAP(this.owner.team), this.owner.origin, '0 0 0', 1); WaypointSprite_UpdateMaxHealth(this.owner.sprite, this.max_health); - WaypointSprite_UpdateHealth(this.owner.sprite, GetResourceAmount(this, RESOURCE_HEALTH)); + WaypointSprite_UpdateHealth(this.owner.sprite, GetResource(this, RES_HEALTH)); 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); } @@ -578,9 +586,9 @@ void ons_ControlPoint_Icon_BuildThink(entity this) this.SendFlags |= CPSF_SETUP; } if(this.owner.model != MDL_ONS_CP_PAD2.model_str()) - setmodel_fixsize(this.owner, MDL_ONS_CP_PAD2); + setmodel(this.owner, MDL_ONS_CP_PAD2); - if(random() < 0.9 - GetResourceAmount(this, RESOURCE_HEALTH) / this.max_health) + if(random() < 0.9 - GetResource(this, RES_HEALTH) / this.max_health) Send_Effect(EFFECT_RAGE, this.origin + 10 * randomvec(), '0 0 -1', 1); } @@ -595,7 +603,7 @@ void ons_ControlPoint_Icon_Spawn(entity cp, entity player) e.owner = cp; e.max_health = autocvar_g_onslaught_cp_health; - SetResourceAmountExplicit(e, RESOURCE_HEALTH, autocvar_g_onslaught_cp_buildhealth); + SetResourceExplicit(e, RES_HEALTH, autocvar_g_onslaught_cp_buildhealth); e.solid = SOLID_NOT; e.takedamage = DAMAGE_AIM; e.bot_attack = true; @@ -604,7 +612,7 @@ void ons_ControlPoint_Icon_Spawn(entity cp, entity player) e.event_heal = ons_ControlPoint_Icon_Heal; e.team = player.team; e.colormap = 1024 + (e.team - 1) * 17; - e.count = (e.max_health - GetResourceAmount(e, RESOURCE_HEALTH)) * ONS_CP_THINKRATE / autocvar_g_onslaught_cp_buildtime; // how long it takes to build + e.count = (e.max_health - GetResource(e, RES_HEALTH)) * ONS_CP_THINKRATE / autocvar_g_onslaught_cp_buildtime; // how long it takes to build sound(e, CH_TRIGGER, SND_ONS_CONTROLPOINT_BUILD, VOL_BASE, ATTEN_NORM); @@ -614,7 +622,7 @@ void ons_ControlPoint_Icon_Spawn(entity cp, entity player) Send_Effect(EFFECT_FLAG_TOUCH(player.team), e.origin, '0 0 0', 1); - WaypointSprite_UpdateBuildFinished(cp.sprite, time + (e.max_health - GetResourceAmount(e, RESOURCE_HEALTH)) / (e.count / ONS_CP_THINKRATE)); + WaypointSprite_UpdateBuildFinished(cp.sprite, time + (e.max_health - GetResource(e, RES_HEALTH)) / (e.count / ONS_CP_THINKRATE)); WaypointSprite_UpdateRule(cp.sprite,cp.team,SPRITERULE_TEAMPLAY); cp.sprite.SendFlags |= 16; @@ -656,7 +664,7 @@ void ons_ControlPoint_UpdateSprite(entity e) else { WaypointSprite_UpdateMaxHealth(e.sprite, e.goalentity.max_health); - WaypointSprite_UpdateHealth(e.sprite, GetResourceAmount(e.goalentity, RESOURCE_HEALTH)); + WaypointSprite_UpdateHealth(e.sprite, GetResource(e.goalentity, RES_HEALTH)); } } if(e.lastshielded) @@ -686,10 +694,11 @@ void ons_ControlPoint_Touch(entity this, entity toucher) int attackable; if(IS_VEHICLE(toucher) && toucher.owner) - if(autocvar_g_onslaught_allow_vehicle_touch) + { + if (!autocvar_g_onslaught_allow_vehicle_touch) + return; toucher = toucher.owner; - else - return; + } if(!IS_PLAYER(toucher)) { return; } if(STAT(FROZEN, toucher)) { return; } @@ -737,7 +746,7 @@ void ons_ControlPoint_Reset(entity this) setthink(this, ons_ControlPoint_Think); this.ons_toucher = NULL; this.nextthink = time + ONS_CP_THINKRATE; - setmodel_fixsize(this, MDL_ONS_CP_PAD1); + setmodel(this, MDL_ONS_CP_PAD1); WaypointSprite_UpdateMaxHealth(this.sprite, 0); WaypointSprite_UpdateRule(this.sprite,this.team,SPRITERULE_TEAMPLAY); @@ -778,10 +787,8 @@ void ons_ControlPoint_Setup(entity cp) cp.islinked = false; cp.isshielded = true; - if(cp.message == "") { cp.message = "a"; } - // appearence - setmodel_fixsize(cp, MDL_ONS_CP_PAD1); + setmodel(cp, MDL_ONS_CP_PAD1); // control point placement if((cp.spawnflags & 1) || cp.noalign) // don't drop to floor, just stay at fixed location @@ -872,6 +879,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); @@ -905,8 +913,8 @@ void ons_GeneratorDamage(entity this, entity inflictor, entity attacker, float d play2team(this.team, SND(ONS_GENERATOR_UNDERATTACK)); } } - TakeResource(this, RESOURCE_HEALTH, damage); - float hlth = GetResourceAmount(this, RESOURCE_HEALTH); + TakeResource(this, RES_HEALTH, damage); + float hlth = GetResource(this, RES_HEALTH); WaypointSprite_UpdateHealth(this.sprite, hlth); // choose an animation frame based on health this.frame = 10 * bound(0, (1 - hlth / this.max_health), 1); @@ -966,13 +974,13 @@ void ons_GeneratorDamage(entity this, entity inflictor, entity attacker, float d bool ons_GeneratorHeal(entity targ, entity inflictor, float amount, float limit) { - float true_limit = ((limit != RESOURCE_LIMIT_NONE) ? limit : targ.max_health); - float hlth = GetResourceAmount(targ, RESOURCE_HEALTH); + float true_limit = ((limit != RES_LIMIT_NONE) ? limit : targ.max_health); + float hlth = GetResource(targ, RES_HEALTH); if (hlth <= 0 || hlth >= true_limit) return false; - GiveResourceWithLimit(targ, RESOURCE_HEALTH, amount, true_limit); - hlth = GetResourceAmount(targ, RESOURCE_HEALTH); + GiveResourceWithLimit(targ, RES_HEALTH, amount, true_limit); + hlth = GetResource(targ, RES_HEALTH); WaypointSprite_UpdateHealth(targ.sprite, hlth); targ.frame = 10 * bound(0, (1 - hlth / targ.max_health), 1); targ.lasthealth = hlth; @@ -994,7 +1002,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(KH_ALARM), VOL_BASE, ATTEN_NONE); // FIXME: unique sound? + 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)); @@ -1004,7 +1012,7 @@ void ons_GeneratorThink(entity this) void ons_GeneratorReset(entity this) { this.team = this.team_saved; - SetResourceAmountExplicit(this, RESOURCE_HEALTH, autocvar_g_onslaught_gen_health); + SetResourceExplicit(this, RES_HEALTH, autocvar_g_onslaught_gen_health); this.lasthealth = this.max_health = autocvar_g_onslaught_gen_health; this.takedamage = DAMAGE_AIM; this.bot_attack = true; @@ -1024,7 +1032,7 @@ void ons_GeneratorReset(entity this) this.SendFlags |= GSF_STATUS; WaypointSprite_UpdateMaxHealth(this.sprite, this.max_health); - WaypointSprite_UpdateHealth(this.sprite, GetResourceAmount(this, RESOURCE_HEALTH)); + WaypointSprite_UpdateHealth(this.sprite, GetResource(this, RES_HEALTH)); WaypointSprite_UpdateRule(this.sprite,this.team,SPRITERULE_TEAMPLAY); onslaught_updatelinks(); @@ -1059,20 +1067,20 @@ 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.netname = sprintf("%s generator", Team_ColoredFullName(teamnum)); gen.classname = "onslaught_generator"; 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; - SetResourceAmountExplicit(gen, RESOURCE_HEALTH, autocvar_g_onslaught_gen_health); + SetResourceExplicit(gen, RES_HEALTH, autocvar_g_onslaught_gen_health); gen.takedamage = DAMAGE_AIM; gen.bot_attack = true; IL_PUSH(g_bot_targets, gen); @@ -1090,7 +1098,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); @@ -1099,7 +1107,7 @@ void ons_GeneratorSetup(entity gen) // called when spawning a generator entity o WaypointSprite_SpawnFixed(WP_Null, gen.origin + CPGEN_WAYPOINT_OFFSET, gen, sprite, RADARICON_NONE); WaypointSprite_UpdateRule(gen.sprite, gen.team, SPRITERULE_TEAMPLAY); WaypointSprite_UpdateMaxHealth(gen.sprite, gen.max_health); - WaypointSprite_UpdateHealth(gen.sprite, GetResourceAmount(gen, RESOURCE_HEALTH)); + WaypointSprite_UpdateHealth(gen.sprite, GetResource(gen, RES_HEALTH)); InitializeEntity(gen, ons_DelayedGeneratorSetup, INITPRIO_SETLOCATION); } @@ -1121,7 +1129,7 @@ void Onslaught_count_generators() for(e = ons_worldgeneratorlist; e; e = e.ons_worldgeneratornext) { ++total_generators; - if (GetResourceAmount(e, RESOURCE_HEALTH) < 1) + if (GetResource(e, RES_HEALTH) < 1) { continue; } @@ -1264,71 +1272,26 @@ void Onslaught_RoundStart() // NOTE: LEGACY CODE, needs to be re-written! -void havocbot_goalrating_ons_offenseitems(entity this, float ratingscale, vector org, float sradius) -{ - bool needarmor = false, needweapons = false; - - // Needs armor/health? - if(GetResourceAmount(this, RESOURCE_HEALTH) < 100) - needarmor = true; - - // Needs weapons? - int c = 0; - FOREACH(Weapons, it != WEP_Null, { - if(STAT(WEAPONS, this) & (it.m_wepset)) - if(++c >= 4) - break; - }); - - if(c<4) - needweapons = true; - - if(!needweapons && !needarmor) - return; - - LOG_DEBUG(this.netname, " needs weapons ", ftos(needweapons)); - LOG_DEBUG(this.netname, " needs armor ", ftos(needarmor)); - - // See what is around - IL_EACH(g_items, it.bot_pickup, - { - // gather health and armor only - if (it.solid) - if ( ((GetResourceAmount(it, RESOURCE_HEALTH) || GetResourceAmount(it, RESOURCE_ARMOR)) && needarmor) || (STAT(WEAPONS, it) && needweapons ) ) - if (vdist(it.origin - org, <, sradius)) - { - int t = it.bot_pickupevalfunc(this, it); - if (t > 0) - navigation_routerating(this, it, t * ratingscale, 500); - } - }); -} - void havocbot_role_ons_setrole(entity this, int role) { - LOG_DEBUG(this.netname," switched to "); switch(role) { case HAVOCBOT_ONS_ROLE_DEFENSE: - LOG_DEBUG("defense"); + LOG_DEBUG(this.netname, " switched to defense"); this.havocbot_role = havocbot_role_ons_defense; - this.havocbot_role_flags = HAVOCBOT_ONS_ROLE_DEFENSE; this.havocbot_role_timeout = 0; break; case HAVOCBOT_ONS_ROLE_ASSISTANT: - LOG_DEBUG("assistant"); + LOG_DEBUG(this.netname, " switched to assistant"); this.havocbot_role = havocbot_role_ons_assistant; - this.havocbot_role_flags = HAVOCBOT_ONS_ROLE_ASSISTANT; this.havocbot_role_timeout = 0; break; case HAVOCBOT_ONS_ROLE_OFFENSE: - LOG_DEBUG("offense"); + LOG_DEBUG(this.netname, " switched to offense"); this.havocbot_role = havocbot_role_ons_offense; - this.havocbot_role_flags = HAVOCBOT_ONS_ROLE_OFFENSE; this.havocbot_role_timeout = 0; break; } - LOG_DEBUG(""); } void havocbot_goalrating_ons_controlpoints_attack(entity this, float ratingscale) @@ -1353,9 +1316,9 @@ void havocbot_goalrating_ons_controlpoints_attack(entity this, float ratingscale // Count team mates interested in this control point // (easier and cleaner than keeping counters per cp and teams) - FOREACH_CLIENT(IS_PLAYER(it), { + FOREACH_CLIENT(it != this && IS_PLAYER(it), { if(SAME_TEAM(it, this)) - if(it.havocbot_role_flags & HAVOCBOT_ONS_ROLE_OFFENSE) + if(it.havocbot_role == havocbot_role_ons_offense) if(it.havocbot_ons_target == cp2) ++c; }); @@ -1366,7 +1329,7 @@ void havocbot_goalrating_ons_controlpoints_attack(entity this, float ratingscale } // We'll consider only the best case - bestvalue = 99999999999; + bestvalue = FLOAT_MAX; cp = NULL; for(cp1 = ons_worldcplist; cp1; cp1 = cp1.ons_worldcpnext) { @@ -1392,23 +1355,21 @@ void havocbot_goalrating_ons_controlpoints_attack(entity this, float ratingscale // Rate waypoints near it found = false; best = NULL; - bestvalue = 99999999999; - for(radius=0; radius<1000 && !found; radius+=500) + bestvalue = FLOAT_MAX; + for (radius = 500; radius <= 1000 && !found; radius += 500) { - for(wp=findradius(cp.origin,radius); wp; wp=wp.chain) + IL_EACH(g_waypoints, vdist(cp.origin - it.origin, <, radius), { - if(!(wp.wpflags & WAYPOINTFLAG_GENERATED)) - if(wp.classname=="waypoint") - if(checkpvs(wp.origin,cp)) + if (!(it.wpflags & WAYPOINTFLAG_GENERATED) && checkpvs(it.origin, cp)) { found = true; - if(wp.cnt 0 ) + if ( !source_point && GetResource(player, RES_HEALTH) > 0 ) { sprint(player, "\nYou need to be next to a control point\n"); return true; @@ -2030,7 +1982,7 @@ MUTATOR_HOOKFUNCTION(ons, SV_ParseClientCommand) return true; } - if ( GetResourceAmount(player, RESOURCE_HEALTH) <= 0 ) + if ( GetResource(player, RES_HEALTH) <= 0 ) { player.ons_spawn_by = closest_target; player.respawn_flags = player.respawn_flags | RESPAWN_FORCE; @@ -2096,14 +2048,14 @@ MUTATOR_HOOKFUNCTION(ons, SendWaypoint) { entity wp_owner = wp.owner; entity e = WaypointSprite_getviewentity(to); - if(SAME_TEAM(e, wp_owner) && GetResourceAmount(wp_owner.goalentity, RESOURCE_HEALTH) >= wp_owner.goalentity.max_health) { wp_flag |= 2; } + if(SAME_TEAM(e, wp_owner) && GetResource(wp_owner.goalentity, RES_HEALTH) >= wp_owner.goalentity.max_health) { wp_flag |= 2; } if(!ons_ControlPoint_Attackable(wp_owner, e.team)) { wp_flag |= 2; } } if(wp.owner.classname == "onslaught_generator") { entity wp_owner = wp.owner; - if(wp_owner.isshielded && GetResourceAmount(wp_owner, RESOURCE_HEALTH) >= wp_owner.max_health) { wp_flag |= 2; } - if(GetResourceAmount(wp_owner, RESOURCE_HEALTH) <= 0) { wp_flag |= 2; } + if(wp_owner.isshielded && GetResource(wp_owner, RES_HEALTH) >= wp_owner.max_health) { wp_flag |= 2; } + if(GetResource(wp_owner, RES_HEALTH) <= 0) { wp_flag |= 2; } } }