Newbie Spellweaver
- Joined
- Apr 17, 2009
- Messages
- 44
- Reaction score
- 14
im gonna show you the way to create items on smc mor than +12
look for this
change
same with _SMC_EDIT_ITEM
for the ones to create via gm console, ill look for i, since i may bug something in the way
im not pretty sure if 255 is max or if server gonna accept it(if anyone know max value, post here)
Code:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
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 > 12)
set @OptLvl = 12
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
Code:
if (@OptLvl < 0)
set @OptLvl = 0
else if (@OptLvl > 12)
set @OptLvl = 12
Code:
if (@OptLvl < 0)
set @OptLvl = 0
else if (@OptLvl > 255)
set @OptLvl = 255
for the ones to create via gm console, ill look for i, since i may bug something in the way
im not pretty sure if 255 is max or if server gonna accept it(if anyone know max value, post here)