X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_game.pas;h=5f7674fad60b3b38dd537cdfe88b24c5e92ede81;hb=a7ab3742313f79cefd688def25534d692dc7346c;hp=add8be44def44354fd817f129e847a4e9c914944;hpb=546a929a401a64c32fda3380c3fe71306fd54eb1;p=d2df-sdl.git diff --git a/src/game/g_game.pas b/src/game/g_game.pas index add8be4..5f7674f 100644 --- a/src/game/g_game.pas +++ b/src/game/g_game.pas @@ -62,6 +62,11 @@ type Model: String; Color: TRGB; Team: Byte; + // ones below are sent only to the server + WeaponSwitch: Byte; + WeaponPreferences: Array[WP_FIRST..WP_LAST+1] of Byte; + SwitchToEmpty: Byte; + SwitchToFist: Byte; end; TMegaWADInfo = record @@ -1781,6 +1786,16 @@ var if mon.gncNeedSend then MH_SEND_MonsterPos(mon.UID); end; + function sendItemPos (it: PItem): Boolean; + begin + result := false; // don't stop + if it.needSend then + begin + MH_SEND_ItemPos(it.myId); + it.needSend := False; + end; + end; + var reliableUpdate: Boolean; begin @@ -2239,6 +2254,18 @@ begin g_Mons_ForEach(sendMonsPos); + // update flags that aren't stationary + if gGameSettings.GameMode = GM_CTF then + for I := FLAG_RED to FLAG_BLUE do + if gFlags[I].NeedSend then + begin + gFlags[I].NeedSend := False; + MH_SEND_FlagPos(I); + end; + + // update items that aren't stationary + g_Items_ForEachAlive(sendItemPos); + if reliableUpdate then begin NetTimeToReliable := 0; @@ -4324,6 +4351,9 @@ begin else begin gPlayer1.Name := gPlayer1Settings.Name; + gPlayer1.WeapSwitchMode := gPlayer1Settings.WeaponSwitch; + gPlayer1.setWeaponPrefs(gPlayer1Settings.WeaponPreferences); + gPlayer1.SwitchToEmpty := gPlayer1Settings.SwitchToEmpty; g_Console_Add(Format(_lc[I_PLAYER_JOIN], [gPlayer1.Name]), True); if g_Game_IsServer and g_Game_IsNet then MH_SEND_PlayerCreate(gPlayer1.UID); @@ -4354,6 +4384,9 @@ begin else begin gPlayer2.Name := gPlayer2Settings.Name; + gPlayer2.WeapSwitchMode := gPlayer2Settings.WeaponSwitch; + gPlayer2.setWeaponPrefs(gPlayer2Settings.WeaponPreferences); + gPlayer2.SwitchToEmpty := gPlayer2Settings.SwitchToEmpty; g_Console_Add(Format(_lc[I_PLAYER_JOIN], [gPlayer2.Name]), True); if g_Game_IsServer and g_Game_IsNet then MH_SEND_PlayerCreate(gPlayer2.UID); @@ -4469,6 +4502,9 @@ begin end; gPlayer1.Name := gPlayer1Settings.Name; + gPlayer1.WeapSwitchMode := gPlayer1Settings.WeaponSwitch; + gPlayer1.setWeaponPrefs(gPlayer1Settings.WeaponPreferences); + gPlayer1.SwitchToEmpty := gPlayer1Settings.SwitchToEmpty; nPl := 1; // Ñîçäàíèå âòîðîãî èãðîêà, åñëè åñòü: @@ -4484,6 +4520,9 @@ begin end; gPlayer2.Name := gPlayer2Settings.Name; + gPlayer2.WeapSwitchMode := gPlayer2Settings.WeaponSwitch; + gPlayer2.setWeaponPrefs(gPlayer2Settings.WeaponPreferences); + gPlayer2.SwitchToEmpty := gPlayer2Settings.SwitchToEmpty; Inc(nPl); end; @@ -4563,6 +4602,9 @@ begin end; gPlayer1.Name := gPlayer1Settings.Name; + gPlayer1.WeapSwitchMode := gPlayer1Settings.WeaponSwitch; + gPlayer1.setWeaponPrefs(gPlayer1Settings.WeaponPreferences); + gPlayer1.SwitchToEmpty := gPlayer1Settings.SwitchToEmpty; Inc(nPl); end; @@ -4579,6 +4621,9 @@ begin end; gPlayer2.Name := gPlayer2Settings.Name; + gPlayer2.WeapSwitchMode := gPlayer2Settings.WeaponSwitch; + gPlayer2.setWeaponPrefs(gPlayer2Settings.WeaponPreferences); + gPlayer2.SwitchToEmpty := gPlayer2Settings.SwitchToEmpty; Inc(nPl); end; @@ -4666,6 +4711,9 @@ begin end; gPlayer1.Name := gPlayer1Settings.Name; + gPlayer1.WeapSwitchMode := gPlayer1Settings.WeaponSwitch; + gPlayer1.setWeaponPrefs(gPlayer1Settings.WeaponPreferences); + gPlayer1.SwitchToEmpty := gPlayer1Settings.SwitchToEmpty; end; if nPlayers >= 2 then @@ -4681,6 +4729,9 @@ begin end; gPlayer2.Name := gPlayer2Settings.Name; + gPlayer2.WeapSwitchMode := gPlayer2Settings.WeaponSwitch; + gPlayer2.setWeaponPrefs(gPlayer2Settings.WeaponPreferences); + gPlayer2.SwitchToEmpty := gPlayer2Settings.SwitchToEmpty; end; g_Game_SetLoadingText(_lc[I_LOAD_HOST], 0, False); @@ -4859,6 +4910,9 @@ begin end; gPlayer1.Name := gPlayer1Settings.Name; + gPlayer1.WeapSwitchMode := gPlayer1Settings.WeaponSwitch; + gPlayer1.setWeaponPrefs(gPlayer1Settings.WeaponPreferences); + gPlayer1.SwitchToEmpty := gPlayer1Settings.SwitchToEmpty; gPlayer1.UID := NetPlrUID1; gPlayer1.Reset(True); @@ -5895,6 +5949,146 @@ begin g_Console_Add(_lc[I_MSG_ONMAPCHANGE]); end; end; + 'p1_autoswitch': + begin + if (Length(P) = 2) then + gPlayer1Settings.WeaponSwitch := EnsureRange(StrTointDef(P[1], 0), 0, 2); + end; + 'p2_autoswitch': + begin + if (Length(P) = 2) then + gPlayer2Settings.WeaponSwitch := EnsureRange(StrTointDef(P[1], 0), 0, 2); + end; + 'p1_switch_empty': + begin + if (Length(P) = 2) then + gPlayer1Settings.SwitchToEmpty := EnsureRange(StrTointDef(P[1], 0), 0, 1); + end; + 'p2_switch_empty': + begin + if (Length(P) = 2) then + gPlayer2Settings.SwitchToEmpty := EnsureRange(StrTointDef(P[1], 0), 0, 1); + end; + 'p1_priority_kastet': + begin + if (Length(P) = 2) then + gPlayer1Settings.WeaponPreferences[WEAPON_KASTET] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p2_priority_kastet': + begin + if (Length(P) = 2) then + gPlayer2Settings.WeaponPreferences[WEAPON_KASTET] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p1_priority_saw': + begin + if (Length(P) = 2) then + gPlayer1Settings.WeaponPreferences[WEAPON_SAW] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p2_priority_saw': + begin + if (Length(P) = 2) then + gPlayer2Settings.WeaponPreferences[WEAPON_SAW] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p1_priority_pistol': + begin + if (Length(P) = 2) then + gPlayer1Settings.WeaponPreferences[WEAPON_KASTET] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p2_priority_pistol': + begin + if (Length(P) = 2) then + gPlayer2Settings.WeaponPreferences[WEAPON_KASTET] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p1_priority_shotgun1': + begin + if (Length(P) = 2) then + gPlayer1Settings.WeaponPreferences[WEAPON_SHOTGUN1] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p2_priority_shotgun1': + begin + if (Length(P) = 2) then + gPlayer2Settings.WeaponPreferences[WEAPON_SHOTGUN1] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p1_priority_shotgun2': + begin + if (Length(P) = 2) then + gPlayer1Settings.WeaponPreferences[WEAPON_SHOTGUN2] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p2_priority_shotgun2': + begin + if (Length(P) = 2) then + gPlayer2Settings.WeaponPreferences[WEAPON_SHOTGUN2] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p1_priority_chaingun': + begin + if (Length(P) = 2) then + gPlayer1Settings.WeaponPreferences[WEAPON_CHAINGUN] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p2_priority_chaingun': + begin + if (Length(P) = 2) then + gPlayer2Settings.WeaponPreferences[WEAPON_CHAINGUN] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p1_priority_rocketlauncher': + begin + if (Length(P) = 2) then + gPlayer1Settings.WeaponPreferences[WEAPON_ROCKETLAUNCHER] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p2_priority_rocketlauncher': + begin + if (Length(P) = 2) then + gPlayer2Settings.WeaponPreferences[WEAPON_ROCKETLAUNCHER] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p1_priority_plasma': + begin + if (Length(P) = 2) then + gPlayer1Settings.WeaponPreferences[WEAPON_PLASMA] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p2_priority_plasma': + begin + if (Length(P) = 2) then + gPlayer2Settings.WeaponPreferences[WEAPON_PLASMA] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p1_priority_bfg': + begin + if (Length(P) = 2) then + gPlayer1Settings.WeaponPreferences[WEAPON_BFG] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p2_priority_bfg': + begin + if (Length(P) = 2) then + gPlayer2Settings.WeaponPreferences[WEAPON_BFG] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p1_priority_super': + begin + if (Length(P) = 2) then + gPlayer1Settings.WeaponPreferences[WEAPON_SUPERPULEMET] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p2_priority_super': + begin + if (Length(P) = 2) then + gPlayer2Settings.WeaponPreferences[WEAPON_SUPERPULEMET] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p1_priority_flamethrower': + begin + if (Length(P) = 2) then + gPlayer1Settings.WeaponPreferences[WEAPON_FLAMETHROWER] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p2_priority_flamethrower': + begin + if (Length(P) = 2) then + gPlayer2Settings.WeaponPreferences[WEAPON_FLAMETHROWER] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p1_priority_berserk': + begin + if (Length(P) = 2) then + gPlayer1Settings.WeaponPreferences[WP_LAST+1] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; + 'p2_priority_berserk': + begin + if (Length(P) = 2) then + gPlayer2Settings.WeaponPreferences[WP_LAST+1] := EnsureRange(StrToIntDef(P[1], WP_FIRST), WP_FIRST, WP_LAST+1); + end; end; end; @@ -7244,6 +7438,14 @@ begin gSelectWeapon[b, a] := True end end + else if (cmd = 'p1_weapbest') or (cmd = 'p2_weapbest') then + begin + b := ord(cmd[2]) - ord('1'); + if b = 0 then + gSelectWeapon[b, gPlayer1.GetMorePrefered()] := True + else + gSelectWeapon[b, gPlayer2.GetMorePrefered()] := True; + end else if (cmd = 'dropflag') then begin if g_Game_IsServer then