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); }