DP-S_Script/_DPS_/_BuiltProject/融合装备/融合装备.nut

174 lines
6.4 KiB
Plaintext

/*
文件名:装备融合.nut
路径:MyProject/装备融合/装备融合.nut
创建日期:2025-12-06 19:34
文件用途:
*/
class ItemFusionC {
//配置表
Info = null;
//用户状态表
UserState = null;
constructor() {
Info = {};
UserState = {};
//读取PVF
InitPvf();
//注册客户端收包
RegisterClient();
}
function RegisterClient() {
ClientSocketPackFuncMap.rawset(21006001, function(SUser, Jso) {
local ItemInfo1 = Jso.item1;
local ItemInfo2 = Jso.item2;
local Key = ItemInfo1.itemId + "_" + ItemInfo2.itemId;
local Key2 = ItemInfo2.itemId + "_" + ItemInfo1.itemId;
local CheckFlag1 = Info.rawin(Key);
local CheckFlag2 = Info.rawin(Key2);
if (CheckFlag1 || CheckFlag2) {
SUser.SendJso({
op = 21006002,
msg = 1,
value = Info[CheckFlag1 ? Key : Key2]
});
local Cid = SUser.GetCID();
UserState.rawset(Cid, {
time = Sq_GetTimestampString().slice(-9).tointeger(),
info = Jso
reward = Info[CheckFlag1 ? Key : Key2]
});
} else {
SUser.SendJso({
op = 21006002,
msg = 2,
});
}
}.bindenv(this));
ClientSocketPackFuncMap.rawset(21006003, function(SUser, Jso) {
local Cid = SUser.GetCID();
if (!UserState.rawin(Cid)) {
SUser.SendNotiBox(" 融合失败 请放入两个可融合的装备 并且融合时请不要操作背包", 1);
SUser.SendJso({
op = 21006004,
error = true,
});
} else {
//获取存储的融合信息
local UserInfo = UserState[Cid].info;
local ItemInfo1 = UserInfo.item1;
local ItemInfo2 = UserInfo.item2;
//获取需要融合的两件装备
local InvenObj = SUser.GetInven();
local Equ1 = InvenObj.GetSlot(Inven.INVENTORY_TYPE_ITEM, 9 + ItemInfo1.pos);
local Equ2 = InvenObj.GetSlot(Inven.INVENTORY_TYPE_ITEM, 9 + ItemInfo2.pos);
//判断ID 以免被移动
if (Equ1.GetIndex() != ItemInfo1.itemId || Equ2.GetIndex() != ItemInfo2.itemId) {
SUser.SendNotiBox(" 融合失败 请放入两个可融合的装备 并且融合时请不要操作背包", 1);
SUser.SendJso({
op = 21006004,
error = true,
});
} else {
//告诉客户端播放动画
SUser.SendJso({
op = 21006004,
});
//获取信息
local forging = Equ1.GetForging(); //锻造
local upgrade = Equ1.GetUpgrade(); //强化
local amplification = Equ1.GetAmplification(); //增幅
local enchanting = Equ1.GetEnchanting(); //附魔
//销毁融合的两件装备
Equ1.Delete();
Equ2.Delete();
SUser.SendUpdateItemList(1, 0, 9 + ItemInfo1.pos);
SUser.SendUpdateItemList(1, 0, 9 + ItemInfo2.pos);
//获取融合后的装备ID
local reward1 = UserState[Cid].reward[0];
local reward2 = UserState[Cid].reward[1];
Timer.SetTimeOut(function() {
local RewardNotiList = [
[reward1, 1]
];
//发送奖励
local Info = SUser.GiveItem(reward1, 1);
if (reward2 != 0) {
SUser.GiveItem(reward2, 1);
RewardNotiList.append([reward2, 1]);
}
SUser.SendItemWindowNotification(RewardNotiList);
//获取装备 并设置继承属性
local InvenObj = SUser.GetInven();
if (InvenObj) {
local ItemObj1 = InvenObj.GetSlot(1, Info[1])
if (ItemObj1) {
if (forging > 0) {
ItemObj1.SetForging(forging);
}
if (upgrade > 0) {
ItemObj1.SetUpgrade(upgrade);
}
if (amplification != 0) {
ItemObj1.SetAmplification(amplification);
}
ItemObj1.SetEnchanting(enchanting);
ItemObj1.Flush();
SUser.SendUpdateItemList(1, 0, Info[1]);
}
}
}.bindenv(this), 2400);
UserState.rawdelete(Cid);
}
}
}.bindenv(this));
};
function InitPvf() {
// Script();
ScriptData.GetFileData("etc/rindro/itemtool/itemfusion/itemfusion.etc", function(DataTable, Data) {
while (!Data.Eof()) {
local Fragment = Data.Get();
if (Fragment == "[ITEM]") {
while (true) {
local Fbuf = Data.Get();
if (Fbuf == "[/ITEM]") {
break;
}
local Item1 = Fbuf;
local Item2 = Data.Get();
local GiveItem1 = Data.Get();
local GiveItem2 = Data.Get();
local Key = Item1 + "_" + Item2;
local Value = [GiveItem1, GiveItem2];
Info.rawset(Key, Value);
}
}
}
}.bindenv(this));
}
}
Timer.SetTimeOut(function() {
getroottable()._ItemFusion_ <- ItemFusionC();
print("融合装备已加载");
}, 1);