[Dev] Arshivel |
25-02-2013 03:54 AM |
فى اناس بتحتاج انها تعمل Plus على ادخل وى هتفهم
بسم الله الرحمن الرحيم
اولاً فى ناس كتير ممكن تكون عملت ال 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
ده لى 255
كود:
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
وى لو انتا عاوز الناس ال فى العبه بس دى لى كول ال Players
تعملهم 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
|