X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_triggers.pas;h=97648af9e91d01cbbf3bdec3123aa363864d80fc;hb=0944e70467355a7771d42015b6e548050e6fa3b7;hp=1b52a64a1d25d68d0776d4062df24daf61d04517;hpb=b39f879ac1eb4bf4b7782c4b2fc3f83bd5f99816;p=d2df-sdl.git diff --git a/src/game/g_triggers.pas b/src/game/g_triggers.pas index 1b52a64..97648af 100644 --- a/src/game/g_triggers.pas +++ b/src/game/g_triggers.pas @@ -273,7 +273,7 @@ begin begin for a := 0 to High(gPlayers) do begin - if (gPlayers[a] <> nil) and gPlayers[a].Live and gPlayers[a].Collide(X, Y, Width, Height) then + if (gPlayers[a] <> nil) and gPlayers[a].alive and gPlayers[a].Collide(X, Y, Width, Height) then begin gPlayers[a].Damage(TRAP_DAMAGE, 0, 0, 0, HIT_TRAP); end; @@ -334,7 +334,7 @@ begin begin for a := 0 to High(gPlayers) do begin - if (gPlayers[a] <> nil) and gPlayers[a].Live and gPlayers[a].Collide(X, Y, Width, Height) then + if (gPlayers[a] <> nil) and gPlayers[a].alive and gPlayers[a].Collide(X, Y, Width, Height) then begin gPlayers[a].Damage(TRAP_DAMAGE, 0, 0, 0, HIT_TRAP); end; @@ -346,7 +346,7 @@ begin (* if gMonsters <> nil then for a := 0 to High(gMonsters) do - if (gMonsters[a] <> nil) and gMonsters[a].Live and + if (gMonsters[a] <> nil) and gMonsters[a].alive and g_Obj_Collide(X, Y, Width, Height, @gMonsters[a].Obj) then gMonsters[a].Damage(TRAP_DAMAGE, 0, 0, 0, HIT_TRAP); *) @@ -1033,7 +1033,7 @@ var function monsShotTarget (mon: TMonster): Boolean; begin result := false; // don't stop - if mon.Live and tr_ShotAimCheck(Trigger, @(mon.Obj)) then + if mon.alive and tr_ShotAimCheck(Trigger, @(mon.Obj)) then begin xd := mon.GameX + mon.Obj.Rect.Width div 2; yd := mon.GameY + mon.Obj.Rect.Height div 2; @@ -1045,7 +1045,7 @@ var function monsShotTargetMonPlr (mon: TMonster): Boolean; begin result := false; // don't stop - if mon.Live and tr_ShotAimCheck(Trigger, @(mon.Obj)) then + if mon.alive and tr_ShotAimCheck(Trigger, @(mon.Obj)) then begin xd := mon.GameX + mon.Obj.Rect.Width div 2; yd := mon.GameY + mon.Obj.Rect.Height div 2; @@ -1057,7 +1057,7 @@ var function monShotTargetPlrMon (mon: TMonster): Boolean; begin result := false; // don't stop - if mon.Live and tr_ShotAimCheck(Trigger, @(mon.Obj)) then + if mon.alive and tr_ShotAimCheck(Trigger, @(mon.Obj)) then begin xd := mon.GameX + mon.Obj.Rect.Width div 2; yd := mon.GameY + mon.Obj.Rect.Height div 2; @@ -1970,7 +1970,7 @@ begin TRIGGER_SHOT_TARGET_PLR: // players if gPlayers <> nil then for idx := Low(gPlayers) to High(gPlayers) do - if (gPlayers[idx] <> nil) and gPlayers[idx].Live and + if (gPlayers[idx] <> nil) and gPlayers[idx].alive and tr_ShotAimCheck(Trigger, @(gPlayers[idx].Obj)) then begin xd := gPlayers[idx].GameX + PLAYER_RECT_CX; @@ -1982,7 +1982,7 @@ begin TRIGGER_SHOT_TARGET_RED: // red team if gPlayers <> nil then for idx := Low(gPlayers) to High(gPlayers) do - if (gPlayers[idx] <> nil) and gPlayers[idx].Live and + if (gPlayers[idx] <> nil) and gPlayers[idx].alive and (gPlayers[idx].Team = TEAM_RED) and tr_ShotAimCheck(Trigger, @(gPlayers[idx].Obj)) then begin @@ -1995,7 +1995,7 @@ begin TRIGGER_SHOT_TARGET_BLUE: // blue team if gPlayers <> nil then for idx := Low(gPlayers) to High(gPlayers) do - if (gPlayers[idx] <> nil) and gPlayers[idx].Live and + if (gPlayers[idx] <> nil) and gPlayers[idx].alive and (gPlayers[idx].Team = TEAM_BLUE) and tr_ShotAimCheck(Trigger, @(gPlayers[idx].Obj)) then begin @@ -2012,7 +2012,7 @@ begin if (TargetUID = 0) and (gPlayers <> nil) then for idx := Low(gPlayers) to High(gPlayers) do - if (gPlayers[idx] <> nil) and gPlayers[idx].Live and + if (gPlayers[idx] <> nil) and gPlayers[idx].alive and tr_ShotAimCheck(Trigger, @(gPlayers[idx].Obj)) then begin xd := gPlayers[idx].GameX + PLAYER_RECT_CX; @@ -2026,7 +2026,7 @@ begin begin if gPlayers <> nil then for idx := Low(gPlayers) to High(gPlayers) do - if (gPlayers[idx] <> nil) and gPlayers[idx].Live and + if (gPlayers[idx] <> nil) and gPlayers[idx].alive and tr_ShotAimCheck(Trigger, @(gPlayers[idx].Obj)) then begin xd := gPlayers[idx].GameX + PLAYER_RECT_CX; @@ -2128,7 +2128,7 @@ begin Trigger.mapIndex := mapidx; if (Trigger.trigData.trigRec <> nil) then begin - Trigger.trigData := Trigger.trigData.trigRec.clone(); + Trigger.trigData := Trigger.trigData.trigRec.clone({Trigger.trigData.headerRec}nil); end else begin @@ -2465,9 +2465,17 @@ begin end; end; + //HACK! // if we have panelid, assume that it will switch the moving platform - if (trigPanelGUID >= 0) then + pan := g_Map_PanelByGUID(trigPanelGUID); + if (pan <> nil) then begin + case TriggerType of + TRIGGER_PRESS: pan.movingActive := true; // what to do here? + TRIGGER_ON: pan.movingActive := true; + TRIGGER_OFF: pan.movingActive := false; + TRIGGER_ONOFF: pan.movingActive := not pan.movingActive; + end; end; // Âûáèðàåì îäèí èç òðèããåðîâ äëÿ ðàñøèðèòåëÿ, åñëè âêëþ÷åí ðàíäîì: @@ -2543,7 +2551,7 @@ begin if gPlayers[b] <> nil then with gPlayers[b] do // Æèâ, åñòü íóæíûå êëþ÷è è îí ðÿäîì: - if Live and ((gTriggers[a].Keys and GetKeys) = gTriggers[a].Keys) and + if alive and ((gTriggers[a].Keys and GetKeys) = gTriggers[a].Keys) and Collide(X, Y, Width, Height) then begin gTriggers[a].ActivateUID := UID; @@ -2600,6 +2608,7 @@ end; procedure g_Triggers_Press(ID: DWORD; ActivateType: Byte; ActivateUID: Word = 0); begin + if (ID >= Length(gTriggers)) then exit; gTriggers[ID].ActivateUID := ActivateUID; ActivateTrigger(gTriggers[ID], ActivateType); end;