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

📄 uconnect.pas

📁 千年源代码,只缺少控件,可以做二次开发用,好不容易得来的
💻 PAS
📖 第 1 页 / 共 4 页
字号:
                        doumiUser := TUserList (ShareRoom.UserList).GetUserPointer (doumiConnector.Name);

                        tmpUser.XPosMove := doumiUser.BasicData.x;
                        tmpUser.YPosMove := doumiUser.BasicData.y;
                        tmpUser.MoveConnector;
                     end;
                     exit;
                  end;
               end;
               if (UpperCase (RetStr) = '@APPEAR') then begin
                  if WhereStatus <> ws_inroom then exit;
                  if BattleRoom <> nil then exit;

                  if doumiConnector <> Self then exit;
                  RetStr := GetToken (Str, ' ', 1);
                  tmpConnector := ShareRoom.SearchConnector (RetStr);
                  tmpUser := TUserList (ShareRoom.UserList).GetUserPointer (tmpConnector.Name);
                  if tmpUser = nil then begin
                     SendChatMessage (format ('%s丛捞 绝嚼聪促.',[RetStr]), SAY_COLOR_SYSTEM);
                  end else begin
                     doumiUser := TUserList (ShareRoom.UserList).GetUserPointer (doumiConnector.Name);

                     doumiUser.XPosMove := tmpUser.BasicData.x;
                     doumiUser.YPosMove := tmpUser.BasicData.y;
                     doumiUser.MoveConnector;
                  end;
                  exit;
               end;
}
{
               if Str = '@辑滚喊鉴困' then begin
                  Rankpart.rAge := 0;
                  RankPart.rStart := 1;
                  RankPart.rEnd := 6;
                  if BattleDBSender <> nil then begin
                     BattleDBSender.PutPacket (ConnectID, BSBD_GETSERVERRANK, 0, @RankPart, SizeOf (TGetRankPart));
                  end;
                  exit;
               end;
               RetStr := GetToken (Str, ' ', 0);
               if RetStr = '@林公傍' then begin
                  MagicStr := GetToken (Str, ' ', 1);
                  if Trim (MagicStr) = '' then begin
                     SendChatMessage ('@林公傍 (鼻过啊/八过啊/档过啊/芒过啊/硼过啊 吝 茄俺)', SAY_COLOR_SYSTEM);
                  end else begin
                     MainMagic := SearchExtremeMagic (MagicStr);

                     if MainMagic = '' then exit;
                     MainMagicData.rName := CharName;
                     MainMagicData.rServerName := ServerName;
                     MainMagicData.rMagic := MainMagic;

                     if BattleDBSender <> nil then begin
                        BattleDBSender.PutPacket (ConnectID, BSBD_MAGICRESULT, 0, @MainMagicData, SizeOf (TMainMagicData));
                     end;
                  end;
                  exit;
               end;
               RetStr := GetToken (Str, ' ', 0);
               if RetStr = '@公傍鉴困' then begin
                  MagicStr := GetToken (Str, ' ', 1);
                  if Trim (MagicStr) = '' then begin
                     SendChatMessage ('@公傍鉴困 (鼻过啊/八过啊/档过啊/芒过啊/硼过啊 吝 茄俺)', SAY_COLOR_SYSTEM);
                  end else begin
                     MainMagicRank.rMainMagic := MagicStr;
                     MainMagicRank.rStart := 1;
                     MainMagicRank.rEnd := 50;

                     if BattleDBSender <> nil then begin
                        BattleDBSender.PutPacket (ConnectID, BSBD_GETMAINMAGICRANK, 0, @MainMagicRank, SizeOf (TGetMainMagicRank));
                     end;
                     exit;
                  end;
               end;
}
               if User = nil then begin
                  Case WhereStatus of
                     ws_inroom :
                        begin
                           if BattleRoom = nil then begin
                              ShareRoom.SendWatchMessage (CharName + ' : ' + str, SAY_COLOR_NORMAL);
                           end else begin
                              TBattleRoom (BattleRoom).SendWatchMessage (CharName + ' : ' + str, SAY_COLOR_NORMAL);
                           end;
                        end;
                     ws_room :
                        begin
                           ConnectorList.WaitRoomMessage (GroupTitle, CharName + ' : ' + Str, SAY_COLOR_NORMAL);
                        end;
                  end;
                  exit;
               end;
            end;
            if User <> nil then begin
               Move (aComData^, ComData, aComData^.cnt + SizeOf (Word));
               TUser (User).MessageProcess (ComData);
            end;
         end;
   end;
end;

procedure TConnector.BattleDBMessageProcess (aPacket : PTPacketData);
var
   pSendRankData : PTSendRankData;
   pSendRankPart : PTSendRankPart;
   pSendServerRankPart : PTSendServerRankPart;  
   i, nCount : Integer;
   Str, Dest : String;
begin
   Case aPacket^.RequestMsg of
      BDBS_SENDRANKDATA :
         begin
            if aPacket^.ResultCode = 0 then exit;
            pSendRankData := @aPacket^.Data;

            Win := pSendRankData^.rWin;
            Lose := pSendRankData^.rLose;
            DisConnected := pSendRankData^.rDisConnected;
            BattleRecord := pSendRankData^.rBattleRecord;
            Points := pSendRankData^.rPoints;
            Grade := pSendRankData^.rGrade;
         end;
      BDBS_SENDRANKPART :
         begin
            if aPacket^.ResultCode = 0 then exit;
            pSendRankPart := @aPacket^.Data;

            nCount := pSendRankPart^.rEnd - pSendRankPart^.rStart + 1;

            Str := '';
            Dest := '';
            for i := 0 to nCount - 1 do begin
               Str := IntToStr (pSendRankPart^.rData [i].rGrade) + '困 ' +
                  IntToStr (pSendRankPart^.rData [i].rPoints) + ' ' +
                  pSendRankPart^.rData [i].rCharName + ' ( ' +
                  pSendRankPart^.rData [i].rServerName + ' ) ' + ' <' +
                  IntToStr (pSendRankPart^.rData [i].rWin) + '铰 ' +
                  IntToStr (pSendRankPart^.rData [i].rLose) + '菩' + '>' + ',';
               Dest := Dest + Str;
            end;
            SendGradeList (Dest);
         end;
      BDBS_SENDSERVERRANK :
         begin
            exit;
            if aPacket^.ResultCode = 0 then exit;
            pSendServerRankPart := @aPacket^.Data;

            nCount := pSendServerRankPart^.rEnd - pSendServerRankPart^.rStart + 1;

            Str := '';
            Dest := '';
            for i := 0 to nCount - 1 do begin
               Str := pSendServerRankPart^.rData [i].rServerName + ' (' +
                  IntToStr (pSendServerRankPart^.rData [i].rPoints) + ')' + #13;
               Dest := Dest + Str;
            end;

            SendChatMessage (Dest, SAY_COLOR_NORMAL);
         end;
      BDBS_SENDMAINMAGICRANK :
         begin
            exit;
            if aPacket^.ResultCode = 0 then exit;
            pSendRankPart := @aPacket^.Data;

            nCount := pSendRankPart^.rEnd - pSendRankPart^.rStart + 1;

            Str := '';
            Dest := '';            
            for i := 0 to nCount - 1 do begin
               Str := IntToStr (pSendRankPart^.rData [i].rGrade) + '困 ' +
                  IntToStr (pSendRankPart^.rData [i].rPoints) + ' ' +
                  pSendRankPart^.rData [i].rCharName + ' ( ' +
                  pSendRankPart^.rData [i].rServerName + ' ) ' + ' <' +
                  IntToStr (pSendRankPart^.rData [i].rWin) + '铰 ' +
                  IntToStr (pSendRankPart^.rData [i].rLose) + '菩' + '>' + #13;
               Dest := Dest + Str;
            end;

            SendChatMessage (Dest, SAY_COLOR_NORMAL);
         end;
   end;
end;

procedure TConnector.AddReceiveData (aData : PChar; aSize : Integer);
begin
   if ReceiveBuffer.Put (aData, aSize) = false then begin
      frmMain.WriteLogInfo ('TConnector.AddReceiveData() failed');
   end;
end;

procedure TConnector.AddSendData (aData : PChar; aSize : Integer);
begin
   if aSize <= 4096 then begin
      GameServerConnectorList.AddSendData (GateNo, ConnectID, aData, aSize);
   end else begin;
      frmMain.WriteLogInfo ('TConnector.AddSendData Size > 4096');
   end;
end;

procedure TConnector.SearchPositionbyServer (aServerName : String; var aXpos, aYpos : Integer);
var
   i, Xpos, Ypos : Integer;
   DB : TUserStringDB;
   iName, ServerName, CharName : String;
begin
   ServerName := '';
   CharName := '';

   DB := TUserStringDB.Create;
   DB.LoadFromFile ('.\Setting\CreateSpecialArea.SDB');

   for i := 0 to DB.Count - 1 do begin
      iName := DB.GetIndexName (i);
      if iName = '' then continue;

      ServerName := DB.GetFieldValueString (iName, 'Name');
      Xpos := DB.GetFieldValueInteger (iName, 'X');
      Ypos := DB.GetFieldValueInteger (iName, 'Y');

      if ServerName = aServerName then begin
         aXpos := Xpos;
         aYpos := Ypos;
         exit;
      end;
   end;
end;

function TConnector.SearchGradeStrList (aServerName, aCharName : String) : Boolean;
var
   i, j : Integer;
   Strs : Array [0..5] of String;
   Str : String;
begin
   Result := false;

   if (aCharName = '') or (aServerName = '') then exit;

   for i := 0 to GradeStrList.Count - 1 do begin
      Str := GradeStrList.Strings [i];
      for j := 0 to 5 do begin
         Str := GetValidStr3 (Str, Strs [j], ',');
         if Str = '' then break; 
      end;

      if (Strs[1] = aServerName) and (Strs[2] = aCharName) then begin
         Result := true;
         exit;
      end;
   end;
end;

function TConnector.SearchExtremeMagic (aStr : String) : String;
var
   i, nMagic : Integer;
   MagicData : TMagicData;
begin
   Result := '';
   nMagic := 0;

   if aStr = '鼻过啊' then begin
      for i := 0 to HAVEMAGICSIZE - 1 do begin
         MagicClass.GetMagicData (StrPas (@CharData.HaveMagicArr[i].Name), MagicData, CharData.HaveMagicArr [i].Skill);
         if (MagicData.rMagicType = MAGICTYPE_WRESTLING) and (MagicData.rcSkillLevel = 9999) then begin
            inc (nMagic);               
         end;
      end;
      if (nMagic = 6) and (GetLevel (CharData.BasicMagicArr[0].Skill) = 9999) then begin
         Result := aStr; 
      end;
      exit;
   end;
   if aStr = '八过啊' then begin
      for i := 0 to HAVEMAGICSIZE - 1 do begin
         MagicClass.GetMagicData (StrPas (@CharData.HaveMagicArr[i].Name), MagicData, CharData.HaveMagicArr [i].Skill);
         if (MagicData.rMagicType = MAGICTYPE_FENCING) and (MagicData.rcSkillLevel = 9999) then begin
            inc (nMagic);
         end;
      end;
      if (nMagic = 6) and (GetLevel (CharData.BasicMagicArr[1].Skill) = 9999) then begin
         Result := aStr;
      end;
      exit;
   end;
   if aStr = '档过啊' then begin
      for i := 0 to HAVEMAGICSIZE - 1 do begin
         MagicClass.GetMagicData (StrPas (@CharData.HaveMagicArr[i].Name), MagicData, CharData.HaveMagicArr [i].Skill);
         if (MagicData.rMagicType = MAGICTYPE_SWORDSHIP) and (MagicData.rcSkillLevel = 9999) then begin
            inc (nMagic);
         end;
      end;
      if (nMagic = 6) and (GetLevel (CharData.BasicMagicArr[2].Skill) = 9999) then begin
         Result := aStr;
      end;
      exit;
   end;
   if aStr = '硼过啊' then begin
      for i := 0 to HAVEMAGICSIZE - 1 do begin
         MagicClass.GetMagicData (StrPas (@CharData.HaveMagicArr[i].Name), MagicData, CharData.HaveMagicArr [i].Skill);
         if (MagicData.rMagicType = MAGICTYPE_HAMMERING) and (MagicData.rcSkillLevel = 9999) then begin
            inc (nMagic);
         end;
      end;
      if (nMagic = 6) and (GetLevel (CharData.BasicMagicArr[3].Skill) = 9999) then begin
         Result := aStr;
      end;
      exit;
   end;
   if aStr = '芒过啊' then begin
      for i := 0 to HAVEMAGICSIZE - 1 do begin
         MagicClass.GetMagicData (StrPas (@CharData.HaveMagicArr[i].Name), MagicData, CharData.HaveMagicArr [i].Skill);
         if (MagicData.rMagicType = MAGICTYPE_SPEARING) and (MagicData.rcSkillLevel = 9999) then begin
            inc (nMagic);
         end;
      end;
      if (nMagic = 6) and (GetLevel (CharData.BasicMagicArr[4].Skill) = 9999) then begin
         Result := aStr;
      end;
      exit;
   end;
end;

procedure TConnector.SendBattleGroupList (aType : Byte);
var
   ComData : TWordComData;
   psShowGroupList : PTSShowListWindow;
begin
   psShowGroupList := @ComData.Data;
   BattleGroupList.GetBattleGroupData (psShowGroupList, aType);

   ComData.Cnt := sizeof(TSShowListWindow) - sizeof(TWordString) + sizeofwordstring(psShowGroupList^.rWordString);
   AddSendData (@ComData, ComData.Cnt + SizeOf (Word));
end;

procedure TConnector.SendBattleRoomList (aGroupTitle : String; aType : Byte);
var
   ComData : TWordComData;
   psShowRoomList : PTSShowListWindow;
begin
   psShowRoomList := @ComData.Data;
   BattleGroupList.GetBattleRoomData (psShowRoomList, aGroupTitle, aType);

   ComData.Cnt := sizeof(TSShowListWindow) - sizeof(TWordString) + sizeofwordstring(psShowRoomList^.rWordString);
   AddSendData (@ComData, ComData.Cnt + SizeOf (Word));
end;

procedure TConnector.SendGradeList (aWordStr : String);
var
   ComData : TWordComData;
   psShowListWindow : PTSShowListWindow;
begin
   psShowListWindow := @ComData.Data;

   with psShowListWindow^ do begin
      rMsg := SM_SHOWSPECIALWINDOW;
      rWindow := WINDOW_GRADEWINDOW;
      rType := 0;
      SetWordString (rWordString, aWordStr);

      ComData.Cnt := sizeof(TSShowListWindow) - sizeof(TWordString) + sizeofwordstring(rwordstring);
   end;      
   AddSendData (@ComData, ComData.Cnt + SizeOf (Word));
end;

function TConnector.GetCharAge : Integer;
begin
   Result := GetLevel (CharData.Light + CharData.Dark);
end;

procedure TConnector.SendChatMessage (astr: string; aColor: byte);
var
   ComData : TWordComData;
   psChatMessage : PTSChatMessage;
begin
   psChatMessage := @ComData.Data;
   with psChatMessage^ do begin
      rmsg := SM_CHATMESSAGE;
      case acolor of
         SAY_COLOR_NORMAL : begin rFColor := WinRGB (22,22,22); rBColor := WinRGB (0, 0 ,0); end;
         SAY_COLOR_SHOUT  : begin rFColor := WinRGB (22,22,22); rBColor := WinRGB (0, 0 ,24); end;
         SAY_COLOR_SYSTEM : begin rFColor := WinRGB (22,22, 0); rBColor := WinRGB (0, 0 ,0); end;
         SAY_COLOR_NOTICE : begin rFColor := WinRGB (255 div 8, 255 div 8, 255 div 8); rBColor := WinRGB (133 div 8, 133 div 8, 133 div 8); end;

         SAY_COLOR_GRADE0 : begin rFColor := WinRGB (18, 16, 14); rBColor := WinRGB (2,4,5); end;
         SAY_COLOR_GRADE1 : begin rFColor := WinRGB (26, 23, 21); rBColor := WinRGB (2,4,5); end;
         SAY_COLOR_GRADE2 : begin rFColor := WinRGB (31, 29, 27); rBColor := WinRGB (2,4,5); end;
         SAY_COLOR_GRADE3 : begin rFColor := WinRGB (22, 18,  8); rBColor := WinRGB (1,4,11); end;
         SAY_COLOR_GRADE4 : begin rFColor := WinRGB (23, 13,  4); rBColor := WinRGB (1,4,11); end;
         SAY_COLOR_GRADE5 : begin rFColor := WinRGB (31, 29, 21); rBColor := WinRGB (1,4,11); end;

⌨️ 快捷键说明

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