前几天接触了一下自走棋,发现这游戏有毒= =。 虽然作为新手菜鸡被虐的不要不要的,但是依然乐此不疲....
可惜的是虽然大概的机制玩过Dota 2的同学都懂,但是某些游戏机制是巨鸟多多独创的,而且并未说明过,除了知道有8位玩家共享棋池,攻击/被攻击都能回蓝,每轮会抽牌,每5轮野怪,大家觉得这似乎是一个纯随机游戏,技能释放完全看脸,回蓝也完全看脸.....
作为非酋的我实在不能忍.....这真的是一个概率游戏?正好逛github的时候发现有人上传了代码,于是去瞅了瞅。
虽然我Lua语法不太熟,但是作者写的注释很全而且意外的好懂.......以至于我这种弱鸡也能从代码发现一点东西,拿来和大家分享一下~
棋池大小与棋子总数
首先,需要明确的是自走棋游戏规则中,每轮抽牌是先根据当前人口的概率分布,先随机选择棋子的稀有度,再从这个稀有度的所有棋子中随机抽出一个棋子。
举个例子,比如在一轮抽牌中我抽到了1个2块钱的月骑,那么实际的过程是:
- 我抽到了一个2块钱的棋子
- 我从所有2块钱棋子组成的棋池里抽到了月骑
彩蛋环节
第一步中决定概率的是你的人口(科技等级),不过在这之前,有两个彩蛋,作者称之以为SSR卡........就是ssr_ck和ssr_nec,似乎是特殊版的混沌骑士和特殊版的死灵法师。
function RandomDrawChessNew(team_id)
local h = TeamId2Hero(team_id)
local this_chess = nil
local ran = RandomInt(1,100)
local chess_level = 1
local curr_per = 0
local hero_level = h:GetLevel()
local table_11chess = {}
for _,chess in pairs(GameRules:GetGameModeEntity().mychess[team_id]) do
if string.find(chess.chess,'11') then
table.insert(table_11chess,string.sub(chess.chess,1,-3))
end
end
local ran1 = RandomInt(1,10000) %随机一个1~10000的数1
local ran2 = RandomInt(1,10000) %随机一个1~100000的数2
if h:GetLevel() >= 7 and ran1 <= 1 and ran2 <= 1 then %如果人口在7以上,且两个随机数都是1,随机抽SSR卡池中的卡
this_chess = GameRules:GetGameModeEntity().chess_list_ssr[RandomInt(1,table.maxn(GameRules:GetGameModeEntity().chess_list_ssr))]
else
if GameRules:GetGameModeEntity().chess_gailv[hero_level] ~= nil then
for per,lv in pairs(GameRules:GetGameModeEntity().chess_gailv[hero_level]) do
if ran>per and curr_per<=per then
curr_per = per
chess_level = lv
end
end
end
-- this_chess = GameRules:GetGameModeEntity().chess_list_by_mana[chess_level][RandomInt(1,table.maxn(GameRules:GetGameModeEntity().chess_list_by_mana[chess_level]))]
this_chess = DrawAChessFromChessPool(chess_level, table_11chess)
end
return this_chess
end
我在上述代码中加粗并加了注释来说明这部分,在这里解释一下。
所有的抽卡开始之前,有两个判断逻辑:如果你的人口大于7,且两个1~10000的随机数都是1,那么从SSR棋池中抽卡,这里抽出来的卡目前只有两种,就是上述说的ssr_ck和ssr_nec,两个随机数都是1的概率大概是 。
当前的SSR棋池是这个:
GameRules:GetGameModeEntity().chess_list_ssr = {'chess_nec_ssr','chess_ck_ssr'}
所以这个概率下能抽出来SSR卡的是真·欧洲人,所以想验证自己的rp的各位,请7人口以后疯狂抽卡,8人口提升不了SSR的概率。
PS:这一步会在每轮抽卡的时候进行5次,所以....概率还是有的。
第一步判断棋子等级
在作为RP过滤器的彩蛋环节后,非洲人们就进入了正常抽卡环节。如果我没有理解错的话,这个根据当前人口判断抽卡等级的概率来自这里:
for per,lv in pairs(GameRules:GetGameModeEntity().chess_gailv[hero