diff --git a/src/game/g_player.pas b/src/game/g_player.pas
index 82ce13054db7fb141c6468f3c5b01b9c74c861d3..22813f1dfac378f0f37af6fa05e0c3e7c9faaa1c 100644 (file)
--- a/src/game/g_player.pas
+++ b/src/game/g_player.pas
Name: String;
Team: Byte;
Frags: SmallInt;
+ Assists: SmallInt;
Deaths: SmallInt;
Lives: Byte;
Kills: Word;
FKills: Integer;
FMonsterKills: Integer;
FFrags: Integer;
+ FAssists: Integer;
FFragCombo: Byte;
FLastFrag: LongWord;
FComboEvnt: Integer;
property Air: Integer read FAir write FAir;
property JetFuel: Integer read FJetFuel write FJetFuel;
property Frags: Integer read FFrags write FFrags;
+ property Assists: Integer read FAssists write FAssists;
property Death: Integer read FDeath write FDeath;
property Kills: Integer read FKills write FKills;
property CurrWeap: Byte read FCurrWeap write FCurrWeap;
property eAir: Integer read FAir write FAir;
property eJetFuel: Integer read FJetFuel write FJetFuel;
property eFrags: Integer read FFrags write FFrags;
+ property eAssists: Integer read FAssists write FAssists;
property eDeath: Integer read FDeath write FDeath;
property eKills: Integer read FKills write FKills;
property eCurrWeap: Byte read FCurrWeap write FCurrWeap;
Team := BotList[num].team; // CTF / TDM
// Âûáèðàåì íàñòðîéêè áîòà èç ñïèñêà ïî íîìåðó èëè èìåíè:
- if lName = '' then
+ if lName = '' then
num := Random(Length(BotList))
else
begin
// Èìÿ áîòà:
_name := BotList[num].name;
+ if (_name = '') and (BotNames <> nil) then
+ for a := 0 to High(BotNames) do
+ if g_Player_ExistingName(BotNames[a]) then
+ begin
+ _name := BotNames[a];
+ Break;
+ end;
// Ìîäåëü:
_model := BotList[num].model;
// Ñîçäàåì áîòà:
with g_Player_Get(g_Player_Create(_model, BotList[num].color, Team, True)) as TBot do
begin
- Name := _name;
+ // Åñëè èìåíè íåò, äåëàåì åãî èç UID áîòà
+ if _name = ''
+ then Name := Format('DFBOT%.5d', [UID])
+ else Name := _name;
FDifficult.DiagFire := BotList[num].diag_fire;
FDifficult.InvisFire := BotList[num].invis_fire;
model := config.ReadStr(IntToStr(a), 'model', ''); // Ìîäåëü
// Êîìàíäà
- if config.ReadStr(IntToStr(a), 'team', 'red') = 'red'
- then team := TEAM_RED
- else team := TEAM_BLUE;
+ s := config.ReadStr(IntToStr(a), 'team', '');
+ if s = 'red' then
+ team := TEAM_RED
+ else if s = 'blue' then
+ team := TEAM_BLUE
+ else
+ team := TEAM_NONE;
// Öâåò ìîäåëè
sa := parse(config.ReadStr(IntToStr(a), 'color', ''));
+ SetLength(sa, 3);
color.R := StrToIntDef(sa[0], 0);
color.G := StrToIntDef(sa[1], 0);
color.B := StrToIntDef(sa[2], 0);
Name := gPlayers[a].FName;
Team := gPlayers[a].FTeam;
Frags := gPlayers[a].FFrags;
+ Assists := gPlayers[a].FAssists;
Deaths := gPlayers[a].FDeath;
Kills := gPlayers[a].FKills;
Color := gPlayers[a].FModel.Color;
end;
if t = HIT_WATER then
- begin
- g_GFX_Bubbles(FObj.X+PLAYER_RECT.X+(PLAYER_RECT.Width div 2),
- FObj.Y+PLAYER_RECT.Y-4, value div 2, 8, 4);
- if Random(2) = 0
- then g_Sound_PlayExAt('SOUND_GAME_BUBBLE1', FObj.X, FObj.Y)
- else g_Sound_PlayExAt('SOUND_GAME_BUBBLE2', FObj.X, FObj.Y);
- end;
+ g_Game_Effect_Bubbles(FObj.X+PLAYER_RECT.X+(PLAYER_RECT.Width div 2),
+ FObj.Y+PLAYER_RECT.Y-4, value div 2, 8, 4);
end;
// Áóôåð óðîíà:
X, Y, SY, a, p, m: Integer;
tw, th: Word;
cw, ch: Byte;
- s: string;
+ s, t: string;
stat: TPlayerStatArray;
begin
X := gPlayerScreenSize.X;
if gShowStat then
begin
s := IntToStr(Frags);
+ t := IntToStr(Assists);
e_CharFont_GetSize(gMenuFont, s, tw, th);
e_CharFont_PrintEx(gMenuFont, X-16-tw, Y, s, _RGB(255, 0, 0));
s := '';
+ t := '';
p := 1;
m := 0;
stat := g_Player_GetStats();
end;
end;
+ // FRAGS
s := IntToStr(p)+' / '+IntToStr(Length(stat))+' ';
if Frags >= m then s := s+'+' else s := s+'-';
s := s+IntToStr(Abs(Frags-m));
+ // ASSISTS
+ t := IntToStr(p)+' / '+IntToStr(Length(stat))+' ';
+ if Assists >= m then t := t+'+' else t := t+'-';
+ t := t+IntToStr(Abs(Assists-m));
+
e_CharFont_GetSize(gMenuSmallFont, s, tw, th);
e_CharFont_PrintEx(gMenuSmallFont, X-16-tw, Y+32, s, _RGB(255, 0, 0));
end;
FNextWeapDelay := 0;
end;
+
+// Assists block
+{procedure TPlayer.Assist(KillType: Byte; SpawnerUID: Word);
+var
+ DoAssists: Boolean;
+ AP: TPlayer;
+
+ procedure Accumulate(FDamage: Byte;);
+ begin
+
+ end;
+
+
+begin
+ DoAssists := (gGameSettings.GameMode = GM_TDM) or (gGameSettings.GameMode = GM_CTF);
+ if DoAssists then
+ begin
+ if (FAccumulatedDamage >= 65) then
+ begin
+ Inc(AP.FAssists);
+ end;
+ end;
+end;}
+
+
function TPlayer.hasAmmoForWeapon (weapon: Byte): Boolean;
begin
result := false;
FNoTarget := False;
FNoReload := False;
FFrags := 0;
+ FAssists := 0;
FLastFrag := 0;
FComboEvnt := -1;
FKills := 0;
FAir := 0;
end
else if (FAir mod 31 = 0) and not blockmon then
- begin
- g_GFX_Bubbles(FObj.X+PLAYER_RECT.X+(PLAYER_RECT.Width div 2), FObj.Y+PLAYER_RECT.Y-4, 5+Random(6), 8, 4);
- if Random(2) = 0
- then g_Sound_PlayExAt('SOUND_GAME_BUBBLE1', FObj.X, FObj.Y)
- else g_Sound_PlayExAt('SOUND_GAME_BUBBLE2', FObj.X, FObj.Y);
- end;
+ g_Game_Effect_Bubbles(FObj.X+PLAYER_RECT.X+(PLAYER_RECT.Width div 2),
+ FObj.Y+PLAYER_RECT.Y-4, 5+Random(6), 8, 4);
end else if FAir < AIR_DEF then
FAir := AIR_DEF;
utils.writeInt(st, LongInt(FMonsterKills));
// Ôðàãîâ
utils.writeInt(st, LongInt(FFrags));
+ // Àññèñòîâ
+ utils.writeInt(st, LongInt(FAssists));
// Ôðàãîâ ïîäðÿä
utils.writeInt(st, Byte(FFragCombo));
// Âðåìÿ ïîñëåäíåãî ôðàãà
FMonsterKills := utils.readLongInt(st);
// Ôðàãîâ
FFrags := utils.readLongInt(st);
+ // Àññèñòîâ
+ FAssists := utils.readLongInt(st);
// Ôðàãîâ ïîäðÿä
FFragCombo := utils.readByte(st);
// Âðåìÿ ïîñëåäíåãî ôðàãà
if BodyInLiquid(0, 0) then
begin
- g_GFX_Bubbles(Obj.X+Obj.Rect.X+(Obj.Rect.Width div 2)+Random(3)-1,
- Obj.Y+Obj.Rect.Height+8, 1, 8, 4);
- if Random(2) = 0
- then g_Sound_PlayExAt('SOUND_GAME_BUBBLE1', FObj.X, FObj.Y)
- else g_Sound_PlayExAt('SOUND_GAME_BUBBLE2', FObj.X, FObj.Y);
+ g_Game_Effect_Bubbles(Obj.X+Obj.Rect.X+(Obj.Rect.Width div 2)+Random(3)-1,
+ Obj.Y+Obj.Rect.Height+8, 1, 8, 4);
Exit;
end;