local FuwenExcel = require("excel.fuwen") local Util = require("common.Util") local FuwenLogic = require("fuwen.FuwenLogic") local PfLogic = require("platform.PfLogic") local FuwenDefine = require("fuwen.FuwenDefine") local Broadcast = require("broadcast.Broadcast") local Lang = require("common.Lang") FUWEN_SKILL_PRIM = FUWEN_SKILL_PRIM or {} --符文初级技能列表 FUWEN_SKILL_INTE = FUWEN_SKILL_INTE or {} --符文中级技能列表 FUWEN_SKILL_HIGH = FUWEN_SKILL_HIGH or {} --符文高级技能列表 FUWEN_SKILL_TOP = FUWEN_SKILL_TOP or {} --符文顶级技能列表 FUWEN_SKILL_RARE = FUWEN_SKILL_RARE or {} --符文稀有技能列表 function initAfterHot() Util.initTable(FUWEN_SKILL_PRIM) Util.initTable(FUWEN_SKILL_INTE) Util.initTable(FUWEN_SKILL_HIGH) Util.initTable(FUWEN_SKILL_TOP) Util.initTable(FUWEN_SKILL_RARE) for fuwenID, config in pairs(FuwenExcel.skill) do if config.isFuwenSkill == 1 then -- 符文技能 if config.lv == 1 then FUWEN_SKILL_PRIM[#FUWEN_SKILL_PRIM + 1] = fuwenID elseif config.lv == 2 then FUWEN_SKILL_INTE[#FUWEN_SKILL_INTE + 1] = fuwenID elseif config.lv == 3 then FUWEN_SKILL_HIGH[#FUWEN_SKILL_HIGH + 1] = fuwenID elseif config.lv == 4 then FUWEN_SKILL_TOP[#FUWEN_SKILL_TOP + 1] = fuwenID end if config.rare == 1 then FUWEN_SKILL_RARE[#FUWEN_SKILL_RARE + 1] = fuwenID end end end end function create(id) local tb = {} tb.id = id tb.attr = {} tb.skill = nil -- 生成随机属性和技能 genFuwenAttr(tb,nil) tb.attrTemp = {} tb.skillTemp = nil return tb end function genFuwenAttr(fuwenGrid, luckRefresh) Util.initTable(fuwenGrid.attr) Util.initTable(fuwenGrid.skill) local choseSkill = {} local fuwenConfig = FuwenExcel.fuwen[fuwenGrid.id] if fuwenConfig == nil then return end -- 绝对值属性抽选 必定有且仅有1条 local cnt = #fuwenConfig.absAttrPool local randIndex = math.random(1, cnt) local attrKey = fuwenConfig.absAttrPool[randIndex][1] local attrVal = fuwenConfig.absAttrPool[randIndex][2] fuwenGrid.attr[1] = {attrKey, attrVal} -- 百分比属性抽选 不一定有 cnt = #fuwenConfig.percentAttrPool if cnt > 0 then local randIndex = math.random(1, cnt) local attrKey = fuwenConfig.percentAttrPool[randIndex][1] local attrVal = fuwenConfig.percentAttrPool[randIndex][2] fuwenGrid.attr[2] = {attrKey, attrVal} if fuwenGrid.id == 80006 then randIndex = math.random(1, cnt) attrKey = fuwenConfig.percentAttrPool[randIndex][1] attrVal = fuwenConfig.percentAttrPool[randIndex][2] fuwenGrid.attr[3] = {attrKey, attrVal} end end --幸运重铸技能抽选 if luckRefresh == 1 then cnt = #fuwenConfig.skillRate fuwenGrid.skill = fuwenGrid.skill or {} local skillConfig = FuwenExcel.skill local total = 0 for i = 1,cnt do if fuwenConfig.skillRate[i][3] >= 1 or fuwenConfig.skillRate[i][4] >= 1 then total = total + fuwenConfig.skillRate[i][5] end end local randomNum = math.random(1, total) local skillGroup = nil for i = 1,cnt do if fuwenConfig.skillRate[i][3] >= 1 or fuwenConfig.skillRate[i][4] >= 1 then if randomNum <= fuwenConfig.skillRate[i][5] then skillGroup = fuwenConfig.skillRate[i] break else randomNum = randomNum - fuwenConfig.skillRate[i][5] end end end if skillGroup ~= nil then local primSkillCnt = skillGroup[1] or 0 local inteSkillCnt = skillGroup[2] or 0 local highSkillCnt = skillGroup[3] or 0 local topSkillCnt = skillGroup[4] or 0 --local isHighRare = true --if highSkillCnt >= 1 and topSkillCnt >= 1 then -- local randCnt = math.random(1, 2) -- if randCnt == 2 then -- isHighRare = false -- end --elseif topSkillCnt > 1 then -- isHighRare = false --end local allSkillCnt = 0 local skillRandomIndex = 0 for i = 1,primSkillCnt do local maxPrimSkillCnt = #FUWEN_SKILL_PRIM while true do skillRandomIndex = math.random(1,maxPrimSkillCnt) local newSkill = FUWEN_SKILL_PRIM[skillRandomIndex] if choseSkill[skillConfig[newSkill].groupID] == nil then allSkillCnt = allSkillCnt + 1 fuwenGrid.skill[allSkillCnt] = newSkill choseSkill[skillConfig[newSkill].groupID] = 1 break end end end for i = 1,inteSkillCnt do local maxInteSkillCnt = #FUWEN_SKILL_INTE while true do skillRandomIndex = math.random(1,maxInteSkillCnt) local newSkill = FUWEN_SKILL_INTE[skillRandomIndex] if choseSkill[skillConfig[newSkill].groupID] == nil then allSkillCnt = allSkillCnt + 1 fuwenGrid.skill[allSkillCnt] = newSkill choseSkill[skillConfig[newSkill].groupID] = 1 break end end end for i = 1,highSkillCnt do local maxHighSkillCnt = 0 --if i == 1 and isHighRare then -- maxHighSkillCnt = #FUWEN_SKILL_RARE -- while true do -- skillRandomIndex = math.random(1,maxHighSkillCnt) -- local newSkill = FUWEN_SKILL_RARE[skillRandomIndex] -- if choseSkill[skillConfig[newSkill].groupID] == nil then -- allSkillCnt = allSkillCnt + 1 -- fuwenGrid.skill[allSkillCnt] = newSkill -- choseSkill[skillConfig[newSkill].groupID] = 1 -- break -- end -- end --else maxHighSkillCnt = #FUWEN_SKILL_HIGH while true do skillRandomIndex = math.random(1,maxHighSkillCnt) local newSkill = FUWEN_SKILL_HIGH[skillRandomIndex] if choseSkill[skillConfig[newSkill].groupID] == nil then allSkillCnt = allSkillCnt + 1 fuwenGrid.skill[allSkillCnt] = newSkill choseSkill[skillConfig[newSkill].groupID] = 1 break end end --end end for i = 1,topSkillCnt do local maxTopSkillCnt = 0 if i == 1 and not isHighRare then maxTopSkillCnt = #FUWEN_SKILL_RARE while true do skillRandomIndex = math.random(1,maxTopSkillCnt) local newSkill = FUWEN_SKILL_RARE[skillRandomIndex] if choseSkill[skillConfig[newSkill].groupID] == nil then allSkillCnt = allSkillCnt + 1 fuwenGrid.skill[allSkillCnt] = newSkill choseSkill[skillConfig[newSkill].groupID] = 1 break end end else maxTopSkillCnt = #FUWEN_SKILL_TOP skillRandomIndex = math.random(1,maxTopSkillCnt) while true do skillRandomIndex = math.random(1,maxTopSkillCnt) local newSkill = FUWEN_SKILL_TOP[skillRandomIndex] if choseSkill[skillConfig[newSkill].groupID] == nil then allSkillCnt = allSkillCnt + 1 fuwenGrid.skill[allSkillCnt] = newSkill choseSkill[skillConfig[newSkill].groupID] = 1 break end end end end end return end -- 抽选技能组合 cnt = #fuwenConfig.skillRate if cnt > 0 then fuwenGrid.skill = fuwenGrid.skill or {} local skillConfig = FuwenExcel.skill local total = 0 for i = 1,cnt do total = total + fuwenConfig.skillRate[i][5] end local randomNum = math.random(1, total) local skillGroup = nil for i = 1,cnt do if randomNum <= fuwenConfig.skillRate[i][5] then skillGroup = fuwenConfig.skillRate[i] break else randomNum = randomNum - fuwenConfig.skillRate[i][5] end end if skillGroup ~= nil then local primSkillCnt = skillGroup[1] or 0 local inteSkillCnt = skillGroup[2] or 0 local highSkillCnt = skillGroup[3] or 0 local topSkillCnt = skillGroup[4] or 0 local allSkillCnt = 0 local skillRandomIndex = 0 for i = 1,primSkillCnt do local maxPrimSkillCnt = #FUWEN_SKILL_PRIM while true do skillRandomIndex = math.random(1,maxPrimSkillCnt) local newSkill = FUWEN_SKILL_PRIM[skillRandomIndex] if choseSkill[skillConfig[newSkill].groupID] == nil then allSkillCnt = allSkillCnt + 1 fuwenGrid.skill[allSkillCnt] = newSkill choseSkill[skillConfig[newSkill].groupID] = 1 break end end end for i = 1,inteSkillCnt do local maxInteSkillCnt = #FUWEN_SKILL_INTE while true do skillRandomIndex = math.random(1,maxInteSkillCnt) local newSkill = FUWEN_SKILL_INTE[skillRandomIndex] if choseSkill[skillConfig[newSkill].groupID] == nil then allSkillCnt = allSkillCnt + 1 fuwenGrid.skill[allSkillCnt] = newSkill choseSkill[skillConfig[newSkill].groupID] = 1 break end end end for i = 1,highSkillCnt do local maxHighSkillCnt = #FUWEN_SKILL_HIGH while true do skillRandomIndex = math.random(1,maxHighSkillCnt) local newSkill = FUWEN_SKILL_HIGH[skillRandomIndex] if choseSkill[skillConfig[newSkill].groupID] == nil then allSkillCnt = allSkillCnt + 1 fuwenGrid.skill[allSkillCnt] = newSkill choseSkill[skillConfig[newSkill].groupID] = 1 break end end end for i = 1,topSkillCnt do local maxTopSkillCnt = #FUWEN_SKILL_TOP while true do skillRandomIndex = math.random(1,maxTopSkillCnt) local newSkill = FUWEN_SKILL_TOP[skillRandomIndex] if choseSkill[skillConfig[newSkill].groupID] == nil then allSkillCnt = allSkillCnt + 1 fuwenGrid.skill[allSkillCnt] = newSkill choseSkill[skillConfig[newSkill].groupID] = 1 break end end end end end end function setFuwenSkillAttrByGM(human,fuwenID,attr1,val1,attr2,val2,skill1,skill2) local fuwen = {} fuwen.id = fuwenID fuwen.attr = {} fuwen.skill = {} fuwen.attr[1] = {attr1,val1} fuwen.attr[2] = {attr2,val2} fuwen.skill[1] = skill1 fuwen.skill[2] = skill2 FuwenLogic.addByGrid(human,fuwen,"gm") end -- 返回符文背包空余格子数 function getEmptyCnt(human) local emptyCnt = 0 for i = 1, FuwenDefine.FUWEN_BAG_MAX_CNT do if human.db.fuwenBag[i] == nil then emptyCnt = emptyCnt + 1 end end return emptyCnt end -- 获得符文背包第一个空格子下标 function getEmptyIndex(human) for index = 1, FuwenDefine.FUWEN_BAG_MAX_CNT do local grid = human.db.fuwenBag[index] if grid == nil then return index end end end function checkEmptyCnt(human,itemCnt) if itemCnt > getEmptyCnt(human) then return Broadcast.sendErr(human,Lang.COMMON_BAG_FULL) end return true end