Offline
Merhaba daha önceki konularımızda milli piyango sistemini sade olarak paylaşmıştık, sistem sadece sayıyı tutturan kişiyi seçip hediyesini veriyordu.
Sistem sayıyı tutturan şanslı kişiyi bulup hediyesini verdikten sonra amorti açığı yaratmamak için tablodan siliyor.
Amortisi olan diğer oyuncular da hediyesi verildikten sonra aynı şekilde amorti açığı yaratmamak için tablodan siliniyor.
Şanslı numaranın tutulacağı tablo.
Şanslı kişinin seçileceği prosedürü yapılandıralım.
Çekiliş yapılacak prosedürü yapılandıralım.
_AddLogItem 'a eklenecek.
Amorti kontrolü yapılacak prosedürü yazalım.
Amorti için parşömen kağıdı _RefObjCommon ve _RefObjItem 'a eklenecek.
Sistem sayıyı tutturan şanslı kişiyi bulup hediyesini verdikten sonra amorti açığı yaratmamak için tablodan siliyor.
Amortisi olan diğer oyuncular da hediyesi verildikten sonra aynı şekilde amorti açığı yaratmamak için tablodan siliniyor.
Kod:
USE [SRO_VT_LOG]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[_BiletNo]( [ID] [int] IDENTITY(1,1) NOT NULL, [CharID] [int] NOT NULL, [Charname] [varchar](16) NOT NULL, [BiletNo] [nvarchar](19) NOT NULL, [SonRakam_3] [nvarchar](20) NULL, [SonRakam_2] [nvarchar](20) NULL, [SonRakam_1] [nvarchar](20) NULL,
CONSTRAINT [PK__BiletNo] PRIMARY KEY CLUSTERED
( [ID] 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
Şanslı numaranın tutulacağı tablo.
Kod:
USE [SRO_VT_LOG]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Piyango_No]( [Numara] [varchar](32) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
Şanslı kişinin seçileceği prosedürü yapılandıralım.
Kod:
USE [SRO_VT_LOG]
GO
-- =============================================
-- Author: PurePower
-- Developer: risesun97
-- Development Date: 01.01.2021
-- Description: Milli Piyango Sistemi++(Amortili)
-- =============================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[MeloPiyango]
@CharID int
as
declare @MeloCname varchar(64) = (Select Charname16 from sro_vt_shard.._char where charID=@CharID)
declare @MeloNo1 tinyint =(SELECT TOP 1 Numara FROM _MeloBiletNo ORDER BY NEWID())
declare @MeloNo2 tinyint =(SELECT TOP 1 Numara FROM _MeloBiletNo ORDER BY NEWID())
declare @MeloNo3 tinyint =(SELECT TOP 1 Numara FROM _MeloBiletNo ORDER BY NEWID())
declare @MeloNo4 tinyint =(SELECT TOP 1 Numara FROM _MeloBiletNo ORDER BY NEWID())
declare @MeloNo5 tinyint =(SELECT TOP 1 Numara FROM _MeloBiletNo ORDER BY NEWID())
declare @MeloNo6 tinyint =(SELECT TOP 1 Numara FROM _MeloBiletNo ORDER BY NEWID())
declare @MeloNo7 tinyint =(SELECT TOP 1 Numara FROM _MeloBiletNo ORDER BY NEWID())
declare @MeloNo8 tinyint =(SELECT TOP 1 Numara FROM _MeloBiletNo ORDER BY NEWID())
declare @MeloNo9 tinyint =(SELECT TOP 1 Numara FROM _MeloBiletNo ORDER BY NEWID())
declare @FullAmk nvarchar(max)
IF NOT EXISTS (Select BiletNo From _BiletNo where BiletNo=@FullAmk)
BEGIN
set @FullAmk=CAST(@MeloNo1 AS NVARCHAR)+CAST(@MeloNo2 AS NVARCHAR)+CAST(@MeloNo3 AS NVARCHAR)+'-'+
CAST(@MeloNo4 AS NVARCHAR)+CAST(@MeloNo5 AS NVARCHAR)+CAST(@MeloNo6 AS NVARCHAR)+'-'+
CAST(@MeloNo7 AS NVARCHAR)+CAST(@MeloNo8 AS NVARCHAR)+CAST(@MeloNo9 AS NVARCHAR)
END
ELSE
BEGIN
SET @MeloNo1=(SELECT TOP 1 Numara FROM _MeloBiletNo ORDER BY NEWID())
SET @MeloNo2=(SELECT TOP 1 Numara FROM _MeloBiletNo ORDER BY NEWID())
SET @MeloNo3=(SELECT TOP 1 Numara FROM _MeloBiletNo ORDER BY NEWID())
SET @MeloNo4=(SELECT TOP 1 Numara FROM _MeloBiletNo ORDER BY NEWID())
SET @MeloNo5=(SELECT TOP 1 Numara FROM _MeloBiletNo ORDER BY NEWID())
SET @MeloNo6=(SELECT TOP 1 Numara FROM _MeloBiletNo ORDER BY NEWID())
SET @MeloNo7=(SELECT TOP 1 Numara FROM _MeloBiletNo ORDER BY NEWID())
SET @MeloNo8=(SELECT TOP 1 Numara FROM _MeloBiletNo ORDER BY NEWID())
SET @MeloNo9=(SELECT TOP 1 Numara FROM _MeloBiletNo ORDER BY NEWID())
set @FullAmk=CAST(@MeloNo1 AS NVARCHAR)+CAST(@MeloNo2 AS NVARCHAR)+CAST(@MeloNo3 AS NVARCHAR)+'-'+
CAST(@MeloNo4 AS NVARCHAR)+CAST(@MeloNo5 AS NVARCHAR)+CAST(@MeloNo6 AS NVARCHAR)+'-'+
CAST(@MeloNo7 AS NVARCHAR)+CAST(@MeloNo8 AS NVARCHAR)+CAST(@MeloNo9 AS NVARCHAR)
END insert sro_vt_log.._BiletNo (CharID,CharName,BiletNo,SonRakam_3,SonRakam_2,SonRakam_1) Values (@CharID,@MeloCname,@FullAmk, CAST(@MeloNo7 AS NVARCHAR)+CAST(@MeloNo8 AS NVARCHAR)+CAST(@MeloNo9 AS NVARCHAR), CAST(@MeloNo8 AS NVARCHAR)+CAST(@MeloNo9 AS NVARCHAR), CAST(@MeloNo9 AS NVARCHAR) ) INSERT INTO iLegend_Tool (Service,Type,Target,Message,Date) VALUES (1,'Private',@MeloCname,'MilliPiyango Numaranız ['+@FullAmk+']',GETDATE())
Çekiliş yapılacak prosedürü yapılandıralım.
Kod:
USE [SRO_VT_LOG]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[CekilisYap]
AS
DECLARE @SansliNo varchar(20)
DECLARE @SansliIsim varchar(16)
SELECT TOP 1 @SansliNo=BiletNo FROM _BiletNo ORDER BY NEWID()--Rastgele Seç
SELECT @SansliIsim=CharName FROM _BiletNo WHERE BiletNo=@SansliNo--No İsim Eşleştir
EXEC SRO_VT_SHARD.dbo._ADD_ITEM_EXTERN @SansliIsim,'İtemKodu',1,0 -- 1Adettir 0 İtem +Sıdır
INSERT INTO Piyango_No VALUES (@SansliNo)--Tabloya Ekle
INSERT INTO iLegend_Tool (Service,Type,Message,Date) VALUES (1,'Notice','Şanslı isim ['+@SansliNo+'] numarası ile ['+@SansliIsim+'] `dir',GETDATE())--Bilgi
INSERT INTO iLegend_Tool (Service,Type,Message,Date) VALUES (1,'Notice','Piyango numarası ['+@SansliNo+'] olarak belirlenmiştir.',GETDATE())
INSERT INTO iLegend_Tool (Service,Type,Message,Date) VALUES (1,'Notice','Lütfen amorti kontrolü yapın.',GETDATE())
DELETE FROM _BiletNo WHERE BiletNo=@SansliNo--Talihli Kişiyi Tablodan Sil
_AddLogItem 'a eklenecek.
Kod:
DECLARE @CharName_P VARCHAR(16)=(SELECT CharName16 FROM [SRO_VT_SHARD].[dbo].[_Char] WITH (NOLOCK) WHERE CharID=@CharID) IF (@Operation=41 AND @ItemRefID = 42079) BEGIN EXECUTE SRO_VT_LOG..MeloPiyango @CharID EXECUTE SRO_VT_SHARD.dbo._ADD_ITEM_EXTERN @CharName_P,ITEM_MALL_AMORTI,1,0 END IF (@Operation=41 AND @ItemRefID = 42080) BEGIN IF NOT EXISTS (SELECT Numara from Piyango_No) BEGIN INSERT INTO iLegend_Tool (Service,Type,Target,Message,Date) VALUES (1,'Private',@CharName_P,'Çekiliş henüz yapılmadı',GETDATE()) EXECUTE SRO_VT_SHARD.dbo._ADD_ITEM_EXTERN @CharName_P,ITEM_MALL_AMORTI,1,0 END ELSE BEGIN EXECUTE dbo.Amorti_Kontrol @CharID END END
Amorti kontrolü yapılacak prosedürü yazalım.
Kod:
USE [SRO_VT_LOG]
GO
-- =============================================
-- Author: risesun97
-- Create date: 01.01.2021
-- Description: Milli Piyango Sistemi++(Amortili)
-- =============================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[Amorti_Kontrol]
@CharID INT
AS
DECLARE @CharName VARCHAR(16)=(SELECT CharName16 FROM SRO_VT_SHARD.._Char WHERE CharID=@CharID)
--Üç Sayılı Amorti
DECLARE @piy3 VARCHAR(12)=(SELECT RIGHT(Numara,3) FROM Piyango_No)
DECLARE @sr3 VARCHAR(12)=(SELECT SonRakam_3 FROM _BiletNo WHERE CharID=@CharID) IF (@sr3=@piy3) BEGIN EXECUTE SRO_VT_SHARD.dbo._ADD_ITEM_EXTERN @CharName,ITEM_ETC_ALL_SPOTION_01,50,0 DELETE FROM _BiletNo WHERE CharID=@CharID RETURN @CharID END ELSE BEGIN INSERT INTO iLegend_Tool (Service,Type,Target,Message,Date) VALUES (1,'Private',@CharName,'Üç sayılı amortiniz yok.',GETDATE()) END
--İki Sayılı Amorti
DECLARE @piy2 VARCHAR(12)=(SELECT RIGHT(Numara,2) FROM Piyango_No)
DECLARE @sr2 VARCHAR(12)=(SELECT SonRakam_2 FROM _BiletNo WHERE CharID=@CharID) IF (@sr2=@piy2) BEGIN EXECUTE SRO_VT_SHARD.dbo._ADD_ITEM_EXTERN @CharName,ITEM_ETC_ALL_SPOTION_01,20,0 DELETE FROM _BiletNo WHERE CharID=@CharID RETURN @CharID END ELSE BEGIN INSERT INTO iLegend_Tool (Service,Type,Target,Message,Date) VALUES (1,'Private',@CharName,'İki sayılı amortiniz yok.',GETDATE()) END
--Tek Sayılı Amorti
DECLARE @piy1 VARCHAR(12)=(SELECT RIGHT(Numara,1) FROM Piyango_No)
DECLARE @sr1 VARCHAR(12)=(SELECT SonRakam_1 FROM _BiletNo WHERE CharID=@CharID) IF (@sr1=@piy1) BEGIN EXECUTE SRO_VT_SHARD.dbo._ADD_ITEM_EXTERN @CharName,ITEM_ETC_ALL_SPOTION_01,10,0 DELETE FROM _BiletNo WHERE CharID=@CharID END ELSE BEGIN INSERT INTO iLegend_Tool (Service,Type,Target,Message,Date) VALUES (1,'Private',@CharName,'Tek sayılı amortiniz yok.',GETDATE()) END
Amorti için parşömen kağıdı _RefObjCommon ve _RefObjItem 'a eklenecek.
Kod:
_RefObjCommon
1 41798 ITEM_MALL_AMORTI ????? xxx SN_ITEM_MALL_AMORTI SN_ITEM_MALL_AMORTI_TT_DESC 1 0 3 3 3 1 180000 3 0 1 1 1 255 0 1 0 0 1 0 0 0 0 0 0 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 0 0 0 0 0 100 0 0 0 xxx item\etc\drop_mall_scroll.bsr item\etc\mall_return_scroll.ddj xxx xxx 21333
_RefObjItem
21333 50 2 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 ???? 1 ?????? -1 RESURRECT -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1...
İçeriğin tamamını görüntülemek için lütfen giriş yapınız. Giriş yap veya üye ol.