原始翎風CLIENT8位 (11) fsata的學習

D7mir發表於2024-05-07

本單元提供系統中的所有對話方塊顯示

MAINIMAGEFILE = 'Data\Prguse.wil';
MAINIMAGEFILE2 = 'Data\Prguse2.wil';
MAINIMAGEFILE3 = 'Data\Prguse3.wil';
CHRSELIMAGEFILE = 'Data\ChrSel.wil';
MINMAPIMAGEFILE = 'Data\mmap.wil';
TITLESIMAGEFILE = 'Data\Tiles.wil';
SMLTITLESIMAGEFILE = 'Data\SmTiles.wil';
HUMWINGIMAGESFILE = 'Data\HumEffect.wil';
MAGICONIMAGESFILE = 'Data\MagIcon.wil';
HUMIMGIMAGESFILE = 'Data\Hum.wil';
HAIRIMGIMAGESFILE = 'Data\Hair.wil';
WEAPONIMAGESFILE = 'Data\Weapon.wil';
NPCIMAGESFILE = 'Data\Npc.wil';
MAGICIMAGESFILE = 'Data\Magic.wil';
MAGIC2IMAGESFILE = 'Data\Magic2.wil';
EVENTEFFECTIMAGESFILE = EFFECTIMAGEDIR + 'Event.wil';
BAGITEMIMAGESFILE = 'Data\Items.wil';
STATEITEMIMAGESFILE = 'Data\StateItem.wil';
DNITEMIMAGESFILE = 'Data\DnItems.wil';
OBJECTIMAGEFILE = 'Data\Objects.wil';
OBJECTIMAGEFILE1 = 'Data\Objects%d.wil';
MONIMAGEFILE = 'Data\Mon%d.wil';
DRAGONIMAGEFILE = 'Data\Dragon.wil';
EFFECTIMAGEFILE = 'Data\Effect.wil';

MONIMAGEFILEEX = 'Graphics\Monster\%d.wil';
MONPMFILE = 'Graphics\Monster\%d.pm';

g_MovingItem.Index
0-5 來自快捷物品欄
0..MAXBAGITEM - 1 g_ItemArr
-1..-13 g_UseItems -(idx + 1) [0..12] 老版9格,-1 ..-9
-30..-20 g_DealItems
{------------------------------------------------------------------------------}
//玩家狀態皮膚框
{------------------------------------------------------------------------------}

商店物品
MenuList
g_SaveItemList

ShowDice()
分析

m_Dice[0..9] 骰子陣列 10
m_nDiceCount 骰子個數 大概是這陣列的10個不是全用。

一個骰子的情況m_nDiceCount為1
n67C < 20
GetTickCount dwPlayTick時間 大於100
如果n67C div 5 = 4 (這個不可能執行了)
nPlayPoint等於Random(6) + 1
如果n67C不等於20
執行nPlayPoint n67C div 5 + 8 為0,1,2,3(8,9,10,11)
數值分段了?
dwPlayTick := GetTickCount
n67C增1
退出

n67C >= 20
nPlayPoint := nDicePoint
GetTickCount時間dwPlayTick超過1.5秒 對話方塊關閉?
退出。

多個骰子的情況
設定標誌bo05 true
迴圈到m_nDiceCount
n67C 小於n680
GetTickCount dwPlayTick時間 大於100
n67C 等於20 (n67C div 5 = 4)
nPlayPoint := Random(6) + 1;隨機0-5 +1
n67C 不等於20
nPlayPoint等於n67C div 5 + 8 也是以5分段在n680的限制內
dwPlayTick取當前時間點, n67C增1
標誌bo05 false

n67C 大於等於n680


nPlayPoint := nDicePoint
時間點判斷dwPlayTick小於2秒,標誌bo05 false

最後判斷 bo05 關閉DMsgDlg.Visible := False

這個函式應該是不停的呼叫的
所以n67C 在不斷的遞增1

還有個時間的判斷大於上次的100毫秒,進行計算
在超過1.5秒(2秒)關閉對話方塊?

單個骰子n67C是20的閥值
對nPlayPoint 賦值,超過就是賦值nDicePoint

多個骰子n67C是同n680比較 n680是閥值
對nPlayPoint 賦值,超過就是賦值nDicePoint
用標誌bo05判斷
在超過(2秒)關閉對話方塊

SM_PLAYDICE
訊息裡面 給骰子裝載資料
賦值了 m_nDiceCount
和nDicePoint

DialogSize := 0;資料復位?
DMessageDlg('', []);

傳送商人對話方塊輸框,
如果伺服器發來的字串是@@
客戶端輸入把@@ + 輸入的內容發給伺服器?

那麼這個nDicePoint 和nPlayPoint 代表什麼?

DMessageDlg
訊息顯示對話方塊

大概看明白了
3種對話方塊,
小的,普通的, 豎型的
對應不同的素材圖片

裡面有幾種按鈕。

顯示投骰子功能 也在這個裡面實現,有個陣列來支援

還有輸入功能,輸入行會名稱的?

其完全是當一個控制元件來使用的,
還有事件,
繪圖時間,
鍵盤按下事件。

感覺這都是在循著VCL 的按鈕,皮膚,編輯框這些的控制元件規則
給改造了一下。


StdMode 物品種類
0 藥品 強效金創要
1乾肉?
2 ?
3 地牢逃脫卷 戰神油,祝福油,修復油 行會回城卷 ,回城卷 隨機傳送卷,彩票
攻擊力藥水
4 技能書

31 打捆類物品?超級金創藥,超級魔法藥 金創藥(小)包,中包 地牢逃脫捲包 籌碼包 打捆護身符
5..6: //武器
10, 11: //男衣服, 女衣服

15, //頭盔,捧備
19, 20, 21, //項鍊
22, 23, //戒指
24, 26, //手鐲
51,
52, 62, //鞋
53, 63,
54, 64: //腰帶

19, 53: //項鍊
20, 24, 52: //項鍊 及 手鐲:
21, 54: //項鍊
23: //戒指
62: //Boots
63: //Charm

25: //護身符及毒藥
30: //照明物
40: //肉
42: //藥材
43: //礦石

1,//玩家狀態皮膚框
2,//建立角色框
3,


gOkDirectPaint

if doFullScreen in DxDraw.Options then
begin //視窗
end
else
begin
Width := SCREENWIDTH; //視窗
AddHeight := FrmMain.Height - ClientRect.Bottom; //視窗
Height := SCREENHEIGHT + AddHeight; //視窗
Left := (Screen.Width - Frmmain.Width) div 2; //視窗
Top := (Screen.Height - Frmmain.Height) div 2; //視窗
g_boNoDarkness := TRUE;
end;

相關文章