شـريـط الاهـداءات | |
قسم الشروحات و البرامج المستخدمة في عمل السيرفرات الخاصة [ قسم متخصص فى شروحات و البرامج في عمل السيرفرات الخاصة ] [ يرجى عدم وضع الأسئلة والاستفسارات في هذا القسم ] |
|
أدوات الموضوع | انواع عرض الموضوع |
25-02-2013, 03:54 AM | #1 | ||||||||||||
|
بسم الله الرحمن الرحيم اولاً فى ناس كتير ممكن تكون عملت ال Query ده بس ال Query ده مش بيخليك تعمل Plus فى العبه لا ده من ال SMC بس وى ممكن تعمل لى حد 255 ________________________ ده 250 كود:
USE [SRO_VT_SHARD] GO /****** Object: StoredProcedure [dbo].[_SMC_ADD_ITEM] Script Date: 02/25/2013 01:05:56 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER OFF GO ---------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------- -- 20_SMC__ShardDB.sql _SMC_ADD_ITEM ¼öÁ¤ ---------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------- ----------------------------------------------------------------------- ALTER procedure [dbo].[_SMC_ADD_ITEM] ----------------------------------------------------- params to find target item @TargetStorage int, /* 0 = inventory, 1 = chest , 2 = guild chest, 3 = Avatar Inventory */ @OwnerName varchar(128), ----------------------------------------------------- params to modify the item @RefItemID int, @OptLvl tinyint, @Variance bigint, @Data int, @szCreater varchar(32), @MagParamNum int, @MagParam1 bigint, @MagParam2 bigint, @MagParam3 bigint, @MagParam4 bigint, @MagParam5 bigint, @MagParam6 bigint, @MagParam7 bigint, @MagParam8 bigint, @MagParam9 bigint, @MagParam10 bigint, @MagParam11 bigint, @MagParam12 bigint as ---------------------------------------------------- -- step 1. check validity of parameters ---------------------------------------------------- if (@TargetStorage <> 0 and @TargetStorage <> 1 and @TargetStorage <> 2 and @TargetStorage <> 3) begin select -1, cast(0 as bigint), cast(0 as bigint) -- invalid target storage return end declare @OwnerID int declare @ItemID bigint set @OwnerID = 0 set @ItemID = 0 declare @empty_slot int set @empty_slot = -1 if (@TargetStorage = 0) begin select @OwnerID = charid from _char where charname16 = @OwnerName if (@@rowcount = 0 or @OwnerID = 0 or @OwnerID is null) begin select -2, cast(0 as bigint), cast(0 as bigint)-- can't find owner return end select top 1 @empty_slot = slot from _inventory where charid = @OwnerID and slot >= 13 and ItemID = 0 and slot < (select top 1 InventorySize from _Char where CharID = @OwnerID) order by slot asc if (@@rowcount = 0) begin select -3, cast(0 as bigint), cast(0 as bigint) -- inventory full return end end else if (@TargetStorage = 1) begin select @OwnerID = JID from _AccountJID where AccountID = @ownername if (@@rowcount = 0 or @OwnerID = 0 or @OwnerID is null) begin select -2, cast(0 as bigint), cast(0 as bigint) -- can't find owner return end select top 1 @empty_slot = slot from _chest where userjid = @OwnerID and (ItemID = 0 or ItemID is null) order by slot asc if (@@rowcount = 0) begin select -3, cast(0 as bigint), cast(0 as bigint) -- chest full return end end else if (@TargetStorage = 2) begin select @OwnerID = [ID] from _guild where [name] = @ownername if (@@rowcount = 0 or @OwnerID = 0 or @OwnerID is null) begin select -2, cast(0 as bigint), cast(0 as bigint) -- can't find owner return end select top 1 @empty_slot = slot from _guildchest where guildid = @OwnerID and (ItemID = 0 or ItemID is null) order by slot asc if (@@rowcount = 0) begin select -3, cast(0 as bigint), cast(0 as bigint) -- chest full return end -- ±æµå ·¹º§¿¡ µû¸¥ ±æµå ½½·Ô¼ö Á¦ÇÑÀ» È®ÀÎÇÏÀÚ. declare @lvl tinyint declare @max_slot tinyint select @lvl = Lvl from _guild where [id] = @OwnerID set @max_slot = 30 * (@lvl - 1) - 1 if @empty_slot > @max_slot begin select -3, cast(0 as bigint), cast(0 as bigint) -- chest full return end end else begin select @OwnerID = charid from _char where charname16 = @OwnerName if (@@rowcount = 0 or @OwnerID = 0 or @OwnerID is null) begin select -2, cast(0 as bigint), cast(0 as bigint)-- can't find owner return end select top 1 @empty_slot = slot from _InventoryForAvatar where charid = @OwnerID and ItemID = 0 and slot < 4 -- ÇÁ·Î½ÃÁ® ÇϵåÄÚµù(¾Æ¹ÙŸ ½½·ÔÀº 0, 1, 2, 3ÀÌ´Ù.) order by slot asc if (@@rowcount = 0) begin select -3, cast(0 as bigint), cast(0 as bigint) -- inventory full return end end if (@empty_slot < 0 or @empty_slot is null) begin select -4, cast(0 as bigint), cast(0 as bigint) -- unknown error ??? return end declare @tid1 int declare @tid2 int declare @tid3 int declare @tid4 int select @tid1 = TypeID1, @tid2 = TypeID2, @tid3 = TypeID3, @tid4 = TypeID4 from _RefObjCommon where ID = @RefItemID if (@tid1 <> 3) begin select -5, cast(0 as bigint), cast(0 as bigint) -- about to assign non-item object return end if (@tid2 <> 1) -- is not equipment begin -- can't assign magic param or optlevel to non-equip item if (@MagParamNum > 0 or @OptLvl > 0) begin select -6, cast(0 as bigint), cast(0 as bigint) return end end ---------------------------------------------------- -- step 2. correct some non-critical parameters ---------------------------------------------------- if (@tid2 = 3 and @Data = 0) -- can't assign overlap count 0 to expendable item begin set @Data = 1 end if (LEN(@szCreater) = 0) set @szCreater = NULL ---------------------------------------------------- -- step add. equip and pet @data setting ---------------------------------------------------- declare @IS_EQUIP int declare @IS_PET int set @IS_EQUIP = 0 set @IS_PET = 0 if (@tid1 = 3 and @tid2 = 1) set @IS_EQUIP = 1 else if (@tid1 = 3 and @tid2 = 2 and @tid3 = 1 and (@tid4 = 1 or @tid4 = 2)) set @IS_PET = 1 if (@IS_EQUIP = 1) begin -- Àß ¸øµÈ ID·Î select ÇÏ°í ÀÖÀ½. ¼öÁ¤ (by binu 2008-10-17) -- select @Data = Dur_L from _RefObjItem where ID = @RefItemID select @Data = Dur_L from _RefObjItem where ID = (select Link from _RefObjCommon where ID = @RefItemID ) if (@OptLvl < 0) set @OptLvl = 0 else if (@OptLvl > 250) set @OptLvl = 250 end else begin if( @IS_PET = 1 ) set @Data = 0 else begin declare @MaxCount int select @MaxCount = MaxStack from _RefObjItem where ID = @RefItemID if (@Data <= 0 or @Data > @MaxCount) set @Data = @MaxCount end set @OptLvl = 0 end ---------------------------------------------------------- -- Step3. create item and set to associated storage ---------------------------------------------------------- set xact_abort on begin transaction declare @NewItemID bigint declare @Serial64 bigint set @NewItemID = 0 set @Serial64 = 0 exec @NewItemID = _STRG_ALLOC_ITEM_NoTX @Serial64 OUTPUT if (@NewItemID = 0) begin rollback transaction select -7, cast(0 as bigint), cast(0 as bigint) return end if (@MagParamNum = 0) begin update _Items set RefItemID = @RefItemID, OptLevel = @OptLvl, Variance = @Variance, Data = @Data, MagParamNum = 0, Serial64 = @Serial64 where ID64 = @NewItemID end else begin update _Items set RefItemID = @RefItemID, OptLevel = @OptLvl, Variance = @Variance, Data = @Data, MagParamNum = @MagParamNum, MagParam1 = @MagParam1, MagParam2 = @MagParam2, MagParam3 = @MagParam3, MagParam4 = @MagParam4, MagParam5 = @MagParam5, MagParam6 = @MagParam6, MagParam7 = @MagParam7, MagParam8 = @MagParam8, MagParam9 = @MagParam9, MagParam10= @MagParam10, MagParam11 = @MagParam11, MagParam12 = @MagParam12, Serial64 = @Serial64 where ID64 = @NewItemID end if (@@error <> 0) begin rollback transaction select -8, cast(0 as bigint), cast(0 as bigint) return end if (@TargetStorage = 0) update _Inventory set ItemID = @NewItemID where CharID = @OwnerID and Slot = @empty_slot else if (@TargetStorage = 1) update _chest set ItemID = @NewItemID where UserJID = @OwnerID and slot = @empty_slot else if (@TargetStorage = 2) update _guildchest set ItemID = @NewItemID where guildid = @OwnerID and slot = @empty_slot else update _InventoryForAvatar set ItemID = @NewItemID where CharID = @OwnerID and Slot = @empty_slot if (@@rowcount = 0 or @@error <> 0) begin rollback transaction select -9, cast(0 as bigint), cast(0 as bigint) return end commit transaction select @empty_slot, @NewItemID, @Serial64 return كود:
USE [SRO_VT_SHARD] GO /****** Object: StoredProcedure [dbo].[_SMC_ADD_ITEM] Script Date: 02/25/2013 01:05:56 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER OFF GO ---------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------- -- 20_SMC__ShardDB.sql _SMC_ADD_ITEM ¼öÁ¤ ---------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------- ----------------------------------------------------------------------- ALTER procedure [dbo].[_SMC_ADD_ITEM] ----------------------------------------------------- params to find target item @TargetStorage int, /* 0 = inventory, 1 = chest , 2 = guild chest, 3 = Avatar Inventory */ @OwnerName varchar(128), ----------------------------------------------------- params to modify the item @RefItemID int, @OptLvl tinyint, @Variance bigint, @Data int, @szCreater varchar(32), @MagParamNum int, @MagParam1 bigint, @MagParam2 bigint, @MagParam3 bigint, @MagParam4 bigint, @MagParam5 bigint, @MagParam6 bigint, @MagParam7 bigint, @MagParam8 bigint, @MagParam9 bigint, @MagParam10 bigint, @MagParam11 bigint, @MagParam12 bigint as ---------------------------------------------------- -- step 1. check validity of parameters ---------------------------------------------------- if (@TargetStorage <> 0 and @TargetStorage <> 1 and @TargetStorage <> 2 and @TargetStorage <> 3) begin select -1, cast(0 as bigint), cast(0 as bigint) -- invalid target storage return end declare @OwnerID int declare @ItemID bigint set @OwnerID = 0 set @ItemID = 0 declare @empty_slot int set @empty_slot = -1 if (@TargetStorage = 0) begin select @OwnerID = charid from _char where charname16 = @OwnerName if (@@rowcount = 0 or @OwnerID = 0 or @OwnerID is null) begin select -2, cast(0 as bigint), cast(0 as bigint)-- can't find owner return end select top 1 @empty_slot = slot from _inventory where charid = @OwnerID and slot >= 13 and ItemID = 0 and slot < (select top 1 InventorySize from _Char where CharID = @OwnerID) order by slot asc if (@@rowcount = 0) begin select -3, cast(0 as bigint), cast(0 as bigint) -- inventory full return end end else if (@TargetStorage = 1) begin select @OwnerID = JID from _AccountJID where AccountID = @ownername if (@@rowcount = 0 or @OwnerID = 0 or @OwnerID is null) begin select -2, cast(0 as bigint), cast(0 as bigint) -- can't find owner return end select top 1 @empty_slot = slot from _chest where userjid = @OwnerID and (ItemID = 0 or ItemID is null) order by slot asc if (@@rowcount = 0) begin select -3, cast(0 as bigint), cast(0 as bigint) -- chest full return end end else if (@TargetStorage = 2) begin select @OwnerID = [ID] from _guild where [name] = @ownername if (@@rowcount = 0 or @OwnerID = 0 or @OwnerID is null) begin select -2, cast(0 as bigint), cast(0 as bigint) -- can't find owner return end select top 1 @empty_slot = slot from _guildchest where guildid = @OwnerID and (ItemID = 0 or ItemID is null) order by slot asc if (@@rowcount = 0) begin select -3, cast(0 as bigint), cast(0 as bigint) -- chest full return end -- ±æµå ·¹º§¿¡ µû¸¥ ±æµå ½½·Ô¼ö Á¦ÇÑÀ» È®ÀÎÇÏÀÚ. declare @lvl tinyint declare @max_slot tinyint select @lvl = Lvl from _guild where [id] = @OwnerID set @max_slot = 30 * (@lvl - 1) - 1 if @empty_slot > @max_slot begin select -3, cast(0 as bigint), cast(0 as bigint) -- chest full return end end else begin select @OwnerID = charid from _char where charname16 = @OwnerName if (@@rowcount = 0 or @OwnerID = 0 or @OwnerID is null) begin select -2, cast(0 as bigint), cast(0 as bigint)-- can't find owner return end select top 1 @empty_slot = slot from _InventoryForAvatar where charid = @OwnerID and ItemID = 0 and slot < 4 -- ÇÁ·Î½ÃÁ® ÇϵåÄÚµù(¾Æ¹ÙŸ ½½·ÔÀº 0, 1, 2, 3ÀÌ´Ù.) order by slot asc if (@@rowcount = 0) begin select -3, cast(0 as bigint), cast(0 as bigint) -- inventory full return end end if (@empty_slot < 0 or @empty_slot is null) begin select -4, cast(0 as bigint), cast(0 as bigint) -- unknown error ??? return end declare @tid1 int declare @tid2 int declare @tid3 int declare @tid4 int select @tid1 = TypeID1, @tid2 = TypeID2, @tid3 = TypeID3, @tid4 = TypeID4 from _RefObjCommon where ID = @RefItemID if (@tid1 <> 3) begin select -5, cast(0 as bigint), cast(0 as bigint) -- about to assign non-item object return end if (@tid2 <> 1) -- is not equipment begin -- can't assign magic param or optlevel to non-equip item if (@MagParamNum > 0 or @OptLvl > 0) begin select -6, cast(0 as bigint), cast(0 as bigint) return end end ---------------------------------------------------- -- step 2. correct some non-critical parameters ---------------------------------------------------- if (@tid2 = 3 and @Data = 0) -- can't assign overlap count 0 to expendable item begin set @Data = 1 end if (LEN(@szCreater) = 0) set @szCreater = NULL ---------------------------------------------------- -- step add. equip and pet @data setting ---------------------------------------------------- declare @IS_EQUIP int declare @IS_PET int set @IS_EQUIP = 0 set @IS_PET = 0 if (@tid1 = 3 and @tid2 = 1) set @IS_EQUIP = 1 else if (@tid1 = 3 and @tid2 = 2 and @tid3 = 1 and (@tid4 = 1 or @tid4 = 2)) set @IS_PET = 1 if (@IS_EQUIP = 1) begin -- Àß ¸øµÈ ID·Î select ÇÏ°í ÀÖÀ½. ¼öÁ¤ (by binu 2008-10-17) -- select @Data = Dur_L from _RefObjItem where ID = @RefItemID select @Data = Dur_L from _RefObjItem where ID = (select Link from _RefObjCommon where ID = @RefItemID ) if (@OptLvl < 0) set @OptLvl = 0 else if (@OptLvl > 255) set @OptLvl = 255 end else begin if( @IS_PET = 1 ) set @Data = 0 else begin declare @MaxCount int select @MaxCount = MaxStack from _RefObjItem where ID = @RefItemID if (@Data <= 0 or @Data > @MaxCount) set @Data = @MaxCount end set @OptLvl = 0 end ---------------------------------------------------------- -- Step3. create item and set to associated storage ---------------------------------------------------------- set xact_abort on begin transaction declare @NewItemID bigint declare @Serial64 bigint set @NewItemID = 0 set @Serial64 = 0 exec @NewItemID = _STRG_ALLOC_ITEM_NoTX @Serial64 OUTPUT if (@NewItemID = 0) begin rollback transaction select -7, cast(0 as bigint), cast(0 as bigint) return end if (@MagParamNum = 0) begin update _Items set RefItemID = @RefItemID, OptLevel = @OptLvl, Variance = @Variance, Data = @Data, MagParamNum = 0, Serial64 = @Serial64 where ID64 = @NewItemID end else begin update _Items set RefItemID = @RefItemID, OptLevel = @OptLvl, Variance = @Variance, Data = @Data, MagParamNum = @MagParamNum, MagParam1 = @MagParam1, MagParam2 = @MagParam2, MagParam3 = @MagParam3, MagParam4 = @MagParam4, MagParam5 = @MagParam5, MagParam6 = @MagParam6, MagParam7 = @MagParam7, MagParam8 = @MagParam8, MagParam9 = @MagParam9, MagParam10= @MagParam10, MagParam11 = @MagParam11, MagParam12 = @MagParam12, Serial64 = @Serial64 where ID64 = @NewItemID end if (@@error <> 0) begin rollback transaction select -8, cast(0 as bigint), cast(0 as bigint) return end if (@TargetStorage = 0) update _Inventory set ItemID = @NewItemID where CharID = @OwnerID and Slot = @empty_slot else if (@TargetStorage = 1) update _chest set ItemID = @NewItemID where UserJID = @OwnerID and slot = @empty_slot else if (@TargetStorage = 2) update _guildchest set ItemID = @NewItemID where guildid = @OwnerID and slot = @empty_slot else update _InventoryForAvatar set ItemID = @NewItemID where CharID = @OwnerID and Slot = @empty_slot if (@@rowcount = 0 or @@error <> 0) begin rollback transaction select -9, cast(0 as bigint), cast(0 as bigint) return end commit transaction select @empty_slot, @NewItemID, @Serial64 return تعملهم Plus لى ال Dg ال انتا عاوزو هتفهم من ال Query كود:
UPDATE [Vengard_SHARD].[dbo].[_Items] SET [OptLevel] = 7 where [ID64] = (select ItemID from [dbo].[_CheckItemsAndOwners] where ItemCodeName LIKE 'ITEM_%_13_%' and [OptLevel] = 5 and [_CheckItemsAndOwners].ItemID = [ID64]) GO ازاى تنزل item من ال Console +250 |
||||||||||||
|
25-02-2013, 06:21 AM | #2 | ||||||||||||
|
تسلم ايدك ياباشا
|
||||||||||||
|
25-02-2013, 11:51 AM | #3 | ||||||||||||
|
ايـه الحـلاوه دى .. تـسلم
|
||||||||||||
|
25-02-2013, 03:30 PM | #4 | ||||||||||||
|
nice .
|
||||||||||||
|
25-02-2013, 05:15 PM | #5 | ||||||||||||
|
tmamozo
|
||||||||||||
|
25-02-2013, 06:47 PM | #6 | ||||||||||||
|
تسلمو يارجاله
|
||||||||||||
|
26-02-2013, 01:36 PM | #7 | ||||||||||||
|
الله ينور بس لو انا عايز اخلى مكس بلس فى الجيمـ عاندى +12 ينفع و لو ينفع ممكن الشرح
|
||||||||||||
|
26-02-2013, 01:39 PM | #8 | ||||||||||||
|
Nice
|
||||||||||||
|
26-02-2013, 03:31 PM | #9 | ||||||||||||
|
تسلم يا رايق
|
||||||||||||
|
24-03-2013, 02:29 PM | #10 | ||||||||||||
|
بسم الله الرحمن الرحيم والصلاة والسلام على اشرف المرسلين
اللهم أنت ربي لا إله الا أنت، خلقتني وأنا عبدك وأنا على عهدك ووعدك ما استطعت، أعوذ بك من شر ما صنعت، أبوء لك بنعمتك عليّ وأبوء بذنبي، فاغفر لي، فإنه لا يغفر الذنوب إلا أنت السلام عليكم ورحمه الله وبركاته شكراً على هذا المجهود الضخم والى الافضل دائماً ان شاء الله موضوع اكثر من رائع |
||||||||||||
|
14-05-2014, 09:57 AM | #11 | ||||||||||||
|
تمام استمر
|
||||||||||||
|
يتصفح الموضوع حالياً : 1 (0 عضو و 1 زائر) | |
|
|