找回密码
 register

QQ登录

只需一步,快速开始

灵武铸炼函数·铸炼替换·服务端·代码逻辑·完全解析

[复制链接]

灵武铸炼函数·铸炼替换·服务端·代码逻辑·完全解析

[复制链接]
Waylee

主题

0

回帖

9723

积分

仙帝

积分
9723
Waylee 2024-11-29 17:22 | 显示全部楼层 |阅读模式 | Google Chrome | Windows 10

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?register

×

代码出处:皇子
文章编辑:雪舞
编辑时间: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在其有效范围内(1015700010157143)。如果不在有效范围内函数则会直接退出。
  • 铸炼条件验证:根据灵武的等级(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 金币 后可完整阅读
支持付费阅读,激励作者创作更好的作品。
您需要登录后才可以回帖 登录 | register

本版积分规则

雪舞知识库 | 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 |网站地图|天天打卡

GMT+8, 2024-12-4 16:30 , Processed in 0.090575 second(s), 6 queries , Redis On.

Powered by XueWu Licensed

Copyright © Tencent Cloud.

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