vsro

İçeriğine Rate Ayarlayarak Gift Box Yapma

Sapphire

New member
Moderator
8 Nis 2020
19
15
3
Merhaba Değerli Oyunbil Ailesi;

Yepyeni bir paylaşım ile Sizlerleyimm..

İçeriğine belirli % ' ler ile ayarladığımız rateyi belirlediğimiz iteme göre kendi içinde tablodan random seçip bunu karaktere aktarıyor.
Bu box'un içinden çıkacak itemlerin belirli bir rate ile çıkmasını istiyorsanız o zaman ne yapmanız gerekiyor?

Öncelikle tablomuzu oluşturuyoruz..
Kod:
USE [SRO_VT_LOG]
GO


/****** Object: Table [dbo].[__GiftBoxGifts] Script Date: 18.04.2020 01:53:13 ******/
SET ANSI_NULLS ON
GO


SET QUOTED_IDENTIFIER ON
GO


SET ANSI_PADDING ON
GO


CREATE TABLE [dbo].[__GiftBoxGifts](
[CodeName128] [varchar](129) NOT NULL,
[Count] [tinyint] NOT NULL CONSTRAINT [DF___GiftBoxGifts_Count] DEFAULT ((1)),
[Harder1to100] [tinyint] NOT NULL CONSTRAINT [DF___GiftBoxGifts_Harder1to100] DEFAULT ((50)),
[ComputedLucky] [decimal](5, 4) NULL CONSTRAINT [DF___GiftBoxGifts_ComputedLucky] DEFAULT ((0)),
CONSTRAINT [PK___GiftBoxGifts] PRIMARY KEY CLUSTERED
(
[CodeName128] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


GO


SET ANSI_PADDING OFF
GO
Oluşturduğumuz bu tablomuzda daha sonra çoğalmak istediğimiz zaman tüm kodlarda (GiftBoxGifts) kısmını değiştirmemiz yeterlidir.


Trigger

Oluşturduğumuz verileri okuyabilmesi için tetikleyicimizi oluşturuyoruz.

Kod:
USE [SRO_VT_LOG]
GO
/****** Object: Trigger [dbo].[Trg__GiftBoxGifts] Script Date: 18.04.2020 01:53:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE trigger [dbo].[Trg__GiftBoxGifts]
on [dbo].[__GiftBoxGifts]
after insert, update, delete
as


declare curs cursor LOCAL STATIC READ_ONLY FORWARD_ONLY
for select CodeName128,convert(float,101-Harder1to100)/100, (select count(*) from __GiftBoxGifts where Harder1to100 <= A.Harder1to100) from __GiftBoxGifts A where Harder1to100 <= 100 order by Harder1to100 desc


declare @codename128 varchar(129), @harder float, @ItemCount float
update __GiftBoxGifts set ComputedLucky = 0


open curs
fetch next from curs into @codename128, @harder, @ItemCount
while @@FETCH_STATUS = 0
begin
update __GiftBoxGifts set ComputedLucky = ((convert(float,1)/nullif(@ItemCount,0))*nullif @harder,0)) where CodeName128 = @codename128
fetch next from curs into @codename128, @harder, @ItemCount
end
close curs
deallocate curs


update __GiftBoxGifts set ComputedLucky = ComputedLucky / (select sum(ComputedLucky) from __GiftBoxGifts)

_AddLogItem :

Herhangi bir return scroll kullanarak bağlıyabilirsiniz.


Kod:
if (@ItemRefID = 42003) -- Gift Scroll
begin
declare @GiftCodeName varchar(129), @GiftCount tinyint
select top 1 @GiftCodeName = CodeName128, @GiftCount = [Count] from __GiftBoxGifts where Harder1to100 <= CRYPT_GEN_RANDOM(1) % 100 +1 order by newid()
if (@GiftCodeName is null)
set @GiveBack = 1
else
exec SRO_VT_SHARD.._ADD_ITEM_EXTERN @charname, @GiftCodeName, @GiftCount, 0
end
--========
NOT : Harder1to100 : 1/100 arasında belirli bir ratio ile size itemi veriyor.
Count : İtem Adedi
ComputedLucky :
İtemi Çıkma Olasığıdır.


Bir sonraki paylaşımda görüşmek dileğiyle herkese iyi forumlar dilerim...

 
Üst