İlk Olarak :CREATE_NEW_CHAR
CREATE PROCEDURE CREATE_NEW_CHAR
@nRet smallint OUTPUT,
@AccountID char(21),
@index tinyint,
@CharID char(21),
@Race tinyint,
@Class smallint,
@Hair tinyint,
@Face tinyint,
@Str tinyint,
@Sta tinyint,
@Dex tinyint,
@Intel tinyint,
@Cha tinyint
AS
DECLARE @Row tinyint, @Nation tinyint, @Zone tinyint, @PosX int, @PosZ int
SET @Row = 0 SET @Nation = 0 SET @Zone = 0 SET @PosX = 0 SET @PosZ = 0
SELECT @Nation = bNation, @Row = bCharNum FROM ACCOUNT_CHAR WHERE strAccountID = @AccountID
IF @Row >= 5 SET @nRet = 1
IF @Nation = 1 AND @Race > 10 SET @nRet = 2
ELSE IF @Nation = 2 AND @Race < 10 SET @nRet = 2
ELSE IF @Nation <>1 AND @Nation <> 2 SET @nRet = 2
IF @nRet > 0
RETURN
SELECT @Row = COUNT(*) FROM USERDATA WHERE strUserId = @CharID
IF @Row > 0
BEGIN
SET @nRet = 3
RETURN
END
--SET @Zone = @Nation
SET @Zone=21
SELECT @PosX = InitX, @PosZ = InitZ FROM ZONE_INFO WHERE ZoneNo = @Zone
BEGIN TRAN
IF @index = 0
UPDATE ACCOUNT_CHAR SET strCharID1 = @CharID, bCharNum = bCharNum + 1 WHERE strAccountID = @AccountID
ELSE IF @index = 1
UPDATE ACCOUNT_CHAR SET strCharID2 = @CharID, bCharNum = bCharNum + 1 WHERE strAccountID = @AccountID
ELSE IF @index = 2
UPDATE ACCOUNT_CHAR SET strCharID3 = @CharID, bCharNum = bCharNum + 1 WHERE strAccountID = @AccountID
ELSE IF @index = 3
UPDATE ACCOUNT_CHAR SET strCharID4 = @CharID, bCharNum = bCharNum + 1 WHERE strAccountID = @AccountID
ELSE IF @index = 4
UPDATE ACCOUNT_CHAR SET strCharID5 = @CharID, bCharNum = bCharNum + 1 WHERE strAccountID = @AccountID
INSERT INTO USERDATA (strUserId, Nation, Race, Class, HairColor, Face, Strong, Sta, Dex, Intel, Cha, Zone, PX, PZ )
VALUES (@CharID, @Nation, @Race, @Class, @Hair, @Face, @Str, @Sta, @Dex, @Intel, @Cha, @Zone, @PosX, @PosZ )
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
SET @nRet = 4
RETURN
END
COMMIT TRAN
SET @nRet = 0
GO
Sonra Sira Sira Bu islemleri Uyguluyoruzz.
Evet Beyler Sizlere başlangıçta itemler ,silahlar, 74 level ,130 kullanılmamış skill point ve kullanılmamış 255 stat point
yapmayı tarif ediceğim.
İlk önce procedureler....
1. Procedure
Kod:
CREATE procedure item_decode
@StrUserID varchar(30)
AS
DECLARE
@length int,
@i int,
@Num int,
@dur int,
@duar int,
@StackSize1 int,
@InventorySlot int,
@Row int,
@name varchar(100),
@extname varchar(100),
@ext int
set @i = 14*0+1
set @length = 401
select @row=count(*) from baslangic where class=@StrUserID
delete from BASLANGICITEMEDIT where struserid=@StrUserID
if @row>0
begin
WHILE @i < @length
Begin
Select @Num=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 = class
From baslangic
Where class = @StrUserID
if @Num=0
begin
set @extname='Free Slot'
set @name='Free Slot'
end
else
begin
set @extname='Not Find'
set @name='Not Using'
select @extname=strName from item where Num=@Num
if @extname='Not Find'
begin
set @ext=-1
set @name='Not Find'
select @extname=strName,@ext=Slot from item where Num= cast(substring(cast(@Num as varchar(9)), 1, 6)+'000' as int(4)) --cast(substring(cast(@Num as varbinary(4)),0,5) as int(4))*1000
if @ext>-1
begin
set @duar=-1
If @ext = 0
select @duar = Duration,@name=strName From item where Num = cast(substring(cast(@Num as varchar(9)), 7, 9) as int(4))
end
end
end
insert into BASLANGICITEMEDIT (Num,stacksize,Durability,struserid,InventorySlot, ItemName,extname) values(@Num,@stacksize1,@dur,@StrUserID,(@i-1) / 8,@extname,@name )
set @i=@i+8
end
end
GO
_________________________
2.Procedure.
Kod:
CREATE procedure item_encode
@StrUserID varchar(30)
AS
DECLARE
@length int,
@row int,
@i int,
@Num int,
@pos int,
@dur int,
@dur1 int,
@ext int,
@StackSize1 int,
@strName varchar(30),
@strExtName varchar(30),
@CNum varbinary(4),
@cdur varchar(2),
@Source tinyint,
@NEWNum int,
@StackSize int,
@cstack varchar(2),
@InventorySlot int
set @InventorySlot=0
set @i = 14*0
set @length = 401
select @row=count( * ) from baslangic where class=@StrUserID
if @row>0
begin
Select @Num=Num,
@dur = Durability,
@StackSize1 = stacksize,
@StrUserID = strUserid
From BASLANGICITEMEDIT
Where strUserID = @StrUserID and InventorySlot=@InventorySlot
Set @CNum = Substring(cast(@Num as varbinary(4)), 4, 1) + Substring(cast(@Num as varbinary(4)), 3, 1) + Substring(cast(@Num as varbinary(4)), 2, 1) + Substring(cast(@Num 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(@CNum as varchar(4)) + @Cdur + @Cstack as varchar(
) as binary(400)) where class = @strUserID
set @i=@i+8
set @InventorySlot=@InventorySlot+1
WHILE @InventorySlot < 50
Begin
Select @Num=Num,
@dur = Durability,
@StackSize1 = stacksize,
@StrUserID = strUserID
From BASLANGICITEMEDIT
Where strUserID = @StrUserID and InventorySlot=@InventorySlot
Set @CNum = Substring(cast(@Num as varbinary(4)), 4, 1) + Substring(cast(@Num as varbinary(4)), 3, 1) + Substring(cast(@Num as varbinary(4)), 2, 1) + Substring(cast(@Num 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 baslangic set strItem = cast( substring(strItem, 1, @i) + cast(cast(@CNum as varchar(4)) + @Cdur + @Cstack as varchar(
) + substring(strItem, @i+8, 401-@i) as binary(400)) where class = @strUserID
set @i=@i+8
set @InventorySlot=@InventorySlot+1
end
end
GO
3.Procedure
KOD:
Create Table BASLANGICITEMEDIT
(Num int,
stacksize smallint,
durabilty smallint,
strUserid varchar(50),
InventorySlot int,
ItemName varchar(100),
Extname varchar(100))
4.Procedure
KOD:
Create table baslangic
(class smallint,
strItem varchar(400))
Kodlar Buraya kadar fakat hepsini sırasıyla yapmaya dikkat edin!
Sıra geldi anlatıma...
baslangic isimli tableyi acıyoruz bomboş!
_________________________________________
Class | StrItem
1 <null>
2 <null>
3 <null>
4 <null>
5 <null>
6 <null>
7 <null>
______________________________________________
Yukardaki gibi 7 tane satır olusturuyoruz
anlaşılmayan bişey yok (Null yazmanıza gerek yok boş bırakırsanızda olur)
Evet zor kısmını geçtik(inşallah)
Şimdi Query Analizer i açıyoruz.(Başlat - Programlar - Microsoft SQL Server - Query Analyzer)
Yukardan (master) yazan şeyi kendi db miz yapıyoruz örneğin( KN_Online)
Ve yukarda verdigim procedureleri sırasıyla yapıp F5 e basıyoruz.(Her bir procedure icin F5 e basın sonra procedureyi silin sıradakini yazın)
Evet procedureleride geçtik.
Query Analizeri kapatmadan bidaha yazıyoruz..
Exec item_decode @struserid='1' (1 warrioru ifade eder.2 rogue . 3 mage. 4.Priest tir.digerlerine karısmayınız!)
Evet kapatmadan Enterprise manageri açıyoruz.
BASLANGICITEMEDIT isimli tablomuza girin.
Orda 49 tane sutun olacak .
Şimdi item yerlerini yazıyorum..
______________
Kafalık 1
Küpe(2) 2
Kolye 3
Gövdelik 4
USKO'da pet konulan
yer (boş yer) 5
Silah 6
Kemer 7
Silah(2) 8
Yüzük 9
Altlık 10
Yüzük(2) 11
Eldiven 12
Botlar 13
____________
14 ve sonrası inventory mizi ifade eder(14-49)
Ornegin başlangıçta çarımıza valkyrie ekliyeceğiz.
Valkyrie kodlarımızı buluyoruz(onuda siz yapın artık)
BASLANGICITEMEDIT tablosunu acıyoruz.
orda 49 tane sutun olacak
Kafalık ekliyeceğiz.
InventorySlot un 1 oldugu yeri bulacagız.
Evet bulduk
En başında Num isimli yere kafalık valkyrie kodunu yazıyoruz.
evet kafalığımızı ekledik
bunun gibi diğer itemleride ekliyoruz.
sonra query analyzere girin
exec item_encode @struserid='1' yazıyoruz unutmayın 1 warrior 2 rogue 3 mage 4 priesttir!
Sıra geldi başlangıç leveli ,skili ve statı
Enterprise Manageri açın
DB yi seçin Stored Procedures i açın.
Ordan LOAD_USER_Data yı çift tıklayıp açın.
Ve orada ne var ne yok silip şu kodu yazın!
KOD:
CREATE PROCEDURE LOAD_USER_DATA
@AccountID char(21),
@id char(21),
@nRet smallint OUTPUT
AS
DECLARE @charid1 char(21), @charid2 char(21), @charid3 char(21)
DECLARE @True smallint
SET @charid1 = null
SET @charid2 = null
SET @charid3 = null
SET @True = 0
SET @nRet = 0
SELECT @charid1 = strCharID1, @charid2 = strCharID2, @charid3 = strCharID3 FROM ACCOUNT_CHAR WHERE strAccountID = @AccountID
IF @id = @charid1 or @id = @charid2 or @id = @charid3
SET @True = 1
IF @True = 0
BEGIN
SET @nRet = 0
RETURN
END
-- OTO MASTER START
DECLARE @class char(21)
set @class = (select class from userdata where struserid = @id)
if @class = 105
begin
update userdata set class = 106 where struserid = @id
end
if @class = 107
begin
update userdata set class = 108 where struserid = @id
end
if @class = 109
begin
update userdata set class = 110 where struserid = @id
end
if @class = 111
begin
update userdata set class = 112 where struserid = @id
end
if @class = 205
begin
update userdata set class = 206 where struserid = @id
end
if @class = 207
begin
update userdata set class = 208 where struserid = @id
end
if @class = 209
begin
update userdata set class = 210 where struserid = @id
end
if @class = 211
begin
update userdata set class = 212 where struserid = @id
end
-- OTO MASTER END
exec statduzelt @id
DECLARE @levelkac int
select @levelkac = [level] FROM USERDATA WHERE StrUserID = @id
if @levelkac = 1
begin
exec baslangicitem @id
update userdata set level='74' where struserid= @id
update userdata set strSkill='<<<<<<<<<<' where strUserID = @id
update userdata set points='255' where struserid = @id
end
declare @scdenetim int, @premium int, @account varchar(50)
select @account = strAccountID from account_char where strCharID1 = @id or strCharID2 = @id or strCharID3 = @id
select @premium = count(strAccountID) from premium_service where strAccountID = @account
select @scdenetim = scaldimi from USERDATA where strUserID = @id
if @scdenetim = '0' and @premium > 0
begin
update itemler set dwid = '800013000' where dwid = '0' and sira > 13 and sira <43 and strUserId = @id
update itemler set dwid = '800010000' where dwid = '0' and sira > 13 and sira <43 and strUserId = @id
end
declare @itemvarmi int
select @itemvarmi = count(StrUserID) from itemler where StrUserID = @id
if @itemvarmi > 1
begin
exec itemleri_encode @id
end
-- Savaşlarda kalanları maradona atalım...
-- Code by TUTATIS
-- Burayı değiştiren toptur... ************ İçin yapılmıştır
DECLARE @zoneduzenle int
select @zoneduzenle = Zone FROM USERDATA WHERE StrUserID = @id
if @zoneduzenle = 101 or @zoneduzenle = 102
begin
update userdata set Zone = '21' where StrUserID = @id
end
--ßu Kadar
update userdata set Hp = '1' where StrUserID = @id and Hp = '0'
SELECT Nation, Race, Class, HairColor, Rank, Title, [Level], [Exp], Loyalty, Face, City, Knights, Fame,
Hp, Mp, Sp, Strong, Sta, Dex, Intel, Cha, Authority, Points, Gold, [Zone], Bind, PX, PZ, PY, dwTime, strSkill, strItem,strSerial, sQuestCount, strQuest, MannerPoint, LoyaltyMonthly
FROM USERDATA WHERE strUserId = @id
SET @nRet = @@RowCount
DECLARE @speedhack varchar(250)
select @speedhack = strHackToolName from HACKTOOL_USERLOG where strCharID = @id
if @speedhack='Something that resembles Speedhack has been detected on this PC. (Code = 10303)'
begin
Set @nRet = 0
end
if @id='Shlt' or @id ='DammKengKar'
BEGIN
INSERT INTO USER_LOG_KOR (strcharID, byType, updateTime) VALUES (@id, 1, getdate() )
END
RETURN
GO
yazıp kaydediyoruz.
(Bu kodda speed hackcileri almama savastakileri maradona atma oto master bulunmaktadır.)
Daha Sonra Stored Proceduresten CREATE_NEW_CHAR a çift tıklıyoruz.
En aşağıda GO dan bir üste exec baslangicitem @id
yazıyoruz. ve kaydediyoruz..