目錄
第Ⅰ部分 學習編程
第1章 關於魔獸世界的編程 2
1.1 定製用戶界麵 2
1.1.1 插件是如何工作的 2
1.1.2 插件能夠做什麼 3
1.2 Lua新手上路 3
1.2.1 下載和安裝WowLua 4
1.2.2 在網上使用Lua 4
1.2.3 下載並安裝Lua解釋器 5
1.3 探究您的Lua解釋器 6
第2章 探討Lua基礎知識 7
2.1 使用Lua解釋器 7
2.1.1 運行命令 7
2.1.2 錯誤信息的理解 8
2.1.3 使用曆史信息來做改變 8
2.1.4 退齣解釋器 9
2.2 處理數字 9
2.2.1 基本算術運算 9
2.2.2 科學記數法 10
2.2.3 十六進製錶示法 11
2.2.4 理解浮點 11
2.3 理解值和變量 12
2.3.1 探討值和它們的類型 12
2.3.2 使用變量 13
2.4 使用字符串 16
2.4.1 比較字符串 16
2.4.2 多個字符串的連接 16
2.4.3 將數字轉換成字符串 17
2.4.4 將字符串轉換成數字 17
2.4.5 引用字符串 17
2.4.6 轉義特殊的字符 19
2.4.7 獲得字符串的長度 20
2.5 布爾值和運算符 21
2.5.1 使用and運算符 21
2.5.2 or運算符的使用 21
2.5.3 not運算符的使用 22
2.5.4 理解nil值 22
2.6 探討作用域 23
2.6.1 塊(Block) 23
2.6.2 組塊(Chunk) 24
2.7 小結 24
第3章 基本的函數和控製結構 25
3.1 使用函數 25
3.1.1 創建函數 25
3.1.2 局部函數 26
3.1.3 函數的參數和返迴值 26
3.1.4 函數作為Lua值 27
3.2 用if語句進行判斷 28
3.2.1 簡單的條件 28
3.2.2 復雜的錶達式 29
3.2.3 擴展的條件語句 29
3.2.4 顯示個人問候信息 29
3.3 用while語句來重復動作 30
3.3.1 計算階乘 31
3.3.2 while和repeat之間的差異 32
3.4 用數值執行for循環 32
3.4.1 計算階乘 34
3.4.2 循環條件的求值 34
3.4.3 循環中的變量作用域 34
3.5 小結 35
第4章 使用錶 36
4.1 用錶來存儲數據 36
4.1.1 創建和索引錶 36
4.1.2 從錶中清除元素 37
4.1.3 字符串關鍵字的快捷方式 37
4.1.4 創建有內容的錶 38
4.2 把錶當作數組使用 39
4.2.1 創建數組 39
4.2.2 獲取數組的長度 40
4.2.3 在數組中添加元素 40
4.2.4 從數組中刪除元素 41
4.2.5 對數組中的元素排序 42
4.3 用名稱空間使用錶 43
4.3.1 創建util名稱空間 43
4.3.2 嚮util中添加函數 43
4.4 錶的麵嚮對象編程 44
4.4.1 創建非麵嚮對象計數器 45
4.4.2 把錶作為簡單的對象 45
4.4.3 用冒號調用對象方法 46
4.4.4 用冒號定義函數 46
4.4.5 創建更佳的計數器 47
4.5 利用元錶對錶進行擴展 48
4.5.1 添加元錶 48
4.5.2 定義元方法 49
4.5.3 旁路元錶 54
4.6 小結 54
第5章 高級函數和控製結構 55
5.1 多值返迴 55
5.2 將十六進製轉換成RGB 55
5.3 指定多個值 56
5.4 返迴值丟失 56
5.5 WoW中的多個返迴值 57
5.6 接受可變數目的參數 58
5.7 聲明變參函數 59
5.8 結閤select()函數使用… 60
5.9 範型for循環和迭代器 61
5.10 範型for語句的語法 61
5.11 遍曆錶的數組部分 61
5.12 遍曆完整的錶 62
5.13 錶的清除 63
5.14 其他的迭代器 63
5.15 對錶的數組排序 63
5.16 定義樣例數據 64
5.17 默認的排序順序 64
5.18 創建比較函數 64
5.19 創建更復雜的比較函數 65
5.20 小結 66
第6章 Lua標準庫 67
6.1 錶庫 68
6.1.1 table.concat (table [, sep [, i [, j]]]) 68
6.1.2 table.insert (table, [pos,] value) 68
6.1.3 table.maxn (table) 68
6.1.4 table.remove (table [, pos]) 69
6.1.5 table.sort (table [, comp]) 69
6.2 數學函數庫 69
6.3 字符串函數 72
6.4 格式化新字符串 73
6.5 模式匹配 75
6.5.1 字符類型 75
6.5.2 模式選項 77
6.5.3 模式捕獲 77
6.5.4 模式錨點 78
6.5.5 模式的例子 78
6.6 模式匹配函數 78
6.7 Lua在WoW插件中的補充 80
6.8 函數彆名 81
6.9 小結 82
第7章 學習XML 83
7.1 XML——一種標記語言 83
7.1.1 XML與HTML的關係 84
7.1.2 XML的組件 84
7.1.3 創建規範的XML 85
7.2 驗證XML文檔 86
7.2.1 規範定義的樣例 86
7.2.2 XML文件的例子 87
7.2.3 魔獸世界中的XML 88
7.2.4 使用GradientType 89
7.2.5 探討模式 89
7.3 小結 89
第Ⅱ部分 魔獸世界編程
第8章 魔獸世界編程概述 91
8.1 遊戲中運行和測試代碼 91
8.1.1 安裝 91
8.1.2 使用/script和/run 92
8.1.3 顯示輸齣 92
8.2 在遊戲中編輯代碼 93
8.2.1 TinyPad 93
8.2.2 Omnibus 94
8.2.3 WowLua 94
8.3 編寫自定義print()函數 94
8.4 插件和腳本的局限性 95
8.5 用Blizzard插件編寫資源 95
8.5.1 用戶界麵自定義工具 95
8.5.2 用戶界麵和宏論壇 97
8.6 論壇資源 97
8.6.1 WowwiKI 97
8.6.2 魔獸版本監視器 97
8.7 小結 97
第9章 插件解析 98
9.1 開發屬於您自己的插件文件夾 98
9.1.1 暴雪的插件 98
9.1.2 自定義插件 99
9.2 插件組件和文件 99
9.2.1 內容錶格文件(.toc) 99
9.2.2 Lua腳本文件 104
9.2.3 XML文件 104
9.2.4 媒體文件 104
9.3 本地化您的插件 106
9.3.1 可用的本地語言 106
9.3.2 本地化的原因 106
9.3.3 鼓勵玩傢建議 106
9.3.4 實現本地化 107
9.4 創建插件框架 108
9.4.1 為插件命名(創建目錄) 108
9.4.2 創建.toc文件 109
9.4.3 創建框架.xml文件 109
9.5 使用外部庫 109
9.6 小結 109
第10章 在XML中創建窗體 110
10.1 瞭解UI對象 110
10.1.1 為對象進行命名 110
10.1.2 指定父對象 111
10.1.3 設置對象尺寸 112
10.1.4 錨定對象 113
10.1.5 將窗體和圖形元素分層 115
10.1.6 一般屬性 117
10.2 創建紋理 118
10.2.1 添加顔色 118
10.2.2 添加漸變效果 118
10.2.3 添加圖形元素 120
10.3 使用字體字符串創建文本 120
10.3.1 使用模闆 121
10.3.2 使用的例子 121
10.3.3 進一步自定義 122
10.4 探討窗體類型 123
10.4.1 按鈕(Button) 123
10.4.2 復選按鈕(Check Button) 123
10.4.3 顔色選擇(ColorSelect) 124
10.4.4 編輯框(Editbox) 124
10.4.5 遊戲工具提示(Game Tooltip) 124
10.4.6 消息窗體(Message Frame) 125
10.4.7 小地圖(Minimap) 125
10.4.8 模型(Model) 125
10.4.9 滾動信息窗體(Scrolling Message Frame) 126
10.4.10 滾動窗體(Scroll Frame) 126
10.4.11 簡單的HTML窗體 126
10.4.12 滑動器(Slider) 126
10.4.13 狀態欄(Status Bar) 127
10.4.14 飛行路綫窗體 127
10.5 小結 128
第11章 嚮XML窗體中添加行為 129
11.1 理解事件和腳本 129
11.1.1 窗體腳本 129
11.1.2 遊戲事件 129
11.2 使用腳本響應窗體事件 130
11.2.1 <OnEnter>和<OnLeave> 130
11.2.2 <OnLoad> 131
11.2.3 <OnEvent> 131
11.2.4 <OnClick> 132
11.2.5 <OnUpdate> 133
11.3 可用的窗體腳本 133
11.4 使用窗體方法改變窗體 135
11.4.1 常用方法 135
11.4.2 指定類型的函數 135
11.5 創建並使用模闆 136
11.5.1 模闆有用的原因 136
11.5.2 新建XML模闆 136
11.5.3 使用XML模闆 137
11.6 使用默認UI工具集模闆 138
11.7 小結 139
第12章 創建您的第一個插件:CombatTracker 140
12.1 定義規格說明 140
12.1.1 CombatTracker 用戶要求 140
12.1.2 找準遊戲事件 140
12.2 創建插件架構 142
12.3 定義CombatTracker的XML窗體 143
12.4 測試CombatTrackerFrame 144
12.5 嚮CombatTrackerFrame添加操作腳本 144
12.5.1 <OnLoad> 145
12.5.2 <OnEvent> 145
12.5.3 <OnClick> 145
12.5.4 <OnDragStart> 145
12.5.5 <OnDragStop> 145
12.6 為CombatTracker.lua添加函數 146
12.6.1 CombatTracker_OnLoad(frame) 146
12.6.2 CombatTracker_OnEvent(frame, event, ...) 147
12.6.3 CombatTracker_ReportDPS() 148
12.7 測試CombatTracker 149
12.7.1 窗體拖拽 149
12.7.2 右擊報告:第I部分 150
12.7.3 測試戰鬥跟蹤 150
12.7.4 右擊報告:第Ⅱ部分 150
12.8 小結 151
第13章 運用魔獸世界API 152
13.1 理解魔獸世界API 152
13.1.1 常規API 152
13.1.2 類庫API 153
13.1.3 FrameXML函數 154
13.1.4 受保護函數 154
13.1.5 單位函數的使用與關閉 155
13.2 創建簡單的單位窗體 156
13.2.1 創建窗體 157
13.2.2 添加數據域 157
13.2.3 設定窗體事件處理程序 160
13.3 使用API 164
13.3.1 顯示和隱藏窗體 164
13.3.2 實現簡單的更新函數 165
13.3.3 顯示生命和法力值 167
13.3.4 更新敵對信息 169
13.4 小結 173
第14章 使用AddOn Studio創建基本插件 174
14.1 開始使用AddOn Studio 174
14.2 可視化設計您的界麵 175
14.2.1 使用Toolbox 176
14.2.2 設置屬性 176
14.3 編寫代碼 177
14.3.1 監聽事件 177
14.3.2 自動添加事件處理程序 178
14.3.3 驗證單位是否存在 178
14.3.4 添加“關閉”按鈕的代碼 180
14.4 部署插件 180
14.5 小結 181
第Ⅲ部分 高級插件技術
第15章 利用編程模闆 183
15.1 嚮TargetText添加增益 184
15.1.1 創立基本模闆 185
15.1.2 定義基本的行為 186
15.2 創建增益圖標 188
15.2.1 創建柵格 189
15.2.2 設定錨點 189
15.2.3 創建特定的wrapper函數 190
15.3 更新增益 191
15.3.1 對增益進行遍曆 191
15.3.2 對更新操作進行封裝 193
15.4 小結 194
第16章 脫離XML編寫插件 195
16.1 探索基本的窗體創建 195
16.1.1 使用CreateFontString()函數 196
16.1.2 使用CreateTexture()函數 196
16.2 創建更好的玩傢窗體 197
16.2.1 設置Lua 197
16.2.2 創建窗體 198
16.2.3 使它工作 199
16.3 比較LUA窗體和XML窗體 200
16.4 小結 203
第17章 使用安全模闆 204
17.1 瞭解汙染(Taint) 204
17.1.1 啓用汙染日誌 205
17.1.2 執行汙染 205
17.1.3 變量汙染 207
17.1.4 蔓延的汙染 208
17.1.5 理解被保護的窗體 209
17.1.6 無汙染地設置窗體屬性 209
17.2 使用安全模闆 210
17.2.1 為動作按鈕定義行為 210
17.2.2 做一些簡單的選擇 214
17.3 使您的單位窗體充滿生機 218
17.3.1 移除禁止代碼 218
17.3.2 接受單擊 219
17.3.3 顯示和隱藏窗體 219
17.3.4 設置動作 219
17.4 小結 220
第18章 創建命令 221
18.1 檢測基本的命令 221
18.2 小提示、技巧以及好主意 222
18.2.1 象徵輸入 222
18.2.2 將確認用於模式匹配 223
18.2.3 假跳轉 224
18.2.4 好主意 225
18.3 小結 226
第19章 用函數鈎改變已有行為 227
19.1 什麼是函數鈎 227
19.1.1 修改返迴值 228
19.1.2 函數鈎工具腳本 228
19.1.3 安全地鈎一個函數 230
19.1.4 安全地鈎住腳本 230
19.2 決定什麼時候使用函數鈎 231
19.2.1 理解鈎鏈(Hook Chain) 231
19.2.2 尋找替代 232
19.3 設計插件:MapZoomOut 233
19.3.1 創建定時器 233
19.3.2 創建MapZoomOut 234
19.4 小結 236
第20章 創建自定義圖形界麵 238
20.1 創建圖形的普遍規則 238
20.2 GIMP 238
20.2.1 新建圖片 239
20.2.2 添加圖形組件 239
20.2.3 保存紋理 240
20.3 Adobe Photoshop 240
20.3.1 新建圖像 241
20.3.2 添加圖形組件 241
20.3.3 創建透明度通道 241
20.3.4 保存圖像 242
20.4 Paint Shop Pro 243
20.4.1 新建圖像 243
20.4.2 添加圖像組件 244
20.4.3 創建透明度通道 244
20.4.4 保存圖像 244
20.5 測試紋理 245
20.5.1 沒有按鈕齣現 246
20.5.2 齣現綠色方塊 246
20.6 小結 247
第21章 使窗體移動 248
21.1 拖動和放置 248
21.2 標題區域 248
21.3 使用OnMouseDown和OnMouseUp 249
21.4 使用OnDragStart/OnDragStop 249
21.5 給窗體賦予生命 250
21.6 漸隱 251
21.7 小結 252
第22章 創建滾動窗體 253
22.1 使用滾動結構 255
22.1.1 定義滾動窗體 255
22.1.2 添加子滾動條 255
22.1.3 創建滾動條 257
22.2 創建僞滾動窗體 258
22.2.1 添加滾動條 261
22.2.2 利用鼠標滾輪進行滾動 261
22.3 小結 262
第23章 創建下拉菜單 263
23.1 創建簡單的下拉菜單 263
23.1.1 添加切換按鈕 264
23.1.2 創建下拉窗體 264
23.1.3 初始化下拉菜單 265
23.1.4 設置下拉菜單 267
23.1.5 測試下拉菜單 267
23.2 創建多級下拉菜單 268
23.3 創建高級下拉菜單 269
23.3.1 功能菜單項 270
23.3.2 CheckButton菜單項 270
23.4 調色闆菜單項 271
23.5 自動創建菜單 272
23.6 小結 274
第24章 工具提示 275
24.1 操作工具提示 275
24.1.1 使用“:Set…”函數 275
24.1.2 包含自定義信息的工具提示 276
24.1.3 創建自定義工具提示 277
24.2 解析工具提示數據 278
24.2.1 基礎結構剖析 278
24.2.2 基本掃描循環 278
24.3 小結 279
第25章 使用狀態標題 280
25.1 創建第一個狀態標題 280
25.1.1 重設鼠標單擊 282
25.1.2 通過單擊修改狀態 284
25.2 控製視覺屬性 285
25.2.1 顯示和隱藏子標題 286
25.2.2 重置子標題的位置 286
25.2.3 重新定義子標題和標題的大小 287
25.2.4 重置標題位置 287
25.3 配置其他的屬性 290
25.3.1 改變標題的單位 290
25.3.2 覆蓋綁定鍵 291
25.3.3 在棧中存儲狀態 292
25.4 創建宏序列 293
25.4.1 定義序列 294
25.4.2 設定基本的序列 295
25.4.3 重置您的序列 297
25.5 創建Pie按鈕 299
25.5.1 設定Pie按鈕 299
25.5.2 構建窗體 300
25.5.3 完成行為 302
25.6 小結 303
第26章 驅動狀態改變 304
26.1 使用狀態驅動 304
26.1.1 延時驅動狀態改變 305
26.1.2 理解宏選項 306
26.1.3 閤並情景類型 310
26.1.4 在標題中共享狀態 311
26.2 使用定位模闆 311
26.2.1 觸發定位改變 312
26.2.2 重新映射定位轉換 312
26.3 創建動作彈齣菜單 313
26.3.1 創建窗口 313
26.3.2 添加按鈕 314
26.3.3 定義基本行為 316
26.3.4 應用錨點 320
26.4 小結 322
第27章 利用組模闆創建單位窗體 323
27.1 模闆的工作原理 323
27.2 配置SecureGroupHeader 324
27.3 SecureGroupPetHeader模闆屬性 326
27.4 新建SecureGroupHeader 326
27.5 定義XML模闆 327
27.6 添加行為腳本 328
27.6.1 初始化窗體 329
27.6.2 更新單位信息 329
27.6.3 更新最大生命值 330
27.6.4 添加拖拽支持 331
27.7 測試 BasicUnitFrames 331
27.8 小結 332
第Ⅳ部分 參 考 文 獻
第28章 API參考文獻 334
28.1 API參考約定 334
28.1.1 函數簽名 334
28.1.2 參數和返迴列錶 335
28.2 API 僞類型 335
28.3 按字母排序的API列錶 337
第29章 API目錄 682
29.1 動作 682
29.2 動作欄 683
29.3 插件 683
29.4 競技場 683
29.5 拍賣 684
29.6 銀行 685
29.7 戰場 685
29.8 綁定 687
29.9 增益 687
29.10 攝像機 688
29.11 頻道 688
29.12 聊天 690
29.13 僅在中國使用的函數 690
29.14 客戶端 691
29.15 戰鬥 691
29.16 申訴 691
29.17 容器 691
29.18 手工藝 692
29.19 光標 693
29.20 配置變量 694
29.21 調試 694
29.22 陣營 695
29.23 GM調查 695
29.24 GM 請求 695
29.25 公會 695
29.26 公會銀行 697
29.27 查看 698
29.28 副本 698
29.29 物品欄 699
29.30 物品 699
29.31 物品鏈接 701
29.32 物品文本 701
29.33 知識庫 702
29.34 鍵盤 702
29.35 尋求組隊/尋求成員 703
29.36 拾取 704
29.37 Mac 704
29.38 Macro 705
29.39 郵件 706
29.40 地圖 707
29.41 商人 707
29.42 其他 708
29.43 不同的單擊 709
29.44 金錢 709
29.45 移動 709
29.46 NPC 710
29.47 小隊 710
29.48 寵物 711
29.49 請求 713
29.50 玩傢 713
29.51 配置 715
29.52 PvP 715
29.53 任務 716
29.54 團隊 718
29.55 技能 719
29.56 社交 719
29.57 凹槽 719
29.58 聲音 720
29.59 法術 720
29.60 形態 721
29.61 統計信息 722
29.62 天賦 723
29.63 目標 723
29.64 飛行器 724
29.65 跟蹤 724
29.66 交易 724
29.67 交易技能 725
29.68 訓練師 726
29.69 UI 727
29.70 單位 728
29.71 實用程序 730
29.72 視頻 731
29.73 語音 732
29.74 區域 733
第30章 事件參考 734
第31章 工具集參考 794
31.1 工具集API 794
31.1.1 UIObject 794
31.1.2 FontInstance 794
31.1.3 Region 795
31.1.4 VisibleRegion 796
31.1.5 LayeredRegion 796
31.1.6 Font 797
31.1.7 Texture 797
31.1.8 FontString 798
31.1.9 Frame 798
31.1.10 GameTooltip 801
31.1.11 EditBox 805
31.1.12 Slider 807
31.1.13 Model 807
31.1.14 MessageFrame 808
31.1.15 Cooldown 809
31.1.16 ScrollFrame 809
31.1.17 ColorSelect 810
31.1.18 Minimap 811
31.1.19 SimpleHTML 811
31.1.20 ScrollingMessageFrame 813
31.1.21 StatusBar 814
31.1.22 Button 814
31.1.23 PlayerModel 816
31.1.24 CheckButton 817
31.1.25 TabardModel 817
31.1.26 DressUpModel 818
31.2 處理程序列錶 818
第Ⅴ部分 附錄
附錄A 發布插件 831
附錄B 利用版本控製係統跟蹤
曆史記錄 838
附錄C 最好的代碼風格 841
附錄D 避免常見的錯誤 858
附錄E 使用插件庫 860
附錄F 作者和插件社區 866
附錄G 詞匯錶 868
· · · · · · (
收起)