X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fgamemodes%2Fgamemode%2Fassault%2Fassault.qc;h=e7134182e497b95facf46c75d680bc5079dd7348;hb=aa1c87cd3f79ddaf4e45ebf9428293cfdf2d6733;hp=1dc5c3f9cdfc94d9a97629175e174f86c0a1d06e;hpb=76de60deecae125795551ba1a4576a265d7ae7de;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/gamemodes/gamemode/assault/assault.qc b/qcsrc/common/gamemodes/gamemode/assault/assault.qc index 1dc5c3f9c..e7134182e 100644 --- a/qcsrc/common/gamemodes/gamemode/assault/assault.qc +++ b/qcsrc/common/gamemodes/gamemode/assault/assault.qc @@ -19,7 +19,7 @@ STATIC_INIT(g_assault) void assault_objective_use(entity this, entity actor, entity trigger) { // activate objective - this.health = 100; + SetResourceAmountExplicit(this, RESOURCE_HEALTH, 100); //print("^2Activated objective ", this.targetname, "=", etos(this), "\n"); //print("Activator is ", actor.classname, "\n"); @@ -31,7 +31,8 @@ void assault_objective_use(entity this, entity actor, entity trigger) vector target_objective_spawn_evalfunc(entity this, entity player, entity spot, vector current) { - if(this.health < 0 || this.health >= ASSAULT_VALUE_INACTIVE) + float hlth = GetResourceAmount(this, RESOURCE_HEALTH); + if (hlth < 0 || hlth >= ASSAULT_VALUE_INACTIVE) return '-1 0 0'; return current; } @@ -40,7 +41,7 @@ vector target_objective_spawn_evalfunc(entity this, entity player, entity spot, // and when a new round starts void assault_objective_reset(entity this) { - this.health = ASSAULT_VALUE_INACTIVE; + SetResourceAmountExplicit(this, RESOURCE_HEALTH, ASSAULT_VALUE_INACTIVE); } // decrease the health of targeted objectives @@ -61,18 +62,19 @@ void assault_objective_decrease_use(entity this, entity actor, entity trigger) else return; // already activated! cannot activate again! - if(this.enemy.health < ASSAULT_VALUE_INACTIVE) + float hlth = GetResourceAmount(this.enemy, RESOURCE_HEALTH); + if (hlth < ASSAULT_VALUE_INACTIVE) { - if(this.enemy.health - this.dmg > 0.5) + if (hlth - this.dmg > 0.5) { GameRules_scoring_add_team(actor, SCORE, this.dmg); - this.enemy.health = this.enemy.health - this.dmg; + TakeResource(this.enemy, RESOURCE_HEALTH, this.dmg); } else { - GameRules_scoring_add_team(actor, SCORE, this.enemy.health); + GameRules_scoring_add_team(actor, SCORE, hlth); GameRules_scoring_add_team(actor, ASSAULT_OBJECTIVES, 1); - this.enemy.health = -1; + SetResourceAmountExplicit(this.enemy, RESOURCE_HEALTH, -1); if(this.enemy.message) FOREACH_CLIENT(IS_PLAYER(it), { centerprint(it, this.enemy.message); }); @@ -99,7 +101,7 @@ void assault_setenemytoobjective(entity this) bool assault_decreaser_sprite_visible(entity this, entity player, entity view) { - if(this.assault_decreaser.enemy.health >= ASSAULT_VALUE_INACTIVE) + if(GetResourceAmount(this.assault_decreaser.enemy, RESOURCE_HEALTH) >= ASSAULT_VALUE_INACTIVE) return false; return true; @@ -127,7 +129,7 @@ void target_objective_decrease_activate(entity this) { WaypointSprite_UpdateSprites(spr, WP_AssaultDefend, WP_AssaultDestroy, WP_AssaultDestroy); WaypointSprite_UpdateMaxHealth(spr, it.max_health); - WaypointSprite_UpdateHealth(spr, it.health); + WaypointSprite_UpdateHealth(spr, GetResourceAmount(it, RESOURCE_HEALTH)); it.sprite = spr; } else @@ -176,7 +178,7 @@ void assault_roundstart_use_this(entity this) void assault_wall_think(entity this) { - if(this.enemy.health < 0) + if(GetResourceAmount(this.enemy, RESOURCE_HEALTH) < 0) { this.model = ""; this.solid = SOLID_NOT; @@ -323,7 +325,7 @@ spawnfunc(target_objective_decrease) this.dmg = 101; this.use = assault_objective_decrease_use; - this.health = ASSAULT_VALUE_INACTIVE; + SetResourceAmountExplicit(this, RESOURCE_HEALTH, ASSAULT_VALUE_INACTIVE); this.max_health = ASSAULT_VALUE_INACTIVE; this.enemy = NULL; @@ -331,6 +333,22 @@ spawnfunc(target_objective_decrease) } // destructible walls that can be used to trigger target_objective_decrease +bool destructible_heal(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); + if (hlth <= 0 || hlth >= true_limit) + return false; + + GiveResourceWithLimit(targ, RESOURCE_HEALTH, amount, true_limit); + if(targ.sprite) + { + WaypointSprite_UpdateHealth(targ.sprite, GetResourceAmount(targ, RESOURCE_HEALTH)); + } + func_breakable_colormod(targ); + return true; +} + spawnfunc(func_breakable); spawnfunc(func_assault_destructible) { @@ -338,6 +356,7 @@ spawnfunc(func_assault_destructible) this.spawnflags = 3; this.classname = "func_assault_destructible"; + this.event_heal = destructible_heal; IL_PUSH(g_assault_destructibles, this); if(assault_attacker_team == NUM_TEAM_1) @@ -395,7 +414,8 @@ void havocbot_goalrating_ast_targets(entity this, float ratingscale) entity destr = it; IL_EACH(g_assault_objectivedecreasers, it.targetname == destr.target, { - if(it.enemy.health > 0 && it.enemy.health < ASSAULT_VALUE_INACTIVE) + float hlth = GetResourceAmount(it.enemy, RESOURCE_HEALTH); + if (hlth > 0 && hlth < ASSAULT_VALUE_INACTIVE) { found = true; break;