1首先想添加抽奖箱子,必须加的两段代码 以神木宝箱为例,就是那个抽神木法宝的
-------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
function LotteryType6576SelectNumber(list, max_count) --- Lottery Used@20070618 (神木宝盒) 请注意这里的数字 6576 这个是el物品id 脚本就是通过这个id控制
local NumList={1,2,3,4} --- 这里设置的是列表,相信反映快点马上就知道是干什么的了
local NumChance={360,360,360,180} --- 这行本人比较愚钝 不知道干吗的 也期望别的大大知道的给我补上
return NumList[ZLottery_Get_RanPoint(NumChance)]
end
-------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
各位看清上面这段必加 加的位置 相信只要稍微用点脑的人都马上就能看出来的
下面我们找该文件的另外一处 这一处也是必须添加的
---------------------------------------------------- 完美的分割线 -----------------------------------------
-------------------------------------------------------------------------------------------------------------
function LotteryType6576Cashing(cur_list) ---(神木宝盒) 修改这里的id数值 改为el自己的
---fmax_count为该彩票的有效位数
local cp
local nowcurlist={}
local fmax_count=table.getn(cur_list)
nowcurlist[0]=""
for cp=1,fmax_count do
nowcurlist[cp]=nowcurlist[cp-1]..cur_list[cp]
end
local lot_prize={}
local lot_prizechance={}
local prizeout
local Out_Prize={}
Out_Prize[1]={}
Out_Prize[2]={}
Out_Prize[3]={}
Out_Prize[4]={}
-----------------------------------------------------------------------------------------------------------这下面一段是控制抽奖物品id的 修改
Out_Prize[1][4713]=100 --神木骰
Out_Prize[2][6473]=100 --月华之灵
Out_Prize[3][3988]=100 --回城符
Out_Prize[3][3991]=100
Out_Prize[3][6430]=100
Out_Prize[3][3989]=100
Out_Prize[3][3990]=100
Out_Prize[3][3992]=100
Out_Prize[4][1807]=100 --太一轮
local i,v,k
for k=1,4 do
lot_prize[k]={}
lot_prizechance[k]={}
end
for k=1,4 do
for i,v in pairs(Out_Prize[k]) do
table.insert(lot_prize[k],i)
table.insert(lot_prizechance[k],v)
end
end
if nowcurlist[fmax_count]=="444" then
prizeout=lot_prize[1][ZLottery_Get_RanPoint(lot_prizechance[1])]
return 1,0,prizeout,1,0,0
elseif ZLottery_FindSameNum(cur_list,4)==2 or nowcurlist[fmax_count]=="333" or nowcurlist[fmax_count]=="222" or nowcurlist[fmax_count]=="111" then
prizeout=lot_prize[2][ZLottery_Get_RanPoint(lot_prizechance[2])]
return 2,0,prizeout,1,0,0
elseif ZLottery_FindSameNum(cur_list,4)==1 then
prizeout=lot_prize[3][ZLottery_Get_RanPoint(lot_prizechance[3])]
return 3,0,prizeout,2,0,0
else
return 4,0,1807,1,0,0
end
return 4,0,1807,1,0,0
end
-------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
以上两端内容缺一不可 分别复制在lottery.lua的不同位置中。修改好后上传 然后再el里面添加物品 将这些文件传入服务器 就开服自己试试吧
有关轮盘抽奖几率的猜想
在lottery.lua文件中有两次方式调整几率 不过这些只是我的个人猜想 毕竟我不精通java
-------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
function LotteryType24343SelectNumber(list, max_count) --- Lottery Used@20090211(天衮靛石:獬豸)
local PriceChance = {25,450,4000} -- 一二三等奖概率(单位:万分之)
☆☆☆☆☆☆从这里往下倒end 都可以调整几率我认为完美真黑
PriceChance[4] = 10000 - PriceChance[1] - PriceChance[2] - PriceChance[3] -- 四等奖概率(单位:万分之) ☆☆☆☆☆☆这一行是中奖总几率
subChance = {}
local subSum = {}
☆☆☆☆☆☆从这里往下4行 大括号内数值我认为也是 只不过分属作用不同
subChance[1] = {100} -- 一等奖内部相对概率(1号)
subChance[2] = {2,1,1,1,1,1,2} -- 二等奖内部相对概率(3号,5号,7号,9号,11号,13号,15号)
subChance[3] = {25,25,25,25} -- 三等奖内部相对概率(4号,6号,12号,14号)
subChance[4] = {2,5,5,8} -- 四等奖内部相对概率(2号,8号,10号,16号)
for j=1,4 do
subSum[j] = 0
for i,_ in pairs(subChance[j]) do
subSum[j] = subSum[j] + subChance[j]
end
end
local NumList = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
local NumChance =
{
PriceChance[1], PriceChance[4]*subChance[4][1]/subSum[4],
PriceChance[2]*subChance[2][1]/subSum[2], PriceChance[3]*subChance[3][1]/subSum[3],
PriceChance[2]*subChance[2][2]/subSum[2], PriceChance[3]*subChance[3][2]/subSum[3],
PriceChance[2]*subChance[2][3]/subSum[2], PriceChance[4]*subChance[4][2]/subSum[4],
PriceChance[2]*subChance[2][4]/subSum[2], PriceChance[4]*subChance[4][3]/subSum[4],
PriceChance[2]*subChance[2][5]/subSum[2], PriceChance[3]*subChance[3][3]/subSum[3],
PriceChance[2]*subChance[2][6]/subSum[2], PriceChance[3]*subChance[3][4]/subSum[3],
PriceChance[2]*subChance[2][7]/subSum[2], PriceChance[4]*subChance[4][4]/subSum[4],
}
return NumList[ZLottery_Get_RanPoint(NumChance)]
end
-------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
以上这种抽奖模式诛仙2的 因为422以后的很多抽奖盒我都没见过 ☆☆☆☆☆☆[size=5五角星的位置都是可能需要修改点
而另外一种是原诛仙的 在程序最开头处
目前我就发现这两种调整抽奖几率的代码
我认为这两种模式 一个是总控 一个是单控 而单控灵活是诛仙2的 更加灵活(也更加黑)
我把总控的这个发出来下面的就是
说实话下面代码没看太懂 就不做啥品论了 有人能看懂的补贴或者发我这里论坛的邮箱都成
----出现几率正态化-------------------------------------------------------------------------------------------
function ZLottery_Chance_Norm(n1)
local n1_size=table.getn(n1)
local Total_Chance=0
local i,k,m
---先求和
for i=1,n1_size do
Total_Chance=n1+Total_Chance
end
---生成概率组序列
local nx={}
for k=1,n1_size do
if k==1 then
nx[1]=n1[k]
else
nx[k]=n1[k]+nx[k-1]
end
end
---再生产标准化的概率组序列
local n2={}
for m=1,n1_size do
if Total_Chance==0 then ---对于全0序列的处理,返回{1,0,0...}
n2[m]=0
n2[1]=1
else
n2[m]=nx[m]/ Total_Chance
end
end
---返回一个概率序列
---ZLuaTal_Special_Print(n2) ---$$$$测试用$$$$-----
return n2
end
-------------------------------------------------------------------------------------------------------------
----按照出现概率随机应该选取的位置---------------------------------------------------------------------------
function ZLottery_Get_RanPoint(s1)
local js,ron1
ron1= math.random()
---print("---------------------------") ---$$$$测试用$$$$-----
---print("Now the random Num is:",ron1) ---$$$$测试用$$$$-----
local p1=ZLottery_Chance_Norm(s1)
for js=1,table.getn(p1) do
if ron1<=p1[js] then
---print("So We Choose:",js) ---$$$$测试用$$$$-----
return js
end
end
return 1
end
-------------------------------------------------------------------------------------------------------------
---找到S1中a数字的个数---------------------------------------------------------------------------------------
function ZLottery_FindSameNum(s1,a)
local i,j
j=0
for i=1,table.getn(s1) do
if s1==a then
j=j+1
end
end
return j
end
|
|