Myslot 3.35 CWOW Bugfix 2

感谢 lahai99 帮助发现 bug

下载MySlot

 

感激 这么长时间 各种 用户的 支持

另外 4.x

http://tgic.me/2010/12/26/myslot-4-0-bug-fix/ 可以在这里找到

Read More

WelTo for 3.xx 4.xx

这个老东西 是1.0 时代

我做 知会 时候 开发的 也使我第一个插件

2.0 时代 升级为 ACE2 插件 后来 就忘记了……

下载 WelTo

值得一提的是 新的 WelTo 将欢迎词 从core.lua 移动到  text.lua

这样添加和修改 就不会 影响主程序了

居然还有人 喜欢他……

升级 升级 我国服我2B

Read More

我差点就去写lua了…nga

看到 nga 招 lua 打工仔
百感交集

我就是一个屁民
自学了 lua 给wow写扩展 battleinfo 和 myslot 比较成功
积累了一些用户
后来 愚昧的 大学教育结束了
本来也想跟 duowan 沟通了一下
我进城 务工

开始去 面试c++ 一老板 感觉不错 一问 我说我想做 网络…… 就黄了
第一次 面试

lua 这样的 小语种 我非常喜欢 小而精
不过 …… 找不到饭吃 最后 只能去comsenz找了一个 php 的工作 混饭吃
现在 也就 这样了
基本 没多少机会写lua了啊

人生就这样了 为了 做目标 需要 作出牺牲
如果 nga 早写 招lua 打工的就好了……

Read More

closure

javascript中的这个概念 不好理解
终于 我通过lua 好像理解了他的概念

lua把一切算作 变量是一个简单有效的行为
_G 不就是window么……
哈哈

Read More

目前我思考时间最长的程序 lua base64与哈夫曼的结合

想了 大约 2个月

我效果非常满意

humbase64.lua

–[[

haffman compressed spical base64 by T.G.(farmer1992@gmail.com)
QQ 22267156
]]

local base64chars = {[0]=’A',[1]=’B',[2]=’C',[3]=’D',[4]=’E',[5]=’F',[6]=’G',[7]=’H',[8]=’I',[9]=’J',[10]=’K',[11]=’L',[12]=’M',[13]=’N',[14]=’O',[15]=’P',[16]=’Q',[17]=’R',[18]=’S',[19]=’T',[20]=’U',[21]=’V',[22]=’W',[23]=’X',[24]=’Y',[25]=’Z',[26]=’a',[27]=’b',[28]=’c',[29]=’d',[30]=’e',[31]=’f',[32]=’g',[33]=’h',[34]=’i',[35]=’j',[36]=’k',[37]=’l',[38]=’m',[39]=’n',[40]=’o',[41]=’p',[42]=’q',[43]=’r',[44]=’s',[45]=’t',[46]=’u',[47]=’v',[48]=’w',[49]=’x',[50]=’y',[51]=’z',[52]=’0′,[53]=’1′,[54]=’2′,[55]=’3′,[56]=’4′,[57]=’5′,[58]=’6′,[59]=’7′,[60]=’8′,[61]=’9′,[62]=’-',[63]=’_'}
local base64bytes = {['-']=”111110″,['_']=”111111″,['0']=”110100″,['1']=”110101″,['2']=”110110″,['3']=”110111″,['4']=”111000″,['5']=”111001″,['6']=”111010″,['7']=”111011″,['8']=”111100″,['9']=”111101″,['A']=”000000″,['a']=”011010″,['B']=”000001″,['b']=”011011″,['C']=”000010″,['c']=”011100″,['D']=”000011″,['d']=”011101″,['E']=”000100″,['e']=”011110″,['F']=”000101″,['f']=”011111″,['G']=”000110″,['g']=”100000″,['H']=”000111″,['h']=”100001″,['I']=”001000″,['i']=”100010″,['J']=”001001″,['j']=”100011″,['K']=”001010″,['k']=”100100″,['L']=”001011″,['l']=”100101″,['M']=”001100″,['m']=”100110″,['N']=”001101″,['n']=”100111″,['O']=”001110″,['o']=”101000″,['P']=”001111″,['p']=”101001″,['Q']=”010000″,['q']=”101010″,['R']=”010001″,['r']=”101011″,['S']=”010010″,['s']=”101100″,['T']=”010011″,['t']=”101101″,['U']=”010100″,['u']=”101110″,['V']=”010101″,['v']=”101111″,['W']=”010110″,['w']=”110000″,['X']=”010111″,['x']=”110001″,['Y']=”011000″,['y']=”110010″,['Z']=”011001″,['z']=”110011″}

local haffman_t={[0]=”00″,[1]=”01″,[2]=”100″,[3]=”101″,[4]=”1100″,[5]=”1101″,[6]=”11100″,[7]=”11101″,[8]=”111100″,[9]=”111101″,[10]=”1111100″,[11]=”1111101″,[12]=”11111100″,[13]=”11111101″,[14]=”111111100″,[15]=”111111101″,}

– enc begin

local function tobase64char(num)
while string.len(num)~=6 do
num=num..”1″
end
return base64chars[(tonumber(num,2))]
end

local function enc(data)

local count_t={[1]={n=”0″,p=0},[2]={n=”1″,p=0},[3]={n=”2″,p=0},[4]={n=”3″,p=0},[5]={n=”4″,p=0},[6]={n=”5″,p=0},[7]={n=”6″,p=0},[8]={n=”7″,p=0},[9]={n=”8″,p=0},[10]={n=”9″,p=0},[11]={n=”a”,p=0},[12]={n=”b”,p=0},[13]={n=”c”,p=0},[14]={n=”d”,p=0},[15]={n=”e”,p=0},[16]={n=”f”,p=0},}
local data_str={}

for i=1,string.len(data) do
n=string.byte(data,i)
a=n%16
b=(n-a)/16

count_t[a+1].p=count_t[a+1].p+1
count_t[b+1].p=count_t[b+1].p+1

data_str[#data_str+1]=b
data_str[#data_str+1]=a
end

table.sort(count_t,function(a,b) return a.p>b.p end)

local out_str={}
local this_haffman_t={}

for i,v in ipairs(count_t) do
this_haffman_t[tonumber(v.n,16)]=haffman_t[i-1]
out_str[#out_str+1]=v.n
end

for i,v in ipairs(data_str) do
data_str[i]=this_haffman_t[v]
end

local bin_str=table.concat(data_str)

for i=1,string.len(bin_str),6 do
local bin6=string.sub(bin_str,i,i+5)
out_str[#out_str+1]=tobase64char(bin6)
end

return table.concat(out_str)
end

– enc end

– dec begin

local function readabit(s)
local i=0
return function()
i=i+1
return string.sub(s,i,i) or “”
end
end

local function getxbit(r,h)
local t=”"
while(r()==”1″) do
t=t..”1″
end

t=t..”0″..r()
return h[t] or “X”
end

local function dec(data)

local this_haffman_t={}

for i=1,16 do
this_haffman_t[haffman_t[i-1]]=(string.sub(data,i,i))
end

local t={}
for i=17,string.len(data) do
t[#t+1]=base64bytes[(string.sub(data,i,i))]
end

local reader=readabit(table.concat(t))

local temp=getxbit(reader,this_haffman_t)

local out_str={}

while temp~=”X” do
out_str[#out_str+1]=string.char(tonumber(temp..getxbit(reader,this_haffman_t),16))
temp=getxbit(reader,this_haffman_t)
end

return table.concat(out_str)
end

HumBase64={
enc=enc,
dec=dec,
}

Read More

我的BASE64

想法很好啊
因为我发现 Base64 加密字符会引起字符更长
这是必然的 因为用64个字符表示 所有字符 就一定会更长

所以我设计了一个 改进的base64 期望能减少base64后的长度
原理是 哈夫曼 压缩

#1
MY:15462
BASE64:17388
ORG:13040

#2
MY:630
BASE64:712
ORG:533

#3
MY:3219
BASE64:3596
ORG:2696

#4
MY:15915
BASE64:18124
ORG:13592

#5
MY:35638
BASE64:34820
ORG:26114

经过几轮测试 好思想是起作用了……
居然还有输给 原base64的时候

看来还得努力啊
压缩不容易啊
不过霍夫曼这家伙 …… 是个老头

Read More

基本函数库为Lua内置的函数库

  【IT168 技术文档】基本函数库为Lua内置的函数库,不需要额外装载

  1、assert (v [, message])

  功能:相当于C的断言,

  参数:

  v:当表达式v为nil或false将触发错误,

  message:发生错误时返回的信息,默认为”assertion failed!”

  2、collectgarbage (opt [, arg])

  功能:是垃圾收集器的通用接口,用于操作垃圾收集器

  参数:

  opt:操作方法标志

  ”Stop”: 停止垃圾收集器

  ”Restart”: 重启垃圾收集器

  ”Collect”: 执行一次全垃圾收集循环

  ”Count”: 返回当前Lua中使用的内存量(以KB为单位)

  ”Step”: 单步执行一个垃圾收集. 步长 “Size” 由参数arg指定 (大型的值需要多步才能完成),如果要准确指定步长,需要多次实验以达最优效果。如果步长完成一次收集循环,将返回True

  ”Setpause”: 设置 arg/100 的值作为暂定收集的时长

  ”Setstepmul”: 设置 arg/100 的值,作为步长的增幅(即新步长=旧步长*arg/100)

  3、dofile (filename)

  功能:打开并且执行一个lua块,当忽略参数filename时,将执行标准输入设备(stdin)的内容。返回所有块的返回值。当发生错误时,dofile将错误反射给调用者

  注:dofile不能在保护模式下运行

  4、error (message [, level])

  功能:终止正在执行的函数,并返回message的内容作为错误信息(error函数永远都不会返回)

  通常情况下,error会附加一些错误位置的信息到message头部.

  Level参数指示获得错误的位置,

  Level=1[默认]:为调用error位置(文件+行号)

  Level=2:指出哪个调用error的函数的函数

  Level=0:不添加错误位置信息

  5、_G全局环境表(全局变量)

  功能:记录全局环境的变量值的表 _G._G = _G

  6、getfenv(f)

  功能:返回函数f的当前环境表

  参数:f可以为函数或调用栈的级别,级别1[默认]为当前的函数,级别0或其它值将返回全局环境_G

  7、getmetatable(object)

  功能:返回指定对象的元表(若object的元表.__metatable项有值,则返回object的元表.__metatable的值),当object没有元表时将返回nil

  8、ipairs (t)

  功能:返回三个值 迭代函数、表、0

  多用于穷举表的键名和键值对

  如:for i,v in ipairs(t) do

  

  end

  每次循环将索引赋级i,键值赋给v

  注:本函数只能用于以数字索引访问的表 如:t={“1″,”cash”}

  9、load (func [, chunkname])

  功能:装载一个块中的函数,每次调用func将返回一个连接前一结的字串,在块结尾处将返回nil

  当没有发生错误时,将返回一个编译完成的块作为函数,否则返回nil加上错误信息,此函数的环境为全局环境

  chunkname用于错误和调试信息

  10、loadfile ([filename])

  功能:与load类似,但装载的是文件或当没有指定filename时装载标准输入(stdin)的内容

  11、loadstring (string [, chunkname])

  功能:与load类似,但装载的内容是一个字串

  如:assert(loadstring(s))()

  12、next (table [, index])

  功能:允许程序遍历表中的每一个字段,返回下一索引和该索引的值。

  参数:table:要遍历的表

  index:要返回的索引的前一索中的号,当index为nil[]时,将返回第一个索引的值,当索引号为最后一个索引或表为空时将返回nil

  注:可以用next(t)来检测表是否为空(此函数只能用于以数字索引的表与ipairs相类似)

  13、ipairs (t)

  功能:返回三个值 next函数、表、0

  多用于穷举表的键名和键值对

  如:for n,v in pairs(t) do

  

  end

  每次循环将索引赋级i,键值赋给v

  注:本函数只能用于以键名索引访问的表 如:t={id=”1″,name=”cash”}

  14、pcall (f, arg1, ···)

  功能:在保护模式下调用函数(即发生的错误将不会反射给调用者)

  当调用函数成功能返回true,失败时将返回false加错误信息

  15、print (···)

  功能:简单的以tostring方式格式化输出参数的内容

  16、rawequal (v1, v2)

  功能:检测v1是否等于v2,此函数不会调用任何元表的方法

  17、rawget (table, index)

  功能:获取表中指定索引的值,此函数不会调用任何元表的方法,成功返回相应的值,当索引不存在时返回nil

  注:本函数只能用于以数字索引访问的表 如:t={“1″,”cash”}

  18、rawset (table, index, value)

  功能:设置表中指定索引的值,此函数不会调用任何元表的方法,此函数将返回table

  19、select (index, ···)

  功能:当index为数字将返回所有index大于index的参数:如:select(2,”a”,”b”) 返回 “b”

  当index为”#”,则返回参数的总个数(不包括index)

  20、setfenv (f, table)

  功能:设置函数f的环境表为table

  参数:f可以为函数或调用栈的级别,级别1[默认]为当前的函数,级别0将设置当前线程的环境表

  21、setmetatable (table, metatable)

  功能:为指定的table设置元表metatable,如果metatable为nil则取消table的元表,当metatable有__metatable字段时,将触发错误

  注:只能为LUA_TTABLE 表类型指定元表

  22、tonumber (e [, base])

  功能:尝试将参数e转换为数字,当不能转换时返回nil

  base(2~36)指出参数e当前使用的进制,默认为10进制,如tonumber(11,2)=3

  23、tostirng(e)

  功能:将参数e转换为字符串,此函数将会触发元表的__tostring事件

  24、type(v)

  功能:返回参数的类型名(“nil”,”number”, “string”, “boolean”, “table”, “function”, “thread”, “userdata”)

  25、unpack (list [, i [, j]])

  功能:返回指定表的索引的值,i为起始索引,j为结束索引

  注:本函数只能用于以数字索引访问的表,否则只会返回nil 如:t={“1″,”cash”}

  26、_VERSION

  功能:返回当前Lua的版本号”Lua 5.1″.

  27、xpcall (f, err)

  功能:与pcall类似,在保护模式下调用函数(即发生的错误将不会反射给调用者)

  但可指定一个新的错误处理函数句柄

  当调用函数成功能返回true,失败时将返回false加err返回的结果

Read More