您当前的位置:首页 > 诛仙技术

诛仙抽奖脚本编辑

本文出处:网游动力作者:本站发布时间:2010-07-02阅读次数:

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