找回密码
 立即注册
虾米引擎源代码Delphi3KM2引擎源码20121218CQFIR飞尔引擎20120918源码文字广告位置4
APPLEM2引擎源代码传奇引擎delphi源代码DELPHI视频教程
GSQL_6.5.2.1源代码Delphi即时通讯Delphi源码文字广告位置11
文字广告位置12
文字广告位置13
文字广告位置14
文字广告位置15
文字广告位置16
UC845刺客引擎飞龙3delphi源码文字广告位置18
文字广告位置19
文字广告位置20
文字广告位置21文字广告位置22
文字广告位置23
文字广告位置24
文字广告位置25
文字广告位置26文字广告位置27文字广告位置28
查看: 727|回复: 0

PlayScn20170323新星

[复制链接]

798

主题

42

回帖

4781

积分

管理员

积分
4781

最佳新人活跃会员热心会员推广达人宣传达人突出贡献优秀版主荣誉管理论坛元老

QQ
发表于 2018-4-23 07:20:36 | 显示全部楼层 |阅读模式
procedure TPlayScene.Run();   
var
  I, k: Integer;
  movetick: Boolean;
  evn: TEvent;
  Actor: TActor;
  meff: TMagicEff;

  dwCheckTime, dwTestCheckTime: LongWord;
  nIdx: Integer;
  boCheckTimeLimit: Boolean;
  nCheckCode: Integer;
  dwStepMoveTime: LongWord;

  dwTickTime: LongWord;
begin
  if (g_MySelf = nil) then begin
    Exit;
  end;

  g_boDoFastFadeOut := False;

  movetick := False;

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

  if GetTickCount - m_dwMoveTime >= dwStepMoveTime then begin
      m_dwMoveTime := GetTickCount;   //移动开始时间
      movetick := TRUE;          //允许移动
    Inc(m_nMoveStepCount);
    if m_nMoveStepCount > 1 then m_nMoveStepCount := 0;
  end;

  if GetTickCount - m_dwAniTime >= 50 then begin
    m_dwAniTime := GetTickCount;
    Inc(m_nAniCount);
    if m_nAniCount > 100000 then m_nAniCount := 0;
  end;
   //处理角色一些相关东西

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

  try
   // nIdx := m_nProcHumIDx;
    nIdx := 0;
    //dwCheckTime := GetTickCount();
    //boCheckTimeLimit := False;
    while True do begin
      nCheckCode := 0;
      if nIdx >= m_ActorList.Count then Break;
      Actor := TActor(m_ActorList.Items[nIdx]);
      if not Actor.m_boDelActor then begin
        nCheckCode := 1;
      //dwTestCheckTime := GetTickCount();
      //boCanMove := Actor.CanMove;

      if movetick then actor.m_boLockEndFrame := FALSE; //可以移动

      if not actor.m_boLockEndFrame then begin   //没有锁定动作
          nCheckCode := 4;
          Actor.ProcMsg;//处理角色的消息
          nCheckCode := 5;
          if movetick then begin
            nCheckCode := 6;
            if Actor.Move(Actor.m_nMoveStepCount) then begin//角色移动
              Inc(nIdx);
              nCheckCode := 7;
              Continue;
            end;
          end;
          nCheckCode := 8;
          Actor.Run;
          nCheckCode := 9;
          if Actor <> g_MySelf then Actor.ProcHurryMsg;
          nCheckCode := 10;
        end;

        nCheckCode := 11;
        if Actor = g_MySelf then Actor.ProcHurryMsg;
        nCheckCode := 12;
        if Actor.m_nWaitForRecogId <> 0 then begin
          nCheckCode := 13;
          if Actor.IsIdle then begin
            nCheckCode := 14;
            DelChangeFace(Actor.m_nWaitForRecogId);
            nCheckCode := 15;
            NewActor(Actor.m_nWaitForRecogId, Actor.m_nCurrX, Actor.m_nCurrY, Actor.m_btDir, Actor.m_nWaitForFeature, Actor.m_nWaitForStatus);
            nCheckCode := 16;
            Actor.m_nWaitForRecogId := 0;
            Actor.m_boDelActor := True;
          end;
        end;
      end;
      nCheckCode := 17;
      if Actor.m_boDelActor then begin
        nCheckCode := 18;
        m_ActorList.Delete(nIdx);
        nCheckCode := 19;
        UpDataFreeActorList(Actor);
        nCheckCode := 20;
        if g_TargetCret = Actor then g_TargetCret := nil;
        if g_FocusCret = Actor then g_FocusCret := nil;
        if g_MagicTarget = Actor then g_MagicTarget := nil;
        if g_MyHero = Actor then g_MyHero := nil;
        if g_SerieTarget = Actor then g_SerieTarget := nil;
        nCheckCode := 21;
      end else Inc(nIdx);
    end;
  except
    on E: Exception do begin
      DebugOutStr('101 Code:' + IntToStr(nCheckCode));
      DebugOutStr('101 ' + E.Message);
      if nCheckCode = 4 then
        DebugOutStr('101 UserName ' + Actor.m_sUserName);
    end;
  end;
   //地面物体运动的计算
  nCheckCode := 22;
  try
    nIdx := 0;
    while True do begin
      nCheckCode := 23;
      if nIdx >= m_GroundEffectList.Count then Break;
      nCheckCode := 24;
      meff := m_GroundEffectList[nIdx];
      nCheckCode := 25;
      if meff.m_boActive then begin
        nCheckCode := 26;
        if not meff.Run then begin
          nCheckCode := 27;
          m_GroundEffectList.Delete(nIdx);
          nCheckCode := 28;
          meff.Free;
          nCheckCode := 29;
          Continue;
        end;
      end;
      Inc(nIdx);
    end;
    nCheckCode := 30;//特效物体运动属性的计算
    nIdx := 0;
    while True do begin
      nCheckCode := 31;
      if nIdx >= m_EffectList.Count then Break;
      nCheckCode := 32;
      meff := m_EffectList[nIdx];
      nCheckCode := 33;
      if meff.m_boActive then begin
        nCheckCode := 34;
        if not meff.Run then begin
          nCheckCode := 35;
          meff.Free;
          nCheckCode := 36;
          m_EffectList.Delete(nIdx);
          nCheckCode := 37;
          Continue;
        end;
      end;
      Inc(nIdx);
    end;
    nCheckCode := 38;//飞行魔法释放
    nIdx := 0;
    while True do begin
      nCheckCode := 39;
      if nIdx >= m_FlyList.Count then Break;
      nCheckCode := 40;
      meff := m_FlyList[nIdx];
      nCheckCode := 41;
      if meff.m_boActive then begin
        nCheckCode := 42;
        if not meff.Run then begin
          nCheckCode := 43;
          meff.Free;
          nCheckCode := 44;
          m_FlyList.Delete(nIdx);
          nCheckCode := 45;
          Continue;
        end;
      end;
      Inc(nIdx);
    end;
    nCheckCode := 46;
    EventMan.Execute;
    nCheckCode := 47;

  except
    on E: Exception do begin
      DebugOutStr('102 Code:' + IntToStr(nCheckCode));
      DebugOutStr('102 ' + E.Message);
    end;
  end;

  try
//清除超过显示范围的物品数据
   //跌落物品消隐
    ClearDropItem();

   //释放事件的地方
    for k := EventMan.EventList.Count - 1 downto 0 do begin
      evn := TEvent(EventMan.EventList[k]);
      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
        EventMan.EventList.Delete(k);
        evn.Free;
        //Break;
      end;
    end;

    {for k := 0 to EventMan.EventList.Count - 1 do begin //播放烟花声音
      evn := TEvent(EventMan.EventList[k]);
      if (abs(evn.m_nX - g_MySelf.m_nCurrX) <= 15) and (abs(evn.m_nY - g_MySelf.m_nCurrY) <= 15) then begin
        if evn.m_nEventType in [ET_FIREFLOWER_1..ET_FIREFLOWER_7] then begin
          if TFlowerEvent(evn).m_nExplosionSound > 0 then begin
            PlaySound(TFlowerEvent(evn).m_nExplosionSound);
            TFlowerEvent(evn).m_nExplosionSound := -2;
          end;
        end;
      end;
    end;}
  except
    on E: Exception do begin
      DebugOutStr('103');
      DebugOutStr('103 ' + E.Message);
    end;
  end;

end;

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|Delphi源代码

GMT+8, 2025-4-5 01:37 , Processed in 0.119137 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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