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

📄 actor.pas

📁 Mir2 Actor.pas if (IsFace) and (FaceIndex > -1) then begin d := aFrmMain.WFaceimg.Images
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    DR_UPRIGHT:
      begin
        if Max >= 6 then
          v := 1
        else
          v := 0;
        ss := Round((Max - cur + v) / Max) * step;
        rx := XX - ss;
        ry := YY + ss;
        if ss = step then
        begin
          ShiftX := Round(unx / Max * cur);
          ShiftY := -Round(uny / Max * cur);
        end
        else
        begin
          ShiftX := -Round(unx / Max * (Max - cur));
          ShiftY := Round(uny / Max * (Max - cur));
        end;
      end;
    DR_RIGHT:
      begin
        ss := Round((Max - cur) / Max) * step;
        rx := XX - ss;
        if ss = step then
          ShiftX := Round(unx / Max * cur)
        else
          ShiftX := -Round(unx / Max * (Max - cur));
        ShiftY := 0;
      end;
    DR_DOWNRIGHT:
      begin
        if Max >= 6 then
          v := 1
        else
          v := 0;
        ss := Round((Max - cur - v) / Max) * step;
        rx := XX - ss;
        ry := YY - ss;
        if ss = step then
        begin
          ShiftX := Round(unx / Max * cur);
          ShiftY := Round(uny / Max * cur);
        end
        else
        begin
          ShiftX := -Round(unx / Max * (Max - cur));
          ShiftY := -Round(uny / Max * (Max - cur));
        end;
      end;
    DR_DOWN:
      begin
        if Max >= 6 then
          v := 1
        else
          v := 0;
        ss := Round((Max - cur - v) / Max) * step;
        ShiftX := 0;
        ry := YY - ss;
        if ss = step then
          ShiftY := Round(uny / Max * cur)
        else
          ShiftY := -Round(uny / Max * (Max - cur));
      end;
    DR_DOWNLEFT:
      begin
        if Max >= 6 then
          v := 0
        else
          v := 0;
        ss := Round((Max - cur - v) / Max) * step;
        rx := XX + ss;
        ry := YY - ss;
        if ss = step then
        begin
          ShiftX := -Round(unx / Max * cur);
          ShiftY := Round(uny / Max * cur);
        end
        else
        begin
          ShiftX := Round(unx / Max * (Max - cur));
          ShiftY := -Round(uny / Max * (Max - cur));
        end;
      end;
    DR_LEFT:
      begin
        ss := Round((Max - cur) / Max) * step;
        rx := XX + ss;
        if ss = step then
          ShiftX := -Round(unx / Max * cur)
        else
          ShiftX := Round(unx / Max * (Max - cur));
        ShiftY := 0;
      end;
    DR_UPLEFT:
      begin
        if Max >= 6 then
          v := 1
        else
          v := 0;
        ss := Round((Max - cur + v) / Max) * step;
        rx := XX + ss;
        ry := YY + ss;
        if ss = step then
        begin
          ShiftX := -Round(unx / Max * cur);
          ShiftY := -Round(uny / Max * cur);
        end
        else
        begin
          ShiftX := Round(unx / Max * (Max - cur));
          ShiftY := Round(uny / Max * (Max - cur));
        end;
      end;
  end;
end;

procedure TActor.FeatureChanged;
var
  haircount: Integer;
begin
  case Race of
    //human
    0:
      begin
        hair := HAIRfeature(Feature); //函版等促.
        dress := DRESSfeature(Feature);
        weapon := WEAPONfeature(Feature);

        if (Dress in[18,19,24,25,26,27]) then
            BodyOffset := HUMANFRAME * (18+sex) //Sex; //巢磊0, 咯磊1
        else
            BodyOffset := HUMANFRAME * (dress); //Sex; //巢磊0, 咯磊1
        haircount := aFrmMain.WHairImg.ImageCount div HUMANFRAME div 2;
        if hair > haircount - 1 then
          hair := haircount - 1;
        hair := hair * 2;
        if hair > 1 then
          HairOffset := HUMANFRAME * (hair + sex)
        else
          HairOffset := -1;
        WeaponOffset := HUMANFRAME * weapon; //(weapon*2 + Sex);
        Horse:=LoByte(HorseState);
        Wing:=HiByte(HorseState);
      end;
    50: ; //npc
  else
    begin
      Appearance := APPRfeature(Feature);
      BodyOffset := GetOffset(Appearance);
      //BodyOffset := MONFRAME * (Appearance mod 10);
    end;
  end;
end;

function TActor.light: Integer;
begin
  Result := ChrLight;
end;

procedure TActor.LoadSurface;
var
  mimg: TWMImages;
begin
  mimg := GetMonImg(Appearance);
  if mimg <> nil then
  begin
    if (not ReverseFrame) then
      BodySurface := mimg.GetCachedImage(GetOffset(Appearance) + currentframe,
        px, py)
    else
      BodySurface := mimg.GetCachedImage(
        GetOffset(Appearance) + endframe - (currentframe - startframe),
        px, py);
  end;
end;

function TActor.CharWidth: Integer;
begin
  if BodySurface <> nil then
    Result := BodySurface.Width
  else
    Result := 48;
end;

function TActor.CharHeight: Integer;
begin
  if BodySurface <> nil then
    Result := BodySurface.Height
  else
    Result := 70;
end;

function TActor.CheckSelect(dx, dy: Integer): Boolean;
var
  c: Integer;
begin
  Result := False;
  if BodySurface <> nil then
  begin
    c := BodySurface.Pixels[dx, dy];
    if (c <> 0) and
      ((BodySurface.Pixels[dx - 1, dy] <> 0) and
      (BodySurface.Pixels[dx + 1, dy] <> 0) and
      (BodySurface.Pixels[dx, dy - 1] <> 0) and
      (BodySurface.Pixels[dx, dy + 1] <> 0)) then
      Result := True;
  end;
end;

procedure TActor.DrawEffSurface(dsurface, Source: TDirectDrawSurface; ddx, ddy:
  Integer; blend: Boolean; ceff: TColorEffect);
begin
  if (GetTickCount-AttackStateTime)>20*1000 then
     AttackState:=0;

  if State and $00800000 <> 0 then
  begin
    blend := True; //捧疙
  end;
  if not blend then
  begin
    if ceff = ceNone then
    begin
      if Source <> nil then
        dsurface.Draw(ddx, ddy, Source.ClientRect, Source, True);
    end
    else
    begin
      if Source <> nil then
      begin
        ImgMixSurface.Draw(0, 0, Source.ClientRect, Source, False);
        DrawEffect(0, 0, Source.Width, Source.Height, ImgMixSurface, ceff);
        dsurface.Draw(ddx, ddy, Source.ClientRect, ImgMixSurface, True);
      end;
    end;
  end
  else
  begin
    if ceff = ceNone then
    begin
      if Source <> nil then
        DrawBlend(dsurface, ddx, ddy, Source, 0);
    end
    else
    begin
      if Source <> nil then
      begin
        // ImgMixSurface.Erase(0);
        ImgMixSurface.Fill(0);
        ImgMixSurface.Draw(0, 0, Source.ClientRect, Source, False);
        DrawEffect(0, 0, Source.Width, Source.Height, ImgMixSurface, ceff);
        DrawBlend(dsurface, ddx, ddy, ImgMixSurface, 0);
      end;
    end;
  end;
end;

procedure TActor.DrawWeaponGlimmer(dsurface: TDirectDrawSurface; ddx, ddy:
  Integer);

begin
  //荤侩救窃..(堪拳搬) 弊贰侨 坷幅...
  (*if BoNextTimeFireHit and WarMode and GlimmingMode then begin
     if GetTickCount - GlimmerTime > 200 then begin
        GlimmerTime := GetTickCount;
        Inc (CurGlimmer);
        if CurGlimmer >= MaxGlimmer then CurGlimmer := 0;
     end;
     idx := GetEffectBase (5-1{堪拳搬馆娄烙}, 1) + Dir*10 + CurGlimmer;
     d := aFrmMain.WMagic.GetCachedImage (idx, ax, ay);
     if d <> nil then
        DrawBlend (dsurface, ddx + ax, ddy + ay, d, 1);
                         //dx + ax + ShiftX,
                         //dy + ay + ShiftY,
                         //d, 1);
  end;*)
end;

function TActor.GetDrawEffectValue: TColorEffect;
var
  ceff: TColorEffect;
begin
  ceff := ceNone;
  if (FocusCret = Self) or (MagicTarget = Self) then
  begin
    ceff := ceBright;
  end;
  if State and $80000000 <> 0 then
  begin
    ceff := ceGreen;
  end;
  if State and $40000000 <> 0 then
  begin
    ceff := ceRed;
  end;
  if State and $20000000 <> 0 then
  begin
    ceff := ceBlue;
  end;
  if State and $10000000 <> 0 then
  begin
    ceff := ceYellow;
  end;
  if State and $08000000 <> 0 then
  begin
    ceff := ceFuchsia;
  end;
  if State and $04000000 <> 0 then
  begin
    ceff := ceGrayScale;
  end;
   if AttackState and $80000000 <> 0 then
  begin
    ceff := ceblue;
  end;
  if AttackState and $40000000 <> 0 then
  begin
    ceff := ceFuchsia;
  end;
  Result := ceff;
end;
procedure TActor.DrawAddBlood(dsurface: TDirectDrawSurface;dx, dy: Integer);
var
   BooldNum,jj,BooldIndex: Integer;
   d: TDirectDrawSurface;
   p,w:integer;
 function GetIndex(var Index:Integer):Integer;
  var
    s:String;
  Begin
    s:=Inttostr(Index);
    Result:=Strtoint(S[1])+1000;
    Delete(s,1,1);
    if s<>'' then
     Index:=Strtoint(s)
    else
     Index:=-1;
  End;
begin
  if IsAddBlood then
  Begin
    if GetTickCount - AddBloodTime >  1000 then
      IsAddBlood := False;
    if GetTickCount - AddBloodStartTime > 40 then
    begin
      Inc(AddBloodFram);
      AddBloodStartTime := GetTickCount;
    end;
  End;
    //加减血显示

    if (IsAddBlood) then
    Begin
       BooldNum:=abs(AddBloodNum);
       jj:=1;
       if Self=Myself then
         p:=24
       else
         if Race<>0 then
           p:=0
         else
           P:=12;
       if p=24 then
          w:=12
       else
          w:=8;
       if AddBloodnum>0 then
         d := aFrmMain.WProgUse.Images[1011+p]
       else
         d := aFrmMain.WProgUse.Images[1010+p];

         if d <> nil then
          dsurface.Draw(SayX - d.Width div 2+AddBloodFram*(2), dy + hpy + ShiftY - 10-AddBloodFram*(2), d.ClientRect, d, True);

       while(BooldNum>=0) do
       Begin
         BooldIndex:=GetIndex(BooldNum);
         d := aFrmMain.WProgUse.Images[BooldIndex+p];
         if d <> nil then
          dsurface.Draw(SayX - d.Width div 2+AddBloodFram*(2)+jj*w, dy + hpy + ShiftY - 10-AddBloodFram*(2), d.ClientRect, d, True);
         Inc(jj);
       End;
    End;
end;
procedure TActor.DrawChr(dsurface: TDirectDrawSurface; dx, dy: Integer; blend:
  Boolean);
var
  idx, ax, ay: Integer;
  d: TDirectDrawSurface;
  ceff: TColorEffect;
  wimg: TWMImages;

begin
  if not (Dir in [0..7]) then
    Exit;


  if GetTickCount - loadsurfacetime > 60 * 1000 then
  begin
    loadsurfacetime := GetTickCount;
    LoadSurface; //bodysurface殿捞 loadsurface甫 促矫 何福瘤 臼酒 皋葛府啊 橇府登绰 巴阑 阜澜
  end;
  loadsurfacetime := GetTickCount;
  ceff := GetDrawEffec

⌨️ 快捷键说明

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