查看: 82|回复: 0

天龙教程【合成8,9级宝石文件】

[复制链接]
  • TA的每日心情
    擦汗
    2024-10-8 12:00
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    253

    主题

    5

    回帖

    1153

    积分

    管理员

    积分
    1153
    发表于 2024-11-10 20:57:49 | 显示全部楼层 |阅读模式


    用法介绍:将以下代码复制后另存为gem_compound.lua,并按照路径进行覆盖
    文件路径:tlbb\Public\Data\Script\event\liveabilityevent
    文件名称:gem_compound.lua



    1. -- 宝石合成

    2. -- 脚本号
    3. x701602_g_scriptId = 701602

    4. -- 脚本名称
    5. x701602_g_scriptName = "合成宝石"

    6. -- 合成规则表
    7. x701602_g_CompoundRule = {
    8.         {
    9.                 [1] = { SpecialStuff = 30900015, MoneyCost = 5000, CountTable = { [3] = { SuccOdds = 25, SuccOddsWithSpecStuff = 50, }, [4] = { SuccOdds = 50, SuccOddsWithSpecStuff = 75, }, [5] = { SuccOdds = 75, SuccOddsWithSpecStuff = 100, }, }, },
    10.                 [2] = { SpecialStuff = 30900015, MoneyCost = 6000, CountTable = { [3] = { SuccOdds = 25, SuccOddsWithSpecStuff = 50, }, [4] = { SuccOdds = 50, SuccOddsWithSpecStuff = 75, }, [5] = { SuccOdds = 75, SuccOddsWithSpecStuff = 100, }, }, },
    11.                 [3] = { SpecialStuff = 30900015, MoneyCost = 7000, CountTable = { [3] = { SuccOdds = 25, SuccOddsWithSpecStuff = 50, }, [4] = { SuccOdds = 50, SuccOddsWithSpecStuff = 75, }, [5] = { SuccOdds = 75, SuccOddsWithSpecStuff = 100, }, }, },
    12.                 [4] = { SpecialStuff = 30900016, MoneyCost = 8000, CountTable = { [3] = { SuccOdds = 25, SuccOddsWithSpecStuff = 50, }, [4] = { SuccOdds = 50, SuccOddsWithSpecStuff = 75, }, [5] = { SuccOdds = 75, SuccOddsWithSpecStuff = 100, }, }, },
    13.                 [5] = { SpecialStuff = 30900016, MoneyCost = 9000, CountTable = { [3] = { SuccOdds = 25, SuccOddsWithSpecStuff = 50, }, [4] = { SuccOdds = 50, SuccOddsWithSpecStuff = 75, }, [5] = { SuccOdds = 75, SuccOddsWithSpecStuff = 100, }, }, },
    14.                 [6] = { SpecialStuff = 30900016, MoneyCost = 10000, CountTable = { [3] = { SuccOdds = 25, SuccOddsWithSpecStuff = 50, }, [4] = { SuccOdds = 50, SuccOddsWithSpecStuff = 75, }, [5] = { SuccOdds = 75, SuccOddsWithSpecStuff = 100, }, }, },
    15.                 [7] = { SpecialStuff = 30900016, MoneyCost = 11000, CountTable = { [3] = { SuccOdds = 25, SuccOddsWithSpecStuff = 50, }, [4] = { SuccOdds = 50, SuccOddsWithSpecStuff = 75, }, [5] = { SuccOdds = 75, SuccOddsWithSpecStuff = 100, }, }, },
    16.                 [8] = { SpecialStuff = 30900016, MoneyCost = 12000, CountTable = { [3] = { SuccOdds = 25, SuccOddsWithSpecStuff = 50, }, [4] = { SuccOdds = 50, SuccOddsWithSpecStuff = 75, }, [5] = { SuccOdds = 75, SuccOddsWithSpecStuff = 100, }, }, },
    17.         },
    18.         {
    19.                 [1] = { SpecialStuff = -1, MoneyCost = 500, CountTable = { [3] = { SuccOdds = 50, SuccOddsWithSpecStuff = 0, }, [4] = { SuccOdds = 75, SuccOddsWithSpecStuff = 0, }, [5] = { SuccOdds = 100, SuccOddsWithSpecStuff = 0, }, }, },
    20.                 [2] = { SpecialStuff = -1, MoneyCost = 1000, CountTable = { [3] = { SuccOdds = 50, SuccOddsWithSpecStuff = 0, }, [4] = { SuccOdds = 75, SuccOddsWithSpecStuff = 0, }, [5] = { SuccOdds = 100, SuccOddsWithSpecStuff = 0, }, }, },
    21.                 [3] = { SpecialStuff = -1, MoneyCost = 1500, CountTable = { [3] = { SuccOdds = 50, SuccOddsWithSpecStuff = 0, }, [4] = { SuccOdds = 75, SuccOddsWithSpecStuff = 0, }, [5] = { SuccOdds = 100, SuccOddsWithSpecStuff = 0, }, }, },
    22.                 [4] = { SpecialStuff = -1, MoneyCost = 5000, CountTable = { [3] = { SuccOdds = 50, SuccOddsWithSpecStuff = 0, }, [4] = { SuccOdds = 75, SuccOddsWithSpecStuff = 0, }, [5] = { SuccOdds = 100, SuccOddsWithSpecStuff = 0, }, }, }, -- modify by cuiyinjie 开放4级3精合成
    23. --                [5] = { SpecialStuff = -1, MoneyCost = 2500, CountTable = { [3] = { SuccOdds = 50, SuccOddsWithSpecStuff = 0, }, [4] = { SuccOdds = 75, SuccOddsWithSpecStuff = 0, }, [5] = { SuccOdds = 100, SuccOddsWithSpecStuff = 0, }, }, },
    24. --                [6] = { SpecialStuff = -1, MoneyCost = 3000, CountTable = { [3] = { SuccOdds = 50, SuccOddsWithSpecStuff = 0, }, [4] = { SuccOdds = 75, SuccOddsWithSpecStuff = 0, }, [5] = { SuccOdds = 100, SuccOddsWithSpecStuff = 0, }, }, },
    25. --                [7] = { SpecialStuff = -1, MoneyCost = 3500, CountTable = { [3] = { SuccOdds = 50, SuccOddsWithSpecStuff = 0, }, [4] = { SuccOdds = 75, SuccOddsWithSpecStuff = 0, }, [5] = { SuccOdds = 100, SuccOddsWithSpecStuff = 0, }, }, },
    26. --                [8] = { SpecialStuff = -1, MoneyCost = 4000, CountTable = { [3] = { SuccOdds = 50, SuccOddsWithSpecStuff = 0, }, [4] = { SuccOdds = 75, SuccOddsWithSpecStuff = 0, }, [5] = { SuccOdds = 100, SuccOddsWithSpecStuff = 0, }, }, },
    27.         },
    28.         {
    29.                 [1] = { SpecialStuff = -1, MoneyCost = 10000, CountTable = { [3] = { SuccOdds = 0, SuccOddsWithSpecStuff = 0, }, [4] = { SuccOdds = 0, SuccOddsWithSpecStuff = 0, }, [5] = { SuccOdds = 100, SuccOddsWithSpecStuff = 0, }, }, },
    30. --                [2] = { SpecialStuff = -1, MoneyCost = 1000, CountTable = { [3] = { SuccOdds = 50, SuccOddsWithSpecStuff = 0, }, [4] = { SuccOdds = 75, SuccOddsWithSpecStuff = 0, }, [5] = { SuccOdds = 100, SuccOddsWithSpecStuff = 0, }, }, },
    31. --                [3] = { SpecialStuff = -1, MoneyCost = 1500, CountTable = { [3] = { SuccOdds = 50, SuccOddsWithSpecStuff = 0, }, [4] = { SuccOdds = 75, SuccOddsWithSpecStuff = 0, }, [5] = { SuccOdds = 100, SuccOddsWithSpecStuff = 0, }, }, },
    32. --                [4] = { SpecialStuff = -1, MoneyCost = 2000, CountTable = { [3] = { SuccOdds = 50, SuccOddsWithSpecStuff = 0, }, [4] = { SuccOdds = 75, SuccOddsWithSpecStuff = 0, }, [5] = { SuccOdds = 100, SuccOddsWithSpecStuff = 0, }, }, },
    33. --                [5] = { SpecialStuff = -1, MoneyCost = 2500, CountTable = { [3] = { SuccOdds = 50, SuccOddsWithSpecStuff = 0, }, [4] = { SuccOdds = 75, SuccOddsWithSpecStuff = 0, }, [5] = { SuccOdds = 100, SuccOddsWithSpecStuff = 0, }, }, },
    34. --                [6] = { SpecialStuff = -1, MoneyCost = 3000, CountTable = { [3] = { SuccOdds = 50, SuccOddsWithSpecStuff = 0, }, [4] = { SuccOdds = 75, SuccOddsWithSpecStuff = 0, }, [5] = { SuccOdds = 100, SuccOddsWithSpecStuff = 0, }, }, },
    35. --                [7] = { SpecialStuff = -1, MoneyCost = 3500, CountTable = { [3] = { SuccOdds = 50, SuccOddsWithSpecStuff = 0, }, [4] = { SuccOdds = 75, SuccOddsWithSpecStuff = 0, }, [5] = { SuccOdds = 100, SuccOddsWithSpecStuff = 0, }, }, },
    36. --                [8] = { SpecialStuff = -1, MoneyCost = 4000, CountTable = { [3] = { SuccOdds = 50, SuccOddsWithSpecStuff = 0, }, [4] = { SuccOdds = 75, SuccOddsWithSpecStuff = 0, }, [5] = { SuccOdds = 100, SuccOddsWithSpecStuff = 0, }, }, },
    37.         },
    38. }

    39. -- 合成材料玄天寒玉
    40. x701602_g_HanYu_MaterialId = 20310110
    41. -- 生成物寒玉精碎
    42. x701602_g_HanYu_OutPutId = 20310111

    43. --**********************************************************************
    44. -- 任务入口函数
    45. --**********************************************************************
    46. function x701602_OnDefaultEvent( sceneId, selfId, targetId )

    47.         BeginUICommand(sceneId)
    48.         EndUICommand(sceneId)
    49.         DispatchUICommand(sceneId,selfId, 23)

    50. end

    51. --**********************************************************************
    52. -- 列举事件
    53. --**********************************************************************
    54. function x701602_OnEnumerate( sceneId, selfId, targetId )

    55.         AddNumText(sceneId, x701602_g_scriptId, x701602_g_scriptName,6,-1)

    56. end

    57. --**********************************************************************
    58. -- 判断是否宝石
    59. --**********************************************************************
    60. function x701602_IsGem( itemIndex )
    61.         if floor( itemIndex / 10000000 ) == 5 then
    62.                 return 1
    63.         end

    64.         return 0
    65. end

    66. --**********************************************************************
    67. -- 判断是否材料
    68. --**********************************************************************
    69. function x701602_IsMaterial( itemIndex )
    70.         if floor( itemIndex / 100000 ) == 205 then
    71.                 return 1
    72.         end

    73.         return 0
    74. end

    75. --**********************************************************************
    76. -- 根据一个物品号得到该物品的大分类
    77. --**********************************************************************
    78. function x701602_GetStuffClass( itemIndex )
    79.         if x701602_IsGem( itemIndex ) == 1 then
    80.                 return 1
    81.         elseif x701602_IsMaterial( itemIndex ) == 1 then
    82.                 return 2
    83.         elseif itemIndex == x701602_g_HanYu_MaterialId then
    84.                 return 3
    85.         end

    86.         return -1
    87. end

    88. --**********************************************************************
    89. -- 根据一个物品号得到该物品的类型
    90. --**********************************************************************
    91. function x701602_GetStuffType( itemIndex )
    92.         if x701602_IsGem( itemIndex ) == 1 then
    93.                 return mod( itemIndex, 100000 )
    94.         elseif x701602_IsMaterial( itemIndex ) == 1 then
    95.                 return LuaFnGetItemType( itemIndex )
    96.         elseif itemIndex == x701602_g_HanYu_MaterialId then
    97.                 return LuaFnGetItemType( itemIndex )
    98.         end

    99.         return -1
    100. end

    101. --**********************************************************************
    102. -- 根据一个物品号得到该物品的等级
    103. --**********************************************************************
    104. function x701602_GetStuffGrade( itemIndex )
    105.         if x701602_IsGem( itemIndex ) == 1 then
    106.                 return GetItemQuality( itemIndex )
    107.         elseif x701602_IsMaterial( itemIndex ) == 1 then
    108.                 return GetCommonItemGrade( itemIndex )
    109.         elseif itemIndex == x701602_g_HanYu_MaterialId then
    110.                 return GetCommonItemGrade( itemIndex )
    111.         end

    112.         return -1
    113. end

    114. --**********************************************************************
    115. -- 根据一个物品号得到该物品的升级物品号
    116. --**********************************************************************
    117. function x701602_GetStuffUpgraded( itemIndex )
    118.         if x701602_IsGem( itemIndex ) == 1 then
    119.                 return ( itemIndex + 100000 )
    120.         elseif x701602_IsMaterial( itemIndex ) == 1 then
    121.                 return ( itemIndex + 1 )
    122.         elseif itemIndex == x701602_g_HanYu_MaterialId then
    123.                 return x701602_g_HanYu_OutPutId
    124.         end

    125.         return -1
    126. end

    127. --**********************************************************************
    128. -- 宝石以及材料合成接口
    129. -- bagIndex1, bagIndex2 ... bagIndex5:五个宝石或材料所在的格子
    130. -- bagIndex6:特殊材料
    131. --**********************************************************************
    132. function x701602_GemCompound( sceneId, selfId, bagIndex1, bagIndex2, bagIndex3, bagIndex4, bagIndex5, bagIndex6 )
    133.         local bagIndexList = { bagIndex1, bagIndex2, bagIndex3, bagIndex4, bagIndex5 }
    134.         local stuffList = { -1, -1, -1, -1, -1 }
    135.         local stuffCount = 0                                        -- 材料个数
    136.         local specialStuff = -1                                        -- 特殊材料
    137.         local CompoundClass = -1                                -- 材料大类[分为宝石和材料]
    138.         local CompoundType = -1                                        -- 材料种类[各种宝石以及各种材料]
    139.         local stuffGrade = -1                                        -- 材料等级
    140.         local standardStuff = -1
    141.         local IsBind = 0;
    142.         
    143.         -- 不允许有重复的bagIndexList出现 added by dun.liu 2009.2.5
    144.         local isUnique = ScriptGlobal_IsUniqueNumberTable(bagIndexList);
    145.         if isUnique == 0 then
    146.                 return OR_ERROR;
    147.         end

    148.         for i = 1, 5 do
    149.                 if bagIndexList[i] ~= -1 then
    150.                         if LuaFnIsItemAvailable( sceneId, selfId, bagIndexList[i] ) < 1 then        -- 使用有问题的物品则退出流程
    151.                                 return OR_STUFF_LACK
    152.                         else
    153.                                 stuffList[i] = LuaFnGetItemTableIndexByIndex( sceneId, selfId, bagIndexList[i] )
    154.                                 stuffCount = stuffCount + 1

    155.                                 if CompoundClass == -1 and stuffGrade == -1 and CompoundType == -1 then
    156.                                         standardStuff = stuffList[i]
    157.                                         CompoundClass = x701602_GetStuffClass( standardStuff )
    158.                                         stuffGrade = x701602_GetStuffGrade( standardStuff )
    159.                                         CompoundType = x701602_GetStuffType( standardStuff )
    160.                                 end
    161.                                 
    162.                                 --判断材料是否符合
    163.                                 if x701602_IsMaterial( stuffList[i] ) == 1 and
    164.                                         mod( stuffList[i], 10 ) > 8 then
    165.                                         return OR_STUFF_LACK
    166.                                 end
    167.                                 
    168.                                 --判断宝石是否绑定        
    169.                                 if(LuaFnGetItemBindStatus( sceneId, selfId, bagIndexList[i]) == 1) then
    170.                                         IsBind = 1;
    171.                                 end
    172.                                 
    173.                         end
    174.                 end
    175.         end

    176.         local CompoundRule = x701602_g_CompoundRule[CompoundClass]
    177.         if not CompoundRule then
    178.                 return OR_ERROR
    179.         end

    180.         if bagIndex6 ~= -1 then
    181.                 if LuaFnIsItemAvailable( sceneId, selfId, bagIndex6 ) < 1 then                        -- 使用有问题的物品则忽略
    182.                         bagIndex6 = -1
    183.                 else
    184.                         specialStuff = LuaFnGetItemTableIndexByIndex( sceneId, selfId, bagIndex6 )
    185.                 end
    186.         end

    187.         for i = 1, 5 do
    188.                 if stuffList[i] ~= -1 then
    189.                         if CompoundClass ~= x701602_GetStuffClass( stuffList[i] )
    190.                          or stuffGrade ~= x701602_GetStuffGrade( stuffList[i] )
    191.                          or CompoundType ~= x701602_GetStuffType( stuffList[i] )
    192.                         then
    193.                                 return OR_STUFF_LACK
    194.                         end
    195.                 end
    196.         end

    197.         --if not CompoundRule[stuffGrade] then                                                                                -- 这种情况通常都是已经 9 级了
    198.                 --return OR_CANNOT_UPGRADE
    199.         --end
    200.         
    201.         
    202.         local selfMoney = GetMoney( sceneId, selfId )  +  GetMoneyJZ(sceneId, selfId)  --交子普及 Vega
    203.         
    204.         if  selfMoney  < CompoundRule[stuffGrade].MoneyCost then
    205.                 return OR_NOTENOUGH_MONEY                                                                                                -- 钱不够,一般由客户端自行提示
    206.         end

    207.         if not CompoundRule[stuffGrade].CountTable[stuffCount] then
    208.                 return OR_STUFF_LACK
    209.         end

    210.         local SuccOdds = CompoundRule[stuffGrade].CountTable[stuffCount].SuccOdds

    211.         if specialStuff ~= -1 then
    212.                 if specialStuff ~= CompoundRule[stuffGrade].SpecialStuff then                        -- 滥竽充数的特殊材料处理
    213.                         bagIndex6 = -1
    214.                         specialStuff = -1
    215.                 else
    216.                         SuccOdds = CompoundRule[stuffGrade].CountTable[stuffCount].SuccOddsWithSpecStuff
    217.                 end
    218.         end
    219.         
    220.         -- 必须特殊材料
    221.         if specialStuff == -1 then
    222.                 if 1 == CompoundClass then --如果材料为宝石,则必须需要特殊材料
    223.                 return OR_ERROR
    224.                 end
    225.         end

    226.         -- 计算新物品编号
    227.         local newItemIndex = x701602_GetStuffUpgraded( standardStuff )

    228.         -- 扣除材料, 一定要全部扣除成功,才能继续进行 added by dun.liu 2009.2.5
    229.         for i = 1, 5 do
    230.                 if bagIndexList[i] ~= -1 then
    231.                         local isEraseSuc = LuaFnEraseItem( sceneId, selfId, bagIndexList[i] );
    232.                         if( isEraseSuc == 0 ) then
    233.                                 return OR_ERROR;
    234.                         end
    235.                 end
    236.         end

    237.         -- 扣除特殊材料
    238.         if bagIndex6 ~= -1 then
    239.                 --判断特殊材料是否绑定 add by xindefeng
    240.                 if(LuaFnGetItemBindStatus( sceneId, selfId, bagIndex6) == 1) then
    241.                         IsBind = 1;--设置强制绑定标志
    242.                 end
    243.                 LuaFnEraseItem( sceneId, selfId, bagIndex6 )
    244.         end

    245.         -- 扣除金钱
    246.         local ret = LuaFnCostMoneyWithPriority( sceneId, selfId, CompoundRule[stuffGrade].MoneyCost )  --交子普及 Vega
    247.         if ret < 0 then
    248.                 return OR_NOTENOUGH_MONEY
    249.         end
    250.         -- 生成合成物,最后一个 1 是品质,不影响本类型合成物
    251.         local maxStuffCountChange = 3;
    252.         local maxSpecialStuffChange = 2;
    253.         local maxStuffGrade = 8;
    254.         
    255.         local selectRandomIndex = 0;
    256.         if CompoundClass == 2 then
    257.                 selectRandomIndex = 1;
    258.         end
    259.         
    260.         if CompoundClass == 3 then
    261.                 selectRandomIndex = 2;
    262.         end
    263.         
    264.         selectRandomIndex = selectRandomIndex * maxStuffGrade;
    265.         selectRandomIndex = selectRandomIndex + (stuffGrade - 1);
    266.         selectRandomIndex = selectRandomIndex * maxSpecialStuffChange;
    267.         if specialStuff ~= -1 then
    268.                 selectRandomIndex = selectRandomIndex + 1;
    269.         end
    270.         selectRandomIndex = selectRandomIndex * maxStuffCountChange;
    271.         selectRandomIndex = selectRandomIndex + (stuffCount - 3);
    272.         local randValue = LuaFnCompoundRandom(selectRandomIndex);

    273.         if randValue > SuccOdds then                                                                                                -- 合成失败
    274.                 LuaFnSendAbilityFailureMsg( sceneId, selfId, -1, -1, -1 )
    275.                 LuaFnAuditGemCompound( sceneId, selfId, 0,
    276.                         stuffList[1], stuffList[2], stuffList[3], stuffList[4], stuffList[5], -1 )
    277.         else
    278.                 res = LuaFnTryRecieveItemIgnoreFatigueState( sceneId, selfId, newItemIndex, QUALITY_MUST_BE_CHANGE)
    279.                 if res == -1 then
    280.                         return OR_FAILURE
    281.                 end
    282.                 --强制绑定
    283.                 if(IsBind == 1) then
    284.                         LuaFnItemBind( sceneId, selfId, res);
    285.                 end
    286.                
    287.                 --增加特效
    288.                 LuaFnSendSpecificImpactToUnit(sceneId, selfId, selfId, selfId, 49, 0);
    289.                
    290.                 --醒目提示
    291.                 BeginEvent( sceneId )
    292.                         AddText( sceneId, "合成成功" )
    293.                 EndEvent( sceneId )
    294.                 DispatchMissionTips( sceneId, selfId )
    295.                
    296.                 if x701602_IsGem( newItemIndex ) == 1 then
    297.                         stuffGrade = x701602_GetStuffGrade( newItemIndex )
    298.                         --公告精简,小于4级的宝石合成不发公告
    299.                         if stuffGrade >= 4 then
    300.                                 local szTransferItem = GetBagItemTransfer( sceneId, selfId, res )
    301.                                 BroadMsgByChatPipe( sceneId, selfId, "#W#{_INFOUSR" .. GetName( sceneId, selfId ) .. "}#H经过一番努力,终于合成出了#W#{_INFOMSG" .. szTransferItem .. "}#H。", 4 )
    302.                         end
    303.                 end

    304.                 LuaFnSendAbilitySuccessMsg( sceneId, selfId, -1, -1, newItemIndex )                -- 提示生成物
    305.                 LuaFnAuditGemCompound( sceneId,selfId, 1,
    306.                         stuffList[1], stuffList[2], stuffList[3], stuffList[4], stuffList[5], newItemIndex )
    307.         end

    308.         return OR_OK
    309. end
    复制代码


    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

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