İlk önce bu prosedür daha önce paylaşıldı fakat eksikti ve q.a.'da hata veriyordu biz bunu düzelttik gerçi bir çok database var bu prosedür fakat bilen kişi sayısı az oysa en basit başlangıç item değiştirme yöntemi denilebilir.(ve sorunsuz)
1.Girilecek Kod :
CREATE procedure ITEMLERI_BUL
@StrUserID varchar(30)
AS
-- By CartmaN
DECLARE
@length int, -- stritem uzunlugu
@i int, -- item'in stritem deki yeri
@dwid int,
@dur int,
@duar int,
@StackSize1 int,
@Sira int,
@Row int,
@name varchar(100),
@extname varchar(100),
@ext int
set @i = 14*0+1
set @length = 401
select @row=count(*) from userdata where struserid=@StrUserID
delete from itemler where struserid=@StrUserID
if @row>0
begin
WHILE @i < @length
Begin
Select @dwid=cast(cast(substring(cast(substring(strItem, @i,4) as varbinary(4)), 4,
1)+substring(cast(substring(strItem, @i,4) as varbinary(4)), 3, 1)+substring(cast(substring(strItem, @i,4) as
varbinary(4)), 2, 1)+substring(cast(substring(strItem, @i,4) as varbinary(4)), 1, 1) as varbinary(4)) as int(4)),
@dur = cast(cast(cast( substring(strItem, @i+5, 1) as varbinary(1))+cast(substring(strItem, @i+4, 1) as
varbinary(1)) as varbinary(2)) as smallint),
@StackSize1 = cast(cast(cast( substring(strItem, @i+7, 1) as varbinary(1))+cast(substring(strItem, @i+6, 1) as
varbinary(1)) as varbinary(2)) as smallint),
@StrUserID = strUserID
From UserData
Where strUserID = @StrUserID
insert into itemler (dwid,stacksize,durability,struserid,sira,itembasicname,extname)
values(@dwid,@stacksize1,@dur,@StrUserID,(@i-1) / 8,@extname,@name )
set @i=@i+8
end
end
2.Girilecek Kod :
CREATE procedure ITEMLERI_ENCODE
@StrUserID varchar(30)
AS
-- By exselansTR |
[Linkleri görebilmek için üye olun veya giriş yapın.]DECLARE
@length int, -- stritem uzunlugu
@row int, -- yerine göre deisior.
@i int, -- item'in stritem deki yeri
@dwid int, -- dwid
@pos int,
@dur int,
@dur1 int,
@ext int,
@StackSize1 int,
@strName varchar(30),
@strExtName varchar(30),
@Cdwid varbinary(4),
@cdur varchar(2),
@Source tinyint,
@NEWdwid int,
@StackSize int,
@cstack varchar(2),
@sira int
set @sira=0
set @i = 14*0
set @length = 401
select @row=count( * ) from userdata where struserid=@StrUserID
if @row>0
begin
Select @dwid=dwid,
@dur = durability,
@StackSize1 = stacksize,
@StrUserID = strUserID
From itemler
Where strUserID = @StrUserID and sira=@sira
Set @Cdwid = Substring(cast(@dwid as varbinary(4)), 4, 1) + Substring(cast(@dwid as varbinary(4)), 3, 1) +
Substring(cast(@dwid as varbinary(4)), 2, 1) + Substring(cast(@dwid as varbinary(4)), 1, 1)
Set @Cdur = cast(Substring(cast(@dur as varbinary(2)), 2, 1)+Substring(cast(@dur as varbinary(2)), 1, 1) as
varchar(2))
Set @Cstack = cast(Substring(cast(@StackSize1 as varbinary(2)), 2, 1)+Substring(cast(@StackSize1 as
varbinary(2)), 1, 1) as varchar(2))
update UserData set strItem = cast(cast(cast(@Cdwid as varchar(4)) + @Cdur + @Cstack as varchar(
) as
binary(400)) where strUserID = @strUserID
set @i=@i+8
set @sira=@sira+1
WHILE @sira < 50
Begin
Select @dwid=dwid,
@dur = durability,
@StackSize1 = stacksize,
@StrUserID = strUserID
From itemler
Where strUserID = @StrUserID and sira=@sira
Set @Cdwid = Substring(cast(@dwid as varbinary(4)), 4, 1) + Substring(cast(@dwid as varbinary(4)), 3, 1) +
Substring(cast(@dwid as varbinary(4)), 2, 1) + Substring(cast(@dwid as varbinary(4)), 1, 1)
Set @Cdur = cast(Substring(cast(@dur as varbinary(2)), 2, 1)+Substring(cast(@dur as varbinary(2)), 1, 1) as
varchar(2))
Set @Cstack = cast(Substring(cast(@StackSize1 as varbinary(2)), 2, 1)+Substring(cast(@StackSize1 as
varbinary(2)), 1, 1) as varchar(2))
update UserData set strItem = cast( substring(strItem, 1, @i) + cast(cast(@Cdwid as varchar(4)) + @Cdur +
@Cstack as varchar(
) + substring(strItem, @i+8, 401-@i) as binary(400)) where strUserID = @strUserID
set @i=@i+8
set @sira=@sira+1
end
end
delete from itemler
GO
Kullanımı :
Kod:
UPDATE BASLANGIC
SET stritem = (select strItem
FROM USERDATA
WHERE StrUserID = 'İSİM')
WHERE Class = 'CLASS'
Class Numaraları :
1 = Warrior
2 = Rogue
3 = Mage
4 = Priest