DP-S-Script/Dps_C/B-TW_UseItem.nut

1691 lines
71 KiB
Plaintext
Raw Normal View History

2024-09-16 17:05:26 +08:00
return;
//贪玩宝珠拆解
Cb_Use_Item_Sp_Func[TW_DisassembleCouponId] <- function(SUser, ItemId) {
SUser.GiveItem(ItemId, 1);
local InvenObj = SUser.GetInven();
if (InvenObj) {
local ItemObj = InvenObj.GetSlot(1, 9);
if (ItemObj.GetIndex() != 0) {
local OldEn = ItemObj.GetEnchanting();
if (OldEn) {
if (OldEn in TW_DisassembleTable) {
ItemObj.SetEnchanting(0);
ItemObj.Flush();
SUser.SendUpdateItemList(1, 0, 9);
local ItemName = PvfItem.GetNameById(TW_DisassembleTable[OldEn]);
local Ret = SUser.GiveItem(TW_DisassembleTable[OldEn], 1);
if (!Ret) {
local T = {};
T[TW_DisassembleTable[OldEn]] <- 1;
SUser.SendMail(T, {
Title = TW_STR_00001,
Text = TW_STR_00002
})
SUser.SendNotiPacketMessage(TW_STR_00003, 8);
} else {
SUser.SendNotiPacketMessage(format(TW_STR_00004, ItemName), 8);
}
}
}
} else {
SUser.SendNotiPacketMessage(TW_STR_00018, 8);
}
} else {
SUser.SendNotiPacketMessage(TW_STR_00018, 8);
}
}
//贪玩转职书
Cb_Use_Item_Sp_Func[TW_GrowTypeBook0] <- function(SUser, ItemId) {
SUser.ChangeGrowType(0, 0);
SUser.SendNotiPacket(0, 2, 0);
SUser.InitSkillW(0, 0);
}
Cb_Use_Item_Sp_Func[TW_GrowTypeBook1] <- function(SUser, ItemId) {
SUser.ChangeGrowType(1, 1);
SUser.SendNotiPacket(0, 2, 0);
SUser.InitSkillW(1, 1);
}
Cb_Use_Item_Sp_Func[TW_GrowTypeBook2] <- function(SUser, ItemId) {
SUser.ChangeGrowType(2, 1);
SUser.SendNotiPacket(0, 2, 0);
SUser.InitSkillW(2, 1);
}
Cb_Use_Item_Sp_Func[TW_GrowTypeBook3] <- function(SUser, ItemId) {
SUser.ChangeGrowType(3, 1);
SUser.SendNotiPacket(0, 2, 0);
SUser.InitSkillW(3, 1);
}
Cb_Use_Item_Sp_Func[TW_GrowTypeBook4] <- function(SUser, ItemId) {
SUser.ChangeGrowType(4, 1);
SUser.SendNotiPacket(0, 2, 0);
SUser.InitSkillW(4, 1);
}
//贪玩 任务完成卷
foreach(_ItemId, QuestId in TW_QuestClearCouponTable) {
Cb_Use_Item_Sp_Func[_ItemId] <- function(SUser, ItemId) {
SUser.ClearQuest_Gm(TW_QuestClearCouponTable[ItemId]);
}
}
//贪玩 锻造卷固定
foreach(_ItemId, ForgingInfo in TW_ForgingBaseCouponTable) {
Cb_Use_Item_Sp_Func[_ItemId] <- function(SUser, ItemId) {
local Info = TW_ForgingBaseCouponTable[ItemId];
local InvenObj = SUser.GetInven();
if (InvenObj) {
local ItemObj = InvenObj.GetSlot(1, 9);
//空装备
if (ItemObj.IsEmpty) {
SUser.SendNotiPacketMessage(TW_STR_00005, 8);
SUser.GiveItem(ItemId, 1);
return;
}
local OldLevel = ItemObj.GetForging();
local RandNum = MathClass.Rand(0, 100);
if (RandNum <= Info.Probability) {
ItemObj.SetForging(Info.Level);
ItemObj.Flush();
SUser.SendUpdateItemList(1, 0, 9);
SUser.SendNotiPacketMessage(format(TW_STR_00006, Info.Level), 8);
} else {
SUser.SendNotiPacketMessage(format(TW_STR_00007, OldLevel), 8);
}
}
}
}
//贪玩 锻造卷提升
foreach(_ItemId, ForgingInfo in TW_ForgingUpCouponTable) {
Cb_Use_Item_Sp_Func[_ItemId] <- function(SUser, ItemId) {
local DLevel = TW_ForgingUpCouponTable[ItemId];
local InvenObj = SUser.GetInven();
if (InvenObj) {
local ItemObj = InvenObj.GetSlot(1, 9);
//空装备
if (ItemObj.IsEmpty) {
SUser.SendNotiPacketMessage(TW_STR_00005, 8);
SUser.GiveItem(ItemId, 1);
return;
}
local OldLevel = ItemObj.GetForging();
if (OldLevel >= TW_MaxForgingLevel) {
SUser.SendNotiPacketMessage(TW_STR_00008, 8);
SUser.GiveItem(ItemId, 1);
return;
}
local RandNum = MathClass.Rand(0, 100);
if (RandNum <= DLevel) {
ItemObj.SetForging(OldLevel + 1);
ItemObj.Flush();
SUser.SendUpdateItemList(1, 0, 9);
SUser.SendNotiPacketMessage(format(TW_STR_00006, (OldLevel + 1)), 8);
} else {
SUser.SendNotiPacketMessage(format(TW_STR_00007, OldLevel), 8);
}
}
}
}
//贪玩 宠物升级卷
foreach(_ItemId, baseInfo in TW_Creature_UpTable) {
local Info = clone(baseInfo);
Cb_Use_Item_Sp_Func[_ItemId] <- function(SUser, ItemId) {
local Cid = SUser.GetCID();
local InvenObj = SUser.GetInven();
if (InvenObj) {
//是否拥有足够的材料
if (InvenObj.CheckArrItemCount(Info.Stk)) {
local ItemObj = InvenObj.GetSlot(3, 0);
if (ItemObj.GetIndex() == Info.S_Id) {
InvenObj.DeleteArrItemCount(Info.Stk);
SUser.SendItemSpace(7);
local RandNum = MathClass.Rand(0, 100);
if (RandNum <= Info.Probability) {
ItemObj.Delete();
local Sql = "delete from taiwan_cain_2nd.creature_items where charac_no=" + Cid + " and slot = 0;'";
Sq_MysqlExecNoRet(Sql);
SUser.SendItemSpace(7);
SUser.GiveItem(Info.D_Id, 1);
local ItemName = PvfItem.GetNameById(Info.D_Id);
SUser.SendNotiPacketMessage(format(TW_STR_00009, ItemName), 8);
} else {
SUser.SendNotiPacketMessage(TW_STR_00010, 8);
}
} else {
SUser.GiveItem(ItemId, 1);
SUser.SendNotiPacketMessage(TW_STR_00011, 8);
}
} else {
SUser.GiveItem(ItemId, 1);
SUser.SendNotiPacketMessage(TW_STR_00012, 8);
}
}
}
}
//贪玩 宠物回收
Cb_Use_Item_Sp_Func[TW_Creature_RecTableStk] <- function(SUser, ItemId) {
SUser.GiveItem(ItemId, 1);
local Cid = SUser.GetCID();
local InvenObj = SUser.GetInven();
if (InvenObj) {
local ItemObj = InvenObj.GetSlot(3, 0);
local Flag = false;
foreach(Infoobj in TW_Creature_RecTable) {
local Info = clone(Infoobj);
if (ItemObj.GetIndex() == Info.S_Id) {
Flag = true;
ItemObj.Delete();
local Sql = "delete from taiwan_cain_2nd.creature_items where charac_no=" + Cid + " and slot = 0;'";
Sq_MysqlExecNoRet(Sql);
SUser.SendItemSpace(7);
local ItemName = PvfItem.GetNameById(Info.S_Id);
SUser.SendNotiPacketMessage(format(TW_STR_00038, ItemName), 8);
foreach(io in Info.Stk) {
SUser.GiveItem(io.Id, io.Count);
}
}
}
if (!Flag) SUser.SendNotiPacketMessage(TW_STR_00037, 8);
}
}
//贪玩 时装升级卷
foreach(_ItemId, baseInfo in TW_Avatar_UpTable) {
local Info = clone(baseInfo);
Cb_Use_Item_Sp_Func[_ItemId] <- function(SUser, ItemId) {
local Cid = SUser.GetCID();
local InvenObj = SUser.GetInven();
if (InvenObj) {
//是否拥有足够的材料
if (InvenObj.CheckArrItemCount(Info.Stk)) {
local ItemObj = InvenObj.GetSlot(2, 0);
if (ItemObj.GetIndex() == Info.S_Id) {
InvenObj.DeleteArrItemCount(Info.Stk);
local RandNum = MathClass.Rand(0, 100);
if (RandNum <= Info.Probability) {
ItemObj.Delete();
local Sql = "delete from taiwan_cain_2nd.user_items where charac_no=" + Cid + " and slot = 10;'";
Sq_MysqlExecNoRet(Sql);
SUser.SendItemSpace(1);
SUser.GiveItem(Info.D_Id, 1);
local ItemName = PvfItem.GetNameById(Info.D_Id);
SUser.SendNotiPacketMessage(format(TW_STR_00013, ItemName), 8);
} else {
SUser.SendNotiPacketMessage(TW_STR_00014, 8);
}
} else {
SUser.GiveItem(ItemId, 1);
SUser.SendNotiPacketMessage(TW_STR_00015, 8);
}
} else {
SUser.GiveItem(ItemId, 1);
SUser.SendNotiPacketMessage(TW_STR_00012, 8);
}
}
}
}
//贪玩 时装回收卷
Cb_Use_Item_Sp_Func[TW_Avatar_RecTableStk] <- function(SUser, ItemId) {
SUser.GiveItem(ItemId, 1);
local Cid = SUser.GetCID();
local InvenObj = SUser.GetInven();
if (InvenObj) {
local ItemObj = InvenObj.GetSlot(2, 0);
local Flag = false;
foreach(Infoobj in TW_Avatar_RecTable) {
local Info = clone(Infoobj);
if (ItemObj.GetIndex() == Info.S_Id) {
Flag = true;
ItemObj.Delete();
local Sql = "delete from taiwan_cain_2nd.user_items where charac_no=" + Cid + " and slot = 10;'";
Sq_MysqlExecNoRet(Sql);
SUser.SendItemSpace(1);
local ItemName = PvfItem.GetNameById(Info.S_Id);
SUser.SendNotiPacketMessage(format(TW_STR_00040, ItemName), 8);
foreach(io in Info.Stk) {
SUser.GiveItem(io.Id, io.Count);
}
}
}
if (!Flag) SUser.SendNotiPacketMessage(TW_STR_00039, 8);
}
}
//贪玩 宠物装备升级卷
foreach(_ItemId, baseInfo in TW_CreatureEqui_UpTable) {
local Info = clone(baseInfo);
Cb_Use_Item_Sp_Func[_ItemId] <- function(SUser, ItemId) {
local Cid = SUser.GetCID();
local InvenObj = SUser.GetInven();
if (InvenObj) {
//是否拥有足够的材料
if (InvenObj.CheckArrItemCount(Info.Stk)) {
local ItemObj = InvenObj.GetSlot(3, 140);
if (ItemObj.GetIndex() == Info.S_Id) {
InvenObj.DeleteArrItemCount(Info.Stk);
local RandNum = MathClass.Rand(0, 100);
if (RandNum <= Info.Probability) {
ItemObj.Delete();
// local Sql = "delete from taiwan_cain_2nd.user_items where charac_no=" + Cid + " and slot = 10;'";
// Sq_MysqlExecNoRet(Sql);
SUser.SendItemSpace(0);
SUser.SendItemSpace(1);
SUser.SendItemSpace(2);
SUser.SendItemSpace(3);
SUser.SendItemSpace(4);
SUser.SendItemSpace(5);
SUser.SendItemSpace(6);
SUser.SendItemSpace(7);
SUser.GiveItem(Info.D_Id, 1);
local ItemName = PvfItem.GetNameById(Info.D_Id);
SUser.SendNotiPacketMessage(format(TW_STR_00025, ItemName), 8);
} else {
SUser.SendNotiPacketMessage(TW_STR_00024, 8);
}
} else {
SUser.GiveItem(ItemId, 1);
SUser.SendNotiPacketMessage(TW_STR_00023, 8);
}
} else {
SUser.GiveItem(ItemId, 1);
SUser.SendNotiPacketMessage(TW_STR_00012, 8);
}
}
}
}
//贪玩 宠物装备回收卷
Cb_Use_Item_Sp_Func[TW_CreatureEqui_RecTableStk] <- function(SUser, ItemId) {
SUser.GiveItem(ItemId, 1);
local Cid = SUser.GetCID();
local InvenObj = SUser.GetInven();
if (InvenObj) {
local ItemObj = InvenObj.GetSlot(3, 140);
local Flag = false;
foreach(Infoobj in TW_CreatureEqui_RecTable) {
local Info = clone(Infoobj);
if (ItemObj.GetIndex() == Info.S_Id) {
Flag = true;
ItemObj.Delete();
// local Sql = "delete from taiwan_cain_2nd.user_items where charac_no=" + Cid + " and slot = 10;'";
// Sq_MysqlExecNoRet(Sql);
SUser.SendItemSpace(0);
SUser.SendItemSpace(1);
SUser.SendItemSpace(2);
SUser.SendItemSpace(3);
SUser.SendItemSpace(4);
SUser.SendItemSpace(5);
SUser.SendItemSpace(6);
SUser.SendItemSpace(7);
local ItemName = PvfItem.GetNameById(Info.S_Id);
SUser.SendNotiPacketMessage(format(TW_STR_00042, ItemName), 8);
foreach(io in Info.Stk) {
SUser.GiveItem(io.Id, io.Count);
}
}
}
if (!Flag) SUser.SendNotiPacketMessage(TW_STR_00041, 8);
}
}
//贪玩 材料进阶卷
foreach(_ItemId, baseInfo in TW_StkUpJTable) {
local Info = clone(baseInfo);
Cb_Use_Item_Sp_Func[_ItemId] <- function(SUser, ItemId) {
local Cid = SUser.GetCID();
local InvenObj = SUser.GetInven();
if (InvenObj) {
local GiveRate = 0;
local SlotIdx = InvenObj.GetSlotById(Info.Stk.Id);
if (SlotIdx != -1) {
local SlotItem = InvenObj.GetSlot(1, SlotIdx);
if (SlotItem) {
if (SlotItem.GetType() != "装备") {
local SlotCount = SlotItem.GetAdd_Info();
local GiveRate = floor(SlotCount.tofloat() / Info.Stk.Count.tofloat());
2024-10-11 23:56:27 +08:00
if (GiveRate< 1) {
2024-09-16 17:05:26 +08:00
SUser.SendNotiPacketMessage(format(TW_STR_00084), 8);
return false;
}
Sq_Inven_RemoveItemFormCount(InvenObj.C_Object, 1, SlotIdx, Info.Stk.Count * GiveRate, 10, 1);
SUser.SendUpdateItemList(1, 0, SlotIdx);
SUser.GiveItem(Info.D_Id, GiveRate);
local ItemName = PvfItem.GetNameById(Info.D_Id);
SUser.SendItemSpace(0);
SUser.SendNotiPacketMessage(format(TW_STR_00083, ItemName, GiveRate), 8);
}
}
}
}
return false;
}
}
//贪玩 装备进阶卷
foreach(_ItemId, baseInfo in TW_EquipUpJTable) {
local Info = clone(baseInfo);
Cb_Use_Item_Sp_Func[_ItemId] <- function(SUser, ItemId) {
local Cid = SUser.GetCID();
local InvenObj = SUser.GetInven();
if (InvenObj) {
//是否拥有足够的材料
if (InvenObj.CheckArrItemCount(Info.Stk)) {
local ItemObj = InvenObj.GetSlot(1, 9);
if (ItemObj.GetIndex() == Info.S_Id) {
InvenObj.DeleteArrItemCount(Info.Stk);
SUser.SendItemSpace(0);
local RandNum = MathClass.Rand(0, 100);
if (RandNum <= Info.Probability) {
ItemObj.Delete();
//强化等级
local UpgradeValue = ItemObj.GetUpgrade();
//增幅
local AmplificationValue = ItemObj.GetAmplification();
//锻造
local ForgingValue = ItemObj.GetForging();
//附魔
local EnchantingValue = ItemObj.GetEnchanting();
local AddItemInfo = SUser.GiveItem(Info.D_Id, 1);
local ItemName = PvfItem.GetNameById(Info.D_Id);
local NewAddItemObj = InvenObj.GetSlot(1, AddItemInfo[1]);
NewAddItemObj.SetUpgrade(UpgradeValue);
NewAddItemObj.SetAmplification(AmplificationValue);
NewAddItemObj.SetForging(ForgingValue);
NewAddItemObj.SetEnchanting(EnchantingValue);
NewAddItemObj.Flush();
SUser.SendItemSpace(0);
SUser.SendNotiPacketMessage(format(TW_STR_00044, ItemName), 8);
} else {
SUser.SendNotiPacketMessage(TW_STR_00045, 8);
}
} else {
SUser.GiveItem(ItemId, 1);
SUser.SendNotiPacketMessage(TW_STR_00043, 8);
}
} else {
SUser.GiveItem(ItemId, 1);
SUser.SendNotiPacketMessage(TW_STR_00012, 8);
}
}
}
}
//贪玩 一键使用道具
foreach(_ItemId, baseInfo in TW_OneUseTable) {
local Info = clone(baseInfo);
Cb_Use_Item_Sp_Func[_ItemId] <- function(SUser, ItemId) {
local Cid = SUser.GetCID();
local InvenObj = SUser.GetInven();
if (InvenObj) {
local SlotIdx = InvenObj.GetSlotById(ItemId);
local ItemObj = InvenObj.GetSlot(1, SlotIdx);
local ItemCount = ItemObj.GetAdd_Info();
local GiveItemTableBuf = [];
for (local i = 0; i< Info.Stk.len(); i++) {
local T = {};
T.Id <- Info.Stk[i].Id;
if (T.Id != "金币" && T.Id != "点券" && T.Id != "代币") T.Count <- (ItemCount * Info.Stk[i].Count);
else {
T.MinCount <- (ItemCount * Info.Stk[i].MinCount);
T.MaxCount <- (ItemCount * Info.Stk[i].MaxCount);
}
GiveItemTableBuf.append(T);
}
SUser.SendNotiPacketMessage(format(TW_STR_00047, PvfItem.GetNameById(ItemId), ItemCount), 8);
local mitems = {};
foreach(io in GiveItemTableBuf) {
if (io.Id == "点券") {
local RandCount = MathClass.Rand(io.MinCount, io.MaxCount);
SUser.RechargeCera(RandCount);
local GiveName = "";
if (type(io.Id) == "string") GiveName = io.Id;
else GiveName = PvfItem.GetNameById(io.Id);
SUser.SendNotiPacketMessage(format("[%s] %d", GiveName, RandCount), 8);
continue;
} else if (io.Id == "代币") {
local RandCount = MathClass.Rand(io.MinCount, io.MaxCount);
SUser.RechargeCeraPoint(RandCount);
local GiveName = "";
if (type(io.Id) == "string") GiveName = io.Id;
else GiveName = PvfItem.GetNameById(io.Id);
SUser.SendNotiPacketMessage(format("[%s] %d", GiveName, RandCount), 8);
continue;
} else if (io.Id == "金币") {
local RandCount = MathClass.Rand(io.MinCount, io.MaxCount);
Sq_CallFunc(S_Ptr("0x84FF29C"), "int", ["pointer", "int", "int", "int", "int"], Sq_CallFunc(S_Ptr("0x80DA28E"), "pointer", ["pointer"], SUser.C_Object), RandCount, 0, 0, 0);
local GiveName = "";
if (type(io.Id) == "string") GiveName = io.Id;
else GiveName = PvfItem.GetNameById(io.Id);
SUser.SendNotiPacketMessage(format("[%s] %d", GiveName, RandCount), 8);
continue;
} else {
local Ret = SUser.GiveItem(io.Id, io.Count);
if (!Ret) mitems[io.Id] <- (io.Count);
}
local GiveName = "";
if (type(io.Id) == "string") GiveName = io.Id;
else GiveName = PvfItem.GetNameById(io.Id);
SUser.SendNotiPacketMessage(format("[%s] %d", GiveName, io.Count), 8);
}
if (mitems.len() > 0) {
SUser.SendMail(mitems, {
Title = "系统",
Text = format(TW_STR_00046, PvfItem.GetNameById(ItemId)),
})
}
ItemObj.Delete();
SUser.GiveItem(ItemId, 1);
SUser.SendItemSpace(0);
SUser.SendNotiPacketMessage(" ", 8);
}
}
}
//贪玩 一键使用道具
Cb_Use_Item_Sp_Func[TW_BoxId] <- function(SUser, ItemId) {
local Cid = SUser.GetCID();
local InvenObj = SUser.GetInven();
if (InvenObj) {
local SlotIdx = InvenObj.GetSlotById(ItemId);
local ItemObj = InvenObj.GetSlot(1, SlotIdx);
//获得道具数量
local ItemCount = ItemObj.GetAdd_Info();
//本次真实使用数量
local UseCount = 0;
if (ItemCount< 10) UseCount = ItemCount;
else if (ItemCount >= 10 && ItemCount< 500) UseCount = 10;
else if (ItemCount >= 500) UseCount = 20;
local GiveItemTable = {};
for (local us = 0; us< UseCount; us++) {
for (local i = 0; i< TW_Box_Group; i++) {
local GroupConfig = getroottable()["TW_Box_Reward_" + i];
//遍历编号表
local RandArr = [0];
//开始计算第一个道具的补全几率
local OneIdexProbability = 0.0;
for (local z = 1; z< GroupConfig.len(); z++) {
OneIdexProbability += (GroupConfig[z][1] * 100000);
RandArr.append(GroupConfig[z][1] * 100000);
}
OneIdexProbability = (100000 - OneIdexProbability);
RandArr[0] = OneIdexProbability;
//取随机数
local RandNum = MathClass.Rand(0, 100000);
local RandAddFlag = 0;
for (local q = 0; q< RandArr.len(); q++) {
RandAddFlag += RandArr[q];
if (RandNum< RandAddFlag) {
local Name = GroupConfig[q][4];
local Noti = GroupConfig[q][5];
local Id = GroupConfig[q][0];
local Count = MathClass.Rand(GroupConfig[q][2], GroupConfig[q][3]);
if (GiveItemTable.rawin(Id)) {
GiveItemTable[Id].Count += Count;
} else {
GiveItemTable[Id] <- {};
GiveItemTable[Id].Count <- Count;
GiveItemTable[Id].Name <- Name;
GiveItemTable[Id].Noti <- Noti;
}
break;
}
}
}
}
local mitems = {};
//播报
local UseName = PvfItem.GetNameById(ItemId);
SUser.SendNotiPacketMessage(format(TW_BoxStr_0, UseCount, UseName), 6);
SUser.SendNotiPacketMessage(" ", 6);
SUser.SendNotiPacketMessage(TW_BoxStr_1, 6);
foreach(Id, Info in GiveItemTable) {
// SUser.SendNotiPacketMessage(format(TW_BoxStr_2, Info.Name, Info.Count), 6);
SUser.SendNotiForColorAIdPacketMessage([
[" → ", 0, [0xff, 0xff, 0xff]],
[Info.Name, 1, TW_BoxStr_2_Color, Id],
[" x" + Info.Count.tostring(), 0, [0xff, 0xff, 0xff]]
], 6);
if (Info.Noti) {
local NotIInfo = TW_BoxStr_5[MathClass.Rand(0, TW_BoxStr_5.len())];
// print("要播报全服公告: " + Info.Name);
World.SendNotiForColorAIdPacketMessage([
[SUser.GetCharacName(), 1, TW_BoxStr_4_Color, null],
[NotIInfo[0], 0, [0xff, 0xff, 0xff]],
[UseName, 1, TW_BoxStr_7_Color, ItemId],
[NotIInfo[1], 0, [0xff, 0xff, 0xff]],
[Info.Count.tostring(), 0, [0xff, 0xff, 0xff]],
[NotIInfo[2], 0, [0xff, 0xff, 0xff]],
[Info.Name, 1, TW_BoxStr_6_Color, Id],
[NotIInfo[3], 0, [0xff, 0xff, 0xff]],
], 14);
}
local Ret = SUser.GiveItem(Id, Info.Count);
if (!Ret) mitems[Id] <- (Info.Count);
}
if (mitems.len() > 0) {
SUser.SendMail(mitems, {
Title = "系统",
Text = format(TW_BoxStr_3, PvfItem.GetNameById(ItemId)),
})
}
InvenObj.DeleteItemCount(ItemId, UseCount - 1);
SUser.SendItemSpace(0);
SUser.SendNotiPacketMessage(" ", 6);
}
}
//获取我的的分解提升率
function Get_MyDisjointRate(SUser) {
//装备提升率
local Equrate = 0;
//消耗品提升率
local Stkrate = 0;
//获取背包对象
local InvenObj = SUser.GetInven();
//遍历身上的每一件装备
for (local u = 0; u <= 26; u++) {
//如果装备存在 并且存在于 加成表中 就给提升率加上对应的值
local EquObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_BODY, u);
if (EquObj && !EquObj.IsEmpty) {
local EquObjId = EquObj.GetIndex();
if (TW_UpRateEqu.rawin(EquObjId)) {
Equrate += TW_UpRateEqu[EquObjId];
}
}
}
//遍历背包每一个道具
for (local y = 57; y <= 250; y++) {
local StkObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_ITEM, y);
if (StkObj && !StkObj.IsEmpty) {
local StkObjId = StkObj.GetIndex();
if (TW_UpRateStk.rawin(StkObjId)) {
Stkrate += (TW_UpRateStk[StkObjId] * StkObj.GetAdd_Info());
}
}
}
return {
EquRate = Equrate,
StkRate = Stkrate
};
}
//获取分解应该获得多少道具
function Get_Disjonint(Level, Rarity, isKeyHit) {
local T = null;
//根据是否暴击决定从那张表里读
if (!isKeyHit) {
T = TW_BaseTab[Rarity];
} else {
T = TW_KeyHitTab[Rarity];
}
//遍历表 找到对应的等级
foreach(i, v in T) {
if (Level< i) {
local rettab = [];
foreach(qi, qv in v) {
if (MathClass.Rand(0, 100) <= qv["rate"]) {
if ("itempack" in qv) {
local idx = MathClass.Rand(1, qv["itempack"].len());
rettab.append({
id = qv["itempack"][idx]["itemid"],
count = qv["itempack"][idx]["itemcount"] + MathClass.Rand(0, qv["itempack"][idx]["itemredom"]),
uprate = qv["uprate"]
});
} else {
rettab.append({
id = qv["itemid"],
count = qv["itemcount"] + MathClass.Rand(0, qv["itemredom"]),
uprate = qv["uprate"]
});
}
}
}
return rettab;
}
}
}
function TW_FenjieFunc(SUser) {
local RateObj = Get_MyDisjointRate(SUser);
local rate = (RateObj.EquRate + RateObj.StkRate).tofloat() / 100.0 + 1.0;
local upcount = 0;
if ((rate * 100) % 100 > 0) {
upcount = 0;
}
local NotiTable = {};
//获取背包对象
local InvenObj = SUser.GetInven();
//遍历装备栏
for (local u = 0; u< 48; u++) {
local iitem = InvenObj.GetSlot(Inven.INVENTORY_TYPE_ITEM, u + 9);;
//如果道具存在且不为空 并且不是不可分解的道具
if (iitem && !iitem.IsEmpty && !(TW_NoDisjoint.rawin(iitem.GetIndex()))) {
local isKeyHit = false;
//判定是否暴击
if (MathClass.Rand(0, 100) <= TW_KeyHit) {
isKeyHit = true;
}
//拿到PVF数据
local PvfItemObj = PvfItem.GetPvfItemById(iitem.GetIndex());
//根据使用登记 和 稀有度 已经是否暴击获得奖励表
local GiveTab = Get_Disjonint(PvfItemObj.GetUsableLevel(), PvfItemObj.GetRarity(), isKeyHit);
//获取装备名称
local name = PvfItemObj.GetName();
//删除该道具
iitem.Delete();
//刷新背包
SUser.SendItemSpace(0);
local mitems = {};
SUser.SendNotiPacketMessage("分解 [" + name + "]", 7);
foreach(i, v in GiveTab) {
//真实倍率
local realrate = rate;
if (v.uprate == 0) {
realrate = 1.0;
upcount = 0;
}
local Ret = SUser.GiveItem(v.id, (v.count * realrate + upcount));
if (Ret) {
local RewordName = PvfItemObj.GetNameById(v.id);
//第一个道具的时候要播报头
if (i == 0) {
SUser.SendNotiPacketMessage("获得 [" + RewordName + "] " + (v.count * realrate + upcount).tointeger() + "个", 7);
} else {
SUser.SendNotiPacketMessage(" [" + RewordName + "] " + (v.count * realrate + upcount).tointeger() + "个", 7);
}
if (NotiTable.rawin(v.id)) {
NotiTable[v.id] += (v.count * realrate + upcount);
} else {
NotiTable[v.id] <- (v.count * realrate + upcount);
}
} else {
SUser.SendNotiPacketMessage(" 背包已满,此材料通过邮寄至邮箱,小退领取。", 7);
mitems[v.id] <- (v.count * realrate + upcount);
}
}
if (mitems.len() > 0) {
SUser.SendMail(mitems, {
Title = "系统",
Text = "由于你的包裹已满, 请留出足够的空间来接收道具."
})
}
SUser.SendNotiPacketMessage("\n", 7);
}
}
SUser.SendItemSpace(0);
SUser.SendNotiPacketMessage(" ", 8);
SUser.SendNotiPacketMessage(TW_STR_00033, 8);
SUser.SendNotiPacketMessage(TW_STR_00034, 8);
SUser.SendNotiPacketMessage(format(TW_STR_00035, RateObj.StkRate, RateObj.EquRate), 8);
SUser.SendNotiPacketMessage(TW_STR_00036, 8);
if (NotiTable.len() > 0) {
SUser.SendNotiPacketMessage("获得 ", 8);
foreach(i, v in NotiTable) {
SUser.SendNotiPacketMessage("[" + PvfItem.GetNameById(i) + "] " + v.tointeger() + "个", 8);
}
} else {
SUser.SendNotiPacketMessage("本次没有分解任何装备", 8);
}
// SUser.SendNotiPacketMessage(" ", 8);
// SUser.SendNotiPacketMessage("装备分解量加成 " + RateObj.EquRate + " 道具分解量加成 " + RateObj.StkRate + "", 8);
// SUser.SendNotiPacketMessage(" ", 8);
}
function TW_HuishouFunc(SUser) {
local rate = 1.0;
local upcount = 0;
if (rate != 1.0) {
upcount = 1;
}
local NotiTable = {};
local NotiTableP = {};
local NotiTableC = {};
//获取背包对象
local InvenObj = SUser.GetInven();
for (local u = 0; u <= 350; u++) {
local iitem = InvenObj.GetSlot(Inven.INVENTORY_TYPE_ITEM, u);
if (iitem) {
local Id = iitem.GetIndex();
local Count = iitem.GetAdd_Info();
//获取名字
local name = PvfItem.GetNameById(Id);
if (u >= 9 && u <= 40) Count = 1;
if (TW_Recovery.rawin(Id)) {
SUser.SendNotiPacketMessage("回收 [" + name + "] " + Count + "个", 6);
local mitems = {};
foreach(i, v in TW_Recovery[Id]) {
local Ret = SUser.GiveItem(v[0], (v[1] * rate * Count) + upcount);
if (Ret) {
local RewordName = PvfItem.GetNameById(v[0]);
if (i == 0) {
SUser.SendNotiPacketMessage("获得 [" + RewordName + "] " + (v[1] * rate * Count) + upcount + "个", 6);
} else {
SUser.SendNotiPacketMessage(" [" + RewordName + "] " + (v[1] * rate * Count + upcount) + "个", 6);
}
if (NotiTable.rawin(RewordName)) {
NotiTable[RewordName] += (v[1] * rate * Count) + upcount;
} else {
NotiTable[RewordName] <- (v[1] * rate * Count) + upcount;
}
} else {
SUser.SendNotiPacketMessage(" 背包已满,此材料通过邮寄至邮箱,小退领取。", 6);
mitems[v[0]] <- (v[1] * rate * Count) + upcount;
}
}
SUser.SendNotiPacketMessage(" ", 8);
if (mitems.len() > 0) {
SUser.SendMail(mitems, {
Title = TW_STR_00001,
Text = TW_STR_00002
})
}
InvenObj.DeleteItemCount(Id, Count);
}
//回收给点券
else if (TW_RecoveryP.rawin(Id)) {
if (NotiTableP.rawin("点券")) {
NotiTableP["点券"] += TW_RecoveryP[Id] * Count;
} else {
NotiTableP["点券"] <- TW_RecoveryP[Id] * Count;
}
SUser.SendNotiPacketMessage("回收 [" + name + "] " + Count + "个", 6);
SUser.RechargeCera(TW_RecoveryP[Id] * Count);
InvenObj.DeleteItemCount(Id, Count);
}
//回收给代币券
else if (TW_RecoveryC.rawin(Id)) {
if (NotiTableC.rawin("代币")) {
NotiTableC["代币"] += TW_RecoveryC[Id] * Count;
} else {
NotiTableC["代币"] <- TW_RecoveryC[Id] * Count;
}
SUser.SendNotiPacketMessage("回收 [" + name + "] " + Count + "个", 6);
SUser.RechargeCeraPoint(TW_RecoveryC[Id] * Count);
InvenObj.DeleteItemCount(Id, Count);
}
}
}
SUser.SendItemSpace(0);
SUser.SendNotiPacketMessage(" ", 8);
SUser.SendNotiPacketMessage("本次回收已完成", 8);
SUser.SendNotiPacketMessage(" ", 8);
if (NotiTableP.len() > 0 || NotiTable.len() > 0 || NotiTableC.len() > 0) {
SUser.SendNotiPacketMessage("获得道具 ", 8);
}
if (NotiTableP.len() > 0) {
SUser.SendNotiPacketMessage("[点券] " + NotiTableP["点券"] + "点", 8);
}
if (NotiTableC.len() > 0) {
SUser.SendNotiPacketMessage("[代币] " + NotiTableC["代币"] + "点", 8);
}
if (NotiTable.len() > 0) {
foreach(i, v in NotiTable) {
SUser.SendNotiPacketMessage("[" + i + "] " + v + "个", 8);
}
}
if (NotiTableP.len() == 0 && NotiTable.len() == 0 && NotiTableC.len() == 0) {
SUser.SendNotiPacketMessage("本次没有回收任何道具", 8);
}
SUser.SendNotiPacketMessage(" ", 8);
}
//贪玩一键分解卷轴
Cb_Use_Item_Sp_Func[TW_DisjointItemId] <- function(SUser, ItemId) {
SUser.GiveItem(ItemId, 1);
TW_FenjieFunc(SUser);
}
//贪玩一键回收卷轴
Cb_Use_Item_Sp_Func[TW_RecoveryItemId] <- function(SUser, ItemId) {
SUser.GiveItem(ItemId, 1);
TW_HuishouFunc(SUser);
}
//在副本中的人
TW_UserOpenDgnTab <- {}
Cb_History_DungeonEnter_Func["TW_DungeonEnter"] <- function(SUser, Data) {
//进入副本就把这人存下来
TW_UserOpenDgnTab[SUser.GetCID()] <- {
Dgnname = Data[14],
ItemCount = 0,
ItemStkCount = {},
ItemUprateStkTab = {}
}
}
//获取我的的地下城爆率提升率
function Get_MyDgnRate(SUser, DgnName) {
//装备金币提升率
local Equ_Gold_rate = 0;
//装备道具提升率
local Equ_Item_rate = 0;
//时装金币提升率
local Ava_Gold_rate = 0;
//时装道具提升率
local Ava_Item_rate = 0;
//宠物金币提升率
local Cre_Gold_rate = 0;
//宠物道具提升率
local Cre_Item_rate = 0;
//道具金币提升率
local Stk_Gold_rate = 0;
//道具道具提升率
local Stk_Item_rate = 0;
local KeyUp = {};
//获取背包对象
local InvenObj = SUser.GetInven();
//遍历身上的每一件装备
for (local u = 10; u <= 22; u++) {
//如果装备存在 并且存在于 加成表中 就给提升率加上对应的值
local EquObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_BODY, u);
if (EquObj && !EquObj.IsEmpty) {
local EquObjId = EquObj.GetIndex();
if (TW_GoldUpRateTab.rawin(EquObjId)) {
if (TW_DgnUpRateItemTab[DgnName].rawin(EquObjId)) {
if (!(KeyUp.rawin(TW_GoldUpRateTab[EquObjId].key))) {
Equ_Gold_rate += TW_GoldUpRateTab[EquObjId].rate;
KeyUp[TW_GoldUpRateTab[EquObjId].key] <- TW_GoldUpRateTab[EquObjId].rate;
} else {
if (KeyUp[TW_GoldUpRateTab[EquObjId].key] > TW_GoldUpRateTab[EquObjId].rate) {
} else {
Equ_Gold_rate -= KeyUp[TW_GoldUpRateTab[EquObjId].key];
Equ_Gold_rate += TW_GoldUpRateTab[EquObjId].rate;
KeyUp[TW_GoldUpRateTab[EquObjId].key] <- TW_GoldUpRateTab[EquObjId].rate;
}
}
}
}
if (TW_UpRateTab.rawin(EquObjId)) {
if (TW_DgnUpRateItemTab[DgnName].rawin(EquObjId)) {
if (!(KeyUp.rawin(TW_UpRateTab[EquObjId].key))) {
Equ_Item_rate += TW_UpRateTab[EquObjId].rate;
KeyUp[TW_UpRateTab[EquObjId].key] <- TW_UpRateTab[EquObjId].rate;
} else {
if (KeyUp[TW_UpRateTab[EquObjId].key] > TW_UpRateTab[EquObjId].rate) {
} else {
Equ_Item_rate -= KeyUp[TW_UpRateTab[EquObjId].key];
Equ_Item_rate += TW_UpRateTab[EquObjId].rate;
KeyUp[TW_UpRateTab[EquObjId].key] <- TW_UpRateTab[EquObjId].rate;
}
}
}
}
}
}
//遍历身上的每一件装备
for (local u = 0; u <= 10; u++) {
//如果装备存在 并且存在于 加成表中 就给提升率加上对应的值
local EquObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_BODY, u);
if (EquObj && !EquObj.IsEmpty) {
local EquObjId = EquObj.GetIndex();
if (TW_GoldUpRateTab.rawin(EquObjId)) {
if (TW_DgnUpRateItemTab[DgnName].rawin(EquObjId)) {
if (!(KeyUp.rawin(TW_GoldUpRateTab[EquObjId].key))) {
Ava_Gold_rate += TW_GoldUpRateTab[EquObjId].rate;
KeyUp[TW_GoldUpRateTab[EquObjId].key] <- TW_GoldUpRateTab[EquObjId].rate;
} else {
if (KeyUp[TW_GoldUpRateTab[EquObjId].key] > TW_GoldUpRateTab[EquObjId].rate) {
} else {
Ava_Gold_rate -= KeyUp[TW_GoldUpRateTab[EquObjId].key];
Ava_Gold_rate += TW_GoldUpRateTab[EquObjId].rate;
KeyUp[TW_GoldUpRateTab[EquObjId].key] <- TW_GoldUpRateTab[EquObjId].rate;
}
}
}
}
if (TW_UpRateTab.rawin(EquObjId)) {
if (TW_DgnUpRateItemTab[DgnName].rawin(EquObjId)) {
if (!(KeyUp.rawin(TW_UpRateTab[EquObjId].key))) {
Ava_Item_rate += TW_UpRateTab[EquObjId].rate;
KeyUp[TW_UpRateTab[EquObjId].key] <- TW_UpRateTab[EquObjId].rate;
} else {
if (KeyUp[TW_UpRateTab[EquObjId].key] > TW_UpRateTab[EquObjId].rate) {
} else {
Ava_Item_rate -= KeyUp[TW_UpRateTab[EquObjId].key];
Ava_Item_rate += TW_UpRateTab[EquObjId].rate;
KeyUp[TW_UpRateTab[EquObjId].key] <- TW_UpRateTab[EquObjId].rate;
}
}
}
}
}
}
//遍历身上的每一件装备
for (local u = 22; u <= 26; u++) {
//如果装备存在 并且存在于 加成表中 就给提升率加上对应的值
local EquObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_BODY, u);
if (EquObj && !EquObj.IsEmpty) {
local EquObjId = EquObj.GetIndex();
if (TW_GoldUpRateTab.rawin(EquObjId)) {
if (TW_DgnUpRateItemTab[DgnName].rawin(EquObjId)) {
if (!(KeyUp.rawin(TW_GoldUpRateTab[EquObjId].key))) {
Cre_Gold_rate += TW_GoldUpRateTab[EquObjId].rate;
KeyUp[TW_GoldUpRateTab[EquObjId].key] <- TW_GoldUpRateTab[EquObjId].rate;
} else {
if (KeyUp[TW_GoldUpRateTab[EquObjId].key] > TW_GoldUpRateTab[EquObjId].rate) {
} else {
Cre_Gold_rate -= KeyUp[TW_GoldUpRateTab[EquObjId].key];
Cre_Gold_rate += TW_GoldUpRateTab[EquObjId].rate;
KeyUp[TW_GoldUpRateTab[EquObjId].key] <- TW_GoldUpRateTab[EquObjId].rate;
}
}
}
}
if (TW_UpRateTab.rawin(EquObjId)) {
if (TW_DgnUpRateItemTab[DgnName].rawin(EquObjId)) {
if (!(KeyUp.rawin(TW_UpRateTab[EquObjId].key))) {
Cre_Item_rate += TW_UpRateTab[EquObjId].rate;
KeyUp[TW_UpRateTab[EquObjId].key] <- TW_UpRateTab[EquObjId].rate;
} else {
if (KeyUp[TW_UpRateTab[EquObjId].key] > TW_UpRateTab[EquObjId].rate) {
} else {
Cre_Item_rate -= KeyUp[TW_UpRateTab[EquObjId].key];
Cre_Item_rate += TW_UpRateTab[EquObjId].rate;
KeyUp[TW_UpRateTab[EquObjId].key] <- TW_UpRateTab[EquObjId].rate;
}
}
}
}
}
}
//遍历背包每一个道具
for (local y = 57; y <= 250; y++) {
local StkObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_ITEM, y);
if (StkObj && !StkObj.IsEmpty) {
local EquObjId = StkObj.GetIndex();
if (TW_GoldUpRateTab.rawin(EquObjId)) {
if (TW_DgnUpRateItemTab[DgnName].rawin(EquObjId)) {
if (!(KeyUp.rawin(TW_GoldUpRateTab[EquObjId].key))) {
Stk_Gold_rate += (TW_GoldUpRateTab[EquObjId].rate * StkObj.GetAdd_Info());
KeyUp[TW_GoldUpRateTab[EquObjId].key] <- (TW_GoldUpRateTab[EquObjId].rate * StkObj.GetAdd_Info());
} else {
if (KeyUp[TW_GoldUpRateTab[EquObjId].key] > (TW_GoldUpRateTab[EquObjId].rate * StkObj.GetAdd_Info())) {
} else {
Stk_Gold_rate -= KeyUp[TW_GoldUpRateTab[EquObjId].key];
Stk_Gold_rate += (TW_GoldUpRateTab[EquObjId].rate * StkObj.GetAdd_Info());
KeyUp[TW_GoldUpRateTab[EquObjId].key] <- (TW_GoldUpRateTab[EquObjId].rate * StkObj.GetAdd_Info());
}
}
}
}
if (TW_UpRateTab.rawin(EquObjId)) {
if (TW_DgnUpRateItemTab[DgnName].rawin(EquObjId)) {
if (!(KeyUp.rawin(TW_UpRateTab[EquObjId].key))) {
Stk_Item_rate += (TW_UpRateTab[EquObjId].rate * StkObj.GetAdd_Info());
KeyUp[TW_UpRateTab[EquObjId].key] <- (TW_UpRateTab[EquObjId].rate * StkObj.GetAdd_Info());
} else {
if (KeyUp[TW_UpRateTab[EquObjId].key] > (TW_UpRateTab[EquObjId].rate * StkObj.GetAdd_Info())) {
} else {
Stk_Item_rate -= KeyUp[TW_UpRateTab[EquObjId].key];
Stk_Item_rate += (TW_UpRateTab[EquObjId].rate * StkObj.GetAdd_Info());
KeyUp[TW_UpRateTab[EquObjId].key] <- (TW_UpRateTab[EquObjId].rate * StkObj.GetAdd_Info());
}
}
}
}
}
}
return {
//装备金币提升率
Equ_Gold = Equ_Gold_rate,
//装备道具提升率
Equ_Item = Equ_Item_rate,
//时装金币提升率
Ava_Gold = Ava_Gold_rate,
//时装道具提升率
Ava_Item = Ava_Item_rate,
//宠物金币提升率
Cre_Gold = Cre_Gold_rate,
//宠物道具提升率
Cre_Item = Cre_Item_rate,
//道具金币提升率
Stk_Gold = Stk_Gold_rate,
//道具道具提升率
Stk_Item = Stk_Item_rate
};
}
Cb_History_DungeonLeave_Func["TW_DungeonLeave"] <- function(SUser, Data) {
//获取名字
local UserName = SUser.GetCharacName();
local CID = SUser.GetCID();
if (TW_UserOpenDgnTab.rawin(CID)) {
// SUser.SendItemSpace(0);
local UserOpenDgnObj = TW_UserOpenDgnTab[CID];
local pssdd = UserOpenDgnObj.ItemUprateStkTab.len();
local DgnName = UserOpenDgnObj.Dgnname.slice(1, UserOpenDgnObj.Dgnname.len() - 1);
local userupraterate = 0;
local usergoldupraterate = 0;
local userupraterateKeyTab = {};
local usergoldupraterateKeyTab = {};
local userupraterateKeyStringTab = {};
local usergoldupraterateKeyStringTab = {};
if (pssdd > 0) {
// //获取背包对象
// local InvenObj = SUser.GetInven();
// for (local u = 49; u <= 350; u++) {
// local iitem = InvenObj.GetSlot(Inven.INVENTORY_TYPE_ITEM, u);
// if (iitem) {
// if (TW_DgnUpRateItemTab.rawin(DgnName)) {
// local addbuf = 0;
// local goldaddbuf = 0;
// if (TW_UpRateTab.rawin(iitem.GetIndex())) addbuf = TW_UpRateTab[iitem.GetIndex()];
// if (TW_GoldUpRateTab.rawin(iitem.GetIndex())) goldaddbuf = TW_GoldUpRateTab[iitem.GetIndex()];
// if (addbuf || goldaddbuf) {
// if (TW_DgnUpRateItemTab[DgnName].rawin(iitem.GetIndex())) {
// if (userupraterate == 0 && usergoldupraterate == 0) {
// SUser.SendNotiPacketMessage(" ", 7);
// SUser.SendNotiPacketMessage("挑战 [" + DgnName + "] 已完成", 7);
// }
// if (addbuf && !(userupraterateKeyTab.rawin(addbuf.key))) {
// userupraterateKeyStringTab[addbuf.key] <- "拥有 [" + TW_UpRateTab[iitem.GetIndex()].name + "] 触发 [" + ((TW_UpRateTab[iitem.GetIndex()].rate - 1) * 100) + "] 道具奖励";
// userupraterate += (addbuf.rate - 1);
// userupraterateKeyTab[addbuf.key] <- (addbuf.rate - 1);
// } else {
// if (addbuf) {
// if (addbuf.rate >= userupraterateKeyTab[addbuf.key]) {
// userupraterateKeyStringTab[addbuf.key] <- "拥有 [" + TW_UpRateTab[iitem.GetIndex()].name + "] 触发 [" + ((TW_UpRateTab[iitem.GetIndex()].rate - 1) * 100) + "] 道具奖励";
// userupraterate -= userupraterateKeyTab[addbuf.key];
// userupraterate += (addbuf.rate - 1);
// userupraterateKeyTab[addbuf.key] = (addbuf.rate - 1);
// }
// }
// }
// if (goldaddbuf && !(usergoldupraterateKeyTab.rawin(goldaddbuf.key))) {
// usergoldupraterateKeyStringTab[goldaddbuf.key] <- "拥有 [" +
// TW_GoldUpRateTab[iitem.GetIndex()].name +
// "] 触发 [" + (TW_GoldUpRateTab[iitem.GetIndex()].rate) +
// "] 金币奖励";
// usergoldupraterate += goldaddbuf.rate;
// usergoldupraterateKeyTab[goldaddbuf.key] <- goldaddbuf.rate;
// } else {
// if (goldaddbuf) {
// if (usergoldupraterateKeyTab.rawin(goldaddbuf.key)) {
// if (goldaddbuf.rate >= usergoldupraterateKeyTab[goldaddbuf.key]) {
// usergoldupraterateKeyStringTab[goldaddbuf.key] = "拥有 [" + TW_GoldUpRateTab[iitem.GetIndex()].name + "] 触发 [" + (TW_GoldUpRateTab[iitem.GetIndex()].rate) + "] 金币奖励";
// usergoldupraterate -= usergoldupraterateKeyTab[goldaddbuf.key];
// usergoldupraterate += goldaddbuf.rate;
// usergoldupraterateKeyTab[goldaddbuf.key] = goldaddbuf.rate;
// }
// }
// }
// }
// }
// }
// }
// }
// }
// //遍历身上的每一件装备
// for (local u = 0; u <= 26; u++) {
// //如果装备存在 并且存在于 加成表中 就给提升率加上对应的值
// local EquObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_BODY, u);
// if (EquObj && !EquObj.IsEmpty) {
// local EquObjId = EquObj.GetIndex();
// if (TW_UpRateEqu.rawin(EquObjId)) {
// // Equrate += TW_UpRateEqu[EquObjId];
// }
// }
// }
/*
return {
//装备金币提升率
Equ_Gold = Equ_Gold_rate;
//装备道具提升率
Equ_Item = Equ_Item_rate;
//时装金币提升率
Ava_Gold = Ava_Gold_rate;
//时装道具提升率
Ava_Item = Ava_Item_rate;
//宠物金币提升率
Cre_Gold = Cre_Gold_rate;
//宠物道具提升率
Cre_Item = Cre_Item_rate;
//道具金币提升率
Stk_Gold = Stk_Gold_rate;
//道具道具提升率
Stk_Item = Stk_Item_rate;
};
*/
if (TW_DgnUpRateItemTab.rawin(DgnName)) {
local RateObj = Get_MyDgnRate(SUser, DgnName);
userupraterate = (RateObj.Equ_Item + RateObj.Ava_Item + RateObj.Cre_Item + RateObj.Stk_Item).tofloat() / 100.0;
usergoldupraterate = (RateObj.Equ_Gold + RateObj.Ava_Gold + RateObj.Cre_Gold + RateObj.Stk_Gold).tofloat() / 100.0;
SUser.SendNotiPacketMessage(" ", 7);
SUser.SendNotiPacketMessage(format(TW_STR_00026, DgnName), 7);
SUser.SendNotiPacketMessage(TW_STR_00027, 7);
SUser.SendNotiPacketMessage(format(TW_STR_00028, RateObj.Equ_Gold, RateObj.Equ_Item), 7);
SUser.SendNotiPacketMessage(format(TW_STR_00029, RateObj.Stk_Gold, RateObj.Stk_Item), 7);
SUser.SendNotiPacketMessage(format(TW_STR_00030, RateObj.Ava_Gold, RateObj.Ava_Item), 7);
SUser.SendNotiPacketMessage(format(TW_STR_00031, RateObj.Cre_Gold, RateObj.Cre_Item), 7);
SUser.SendNotiPacketMessage(format(TW_STR_00032, DgnName), 7);
if (userupraterate > 0 || usergoldupraterate > 0) {
SUser.SendNotiPacketMessage(" ", 7);
SUser.SendNotiPacketMessage("额外获得 ", 7);
}
foreach(o, l in UserOpenDgnObj.ItemUprateStkTab) {
if (o == 999999999 && usergoldupraterate > 0) {
local countbuf = (l * (usergoldupraterate / 1.0)).tointeger();
SUser.SendNotiPacketMessage("[金币] +" + (countbuf), 7);
Sq_CallFunc(S_Ptr("0x84FF29C"), "int", ["pointer", "int", "int", "int", "int"], Sq_CallFunc(S_Ptr("0x80DA28E"), "pointer", ["pointer"], SUser.C_Object), countbuf, 0, 0, 0);
// SUser.RechargeMoney(countbuf);
//刷新背包
SUser.SendItemSpace(0);
} else {
if (userupraterate > 0) {
local countbuf = (l * (userupraterate)).tointeger();
if (TW_OpenUprateAddSwitch) { //如果开关打开 就把播报材料里有播报的加上这里的倍数
if (UserOpenDgnObj.ItemStkCount.rawin(o)) {
UserOpenDgnObj.ItemStkCount[o] += countbuf;
}
}
local itemnamebuf = TW_UpRatestkTab[o];
SUser.SendNotiPacketMessage("[" + (itemnamebuf) + "] x" + (countbuf), 7);
SUser.GiveItem(o, countbuf);
}
}
}
}
}
local sssscount = UserOpenDgnObj.ItemStkCount.len();
if (TW_EpicCountRewardTab.rawin(UserOpenDgnObj.ItemCount) || sssscount > 0) {
World.SendNotiPacketMessage(" ", 14);
World.SendNotiPacketMessage("玩家 [" + UserName + "] 在 [" + DgnName + "]", 14);
//累计掉落材料播报
if (UserOpenDgnObj.ItemStkCount.len() > 0) {
local bobaocount = 0;
foreach(i, v in UserOpenDgnObj.ItemStkCount) {
if (bobaocount == 0)
World.SendNotiPacketMessage("爆出 [" + TW_EpicstkTab[i] + "] x" + (v), 14);
else
World.SendNotiPacketMessage(" - [" + TW_EpicstkTab[i] + "] x" + (v), 14);
bobaocount += 1;
}
}
}
if (UserOpenDgnObj.ItemCount > 0) {
local obj = TW_EpicCountRewardTab[UserOpenDgnObj.ItemCount];
local GiveCount = MathClass.Rand(obj.countMin, obj.countMax);
if (obj.id == "点券") {
SUser.RechargeCera(GiveCount);
World.SendNotiPacketMessage(" - [史诗装备] x" + (UserOpenDgnObj.ItemCount), 14);
World.SendNotiPacketMessage("奖励 [" + GiveCount + "点券]", 14);
} else if (obj.id == "代币") {
SUser.RechargeCeraPoint(GiveCount);
World.SendNotiPacketMessage(" - [史诗装备] x" + (UserOpenDgnObj.ItemCount), 14);
World.SendNotiPacketMessage("奖励 [" + GiveCount + "代币]", 14);
} else {
SUser.GiveItem(obj.id, GiveCount);
World.SendNotiPacketMessage(" - [史诗装备] x" + (UserOpenDgnObj.ItemCount), 14);
if (GiveCount == 1)
World.SendNotiPacketMessage("奖励 [" + obj.name + "]", 14);
else
World.SendNotiPacketMessage("奖励 [" + obj.name + "] x" + (GiveCount), 14);
}
}
TW_UserOpenDgnTab.rawdelete(CID);
}
}
function UserRealObtainItem(SUser, username, cid, item_id, item_count) {
//如果在副本中
if (TW_UserOpenDgnTab.rawin(cid)) {
local OpenDgnTabObj = TW_UserOpenDgnTab[cid];
//如果捡到的东西是史诗
if (TW_EpicTab.rawin(item_id)) {
local PartyObj = SUser.GetParty();
if (PartyObj) {
local Bfobj = PartyObj.GetBattleField();
local DgnObj = Bfobj.GetDgn();
if (DgnObj) {
local DgnIndex = DgnObj.GetId();
//如果副本编号在 播报副本之内
if (TW_EpicDgnIndex.rawin(DgnIndex)) {
TOpenDgnTabObj.ItemCount += 1;
}
}
}
}
//如果捡到的东西是播报材料
else if (TW_EpicstkTab.rawin(item_id)) {
if (OpenDgnTabObj.ItemStkCount.rawin(item_id))
OpenDgnTabObj.ItemStkCount[item_id] += item_count;
else
OpenDgnTabObj.ItemStkCount[item_id] <- item_count;
}
local DgnName = OpenDgnTabObj.Dgnname.slice(1, OpenDgnTabObj.Dgnname.len() - 1);
//捡到的东西是多倍材料
if (TW_UpRateDgnTab.rawin(DgnName)) {
if (TW_UpRatestkTab.rawin(item_id)) {
if (OpenDgnTabObj.ItemUprateStkTab.rawin(item_id))
OpenDgnTabObj.ItemUprateStkTab[item_id] += item_count;
else
OpenDgnTabObj.ItemUprateStkTab[item_id] <- item_count;
}
}
//捡到了当场需要播报奖励的道具
if (TW_EpicRewardTab.rawin(item_id)) {
SUser.SendNotiPacketMessage(" ", 14);
local obj = TW_EpicRewardTab[item_id];
if (obj.id == "点券") {
local GiveCount = MathClass.Rand(obj.countMin, obj.countMax);
SUser.RechargeCera(GiveCount);
World.SendNotiPacketMessage("玩家 [" + username + "] 在 [" + DgnName + "]", 14);
World.SendNotiPacketMessage("爆出 [" + TW_EpicRewardNameTab[item_id] + "]", 14);
World.SendNotiPacketMessage("奖励 [" + GiveCount + "点券]", 14);
} else if (obj.id == "代币") {
local GiveCount = MathClass.Rand(obj.countMin, obj.countMax);
SUser.RechargeCeraPoint(GiveCount);
World.SendNotiPacketMessage("玩家 [" + username + "] 在 [" + DgnName + "]", 14);
World.SendNotiPacketMessage("爆出 [" + TW_EpicRewardNameTab[item_id] + "]", 14);
World.SendNotiPacketMessage("奖励 [" + GiveCount + "代币]", 14);
} else if (obj.id == null) {
World.SendNotiPacketMessage("玩家 [" + username + "] 在 [" + DgnName + "]", 14);
World.SendNotiPacketMessage("爆出 [" + TW_EpicRewardNameTab[item_id] + "]", 14);
} else {
local GiveCount = MathClass.Rand(obj.countMin, obj.countMax);
SUser.GiveItem(obj.id, GiveCount);
World.SendNotiPacketMessage("玩家 [" + username + "] 在 [" + DgnName + "]", 14);
World.SendNotiPacketMessage("爆出 [" + TW_EpicRewardNameTab[item_id] + "]", 14);
if (GiveCount == 1) {
World.SendNotiPacketMessage("奖励 [" + obj.name + "]", 14);
} else {
World.SendNotiPacketMessage("奖励 [" + obj.name + "] x" + GiveCount, 14);
}
}
}
}
}
Cb_History_MoneyUp_Func["TW_MoneyUp"] <- function(SUser, Data) {
UserRealObtainItem(SUser, SUser.GetCharacName(), SUser.GetCID(), 999999999, Data[15].tointeger());
}
Cb_History_ItemUp_Func["TW_ItemUp"] <- function(SUser, Data) {
UserRealObtainItem(SUser, SUser.GetCharacName(), SUser.GetCID(), Data[15].tointeger(), Data[17].tointeger());
}
//上线公告
function MiNoti(SUser) {
//获取背包对象
local InvenObj = SUser.GetInven();
//遍历身上的每一件装备
for (local u = 10; u <= 22; u++) {
//如果装备存在 并且存在于 加成表中 就给提升率加上对应的值
local EquObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_BODY, u);
if (EquObj && !EquObj.IsEmpty) {
local EquObjId = EquObj.GetIndex();
if (TW_MiNoti.rawin(EquObjId)) {
SUser.SendNotiPacketMessage(format(TW_MiNoti[EquObjId][0], SUser.GetCharacName()), TW_MiNoti[EquObjId][1]);
World.SendNotiPacketMessage(format(TW_MiNoti[EquObjId][0], SUser.GetCharacName()), TW_MiNoti[EquObjId][1]);
}
}
}
//遍历身上的每一件装备
for (local u = 0; u <= 10; u++) {
//如果装备存在 并且存在于 加成表中 就给提升率加上对应的值
local EquObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_BODY, u);
if (EquObj && !EquObj.IsEmpty) {
local EquObjId = EquObj.GetIndex();
if (TW_MiNoti.rawin(EquObjId)) {
SUser.SendNotiPacketMessage(format(TW_MiNoti[EquObjId][0], SUser.GetCharacName()), TW_MiNoti[EquObjId][1]);
World.SendNotiPacketMessage(format(TW_MiNoti[EquObjId][0], SUser.GetCharacName()), TW_MiNoti[EquObjId][1]);
}
}
}
}
Cb_reach_game_world_Func["TW_Cb_reach_game_world_Func"] <- function(SUser) {
MiNoti(SUser);
}
Cb_History_MileageSet_Func["TW_reach_game_world"] <- function(SUser, Data) {
//第一次上线
if (SUser.GetCharacLevel() == 1) {
//设置满级
SUser.SetCharacLevel(TW_PlayerMaxLevel);
SUser.SendItemSpace(0);
SUser.SendItemSpace(1);
SUser.SendItemSpace(7);
//设置发送道具
foreach(_Index, ItemObj in TW_PlayerGiveItemList) {
SUser.GiveItem(ItemObj[0], ItemObj[1]);
}
//设置上线喊话
// SUser.SendNotiPacketMessage("欢迎新玩家[" + SUser.GetCharacName() + "]进入游戏。", 14);
World.SendNotiPacketMessage("欢迎新玩家[" + SUser.GetCharacName() + "]进入游戏。", 14);
local CCargoP = Sq_CallFunc(S_Ptr("0x08151A94"), "pointer", ["pointer"], SUser.C_Object);
Sq_CallFunc(S_Ptr("0x0850C656"), "int", ["pointer", "int"], CCargoP, 152);
local Pack = Packet();
Pack.Put_Header(0, 66);
Pack.Put_Short(1);
Pack.Put_Short(152);
Pack.Finalize(true);
SUser.Send(Pack);
Pack.Delete();
Sq_MysqlExecNoRet("INSERT INTO taiwan_cain.account_cargo (m_id,money,capacity)VALUES(" + SUser.GetUID() + ",0,56);");
// SUser.GiveItem(3299, 6);
Sq_CallFunc(S_Ptr("0x84FF29C"), "int", ["pointer", "int", "int", "int", "int"], Sq_CallFunc(S_Ptr("0x80DA28E"), "pointer", ["pointer"], SUser.C_Object), 100, 0, 0, 0);
Sq_CallFunc(S_Ptr("0x0828AD72"), "void", ["pointer"], SUser.C_Object);
SUser.ClearQuest_Gm(674);
SUser.ClearQuest_Gm(649);
SUser.ClearQuest_Gm(675);
SUser.ClearQuest_Gm(650);
//升级
// Sq_CallFunc(S_Ptr("0x0828B0B2"), "void", ["pointer"], SUser.C_Object);
// Sq_CallFunc(S_Ptr("0x0828B0B2"), "void", ["pointer"], SUser.C_Object);
// Sq_CallFunc(S_Ptr("0x0828B0B2"), "void", ["pointer"], SUser.C_Object);
// Sq_CallFunc(S_Ptr("0x0828B0B2"), "void", ["pointer"], SUser.C_Object);
// Sq_CallFunc(S_Ptr("0x0828B0B2"), "void", ["pointer"], SUser.C_Object);
// Sq_CallFunc(S_Ptr("0x0828B0B2"), "void", ["pointer"], SUser.C_Object);
}
}
if (!(getroottable().rawin("TWPlayerOnlineTab"))) getroottable().TWPlayerOnlineTab <- {};
if (!(getroottable().rawin("TWPlayerOnlineCheckTab"))) getroottable().TWPlayerOnlineCheckTab <- {};
if (!(getroottable().rawin("TWTime_RewardSend"))) getroottable().TWTime_RewardSend <- {};
Cb_History_IPUp_Func["TW_Cb_History_IPUp_Func"] <- function(UID, CID, Data) {
getroottable().TWPlayerOnlineTab[UID] <- true;
if (!(getroottable().TWPlayerOnlineCheckTab.rawin(UID))) getroottable().TWPlayerOnlineCheckTab[UID] <- 0;
}
Cb_return_select_character_Func["TW_Cb_History_IPDown_Func"] <- function(SUser) {
if (getroottable().TWPlayerOnlineTab.rawin(SUser.GetUID()))
getroottable().TWPlayerOnlineTab.rawdelete(SUser.GetUID());
if (getroottable().TWPlayerOnlineCheckTab.rawin(SUser.GetUID()))
getroottable().TWPlayerOnlineCheckTab.rawdelete(SUser.GetUID());
}
Cb_timer_dispatch_Func["TW_Cb_timer_dispatch_Func"] <- function() {
local CurTime = time();
foreach(UID, Flag in getroottable().TWPlayerOnlineTab) {
local SUser = World.GetUserByUid(UID);
if (SUser) {
//假人 直接移除
local UserIpAddress = SUser.GetIpAddress();
if (UserIpAddress == TW_jiaren_IP) {
if (getroottable().TWPlayerOnlineTab.rawin(UID))
getroottable().TWPlayerOnlineTab.rawdelete(UID);
if (getroottable().TWPlayerOnlineCheckTab.rawin(UID))
getroottable().TWPlayerOnlineCheckTab.rawdelete(UID);
}
if (SUser.GetState() >= 3) {
local LoginTime = SUser.GetCurCharacLoginTick();
local OnlineTime = CurTime - LoginTime;
if ((OnlineTime - getroottable().TWPlayerOnlineCheckTab[UID]) >= TW_OnlineRT) {
getroottable().TWPlayerOnlineCheckTab[UID] += TW_OnlineRT;
local mitems = {};
local Notitab = [];
foreach(i, v in TW_Online_Event_Reward) {
local SendBool = MathClass.Rand(1, 100);
if (SendBool <= v.rate) {
if (v.id == "点券") {
local Count = MathClass.Rand(v.mincount, v.maxcount);
SUser.RechargeCera(Count);
Notitab.append({
name = v.name,
scount = Count
});
} else if (v.id == "代币券") {
local Count = MathClass.Rand(v.mincount, v.maxcount);
SUser.RechargeCeraPoint(Count);
Notitab.append({
name = v.name,
scount = Count
});
} else {
local Count = MathClass.Rand(v.mincount, v.maxcount);
local Ret = SUser.GiveItem(v.id, Count);
if (!Ret) {
mitems[v.id] <- (Count);
}
Notitab.append({
name = v.name,
scount = Count
});
}
}
}
if (mitems.len() > 0) {
SUser.SendMail(mitems, {
Title = TW_STR_00001,
2024-10-11 23:56:27 +08:00
Text = TW_STR_0000
2024-09-16 17:05:26 +08:00
})
}
SUser.SendNotiPacketMessage(" ", 6);
SUser.SendNotiPacketMessage(TW_STR_00019, 6);
SUser.SendNotiPacketMessage(" ", 6);
foreach(w in Notitab) {
if (w.name == "点券" || w.name == "代币券") {
SUser.SendNotiPacketMessage(format(TW_STR_00020, w.name, w.scount), 6);
} else {
SUser.SendNotiPacketMessage(format(TW_STR_00021, w.name, w.scount), 6);
}
}
}
}
}
}
local DateObj = date();
local HourminTime = DateObj.hour + ":" + DateObj.min;
if (DateObj.min.tostring() == "00") print(HourminTime);
if (TW_Time_Reward.rawin(HourminTime) && !(TWTime_RewardSend.rawin(HourminTime))) {
TWTime_RewardSend.rawset(HourminTime, true);
foreach(UID, Flag in getroottable().TWPlayerOnlineTab) {
local SUser = World.GetUserByUid(UID);
if (SUser) {
//假人 直接移除
local UserIpAddress = SUser.GetIpAddress();
if (UserIpAddress == TW_jiaren_IP) {
if (getroottable().TWPlayerOnlineTab.rawin(UID))
getroottable().TWPlayerOnlineTab.rawdelete(UID);
if (getroottable().TWPlayerOnlineCheckTab.rawin(UID))
getroottable().TWPlayerOnlineCheckTab.rawdelete(UID);
}
if (SUser.GetState() >= 3) {
local mitems = {};
local Notitab = [];
foreach(i, v in TW_Time_Reward[HourminTime]) {
local SendBool = MathClass.Rand(1, 100);
if (SendBool <= v.rate) {
if (v.id == "点券") {
local Count = MathClass.Rand(v.mincount, v.maxcount);
SUser.RechargeCera(Count);
Notitab.append({
name = v.name,
scount = Count
});
} else if (v.id == "代币券") {
local Count = MathClass.Rand(v.mincount, v.maxcount);
SUser.RechargeCeraPoint(Count);
Notitab.append({
name = v.name,
scount = Count
});
} else {
local Count = MathClass.Rand(v.mincount, v.maxcount);
local Ret = SUser.GiveItem(v.id, Count);
if (!Ret) {
mitems[v.id] <- (Count);
}
Notitab.append({
name = v.name,
scount = Count
});
}
}
}
if (mitems.len() > 0) {
SUser.SendMail(mitems, {
Title = TW_STR_00001,
Text = TW_STR_00002
})
}
SUser.SendNotiPacketMessage(" ", 6);
SUser.SendNotiPacketMessage(TW_STR_00022, 6);
SUser.SendNotiPacketMessage(" ", 6);
foreach(w in Notitab) {
if (w.name == "点券" || w.name == "代币券") {
SUser.SendNotiPacketMessage(format(TW_STR_00020, w.name, w.scount), 6);
} else {
SUser.SendNotiPacketMessage(format(TW_STR_00021, w.name, w.scount), 6);
}
}
}
}
}
}
if (HourminTime == "00:01") {
TWTime_RewardSend.HourminTime = {};
}
}
function Cb_GameWorld_move_position(C_User, a3, a4, a5, a6) {
return;
}
TWTime_RewardSend <- {};
function PrintTag() {
print(InitSuccessTag);
Sq_MysqlExecNoRet("ALTER TABLE taiwan_cain_2nd.inventory MODIFY COLUMN inventory_capacity INT DEFAULT 16;");
Sq_MysqlExecNoRet("ALTER TABLE taiwan_cain.account_cargo MODIFY COLUMN capacity INT DEFAULT 56;")
}
function Sq_SendPackToGateway(abs) {
}
function Cb_GameWorld_move_position(C_User, a3, a4, a5, a6) {
return;
}
Gm_InputFunc_Handle.FI <- function(SUser, CmdString) {
// Sq_CallFunc(S_Ptr("0x84FF29C"), "int", ["pointer", "int", "int", "int", "int"], Sq_CallFunc(S_Ptr("0x80DA28E"), "pointer", ["pointer"], SUser.C_Object), 50000000, 0, 0, 0);
Sq_CallFunc(S_Ptr("0x0828B0B2"), "void", ["pointer"], SUser.C_Object);
}