Kayıt Ol
[-]
monetization_on Reklam Alanı
Reklam vermek istiyorum?

[SQL] Çevrimiçi zamana dayalı oto ücretsiz silk verme (Sistem)


view_headline Konu
15.11.2016, Saat: 11:24
#1
Wasde
Wasde
Konuları:
5
Yorumları:
72
Kayıt Tarihi:
23.10.2016
Rep Puanı:
2
verified_user Usta Üye
[SQL] Çevrimiçi zamana dayalı oto ücretsiz silk verme (Sistem)
Temelde otomatik olarak çevrimiçi bir süre için oyuncu ödülleri. Birkaç diğer bilgileri, başka bir tabloya tüm online karakter giriş olacak. Ayrıca 60 dakika + online karakter varsayılan 1  Saat ekleyeceğiz.
Miktarı da sağ taraftaki _OnlineOffline tablosunda belirtilmiştir kazanmak Saat başına - bir karakter onun çevrimiçi süreyi aştığında 1 Hafta, otomatik olarak 2  Saat (1 Ay + = 3 Saat) alırsınız.
Daha da önemlisi rastgele oyuncu zaman 5 belirli bir miktarda kazanacaktır hangi rastgele bir zaman elde edeceksiniz.

_OnlineOffline
a35689sq.jpg

_RandomPlayer & Tarih
6zl68ssl.jpg

tbl_Silk / Saat-Yapılandırma
tyx9ovwv.jpg


Kod:
Sipariş (o ilk diğeri vb yürütmek ..):

tbl_OnlineOffline
->
tbl_RandomPlayer ve Tarih
->
sp_GetRandomTime
->
sp_RandomPlayerID
->
sp_extraSilk
->
sp_GetSilkperHour
->
sp_AddLogChar


tbl = Tablo
sp = saklı yordam

SRO_VT_SHARD -> Shard DB
SRO_VT_ACCOUNT -> Hesap DB
SRO_VT_SHARDLOG -> Log DB

SQL Sorgular yürütülecek ..

Kod:
USE SRO_VT_SHARDLOG

BEGIN TRY
   DROP TABLE [_Silk/Hour-Config]
END TRY
BEGIN CATCH END CATCH;

CREATE TABLE [_Silk/Hour-Config] (
   [Desc] varchar(max) NULL,
   [DefaultSilk] int NOT NULL,
   [Step1Silk] int NOT NULL,
   [Step2Silk] int NOT NULL,
   [Step3Silk] int NOT NULL,
   [RewardSilk] int NOT NULL,
   [WEEKDAYS] varchar(15) NULL
   
   CHECK (
           [WEEKDAYS] like 'Monday' OR
           [WEEKDAYS] like 'Tuesday' OR
           [WEEKDAYS] like 'Wednesday' OR
           [WEEKDAYS] like 'Thursday' OR
           [WEEKDAYS] like 'Friday' OR
           [WEEKDAYS] like 'Saturday' OR
           [WEEKDAYS] like 'Sunday'
           )
);

INSERT INTO [_Silk/Hour-Config] SELECT 'Rates', 1, 2, 3, 4, 5, NULL
INSERT INTO [_Silk/Hour-Config] SELECT 'Requirements', 0, (60*24*7), (60*24*30), (60*24*365), 0, NULL
INSERT INTO [_Silk/Hour-Config] SELECT 'allowed Day #1', 0, 0, 0, 0, 0, 'Monday'
INSERT INTO [_Silk/Hour-Config] SELECT 'allowed Day #2', 0, 0, 0, 0, 0, 'Tuesday'
INSERT INTO [_Silk/Hour-Config] SELECT 'allowed Day #3', 0, 0, 0, 0, 0, 'Wednesday'
INSERT INTO [_Silk/Hour-Config] SELECT 'allowed Day #4', 0, 0, 0, 0, 0, 'Thursday'
INSERT INTO [_Silk/Hour-Config] SELECT 'allowed Day #5', 0, 0, 0, 0, 0, 'Friday'
INSERT INTO [_Silk/Hour-Config] SELECT 'allowed Day #6', 0, 0, 0, 0, 0, 'Saturday'
INSERT INTO [_Silk/Hour-Config] SELECT 'allowed Day #7', 0, 0, 0, 0, 0, 'Sunday'  



Kod:
USE SRO_VT_SHARDLOG

BEGIN TRY
   DROP TABLE _OnlineOffline
END TRY
BEGIN CATCH END CATCH;

CREATE TABLE _OnlineOffline
(
[No.] int PRIMARY KEY IDENTITY (1,1),
[CharID] int NOT NULL,
[Charname] varchar(64) NOT NULL,
[Status] varchar(20) NOT NULL,
[Date] datetime NOT NULL,
[Minutes] bigint,
[tMinutes] bigint,
[eSilk] int,
[mOnline] varchar(max) NULL,
[Silk/Hour] int NOT NULL,
[stillOnline@] datetime NULL
);

INSERT INTO _OnlineOffline
   SELECT CharID, CharName16, 'OnHold', GETDATE(), 0, 0, 0, '0 minute(s)', (SELECT DefaultSilk FROM [_Silk/Hour-Config] WHERE [Desc] like 'Rates'), NULL
   FROM SRO_VT_SHARD.dbo._Char ORDER BY CharID  

Kod:
USE SRO_VT_SHARDLOG

BEGIN TRY
   DROP TABLE [_RandomPlayer&Date]
END TRY
BEGIN CATCH END CATCH;

CREATE TABLE [_RandomPlayer&Date] (
   [NextDate] datetime DEFAULT NULL,
   [RefreshedDate] datetime,
   [CharID] int,
   [Charname] varchar(64),
   [Desc] varchar(20) NULL
);

INSERT INTO [_RandomPlayer&Date] SELECT NULL,NULL,NULL,NULL,'Current'
INSERT INTO [_RandomPlayer&Date] SELECT NULL,NULL,NULL,NULL,'Next'  

Kod:
USE SRO_VT_SHARDLOG

BEGIN TRY
   DROP TABLE [_RandomPlayer&Date]
END TRY
BEGIN CATCH END CATCH;

CREATE TABLE [_RandomPlayer&Date] (
   [NextDate] datetime DEFAULT NULL,
   [RefreshedDate] datetime,
   [CharID] int,
   [Charname] varchar(64),
   [Desc] varchar(20) NULL
);

INSERT INTO [_RandomPlayer&Date] SELECT NULL,NULL,NULL,NULL,'Current'
INSERT INTO [_RandomPlayer&Date] SELECT NULL,NULL,NULL,NULL,'Next'  

Kod:
USE [SRO_VT_SHARD]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[_RandomPlayerID] /*by Caipi*/

as

Declare @Random int = 1, @Bool bit = 0;

WHILE (@Bool = 0)
   BEGIN
       SET @Random = ROUND(RAND()*(SELECT MAX(CharID) FROM SRO_VT_SHARD.dbo._Char),0)
       IF exists (SELECT CharID FROM SRO_VT_SHARD.dbo._Char WHERE CharID = @Random)
           BEGIN
               SET @Bool = 1 /*true*/
           END
   END
   
return @Random  

Kod:
USE [SRO_VT_ACCOUNT]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[_extraSilk] /*by Caipi*/

   @CharID int,
   @Silk int

as

Declare @JID int, @Multiplier int = (SELECT [Silk/Hour] FROM SRO_VT_SHARDLOG.dbo._OnlineOffline WHERE CharID = @CharID);

SET @JID = (
           SELECT usert.UserJID FROM SRO_VT_SHARD.dbo._User as usert
           JOIN SRO_VT_SHARD.dbo._Char as chart on usert.CharID = chart.CharID
           WHERE chart.CharID = @CharID
           );
           
   IF not exists (SELECT JID FROM SK_Silk WHERE JID = @JID)
       BEGIN
           INSERT INTO SK_Silk SELECT @JID, 0, 0, 0
       END
           
   UPDATE SK_Silk
   SET silk_own = silk_own + (@Silk*@Multiplier)
   WHERE JID = @JID  

Kod:
USE [USE SRO_VT_SHARDLOG]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[_GetSilkperHour] /*by Caipi*/

@CharID int

as

Declare @totalMinutes bigint = (SELECT tMinutes FROM _OnlineOffline WHERE CharID = @CharID), @Silkoutput int;

/*Calculating the Silk/Hour-Amount related to the Online Time*/
SET @Silkoutput =
CASE
   WHEN @totalMinutes >= (SELECT [Step3Silk] FROM [_Silk/Hour-Config] WHERE [Desc] like 'Requirements')
       THEN (SELECT [Step3Silk] FROM [_Silk/Hour-Config] WHERE [Desc] like 'Rates')
   WHEN @totalMinutes >= (SELECT [Step2Silk] FROM [_Silk/Hour-Config] WHERE [Desc] like 'Requirements')
       THEN (SELECT [Step2Silk] FROM [_Silk/Hour-Config] WHERE [Desc] like 'Rates')
   WHEN @totalMinutes >= (SELECT [Step1Silk] FROM [_Silk/Hour-Config] WHERE [Desc] like 'Requirements')
       THEN (SELECT [Step1Silk] FROM [_Silk/Hour-Config] WHERE [Desc] like 'Rates')
   ELSE (SELECT DefaultSilk FROM [_Silk/Hour-Config] WHERE [Desc] like 'Rates')
END

RETURN @Silkoutput  

Kod:
USE [SRO_VT_SHARDLOG]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER   procedure [dbo].[_AddLogChar]
@CharID        int,
@EventID        tinyint,
@Data1        int,
@Data2        int,
@strPos        varchar(64),
@Desc        varchar(128)
as

IF    ( -- Skips over the unnecessary Records
       (@EventID != 11) AND
       (@EventID NOT BETWEEN 21 AND 27) AND
       (@EventID NOT BETWEEN 200 AND 202) AND
       (@EventID NOT BETWEEN 204 AND 206) AND
       (@EventID != 210) AND (@EventID != 214) AND (@EventID != 244)
   )BEGIN

   declare @len_pos     int
   declare @len_desc    int
   set @len_pos = len(@strPos)
   set @len_desc = len(@Desc)
   if (@len_pos > 0 and @len_desc > 0)
   begin    
       insert _LogEventChar values(@CharID, GetDate(), @EventID, @Data1, @Data2, @strPos, @Desc)    
   end
   else if (@len_pos > 0 and @len_desc = 0)
   begin    
       insert _LogEventChar (CharID, EventTime, EventID, Data1, Data2, EventPos) values(@CharID, GetDate(), @EventID, @Data1, @Data2, @strPos)
   end
   else if (@len_pos = 0 and @len_desc > 0)
   begin    
       insert _LogEventChar (CharID, EventTime, EventID, Data1, Data2, strDesc) values(@CharID, GetDate(), @EventID, @Data1, @Data2, @Desc)
   end
   else
   begin
       insert _LogEventChar (CharID, EventTime, EventID, Data1, Data2) values(@CharID, GetDate(), @EventID, @Data1, @Data2)
   end
   
/*Extension*/--> by Caipi

IF not exists (SELECT CharID FROM _OnlineOffline WHERE CharID = @CharID)
   BEGIN
       INSERT INTO _OnlineOffline (CharID, Charname, [Status], [Date], [Minutes], [tMinutes], eSilk, mOnline, [Silk/Hour], [stillOnline@])
       VALUES (
               @CharID,
               (SELECT CharName16 FROM SRO_VT_SHARD.dbo._Char WHERE CharID = @CharID),
               'OnHold',
               GETDATE(),
               0,0,0,
               NULL,(SELECT DefaultSilk FROM [_Silk/Hour-Config] WHERE [Desc] like 'Rates'),
               NULL
               );
   END

IF (@EventID = 4 OR @EventID = 6)
   BEGIN

   IF (@EventID = 6 AND ((SELECT [Status] FROM _OnlineOffline WHERE CharID = @CharID) like 'OnHold'))
       BEGIN
           UPDATE _OnlineOffline
           SET [Status] = 'Offline'
           WHERE CharID = @CharID
       END
       
   IF (@EventID = 6 AND ((SELECT [Status] FROM _OnlineOffline WHERE CharID = @CharID) like 'Online'))
       BEGIN
           UPDATE _OnlineOffline
           SET
               [Status] = 'Offline',
               [Minutes] = [Minutes] + (DATEDIFF(MINUTE,[stillOnline@],GETDATE())),
               [tMinutes] = [tMinutes] + (DATEDIFF(MINUTE,[stillOnline@],GETDATE())),
               [mOnline] = NULL,
               [stillOnline@] = NULL
           WHERE CharID = @CharID    
       END
       
   IF (@EventID = 4)
       BEGIN
           UPDATE _OnlineOffline
           SET
               [Status] = 'Online',
               [Date] = GETDATE(),
               [stillOnline@] = GETDATE()
           WHERE CharID = @CharID
       END
   END

   
UPDATE _OnlineOffline
SET
   [mOnline] = CAST((DATEDIFF(MINUTE,[Date],GETDATE()))as varchar(max)) + ' minute(s) Online',
   [Minutes] = [Minutes] + (DATEDIFF(MINUTE,[stillOnline@],GETDATE())),
   [tMinutes] = [tMinutes] + (DATEDIFF(MINUTE,[stillOnline@],GETDATE())),
   [stillOnline@] = GETDATE()
WHERE [Status] like 'Online'

/*Silk/Hour basic calc*/
IF ((SELECT [tMinutes] from _OnlineOffline WHERE CharID = @CharID) >= (SELECT [Step1Silk] FROM [_Silk/Hour-Config] WHERE [Desc] like 'Requirements'))
   BEGIN
       Declare @sph int;
       exec @sph = [_GetSilkperHour] @CharID
       UPDATE _OnlineOffline SET [Silk/Hour] = @sph WHERE CharID = @CharID
   END
/*!Silk/Hour basic calc*/

IF (((SELECT NextDate FROM [_RandomPlayer&Date] WHERE [Desc] like 'Next') IS NULL))
   BEGIN
       DECLARE @FirstDate datetime, @Today datetime = GETDATE(), @FirstCharID int;

       exec @FirstCharID = SRO_VT_SHARD.dbo._RandomPlayerID
       exec SRO_VT_SHARD.dbo._GetRandomTime @Today, @FirstDate OUTPUT
       
       UPDATE [_RandomPlayer&Date]
           SET
               NextDate = @FirstDate,
               RefreshedDate = GETDATE(),
               CharID = @FirstCharID,
               Charname = (SELECT CharName16 FROM SRO_VT_SHARD.dbo._Char WHERE CharID = @FirstCharID)
           WHERE [Desc] like 'Next';
   END
   
IF ((SELECT NextDate FROM [_RandomPlayer&Date] WHERE [Desc] like 'Next') <= GETDATE())
   BEGIN
       UPDATE _OnlineOffline
           SET [Silk/Hour] = (SELECT RewardSilk FROM [_Silk/Hour-Config] WHERE [Desc] like 'Rates')
           WHERE CharID = (SELECT CharID FROM [_RandomPlayer&Date] WHERE [Desc] like 'Next');
       Declare
               @CurSilkperHour int,
               @OldCharID int = (SELECT CharID FROM [_RandomPlayer&Date] WHERE [Desc] like 'Current');
       IF (@OldCharID IS NOT NULL)
           BEGIN
               exec @CurSilkperHour = _GetSilkperHour @OldCharID
               UPDATE _OnlineOffline
                   SET [Silk/Hour] = @CurSilkperHour
                   WHERE CharID = @OldCharID;
           END
       UPDATE [_RandomPlayer&Date]
           SET
               NextDate = NULL,
               RefreshedDate = GETDATE(),
               CharID = (SELECT CharID FROM [_RandomPlayer&Date] WHERE [Desc] like 'Next'),
               Charname = (SELECT Charname FROM [_RandomPlayer&Date] WHERE [Desc] like 'Next')
           WHERE [Desc] like 'Current'
       
       /*new Random Time of Today+1*/
       DECLARE @NextDate datetime, @Tomorrow datetime = GETDATE()+1, @NewCharID int;
       
       exec @NewCharID = SRO_VT_SHARD.dbo._RandomPlayerID
       exec SRO_VT_SHARD.dbo._GetRandomTime @Tomorrow, @NextDate OUTPUT
       
       UPDATE [_RandomPlayer&Date]
           SET
               NextDate = @NextDate,
               RefreshedDate = GETDATE(),
               CharID = @NewCharID,
               Charname = (SELECT CharName16 FROM SRO_VT_SHARD.dbo._Char WHERE CharID = @NewCharID)
           WHERE [Desc] like 'Next'
       /*!new Random...*/
   END
   
   /*Calculation of the silk amount*/
   Declare @tMinutes bigint = (SELECT [Minutes] from _OnlineOffline WHERE CharID = @CharID), @Silk int;
   
       IF (@tMinutes >= 60)
           BEGIN
               SET @Silk = CAST(((SELECT [Minutes] FROM _OnlineOffline WHERE CharID = @CharID) / 60) as int)
               UPDATE _OnlineOffline
               SET [Minutes] = [Minutes] % 60
               WHERE CharID = @CharID
               
           IF exists (SELECT [WEEKDAYS] FROM [_Silk/Hour-Config] WHERE [WEEKDAYS] like DATENAME(WEEKDAY, GETDATE()))
               BEGIN
                   UPDATE _OnlineOffline
                   SET [eSilk] = [eSilk] + (@Silk*[Silk/Hour])
                   WHERE CharID = @CharID
                   
                   exec SRO_VT_ACCOUNT.dbo._extraSilk @CharID, @Silk
               END
           END
   /*!Calc*/
   
/*!Extension*/

END -- !Skipping  
Yukarıda belirtilen gibi DB adları DEĞİŞTİRMEYİ UNUTMAYIN TÜM bu sorgulara bakmak, değiştirmek zorundasınız.

Bu [_Silk / Saat-Yapılandırma] -Masa, sadece NULL değerleri ve hafta içi içerebilir HAFTA İÇLERİ sütun, hiçbir şey kullanarak kendi zamanlama oluşturmak için size kalmış.

indir



NOT : ARAŞTIRIYORUM VE PAYLAŞIYORUM [ALINTIDIR.]
Cevapla

15.11.2016, Saat: 16:05
#2
PurePower
PurePower
Konuları:
149
Yorumları:
1,467
Kayıt Tarihi:
23.07.2015
Rep Puanı:
53
verified_user Site Kurucusu
RE: [SQL] Çevrimiçi zamana dayalı oto ücretsiz silk verme (Sistem)
konu onaylandı. teşekkkürler
İmza: @PurePower
PurePower kullanıcısının imza signatürünü görme yetkisine sahip değilsin veya erişime engellendin.
Bunun bir hata olduğunu düşünüyorsan site yöneticileri ile iletişime geç.
vSroForum.com ©2015-2017
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Vsro Görev ile İtem Verme Server Edit 12 1,894 21.06.2017, Saat: 23:44
Son Yorum: _OrdeaL_
  Dragon Flag'a int Str Verme serseri81 6 190 08.06.2017, Saat: 19:50
Son Yorum: serseri81
  vSro Silk Verme (Query) PurePower 10 1,604 27.05.2017, Saat: 03:04
Son Yorum: HistoricaL
  Weapon UPGRADE Sistem 2017 Hatasız GeneralRed 5 294 26.03.2017, Saat: 13:28
Son Yorum: GeneralRed

Hızlı Menü:



[-]
monetization_on Reklam (728x90)
Reklam Ver
Reklam vermek istiyorum?