X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_netmsg.pas;h=a7219124df1b26292b2d87aafaa4130125879e4e;hb=d8c63c1a6eec80ee1df03d81124bd4f43da12b7e;hp=29e9223af93c0994aa62eab83b0b70c4a03893a7;hpb=57a682f2f493bb3a3ac4072d0b7dd7b4863dc6cf;p=d2df-sdl.git diff --git a/src/game/g_netmsg.pas b/src/game/g_netmsg.pas index 29e9223..a721912 100644 --- a/src/game/g_netmsg.pas +++ b/src/game/g_netmsg.pas @@ -109,6 +109,7 @@ const NET_EV_LMS_DRAW = 16; NET_EV_KILLCOMBO = 17; NET_EV_PLAYER_TOUCH = 18; + NET_EV_SECRET = 19; NET_VE_STARTED = 1; NET_VE_PASSED = 2; @@ -644,7 +645,7 @@ procedure MH_SEND_Everything(CreatePlayers: Boolean = False; ID: Integer = NET_E begin result := false; // don't stop MH_SEND_PanelState(pan.guid, ID); // anyway, to sync mplats - if (pan.GetTextureCount > 1) then MH_SEND_PanelTexture(pan.guid, pan.LastAnimLoop, ID); + if (pan.CanChangeTexture) then MH_SEND_PanelTexture(pan.guid, pan.LastAnimLoop, ID); end; var @@ -1070,6 +1071,7 @@ begin NetOut.Write(Byte(FNoRespawn)); NetOut.Write(Byte(FJetpack)); NetOut.Write(FFireTime); + NetOut.Write(Byte(FFlaming)); end; g_Net_Host_Send(ID, True, NET_CHAN_PLAYER); @@ -1830,6 +1832,16 @@ begin pl.Touch(); end; + NET_EV_SECRET: + begin + pl := g_Player_Get(EvNum); + if pl <> nil then + begin + g_Console_Add(Format(_lc[I_PLAYER_SECRET], [pl.Name]), True); + g_Sound_PlayEx('SOUND_GAME_SECRET'); + end; + end; + end; end; @@ -1838,7 +1850,7 @@ var PID: Word; Pl: TPlayer; EvType: Byte; - Fl: Byte; + Fl, a: Byte; Quiet: Boolean; s, ts: string; begin @@ -1875,6 +1887,16 @@ begin s := _lc[I_PLAYER_FLAG_BLUE]; g_Game_Message(Format(_lc[I_MESSAGE_FLAG_RETURN], [AnsiUpperCase(s)]), 144); + + if ((Pl = gPlayer1) or (Pl = gPlayer2) + or ((gPlayer1 <> nil) and (gPlayer1.Team = Pl.Team)) + or ((gPlayer2 <> nil) and (gPlayer2.Team = Pl.Team))) then + a := 0 + else + a := 1; + + if not sound_ret_flag[a].IsPlaying() then + sound_ret_flag[a].Play(); end; FLAG_STATE_CAPTURED: @@ -1890,6 +1912,16 @@ begin g_Console_Add(Format(_lc[I_PLAYER_FLAG_GET], [Pl.Name, s]), True); g_Game_Message(Format(_lc[I_MESSAGE_FLAG_GET], [AnsiUpperCase(s)]), 144); + + if ((Pl = gPlayer1) or (Pl = gPlayer2) + or ((gPlayer1 <> nil) and (gPlayer1.Team = Pl.Team)) + or ((gPlayer2 <> nil) and (gPlayer2.Team = Pl.Team))) then + a := 0 + else + a := 1; + + if not sound_get_flag[a].IsPlaying() then + sound_get_flag[a].Play(); end; FLAG_STATE_DROPPED: @@ -1905,6 +1937,16 @@ begin g_Console_Add(Format(_lc[I_PLAYER_FLAG_DROP], [Pl.Name, s]), True); g_Game_Message(Format(_lc[I_MESSAGE_FLAG_DROP], [AnsiUpperCase(s)]), 144); + + if ((Pl = gPlayer1) or (Pl = gPlayer2) + or ((gPlayer1 <> nil) and (gPlayer1.Team = Pl.Team)) + or ((gPlayer2 <> nil) and (gPlayer2.Team = Pl.Team))) then + a := 0 + else + a := 1; + + if not sound_lost_flag[a].IsPlaying() then + sound_lost_flag[a].Play(); end; FLAG_STATE_SCORED: @@ -1923,6 +1965,16 @@ begin Insert('.', ts, Length(ts) + 1 - 3); g_Console_Add(Format(_lc[I_PLAYER_FLAG_CAPTURE], [Pl.Name, s, ts]), True); g_Game_Message(Format(_lc[I_MESSAGE_FLAG_CAPTURE], [AnsiUpperCase(s)]), 144); + + if ((Pl = gPlayer1) or (Pl = gPlayer2) + or ((gPlayer1 <> nil) and (gPlayer1.Team = Pl.Team)) + or ((gPlayer2 <> nil) and (gPlayer2.Team = Pl.Team))) then + a := 0 + else + a := 1; + + if not sound_cap_flag[a].IsPlaying() then + sound_cap_flag[a].Play(); end; FLAG_STATE_RETURNED: @@ -1936,6 +1988,16 @@ begin s := _lc[I_PLAYER_FLAG_BLUE]; g_Game_Message(Format(_lc[I_MESSAGE_FLAG_RETURN], [AnsiUpperCase(s)]), 144); + + if ((Pl = gPlayer1) or (Pl = gPlayer2) + or ((gPlayer1 <> nil) and (gPlayer1.Team = Pl.Team)) + or ((gPlayer2 <> nil) and (gPlayer2.Team = Pl.Team))) then + a := 0 + else + a := 1; + + if not sound_ret_flag[a].IsPlaying() then + sound_ret_flag[a].Play(); end; end; end; @@ -2065,8 +2127,8 @@ function MC_RECV_PlayerStats(var M: TMsg): Word; var PID: Word; Pl: TPlayer; - I: Integer; - OldJet: Boolean; + I, OldFire: Integer; + OldJet, Flam: Boolean; NewTeam: Byte; begin PID := M.ReadWord(); @@ -2141,11 +2203,17 @@ begin FNoRespawn := M.ReadByte() <> 0; OldJet := FJetpack; FJetpack := M.ReadByte() <> 0; + OldFire := FFireTime; FFireTime := M.ReadLongInt(); + if (OldFire <= 0) and (FFireTime > 0) then + g_Sound_PlayExAt('SOUND_IGNITE', Obj.X, Obj.Y); + Flam := M.ReadByte() <> 0; if OldJet and not FJetpack then JetpackOff else if not OldJet and FJetpack then JetpackOn; + if FFlaming and not Flam then + FlamerOff; if Team <> NewTeam then Pl.ChangeTeam(NewTeam); end; @@ -2364,17 +2432,9 @@ begin TP := g_Map_PanelByGUID(PGUID); if (TP <> nil) then begin - if Loop = 0 then - begin - // switch texture - TP.SetTexture(Tex, Loop); - TP.SetFrame(Fr, Cnt); - end - else - begin - // looped or non-looped animation - TP.NextTexture(Loop); - end; + // switch texture + TP.SetTexture(Tex, Loop); + TP.SetFrame(Fr, Cnt); end; end; @@ -2464,16 +2524,19 @@ begin if gTriggers[I].ClientID = SID then with gTriggers[I] do begin - if SPlaying then + if Sound <> nil then begin - if tgcLocal then - Sound.PlayVolumeAt(X+(Width div 2), Y+(Height div 2), tgcVolume/255.0) + if SPlaying then + begin + if tgcLocal then + Sound.PlayVolumeAt(X+(Width div 2), Y+(Height div 2), tgcVolume/255.0) + else + Sound.PlayPanVolume((tgcPan-127.0)/128.0, tgcVolume/255.0); + Sound.SetPosition(SPos); + end else - Sound.PlayPanVolume((tgcPan-127.0)/128.0, tgcVolume/255.0); - Sound.SetPosition(SPos); - end - else - if Sound.IsPlaying then Sound.Stop; + if Sound.IsPlaying then Sound.Stop; + end; SoundPlayCount := SCount; end; @@ -2583,7 +2646,7 @@ end; procedure MC_RECV_MonsterState(var M: TMsg); var - ID: Integer; + ID, OldFire: Integer; MState, MFAnm: Byte; Mon: TMonster; AnimRevert: Boolean; @@ -2604,7 +2667,10 @@ begin MonsterAmmo := M.ReadLongInt(); MonsterPain := M.ReadLongInt(); AnimRevert := M.ReadByte() <> 0; + OldFire := FFireTime; FFireTime := M.ReadLongInt(); + if (OldFire <= 0) and (FFireTime > 0) then + g_Sound_PlayExAt('SOUND_IGNITE', Obj.X, Obj.Y); RevertAnim(AnimRevert); if MonsterState <> MState then @@ -3019,10 +3085,10 @@ var mapDataMsg: TMapDataMsg; begin e_WriteLog('NET: Received map request from ' + - DecodeIPV4(C.Peer.address.host), TMsgType.Notify); + DecodeIPV4(C^.Peer.address.host), TMsgType.Notify); mapDataMsg := CreateMapDataMsg(MapsDir + gGameSettings.WAD, gExternalResources); - peer := NetClients[C.ID].Peer; + peer := NetClients[C^.ID].Peer; MapDataMsgToBytes(payload, mapDataMsg); g_Net_SendData(payload, peer, True, NET_CHAN_DOWNLOAD); @@ -3041,7 +3107,7 @@ var begin FileName := ExtractFileName(M.ReadString()); e_WriteLog('NET: Received res request: ' + FileName + - ' from ' + DecodeIPV4(C.Peer.address.host), TMsgType.Notify); + ' from ' + DecodeIPV4(C^.Peer.address.host), TMsgType.Notify); if not IsValidFilePath(FileName) then begin @@ -3049,7 +3115,7 @@ begin exit; end; - peer := NetClients[C.ID].Peer; + peer := NetClients[C^.ID].Peer; if gExternalResources.IndexOf(FileName) > -1 then begin