代码出处:皇子
文章编辑:雪舞
编辑时间:2024-11-29
小工具
灵武装备字符串解析工具网页版:https://waylee.net/tlbb/hj/LingYuStr.html
文本将解析内容
函数名 |
简介 |
x888808_ExtendedEnhance |
灵武铸炼 |
x888808_SaveEnhanced |
替换铸炼属性 |
x888808_ParseScaleStr |
解析灵武装备字符串铸炼部分 |
x888808_ParseAttrStr |
解析灵武装备字符串 |
x888808_LingYuData2Str |
天鉴灵武数据转文本 |
x888808_PadWithZero |
补全字符串 |
LuaFnIntegerDivide |
整数除法 |
LuaFnModulo |
取余运算 |
LuaFnBase32Encode |
Base32编码字符串 |
LuaFnBase32Decode |
Base32解码字符串 |
&LY |
灵武属性信息 |
&SX |
铸炼属性信息 |
灵武铸炼函数的整体结构
x888808_ExtendedEnhance
函数实现了灵武铸炼。它的主要流程可以总结为以下几个步骤:
- 参数检查:首先,函数会验证传入的灵武所在的背包位置(
nLingYuPos
)和材料位置(nItemPos
)是否合法。
- 灵武ID获取:通过传入的参数,函数获取灵武物品的ID,并确保
装备索引ID
在其有效范围内(10157000
到10157143
)。如果不在有效范围内函数则会直接退出。
- 铸炼条件验证:根据灵武的等级(
rank
),确认是否有足够的金币和正确的材料用于铸炼。如果缺少金币或材料,系统会提示玩家并退出。
- 铸炼属性解析与更新:解析灵武的属性字符串(
ItemCreator
创建者信息),随机化灵武的属性,并更新新的属性字符串。最后,扣除相应的资源。
- 属性替换:是否将新的属性字符串赋值给灵武由玩家决定,当玩家按下“替换属性”执行后续动作,并删除临时铸炼信息。
示例代码(非完整代码,具体请前往自己的端里查看哦):
-- 灵武铸炼的主要函数
function x888808_ExtendedEnhance(sceneId, selfId, nLingYuPos, nItemPos)
-- 检查灵武和材料的位置
if nLingYuPos == nil or nItemPos == nil or nLingYuPos < 0 or nItemPos < 0 then
return
end
-- 获取灵武的ID
local nLingYuID = LuaFnGetItemTableIndexByIndex(sceneId, selfId, nLingYuPos)
-- 检查灵武ID是否有效
if nLingYuID < 10157000 or nLingYuID > 10157143 then
return
end
-- 定义不同品阶铸炼所需金钱
local nNeedMoney = {10000, 20000, 30000, 50000}
-- 获取所需材料的ID
local nItemID = LuaFnGetItemTableIndexByIndex(sceneId, selfId, nItemPos)
-- 获取灵武当前的品阶
local nRank = x888808_g_ProductRankInfo[nLingYuID].rank
-- 获取对应品阶的铸炼所需金钱
nNeedMoney = nNeedMoney[nRank]
-- 检查是否有足够的材料
local nHaveItem = LuaFnGetAvailableItemCount(sceneId, selfId, nItemID)
if nHaveItem < 1 then
x888808_NotifyTip(sceneId, selfId, format("#H铸炼天鉴灵武%s,需要1个%s。", GetItemName(sceneId, nLingYuID), GetItemName(sceneId, nItemID)))
return
end
-- 获取玩家当前的金钱
local nMoneySelf = GetMoneyJZ(sceneId,selfId) + GetMoney(sceneId,selfId)
-- 检查是否有足够的金钱
if nMoneySelf < nNeedMoney then
x888808_NotifyTip(sceneId, selfId,"金钱不足")
return
end
-- 解析灵武的属性字符串
local nLingYuAttrStr = LuaFnGetItemCreator(sceneId, selfId, nLingYuPos)
if strfind(nLingYuAttrStr, "&LY") == nil then
return
end
-- 获取灵武的属性数据
local nLingYuData = x888808_ParseAttrStr(sceneId, selfId, nLingYuAttrStr, 1)
local nAttrCount = 0
-- 计算灵武的有效属性数量
for i = 1, 3 do
if nLingYuData[i] and nLingYuData[i].attr_type and nLingYuData[i].attr_type > 0 then
nAttrCount = nAttrCount + 1
end
end
-- 更新灵武属性(&SX临时铸炼获得的属性)
local nNewAuthor = nLingYuAttrStr .. "&SX"
for i = 1, 3 do
nNewAuthor = nNewAuthor .. x888808_PadWithZero(LuaFnBase32Encode(nScaleList[i]), 2)
end
-- 设置新的灵武属性(&SX临时铸炼获得的属性)
LuaFnSetItemCreator(sceneId, selfId, nLingYuPos, nNewAuthor)
-- 扣除消耗的材料和金钱
LuaFnDelAvailableItem(sceneId, selfId, nItemID, 1)
LuaFnCostMoneyWithPriority(sceneId, selfId, nNeedMoney)
-- 更新界面
BeginUICommand(sceneId)
UICommand_AddString(sceneId, nNewAuthor)
EndUICommand(sceneId)
end
灵武的物品信息和品阶系统
铸炼的灵武物品信息是通过x888808_g_ProductRankInfo
表格存储的,每个灵武物品有其对应的类型(product_type
)、品阶(rank
)以及种类(kit_type
)。品阶在这里非常重要,因为它决定了灵武需要多少金币和哪种材料进行强化。
- 品阶的定义:每个灵武物品根据其品阶分为四种:黄、玄、地、天。每个品阶都有不同的铸炼难度和资源消耗。
- 灵武类型:灵武的类型通过
product_type
表示,例如镜、刺、甲、钩、带和匕。
铸炼所需金币与材料
根据灵武的品阶(rank
),铸炼所需的金币不同。函数通过nNeedMoney
数组来定义各个品阶所需的金币数目:
- 等级1需要10000铜(1金)
- 等级2需要20000铜(2金)
- 等级3需要30000铜(3金)
- 等级4需要50000铜(5金)
每个品阶的铸炼都要求特定的材料,这些材料在x888808_g_EnhanceNeedItemList
数组中定义。特殊情况下,如等级3和等级4的铸炼材料会有额外的要求。如果玩家提供的材料不匹配,系统会弹出提示并终止铸炼。
属性字符串与灵武铸炼
灵武属性字符串格式:
&LY
用于表示灵武的属性,包括属性类型、属性值以及额外属性加成。
&SX
用于表示灵武的额外属性加成,这部分是在铸炼过程中临时添加的。
每个灵武物品在游戏中都有一个属性字符串(nLingYuAttrStr
),用于表示灵武的具体属性。属性字符串的格式如下所示:
&LYO02Q1OT0681SC04S1N&SX140B17
&LY(%w)(%w%w%w)(%w%w)(%w)(%w%w%w)(%w%w)(%w)(%w%w%w)(%w%w)&SX%w%w%w%w%w%w
&LY(属性类型)(属性值)(额外属性加成)(属性类型)(属性值)(额外属性加成)(属性类型)(属性值)(额外属性加成)&SX(额外属性加成)(额外属性加成)(额外属性加成)
其中,&LY
表示灵武的属性数据标识符,后面跟随多个属性项,每个属性项包含:
- 属性类型(
%w
):表示灵武的属性种类(如属性攻击、抗性、造成伤害增加等)。
如有错误的地方可留言指正!谢谢
剩余 72% 内容需要支付 100.00
金币 后可完整阅读
支持付费阅读,激励作者创作更好的作品。