astrology_interface.lua

这份是星座系统功能的脚本,它包含了一系列的函数和逻辑,用于在游戏中实现一个星座鉴定服务。脚本中定义了多个函数,每个函数都有其特定的作用和目的。以下是对文档内容的整理和分析:

  1. 随机数生成:脚本开始部分使用了math.randomseed(os.time())math.random()来生成随机数,这是为了确保每次运行脚本时都能得到不同的随机结果。
  2. 正态化几率函数 (ZLottery_Chance_Norm):这个函数用于将一组数值转换成正态分布的概率序列。它首先计算总和,然后创建一个累积概率序列,最后根据这个累积概率序列生成一个标准化的概率序列。
  3. 随机选取位置函数 (ZLottery_Get_RanPoint):这个函数根据正态化的概率序列来随机选取一个位置。它通过循环和比较随机数与概率值来确定最终的位置。
  4. 星座鉴定服务函数 (AstrologyIdentify):这是脚本的核心函数,它接收多个参数,包括属性ID、星座、重生次数和装备掩码。函数内部定义了多个局部变量和数组,用于存储不同类型的装备(衣服、鞋子、帽子)的概率和属性值。
  5. 属性条目数量和ID获取:脚本中定义了GetNumerListGetIdGetGrade函数,用于获取属性条目数量、属性ID和属性数值等级。
  6. 属性值计算:脚本通过一系列循环和条件判断来计算每个属性的具体值。这包括从属性池中选取属性ID、计算属性值和附加值等。
  7. 未飞升型和飞升型属性计算:脚本根据角色的重生次数来决定是使用未飞升型还是飞升型属性计算方式。每种类型的计算方式都有其特定的属性ID和值的获取逻辑。
  8. 星座评分和消耗值计算:最后,脚本计算星座的评分和消耗值,并使用SetScoreSetEnergyConsume方法来设置这些值。
  9. 元魂属性设置:脚本通过SetProp方法来设置元魂的属性ID、值、档位和附加小档。

得到以上结果
我们接下来分析余下脚本

属性条目数量和ID获取的相关函数定义如下:

  1. 获取属性条目数量 (GetNumerList):

    function GetNumerList(s2)
        local k = 1
        k = ZLottery_Get_RanPoint(s2)
        return k
    end

    这个函数通过调用ZLottery_Get_RanPoint函数来随机选取一个属性条目数量。s2参数是一个概率分布表,用于决定随机选取的结果。

  2. 获取属性的ID (GetId):

    function GetId(s1)
        local k1 = 1
        k1 = ZLottery_Get_RanPoint(s1)
        return k1
    end

    这个函数同样调用ZLottery_Get_RanPoint函数来随机选取一个属性ID。s1参数是一个包含属性权重的概率分布表。

    属性条目数量和ID获取的相关函以后,那么接下来继续分析

属性值计算

属性值计算的相关代码段主要分布在以下几个函数中:

获取属性的数值位 (GetGrade):

function GetGrade(s1)

local k1 = 1
k1 = ZLottery_Get_RanPoint(s1)
return k1

end
这个函数用于获取属性的数值等级,它通过调用ZLottery_Get_RanPoint函数,根据传入的概率分布表s1来随机确定一个数值等级。

计算各项属性值:

local AttCnt
local i
local j = 0
local j1 = 0
local a = {}
local b = {}
local c = {}
local d = {}
local Tempatt = {}
local Tempattt_size = 0
这段代码初始化了一系列变量,用于存储属性ID、数值等级、具体属性值等信息。

接下来的代码块会根据不同的条件(如装备类型、重生次数等)来计算属性值。这包括从属性池中选取属性ID、计算属性的基础值和附加值等。

具体属性值的计算:

for i=1,AttCnt do

b[i] = GetGrade(Proplevel)

end
这个循环调用GetGrade函数来获取每个属性的数值等级,并将其存储在数组b中。

for i=1,AttCnt do

d[i] = math.random(1,10)*0.1

end
这个循环为每个属性生成一个0.1到1之间的随机小档附加值,并将其存储在数组d中。

for i=1,AttCnt do

c[i] = LevelsValue2[a[i]]*(b[i]+d[i])

end
这个循环计算每个属性的具体值,通过将属性的基础值(LevelsValue2[a[i]])与数值等级(b[i])和附加值(d[i])相乘来得到。

这些代码段共同构成了属性值计算的逻辑,它们通过随机数生成和概率分布来模拟现实中的星座属性鉴定过程,确保每个鉴定结果都是随机且独特的。