introscn.pas

来自「2009最新 传奇汉化0599代码 传奇汉化」· PAS 代码 · 共 1,662 行 · 第 1/4 页

PAS
1,662
字号
end;

procedure TSelectChrScene.SelChrNewChrClick;
begin
   if not ChrArr[0].Valid or not ChrArr[1].Valid or not ChrArr[2].Valid then begin
      if not ChrArr[0].Valid then MakeNewChar (0)
      else if not ChrArr[1].Valid then MakeNewChar (1)
      else MakeNewChar (2);
   end else
      FrmDlg.DMessageDlg ('You can have up to 3 characters per server for every single account.', [mbOk]);
end;

procedure TSelectChrScene.SelChrEraseChrClick;
var
   n: integer;
begin
   n := 0;
   if ChrArr[0].Valid and ChrArr[0].Selected then n := 0;
   if ChrArr[1].Valid and ChrArr[1].Selected then n := 1;
   if ChrArr[2].Valid and ChrArr[2].Selected then n := 2;   
   if (ChrArr[n].Valid) and (not ChrArr[n].FreezeState) and (ChrArr[n].UserChr.Name <> '') then begin
      //版绊 皋技瘤甫 焊辰促.
      if mrYes = FrmDlg.DMessageDlg ('"' + ChrArr[n].UserChr.Name + '" Removed characters may not be restored.\' +
                                                                    'You will not be able to use the same charcter name for a while.\' +
                                                                    'Are you sure you want to delete character?', [mbYes, mbNo, mbCancel]) then
         FrmMain.SendDelChr (ChrArr[n].UserChr.Name);
   end;
end;

procedure TSelectChrScene.SelChrCreditsClick;
var
  msgStr: String;
begin
  msgStr := '';
  msgStr := msgStr+'Lomcn DiamondM2 Development Team\';
  msgStr := msgStr+'----------\';
  msgStr := msgStr+'Damian\';
  msgStr := msgStr+'Dataforce\';
  msgStr := msgStr+'DeathWish\';  
  msgStr := msgStr+'NickAKAVexus\';
  msgStr := msgStr+'Sean\';
  msgStr := msgStr+'----------\';
  msgStr := msgStr+'http://www.lomcn.co.uk\';
  msgStr := msgStr+'----------\';

  FrmDlg.DialogSize := 2;
  FrmDlg.DMessageDlg(msgstr, [mbOk])
end;

procedure TSelectChrScene.SelChrExitClick;
begin
   FrmMain.Close;
end;

procedure TSelectChrScene.ClearChrs;
begin
   FillChar (ChrArr, sizeof(TSelChar)*3, #0);
   ChrArr[0].FreezeState := FALSE;
   ChrArr[1].FreezeState := TRUE; //扁夯捞 倔绢 乐绰 惑怕
   ChrArr[2].FreezeState := TRUE; //扁夯捞 倔绢 乐绰 惑怕
   ChrArr[0].Selected := TRUE;
   ChrArr[1].Selected := FALSE;
   ChrArr[2].Selected := FALSE;
   ChrArr[0].UserChr.Name := '';
   ChrArr[1].UserChr.Name := '';
   ChrArr[2].UserChr.Name := '';
end;

procedure TSelectChrScene.AddChr (uname: string; job, hair, level, sex: integer);
var
   n: integer;
begin
   if not ChrArr[0].Valid then n := 0
   else if not ChrArr[1].Valid then n := 1
   else if not ChrArr[2].Valid then n := 2   
   else exit;
   ChrArr[n].UserChr.Name := uname;
   ChrArr[n].UserChr.Job := job;
   ChrArr[n].UserChr.Hair := hair;
   ChrArr[n].UserChr.Level := level;
   ChrArr[n].UserChr.Sex := sex;
   ChrArr[n].Valid := TRUE;

end;

procedure TSelectChrScene.MakeNewChar (index: integer);
begin
   CreateChrMode := TRUE;
   NewIndex := index;
{   if index = 0 then begin
      FrmDlg.DCreateChr.Left := 415;
      FrmDlg.DCreateChr.Top := 15;
   end else begin}
      FrmDlg.DCreateChr.Left := 75;
      FrmDlg.DCreateChr.Top := 15;
{   end;}
   FrmDlg.DCreateChr.Visible := TRUE;
   ChrArr[NewIndex].Valid := TRUE;
   ChrArr[NewIndex].IsCreating := True;
   ChrArr[NewIndex].FreezeState := FALSE;
   EdChrName.Left := FrmDlg.DCreateChr.Left + 387;
   EdChrName.Top  := FrmDlg.DCreateChr.Top + 140;
   EdChrName.Visible := TRUE;
   EdChrName.SetFocus;
   SelectChr (NewIndex);
   FillChar (ChrArr[NewIndex].UserChr, sizeof(TUserCharacterInfo), #0);
end;

procedure TSelectChrScene.EdChrnameKeyPress (Sender: TObject; var Key: Char);
begin

end;


procedure TSelectChrScene.SelectChr (index: integer);
begin
   ChrArr[index].Selected := TRUE;
   ChrArr[index].DarkLevel := 30;
   ChrArr[index].StartTime := GetTickCount;
   ChrArr[index].Moretime := GetTickCount;

   ChrArr[0].Selected := (index = 0);
   ChrArr[1].Selected := (index = 1);
   ChrArr[2].Selected := (index = 2);
end;

procedure TSelectChrScene.SelChrNewClose;
begin
   ChrArr[NewIndex].Valid := FALSE;
   CreateChrMode := FALSE;
   FrmDlg.DCreateChr.Visible := FALSE;
   EdChrName.Visible := FALSE;

   ChrArr[0].Selected := (oldindex = 0);
   ChrArr[0].FreezeState := not (oldindex = 0);
   ChrArr[1].Selected := (oldindex = 1);
   ChrArr[1].FreezeState := not (oldindex = 1);
   ChrArr[2].Selected := (oldindex = 2);
   ChrArr[2].FreezeState := not (oldindex = 2);
end;

procedure TSelectChrScene.SelChrNewOk;
var
   chrname, shair, sjob, ssex: string;
begin
   chrname := Trim(EdChrName.Text);
   if chrname <> '' then begin
      ChrArr[NewIndex].IsCreating := False;   
      ChrArr[NewIndex].Valid := FALSE;
      CreateChrMode := FALSE;
      FrmDlg.DCreateChr.Visible := FALSE;
      EdChrName.Visible := FALSE;

      ChrArr[0].Selected := (oldindex = 0);
      ChrArr[0].FreezeState := not (oldindex = 0);
      ChrArr[1].Selected := (oldindex = 1);
      ChrArr[1].FreezeState := not (oldindex = 1);
      ChrArr[2].Selected := (oldindex = 2);
      ChrArr[2].FreezeState := not (oldindex = 2);

      shair := IntToStr(1 + Random(5)); //////****IntToStr(ChrArr[NewIndex].UserChr.Hair);
      sjob  := IntToStr(ChrArr[NewIndex].UserChr.Job);
      ssex  := IntToStr(ChrArr[NewIndex].UserChr.Sex);
      FrmMain.SendNewChr (FrmMain.LoginId, chrname, shair, sjob, ssex); //货 某腐磐甫 父电促.
   end;
end;

procedure TSelectChrScene.SelChrNewJob (job: integer);
begin
   if (job in [0..2]) and (ChrArr[NewIndex].UserChr.Job <> job) then begin
      ChrArr[NewIndex].UserChr.Job := job;
      SelectChr (NewIndex);
   end;
end;

procedure TSelectChrScene.SelChrNewm_btSex (sex: integer);
begin
   if sex <> ChrArr[NewIndex].UserChr.Sex then begin
      ChrArr[NewIndex].UserChr.Sex := sex;
      SelectChr (NewIndex);
   end;
end;

procedure TSelectChrScene.SelChrNewPrevHair;
begin
end;

procedure TSelectChrScene.SelChrNewNextHair;
begin
end;

procedure TSelectChrScene.PlayScene (MSurface: TDirectDrawSurface);
var
   n, bx, by, fx, fy, img: integer;
   ex, ey:Integer; //选择人物时显示的效果光位置
   d, e, dd: TDirectDrawSurface;
   ax, ay: integer;
   cx,cy: integer;
   svname: string;
begin
   bx:=0;
   by:=0;
   fx:=0;
   fy:=0;//Jacky
{$IF SWH = SWH800}
   d := g_WMainImages.Images[65];
{$ELSEIF SWH = SWH1024}
//   d := g_WMainImages.Images[82];
   d := g_WMainImages.Images[65];
{$IFEND}
   //显示选择人物背景画面
   if d <> nil then begin
//      MSurface.Draw (0, 0, d.ClientRect, d, FALSE);
      MSurface.Draw ((SCREENWIDTH - d.Width) div 2,(SCREENHEIGHT - d.Height) div 2, d.ClientRect, d, FALSE);

   end;
   for n:=0 to 2 do begin
      if (not ChrArr[n].Valid) or (ChrArr[n].IsCreating) then begin
        d := nil;
        d := g_WMainImages.Images[44];

        cy := 19;
        case n of
          0: begin
            cx := 47;
          end;
          1: begin
            cx := 286;
          end;
          2: begin
            cx := 526;
          end;
        end;

        MSurface.Draw (cx,cy, d.ClientRect, d, FALSE);
      end;

      if ChrArr[n].Valid then begin
         ex := (SCREENWIDTH - 800) div 2 + 90{90};
         ey := (SCREENHEIGHT - 600) div 2 + 60-2{60-2};
         case ChrArr[n].UserChr.Job of
            0: begin
               if ChrArr[n].UserChr.Sex = 0 then begin
                  bx := (SCREENWIDTH - 800) div 2 + 131{71};
                  by := (SCREENHEIGHT - 600) div 2 + 211{75-23}; //巢磊
                  fx := bx;
                  fy := by;
               end else begin
                  bx := (SCREENWIDTH - 800) div 2 + 121{65};
                  by := (SCREENHEIGHT - 600) div 2 + 197{75-2-18};  //咯磊  倒惑怕
                  fx := bx;
                  fy := by;    //框流捞绰 惑怕
               end;
            end;
            1: begin
               if ChrArr[n].UserChr.Sex = 0 then begin
                  bx := (SCREENWIDTH - 800) div 2 + 130{77};
                  by := (SCREENHEIGHT - 600) div 2 + 200{75-29};
                  fx := bx;
                  fy := by;
               end else begin
                  bx := (SCREENWIDTH - 800) div 2 + 142{141+30};
                  by := (SCREENHEIGHT - 600) div 2 + 217{85+14-2};
                  fx := bx;
                  fy := by;
               end;
            end;
            2: begin
               if ChrArr[n].UserChr.Sex = 0 then begin
                  bx := (SCREENWIDTH - 800) div 2 + 138{85};
                  by := (SCREENHEIGHT - 600) div 2 + 205{75-12};
                  fx := bx;
                  fy := by;
               end else begin
                  bx := (SCREENWIDTH - 800) div 2 + 120{141+23};
                  by := (SCREENHEIGHT - 600) div 2 + 229{85+20-2};
                  fx := bx;
                  fy := by;
               end;
            end;
         end;
         if n > 0 then begin
            ex := (SCREENWIDTH - 800) div 2{430};
            ey := (SCREENHEIGHT - 600) div 2{60};
            bx := bx + 240*n;
            by := by;
            fx := fx + 240*n;
            fy := fy ;
         end;
         if ChrArr[n].Unfreezing then begin //踌绊 乐绰 吝
            img := 40 + ChrArr[n].UserChr.Job * 40 + ChrArr[n].UserChr.Sex * 120;
            d := g_WChrSelImages.Images[img + ChrArr[n].aniIndex];
            d := g_WChrSelImages.GetCachedImage((img + ChrArr[n].aniIndex), ax, ay);
            //e := g_WChrSelImages.Images[4 + ChrArr[n].effIndex];
            if (d <> nil) and (not ChrArr[n].IsCreating) then MSurface.Draw (bx + ax , by + ay, d.ClientRect, d, TRUE);
            //if e <> nil then DrawBlend (MSurface, ex, ey, e, 1);
            if GetTickCount - ChrArr[n].StartTime > 50{120} then begin
               ChrArr[n].StartTime := GetTickCount;
               ChrArr[n].aniIndex := ChrArr[n].aniIndex + 1;
            end;
            if GetTickCount - ChrArr[n].startefftime >50{ 110} then begin
               ChrArr[n].startefftime := GetTickCount;
               ChrArr[n].effIndex := ChrArr[n].effIndex + 1;
               //if ChrArr[n].effIndex > EFFECTFRAME-1 then
               //   ChrArr[n].effIndex := EFFECTFRAME-1;
            end;
            if ChrArr[n].aniIndex > FREEZEFRAME-1 then begin
               ChrArr[n].Unfreezing := FALSE; //促 踌疽澜
               ChrArr[n].FreezeState := FALSE; //
               ChrArr[n].aniIndex := 0;
            end;
         end else
            if not ChrArr[n].Selected and (not ChrArr[n].FreezeState and not ChrArr[n].Freezing) then begin //急琶登瘤 臼疽绰单 踌酒乐栏搁
               ChrArr[n].Freezing := TRUE;
               ChrArr[n].aniIndex := 0;
               ChrArr[n].StartTime := GetTickCount;
            end;
         if ChrArr[n].Freezing then begin //倔绊 乐绰 吝
            img := 40 + ChrArr[n].UserChr.Job * 40 + ChrArr[n].UserChr.Sex * 120;
            //d := g_WChrSelImages.Images[img + FREEZEFRAME - ChrArr[n].aniIndex - 1];
            d := g_WChrSelImages.GetCachedImage((img + FREEZEFRAME - ChrArr[n].aniIndex - 1), ax, ay);
            if (d <> nil) and (not ChrArr[n].IsCreating) then MSurface.Draw (bx + ax, by + ay, d.ClientRect, d, TRUE);
            if GetTickCount - ChrArr[n].StartTime > 50 then begin
               ChrArr[n].StartTime := GetTickCount;
               ChrArr[n].aniIndex := ChrArr[n].aniIndex + 1;
            end;
            if ChrArr[n].aniIndex > FREEZEFRAME-1 then begin
               ChrArr[n].Freezing := FALSE; //促 倔菌澜
               ChrArr[n].FreezeState := TRUE; //
               ChrArr[n].aniIndex := 0;
            end;
         end;
         if not ChrArr[n].Unfreezing and not ChrArr[n].Freezing then begin
            if not ChrArr[n].FreezeState then begin  //踌酒乐绰惑怕
               img := 20 + ChrArr[n].UserChr.Job * 40 + ChrArr[n].aniIndex + ChrArr[n].UserChr.Sex * 120;
               //d := g_WChrSelImages.Images[img];
               d := g_WChrSelImages.GetCachedImage(img, ax, ay);
               if (d <> nil) and (not ChrArr[n].IsCreating) then begin
                  if ChrArr[n].DarkLevel > 0 then begin
                     dd := TDirectDrawSurface.Create (frmMain.DXDraw.DDraw);
                     dd.SystemMemory := TRUE;
                     dd.SetSize (d.Width, d.Height);
                     dd.Draw (0, 0, d.ClientRect, d, FALSE);
                     MakeDark (dd, 30-ChrArr[n].DarkLevel);
                     MSurface.Draw (fx, fy, dd.ClientRect, dd, TRUE);
                     dd.Free;
                  end else
                     MSurface.Draw (fx + ax, fy + ay, d.ClientRect, d, TRUE)
               end;
            end else begin      //倔绢乐绰惑怕
               img := 40 + ChrArr[n].UserChr.Job * 40 + ChrArr[n].UserChr.Sex * 120;
//               d := g_WChrSelImages.Images[img];
               d := g_WChrSelImages.GetCachedImage(img, ax, ay);
               if (d <> nil) and (not ChrArr[n].IsCreating) then
                  MSurface.Draw (bx + ax, by + ay, d.ClientRect, d, TRUE);
            end;
            if ChrArr[n].Selected then begin
               if GetTickCount - ChrArr[n].StartTime > 300 then begin
                  ChrArr[n].StartTime := GetTickCount;
                  ChrArr[n].aniIndex := ChrArr[n].aniIndex + 1;
                  if ChrArr[n].aniIndex > SELECTEDFRAME-1 then
                     ChrArr[n].aniIndex := 0;
               end;
               if GetTickCount - ChrArr[n].moretime > 25 then begin
                  ChrArr[n].moretime := GetTickCount;
                  if ChrArr[n].DarkLevel > 0 then
                     ChrArr[n].DarkLevel := ChrArr[n].DarkLevel - 1;
               end;
            end;
         end;
         //显示选择角色时人物名称等级

            if (ChrArr[n].UserChr.Name <> '') and (ChrArr[n].Selected) then begin
               with MSurface do begin
                  SetBkMode (Canvas.Handle, TRANSPARENT);
                  BoldTextOut (MSurface, (SCREENWIDTH - 800) div 2 + 167{117}, (SCREENHEIGHT - 600) div 2 + 457, clWhite, clBlack, inttostr(n+1));
                  BoldTextOut (MSurface, (SCREENWIDTH - 800) div 2 + 167{117}, (SCREENHEIGHT - 600) div 2 + 483, clWhite, clBlack, ChrArr[n].UserChr.Name);
                  BoldTextOut (MSurface, (SCREENWIDTH - 800) div 2 + 167{117}, (SCREENHEIGHT - 600) div 2 + 509, clWhite, clBlack, IntToStr(ChrArr[n].UserChr.Level));
                  BoldTextOut (MSurface, (SCREENWIDTH - 800) div 2 + 167{117}, (SCREENHEIGHT - 600) div 2 + 535, clWhite, clBlack, GetJobName(ChrArr[n].UserChr.Job));
                  Canvas.Release;
               end;
            end;

         with MSurface do begin
            SetBkMode (Canvas.Handle, TRANSPARENT);
            if BO_FOR_TEST then svname := 'ThedeathRules'
            else svname := g_sServerName;
            BoldTextOut (MSurface, SCREENWIDTH div 2{405} - Canvas.TextWidth(svname) div 2, (SCREENHEIGHT - 600) div 2 + 5{8}, clWhite, clBlack, svname);
            Canvas.Release;
         end;
      end;
   end;
end;


{--------------------------- TLoginNotice ----------------------------}

constructor TLoginNotice.Create;
begin
   inherited Create (stLoginNotice);
end;

destructor TLoginNotice.Destroy;
begin
   inherited Destroy;
end;



{---- Adjust global SVN revision ----}
initialization
  SVNRevision('$Id: IntroScn.pas 326 2006-08-24 19:52:54Z Dataforce $');
end.

⌨️ 快捷键说明

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