diff --git a/src/game/g_player.pas b/src/game/g_player.pas
index 06176d94272587199f1e6c7f910cb046fc5565f4..790d419283314680739cebf3093014f842c0a6de 100644 (file)
--- a/src/game/g_player.pas
+++ b/src/game/g_player.pas
function g_Player_Get(UID: Word): TPlayer;
function g_Player_GetCount(): Byte;
function g_Player_GetStats(): TPlayerStatArray;
-function g_Player_ValidName(Name: String): Boolean;
+function g_Player_ExistingName(Name: String): Boolean;
function g_Player_CreateCorpse(Player: TPlayer): Integer;
procedure g_Player_CreateGibs(fX, fY: Integer; ModelName: String; fColor: TRGB);
procedure g_Player_CreateShell(fX, fY, dX, dY: Integer; T: Byte);
_name := '';
if BotNames <> nil then
for a := 0 to High(BotNames) do
- if g_Player_ValidName(BotNames[a]) then
+ if g_Player_ExistingName(BotNames[a]) then
begin
_name := BotNames[a];
Break;
Team := BotList[num].team; // CTF / TDM
// Âûáèðàåì íàñòðîéêè áîòà èç ñïèñêà ïî íîìåðó èëè èìåíè:
- lName := AnsiLowerCase(lName);
- if (num < 0) or (num > Length(BotList)-1) then
- num := -1;
- if (num = -1) and (lName <> '') and (BotList <> nil) then
- for a := 0 to High(BotList) do
- if AnsiLowerCase(BotList[a].name) = lName then
- begin
- num := a;
- Break;
- end;
- if num = -1 then
- Exit;
+ if lName = '' then
+ num := Random(Length(BotList))
+ else
+ begin
+ if (num < 0) or (num > Length(BotList)-1) then
+ num := -1;
+ if (num = -1) and (BotList <> nil) then
+ lName := AnsiLowerCase(lName);
+ for a := 0 to High(BotList) do
+ if AnsiLowerCase(BotList[a].name) = lName then
+ begin
+ num := a;
+ Break;
+ end;
+ if num = -1 then
+ Exit;
+ end;
// Èìÿ áîòà:
_name := BotList[num].name;
-// Çàíÿòî - âûáèðàåì ñëó÷àéíîå:
- if not g_Player_ValidName(_name) then
- repeat
- _name := Format('DFBOT%.2d', [Random(100)]);
- until g_Player_ValidName(_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);
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;
// Áóôåð óðîíà:
FModel.Draw(fX, fY+fSlope);
end
else
- FModel.Draw(fX, fY+fSlope, 254);
+ FModel.Draw(fX, fY+fSlope, 255);
end
else
FModel.Draw(fX, fY+fSlope);
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;
(y >= 0) and (y <= PLAYER_RECT.Height);
end;
-function g_Player_ValidName(Name: string): Boolean;
+function g_Player_ExistingName(Name: string): Boolean;
var
a: Integer;
begin
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;