diff --git a/src/game/g_player.pas b/src/game/g_player.pas
index 9605c6de6e1a3c9c97b6b14165941b866023fb87..ddf4825b2ee994232eaf81bc22a58ff101935c65 100644 (file)
--- a/src/game/g_player.pas
+++ b/src/game/g_player.pas
type
TPlayerStat = record
+ Num: Integer;
Ping: Word;
Loss: Byte;
Name: String;
FClientID: SmallInt;
FPing: Word;
FLoss: Byte;
+ FReady: Boolean;
FDummy: Boolean;
FFireTime: Integer;
+ FHandicap: Integer;
// debug: viewport offset
viewPortX, viewPortY, viewPortW, viewPortH: Integer;
procedure g_Player_RemoveAllCorpses();
procedure g_Player_Corpses_SaveState (st: TStream);
procedure g_Player_Corpses_LoadState (st: TStream);
-procedure g_Bot_Add(Team, Difficult: Byte);
-procedure g_Bot_AddList(Team: Byte; lname: ShortString; num: Integer = -1);
+procedure g_Player_ResetReady();
+procedure g_Bot_Add(Team, Difficult: Byte; Handicap: Integer = 100);
+procedure g_Bot_AddList(Team: Byte; lname: ShortString; num: Integer = -1; Handicap: Integer = 100);
procedure g_Bot_MixNames();
procedure g_Bot_RemoveAll();
if b = 1 then gPlayers[a].FDirection := TDirection.D_LEFT else gPlayers[a].FDirection := TDirection.D_RIGHT; // b = 2
// Çäîðîâüå
gPlayers[a].FHealth := utils.readLongInt(st);
+ // Ôîðà
+ gPlayers[a].FHandicap := utils.readLongInt(st);
// Æèçíè
gPlayers[a].FLives := utils.readByte(st);
// Áðîíÿ
end;
end;
-procedure g_Bot_Add(Team, Difficult: Byte);
+procedure g_Bot_Add(Team, Difficult: Byte; Handicap: Integer = 100);
var
m: SSArray;
_name, _model: String;
//FDifficult.SafeWeaponPrior[a] := WEAPON_PRIOR3[a];
end;
+ FHandicap := Handicap;
+
g_Console_Add(Format(_lc[I_PLAYER_JOIN], [Name]), True);
if g_Game_IsNet then MH_SEND_PlayerCreate(UID);
end;
end;
-procedure g_Bot_AddList(Team: Byte; lName: ShortString; num: Integer = -1);
+procedure g_Bot_AddList(Team: Byte; lName: ShortString; num: Integer = -1; Handicap: Integer = 100);
var
m: SSArray;
_name, _model: String;
FDifficult.Cover := BotList[num].cover;
FDifficult.CloseJump := BotList[num].close_jump;
+ FHandicap := Handicap;
+
for a := WP_FIRST to WP_LAST do
begin
FDifficult.WeaponPrior[a] := BotList[num].w_prior1[a];
SetLength(Result, Length(Result)+1);
with Result[High(Result)] do
begin
+ Num := a;
Ping := gPlayers[a].FPing;
Loss := gPlayers[a].FLoss;
Name := gPlayers[a].FName;
end;
end;
+procedure g_Player_ResetReady();
+var
+ a: Integer;
+begin
+ if not g_Game_IsServer then Exit;
+ if gPlayers = nil then Exit;
+
+ for a := 0 to High(gPlayers) do
+ if gPlayers[a] <> nil then
+ begin
+ gPlayers[a].FReady := False;
+ if g_Game_IsNet then
+ MH_SEND_GameEvent(NET_EV_INTER_READY, gPlayers[a].UID, 'N');
+ end;
+end;
+
procedure g_Player_RememberAll;
var
i: Integer;
FFireTime := 0;
FFirePainTime := 0;
FFireAttacker := 0;
+ FHandicap := 100;
FActualModelName := 'doomer';
procedure TPlayer.CatchFire(Attacker: Word);
begin
+ if (FMegaRulez[MR_SUIT] > gTime) or (FMegaRulez[MR_INVUL] > gTime) then
+ exit; // Íå çàãîðàåìñÿ êîãäà åñòü çàùèòà
if FFireTime <= 0 then
g_Sound_PlayExAt('SOUND_IGNITE', FObj.X, FObj.Y);
FFireTime := 100;
// i found her!
result := Byte(i);
resetWeaponQueue();
- FNextWeapDelay := WEAPON_DELAY; // anyway, 'cause why not
+ FNextWeapDelay := WEAPON_DELAY * 2; // anyway, 'cause why not
exit;
end;
end;
FMonsterKills := 0;
FDeath := 0;
FSecrets := 0;
+ FReady := False;
if FNoRespawn then
begin
FSpectator := False;
// Âîñêðåøåíèå áåç îðóæèÿ:
if not FAlive then
begin
- FHealth := PLAYER_HP_SOFT;
+ FHealth := Round(PLAYER_HP_SOFT * (FHandicap / 100));
FArmor := 0;
FAlive := True;
FAir := AIR_DEF;
procedure TPlayer.GetSecret();
begin
+ if (self = gPlayer1) or (self = gPlayer2) then
+ begin
+ g_Console_Add(Format(_lc[I_PLAYER_SECRET], [FName]), True);
+ g_Sound_PlayEx('SOUND_GAME_SECRET');
+ end;
Inc(FSecrets);
end;
utils.writeInt(st, Byte(b));
// Çäîðîâüå
utils.writeInt(st, LongInt(FHealth));
+ // Êîýôôèöèåíò èíâàëèäíîñòè
+ utils.writeInt(st, LongInt(FHandicap));
// Æèçíè
utils.writeInt(st, Byte(FLives));
// Áðîíÿ
if b = 1 then FDirection := TDirection.D_LEFT else FDirection := TDirection.D_RIGHT; // b = 2
// Çäîðîâüå
FHealth := utils.readLongInt(st);
+ // Êîýôôèöèåíò èíâàëèäíîñòè
+ FHandicap := utils.readLongInt(st);
// Æèçíè
FLives := utils.readByte(st);
// Áðîíÿ