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

📄 usrengn.~pas

📁 继续更新AFT源代码 现在解决了无法登陆游戏的问题 用0504的dbserver就可以登陆了 去掉了绿字广告 降低内存占用HOO 去掉了大量的验证问题
💻 ~PAS
📖 第 1 页 / 共 5 页
字号:


        if not canwalk then begin   // Envir.CanWalk(PlayObject.m_nCurrX,PlayObject.m_nCurrY,True)
       //   MainOutMessage(format(sChangeServerFail2,[nServerIndex,PlayObject.m_nServerIndex,PlayObject.m_sMapName]));
          {  MainOutMessage('chg-server-fail-2 [' +
                           IntToStr(nServerIndex) +
                           '] -> [' +
                           IntToStr(PlayObject.m_nServerIndex) +
                           '] [' +
                           PlayObject.m_sMapName +
                           ']');}
          PlayObject.m_sMapName:=g_Config.sHomeMap;
          Envir:=g_MapManager.FindMap(g_Config.sHomeMap);
          PlayObject.m_nCurrX:=g_Config.nHomeX;
          PlayObject.m_nCurrY:=g_Config.nHomeY;
        end;

        PlayObject.m_PEnvir:=Envir;
        if PlayObject.m_PEnvir = nil then begin
          MainOutMessage(sErrorEnvirIsNil);
          goto ReGetMap;
        end else begin
          PlayObject.m_boReadyRun:=False;
        end;
      end else begin //004B0561
        GetHumData(PlayObject,UserOpenInfo.HumanRcd);
        PlayObject.m_sMapName:=SwitchDataInfo.sMap;
        PlayObject.m_nCurrX:=SwitchDataInfo.wX;
        PlayObject.m_nCurrY:=SwitchDataInfo.wY;
        PlayObject.m_Abil:=SwitchDataInfo.Abil;
        PlayObject.m_WAbil:=SwitchDataInfo.Abil;
        LoadSwitchData(SwitchDataInfo,PlayObject);
        DelSwitchData(SwitchDataInfo);
        Envir:=g_MapManager.GetMapInfo(nServerIndex,PlayObject.m_sMapName);
        if Envir <> nil then begin
          MainOutMessage(format(sChangeServerFail3,[nServerIndex,PlayObject.m_nServerIndex,PlayObject.m_sMapName]));
            {MainOutMessage('chg-server-fail-3 [' +
                           IntToStr(nServerIndex) +
                           '] -> [' +
                           IntToStr(PlayObject.m_nServerIndex) +
                           '] [' +
                           PlayObject.m_sMapName +
                           ']');}
          PlayObject.m_sMapName:=g_Config.sHomeMap;
          Envir:=g_MapManager.FindMap(g_Config.sHomeMap);
          PlayObject.m_nCurrX:=g_Config.nHomeX;
          PlayObject.m_nCurrY:=g_Config.nHomeY;
        end else begin
          if not Envir.CanWalk(PlayObject.m_nCurrX,PlayObject.m_nCurrY,True) then begin
            MainOutMessage(format(sChangeServerFail4,[nServerIndex,PlayObject.m_nServerIndex,PlayObject.m_sMapName]));
            {MainOutMessage('chg-server-fail-4 [' +
                           IntToStr(nServerIndex) +
                           '] -> [' +
                           IntToStr(PlayObject.m_nServerIndex) +
                           '] [' +
                           PlayObject.m_sMapName +
                           ']');}
            PlayObject.m_sMapName:=g_Config.sHomeMap;
            Envir:=g_MapManager.FindMap(g_Config.sHomeMap);
            PlayObject.m_nCurrX:=g_Config.nHomeX;
            PlayObject.m_nCurrY:=g_Config.nHomeY;
          end;
          PlayObject.AbilCopyToWAbil();
          PlayObject.m_PEnvir:=Envir;
          if PlayObject.m_PEnvir = nil then begin
            MainOutMessage(sErrorEnvirIsNil);
            goto ReGetMap;
          end else begin
            PlayObject.m_boReadyRun:=False;
            PlayObject.m_boLoginNoticeOK:=True;
            PlayObject.bo6AB:=True;
          end;
        end;
      end;//004B085C
      PlayObject.m_sUserID:=UserOpenInfo.LoadUser.sAccount;
      PlayObject.m_sIPaddr:=UserOpenInfo.LoadUser.sIPaddr;
      PlayObject.m_sIPLocal:=GetIPLocal(PlayObject.m_sIPaddr);
      PlayObject.m_nSocket:=UserOpenInfo.LoadUser.nSocket;
      PlayObject.m_nGSocketIdx:=UserOpenInfo.LoadUser.nGSocketIdx;
      PlayObject.m_nGateIdx:=UserOpenInfo.LoadUser.nGateIdx;
      PlayObject.m_nSessionID:=UserOpenInfo.LoadUser.nSessionID;
      PlayObject.m_nPayMent:=UserOpenInfo.LoadUser.nPayMent;
      PlayObject.m_nPayMode:=UserOpenInfo.LoadUser.nPayMode;
      PlayObject.m_dwLoadTick:=UserOpenInfo.LoadUser.dwNewUserTick;
//      PlayObject.m_nSoftVersionDate:=UserOpenInfo.HumInfo.nSoftVersionDate;
      PlayObject.m_nSoftVersionDateEx:=GetExVersionNO(UserOpenInfo.LoadUser.nSoftVersionDate,PlayObject.m_nSoftVersionDate);
      Result:=PlayObject;
    except
      MainOutMessage(sExceptionMsg);
    end;
  end;
var
  dwUsrRotTime     :LongWord;
  dwCheckTime      :LongWord;  //0x10
  dwCurTick        :LongWord;
  nCheck30         :Integer; //0x30
  boCheckTimeLimit :Boolean; //0x31
  nIdx             :Integer;
  PlayObject,hum       :TPlayObject;
  I                :Integer;
  UserOpenInfo     :pTUserOpenInfo;
  GoldChangeInfo   :pTGoldChangeInfo;
  LineNoticeMsg    :String;
 // nx,ny:integer;

ResourceString
  sExceptionMsg1 = '[Exception] TUserEngine::ProcessHumans -> Ready, Save, Load... Code:=%d';
  sExceptionMsg2 = '[Exception] TUserEngine::ProcessHumans ClosePlayer.Delete - Free';
  sExceptionMsg3 = '[Exception] TUserEngine::ProcessHumans ClosePlayer.Delete';
  sExceptionMsg4 = '[Exception] TUserEngine::ProcessHumans RunNotice';
  sExceptionMsg5 = '[Exception] TUserEngine::ProcessHumans Human.Operate Code: %d';
  sExceptionMsg6 = '[Exception] TUserEngine::ProcessHumans Human.Finalize Code: %d';
  sExceptionMsg7 = '[Exception] TUserEngine::ProcessHumans RunSocket.CloseUser Code: %d';
  sExceptionMsg8 = '[Exception] TUserEngine::ProcessHumans  Code: %d';
begin
  nCheck30:=0;
  dwCheckTime:=GetTickCount();
  if (GetTickCount - m_dwProcessLoadPlayTick) > 200 then begin
    m_dwProcessLoadPlayTick:=GetTickCount();
    try
      EnterCriticalSection(m_LoadPlaySection);
      try

        for i:=0 to m_LoadPlayList.Count -1 do begin
          if not FrontEngine.IsFull and not IsLogined(m_LoadPlayList.Strings[i]) then begin
            UserOpenInfo:=pTUserOpenInfo(m_LoadPlayList.Objects[i]);

            PlayObject:=MakeNewHuman(UserOpenInfo);

            if PlayObject <> nil then begin
              //PlayObject.m_boClientFlag:=UserOpenInfo.LoadUser.boClinetFlag; //将客户端标志传到人物数据中
              m_PlayObjectList.AddObject(m_LoadPlayList.Strings[i],PlayObject);
              SendServerGroupMsg(SS_201,nServerIndex,PlayObject.m_sCharName);
              m_NewHumanList.Add(PlayObject);
            end;

          end else begin//004B0BF9
            KickOnlineUser(m_LoadPlayList.Strings[i]);
            UserOpenInfo:=pTUserOpenInfo(m_LoadPlayList.Objects[i]);
            m_ListOfGateIdx.Add(Pointer(UserOpenInfo.LoadUser.nGateIdx)); //004B0C39
            m_ListOfSocket.Add(Pointer(UserOpenInfo.LoadUser.nSocket));
          end;
          Dispose(pTUserOpenInfo(m_LoadPlayList.Objects[I]));
        end;//004B0C96
        m_LoadPlayList.Clear;
        for I:=0 to m_ChangeHumanDBGoldList.Count -1 do begin
          GoldChangeInfo:=m_ChangeHumanDBGoldList.Items[I];
          PlayObject:=GeTPlayObject(GoldChangeInfo.sGameMasterName);
          if PlayObject <> nil then begin
            PlayObject.GoldChange(GoldChangeInfo.sGetGoldUser,GoldChangeInfo.nGold);
          end;
          Dispose(GoldChangeInfo);
        end;
        m_ChangeHumanDBGoldList.Clear;
      finally
        LeaveCriticalSection(m_LoadPlaySection);
      end;

      //004B0D4A
      for I:=0 to m_NewHumanList.Count -1 do begin
         PlayObject:=TPlayObject(m_NewHumanList.Items[I]);

        RunSocket.SetGateUserList(PlayObject.m_nGateIdx,PlayObject.m_nSocket,PlayObject);

      end;
      m_NewHumanList.Clear;


      for i:=0 to m_ListOfGateIdx.Count -1 do begin

        RunSocket.CloseUser(Integer(m_ListOfGateIdx.Items[i]),Integer(m_ListOfSocket.Items[i]));//GateIdx,nSocket
      //  MainOutMessage('xjs:close3 then RunSocket.CloseUser');
      end;
      m_ListOfGateIdx.Clear;
      m_ListOfSocket.Clear;
    except
      on e: Exception do begin
        MainOutMessage(format(sExceptionMsg1,[0]));
        MainOutMessage(E.Message); raise;
      end;
      
    end;
  end;//004B0E1E


  try
    for I := 0 to m_PlayObjectFreeList.Count - 1 do begin
      PlayObject:=TPlayObject(m_PlayObjectFreeList.Items[i]);
      if (GetTickCount - PlayObject.m_dwGhostTick) > g_Config.dwHumanFreeDelayTime {5 * 60 * 1000} then begin
        try
          TPlayObject(m_PlayObjectFreeList.Items[i]).Free;
        except
          MainOutMessage(sExceptionMsg2);
        end;

        m_PlayObjectFreeList.Delete(i);
        break;
      end else begin
        if PlayObject.m_boSwitchData and (PlayObject.m_boRcdSaved) then begin
          if SendSwitchData(PlayObject,PlayObject.m_nServerIndex) or (PlayObject.m_nWriteChgDataErrCount > 20) then begin
            PlayObject.m_boSwitchData:=False;
            PlayObject.m_boSwitchDataSended:=True;
            PlayObject.m_dwChgDataWritedTick:=GetTickCount();
          end else Inc(PlayObject.m_nWriteChgDataErrCount);
        end;
        if PlayObject.m_boSwitchDataSended and ((GetTickCount - PlayObject.m_dwChgDataWritedTick) > 100) then begin
          PlayObject.m_boSwitchDataSended:=False;
          SendChangeServer(PlayObject,PlayObject.m_nServerIndex);
        end;
      end;
    end;
  except
    MainOutMessage(sExceptionMsg3);
  end;//004B0F91


  boCheckTimeLimit:=False;//004B0F91
  try
    dwCurTick:=GetTickCount();
    nIdx:=m_nProcHumIDx;
     while True do begin
       if m_PlayObjectList.Count <= nIdx then break;
    
       PlayObject:=TPlayObject(m_PlayObjectList.Objects[nIdx]);
       if Integer(dwCurTick - PlayObject.m_dwRunTick) > PlayObject.m_nRunTime then begin
         PlayObject.m_dwRunTick:=dwCurTick;

         if (PlayObject.m_boDeath) or (PlayObject.m_boGhost) then begin
           if not PlayObject.m_boDeathRcdSaved then begin
           SaveHumanRcd(PlayObject);
           PlayObject.m_boDeathRcdSaved:=true;
           end;
         end;

         if not PlayObject.m_boGhost then begin
           if not PlayObject.m_boLoginNoticeOK then begin
{$IF CATEXCEPTION = TRYEXCEPTION}
             try
{$IFEND}     //  PlayObject.SendLogon ;

               PlayObject.RunNotice();
{$IF CATEXCEPTION = TRYEXCEPTION}
             except
               MainOutMessage(sExceptionMsg4);
             end;
{$IFEND}
           end else begin//004B1058
             try
               if not PlayObject.m_boReadyRun then begin
                 PlayObject.m_boReadyRun:=True;//004B1075
                 if  PlayObject.sYsnameMaster<>'' then begin  //说明是元神
                   hum:=nil;
                //  hum:=UserEngine.GetPlayObjectEx(PlayObject.sYsnameMaster);
                   hum:=PlayObject.ysmasterplayer;
                 if hum<>nil then begin
                {  PlayObject.m_PEnvir:= hum.m_PEnvir ;
                  hum.GetFrontPosition(nX,nY);
                  PlayObject.m_nCurrX:=nx;
                  PlayObject.m_nCurry:=ny;   
                  PlayObject.m_bMaxBagitem:=40;
                 
                   PlayObject.m_PEnvir.DeleteFromMap(mon.m_nCurrX,mon.m_nCurrY,OS_MOVINGOBJECT,mon);

                   mon.m_nCurrX:=nx;
                   mon.m_nCurrY:=ny;
                   mon.m_PEnvir:= playObject.m_PEnvir;
                   mon.SetTargetCreat(nil);

                   p28:=playObject.m_PEnvir.AddToMap(mon.m_nCurrX,mon.m_nCurrY,OS_MOVINGOBJECT,mon);   //  ,500
                   if p28<>nil then mon.SendRefMsg(RM_TURN,GetNextDirection(mon.m_nCurrX,mon.m_nCurrY,playObject.m_nCurrX,playObject.m_nCurrY) ,mon.m_nCurrX,mon.m_nCurrY,0,mon.GetShowName);
                 }

                  PlayObject.SendDefMessage(1809,0,0,0,0,'');
                  PlayObject.SendDefMessage(38292,integer(PlayObject),0,40,0,''); //背包的大小


                  PlayObject.SendDefMessage(38294,0,0,0,0,'');   //任务列表
                  PlayObject.SendDefMessage(21292,
                             Integer(PlayObject),
                             8,//makeword(8,PlayObject.m_nfenghaolevel),
                             PlayObject.GetYSfenghao(PlayObject.M_YSfenghao), // 0 1 2 3 4
                             0,
                             ''); // PlayObject.m_sfenghao
                  
                 // PlayObject.SendDefMessage(38294,PlayObject.m_btGender,PlayObject.m_btGender,PlayObject.m_btGender,PlayObject.m_btGender,'');

                    PlayObject.nyuanqi:=0;
                    PlayObject.SendDefMessage(38417,0,0,100,0,'');
                    PlayObject.m_boStartshow :=true;
                   inc(hum.m_nYsCallcount);

                 end;  //hum<>nil
                end;    //  PlayObject.sYsnameMaster<>''

                 PlayObject.UserLogon; //BaseObject.0FFFEh;

               end else begin
                 if (GetTickCount() - PlayObject.m_dwSearchTick) > PlayObject.m_dwSearchTime then begin
                   PlayObject.m_dwSearchTick:=GetTickCount();
                   PlayObject.SearchViewRange;
                   PlayObject.GameTimeChanged;
                 end;//004B10C4
                 /////////////   广告
                if PlayObject.sYsnameMaster='' then  begin
                 if (GetTickCount-  PlayObject.m_dwShowBannerNoticeTime  >  g_Config.HideBannerNoticeTime) and (not PlayObject.m_boshowBanner)  then begin
                    PlayObject.m_dwShowBannerNoticeTime:= GetTickCount();
                //    PlayObject.m_dwHideBannerNoticeTime:= GetTickCount();
                    if BannerNotice.Count > PlayObject.m_nShowBannerNoticeIdx then begin
                     LineNoticeMsg:=g_ManageNPC.GetLineVariableText(PlayObject,BannerNotice.Strings[PlayObject.m_nShowBannerNoticeIdx]);

                     PlayObject.SendDefMessage(100,0,38656,10,768,LineNoticeMsg); //广告  显示
                     PlayObject.m_boshowBanner:=true;
                    end;
                   Inc(PlayObject.m_nShowBannerNoticeIdx);
                   if (BannerNotice.Count <= PlayObject.m_nShowBannerNoticeIdx) then
                    PlayObject.m_nShowBannerNoticeIdx:=0;

                 end;

                 if (GetTickCount-  PlayObject.m_dwShowBannerNoticeTime  >  g_Config.ShowBannerNoticeTime) and (PlayObject.m_boshowBanner) then begin
                 //  PlayObject.m_dwHideBannerNoticeTime:= GetTickCount();
                   PlayObject.m_dwShowBannerNoticeTime:= GetTickCount();
                   PlayObject.SendDefMessage(100,0,38656,10,768,''); //广告 隐藏
                   PlayObject.m_boshowBanner:=false;
                 end;
                end;  //  if PlayObject.sYsnameMaster='' then  begin


                 ///////////////
                 if (GetTickCount() - PlayObject.m_dwShowLineNoticeTick) > g_Config.dwShowLineNoticeTime then begin
                   PlayObject.m_dwShowLineNoticeTick:=GetTickCount();
                   if LineNoticeList.Count > PlayObject.m_nShowLineNoticeIdx then begin

                     LineNoticeMsg:=g_ManageNPC.GetLineVariableText(PlayObject,LineNoticeList.Strings[PlayObject.m_nShowLineNoticeIdx]);

                     //PlayObject.SysMsg(g_Config.sLineNoticePreFix + ' '+ LineNoticeList.Strings[PlayObject.m_nShowLineNoticeIdx],g_nLineNoticeColor);

⌨️ 快捷键说明

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