diff --git a/src/game/g_weapons.pas b/src/game/g_weapons.pas
index 79f6f2566ae93038ec519b1f4e2726f1c8036de3..a64d9872abf86eef5e60a7239d21f41a51308321 100644 (file)
--- a/src/game/g_weapons.pas
+++ b/src/game/g_weapons.pas
Exit;
end;
- if PlayerHit() then
+ // È â êîíöå èãðîêîâ, íî òîëüêî åñëè ïîëîæåíî
+ // (èëè friendlyfire, èëè friendly_hit_projectile)
+ if LongBool(gGameSettings.Options and (GAME_OPTION_TEAMDAMAGE or GAME_OPTION_TEAMHITPROJECTILE)) then
begin
- Result := 1;
- Exit;
+ if PlayerHit() then
+ begin
+ Result := 1;
+ Exit;
+ end;
end;
end;
Exit;
end;
- // È â êîíöå ñâîèõ èãðîêîâ
- if PlayerHit(1) then
+ // È â êîíöå ñâîèõ èãðîêîâ, íî òîëüêî åñëè ïîëîæåíî
+ // (èëè friendlyfire, èëè friendly_hit_projectile)
+ if LongBool(gGameSettings.Options and (GAME_OPTION_TEAMDAMAGE or GAME_OPTION_TEAMHITPROJECTILE)) then
begin
- Result := 1;
- Exit;
+ if PlayerHit(1) then
+ begin
+ Result := 1;
+ Exit;
+ end;
end;
end;
x2, y2: Integer;
xi, yi: Integer;
wallDistSq: Integer = $3fffffff;
+ spawnerPlr: TPlayer = nil;
function doPlayerHit (idx: Integer; hx, hy: Integer): Boolean;
begin
result := false;
if (idx < 0) or (idx > High(gPlayers)) then exit;
if (gPlayers[idx] = nil) or not gPlayers[idx].alive then exit;
+ if (spawnerPlr <> nil) then
+ begin
+ if ((gGameSettings.Options and (GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMDAMAGE)) = 0) and
+ (spawnerPlr.Team <> TEAM_NONE) and (spawnerPlr.Team = gPlayers[idx].Team) then
+ exit;
+ end;
result := HitPlayer(gPlayers[idx], dmg, (xi*v)*10, (yi*v)*10-3, SpawnerUID, HIT_SOME);
if result and (v <> 0) then gPlayers[idx].Push((xi*v), (yi*v));
{$IF DEFINED(D2F_DEBUG)}
if (xd = 0) and (yd = 0) then exit;
+ if (g_GetUIDType(SpawnerUID) = UID_PLAYER) then
+ spawnerPlr := g_Player_Get(SpawnerUID);
+
//wgunMonHash.reset(); //FIXME: clear hash on level change
wgunHitHeap.clear();
wgunHitTimeUsed := 0;