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

📄 uconnector.pas

📁 千年源代码,只缺少控件,可以做二次开发用,好不容易得来的
💻 PAS
📖 第 1 页 / 共 4 页
字号:
            end;
         end;
   end;
end;

procedure TConnector.DBMessageProcess (aPacket : PTPacketData);
var
   i, cnt : Integer;
   str : String;
   ws : TWordInfoString;
   pDBRecord : PTDBRecord;
   LGRecord : TLGRecord;
   CurDate, LastDate : TDateTime;
begin
   Case aPacket^.RequestMsg of
      DB_INSERT :
         begin
            if aPacket^.ResultCode = DB_OK then begin
               if FGameStatus = gs_createchar then begin
                  pDBRecord := @aPacket^.Data;

                  Move (LoginData, LGRecord, SizeOf (TLGRecord));
                  for i := 0 to 5 - 1 do begin
//                     if LGRecord.CharInfo[i].CharName[0] = 0 then begin
//                        StrCopy (@LGRecord.CharInfo[i].CharName, @pDBRecord^.PrimaryKey);
//                        StrPCopy (@LGRecord.CharInfo[i].ServerName, ServerName);
                     if LGRecord.CharInfo [i].CharName = '' then begin
                        LGRecord.CharInfo[i].CharName := StrPas (@pDBRecord^.PrimaryKey);
                        LGRecord.CharInfo[i].ServerName := ServerName;
                        break;
                     end;
                  end;
                  ws.rmsg := SM_CHARINFO;
                  str := GetCharInfo;
                  SetWordString (ws.rwordstring, str);
                  cnt := sizeof(ws) - sizeof(TWordString) + SizeofWordString (ws.rWordstring);
                  AddSendData (@ws, cnt);

                  if LoginSender <> nil then begin
                     LoginSender.PutPacket (ConnectID, LG_UPDATE, 0, @LGRecord, SizeOf (TLGRecord));
                  end;
               end;
            end else begin
               Case aPacket^.ResultCode of
                  DB_ERR_DUPLICATE :
                     begin
                        SendStatusMessage (MESSAGE_SELCHAR, '捞固 鞍篮 捞抚狼 某腐磐啊 乐嚼聪促');
                     end;
                  DB_ERR_NOTENOUGHSPACE :
                     begin
                        SendStatusMessage (MESSAGE_SELCHAR, '傍埃捞 何练秦 某腐磐甫 父甸 荐 绝嚼聪促');
                     end;
                  DB_ERR_INVALIDDATA :
                     begin
                        SendStatusMessage (MESSAGE_SELCHAR, '棵官弗 某腐磐 疙捞 酒凑聪促');
                     end;
                  DB_ERR_IO :
                     begin
                        SendStatusMessage (MESSAGE_SELCHAR, 'I/O 坷幅啊 惯积沁嚼聪促');
                     end;
                  Else
                     begin
                        SendStatusMessage (MESSAGE_SELCHAR, 'DB Server 郴何 坷幅涝聪促');
                     end;
               end;
               FGameStatus := gs_none;
            end;
         end;
      DB_SELECT :
         begin
            if aPacket^.ResultCode = DB_OK then begin
               if FGameStatus = gs_selectchar then begin
                  pDBRecord := @aPacket^.Data;

                  if TestStr (@pDBRecord^.PrimaryKey, 20) = false then begin
                     pDBRecord^.PrimaryKey[0] := 0;
                  end;
                  if TestStr (@pDBRecord^.PrimaryKey, 20) = false then begin
                     pDBRecord^.MasterName[0] := 0;
                  end;

                  if StrPas (@pDBRecord^.PrimaryKey) <> UseChar then begin
                     SendStatusMessage (MESSAGE_SELCHAR, 'DB 辑滚狼 郴何坷幅涝聪促');
                     UseChar := ''; UseLand := '';
                     FGameStatus := gs_none;
                     exit;
                  end;

                  if StrPas (@pDBRecord^.MasterName) <> LoginID then begin
                     SendStatusMessage (MESSAGE_SELCHAR, '夯牢狼 某腐磐啊 酒凑聪促');
                     UseChar := ''; UseLand := '';
                     FGameStatus := gs_none;
                     exit;
                  end;

                  if frmMain.sckGameConnect.Active = false then begin
                     SendStatusMessage (MESSAGE_SELCHAR, '了价钦聪促. 泪矫饶 促矫 楷搬秦 林技夸');
                     UseChar := ''; UseLand := '';
                     FGameStatus := gs_none;
                     exit;
                  end;

                  PlayChar := UseChar;

                  frmMain.AddLog (format ('某腐疙 : %s', [StrPas (@pDBRecord^.PrimaryKey)]));

                  Str := IpAddr + ',' + IntToStr (VerNo) + ',' + IntToStr (Byte (PaidType)) + ',' + IntToStr (Code);
                  StrPCopy (@pDBRecord^.Dummy, Str);
                  if GameSender <> nil then begin
                     GameSender.PutPacket (ConnectID, GM_CONNECT, 0, @aPacket^.Data, SizeOf (TDBRecord));
                  end;

                  FGameStatus := gs_gotogame;
               end else if FGameStatus = gs_deletechar then begin
                  pDBRecord := @aPacket^.Data;

                  if StrPas (@pDBRecord^.PrimaryKey) <> UseChar then begin
                     SendStatusMessage (MESSAGE_SELCHAR, 'DB 辑滚狼 郴何坷幅涝聪促');
                     UseChar := ''; UseLand := '';
                     FGameStatus := gs_none;
                     exit;
                  end;
                  if StrPas (@pDBRecord^.MasterName) <> LoginID then begin
                     SendStatusMessage (MESSAGE_SELCHAR, '夯牢狼 某腐磐啊 酒凑聪促');
                     UseChar := ''; UseLand := '';
                     FGameStatus := gs_none;
                     exit;
                  end;

                  try
                     CurDate := Date - 7;
                     LastDate := StrToDate (StrPas (@pDBRecord^.LastDate));
                     if LastDate > CurDate then begin
                        SendStatusMessage (MESSAGE_SELCHAR, '弥辟 7老 捞傈 立加 某腐磐绰 瘤匡 荐 绝嚼聪促');
                        FGameStatus := gs_none;
                        exit;
                     end;
                  except
                     SendStatusMessage (MESSAGE_SELCHAR, '弥辟 7老 捞傈 立加 某腐磐绰 瘤匡 荐 绝嚼聪促');
                     FGameStatus := gs_none;
                     exit;
                  end;

                  Move (LoginData, LGRecord, SizeOf (TLGRecord));
                  for i := 0 to 5 - 1 do begin
//                     if StrPas (@LGRecord.CharInfo[i].CharName) = UseChar then begin
//                        if StrPas (@LGRecord.CharInfo[i].ServerName) = UseLand then begin
                     if LGRecord.CharInfo [i].CharName = UseChar then begin
                        if LGRecord.CharInfo [i].ServerName = UseLand then begin
                           FillChar (LGRecord.CharInfo[i], SizeOf (TCharInfo), 0);
                           break;
                        end;
                     end;
                  end;

                  if LoginSender <> nil then begin
                     LoginSender.PutPacket (ConnectID, LG_UPDATE, 0, @LGRecord, SizeOf (TLGRecord));
                  end;
               end;
            end else begin
               Case aPacket^.ResultCode of
                  DB_ERR_NOTFOUND :
                     begin
                        SendStatusMessage (MESSAGE_SELCHAR, '急琶茄 某腐磐甫 茫阑 荐 绝嚼聪促');
                     end;
                  DB_ERR_INVALIDDATA :
                     begin
                        SendStatusMessage (MESSAGE_SELCHAR, '棵官弗 某腐磐 疙捞 酒凑聪促');
                     end;
                  DB_ERR_IO :
                     begin
                        SendStatusMessage (MESSAGE_SELCHAR, 'I/O 坷幅啊 惯积沁嚼聪促');
                     end;
                  Else
                     begin
                        SendStatusMessage (MESSAGE_SELCHAR, 'DB Server 郴何 坷幅涝聪促');
                     end;
               end;
               FGameStatus := gs_none;
            end;
         end;
      DB_UPDATE :
         begin
         end;
      Else
         begin
            // frmMain.AddLog (format ('%d Packet was received', [aPacket^.RequestMsg]));
         end;
   end;
end;

procedure TConnector.LoginMessageProcess (aPacket : PTPacketData);
var
   cnt : Integer;
   ws : TWordInfoString;
   str : String;
   PaidPacket : TPacketData;
   pPaidData : PTPaidData;
   PaidData : TPaidData;
begin
   Case aPacket^.RequestMsg of
      LG_INSERT :
         begin
            if aPacket^.ResultCode = DB_OK then begin
               ShowWindow (cw_createlogin, FALSE);
               ShowWindow (cw_login, TRUE);
               SendStatusMessage (MESSAGE_LOGIN, '瘤陛 父电 立加捞抚栏肺 立加且 荐 乐嚼聪促');
            end else begin
               Case aPacket^.ResultCode of
                  DB_ERR_DUPLICATE :
                     begin
                        SendStatusMessage (MESSAGE_CREATELOGIN, '捞固 粮犁窍绰 立加捞抚涝聪促');
                     end;
                  Else
                     begin
                        SendStatusMessage (MESSAGE_CREATELOGIN, '肺弊牢 辑滚狼 郴何坷幅涝聪促');
                     end;
               end;
            end;
            FGameStatus := gs_none;
         end;
      LG_SELECT :
         begin
            if aPacket^.ResultCode = DB_OK then begin
               if FGameStatus = gs_login then begin
                  Move (aPacket^.Data, LoginData, SizeOf (TLGRecord));

{
                  if TestStr (@LoginData.PrimaryKey, 20) = false then begin
                     LoginData.PrimaryKey[0] := 0;
                  end;
                  if TestStr (@LoginData.Password, 20) = false then begin
                     LoginData.Password[0] := 0;
                  end;

                  if StrPas (@LoginData.PrimaryKey) <> LoginID then begin
                     SendStatusMessage (MESSAGE_LOGIN, format ('肺弊牢辑滚狼 郴何坷幅涝聪促', [ServerName]));
                     LoginID := ''; LoginPW := '';
                     FGameStatus := gs_none;
                     exit;
                  end;
                  if StrPas (@LoginData.Password) <> LoginPW then begin
                     SendStatusMessage (MESSAGE_LOGIN, format ('厚剐锅龋啊 棵官福瘤 臼嚼聪促', [ServerName]));
                     LoginID := ''; LoginPW := '';
                     FGameStatus := gs_none;
                     exit;
                  end;
}

                  if LoginData.PrimaryKey <> LoginID then begin
                     SendStatusMessage (MESSAGE_LOGIN, format ('肺弊牢辑滚狼 郴何坷幅涝聪促', [ServerName]));
                     LoginID := ''; LoginPW := '';
                     FGameStatus := gs_none;
                     exit;
                  end;
                  if LoginData.PassWord <> LoginPW then begin
                     SendStatusMessage (MESSAGE_LOGIN, format ('厚剐锅龋啊 棵官福瘤 臼嚼聪促', [ServerName]));
                     LoginID := ''; LoginPW := '';
                     FGameStatus := gs_none;
                     exit;
                  end;

                  ShowWindow (cw_login, FALSE);
                  ShowWindow (cw_selectchar, TRUE);

//                  StrPCopy (@LoginData.LastDate, DateToStr (Date));
//                  StrPCopy (@LoginData.IpAddr, IpAddr);
                  LoginData.LastDate := DateToStr (Date);
                  LoginData.IpAddr := IpAddr;

                  if LoginSender <> nil then begin
                     LoginSender.PutPacket (ConnectID, LG_UPDATE, 0, @LoginData, SizeOf (TLGRecord));
                  end;

                  ws.rmsg := SM_CHARINFO;
                  str := GetCharInfo;
                  SetWordString (ws.rwordstring, str);
                  cnt := sizeof(ws) - sizeof(TWordString) + SizeofWordString (ws.rWordstring);
                  AddSendData (@ws, cnt);

                  FGameStatus := gs_none;

                  if PaidSender = nil then begin
                     PaidType := pt_validate;
                     Code := 0;
                  end;

                  FillChar (PaidData, SizeOf (TPaidData), 0);
                  if PaidType = pt_none then begin
                     PaidData.rLoginID := LoginID;
                     PaidData.rIpAddr := IpAddr;
                     PaidData.rMakeDate := LoginData.MakeDate;
                     PaidSender.PutPacket (ConnectID, PM_CHECKPAID, 0, @PaidData, SizeOf (TPaidData));
                     SendStatusMessage (MESSAGE_SELCHAR, '蜡丰沥焊甫 犬牢吝涝聪促');
                  end else if PaidType = pt_timepay then begin
                     FillChar (PaidPacket, SizeOf (TPacketData), 0);
                     PaidPacket.PacketSize := SizeOf (Word) + SizeOf (Integer) + SizeOf (Byte) * 2 + SizeOf (TPaidData);
                     PaidPacket.RequestID := ConnectID;
                     PaidPacket.RequestMsg := PM_CHECKPAID;
                     PaidPacket.ResultCode := 1;

                     pPaidData := PTPaidData (@PaidPacket.Data);
                     pPaidData^.rLoginID := LoginID;
                     pPaidData^.rIpAddr := IpAddr;
                     pPaidData^.rRemainDay := 0;
                     pPaidData^.rPaidType := pt_timepay;
                     pPaidData^.rCode := 0;

                     PaidMessageProcess (@PaidPacket);
                  end else begin
                     PaidType := pt_validate;
                     SendStatusMessage (MESSAGE_SELCHAR, format ('[%s]某腐磐甫 急琶窍技夸.', [ServerName]));
                  end;
               end;
            end else begin
               Case aPacket^.ResultCode of
                  DB_ERR_NOTFOUND :
                     begin
                        SendStatusMessage (MESSAGE_LOGIN, '拌沥沥焊甫 茫阑 荐 绝嚼聪促');
                     end;
                  DB_ERR_INVALIDDATA :
                     begin
                        SendStatusMessage (MESSAGE_LOGIN, '拌沥疙捞 棵官福瘤 臼嚼聪促');
                     end;
                  Else
                     begin
                        SendStatusMessage (MESSAGE_LOGIN, '促矫 涝仿秦 林技夸');
                     end;
               end;
            end;
            FGameStatus := gs_none;
         end;
      LG_UPDATE :
         begin
            if aPacket^.ResultCode = DB_OK then begin
               Move (aPacket^.Data, LoginData, SizeOf (TLGRecord));
               Case FGameStatus of
                  gs_createchar : begin
                     SendStatusMessage (MESSAGE_SELCHAR, '某腐磐甫 父甸菌嚼聪促.');

                     ws.rmsg := SM_CHARINFO;
                     str := GetCharInfo;
                     SetWordString (ws.rwordstring, str);
                     cnt := sizeof(ws) - sizeof(TWordString) + SizeofWordString (ws.rWordstring);
                     AddSendData (@ws, cnt);

                     FGameStatus := gs_none;
                  end;
                  gs_changepass : begin
                     SendStatusMessage (MESSAGE_SELCHAR, '厚剐锅龋甫 函版沁嚼聪促');
                     FGameStatus := gs_none;
                  end;
                  gs_deletechar : begin
                     SendStatusMessage (MESSAGE_SELCHAR, '某腐磐甫 昏力沁嚼聪促');

                     ws.rmsg := SM_CHARINFO;
                     str := GetCharInfo;
                     SetWordString (ws.rwordstring, str);
                     cnt := sizeof(ws) - sizeof(TWordString) + SizeofWordString (ws.rWordstring);
                     AddSendData (@ws, cnt);

                     FGameStatus := gs_none;
                  end;
               end;
            end else begin
               Case aPacket^.ResultCode of
                  DB_ERR_NOTFOUND :
                     begin
                        SendStatusMessage (MESSAGE_LOGIN, '拌沥沥焊甫 茫阑 荐 绝嚼聪促');
                     end;
               end;
               FGameStatus := gs_none;
            end;
         end;
      Else
         begin
            // frmMain.AddLog (format ('%d Packet was received', [aPacket^.RequestMsg]));
         end;
   end;
end;

function TConnector.MessageProcess (aComData : PTWordComData) : Boolean;
var
   i : Integer;
   msg : PByte;
   sKey : TCKey;
//   pcKey : PTCKey;
   pcVer : PTCVer;
//   pcCreateIdPass : PTCCreateIdPass;
   pcCreateIdPass2 : PTCCreateIdPass2;
   pcCreateIdPass3 : PTCCreateIdPass3;
   pcIdPass : PTCIdPass;
   pcCreateChar : PTCCreateChar;
   pcDeleteChar : PTCDeleteChar;
   pcSelectChar : PTCSelectChar;
   pcChangePassword : PTCChangePassword;

   LGRecord : TLGRecord;
   DBRecord : TDBRecord;

   uStr : String;
   boFlag : Boolean;

   nYear, nMonth, nDay : Word;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -