Merhaba, Hoşgeldin!

VSRO.org, Silkroad Online, Knight Online, Metin2 ve diğer çevrimiçi oyunlar için öncü bir yardım ve geliştirme platformudur. Misyonumuz, bilgi ve deneyim sahibi bireyleri, bilgiye ihtiyaç duyanlarla bir araya getirerek, zengin bir etkileşim ortamı yaratmak ve farklı bakış açılarını birleştirmektir. Topluluğumuzda güçlü bir işbirliği ve öğrenme kültürü oluşturarak, herkesin değerli katkılarda bulunmasını sağlıyoruz.

vSRO Çözüldü vSRO Starter Pack Oluşturma (Belirlenen İtemleri Verdirme)

Sieger

vSRO Developer, PK2 Editor
.
.
Katılım
6 Şub 2019
Mesajlar
2,443
Çözümler
6
Tepkime puanı
6,403
Puanları
303
Web sitesi
vsroeditor.com
Türk Lirası
0.00₺
Merhabalar,
Sistem bildiğimiz gift box mantığı ile çalışıyor, bir tablodan verileri çekip oyuncuya exec ile aktarıyor fakat şöyle bir sorunum var.
Farklı bir prosedür ile tek exec kullanarak tabloda ki tüm itemleri oyuncuya verdirebiliyorum.
Devil vermek istediğim an sorun burada başlıyor.
Bildiğiniz gibi male,female olmak üzere 2 devil var benim yapmak istediğim belirlenen ObjCharID Male ise Male Devil, Female ise Female devil vermesi.
Bunu tabloya eklemiyorum, ikinci bir exec ile verdirmeye çalışıyorum fakat hiç bi şekilde olmuyor.

Eğer tabloya eklersek nasıl yapabiliriz?
Ya da tabloya eklemez ikinci exec ile yaparsak nasıl yapabiliriz?

Bunun detaylı anlatımı ya da tam prosedürü hiç bir forum da yok.

Çözüm:

Tablodan item verdirmek yerine aşağıda yazmış olduğum şekilde sorun çözülmüştür.

Sorunu şu şekilde çözdüm, tablodan item vermiyor lakin bir tık daha ileri yürüttüm daha güzel ve temiz oldu.
USE [SRO_VT_SHARD] -- Varsa farklı bir DB adı yazabilir ya da kendinize özel bir DB oluşturup onun adını yazabilirsiniz.
GO
/****** Object: StoredProcedure [dbo].[_StarterPackBronz] Script Date: 20.06.2019 19:43:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[_StarterPackBronz]
@CharID INT
as

BEGIN
DECLARE @CharName_SpecialPack VARCHAR(64)=
(SELECT CharName16 FROM [SRO_VT_SHARD].[dbo].[_Char] WITH (NOLOCK) WHERE CharID=@CharID);
DECLARE @CharType_SpecialPack INT=
(SELECT RefObjID FROM SRO_VT_SHARD.._Char WITH (NOLOCK) WHERE CharID=@CharID);

EXEC SRO_VT_SHARD.dbo._ADD_ITEM_EXTERN @CharName_SpecialPack,'ITEM_MALL_PREMIUM_VIETNAM_GOLDTIME_PLUS',1,0
EXEC SRO_VT_SHARD.dbo._ADD_ITEM_EXTERN @CharName_SpecialPack,'ITEM_COS_P_CAT_SCROLL',1,0

IF(@CharType_SpecialPack BETWEEN 1907 AND 1919) -->MALE CHINESE
BEGIN
EXEC SRO_VT_SHARD.dbo._ADD_ITEM_EXTERN @CharName_SpecialPack,'ITEM_MALL_AVATAR_M_NASRUN',1,0
END
ELSE IF(@CharType_SpecialPack BETWEEN 1920 AND 1932) -->FEMALE CHINESE
BEGIN
EXEC SRO_VT_SHARD.dbo._ADD_ITEM_EXTERN @CharName_SpecialPack,'ITEM_MALL_AVATAR_W_NASRUN',1,0
END
ELSE IF(@CharType_SpecialPack BETWEEN 14873 AND 14887) -->MALE EUROPEAN
BEGIN
EXEC SRO_VT_SHARD.dbo._ADD_ITEM_EXTERN @CharName_SpecialPack,'ITEM_MALL_AVATAR_M_NASRUN',1,0
END
ELSE IF(@CharType_SpecialPack BETWEEN 14888 AND 14900) -->FEMALE EUROPEAN
BEGIN
EXEC SRO_VT_SHARD.dbo._ADD_ITEM_EXTERN @CharName_SpecialPack,'ITEM_MALL_AVATAR_W_NASRUN',1,0
END
END
BEGIN
IF @Operation = '41' and (@ItemRefID = 42548) -- Starter Pack Bronz RefItemID
EXEC SRO_VT_SHARD.._StarterPackBronz @CharID --1.Prosedürü hangi tabloya okuttuysanız onun adını yazın.
END
2. prosedürü çoğaltmak ve birden çok starter pack eklemek isterseniz 2. prosedür yerine altta ki prosedürü kullanabilirsiniz.
BEGIN
IF @Operation = '41' and (@ItemRefID = 42548) -- Starter Pack Bronz RefItemID
EXEC SRO_VT_SHARD.._StarterPackBronz @CharID --1.Prosedürü hangi tabloya okuttuysanız onun adını yazın.
END

BEGIN
IF @Operation = '41' and (@ItemRefID = 42549) -- Starter Pack Silver RefItemID
EXEC SRO_VT_SHARD.._StarterPackSilver @CharID --1.Prosedürü hangi tabloya okuttuysanız onun adını yazın.
END

BEGIN
IF @Operation = '41' and (@ItemRefID = 42550) -- Starter Pack Gold RefItemID
EXEC SRO_VT_SHARD.._StarterPackGold @CharID --1.Prosedürü hangi tabloya okuttuysanız onun adını yazın.
END

BEGIN
IF @Operation = '41' and (@ItemRefID = 42551) -- Starter Pack King RefItemID
EXEC SRO_VT_SHARD.._StarterPackKing @CharID --1.Prosedürü hangi tabloya okuttuysanız onun adını yazın.
END
 
Son düzenleme:
Fazla exec olunca bir süre sonra itemleri vermemezlik yapıyor.
Onu da denedim ama bu şekilde bir sorun oluşuyor işte...

Akşam eve geçince kullandığım prosedürü paylaşıcam, bende ki prosedür de tek bir exec var ve tabloda ki tüm itemleri veriyor daha sağlıklı oluyor bu şekilde.
Bu prosedürde aldığınız hata nedir? Normalde sorun yaşatmıyor yada kendi prosedürünüzü paylaşırsanız onun üzerinden bir düzenleme yapalım. :)
 
Oyla 0
Bu prosedürde aldığınız hata nedir? Normalde sorun yaşatmıyor yada kendi prosedürünüzü paylaşırsanız onun üzerinden bir düzenleme yapalım. :)

Bu prosedür de execute yapınca herhangi bir hata almıyorum, prosedür de sorun yok.
Lakin exec'ler fazlalaştıkça sarpa sarıyor, bazı itemleri vermiyor ya da bir çok itemi vermemezlik yapıyor.
Her zaman bu sorun oluşmuyor ama ara ara sorun aktif oluyor.
Ve bu prosedür de exec'leri manuel giriyoruz, ben tabloda ki itemleri verdirmenin peşindeyim.
Yani tek exec ile tabloda ki tüm itemleri verdirebilirsek bu prosedüre bir sorun yaşatmaz.
Ama exec artışı yaşatırsak, sorun oluşturuyor.
 
Oyla 0
Bu prosedür de execute yapınca herhangi bir hata almıyorum, prosedür de sorun yok.
Lakin exec'ler fazlalaştıkça sarpa sarıyor, bazı itemleri vermiyor ya da bir çok itemi vermemezlik yapıyor.
Her zaman bu sorun oluşmuyor ama ara ara sorun aktif oluyor.
Ve bu prosedür de exec'leri manuel giriyoruz, ben tabloda ki itemleri verdirmenin peşindeyim.
Yani tek exec ile tabloda ki tüm itemleri verdirebilirsek bu prosedüre bir sorun yaşatmaz.
Ama exec artışı yaşatırsak, sorun oluşturuyor.
Aynen bu durumu biliyorum, prosedürü yollarsanız eğer ona göre bir çözüm üretmeye çalışırız. :)
 
Oyla 0
Aynen bu durumu biliyorum, prosedürü yollarsanız eğer ona göre bir çözüm üretmeye çalışırız. :)

Şu anda kullandığım prosedür spoilerde ekli, bu şekilde kullanınca tabloya ne kadar item eklersem ekliyeyim sorunsuz şekilde hepsini çantaya veriyor.
IF (@Operation = 41 AND @ItemRefID = 42548) -- STARTER PACK BRONZE
begin
declare @RefObjID int
declare @charname varchar(64)
Select @charname=(select CharName16 from [SRO_VT_SHARD].[dbo].[_Char] where CharID = @charID);
declare @GiftTh varchar(129)
declare items cursor for select GiftItems from [SRO_VT_SHARD].[dbo].[_MinikBirKulStarterPackBronze] ORDER BY NEWID()
open items
fetch next from items into @GiftTh
while(@@FETCH_STATUS=0)
begin
exec SRO_VT_SHARD.dbo._ADD_ITEM_EXTERN @charname, @GiftTh, 1, 0
fetch next from items into @GiftTh
end
close items
deallocate items
end

Fakat devil için if/else eklediğim zaman (senin verdiğin prosedür) çar teleportta olduğu gibi kalıyor.
Buna ek olarak id/pw yazıp tekrar çara girdiğin zaman start yapamıyorsun, o şekilde kalıyor, GS herhangi bir hata vermiyor ve GS'yi tekrar yeniden başlatana kadar çara giriş yapamıyorsun. (Inventory tamamen temizlesen bile.)

IF (@Operation = 41 AND @ItemRefID = 42548) -- STARTER PACK BRONZE
begin
declare @RefObjID int
declare @charname varchar(64)
Select @charname=(select CharName16 from [SRO_VT_SHARD].[dbo].[_Char] where CharID = @charID);
declare @GiftTh varchar(129)
declare items cursor for select GiftItems from [SRO_VT_SHARD].[dbo].[_MinikBirKulStarterPackBronze] ORDER BY NEWID()
open items
fetch next from items into @GiftTh
while(@@FETCH_STATUS=0)
begin
exec SRO_VT_SHARD.dbo._ADD_ITEM_EXTERN @charname, @GiftTh, 1, 0

if(@RefObjID between 1907 and 1919)
begin
exec SRO_VT_SHARD.dbo._ADD_ITEM_EXTERN @charname,'ITEM_MALL_AVATAR_M_NASRUN',1,0
end
else if(@RefObjID between 1920 and 1932)
begin
exec SRO_VT_SHARD.dbo._ADD_ITEM_EXTERN @charname,'ITEM_MALL_AVATAR_W_NASRUN',1,0
end

fetch next from items into @GiftTh
end
close items
deallocate items
end
 
Oyla 0
Aşağıda yazılı olan prosedürü kullanınca çar teleportta kalıyor, inventory temizleyince start yapılmıyor ve GS'nin verdiği hata ekte.

if(@Operation = '41' and @ItemRefID = 42548) --starter pack
begin
declare @RefObjID int
declare @charname varchar(64)
Set @charname = (Select CharName16 from SRO_VT_SHARD.dbo._Char where CharID = @CharID);
Select @RefObjID=RefObjID from SRO_VT_SHARD.dbo._Char where CharID = @CharID
exec SRO_VT_SHARD.dbo._ADD_ITEM_EXTERN @charname,'ITEM_MALL_PREMIUM_GLOBAL_GOLDTIME_PLUS',1,0
if(@RefObjID between 1907 and 1919)
begin
exec SRO_VT_SHARD.dbo._ADD_ITEM_EXTERN @charname,'ITEM_MALL_AVATAR_M_AMALRUN',1,0
end
else if(@RefObjID between 1920 and 1932)
begin
exec SRO_VT_SHARD.dbo._ADD_ITEM_EXTERN @charname,'ITEM_MALL_AVATAR_W_AMALRUN',1,0
end
end

Ads-z.png
 
Oyla 0
Kafayı yicem, konuda paylaştığım son prosedürü kullandıktan sonra çara hiç bir şekilde giriş yapamıyorum.
Shard temizleyip sonra tekrar denicem.
 
Oyla 0
Geri
Üst Alt