⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ubattledb.pas

📁 千年源代码,只缺少控件,可以做二次开发用,好不容易得来的
💻 PAS
📖 第 1 页 / 共 2 页
字号:
   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 + -