📄 rltsvr.pas
字号:
RoundScordInfosArray[Round.No].WheelInfos[Round.WheelNo].Settment := TotalValue;
RoundScordInfosArray[Round.No].WheelInfos[Round.WheelNo].DateTime := Now;
RoundScordInfosArray[Round.No].WheelInfos[Round.WheelNo].AutoValue := Round.Auto;
DASaveRoundScordInfo(RoundScordInfosArray[Round.No].WheelInfos[Round.WheelNo]);
WheelParams := GetWheelParams(State);
for I := 0 to SocketForm.ConnectionList.Items.Count -1 do
begin
rltInterpreter := SocketForm.GetrltInterpreter(I);
rltInterpreter.CallSetWheelParams(WheelParams);
end;
Level2 := 2;
end;
for I := 0 to SocketForm.ConnectionList.Items.Count -1 do
begin
rltInterpreter := SocketForm.GetrltInterpreter(I);
rltInterpreter.CallSetRound;
end;
//统计,结算分值
//记录到数据库
//改变记录到管理端
//改变各个客户端玩家的分数
end;
procedure TTltManager.DoTimer(Sender: TObject);
var
I : integer;
rltInterpreter : TrltServerInterpreter;
begin
//状态机入口
//更新当前时间
//检测时间有效性(忽略)
//改变游戏全局数据
//更新客户端数据
{ FCountDown := (FTickCount - GetTickCount) div 1000;
if (CountDown>=0) and (CountDown<=FBetTimeSet) then
begin
DoBeting;
end else
if (CountDown>FBetTimeSet) and (CountDown<= FBeforeWheelTimeSet) then
begin
DoBeforeWheel;
end else
if (CountDown>FBeforeWheelTimeSet) and (CountDown<= FWheelingTimeSet) then
begin
DoWheeling;
end else
if (CountDown>FWheelingTimeSet) and (CountDown<= FWheelEndSet) then
begin
DoScore;
end;
if (CountDown> FWheelEndSet) then
begin
DoWheelEnd;
end;
}
// UpdateCountDown;
Update;
{ for I := 0 to SocketForm.ConnectionList.Items.Count -1 do
begin
rltInterpreter := SocketForm.GetrltInterpreter(I);
rltInterpreter.CallSetCountDown;
end;}
end;
procedure TTltManager.DoWheelEnd;
var
I : integer;
rltInterpreter : TrltServerInterpreter;
begin
if FPauseAtRoundEnd then SetRoundState(rsStop)
else InitRound;
for I := 0 to SocketForm.ConnectionList.Items.Count -1 do
begin
rltInterpreter := SocketForm.GetrltInterpreter(I);
rltInterpreter.CallSetRound;
end;
// 重置局状态
// CountDown
end;
procedure TTltManager.DoWheeling;
var
I : integer;
rltInterpreter : TrltServerInterpreter;
begin
if Level2 = 1 then
begin
WheelParams := GetWheelParams(State);
for I := 0 to SocketForm.ConnectionList.Items.Count -1 do
begin
rltInterpreter := SocketForm.GetrltInterpreter(I);
rltInterpreter.CallSetWheelParams(WheelParams);
end;
Level2 := 2;
end;
for I := 0 to SocketForm.ConnectionList.Items.Count -1 do
begin
rltInterpreter := SocketForm.GetrltInterpreter(I);
rltInterpreter.CallSetRound;
end;
//提示客户端进入轮盘显示
//等待客户端完成轮盘旋转
end;
function TTltManager.GetBetCount: TBatArray;
begin
end;
function TTltManager.GetCountDown: integer;
begin
Result := Round.CountDown;
end;
function TTltManager.GetOpenNumber: integer;
begin
Result := Round.WheelResult;
end;
function TTltManager.GetPlayerByID(PlayerID: String): TPlayer;
var
I : integer;
Player : TPlayer;
begin
Result := nil;
for I := 0 to FPlayerList.Count -1 do
begin
Player := TPlayer(FPlayerList[i]);
if PlayerID = Player.ID then
begin
Result := Player;
Exit;
end;
end;
end;
function TTltManager.GetClientByPlayer(Player : TPlayer) : TTltClient;
var
I : integer;
Client : TTltClient;
begin
Result := nil;
for I := 0 to FPlayerList.Count -1 do
begin
Client := TTltClient(FTltClients[i]);
if Client.HasPlayer(Player) then
begin
Result := Client;
Exit;
end;
end;
end;
function TTltManager.GetState: TRoundState;
begin
Result := Round.State;
end;
function TTltManager.GetColorIndex(Num : integer): integer;
begin
result := -1;
case Num of
1, 3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36:
Result := 0;
2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35:
Result := 1;
0: Result := 2;
else Result := -1;
end;
end;
procedure TTltManager.InitRound;
begin
FPauseAtRoundEnd := false;
FTickCount := GetTickCount;
FWheelStartTickCount := FTickCount;
FillChar(FFlag, sizeof(FFlag), #0);
Round.CountDown := FCountDown;
Round.State := rsBeting;
Round.Main := FRoundMain;
if FTimeSettingModified then UpdateTimeSetting;
end;
function TTltManager.LoginPlayer(APlayer: TPlayer): boolean;
var
Player : TPlayer;
I, Index : integer;
begin
I := 0;
while I < FPlayerList.Count do
begin
if TPlayer(FPlayerList[i]).ID = APlayer.ID then
begin
LogoffPlayer(APlayer.ID);
end else inc(I);
end;
FPlayerList.Add(APlayer);
APlayer.State := psActive;
APlayer.Modified := true;
end;
function TTltManager.LoginPlayer(PlayerID, Password: String; AClient: TtltClient): boolean;
var
Player : TPlayer;
Index : integer;
begin
Result := false;
Player := TPlayer.Create;
try
Player.ID := PlayerID;
if not DALoadPlayer(Player) then
begin
Result := false;
Exit;
end;
if Password = Player.Password then
begin
Result := true;
AClient.AddPlayer(Player);
LoginPlayer(Player);
end;
finally
if not Result then Player.Free;
end;
end;
procedure TTltManager.LogoffPlayer(PlayerID: String);
var
Player : TPlayer;
begin
Player := GetPlayerByID(PlayerID);
if Player<>nil then
begin
FPlayerList.Remove(Player);
Player.Client.RemovePlayer(Player);
DASavePlayer(Player);
Player.Free;
end;
end;
function TTltManager.GetRandomNumByColor(ColorIndex : integer): integer;
const Nums : array[0..36] of integer =( 1, 3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36,
2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35,0);
begin
Result := -1;
case ColorIndex of
0:begin
Result := Nums[random(16)];
end;
1:begin
Result := Nums[random(16)+16];
end;
2:begin
Result := 0;
end;
end;
end;
function TTltManager.NextState: TRoundState;
begin
with Round do
case State of
rsPaused:
begin
State := rsBeting;
end;
rsDemo:
begin
State := rsBeting;
end;
rsBeting:
begin
State := rsBeforeWheel;
end;
rsBeforeWheel:
begin
State := rsWheeling;
end;
rsWheeling:
begin
State := rsScore;
end;
rsScore:
begin
State := rsBeting;
InitRound;
end;
end;
Level2 :=1;
end;
procedure TTltManager.RemoveClient(Client: TTltClient);
begin
if not Assigned(Client) then Exit;
while Client.PlayerList.Count>0 do
begin
LogoffPlayer(TPlayer(Client.PlayerList[0]).ID);
end;
FTltClients.Remove(Client);
end;
procedure TTltManager.ResetWheel;
begin
InitRound;
end;
function TTltManager.SetOpenNumber(ANum: integer): integer;
begin
Round.WheelResult := ANum;
end;
procedure TTltManager.StartRound;
begin
end;
procedure TTltManager.Update;
var
NowTime : DWord;
DltTime : DWord;
function ChkTime: boolean;
begin
NowTime := GetTickCount;
DltTime := NowTime - FTickCount;
if DltTime<0 then
begin
DltTime := 1000;
NowTime := 1000;
FTickCount := 0
end;
if DltTime > 20000 then //系统超时,强制重启本轮
begin
ResetWheel;
Result := false;
Exit;
end;
FTickCount := NowTime;
Result := True;
end;
function UpDateState: boolean ;
begin//计算状态变更
with TimeSetting do
begin
if (state = rsBeting) and (Round.CountDown >= BetTimeSet) then NextState
else
if (state = rsBeforeWheel) and (Round.CountDown >= BeforeWheelTimeSet) then NextState
else
if (state = rsWheeling) and (Round.CountDown >= WheelingTimeSet) then NextState
else
if (state = rsScore) and (Round.CountDown >= ScoreTimeSet) then NextState;
end;
end;
const
CRedBet = 0;
CBlackBet = 1;
CGreenBet = 2;
var
I : integer;
begin
if NeedResetPlayerBet then ResetPlayerBet;
with Round do
begin
if not ChkTime then Exit; //检查时间
if State in [rsBeting..rsScore] then
Round.CountDown := (FTickCount - FWheelStartTickCount ) div 1000;
if state = rsBeting then DoBeting;
if State = rsBeforeWheel then DoBeforeWheel;
if State = rsWheeling then DoWheeling;
if State = rsScore then DoScore;
if State = rsStop then DoStop;
if State = rsPaused then DoPaused;
// if State = rsBeginToWait then DoBeginToWait;
UpDateState;
FTickCount := NowTime; //累加时间
end;
//更新下注量
FillChar(BetCount, sizeof(BetCount), #0);
for i := 0 to FPlayerList.Count -1 do
begin
with TPlayer(FPlayerList[i]) do
begin
inc(BetCount[btRed], Bet[btRed]);
inc(BetCount[btBlack], Bet[btBlack]);
inc(BetCount[btGreen], Bet[btGreen]);
end;
end;
//
Log;
// inc
end;
procedure TTltManager.UpdateClients(Proc: TClientProc);
var
I : integer;
rltInterpreter : TrltServerInterpreter;
begin
if Assigned(Proc) then
begin
for I := 0 to SocketForm.ConnectionList.Items.Count -1 do
begin
rltInterpreter := SocketForm.GetrltInterpreter(I);
rltInterpreter.CallProc(Proc);
end;
end;
end;
procedure TTltManager.UpdateCountDown;
begin
// FWheelCounter := GetTickCount - FWheelStartTickCount]
//inc(FCountDown);
end;
procedure TTltManager.UpdateCounter;
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -