添加示例项目
This commit is contained in:
9
示例项目/强化相关概率提升/Proj.ifo
Normal file
9
示例项目/强化相关概率提升/Proj.ifo
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ProjectName": "强化相关概率提升",
|
||||
"ProjectDescribe": "强化、增幅、锻造可以根据角色ID或者穿戴的物品ID提升概率可以叠加概率,指定角色优先级最高",
|
||||
"ProjectAuthor": "小南瓜",
|
||||
"ProjectVersion": 1.0,
|
||||
"ProjectConfig": "强化相关概率配置.json",
|
||||
"ProjectFiles": ["强化增幅锻造.nut"],
|
||||
"ProjectRunFunc": "_Dps_Upgrade_Boost_Main_"
|
||||
}
|
||||
134
示例项目/强化相关概率提升/强化增幅锻造.nut
Normal file
134
示例项目/强化相关概率提升/强化增幅锻造.nut
Normal 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;
|
||||
}
|
||||
}
|
||||
71
示例项目/强化相关概率提升/强化相关概率配置.json
Normal file
71
示例项目/强化相关概率提升/强化相关概率配置.json
Normal 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"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user