X-Git-Url: https://deadsoftware.ru/gitweb?p=d2df-sdl.git;a=blobdiff_plain;f=src%2Fgame%2Fg_weapons.pas;h=a64d9872abf86eef5e60a7239d21f41a51308321;hp=79f6f2566ae93038ec519b1f4e2726f1c8036de3;hb=a9b641b6421fe1ab2ae3ffdf6a7fb41c56df1970;hpb=dac16ad95bb1fcf32130e3d6f7a301e63ba85ab0 diff --git a/src/game/g_weapons.pas b/src/game/g_weapons.pas index 79f6f25..a64d987 100644 --- a/src/game/g_weapons.pas +++ b/src/game/g_weapons.pas @@ -893,10 +893,15 @@ begin 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; @@ -934,11 +939,15 @@ begin 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; @@ -1394,12 +1403,19 @@ var 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)} @@ -1492,6 +1508,9 @@ begin 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;