依星源码资源网,依星资源网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 18|回复: 0

二大爷修复抖动_传奇引擎(delphi源码)

[复制链接] 主动推送

7874

主题

7926

帖子

8893

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8893
发表于 2024-6-19 15:13:30 | 显示全部楼层 |阅读模式
二大爷修复抖动_传奇引擎(delphi源码)
  1. procedure TPlayScene.Run();
  2. var
  3.   I, k: Integer;
  4.   movetick: Boolean;
  5.   evn: TEvent;
  6.   Actor: TActor;
  7.   meff: TMagicEff;

  8.   dwCheckTime, dwTestCheckTime: LongWord;
  9.   nIdx: Integer;
  10.   boCheckTimeLimit: Boolean;
  11.   nCheckCode: Integer;
  12.   dwStepMoveTime: LongWord;

  13.   dwTickTime: LongWord;
  14. begin
  15.   if (g_MySelf = nil) then begin
  16.     Exit;
  17.   end;

  18.   g_boDoFastFadeOut := False;

  19.   movetick := False;

  20.   if g_ServerConfig.boChgSpeed then begin
  21.     //dwStepMoveTime := g_Config.dwStepMoveTime;
  22.     dwStepMoveTime := _MAX(100 - Trunc((g_MySelf.m_Abil.MoveSpeed * 100) / 100), 5);
  23.   end else begin
  24.     dwStepMoveTime := 100;
  25.   end;

  26.   if GetTickCount - m_dwMoveTime >= dwStepMoveTime then begin
  27.     m_dwMoveTime := GetTickCount;
  28.     movetick := True;
  29.     Inc(m_nMoveStepCount);
  30.     if m_nMoveStepCount > 1 then m_nMoveStepCount := 0;
  31.   end;

  32.   if GetTickCount - m_dwAniTime >= 50 then begin
  33.     m_dwAniTime := GetTickCount;
  34.     Inc(m_nAniCount);
  35.     if m_nAniCount > 100000 then m_nAniCount := 0;
  36.   end;


  37.   for I := 0 to m_ActorList.Count - 1 do
  38.     actor := m_ActorList[i];

  39.   try
  40.    // nIdx := m_nProcHumIDx;
  41.     nIdx := 0;
  42.     //dwCheckTime := GetTickCount();
  43.     //boCheckTimeLimit := False;
  44.     while True do begin
  45.       nCheckCode := 0;
  46.       if nIdx >= m_ActorList.Count then Break;
  47.       Actor := TActor(m_ActorList.Items[nIdx]);
  48.       if not Actor.m_boDelActor then begin
  49.         nCheckCode := 1;
  50.       //dwTestCheckTime := GetTickCount();
  51.       //boCanMove := Actor.CanMove;

  52.         if movetick then Actor.m_boLockEndFrame := False;

  53.         if not Actor.m_boLockEndFrame then begin
  54.           nCheckCode := 4;
  55.           Actor.ProcMsg;
  56.           nCheckCode := 5;
  57.           if movetick then begin
  58.             nCheckCode := 6;
  59.             if Actor.Move(Actor.m_nMoveStepCount) then begin
  60.               Inc(nIdx);
  61.               nCheckCode := 7;
  62.               Continue;
  63.             end;
  64.           end;
  65.           nCheckCode := 8;
  66.           Actor.Run;
  67.           nCheckCode := 9;
  68.           if Actor <> g_MySelf then Actor.ProcHurryMsg;
  69.           nCheckCode := 10;
  70.         end;

  71.         nCheckCode := 11;
  72.         if Actor = g_MySelf then Actor.ProcHurryMsg;
  73.         nCheckCode := 12;
  74.         if Actor.m_nWaitForRecogId <> 0 then begin
  75.           nCheckCode := 13;
  76.           if Actor.IsIdle then begin
  77.             nCheckCode := 14;
  78.             DelChangeFace(Actor.m_nWaitForRecogId);
  79.             nCheckCode := 15;
  80.             NewActor(Actor.m_nWaitForRecogId, Actor.m_nCurrX, Actor.m_nCurrY, Actor.m_btDir, Actor.m_nWaitForFeature, Actor.m_nWaitForStatus);
  81.             nCheckCode := 16;
  82.             Actor.m_nWaitForRecogId := 0;
  83.             Actor.m_boDelActor := True;
  84.           end;
  85.         end;
  86.       end;
  87.       nCheckCode := 17;
  88.       if Actor.m_boDelActor then begin
  89.         nCheckCode := 18;
  90.         m_ActorList.Delete(nIdx);
  91.         nCheckCode := 19;
  92.         UpDataFreeActorList(Actor);
  93.         nCheckCode := 20;
  94.         if g_TargetCret = Actor then g_TargetCret := nil;
  95.         if g_FocusCret = Actor then g_FocusCret := nil;
  96.         if g_MagicTarget = Actor then g_MagicTarget := nil;
  97.         if g_MyHero = Actor then g_MyHero := nil;
  98.         if g_SerieTarget = Actor then g_SerieTarget := nil;
  99.         nCheckCode := 21;
  100.       end else Inc(nIdx);
  101.     end;
  102.   except
  103.     on E: Exception do begin
  104.       DebugOutStr('101 Code:' + IntToStr(nCheckCode));
  105.       DebugOutStr('101 ' + E.Message);
  106.       if nCheckCode = 4 then
  107.         DebugOutStr('101 UserName ' + Actor.m_sUserName);
  108.     end;
  109.   end;

  110.   nCheckCode := 22;
  111.   try
  112.     nIdx := 0;
  113.     while True do begin
  114.       nCheckCode := 23;
  115.       if nIdx >= m_GroundEffectList.Count then Break;
  116.       nCheckCode := 24;
  117.       meff := m_GroundEffectList[nIdx];
  118.       nCheckCode := 25;
  119.       if meff.m_boActive then begin
  120.         nCheckCode := 26;
  121.         if not meff.Run then begin
  122.           nCheckCode := 27;
  123.           m_GroundEffectList.Delete(nIdx);
  124.           nCheckCode := 28;
  125.           meff.Free;
  126.           nCheckCode := 29;
  127.           Continue;
  128.         end;
  129.       end;
  130.       Inc(nIdx);
  131.     end;
  132.     nCheckCode := 30;
  133.     nIdx := 0;
  134.     while True do begin
  135.       nCheckCode := 31;
  136.       if nIdx >= m_EffectList.Count then Break;
  137.       nCheckCode := 32;
  138.       meff := m_EffectList[nIdx];
  139.       nCheckCode := 33;
  140.       if meff.m_boActive then begin
  141.         nCheckCode := 34;
  142.         if not meff.Run then begin
  143.           nCheckCode := 35;
  144.           meff.Free;
  145.           nCheckCode := 36;
  146.           m_EffectList.Delete(nIdx);
  147.           nCheckCode := 37;
  148.           Continue;
  149.         end;
  150.       end;
  151.       Inc(nIdx);
  152.     end;
  153.     nCheckCode := 38;
  154.     nIdx := 0;
  155.     while True do begin
  156.       nCheckCode := 39;
  157.       if nIdx >= m_FlyList.Count then Break;
  158.       nCheckCode := 40;
  159.       meff := m_FlyList[nIdx];
  160.       nCheckCode := 41;
  161.       if meff.m_boActive then begin
  162.         nCheckCode := 42;
  163.         if not meff.Run then begin
  164.           nCheckCode := 43;
  165.           meff.Free;
  166.           nCheckCode := 44;
  167.           m_FlyList.Delete(nIdx);
  168.           nCheckCode := 45;
  169.           Continue;
  170.         end;
  171.       end;
  172.       Inc(nIdx);
  173.     end;
  174.     nCheckCode := 46;
  175.     EventMan.Execute;
  176.     nCheckCode := 47;

  177.   except
  178.     on E: Exception do begin
  179.       DebugOutStr('102 Code:' + IntToStr(nCheckCode));
  180.       DebugOutStr('102 ' + E.Message);
  181.     end;
  182.   end;

  183.   try
  184. //清除超过显示范围的物品数据

  185.     ClearDropItem();

  186. //清除超过显示范围的魔法数据
  187.     for k := EventMan.EventList.Count - 1 downto 0 do begin
  188.       evn := TEvent(EventMan.EventList[k]);
  189.       if ((abs(evn.m_nX - g_MySelf.m_nCurrX) > 30) and (abs(evn.m_nY - g_MySelf.m_nCurrY) > 30)) or (not evn.m_boVisible) then begin
  190.         EventMan.EventList.Delete(k);
  191.         evn.Free;
  192.         //Break;
  193.       end;
  194.     end;

  195.     {for k := 0 to EventMan.EventList.Count - 1 do begin //播放烟花声音
  196.       evn := TEvent(EventMan.EventList[k]);
  197.       if (abs(evn.m_nX - g_MySelf.m_nCurrX) <= 15) and (abs(evn.m_nY - g_MySelf.m_nCurrY) <= 15) then begin
  198.         if evn.m_nEventType in [ET_FIREFLOWER_1..ET_FIREFLOWER_7] then begin
  199.           if TFlowerEvent(evn).m_nExplosionSound > 0 then begin
  200.             PlaySound(TFlowerEvent(evn).m_nExplosionSound);
  201.             TFlowerEvent(evn).m_nExplosionSound := -2;
  202.           end;
  203.         end;
  204.       end;
  205.     end;}
  206.   except
  207.     on E: Exception do begin
  208.       DebugOutStr('103');
  209.       DebugOutStr('103 ' + E.Message);
  210.     end;
  211.   end;

  212. end;
复制代码


扫码关注微信公众号,及时获取最新资源信息!下载附件优惠VIP会员5折;永久VIP免费
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,请勿任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4、论坛的所有内容都不保证其准确性,完整性,有效性,由于源码具有复制性,一经售出,概不退换。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请来信【站长信箱312337667@qq.com】告之,本站将立即删除。
郑重声明:
本站所有资源仅供用户本地电脑学习源代码的内含设计思想和原理,禁止任何其他用途!
本站所有资源、教程来自互联网转载,仅供学习交流,不得商业运营资源,不确保资源完整性,图片和资源仅供参考,不提供任何技术服务。
本站资源仅供本地编辑研究学习参考,禁止未经资源商正版授权参与任何商业行为,违法行为!如需商业请购买各资源商正版授权
本站仅收集资源,提供用户自学研究使用,本站不存在私自接受协助用户架设游戏或资源,非法运营资源行为。
 
在线客服
点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
售前咨询热线
312337667

微信扫一扫,私享最新原创实用干货

QQ|免责声明|依星源码资源网 ( 鲁ICP备2021043233号-3 )|网站地图

GMT+8, 2024-7-2 13:03

Powered by Net188.com X3.4

邮箱:312337667@qq.com 客服QQ:312337667(工作时间:9:00~21:00)

快速回复 返回顶部 返回列表