添加示例项目

This commit is contained in:
2026-04-16 16:27:53 +08:00
parent 69a2141804
commit 721fb5a992
192 changed files with 10148 additions and 0 deletions

View File

@@ -0,0 +1,9 @@
{
"ProjectName": "强化相关概率提升",
"ProjectDescribe": "强化、增幅、锻造可以根据角色ID或者穿戴的物品ID提升概率可以叠加概率指定角色优先级最高",
"ProjectAuthor": "小南瓜",
"ProjectVersion": 1.0,
"ProjectConfig": "强化相关概率配置.json",
"ProjectFiles": ["强化增幅锻造.nut"],
"ProjectRunFunc": "_Dps_Upgrade_Boost_Main_"
}

View File

@@ -0,0 +1,134 @@
function _Dps_Upgrade_Boost_Main_() {
_Dps_Upgrade_Boost_Logic_();
}
function _Dps_Upgrade_Boost_Main_Reload_(OldConfig) {
_Dps_Upgrade_Boost_Logic_();
}
function _Dps_Upgrade_Boost_Logic_() {
Cb_WongWork_CItemUpgrade_Enter_Func._Upgrade_Boost <- function(args) {
local SUser = User(args[1]);
local characNo = SUser.GetCID();
local invenItem = args[2];
local upgradeInfo = args[3];
local probBase = NativePointer(args[0]).add(0x4EC).readU32();
local currentLevel = Sq_CallFunc(S_Ptr("0x080F506C"), "int", ["pointer"], invenItem);
local targetLevel = currentLevel + 1;
local originalFailRate = NativePointer(upgradeInfo).add(32).readU32();
local isAmplify = _UpgradeBoostHelper.hasAmplifyAbility(invenItem);
local upgradeType = isAmplify ? "增幅" : "强化";
local boost = _UpgradeBoostHelper.getFinalBoost(SUser, targetLevel, upgradeType);
if (boost > 0) {
local boostAmount = (probBase * boost / 100).tointeger();
local newFailRate = originalFailRate - boostAmount;
if (newFailRate < 0) newFailRate = 0;
NativePointer(upgradeInfo).add(32).writeU32(newFailRate);
}
}
Cb_WongWork_CItemUpgrade_Separate_Enter_Func._Separate_Boost <- function(args) {
local thisPtr = args[0];
local SUser = User(args[1]);
local invenItem = args[2];
local upgradeInfo = args[3];
local originalFailRate = NativePointer(upgradeInfo).add(4).readU32();
local probBase = NativePointer(thisPtr).add(400).readU32();
local currentLevel = NativePointer(invenItem).add(51).readU8();
local targetLevel = currentLevel + 1;
local boost = _UpgradeBoostHelper.getFinalBoost(SUser, targetLevel, "锻造");
if (boost > 0) {
local boostAmount = ((probBase / 10) * boost / 100).tointeger();
local newFailRate = originalFailRate + boostAmount;
if (newFailRate > 10000) newFailRate = 10000;
NativePointer(upgradeInfo).add(4).writeU32(newFailRate);
}
}
}
class _UpgradeBoostHelper {
function hasAmplifyAbility(invenItem) {
return NativePointer(invenItem).add(17).readU8() != 0;
}
function isInRange(level, rangeStr) {
local parts = split(rangeStr, "-");
if (parts.len() == 1) {
return level == parts[0].tointeger();
} else if (parts.len() == 2) {
local min = parts[0].tointeger();
local max = parts[1].tointeger();
return level >= min && level <= max;
}
return false;
}
function getBoostFromConfig(config, level, upgradeType) {
if (!config.rawin(upgradeType)) return 0;
local typeConfig = config[upgradeType];
if (typeof typeConfig == "array") {
foreach (rule in typeConfig) {
if (rule.rawin("目标等级") && rule.rawin("加成")) {
if (_UpgradeBoostHelper.isInRange(level, rule["目标等级"])) {
return rule["加成"];
}
}
}
return 0;
}
if (typeof typeConfig == "table") {
local levelKey = level.tostring();
if (typeConfig.rawin(levelKey)) {
return typeConfig[levelKey];
}
}
return 0;
}
function getFinalBoost(user, level, upgradeType) {
local Config = GlobalConfig.Get("强化相关概率配置.json");
local characNo = user.GetCID();
// 1. 检查VIP
foreach (vip in Config["VIP配置"]) {
if (vip["角色ID"] == characNo) {
return _UpgradeBoostHelper.getBoostFromConfig(vip, level, upgradeType);
}
}
// 2. 检查穿戴物品(叠加)
local InvenObj = user.GetInven();
if (!InvenObj) return 0;
local totalBoost = 0;
foreach (itemCfg in Config["物品配置"]) {
local itemObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_BODY, itemCfg["槽位"]);
if (itemObj.IsEmpty) continue;
local itemId = itemObj.GetIndex();
if (itemId == itemCfg["物品ID"]) {
local itemBoost = _UpgradeBoostHelper.getBoostFromConfig(itemCfg, level, upgradeType);
totalBoost += itemBoost;
}
}
return totalBoost;
}
}

View File

@@ -0,0 +1,71 @@
{
"VIP配置": [
{
"角色ID": 1111111,
"备注": "GM测试号",
"强化": [
{"目标等级": "1-4", "加成": 20},
{"目标等级": "5-7", "加成": 15},
{"目标等级": "8-10", "加成": 10},
{"目标等级": "11-15", "加成": 5}
],
"增幅": [
{"目标等级": "1-4", "加成": 20},
{"目标等级": "5-7", "加成": 15},
{"目标等级": "8-10", "加成": 10},
{"目标等级": "11-15", "加成": 5}
],
"锻造": [
{"目标等级": "1-3", "加成": 10},
{"目标等级": "4-7", "加成": 5}
]
}
],
"物品配置": [
{
"槽位": 11,
"物品ID": 600330013,
"备注": "称号",
"强化": [
{"目标等级": "1-4", "加成": 20},
{"目标等级": "5-10", "加成": 15},
{"目标等级": "11-15", "加成": 10}
],
"增幅": [
{"目标等级": "1-4", "加成": 20},
{"目标等级": "5-10", "加成": 15},
{"目标等级": "11-15", "加成": 10}
],
"锻造": [
{"目标等级": "1-3", "加成": 10},
{"目标等级": "4-7", "加成": 5}
]
},
{
"槽位": 22,
"物品ID": 63118,
"备注": "宠物",
"强化": [
{"目标等级": "1-10", "加成": 15},
{"目标等级": "11-15", "加成": 10}
],
"增幅": [
{"目标等级": "1-10", "加成": 15},
{"目标等级": "11-15", "加成": 10}
],
"锻造": [
{"目标等级": "1-7", "加成": 8}
]
}
],
"配置说明": {
"目标等级说明": "目标等级5表示强化到+5(从+4强到+5)",
"范围说明": "5-10表示强化到+5~+10都享受此加成",
"单个数字": "也可以写单个数字如 10 表示只有+10享受加成",
"加成计算": "原概率+加成值,如原本10%加成20则变30%",
"优先级": "VIP配置优先,物品配置叠加",
"槽位": "身上穿的装备槽位(0-25)//0时装帽子, 1时装头发, 2时装脸部, 3时装上衣, 4时装下装, 5时装鞋子, 6时装护肩, 7时装腰带, 8时装皮肤, 9光环, 10武器, 11称号, 12上衣, 13头肩, 14下装, 15鞋子, 16腰带, 17项链, 18手镯, 19戒指, 20左槽, 21右槽, 22宠物, 23宠物装备红, 24宠物装备蓝, 25宠物装备绿",
"角色ID": "角色ID可以自行查看数据库中 库名taiwan_cain → 表名charac_info → 字段charac_no代表角色ID, 可以理解为角色注册顺序, 第一个注册的角色ID就是1"
}
}