Açıklama;
- Oyuna giriş ve çıkış zamanını kayıtlı tutar.
- Oyunda bulunduğu ne kadar exp, ne kadar np kastığını kayıtlı tutar.
- Kişinin hangi charla hangi ip’den ne kadar bağlı kaldığını kayıtlı tutar.
- Char ID – Kastığı Exp – Kastığı NP – Kastığı Aylık NP – Level – IP – Giriş Zamanı – Çıkış Zamanı – Oyunda Kalınan Süre
Tutulan kayıttan bir görüntü ;
Tablolar;
Not : USERDATA ve CURRENTUSER tablosunu elle giriniz.
Prosedürler;
- Oyuna giriş ve çıkış zamanını kayıtlı tutar.
- Oyunda bulunduğu ne kadar exp, ne kadar np kastığını kayıtlı tutar.
- Kişinin hangi charla hangi ip’den ne kadar bağlı kaldığını kayıtlı tutar.
- Char ID – Kastığı Exp – Kastığı NP – Kastığı Aylık NP – Level – IP – Giriş Zamanı – Çıkış Zamanı – Oyunda Kalınan Süre
Tutulan kayıttan bir görüntü ;
Tablolar;
CURRENTUSER
Sure datetime 8 1
Exp int 4 1
NP int 4 1
NP2 int 4 1
Lvl int 4 1
USERDATA
OnlineTime int 4 1
CREATE TABLE [dbo].[USER_LOG] (
[strUserID] [varchar] (50),
[pExp] [int] NULL ,
[pNP] [int] NULL ,
[pNP2] [int] NULL ,
[pLvl] [int] NULL ,
[IP] [varchar] (50) ,
[OnlineDate] [datetime] NULL ,
[OfflineDate] [datetime] NULL ,
[Time] [int] NULL
) ON [PRIMARY]
GO
Not : USERDATA ve CURRENTUSER tablosunu elle giriniz.
Prosedürler;
/* Karakterlerin Çevrimiçi Sürelerini Hesaplama Yazan : styLemert (Mert Ürün) */
CREATE PROCEDURE ACCOUNT_LOGOUT
@AccountID varchar(21),
@nRet smallint OUTPUT
AS
BEGIN
Declare @Giris datetime, @Cikis datetime, @OnlineTime int, @OnlineTime2 int, @id varchar(50)
Set @Giris = (Select Sure From [CURRENTUSER] Where strAccountID = @AccountID)
Set @Cikis = getdate()
Set @id = (Select strCharID From [CURRENTUSER] Where strAccountID = @AccountID)
Set @OnlineTime = (Select OnlineTime From [USERDATA] Where strUserId = @id)
Set @OnlineTime2 = Datediff(minute, @Giris, @Cikis)
Update [USERDATA] Set OnlineTime = @OnlineTime + @OnlineTime2 Where strUserId = @id)
DELETE FROM CURRENTUSER WHERE strAccountID = @AccountID
SET @nRet = 1
END
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[PROC_INSERT_CURRENTUSER]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[PROC_INSERT_CURRENTUSER]
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO
/* Karakterlerin Çevrimiçi Sürelerini Hesaplama Yazan : styLemert (Mert Ürün) */
CREATE PROCEDURE PROC_INSERT_CURRENTUSER
@AccountID varchar(50),
@CharID varchar(50),
@ServerNo varchar(50),
@ServerIP varchar(50),
@ClientIP varchar(50),
@nret smallint output
AS
Declare @sayi int, @Exp int, @Np int, @Lvl int, @NP2 int
Set @sayi = (Select Count(strCharID) From [CURRENTUSER] Where strCharID = @CharID)
set @Exp = (Select [Exp] From [USERDATA] where strUserId = @CharID)
set @Np = (Select [Loyalty] From [USERDATA] where strUserId = @CharID)
set @Lvl = (Select [Level] From [USERDATA] where strUserId = @CharID)
set @NP2 = (Select [LoyaltyMonthly] From [USERDATA] where strUserId = @CharID)
If @sayi > 0
Begin
Delete From [CURRENTUSER] Where strCharID = @CharID
End
INSERT INTO CURRENTUSER (nServerNo, strServerIP, strAccountID, strCharID, strClientIP, Sure, Exp, NP, NP2, Lvl ) Values (@ServerNo, @ServerIP, @AccountID, @CharID, @ClientIP,getdate(), @Exp, @Np, @NP2, @Lvl )
set @nret=1
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ACCOUNT_LOGOUT]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[ACCOUNT_LOGOUT]
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE ACCOUNT_LOGOUT
@AccountID varchar(21),
@nRet smallint OUTPUT
AS
BEGIN
/* ====== Karakterlerin Çevrimiçi Sürelerini Hesaplama ve Ne yaptıklarını kaydetme ==== styLemert ===== */
Declare @Giris datetime, @Cikis datetime, @OnlineTime int, @OnlineTime2 int, @id varchar(50), @IP varchar(50),@pExp int,@pNp int,@pNp2 int,@pLvl int,@nExp int,@nNp int,@nNp2 int,@nLvl int
Declare @pnExp int, @pnNp int, @pnNp2 int, @pnLvl int
Set @Giris = (Select Sure From [CURRENTUSER] Where strAccountID = @AccountID)
Set @Cikis = getdate()
Set @id = (Select [strCharID] From [CURRENTUSER] Where strAccountID = @AccountID)
Set @IP = (Select [strClientIP] From [CURRENTUSER] Where strAccountID = @AccountID)
Set @pExp = (Select [Exp] From [CURRENTUSER] Where strAccountID = @AccountID)
Set @pNp = (Select [Np] From [CURRENTUSER] Where strAccountID = @AccountID)
Set @pNp2 = (Select [Np2] From [CURRENTUSER] Where strAccountID = @AccountID)
Set @pLvl = (Select [Lvl] From [CURRENTUSER] Where strAccountID = @AccountID)
Set @nExp = (Select [Exp] From [USERDATA] Where strUserId = @id)
Set @nNp = (Select [Loyalty] From [USERDATA] Where strUserId = @id)
Set @nNp2 = (Select [LoyaltyMonthly] From [USERDATA] Where strUserId = @id)
Set @nLvl = (Select [Level] From [USERDATA] Where strUserId = @id)
Set @pnExp = @nExp - @pExp
Set @pnNp = @nNp - @pNp
Set @pnNp2 = @nNp2 - @pNp2
Set @pnLvl = @nLvl - @pLvl
Set @OnlineTime = (Select OnlineTime From [USERDATA] Where strUserId = @id)
Set @OnlineTime2 = Datediff(second, @Giris, @Cikis)
Insert Into [USER_LOG] Values ( @id, @pnExp, @pnNp, @pnNp2, @pnLvl, @IP, @Giris , getdate(),@OnlineTime2)
Update [USERDATA] Set OnlineTime = @OnlineTime + @OnlineTime2 Where strUserId = @id
/* ====== Karakterlerin Çevrimiçi Sürelerini Hesaplama ve Ne yaptıklarını kaydetme ==== styLemert ===== */
DELETE FROM CURRENTUSER WHERE strAccountID = @AccountID
SET @nRet = 1
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO