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

1691 lines
71 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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());
if (GiveRate< 1) {
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,
Text = TW_STR_0000
})
}
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);
}