Selamlar...
Çoğu Kişinin Değiştirmekde zorluk çektiğini Farkedip BoYle birşey yapmayı düşündüm
Güzelde oldu ..
İnvertory editor Prosedürünü birazcık editledim ve Başlangıç itemlerini O KOdlarla değiştirebileceksiniz..
ve Yeni bir Özellik daha , Artık İtemler OYUNA Girince Değil , Karakteri Oluşturdukdan hemen sonra , Karakter seçme ekranında gelecek . (Şekil Oluyor ) SancakKO 'mda Kullanımdadır Şu anda...
Gelelim Kuruluma :
Eklenmesi Gereken 1. ve Önemli Kod:
Kod:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[baslangic_duzenle]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[baslangic_duzenle]
GO
CREATE TABLE [dbo].[baslangic_duzenle] (
[dwid] [int] NULL ,
[stacksize] [smallint] NULL ,
[durability] [smallint] NULL ,
[strUserId] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[sira] [int] NULL ,
[itembasicname] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[strSerial] [int] NULL
) ON [PRIMARY]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[baslangic]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[baslangic]
GO
CREATE TABLE [dbo].[baslangic] (
[class] [smallint] NULL ,
[stritem] [varchar] (400) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
GO
-- Ko-Cuce 2008
insert into baslangic values ('5' , ':ø~')
insert into baslangic values ('6' , ':ø~')
insert into baslangic values ('7' , ':ø~')
insert into baslangic values ('5' , ':ø~')
insert into baslangic values ('1' , '' )
insert into baslangic values ('2' , '' )
insert into baslangic values ('3' , '' )
insert into baslangic values ('4' , '' )
Eklenmesi Gereken 2. Kod:
Kod:
--bu procedure Maktiris1536 tarafından eylenmiştir..
-- Başlangıç itemlerine Uyarlandı (Ganks)
--KO-Cuce.com 2008
CREATE procedure baslangicitemleri_bul
@StrUserID int
AS
DECLARE
@length int, -- stritem uzunluğu
@i int, -- item'in stritem deki yeri
@dwid int,
@dur int,
@duar int,
@Kocuce int,
@StackSize1 int,
@Sira int,
@Row int,
@name varchar(100),
@extname varchar(100),
@ext int,
@strSerial int
set @i = 14*0+1
set @length = 401
select @Row=count(*) from baslangic where class=@StrUserID
delete from baslangic_duzenle where struserid=@StrUserID
if @Row>0
begin
WHILE @i < @length
Begin
--Buraya İşemek Yasaktır
-- Burası Türkiye
( herkez işeyebilir )
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 = class
From baslangic
Where class = @StrUserID
if @dwid=0
begin
set @extname='~~~~~~ item yok ~~~~~~'
set @name='~~~~~~ item yok ~~~~~~'
end
else
begin
set @extname='Bulunamadi'
select @extname=strname from item where num=@dwid
end
insert into baslangic_duzenle (dwid,stacksize,durability,struserid,sira,itembasicname) values(@dwid,@StackSize1,@dur,@StrUserID,(@i-1) / 8,@extname )
set @i=@i+8
end
select * from baslangic_duzenle where struserid=@StrUserID order by sira
end
GO
Eklenmesi Gereken 3. Kod:
Kod:
CREATE procedure baslangicitemleri_kaydet
-- Created by Matrix1536
-- Pisci by Aküma
-- Başlangıc itemi Uyarlama - Ganks
@StrUserID int
AS
DECLARE
@length int, -- stritem uzunluğu
@row int, -- yerine göre deişior.
@i int, -- item'in stritem deki yeri
@dwid int, -- dwid
@pos int,
@dur int,
@dur1 int,
@Kocuce int,
@ext int,
@StackSize1 int,
@strName varchar(30),
@strExtName varchar(30),
@strSerial int,
@CstrSerial varbinary(4),
@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 baslangic where class=@StrUserID
if @row>0
begin
Select @dwid=dwid,
@dur = durability,
@StackSize1 = stacksize,
@StrUserID = strUserID
From baslangic_duzenle
Where strUserID = @StrUserID and sira=@sira
print @dwid
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 class = @StrUserID
set @i=@i+8
set @sira=@sira+1
WHILE @sira < 50
Begin
Select @dwid=dwid,
@dur = durability,
@StackSize1 = stacksize,
@StrUserID = strUserID
From baslangic_duzenle
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))
set @CstrSerial = Substring(cast(@strSerial as varbinary(4)), 4, 1) + Substring(cast(@strSerial as varbinary(4)), 3, 1) + Substring(cast(@strSerial as varbinary(4)), 2, 1) + Substring(cast(@strSerial as varbinary(4)), 1, 1)
--KO-Cuce.com 2008
update baslangic 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 class = @StrUserID
--Buraya İşemek Yasaktır
set @i=@i+8
set @sira=@sira+1
end
end
GO
Eklenmesi Gereken 4. Kod:
Kod:
--Edited By ganks...
-- KO-CUCE.com için yapılmıştır...
CREATE PROCEDURE baslangicitem
@account varchar(21)
AS
begin
declare @class smallint
select @class = cast(substring(cast(class as varchar(3)),2,2) as smallint(2)) from userdata where struserid=@account
if @class=1 or @class=5 or @class=6
set @class = 1
if @class=2 or @class=7 or @class=8
set @class = 2
if @class=3 or @class=9 or @class=10
set @class = 3
if @class=4 or @class=11 or @class=12
set @class = 4
update userdata set stritem = (select stritem from baslangic where class=@class) where struserid=@account
end
GO
Eğer Başlangıç İtem Değiştirme v1 Kurulu ise , 4. Kodu Girmeyebilirsiniz. Yani Prosedürlerde baslangicitem prosedürü var ise.
ve Son Olarak ,
Uygulanması gereken Kod:
Kod:
/****** Object: Stored Procedure dbo.CREATE_NEW_CHAR Script Date: 6/6/2006 6:03:33 PM ******/
/****** 개체: 저장 프로시저 dbo.CREATE_NEW_CHAR 스크립트 날짜: 2002-11-14 오전 11:18:03 ******/
-- scripted by samma
-- 2002.01.17
-- 2003.02.06 sungyong
ALTER 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 )
exec baslangicitem @CharID
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
SET @nRet = 4
RETURN
END
COMMIT TRAN
SET @nRet = 0
GO
ve Şimdi geleLim Başlangıç İtemlerini Değiştirme İşlemine
Class Sayıları :
Kod:
2 = Rogue
1 = warrior
3 = Mage
4 = priest
Öncelikle başlangıç itemlerini Buluyoruz.
Kod:
exec baslangicitemleri_bul 'ClassSayısı'
sonra , baslangic_duzenle tablosundan Gerekli itemleri ekliyoruz. invertory editor kullanmasını bilirsiniz. ama Program değil , Tablo olarak .
ve Gerekli itemleri değiştirip , ekledikten sonra Kaydetmeliyiz...
Kod:
exec baslangicitemleri_kaydet 'BulunanClassSayısı'
Önemli :
İtemleri Kaydederken Gireceğiniz Class Sayısı ile , itemleri buldugunuz class sayısı aynı olmalıdır. Aksi taktirde Tüm Classlara aynı itemi kaydedecektir.
ve işLem tamamdır..!
E ArtıK Başlangıç item değiştirme Programıda çıkarır birisi
Kolay Olacaktır. İnvertory editor işlemi ile aynı
sadece Prosedür ve tablo isimleri değişik...
Saygılarımla İyi Forumlar... Prosedür için Ganks'a teşekkürler.