Ⅰ 求一個Lua編輯器(WOW lua),跟使用方法。
里推薦一個不錯!佔用內存也比較少!適合機子不強的玩家的!
11月11日更新。添加DAB水晶按鈕。趕時髦的ACE2全尺寸通用界面。附傻瓜教程。
11月11日更新:重新製作了.lua文件,採用拼音命名,刪除多餘lua;重新調整了布局,適合各種尺寸顯示器(可能部分還需要微調)。仍然採用DAB動作條(我實在找不到比它功能更全的動作條了)添加了現在時髦的水晶皮膚。(這里感謝德魯魯的指導)。
此界面自認為出彩的地方是小地圖和水晶動作條,小地圖是高亮設計,在飛機上就像看小電視^_^。發現很多人把小地圖改了,浪費了我一片苦心喔。(看圖在最後)
請下載全部11。11的AddOns和WTF文件(除非你喜歡以前的樣式)!!!!!
提供全部適合法師插件下載,其他的ace插件請自行於本論壇尋找,恕不回答與界面無關的問題。
這里衷心感謝觸手黨黨魁的教程(詳見 ... &extra=page%3D1)
感謝熾火大大的腳本修改插件:zScriptBox。
游戲不要選擇窗口模式
游戲請選擇使用ui縮放調節到 .64 即左邊到底
如果你安裝以後界面混亂請自行調整,方法如下:
我只說一點小竅門。(傻瓜教程)
1、下載包包並安裝:清空/World of Warcraft下AddOns和WTF文件夾,請一定要備份哦,然後解壓縮拷貝我的包包(請注意WTF文件夾下有3處地方要改名哦,包里有提示)。
2、進入游戲,在畫面中找到「+」(即zScriptBox),點擊。點了嗎?ok。不要關閉游戲返回桌面,打開文件夾x:\World of Warcraft\Interface\AddOns\oSkin,用記事本打開xxx.lua文件(xxx即中文的「某某某」為我們要改動的界面)。
xxx.lua文件所對應的框體如下:
di.lua=底部信息條
dingbu.lua=頂部框
ditu1.lua、ditu2.lua=地圖的2個邊框
dongzhuotiao.lua=動作條邊框
shifatiao.lua=施法條邊框
touxiang.lua=頭像邊框
youxia.lua=右下框
zhuoxia.lua=左下框
比如:你要修改屏幕頂部框體,就打開dingbu.lua
3、復制裡面的內容,進入游戲粘貼在zScriptBox框里,修改frame:SetWidth(xxxx);frame:SetHeight(xxxx);frame:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOMRIGHT", -xxx, xxx);(xxxx為數字哦,先把數字稍微增減一點哦),點擊zScriptBox框左上角的「RUN」,看到什麼了?^_^。改的不滿意?再改數字試試,直到你滿意為止;注意了:這時你應該先按照你滿意的數字修改xxx.lua文件並保存,然後再回到游戲點擊zScriptBox框上邊的「ReloadUI」,哇!改好了呀!
4、同理你也可以改變其他參數,包括顏色、邊框顏色、框體透明度等等。詳見上面給出的黨魁大大的貼子;
給出黨魁大大的說明:
local frame = CreateFrame("Frame", "MapBar", UIParent)
frame:SetFrameStrata("BACKGROUND")
frame:EnableMouse(false)
frame:SetMovable(false)
frame:SetWidth(135)
frame:SetHeight(135)
frame:ClearAllPoints()
frame:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOMRIGHT", -2, 2)
oSkin:applySkin(frame, 2, nil, nil, 50)
CreatFrame里的是自己給這個frame取的名字, 也是這個lua文件的名字,。
SetFrameStrata是設定frame的層級。有BACKGROUND,LOW,MEDIUM,HIGH和DIALOG幾種, BACKGROUND最低, 一般的frame設成BACKGROUND就行了,當需要用到frame重疊的時候慵陡叩幕嵴謐〔慵兜偷? 這時再改就行了。注意frame的層級不能高於上面放置內容的層級,不然會導致滑鼠操作無效等bug。
EnableMouse跟SetMovable這個顧名思義了吧。一般都是false。
SetWidth和SetHeight分別設置frame的長和寬,單位是pixel。
SetPoint是設置frame的錨點。有TOP,BOTTOM,CENTER,TOPLEFT,TOPRIGHT,BOTTOMLEFT,BOTTOMRIGHT, LEFT和RIGHT8種, 分別對應畫面的8個方位。
applySkin, 把自己建立的這個frame加上oskin的皮膚。4個變數分別是"frame, header, bba, ba, fh"。"frame"是自建frame的名字, bba跟ba分別是改換frame透明度的量, 通常為nil, fh是反光度, 一般設置在0-200之間。
5、關於顏色的改法也很簡單,我是在DAB上先調出顏色參數然後修改core.lua的,見上面給出的黨魁大大的貼子。
6、如果你已經有了oSkin,建議還是使用我提供的oSkin,減少不必要的麻煩。
7、如果你感覺界面里哪個框你不需要,只要打開AddOns\oSkin下oSkin.toc文件在最後部分找到該xxx.lua刪除即可,反之就是增加哦。
很多人一直在問插件設置的問題,這里說明一下有關ace2相關插件的設置。非ace2插件請本站搜索吧。
滑鼠左鍵(也許是右鍵^_^)點擊你信息欄里那個齒輪樣的圖標(這是所有ace2相關插件的控制中心,記住是所有哦,以後插件設置問題都在這里找)--依賴--ace2--插件名稱,或者在此目錄下其他欄目里找,如作者、分類等等。
萬分感謝「輕言淺笑.五區斬魔者 」整理的部分包內插件的設置命令
1. 整合背包:輸入/bagnon設置。
2. 圖標移動:MoveAnything。游戲中按Esc鍵後可見
3.冷卻時間帶閃光提示zcc:
/zcc reset -- 重置
/zcc shine -- 隱藏/顯示閃光
/zcc random -- 自動變化閃光材質
/zcc font <value> -- 設置字體文件, 默認是 Fonts\FZLBJW.TTF
/zcc size <value> -- 字體大小, 取值1~50, 默認是 28
/zcc min <value> -- 少於此值的冷卻不顯示, >0, 默認是 3 秒
/zcc texture <value> -- 閃光材質, 取值1~4, 默認是 1
/zcc scale <value> -- 閃光大小, 取值36~512, 默認是 256
/zcc speed <value> -- 閃光速度, 取值-3~3, 默認是 0
4. 施法進度條:eCastingBar 輸入/ecb設置
5. 技能冷卻:CooldownTimers.輸入/cdt menu 開配置窗口
6. 方形地圖simpleMinimapv
/smm hide可以隱藏或者顯示區域,時間和縮放按鈕
/smm hide time可以把那個顯示時間的太陽/月亮隱藏
/smm show zoom可以隱藏跟顯示縮放按鈕
/smm alpha (0.1 0.2~0.9 1)設置透明度 括弧里的數字自己填一個你滿意的透明度
/smm scale (0.1~0.9 1)設置大小
/smm lock鎖定.輸入一次鎖定,再輸入一次解鎖.
7.buff顯示-ElkBuffBar
輸入/ebb設置 可以看見設置BUFF的參數.
/ebb locked true 鎖定
/ebb locked false 解除鎖定
/ebb width 設置BUFF長
/ebb height 設置BUFF高
8. 查看怪物血量:輸入/MobInfo2
9. 全職業距離監控
/dw lock 鎖定進度條
/dw unlock 解除鎖定
/dw scale 縮放(參數范圍:0.5~3系統默認的是1)
/dw usedefault 使用默認配置(當你不小心將進度條拖到屏幕外面時可以使用此命令使其重新回到屏幕中央)
10. 技能物品冷卻插件 輸入/cdt menu 設置
11. 聊天窗口設置 輸入/sccn設置
輸入/sccn timestamp 關閉時間標簽
移動聊天窗口--滑鼠右鍵點綜合里的解鎖 字體大小也在裡面
12. 法師變羊計時 SheepWatch
使用 /sheepwatch 或 /sw 設置查看當前配置信息使用 /sw status 查看當前配置信息
13 戰斗信息:SCT+SCTD+SpellAlertSCT
SCT 是顯示你受到的傷害
SCTD 是顯示輸出的傷害
SpellAlertSCT 是顯示法術預警
配置命令:
SCT:/sct, /sct menu
SCTD:/sctd,/sctd menu
SpellAlertSCT:/sasct menu
14. 團隊PerfectRaid
團隊:
如果是按姓名排:/praid sort name
如果是按職業排:/praid sort class
如果是按組小隊排:praid sort group
15. 自動解除騎乘、坐下、變形和暗影形態
輸入/ezd設置
16. 傷害統計
輸入/DMSHOW
17. 狐形戰斗條/DHUD
地址:
Ⅱ 求指點.魔獸世界伺服器源代碼怎麼編譯通過
Mangos服務端是一個多線程、邏輯單線程的服務端。每個線程內部都採用循環結構,主線程啟動後將創建多個工作線程,主要包括負責游戲世界運作的核心線程,具有處理用戶請求,執行定時器的能力。其它幾個工作線程還有網路Io,該線程啟動後其內部將使用線程池進行網路Io操作,不間斷地接收數據包,並存儲到相關玩家的消息隊列中,由世界線程進行處理,其它幾個工作線程先不討論,因為今天也是第一次看mangos的源代碼.務端啟動後這些線程將永不停息地工作。世界線程是伺服器的核心,負責處理所有玩家操作請求,定時器、AI等。
void HandleGroupInviteOpcode(WorldPacket& recvPacket);
void (WorldPacket& recvPacket);
void HandleGroupUninviteOpcode(WorldPacket& recvPacket);
void HandleGroupUninviteGuidOpcode(WorldPacket& recvPacket);
void HandleGroupSetLeaderOpcode(WorldPacket& recvPacket);
void HandleGroupDisbandOpcode(WorldPacket& recvPacket);
void HandleOptOutOfLootOpcode(WorldPacket& recv_data);
Ⅲ 請問高手,怎樣開發一個魔獸世界插件軟體編程
Lua 程序設計初步
作者: 沐楓 (第二人生成員)
版權所有轉載請註明原出處
在這篇文章中,我想向大家介紹如何進行Lua程序設計。我假設大家都學過至少一門編程語言,比如Basic或C,特別是C。因為Lua的最大用途是在宿主程序中作為腳本使用的。
Lua 的語法比較簡單,學習起來也比較省力,但功能卻並不弱。
在Lua中,一切都是變數,除了關鍵字。請記住這句話。
I. 首先是注釋
寫一個程序,總是少不了注釋的。
在Lua中,你可以使用單行注釋和多行注釋。
單行注釋中,連續兩個減號"--"表示注釋的開始,一直延續到行末為止。相當於C++語言中的"//"。
多行注釋中,由"--[["表示注釋開始,並且一直延續到"]]"為止。這種注釋相當於C語言中的"/*…*/"。在注釋當中,"[["和"]]"是可以嵌套的。
II. Lua編程
經典的"Hello world"的程序總是被用來開始介紹一種語言。在Lua中,寫一個這樣的程序很簡單:
print("Hello world")
在Lua中,語句之間可以用分號";"隔開,也可以用空白隔開。一般來說,如果多個語句寫在同一行的話,建議總是用分號隔開。
Lua 有好幾種程序控制語句,如:
條件控制:if 條件 then … elseif 條件 then … else … end
While循環:while 條件 do … end
Repeat循環:repeat … until 條件
For循環:for 變數 = 初值,終點值,步進 do … end
For循環:for 變數1,變數2,… ,變數N in表或枚舉函數 do … end
注意一下,for的循環變數總是只作用於for的局部變數,你也可以省略步進值,這時候,for循環會使用1作為步進值。
你可以用break來中止一個循環。
如果你有程序設計的基礎,比如你學過Basic,C之類的,你會覺得Lua也不難。但Lua有幾個地方是明顯不同於這些程序設計語言的,所以請特別注意。
.語句塊
語句塊在C++中是用"{"和"}"括起來的,在Lua中,它是用do 和 end 括起來的。比如:
do print("Hello") end
你可以在 函數 中和 語句塊 中定局部變數。
.賦值語句
賦值語句在Lua被強化了。它可以同時給多個變數賦值。
例如:
a,b,c,d=1,2,3,4
甚至是:
a,b=b,a -- 多麼方便的交換變數功能啊。
在默認情況下,變數總是認為是全局的。假如你要定義局部變數,則在第一次賦值的時候,需要用local說明。比如:
local a,b,c = 1,2,3 -- a,b,c都是局部變數
.數值運算
和C語言一樣,支持 +, -, *, /。但Lua還多了一個"^"。這表示指數乘方運算。比如2^3 結果為8, 2^4結果為16。
連接兩個字元串,可以用".."運處符。如:
"This a " .. "string." -- 等於 "this a string"
.比較運算
< > <= >= == ~=
分別表示 小於,大於,不大於,不小於,相等,不相等
所有這些操作符總是返回true或false。
對於Table,Function和Userdata類型的數據,只有 == 和 ~=可以用。相等表示兩個變數引用的是同一個數據。比如:
a={1,2}
b=a
print(a==b, a~=b) -- true, false
a={1,2}
b={1,2}
print(a==b, a~=b) -- false, true
.邏輯運算
and, or, not
其中,and 和 or 與C語言區別特別大。
在這里,請先記住,在Lua中,只有false和nil才計算為false,其它任何數據都計算為true,0也是true!
and 和 or的運算結果不是true和false,而是和它的兩個操作數相關。
a and b:如果a為false,則返回a;否則返回b
a or b:如果 a 為true,則返回a;否則返回b
舉幾個例子:
print(4 and 5) --> 5
print(nil and 13) --> nil
print(false and 13) --> false
print(4 or 5) --> 4
print(false or 5) --> 5
在Lua中這是很有用的特性,也是比較令人混洧的特性。
我們可以模擬C語言中的語句:x = a? b : c,在Lua中,可以寫成:x = a and b or c。
最有用的語句是: x = x or v,它相當於:if not x then x = v end 。
.運算符優先順序,從高到低順序如下:
^
not - (一元運算)
* /
+ -
..(字元串連接)
< > <= >= ~= ==
and
or
III. 關鍵字
關鍵字是不能做為變數的。Lua的關鍵字不多,就以下幾個:
and break do else elseif
end false for function if
in local nil not or
repeat return then true until while
IV. 變數類型
怎麼確定一個變數是什麼類型的呢?大家可以用type()函數來檢查。Lua支持的類型有以下幾種:
Nil 空值,所有沒有使用過的變數,都是nil。nil既是值,又是類型。
Boolean 布爾值
Number 數值,在Lua里,數值相當於C語言的double
String 字元串,如果你願意的話,字元串是可以包含''字元的
Table 關系表類型,這個類型功能比較強大,我們在後面慢慢說。
Function 函數類型,不要懷疑,函數也是一種類型,也就是說,所有的函數,它本身就是一個變數。
Userdata 嗯,這個類型專門用來和Lua的宿主打交道的。宿主通常是用C和C++來編寫的,在這種情況下,Userdata可以是宿主的任意數據類型,常用的有Struct和指針。
Thread 線程類型,在Lua中沒有真正的線程。Lua中可以將一個函數分成幾部份運行。如果感興趣的話,可以去看看Lua的文檔。
V. 變數的定義
所有的語言,都要用到變數。在Lua中,不管你在什麼地方使用變數,都不需要聲明,並且所有的這些變數總是全局變數,除非,你在前面加上"local"。
這一點要特別注意,因為你可能想在函數里使用局部變數,卻忘了用local來說明。
至於變數名字,它是大小寫相關的。也就是說,A和a是兩個不同的變數。
定義一個變數的方法就是賦值。"="操作就是用來賦值的
我們一起來定義幾種常用類型的變數吧。
A. Nil
正如前面所說的,沒有使用過的變數的值,都是Nil。有時候我們也需要將一個變數清除,這時候,我們可以直接給變數賦以nil值。如:
var1=nil -- 請注意 nil 一定要小寫
B. Boolean
布爾值通常是用在進行條件判斷的時候。布爾值有兩種:true 和 false。在Lua中,只有false和nil才被計算為false,而所有任何其它類型的值,都是true。比如0,空串等等,都是true。不要被C語言的習慣所誤導,0在Lua中的的確確是true。你也可以直接給一個變數賦以Boolean類型的值,如:
varboolean = true
C. Number
在Lua中,是沒有整數類型的,也不需要。一般情況下,只要數值不是很大(比如不超過100,000,000,000,000),是不會產生舍入誤差的。在很多CPU上,實數的運算並不比整數慢。
實數的表示方法,同C語言類似,如:
4 0.4 4.57e-3 0.3e12 5e+20
D. String
字元串,總是一種非常常用的高級類型。在Lua中,你可以非常方便的定義很長很長的字元串。
字元串在Lua中有幾種方法來表示,最通用的方法,是用雙引號或單引號來括起一個字元串的,如:
"This is a string."
和C語言相同的,它支持一些轉義字元,列表如下:
a bell
back space
f form feed
newline
carriage return
horizontal tab
v vertical tab
\ backslash
" double quote
' single quote
[ left square bracket
] right square bracket
由於這種字元串只能寫在一行中,因此,不可避免的要用到轉義字元。加入了轉義字元的串,看起來實在是不敢恭維,比如:
"one line
next line
"in quotes", 'in quotes'"
一大堆的""符號讓人看起來很倒胃口。如果你與我有同感,那麼,我們在Lua中,可以用另一種表示方法:用"[["和"]]"將多行的字元串括起來,如:
page = [[
<HTML>
<HEAD>
<TITLE>An HTML Page</TITLE>
</HEAD>
<BODY>
<A HREF="http://www.lua.org
此網頁不屬於NGA網站,NGA不保證其安全性
繼續訪問 取消 不再提示我[ http://www.lua.org ]">Lua</A>
[[a text between double brackets]]
</BODY>
</HTML>
]]
值得注意的是,在這種字元串中,如果含有單獨使用的"[["或"]]"就仍然得用"["或"]"來避免歧義。當然,這種情況是極少會發生的。
E. Table
關系表類型,這是一個很強大的類型。我們可以把這個類型看作是一個數組。只是C語言的數組,只能用正整數來作索引;在Lua中,你可以用任意類型來作數組的索引,除了nil。同樣,在C語言中,數組的內容只允許一種類型;在Lua中,你也可以用任意類型的值來作數組的內容,除了nil。
Table的定義很簡單,它的主要特徵是用"{"和"}"來括起一系列數據元素的。比如:
T1 = {} -- 定義一個空表
T1[1]=10 -- 然後我們就可以象C語言一樣來使用它了。
T1["John"]={Age=27, Gender="Male"}
這一句相當於:
T1["John"]={} -- 必須先定義成一個表,還記得未定義的變數是nil類型嗎
T1["John"]["Age"]=27
T1["John"]["Gender"]="Male"
當表的索引是字元串的時候,我們可以簡寫成:
T1.John={}
T1.John.Age=27
T1.John.Gender="Male"
或
T1.John{Age=27, Gender="Male"}
這是一個很強的特性。
在定義表的時候,我們可以把所有的數據內容一起寫在"{"和"}"之間,這樣子是非常方便,而且很好看。比如,前面的T1的定義,我們可以這么寫:
T1=
{
10, -- 相當於 [1] = 10
[100] = 40,
John= -- 如果你原意,你還可以寫成:["John"] =
{
Age=27, -- 如果你原意,你還可以寫成:["Age"] =27
Gender=Male -- 如果你原意,你還可以寫成:["Gender"] =Male
},
20 -- 相當於 [2] = 20
}
看起來很漂亮,不是嗎?我們在寫的時候,需要注意三點:
第一,所有元素之間,總是用逗號","隔開;
第二,所有索引值都需要用"["和"]"括起來;如果是字元串,還可以去掉引號和中括弧;
第三,如果不寫索引,則索引就會被認為是數字,並按順序自動從1往後編;
表類型的構造是如此的方便,以致於常常被人用來代替配置文件。是的,不用懷疑,它比ini文件要漂亮,並且強大的多。
F. Function
函數,在Lua中,函數的定義也很簡單。典型的定義如下:
function add(a,b) -- add 是函數名字,a和b是參數名字
return a+b -- return 用來返回函數的運行結果
end
請注意,return語言一定要寫在end之前。假如你非要在中間放上一句return,那麼請寫成:do return end。
還記得前面說過,函數也是變數類型嗎?上面的函數定義,其實相當於:
add = function (a,b) return a+b end
當你重新給add賦值時,它就不再表示這個函數了。你甚至可以賦給add任意數據,包括nil (這樣,你就清除了add變數)。Function是不是很象C語言的函數指針呢?
和C語言一樣,Lua的函數可以接受可變參數個數,它同樣是用"…"來定義的,比如:
function sum (a,b,…)
如果想取得…所代表的參數,可以在函數中訪問arg局部變數(表類型)得到。
如 sum(1,2,3,4)
則,在函數中,a = 1, b = 2, arg = {3, 4}
更可貴的是,它可以同時返回多個結果,比如:
function s()
return 1,2,3,4
end
a,b,c,d = s() -- 此時,a = 1, b = 2, c = 3, d = 4
前面說過,表類型可以擁有任意類型的值,包括函數!因此,有一個很強大的特性是,擁有函數的表,哦,我想更恰當的應該說是對象吧。Lua可以使用面向對象編程了。不信?那我舉例如下:
t =
{
Age = 27
add = function(self, n) self.Age = self.Age+n end
}
print(t.Age) -- 27
t.add(t, 10)
print(t.Age) -- 37
不過,t.add(t,10) 這一句實在是有點土對吧?沒關系,在Lua中,你可以簡寫成:
t:add(10) -- 相當於 t.add(t,10)
G. Userdata 和 Thread
這兩個類型的話題,超出了本文的內容,就不打算細說了。
VI. 結束語
就這么結束了嗎?當然不是,接下來,需要用Lua解釋器,來幫助你理解和實踐了。這篇小文只是幫助你大體了解Lua的語法。如果你有編程基礎,相信會很快對Lua上手了。
就象C語言一樣,Lua提供了相當多的標准函數來增強語言的功能。使用這些標准函數,你可以很方便的操作各種數據類型,並處理輸入輸出。有關這方面的信息,你可以參考《Programming in Lua 》一書,你可以在網路上直接觀看電子版,網址為:http://www.lua.org/pil/index.html
此網頁不屬於NGA網站,NGA不保證其安全性
繼續訪問 取消 不再提示我[ http://www.lua.org/pil/index.html ]
當然,Lua的最強大的功能是能與宿主程序親蜜無間的合作,因此,下一篇文章,我會告訴大家,如何在你的程序中使用Lua語言作為腳本,使你的程序和Lua腳本進行交互。
BBS.NGACN.COM
[姚姚]
[1 樓] 豬小小 2005-06-29 14:11
級別: Veteran
發帖: 721
威望: 13
財富: 13
使用流程
1. 函數的使用
以下程序演示了如何在Lua中使用函數, 及局部變數
例e02.lua
-- functions
function pythagorean(a, b)
local c2 = a^2 + b^2
return sqrt(c2)
end
print(pythagorean(3,4))
運行結果
5
程序說明
在Lua中函數的定義格式為:
function 函數名(參數)
...
end
與Pascal語言不同, end不需要與begin配對, 只需要在函數結束後打個end就可以了.
本例函數的作用是已知直角三角形直角邊, 求斜邊長度. 參數a,b分別表示直角邊長,
在函數內定義了local形變數用於存儲斜邊的平方. 與C語言相同, 定義在函數內的代
碼不會被直接執行, 只有主程序調用時才會被執行.
local表示定義一個局部變數, 如果不加local剛表示c2為一個全局變數, local的作用域
是在最里層的end和其配對的關鍵字之間, 如if ... end, while ... end等。全局變數的
作用域是整個程序。
2. 循環語句
例e03.lua
-- Loops
for i=1,5 do
print("i is now " .. i)
end
運行結果
i is now 1
i is now 2
i is now 3
i is now 4
i is now 5
程序說明
這里偶們用到了for語句
for 變數 = 參數1, 參數2, 參數3 do
循環體
end
變數將以參數3為步長, 由參數1變化到參數2
例如:
for i=1,f(x) do print(i) end
for i=10,1,-1 do print(i) end
這里print("i is now " .. i)中,偶們用到了..,這是用來連接兩個字元串的,
偶在(1)的試試看中提到的,不知道你們答對了沒有。
雖然這里i是一個整型量,Lua在處理的時候會自動轉成字元串型,不需偶們費心。
3. 條件分支語句
例e04.lua
-- Loops and conditionals
for i=1,5 do
print(「i is now 「 .. i)
if i < 2 then
print(「small」)
elseif i < 4 then
print(「medium」)
else
print(「big」)
end
end
運行結果
i is now 1
small
i is now 2
medium
i is now 3
medium
i is now 4
big
i is now 5
big
程序說明
if else用法比較簡單, 類似於C語言, 不過此處需要注意的是整個if只需要一個end,
哪怕用了多個elseif, 也是一個end.
例如
if op == "+" then
r = a + b
elseif op == "-" then
r = a - b
elseif op == "*" then
r = a*b
elseif op == "/" then
r = a/b
else
error("invalid operation")
end
4.試試看
Lua中除了for循環以外, 還支持多種循環, 請用while...do和repeat...until改寫本文中的for程序
BBS.NGACN.COM
[姚姚]
[2 樓] 豬小小 2005-06-29 14:20
級別: Veteran
發帖: 721
威望: 13
財富: 13
數組的使用
1.簡介
Lua語言只有一種基本數據結構, 那就是table, 所有其他數據結構如數組啦,
類啦, 都可以由table實現.
2.table的下標
例e05.lua
-- Arrays
myData = {}
myData[0] = 「foo」
myData[1] = 42
-- Hash tables
myData[「bar」] = 「baz」
-- Iterate through the
-- structure
for key, value in myData do
print(key .. 「=「 .. value)
end
輸出結果
0=foo
1=42
bar=baz
程序說明
首先定義了一個table myData={}, 然後用數字作為下標賦了兩個值給它. 這種
定義方法類似於C中的數組, 但與數組不同的是, 每個數組元素不需要為相同類型,
就像本例中一個為整型, 一個為字元串.
程序第二部分, 以字元串做為下標, 又向table內增加了一個元素. 這種table非常
像STL裡面的map. table下標可以為Lua所支持的任意基本類型, 除了nil值以外.
Lua對Table佔用內存的處理是自動的, 如下面這段代碼
a = {}
a["x"] = 10
b = a -- `b' refers to the same table as `a'
print(b["x"]) --> 10
b["x"] = 20
print(a["x"]) --> 20
a = nil -- now only `b' still refers to the table
b = nil -- now there are no references left to the table
b和a都指向相同的table, 只佔用一塊內存, 當執行到a = nil時, b仍然指向table,
而當執行到b=nil時, 因為沒有指向table的變數了, 所以Lua會自動釋放table所佔內存
3.Table的嵌套
Table的使用還可以嵌套,如下例
例e06.lua
-- Table 『constructor』
myPolygon = {
color=「blue」,
thickness=2,
npoints=4;
{x=0, y=0},
{x=-10, y=0},
{x=-5, y=4},
{x=0, y=4}
}
-- Print the color
print(myPolygon[「color」])
-- Print it again using dot
-- notation
print(myPolygon.color)
-- The points are accessible
-- in myPolygon[1] to myPolygon[4]
-- Print the second point』s x
-- coordinate
print(myPolygon[2].x)
程序說明
首先建立一個table, 與上一例不同的是,在table的constructor裡面有{x=0,y=0},
這是什麼意思呢? 這其實就是一個小table, 定義在了大table之內, 小table的
table名省略了.
最後一行myPolygon[2].x,就是大table裡面小table的訪問方式.
BBS.NGACN.COM
[姚姚]
[3 樓] yhcs 2005-06-29 14:25
級別: 警告等級2
發帖: 89
威望: -9
這個要頂,好文收藏!
[4 樓] 豬小小 2005-06-29 14:38
級別: Veteran
發帖: 721
威望: 13
財富: 13
其他還有一些高級編寫資料,但在魔獸限制255字的情況下估計也用不到。所以這里不貼了。
BBS.NGACN.COM
[姚姚]
[5 樓] camus 2005-06-29 21:52
級別: Civilian
發帖: 171
威望: 1
財富: 1
變數的問題:
(1)lua似乎是不需要聲明變數的,想用哪個變數那麼用的時候直接賦值就可以了。根據賦值的類型那麼變數就被自動定了類型了。 這樣說對么? (當然,後面文章說到了這個例子:雖然這里i是一個整型量,Lua在處理的時候會自動轉成字元串型,不需偶們費心。 -_-)
(2)
文章里這樣說:假如你要定義局部變數,則在第一次賦值的時候,需要用local說明。
那麼我在寫宏的時候經常直接賦值比如 mp=UnitMana("player")/UnitManaMax("player") ,那麼這個mp就成了全局變數咯?
+++++++++++++++++++++++
邏輯運算的問題
(2)一般寫宏的時候,and,or都有比較運算,所以還能理解,這里直接兩個數值進行邏輯運算有點懵了,
沒繞明白,比如說第一句就不太清楚,有false和nil的都清楚,因為給出了規則。樓主能解釋一下么?
(3)
a and b:如果a為false,則返回a;否則返回b
a or b:如果 a 為true,則返回a;否則返回b
這個規則怎麼解釋,還是說lua就是這樣規定的沒什麼解釋的
++++++++++++++++++++
結構的問題
(4)文章中說到了if...then....elseif....
可是現在寫宏的時候很多人是if....then....if....then....if...這樣嵌套的,也符合標准吧?
++++++++++++++++++
最後,謝謝樓主提供好文,,,,
BBS.NGACN.COM
i miss you so much,that's true,,,,
[6 樓] 豬小小 2005-06-30 01:39
級別: Veteran
發帖: 721
威望: 13
財富: 13
1、沒錯,所有未經聲明的變數都是全局的。。。。甚至包括你在function里定義的變數。我已經實驗過,比如在一個宏里定義了一個變數a並賦值1,運行後,如果在另一個宏里也使用了變數a,宏里要是不重新賦值就調用的話,a的值就會還是你之前所使用的那個宏里賦的值1。
但一般不用擔心沖突,因為大多情況下,大多人在一個宏內使用一個新變數都會習慣重新賦值,一般不會引起太大的問題。但如果你是真正需要一些全局變數並能方便的識別他,可以這樣,在宏中把作為局部變數的都用小寫字母,要用做全局變數的用大寫字母,因為Lua是嚴格區分大小寫的,所以這樣你就可以方便使用局部變數和全局變數了。
2、3、這個的確有點讓人糊塗。。。我來這樣解釋把,其實你說的比較運算就是邏輯運算,都是一樣。只是Lua擴大了and和or 的使用范圍。
其實通常and和or所能使用的范圍僅僅是布爾型的數值,所能得到的結果也是只有布爾型。即and和or只能對false和true進行運算,其結果也同樣不是false就是true。運算情況如下:
false and true = false true and false= false
false and false = false true and true = true
false or true = true true or false = true
false or false = false true or true = true
但Lua擴大了and和or 所能運算的數據類型,為了使其也能運算其他類型的數據。所以才做出了這個方便的定義(當然,你說糊塗的定義也行)
a and b:如果a為false,則返回a;否則返回b
a or b:如果 a 為true,則返回a;否則返回b
現在我們可以用false和true替換a和b運算試試:
a=false b=true
false and true = false
false or true = true
a=true b=false
true and false = false
true or false = true
a=false b=false
false and false =false
false or false = false
a=true b=true
true and true = true
true or true =true
看到了把,其實結果和我們之前正常的邏輯運算是一樣的。Lua僅僅是擴大的and和or所能使用的范圍而已。因為Lua本身對數據類型的定義沒有苛刻的要求,所以她的運算也要能適應各種類型的數據才方便。(其實這也算不上什麼解釋,她就是這樣的定義的,方便還是糊塗就是一念之間,哈哈)
3、當然符合標准啊,嵌套歸嵌套的用法,elseif歸elseif。這兩種用法是不同的啊,雖然結果可能一樣。但有些情況嵌套方便就用嵌套,elseif方便就用elseif羅。
BBS.NGACN.COM
[姚姚]
[7 樓] 夏日晴天 2005-06-30 07:12
級別: 警告等級1
發帖: 481
威望: -3
瘋掉了。。。。。。。。。。。。。。。。。。。難道只有電腦高手才能玩這個游戲啊
BBS.NGACN.COM
三大願望:[七區不卡][跨服戰場不排隊][9城開TBC]
[8 樓] szsharo 2005-06-30 09:47
級別: Civilian
發帖: 44
威望: 0
下面是引用夏日晴天於2005-06-30 07:12發表的:
瘋掉了。。。。。。。。。。。。。。。。。。。難道只有電腦高手才能玩這個游戲啊
wow的精髓就是保證各個不同的人群都能找到自己的樂趣,
電腦高手未必有泡菜的鍵盤熟練,泡菜也未必知道插件和宏~ 並不妨礙各自的樂趣~
只要表干擾別人就好~
暴雪是一幫天才的組合,偶崇拜了10年了:P
樓主是高手,難得還這么有耐心,PFPF~
本想把自己的整合插件效果圖發上來的,實在是懶得去找圖片空間,以後吧~
我用的是大腳+flexbar+titan+Gather+supermacro+LAX+moveanything+...
昨天大腳更新了,偶點開了新功能,被告知interface使用超過20M內存,強制退出遊戲~
@@ 至今大汗不已~~~
另,使用SuperMacro這個插件可以允許將一個宏腳本的最長位元組增加到1023,
允許將快捷鍵直接綁定到宏上(而不是拉到動作條後再綁定),允許使用其它宏的名稱來
調用其它的宏。安裝後即可使用。 可以解決小小MM說的位元組限制問題。
[ 此貼被szsharo在2005-07-24 10:00重新編輯 ]
BBS.NGACN.COM
術士素優雅高貴的職業,尤其素帥氣的侏儒術士~:P
[9 樓] 最接近神的牛 2005-06-30 10:35
級別: Civilian
發帖: 5
威望: 1
財富: 1
高人
Ⅳ 魔獸世界TMW插件怎麼導入代碼
1、復制別人給你的TMW的代碼,可以使用ctrl+C。
2、登陸你的魔獸世界,打開聊天欄,然後輸入/TMW,即可打開控制面板面板。
3、進入控制面板後,在下方有一個長條輸入框,使用ctrl+V將別人給你的代碼進行粘貼。
4、點擊輸入框邊上的導入/導出/還原,選擇導入部分中的來自配置文件。
5、字元串一般會帶有發布者的賬號名稱,選擇他的那個人物-伺服器的部分,右邊會彈出一排選項,選擇創建新的配置文件,完成導入。
源代碼主要功用有如下2種作用:
生成目標代碼,即計算機可以識別的代碼。
對軟體進行說明,即對軟體的編寫進行說明。為數不少的初學者,甚至少數有經驗的程序員都忽視軟體說明的編寫,因為這部分雖然不會在生成的程序中直接顯示,也不參與編譯。但是說明對軟體的學習、分享、維護和軟體復用都有巨大的好處。因此,書寫軟體說明在業界被認為是能創造優秀程序的良好習慣,一些公司也硬性規定必須書寫。
需要指出的是,源代碼的修改不能改變已經生成的目標代碼。如果需要目標代碼做出相應的修改,必須重新編譯。
Ⅳ 誰會反編譯魔獸世界服務端啟動文件TrinityCore.exe
這都可以?學習下
Ⅵ 誰能魔獸世界T端或M端源碼下載地址和簡單編譯方法
T端,M端源碼都沒有免費的
Ⅶ 請問如何編寫魔獸世界插件
1。Lua + Xml
2。Notepad++ 或者 EmEditor 或者 UltraEdit
3。www.lua.org
Ⅷ 魔獸世界用宏編的循環命令給個正確格式
具體如下:
參數說明:順序釋放法術,以","隔開。
舉例 /castsequence A,B,C,D。
按宏為順序釋放A,B,C,D循環。
計算機科學里的宏是一種抽象(Abstraction),它根據一系列預定義的規則替換一定的文本模式。解釋器或編譯器在遇到宏時會自動進行這一模式替換。對於編譯語言,宏展開在編譯時發生,進行宏展開的工具常被稱為宏展開器。
宏這一術語也常常被用於許多類似的環境中,它們是源自宏展開的概念,這包括鍵盤宏和宏語言。絕大多數情況下,「宏」這個詞的使用暗示著將小命令或動作轉化為一系列指令。
故事背景(安其拉入侵):
世界差一點就毀滅於黑龍王子奈法利安之手,聯盟的英雄拯救了溫德索爾元帥,揭露了實際上是黑龍公主奧妮克希亞的卡特拉娜的真面目,暴風城上下重歸一心,聯盟凝聚得更加牢固。
部落的勇士深入黑石山,勇敢的擊敗了炎魔,最後聯合聯盟的英雄在黑石山上層的黑翼之巢擊敗了黑龍王子奈法利安,似乎世界重歸與和平。
但是遠在卡利姆多大陸最南端的希利蘇斯沙漠,塞納里奧議會的前哨戰發現沙漠中開始出現異動,大量的異種蟲從地下湧出,一群信仰上古之神的暮光信徒開始出現,這情景不由得讓人想起當年幾乎將艾澤拉斯毀於一旦的流沙之戰,身為塞納里奧議會以及暗夜精靈大德魯伊的范達爾·鹿盔再也按耐不住。
流沙之戰中他失去了唯一的兒子,最後依靠3色巨龍作為誘餌,才將那些自稱其拉蟲族的恐怖生物永遠封印在希利蘇斯巨大的甲蟲之牆之後,難道歷史又要重演?不,這一次絕不,我們的冒險者將收集當年被損壞的流沙節杖的碎片,重新開啟甲蟲之牆,我們必將深入安其拉神廟,要與這些其拉蟲族以及他們背後的幕後黑手做一次真正的了斷。
於是有史以來,部落和聯盟第一次真正意義上摒棄前嫌,共同籌措戰備物資,齊心合力尋找流沙節杖的碎片,在災難面前,種族的利益,集體的矛盾,個人的恩怨都是那麼微不足道,烈日之下,希利蘇斯沙漠,英雄手持流沙節杖敲響了那禁閉千年的銅鑼,戰爭,就此開始。
Ⅸ wow 總是提示我插件大量錯誤怎麼辦
wow 總是提示插件大量錯誤代表編譯沒有成功;
解決方式:刪除不必要的插件;
編譯程序的語法分析器以單詞符號作為輸入,分析單詞符號串是否形成符合語法規則的語法單位,如表達式、賦值、循環等,最後看是否構成一個符合要求的程序,按該語言使用的語法規則分析檢查每條語句是否有正確的邏輯結構,程序是最終的一個語法單位。編譯程序的語法規則可用上下文無關文法來刻畫。
自上而下分析法和自下而上分析法。自上而下就是從文法的開始符號出發,向下推導,推出句子。而自下而上分析法採用的是移進歸約法,基本思想是:用一個寄存符號的先進後出棧,把輸入符號一個一個地移進棧里,當棧頂形成某個產生式的一個候選式時,即把棧頂的這一部分歸約成該產生式的左鄰符號。
(9)魔獸世界怎麼編譯擴展閱讀:
如果編譯過程中發現源程序有錯誤,編譯程序應報告錯誤的性質和錯誤的發生的地點,並且將錯誤所造成的影響限制在盡可能小的范圍內,使得源程序的其餘部分能繼續被編譯下去,有些編譯程序還能自動糾正錯誤,這些工作由錯誤處理程序完成。
需要注意的是,一般上編譯器只做語法檢查和最簡單的語義檢查,而不檢查程序的邏輯。
Ⅹ 魔獸世界
轉來的希望對你有幫助
Runtime是運行時的意思,Runtime Error就是運行時錯誤,就是在運行期間出現的錯誤。
webopedia 關於 運行時錯誤的定義:
http://www.webopedia.com/TERM/r/runtime_error.html
An error that occurs ring the execution of a program. In contrast, compile-time errors occur while a program is being compiled. Runtime errors indicate bugs in the program or problems that the designers had anticipated but could do nothing about. For example, running out of memory will often cause a runtime error.(運行時錯誤是程序執行期間發生的錯誤,它不同於編譯期間發生的錯誤.運行時錯誤可能是程序中的毛病引起的,也可能程序並無錯誤,例如機器存儲器不夠引起)
Note that runtime errors differ from bombs or crashes in that you can often recover gracefully from a runtime error.(運行時錯誤不同於炸彈或系統垮掉,運行時錯誤一般不影響操作系統運行)
具體的運行錯誤,要參照錯誤信息,分析後,想辦法解決.
主要是 用到 IE的時候就出現這個 ,我平時用myie2。
上網查看了一些東西後 ,自己用 roguecleaner的軟體掃描了一下,把一些垃圾廣告插件都去了。就 OK了,^_^ 。
特別是出現桌面文件夾打不開的時候嚇死我了,我剛重裝系統,丟了些資料。
RUNTIME ERROR SSS AT III:MMM
其中,SSS是運行錯誤代碼,III是錯誤發生的程序段,MMM是錯誤地址。
DOS 錯誤代碼:
1 無效DoS功能號
2 文件末找到
3 路徑未找到
4 打開文件過多
5 禁止文件存取
6 無效文件句柄
12 無效文件存取代碼
15 無效驅動器號
16 不能刪除當前日錄
17 不能跨驅動器改文件名
I/O錯誤
100 磁碟讀錯誤
101 磁碟寫錯誤
102 文件變數末賦值
103 文件未打開
104 文件未用輸入方式打開
105 文件末用輸出方式打開
106 無效數字格式
嚴重錯誤
150 磁碟防寫
15l 未知單元
152 驅動器未准備好
153 未知命令
154 數據CRC校驗錯
155 驅動器請求的結構長度錯
156 磁碟定位錯
157 未知媒介類型
158 扇區末找到
159 列印機缺紙
160 設備寫失敗
161 設備讀失敗
162 硬體故障
致命錯誤
200 被零除
201 范圍檢查錯
202 堆棧溢出錯
203 堆溢出錯
204 無效指針操作
205 浮點上溢出
206 浮點下溢出
207 無效浮點運算
208 未安裝覆蓋管理程序
209 覆蓋文件讀錯
210 對象未初始化
211 調用抽象方法
212 流登計錯
213 集合下標越界
214 集合溢出
下面列出在編譯程序時可能出現的錯誤,在集成環境下,Turbo Pascal將自動載入源程序並定位於出錯處。
1 內存溢出
2 缺標識符
3 標識符未定義
4 標識符重定義
5 語法錯誤
6 實型常量錯
7 整型常量錯
8 字元串常量跨行
9 文件嵌套過多
10 非正常文件結束
11 行過長
12 缺類型標識符
13 打開文件過多
14 無效文件名
15 文件未找到
16 磁碟滿
17 無效編譯指示
18 文件過多
19 指針定義中未定義類型
20 缺變數標識符
21 類型錯誤
22 結構過長
24 文件分量不能為文件
25 無效字元串長度
26 類型不匹配
27 無效子界基類型
28 下界大於上界
29 缺有序類型
30 缺整型常數
31 缺常數
32 缺整型或實型常數
33 缺指針類型標識符
34 無效的函數結果類型
35 缺標號標識符
36 缺BEGIN
37 缺END
38 缺整型表達式
39 缺有序表達式
40 缺布爾表達式
41 操作數類型與操作符不匹配
42 表達式錯
43 非法賦值
44 缺欄位標識符
45 目標文件過長
46 未定義外部標識符
47 無效*.OBJ文件記錄
48 代碼段過長
49 數據段過長
50 缺DO
51 無效PUBLIC定義
52 無效EXTRN定義
53 EXTRN定義過多
54 缺0F
55 缺INTERFACE
56 無效重定位引用
57 缺THEN
58 缺T0或DOWNTO
59 未定義的向前引用
60 過程過多
61 無效類型轉換
62 被零除D
63 無效文件類型
64 不能讀寫該類型的變數
65 缺指針變數
66 缺字元串變數
67 缺字元串表達式
68 單元循環引用
69 單元名不匹配
70 單元版本不匹配
71 單元重名
72 單元文件格式錯誤
73 缺IMPLEMENTATl0N
74 常數與CASE類型不相匹配
75 缺記錄變數
76 常數越界
77 缺文件變數
78 缺指針變數
79 缺整型或實型表達式
80 標號不在當前塊中
81 標號已定義
82 標號未定義
83 無效參數
84 缺UNIT
85 缺「;」
86 缺「:」
87 缺「,」
88 缺「(」
89 缺「)」
90 缺「=」
91 缺「:=」
92 缺「[」或「(.」
93 缺「]」或「.)」
94 缺「.」
96 變數過多
97 無效FOR控制變數
98 缺整型變數
99 此處不允許用文件和
100字元串長度不匹配
101無效字順序
102缺字元串常數
103缺整型或實型變數
104缺有序變數
105INLINE錯
106缺字元表達式
107重定位項過多
112CASE常量越界
113語句錯
114不能調用中斷過程
116必須在8087方式下編譯
117末找到目標地址
118此處不允許包含文件
120缺NIL
121無效限定符
122無效變數引用
123符號過多
124語句部分過長
126文件必須為變數參數
127條件符號過多
128條件指令錯位
130初始條件定義錯
13l過程和函數頭與前面定義的不匹酉
132嚴重磁碟錯誤
133不能計算該表達式
134表達式錯誤結束
135無效格式說明符
136無效間接引用
137此處不允許結構變數
138無SYSTEM單元不能計算
139不能存取該符號
140無效浮點運算
141不能將覆蓋編譯至內存
142缺過程和函數變數
143無效過程或函數引用
144不能覆蓋該單元
147缺對象類型
148不允許局部對象類型
149缺VIRTUAL
150缺方法標識符
151不允許虛擬構造方法
152缺構造方法標識符
153缺釋放方法標識符
154FAIL只允許在構造方法內使用
155無效的操作符和操作數組合
156缺內存引用
157不能加減可重定位符號
158無效寄存器組合
159未激活286/287指令
160無效符號引用
161代碼生成錯
162缺ASM
解決方法,重裝DOS或系統