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

📄 imgman.pas

📁 传奇Map地图编辑源码 一个很不错的源码哦
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit ImgMan;

interface

uses
  Windows, Classes, SysUtils, Mmsystem, cimllib, Grobal, IMLUtil,
  cimlLibB, ClUtil, Bmputil, DGC, HUtil32;

const
   DATADIR = '.\Data\';
   MAXMONRACE = 300;
   MAXMONMEMORY = 10 * (1024 * 1000); //1付府寸 1M  10付府
   HUMANFRAME  = 224;
   MAGEFFECTFRAME = 24;

type
  TSurfaceImage = record
    px, py: Integer;
    Surface: TDGCSurface;
  end;
  PTSurfaceImage = ^TSurfaceImage;

  TBufSurfaceImage = record
    px, py: Integer;
    Surface: TDGCSurface;
    BufSize: integer;         //荤侩 滚欺 农扁
    UseTime: integer;         //付瘤阜 荤侩 矫埃
  end;
  PTBufSurfaceImage = ^TBufSurfaceImage;

  TBufImgInfo = record
    ImageSize: integer;
    LatestTime: integer;
    Surface: TDGCSurface;
  end;
  PTBufImgInfo = ^TBufImgInfo;

  TBufImgMonInfo = record
    ImageSize: integer;
    LatestTime: integer;
    SurfaceList: TList; //阁胶磐 Surface狼 府胶飘
  end;
  PTBufImgMonInfo = ^TBufImgMonInfo;

  TIndexTable = record
  	  DiskPos: LongInt;
     ImageSize: LongInt;
     ImgHdr: TImgLibImage;
  end;
  PTIndexTable = ^TIndexTable;

  TIndexTableArr = array[0..65535] of TIndexTable;

  TBufImgArr = array[0..MaxListSize div 4] of PTBufImgInfo;
  PTBufImgArr = ^TBufImgArr;

  {-------------------------------------------------------------}

  TScreenImages = class   //亲惑 皋葛府俊 棵妨具 窍绰 捞固瘤甸...
  private
    ImgHeader: TImgLibHeader;
  public
	 dScreen: TDGCScreen;
    BodyFile: string;
    HairFile: string;
    WeaponFile: string;
    MagEffectFile: string;
    ScreenFile: string;
    ILBody: TList;
    ILHair: TList;
    ILWeapon: TList;
    ILMagEffect: TList;
    ILScreenImage: TList;
    constructor Create;
    destructor Destroy; override;
    procedure Initialize;
               //sex  0:female  1: male
    function  GetHumBody (dresstype, sex, frameindex: integer): TSurfaceImage;
    function  GetHumHair (hairtype, sex, frameindex: integer): TSurfaceImage;
    function  GetHumWeapon (weapontype, sex, frameindex: integer): TSurfaceImage;
    function  GetMagEffect (magictype, frameindex: integer): TSurfaceImage;
    function  GetScreenImage (index: integer): TDgcSurface;
  end;

  TLoginImages = class     //Load, Free 炼沥捞 啊瓷
  private
    ImgHeader: TImgLibHeader;
  public
	 dScreen: TDGCScreen;
    LoginImageFile: string;
    ILLogin: TList;
    constructor Create;
    destructor Destroy; override;
    procedure Initialize;
    procedure LoadImages;
    procedure FreeImages;
    function GetImage (index: integer): TDgcSurface;
  end;

  TBufferingImages = class    //老沥 皋葛府父怒父
  private
  public
	 dScreen: TDGCScreen;
    FileName: string;
    ImageArr: PTBufImgArr;     //array of PTBufImgInfo
    IndexList: TList;          //牢郸胶
    ImageCount: integer;       //Image 肮荐
    MemorySize: inteter;
    constructor Create;
    destructor Destroy; override;
    procedure Initialize;
    function  GetSurface (index: integer): TDGCSurface;
  end;

  TMonsterImage = class
  private
    ImgHeader: TImgLibHeader;
    procedure LoadMonImages (monfile: string; surlist: TList; var imgsize: integer);
  public
	 dScreen: TDGCScreen;
    MonMemorySize: integer;
    MonArr: array[0..MAXMONRACE-1] of TBufImgMonInfo;   //窍唱狼 颇老俊 茄 阁胶磐
    constructor Create;
    destructor Destroy; override;
    procedure Initialize;
    function  MonValid (race: integer): Boolean;
    function  LoadMonster (race: integer): TList;
    procedure FreeMonster (race: integer);
  end;


implementation


constructor TScreenImages.Create;
begin
	dScreen := nil;
   BodyFile := '';
   HairFile := '';
   WeaponFile := '';
   MagEffectFile := '';
   ScreenFile := '';

   ILBody := TList.Create;
   ILHair := TList.Create;
   ILWeapon := TList.Create;
   ILMagEffect := TList.Create;
   ILScreenImage := TList.Create;

end;

destructor TScreenImages.Destroy;
begin
   ILBody.Free;
   ILHair.Free;
   ILWeapon.Free;
   ILMagEffect.Free;
   ILScreenImage.Free;
   inherited Destroy;
end;

procedure TScreenImages.Initialize;
begin
	if dScreen = nil then begin
      ShowMessage ('Initialize Error! TScreenImages.dScreen 汲沥 救灯澜.');
      exit;
   end;
   if (BodyFile = '') or (HairFile = '') or (WeaponFile = '') or (MagEffectFile = '') or
      (ScreenFile = '') then begin
      ShowMessage ('Initialize error. no filename');
      exit;
   end;
   LoadLibrary (BodyFile, ILBody);
   LoadLibrary (HairFile, ILHair);
   LoadLibrary (WeaponFile, ILWeapon);
   LoadLibrary (MagEffectFile, ILMagEffect);
   LoadLibrary (ScreenFile, ILScreenImage);
end;

procedure TScreenImages.LoadLibrary (flname: string; ilist: TList);
var
   fhandle: integer;
   stream: TFileStream;
   i, j: integer;
   ImgHdr: TImgLibImage;
   surfaceimage: PTSurfaceImage;
begin
   stream := TFileStream.Create (flname, fmOpenRead or fmShareDenyNone);
   if stream <> nil then begin
      stream.ReadBuffer (ImgHeader, SizeOf(TImgLibHeader));
      for i:=0 to ImgHeader.ImageCount - 1 do begin
         stream.ReadBuffer(ImgHdr, SizeOf(TImgLibImage) - SizeOf(PByte));
         GetMem (ImgHdr.Bits, WidthBytes(ImgHdr.Width) * ImgHdr.Height);
         stream.ReadBuffer(ImgHdr.Bits^, WidthBytes(ImgHdr.Width) * ImgHdr.Height);

         new (surfaceimage);
         with surfaceimage^ do begin
            Surface := CreateSurface (dScreen, ImgHdr);
            px := GetX(ImgHdr);
            py := GetY(ImgHdr);
         end;
         ilist.Add(surfaceimage);
         Dispose (ImgHdr.Bits);
      end;
      stream.Free;
   end;
end;

//sex  0:female  1: male
function  TScreenImages.GetHumBody (dresstype, sex, frameindex: integer): TSurfaceImage;
var
   idx: integer;
begin
   Result.Surface := nil;
   idx := HUMANFRAME * dresstype * 2 + sex + frameindex;
   if idx < ILBody.Count then begin
      Result := ILBody[idx];
   end;
end;

function  TScreenImages.GetHumHair (hairtype, sex, frameindex: integer): TSurfaceImage;
var
   idx: integer;
begin
   Result.Surface := nil;
   idx := HUMANFRAME * hairtype * 2 + sex + frameindex;
   if idx < ILHair.Count then begin
      Result := ILHair[idx];
   end;
end;

function  TScreenImages.GetHumWeapon (weapontype, sex, frameindex: integer): TSurfaceImage;
var
   idx: integer;
begin
   Result.Surface := nil;
   idx := HUMANFRAME * weapontype * 2 + sex + frameindex;
   if idx < ILWeapon.Count then begin
      Result := ILWeapon[idx];
   end;
end;

function  TScreenImages.GetMagEffect (magictype, frameindex: integer): TSurfaceImage;
var
   idx: integer;
begin
   Result.Surface := nil;
   idx := MAGEFFECTFRAME * magictype + frameindex;
   if idx < ILMagEffect.Count then begin
      Result := ILMagEffect[idx];
   end;
end;

function  TScreenImages.GetScreenImage (index: integer): TDgcSurface;
begin
   Result := nil;
   if index < ILScreenImage.Count then begin
      Result := ILScreenImage[index].Surface;
   end;
end;

{======================================================================}

constructor TLoginImages.Create;    //Load, Free 炼沥捞 啊瓷
begin
   dScreen := nil;
   LoginImageFile := '';
   ILLogin := TList.Create;
end;

destructor TLoginImages.Destroy;
begin
   ILLogin.Free;
   inherited Destroy;
end;

procedure TLoginImages.Initialize;
begin

⌨️ 快捷键说明

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