📄 ubattledb.pas
字号:
PointKey : TUserDataKeyClass;
Str : String;
begin
Result := false;
PointKey := GetBattleGroupKey (aAge);
if PointKey = nil then begin
FillChar (aRankPart^, SizeOf (TSendRankPart), 0);
aRankPart^.rStart := aStart;
aRankPart^.rEnd := aStart - 1;
exit;
end;
FillChar (aRankPart^, SizeOf (TSendRankPart), 0);
aRankPart^.rStart := aStart;
aRankPart^.rEnd := aEnd;
frmMain.ClearResult (0);
for i := aStart to aEnd do begin
UserData := PointKey.Select (i - 1);
if UserData = nil then begin
aRankPart^.rEnd := i - 1;
break;
end;
aRankPart^.rData [i - aStart].rCharName := UserData.CharName;
aRankPart^.rData [i - aStart].rServerName := UserData.ServerName;
aRankPart^.rData [i - aStart].rWin := UserData.Win;
aRankPart^.rData [i - aStart].rLose := UserData.Lose;
aRankPart^.rData [i - aStart].rDisConnected := UserData.DisConnected;
aRankPart^.rData [i - aStart].rPoints := UserData.Point;
aRankPart^.rData [i - aStart].rGrade := UserData.Grade;
Str := format ('%d %s %d', [UserData.Grade, UserData.CharName, UserData.Point]);
frmMain.AddResult (0, Str);
end;
frmMain.AddResult (0, '----------------------------------------');
frmMain.lstResult6.Items.Insert (0, format ('RankPart : %d - %d', [aStart, aEnd]));
Result := true;
end;
function TBattleDB.UpdateRank (aBattleData : PTBattleResultData) : Boolean;
var
Owner, Fighter : TUserData;
Str, OwnerName, FighterName : String;
differenceOwner, differenceFighter : integer; //痢荐瞒捞
PointKey : TUserDataKeyClass;
begin
Result := false;
Str := format ('%s (%d/%d/%d)', [aBattleData^.rOwnerName, aBattleData^.rOwnerWin, aBattleData^.rOwnerLose, aBattleData^.rOwnerDisCon]);
frmMain.AddLog (Str);
Str := format ('%s (%d/%d/%d)', [aBattleData^.rFighterName, aBattleData^.rFighterWin, aBattleData^.rFighterLose, aBattleData^.rFighterDisCon]);
frmMain.AddLog (Str);
OwnerName := aBattleData^.rOwnerServer + ':' + aBattleData^.rOwnerName;
FighterName := aBattleData^.rFighterServer + ':' + aBattleData^.rFighterName;
Owner := NameKey.Select (OwnerName);
if Owner = nil then exit;
Fighter := NameKey.Select (FighterName);
if Fighter = nil then exit;
if aBattleData^.rFighterName = Owner.LastFighterName then begin
if Owner.FightingCount >= 3 then begin
exit;
end else begin
Owner.FightingCount := Owner.FightingCount + 1;
end;
end else begin
Owner.LastFighterName := aBattleData^.rFighterName;
Owner.FightingCount := 1;
end;
if aBattleData^.rOwnerName = Fighter.LastFighterName then begin
if Fighter.FightingCount >= 3 then begin
exit;
end else begin
Fighter.FightingCount := Fighter.FightingCount + 1;
end;
end else begin
Fighter.LastFighterName := aBattleData^.rOwnerName;
Fighter.FightingCount := 1;
end;
differenceOwner := Owner.Point - Fighter.Point;
differenceFighter := Fighter.Point - Owner.Point;
if (aBattleData^.rOwnerWin = 0) and (aBattleData^.rOwnerLose = 0) and (aBattleData^.rOwnerDisCon = 0) then exit;
if (aBattleData^.rFighterWin = 0) and (aBattleData^.rFighterLose = 0) and (aBattleData^.rFighterDiscon = 0) then exit;
if aBattleData^.rOwnerDisCon > 0 then begin
Owner.DisConnected := Owner.DisConnected + 1;
Owner.Point := Owner.Point + CalPoint (differenceOwner, Owner.Age, Owner.Point, 1);
end else if aBattleData^.rFighterDisCon > 0 then begin
Fighter.DisConnected := Fighter.DisConnected + 1;
Fighter.Point := Fighter.Point + CalPoint (differenceFighter, Fighter.Age, Fighter.Point, 1);
end else if aBattleData^.rOwnerWin - aBattleData^.rFighterWin > 0 then begin
Owner.Win := Owner.Win + 1;
Fighter.Lose := Fighter.Lose + 1;
Owner.Point := Owner.Point + CalPoint (differenceOwner, Owner.Age, Owner.Point, 0);
Fighter.Point := Fighter.Point + CalPoint (differenceFighter, Fighter.Age, Fighter.Point, 1);
if CompareStr(aBattleData^.rOwnerServer, aBattleData^.rFighterServer) <> 0 then begin
if (Owner.ServerGrade >= 50) and (Fighter.ServerGrade >=50) then begin
ServerList.AddServerPoint (Owner.ServerName);
ServerList.DelServerPoint (Fighter.ServerName);
Owner.ServerPoint := Owner.ServerPoint + 1;
Fighter.ServerPoint := Fighter.ServerPoint - 1;
if Fighter.ServerPoint < 0 then Fighter.ServerPoint := 0;
end;
end;
end else begin
Fighter.Win := Fighter.Win + 1;
Owner.Lose := Owner.Lose + 1;
Fighter.Point := Fighter.Point + CalPoint (differenceFighter, Fighter.Age, Fighter.Point, 0);
Owner.Point := Owner.Point + CalPoint (differenceOwner, Owner.Age, Owner.Point, 1);
if CompareStr(aBattleData^.rOwnerServer, aBattleData^.rFighterServer) <> 0 then begin
if (Owner.ServerGrade >= 50) and (Fighter.ServerGrade >= 50) then begin
ServerList.AddServerPoint (Fighter.ServerName);
ServerList.DelServerPoint (Owner.ServerName);
Fighter.ServerPoint := Fighter.ServerPoint + 1;
Owner.ServerPoint := Owner.ServerPoint - 1;
if Owner.ServerPoint < 0 then Owner.ServerPoint := 0;
end;
end;
end;
if Owner.Point < 800 then Owner.Point := 800;
if Fighter.Point < 800 then Fighter.Point := 800;
PointKey := GetBattleGroupKey (Owner.Age);
PointKey.Update (Owner);
PointKey := GetBattleGroupKey (Fighter.Age);
PointKey.Update (Fighter);
PointKey.SetGrade;
end;
{
function TBattleDB.CalPoint (difference : integer; BattleRecord : integer; Point : integer; aCalPointFlag : Byte) : integer;
var
K, A : integer;
// P 绰 郴啊 捞辨 犬伏, 1-P 绰 惑措祈捞 捞辨 犬伏
x, P : Extended;
begin
K := 0;
x := Power (10, -difference/400 );
P := 1 / (1+x) * 0.3;
if BattleRecord < 30 then begin
if Point >= 2400 then begin
K := 20;
end else begin
K := 50;
end;
end;
if BattleRecord >= 30 then begin
if Point >= 2400 then begin
K := 20;
end else begin
K := 30;
end;
end;
//捞变 荤恩俊霸 歹且 蔼阑 府畔
if aCalPointFlag = 0 then begin
// if K < 30 then A := round (K * (1 - P)) else A := round (K * (1 + P));
A := round (K * (1 - P));
// if A < 1 then A := 1;
Result := A;
//柳 荤恩俊霸辑 滑 蔼阑 府畔
end else if aCalPointFlag = 1 then begin
A := round (K * P);
if A < 1 then A := 1;
Result := A;
end;
end;
}
function TBattleDB.CalPoint (difference : integer; Age : Word; Point : integer; WinFlag : Byte) : integer;
begin
Result := 0;
case Age of
7000..9999:
begin
case Point of
0..999 : if WinFlag = 0 then Result := 2 else Result := -1;
1000..1499 : if WinFlag = 0 then Result := 3 else Result := -2;
1500..1799: Result := BattleTable.GetDomainData (0, WinFlag, difference);
1800..2399: Result := BattleTable.GetDomainData (1, WinFlag, difference);
2400..10000: Result := BattleTable.GetDomainData (2, WinFlag, difference);
end;
end;
6000..6999:
begin
case Point of
0..999: if WinFlag = 0 then Result := 2 else Result := -1;
1000..1399: if WinFlag = 0 then Result := 3 else Result := -2;
1400..1799: Result := BattleTable.GetDomainData (0, WinFlag, difference);
1800..2399: Result := BattleTable.GetDomainData (1, WinFlag, difference);
2400..10000: Result := BattleTable.GetDomainData (2, WinFlag, difference);
end;
end;
5000..5999:
begin
case Point of
0..999: if WinFlag = 0 then Result := 2 else Result := -1;
1000..1299: if WinFlag = 0 then Result := 3 else Result := -2;
1300..1799: Result := BattleTable.GetDomainData (0, WinFlag, difference);
1800..2399: Result := BattleTable.GetDomainData (1, WinFlag, difference);
2400..10000: Result := BattleTable.GetDomainData (2, WinFlag, difference);
end;
end;
4000..4999:
begin
case Point of
0..999: if WinFlag = 0 then Result := 2 else Result := -1;
1000..1199: if WinFlag = 0 then Result := 3 else Result := -2;
1200..1799: Result := BattleTable.GetDomainData (0, WinFlag, difference);
1800..2399: Result := BattleTable.GetDomainData (1, WinFlag, difference);
2400..10000: Result := BattleTable.GetDomainData (2, WinFlag, difference);
end;
end;
3000..3999:
begin
case Point of
0..999: if WinFlag = 0 then Result := 2 else Result := -1;
1000..1099: if WinFlag = 0 then Result := 3 else Result := -2;
1100..1799: Result := BattleTable.GetDomainData (0, WinFlag, difference);
1800..2399: Result := BattleTable.GetDomainData (1, WinFlag, difference);
2400..10000: Result := BattleTable.GetDomainData (2, WinFlag, difference);
end;
end;
else exit;
end;
end;
procedure TBattleDB.Test;
var
str : string;
Data1, Data2 : TUserData;
BattleData : TBattleResultData;
RankData : TGetRankData;
begin
Data1 := NameKey.Select ('脚拳:崔扼夸');
Data2 := NameKey.Select ('积疙:蓖巩鼻');
str := Data1.CharName + ',' + inttostr(data1.point);
FrmMain.lstComment.Items.Add(str);
FrmMain.lstComment.Items.Add('---------------------------------------');
str := Data2.CharName + ',' + inttostr(data2.point);
FrmMain.lstComment.Items.Add(str);
BattleData.rOwnerName := Data1.CharName;
BattleData.rOwnerServer := Data1.ServerName;
BattleData.rFighterName := Data2.CharName;
BattleData.rFighterServer:= Data2.ServerName;
BattleData.rOwnerWin := 2;
BattleData.rOwnerLose := 1;
BattleData.rOwnerDisCon := 0;
BattleData.rFighterWin := 1;
BattleData.rFighterLose := 2;
BattleData.rFighterDisCon :=0;
UpdateRank (@BattleData);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -