exselansTR_
Ben tek siz hepiniz!
- Katılım
- 6 May 2011
- Mesajlar
- 46
- Reaction score
- 0
- Puanları
- 6
- Yaş
- 33
- Konum
- Muğla
- Web sitesi
- exselanstr.blogspot.com
Arkadaşlar artık son noktayı koyalım. Ülke puanın ve aylın puana göre 2 ayrı prosedür vardır. Gerekli tablolarıyla birlikte veriyorum hiçbir sorun yaşamazsınız.
- 100 Kareli ve 100 Karesiz Sembol (K Sembolü Ekli Değil) -
UPDATE_MONTHLY_RANK
Bu prosedür Kareli simgeleri belirler. Kareli simgeler ülke puanına göre belirlenir.
Toplam 50 karus, 50 human olmak üzere 100 tane kareli simge verir. (K Simgesi Ekli Değildir)
Sadece normal oyuncuları sıralamaya sokar. Eğer ülke puanı aynıysa aylık puana göre sıralamayı bağlar.
UPDATE_LOYALTY_MONTHLY_RANK
Bu prosedür Karesiz simgeleri belirler. Karesiz simgeler aylık puana göre belirlenir.
Toplam 50 karus, 50 human olmak üzere 100 tane karesiz simge verir. (K Simgesi Ekli Değildir)
Sadece normal oyuncuları sıralamaya sokar. Eğer oyuncu kareli bir simgeye sahipse onu sıralamaya almaz.
Eğer aylık puanları eşit olan iki oyuncu varsa ülke puanlarını daha sonrada seviyesini alır ve sıralamaya bağlar.
Bu prosedür Kareli simgeleri belirler. Kareli simgeler ülke puanına göre belirlenir.
Toplam 50 karus, 50 human olmak üzere 100 tane kareli simge verir. (K Simgesi Ekli Değildir)
Sadece normal oyuncuları sıralamaya sokar. Eğer ülke puanı aynıysa aylık puana göre sıralamayı bağlar.
PHP:
if exists (select * from dbo.sysobjects where id = object_id(N'[USER_KNIGHTS_RANK]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [USER_KNIGHTS_RANK]
GO
/*
exselansTR / www.kokolik.com
Gerekli Tablo
*/
CREATE TABLE [USER_KNIGHTS_RANK] (
[shIndex] [smallint] NOT NULL ,
[strName] [char] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[strElmoUserID] [varchar] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[strElmoKnightsName] [char] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[nElmoLoyalty] [int] NULL ,
[strKarusUserID] [varchar] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[strKarusKnightsName] [char] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[nKarusLoyalty] [int] NULL ,
[nMoney] [int] NOT NULL
) ON [PRIMARY]
GO
CREATE PROCEDURE UPDATE_MONTHLY_RANK
AS
/*
exselansTR / www.kokolik.com
Bu prosedür Kareli simgeleri belirler. Kareli simgeler ülke puanına göre belirlenir.
Toplam 50 karus, 50 human olmak üzere 100 tane kareli simge verir. (K Simgesi Ekli Değildir)
Sadece normal oyuncuları sıralamaya sokar. Eğer ülke puanı aynıysa aylık puana göre sıralamayı bağlar.
*/
DECLARE @strUserId char(21)
DECLARE @Loyalty int
DECLARE @Knights int
DECLARE @KnightName char(50)
DECLARE @IsValidKnight int
DECLARE @Index smallint
DECLARE @IsValidCount tinyint
DECLARE @UserCount tinyint
DECLARE @RankName varchar(30)
SELECT @IsValidCount = Count(*) FROM USER_KNIGHTS_RANK
-- Tablo uyumsuz ise boş dolduralım!
IF @IsValidCount <> 50
BEGIN
SET @Index = 1
WHILE @Index < 51
BEGIN
IF @Index = 1
BEGIN
SET @RankName = 'Gold Knight'
END
IF @Index > 1 AND @Index <= 4
BEGIN
SET @RankName = 'Silver Knight'
END
IF @Index > 4 AND @Index <= 9
BEGIN
SET @RankName = 'Mirage Knight'
END
IF @Index > 9 AND @Index <= 25
BEGIN
SET @RankName = 'Shadow Knight'
END
IF @Index > 25 AND @Index <= 50
BEGIN
SET @RankName = 'Mist Knight'
END
INSERT INTO USER_KNIGHTS_RANK (shIndex,strName,strElmoUserID,strElmoKnightsName,nElmoLoyalty,strKarusUserID,strKarusKnightsName,nKarusLoyalty,nMoney) VALUES (@Index,@RankName,NULL,NULL,0,NULL,NULL,0,1000000)
SET @Index = @Index + 1
END
END
SELECT @UserCount = Count(*) FROM USERDATA
-- Tablo uyumsuz ise boş dolduralım!
IF @UserCount < 100
BEGIN
SET @Index = 1
WHILE @Index < 51
BEGIN
IF @Index = 1
BEGIN
SET @RankName = 'Gold Knight'
END
IF @Index > 1 AND @Index <= 4
BEGIN
SET @RankName = 'Silver Knight'
END
IF @Index > 4 AND @Index <= 9
BEGIN
SET @RankName = 'Mirage Knight'
END
IF @Index > 9 AND @Index <= 25
BEGIN
SET @RankName = 'Shadow Knight'
END
IF @Index > 25 AND @Index <= 50
BEGIN
SET @RankName = 'Mist Knight'
END
INSERT INTO USER_KNIGHTS_RANK (shIndex,strName,strElmoUserID,strElmoKnightsName,nElmoLoyalty,strKarusUserID,strKarusKnightsName,nKarusLoyalty,nMoney) VALUES (@Index,@RankName,NULL,NULL,0,NULL,NULL,0,1000000)
SET @Index = @Index + 1
END
END
SET @Index = 1
SET @strUserId = NULL
SET @Loyalty = 0
SET @Knights = 0
DECLARE RANKING_CRS CURSOR FOR
SELECT TOP 50 strUserId,Loyalty,Knights FROM USERDATA WHERE Nation = 1 AND Authority = 1 ORDER BY Loyalty DESC, LoyaltyMonthly DESC, [Level] DESC
OPEN RANKING_CRS
FETCH NEXT FROM RANKING_CRS INTO @strUserId,@Loyalty,@Knights
WHILE @@FETCH_STATUS = 0
BEGIN
SET @KnightName = NULL
SET @IsValidKnight = 0
IF @Knights <> 0
BEGIN
SELECT @IsValidKnight = COUNT(IDName) FROM KNIGHTS WHERE IDNum = @Knights
IF @IsValidKnight <> 0
BEGIN
SELECT @KnightName = IDName FROM KNIGHTS WHERE IDNum = @Knights
END
END
UPDATE USER_KNIGHTS_RANK SET strKarusUserID = @strUserId, strKarusKnightsName = @KnightName, nKarusLoyalty = @Loyalty WHERE shIndex = @Index
SET @Index = @Index + 1
FETCH NEXT FROM RANKING_CRS INTO @strUserId,@Loyalty,@Knights
END
CLOSE RANKING_CRS
DEALLOCATE RANKING_CRS
SET @Index = 1
SET @strUserId = NULL
SET @Loyalty = 0
SET @Knights = 0
DECLARE RANKING_CRS CURSOR FOR
SELECT TOP 50 strUserId,Loyalty,Knights FROM USERDATA WHERE Nation = 2 AND Authority = 1 ORDER BY Loyalty DESC, LoyaltyMonthly DESC, [Level] DESC
OPEN RANKING_CRS
FETCH NEXT FROM RANKING_CRS INTO @strUserId,@Loyalty,@Knights
WHILE @@FETCH_STATUS = 0
BEGIN
SET @KnightName = NULL
SET @IsValidKnight = 0
IF @Knights <> 0
BEGIN
SELECT @IsValidKnight = COUNT(IDName) FROM KNIGHTS WHERE IDNum = @Knights
IF @IsValidKnight <> 0
BEGIN
SELECT @KnightName = IDName FROM KNIGHTS WHERE IDNum = @Knights
END
END
UPDATE USER_KNIGHTS_RANK SET strElmoUserID = @strUserId, strElmoKnightsName = @KnightName, nElmoLoyalty = @Loyalty WHERE shIndex = @Index
SET @Index = @Index + 1
FETCH NEXT FROM RANKING_CRS INTO @strUserId,@Loyalty,@Knights
END
CLOSE RANKING_CRS
DEALLOCATE RANKING_CRS
GO
UPDATE_LOYALTY_MONTHLY_RANK
Bu prosedür Karesiz simgeleri belirler. Karesiz simgeler aylık puana göre belirlenir.
Toplam 50 karus, 50 human olmak üzere 100 tane karesiz simge verir. (K Simgesi Ekli Değildir)
Sadece normal oyuncuları sıralamaya sokar. Eğer oyuncu kareli bir simgeye sahipse onu sıralamaya almaz.
Eğer aylık puanları eşit olan iki oyuncu varsa ülke puanlarını daha sonrada seviyesini alır ve sıralamaya bağlar.
PHP:
if exists (select * from dbo.sysobjects where id = object_id(N'[USER_PERSONAL_RANK]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [USER_PERSONAL_RANK]
GO
/*
exselansTR / www.kokolik.com
Gerekli Tablo
*/
CREATE TABLE [USER_PERSONAL_RANK] (
[nRank] [smallint] NOT NULL ,
[strPosition] [char] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[nElmoUP] [smallint] NOT NULL ,
[strElmoUserID] [char] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[nElmoLoyaltyMonthly] [int] NULL ,
[nElmoCheck] [int] NOT NULL ,
[nKarusUP] [smallint] NOT NULL ,
[strKarusUserID] [char] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[nKarusLoyaltyMonthly] [int] NULL ,
[nKarusCheck] [int] NOT NULL ,
[nSalary] [int] NOT NULL ,
[UpdateDate] [smalldatetime] NULL
) ON [PRIMARY]
GO
CREATE PROCEDURE UPDATE_LOYALTY_MONTHLY_RANK
AS
/*
exselansTR / www.kokolik.com
Bu prosedür Karesiz simgeleri belirler. Karesiz simgeler aylık puana göre belirlenir.
Toplam 50 karus, 50 human olmak üzere 100 tane karesiz simge verir. (K Simgesi Ekli Değildir)
Sadece normal oyuncuları sıralamaya sokar. Eğer oyuncu kareli bir simgeye sahipse onu sıralamaya almaz.
Eğer aylık puanları eşit olan iki oyuncu varsa ülke puanlarını daha sonrada seviyesini alır ve sıralamaya bağlar.
*/
DECLARE @strUserId char(21)
DECLARE @LoyaltyMonthly int
DECLARE @Index smallint
DECLARE @IsValidCount tinyint
DECLARE @UserCount int
DECLARE @RankName varchar(30)
SELECT @IsValidCount = Count(*) FROM USER_PERSONAL_RANK
-- Tablo uyumsuz ise boş dolduralım!
IF @IsValidCount <> 50
BEGIN
SET @Index = 1
WHILE @Index < 51
BEGIN
IF @Index = 1
BEGIN
SET @RankName = 'Gold Knight'
END
IF @Index > 1 AND @Index <= 4
BEGIN
SET @RankName = 'Silver Knight'
END
IF @Index > 4 AND @Index <= 9
BEGIN
SET @RankName = 'Mirage Knight'
END
IF @Index > 9 AND @Index <= 25
BEGIN
SET @RankName = 'Shadow Knight'
END
IF @Index > 25 AND @Index <= 50
BEGIN
SET @RankName = 'Mist Knight'
END
INSERT INTO USER_PERSONAL_RANK (nRank,strPosition,nElmoUP,strElmoUserID,nElmoLoyaltyMonthly,nElmoCheck,nKarusUP,strKarusUserID,nKarusLoyaltyMonthly,nKarusCheck,nSalary,UpdateDate) VALUES (@Index,@RankName,0,NULL,0,1000000,0,NULL,0,1000000,1000000,NULL)
SET @Index = @Index + 1
END
END
SELECT @UserCount = Count(*) FROM USERDATA
-- Tablo uyumsuz ise boş dolduralım!
IF @UserCount < 100
BEGIN
SET @Index = 1
WHILE @Index < 51
BEGIN
IF @Index = 1
BEGIN
SET @RankName = 'Gold Knight'
END
IF @Index > 1 AND @Index <= 4
BEGIN
SET @RankName = 'Silver Knight'
END
IF @Index > 4 AND @Index <= 9
BEGIN
SET @RankName = 'Mirage Knight'
END
IF @Index > 9 AND @Index <= 25
BEGIN
SET @RankName = 'Shadow Knight'
END
IF @Index > 25 AND @Index <= 50
BEGIN
SET @RankName = 'Mist Knight'
END
INSERT INTO USER_PERSONAL_RANK (nRank,strPosition,nElmoUP,strElmoUserID,nElmoLoyaltyMonthly,nElmoCheck,nKarusUP,strKarusUserID,nKarusLoyaltyMonthly,nKarusCheck,nSalary,UpdateDate) VALUES (@Index,@RankName,0,NULL,0,1000000,0,NULL,0,1000000,1000000,NULL)
SET @Index = @Index + 1
END
END
SET @Index = 1
SET @strUserId = NULL
SET @LoyaltyMonthly = 0
DECLARE RANKING_CRS CURSOR FOR
SELECT TOP 50 strUserId,LoyaltyMonthly FROM USERDATA WHERE Nation = 1 AND Authority = 1 AND NOT strUserId IN (SELECT strKarusUserID FROM USER_KNIGHTS_RANK) ORDER BY LoyaltyMonthly DESC, Loyalty DESC, [Level] DESC
OPEN RANKING_CRS
FETCH NEXT FROM RANKING_CRS INTO @strUserId,@LoyaltyMonthly
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE USER_PERSONAL_RANK SET strKarusUserID = @strUserId, nKarusLoyaltyMonthly = @LoyaltyMonthly WHERE nRank = @Index
SET @Index = @Index + 1
FETCH NEXT FROM RANKING_CRS INTO @strUserId,@LoyaltyMonthly
END
CLOSE RANKING_CRS
DEALLOCATE RANKING_CRS
SET @Index = 1
SET @strUserId = NULL
SET @LoyaltyMonthly = 0
DECLARE RANKING_CRS CURSOR FOR
SELECT TOP 50 strUserId,LoyaltyMonthly FROM USERDATA WHERE Nation = 2 AND Authority = 1 AND NOT strUserId IN (SELECT strElmoUserID FROM USER_KNIGHTS_RANK) ORDER BY LoyaltyMonthly DESC, Loyalty DESC, [Level] DESC
OPEN RANKING_CRS
FETCH NEXT FROM RANKING_CRS INTO @strUserId,@LoyaltyMonthly
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE USER_PERSONAL_RANK SET strElmoUserID = @strUserId, nElmoLoyaltyMonthly = @LoyaltyMonthly WHERE nRank = @Index
SET @Index = @Index + 1
FETCH NEXT FROM RANKING_CRS INTO @strUserId,@LoyaltyMonthly
END
CLOSE RANKING_CRS
DEALLOCATE RANKING_CRS
- 200 Kareli ve 200 Karesiz Sembol (K Sembolü Ekli!) -
UPDATE_MONTHLY_RANK
Bu prosedür Kareli simgeleri belirler. Kareli simgeler ülke puanına göre belirlenir.
Toplam 100 karus, 100 human olmak üzere 200 tane kareli simge verir. (K Simgesi Eklidir + SOACS v32)
Sadece normal oyuncuları sıralamaya sokar. Eğer ülke puanı aynıysa aylık puana göre sıralamayı bağlar.
UPDATE_LOYALTY_MONTHLY_RANK
Bu prosedür Karesiz simgeleri belirler. Karesiz simgeler aylık puana göre belirlenir.
Toplam 100 karus, 100 human olmak üzere 200 tane karesiz simge verir. (K Simgesi Eklidir + SOACS v32)
Sadece normal oyuncuları sıralamaya sokar. Eğer oyuncu kareli bir simgeye sahipse onu sıralamaya almaz.
Eğer aylık puanları eşit olan iki oyuncu varsa ülke puanlarını daha sonrada seviyesini alır ve sıralamaya bağlar.
- Kullanımı -
Bu prosedür Kareli simgeleri belirler. Kareli simgeler ülke puanına göre belirlenir.
Toplam 100 karus, 100 human olmak üzere 200 tane kareli simge verir. (K Simgesi Eklidir + SOACS v32)
Sadece normal oyuncuları sıralamaya sokar. Eğer ülke puanı aynıysa aylık puana göre sıralamayı bağlar.
PHP:
if exists (select * from dbo.sysobjects where id = object_id(N'[USER_KNIGHTS_RANK]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [USER_KNIGHTS_RANK]
GO
/*
exselansTR / www.kokolik.com
Gerekli Tablo
*/
CREATE TABLE [USER_KNIGHTS_RANK] (
[shIndex] [smallint] NOT NULL ,
[strName] [char] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[strElmoUserID] [varchar] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[strElmoKnightsName] [char] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[nElmoLoyalty] [int] NULL ,
[strKarusUserID] [varchar] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[strKarusKnightsName] [char] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[nKarusLoyalty] [int] NULL ,
[nMoney] [int] NOT NULL
) ON [PRIMARY]
GO
CREATE PROCEDURE UPDATE_MONTHLY_RANK
AS
/*
exselansTR / www.kokolik.com
Bu prosedür Kareli simgeleri belirler. Kareli simgeler ülke puanına göre belirlenir.
Toplam 100 karus, 100 human olmak üzere 200 tane kareli simge verir. (K Simgesi Eklidir + SOACS v32)
Sadece normal oyuncuları sıralamaya sokar. Eğer ülke puanı aynıysa aylık puana göre sıralamayı bağlar.
*/
DECLARE @strUserId char(21)
DECLARE @Loyalty int
DECLARE @Knights int
DECLARE @KnightName char(50)
DECLARE @IsValidKnight int
DECLARE @Index smallint
DECLARE @IsValidCount tinyint
DECLARE @UserCount tinyint
DECLARE @RankName varchar(30)
SELECT @IsValidCount = Count(*) FROM USER_KNIGHTS_RANK
-- Tablo uyumsuz ise boş dolduralım!
IF @IsValidCount <> 100
BEGIN
SET @Index = 1
WHILE @Index < 101
BEGIN
IF @Index = 1
BEGIN
SET @RankName = 'Gold Knight'
END
IF @Index > 1 AND @Index <= 4
BEGIN
SET @RankName = 'Silver Knight'
END
IF @Index > 4 AND @Index <= 9
BEGIN
SET @RankName = 'Mirage Knight'
END
IF @Index > 9 AND @Index <= 25
BEGIN
SET @RankName = 'Shadow Knight'
END
IF @Index > 25 AND @Index <= 50
BEGIN
SET @RankName = 'Mist Knight'
END
IF @Index > 50 AND @Index <= 100
BEGIN
SET @RankName = 'Training Knight'
END
INSERT INTO USER_KNIGHTS_RANK (shIndex,strName,strElmoUserID,strElmoKnightsName,nElmoLoyalty,strKarusUserID,strKarusKnightsName,nKarusLoyalty,nMoney) VALUES (@Index,@RankName,NULL,NULL,0,NULL,NULL,0,1000000)
SET @Index = @Index + 1
END
END
SELECT @UserCount = Count(*) FROM USERDATA
-- Tablo uyumsuz ise boş dolduralım!
IF @UserCount < 200
BEGIN
SET @Index = 1
WHILE @Index < 101
BEGIN
IF @Index = 1
BEGIN
SET @RankName = 'Gold Knight'
END
IF @Index > 1 AND @Index <= 4
BEGIN
SET @RankName = 'Silver Knight'
END
IF @Index > 4 AND @Index <= 9
BEGIN
SET @RankName = 'Mirage Knight'
END
IF @Index > 9 AND @Index <= 25
BEGIN
SET @RankName = 'Shadow Knight'
END
IF @Index > 25 AND @Index <= 50
BEGIN
SET @RankName = 'Mist Knight'
END
IF @Index > 50 AND @Index <= 100
BEGIN
SET @RankName = 'Training Knight'
END
INSERT INTO USER_KNIGHTS_RANK (shIndex,strName,strElmoUserID,strElmoKnightsName,nElmoLoyalty,strKarusUserID,strKarusKnightsName,nKarusLoyalty,nMoney) VALUES (@Index,@RankName,NULL,NULL,0,NULL,NULL,0,1000000)
SET @Index = @Index + 1
END
END
SET @Index = 1
SET @strUserId = NULL
SET @Loyalty = 0
SET @Knights = 0
DECLARE RANKING_CRS CURSOR FOR
SELECT TOP 100 strUserId,Loyalty,Knights FROM USERDATA WHERE Nation = 1 AND Authority = 1 ORDER BY Loyalty DESC, LoyaltyMonthly DESC, [Level] DESC
OPEN RANKING_CRS
FETCH NEXT FROM RANKING_CRS INTO @strUserId,@Loyalty,@Knights
WHILE @@FETCH_STATUS = 0
BEGIN
SET @KnightName = NULL
SET @IsValidKnight = 0
IF @Knights <> 0
BEGIN
SELECT @IsValidKnight = COUNT(IDName) FROM KNIGHTS WHERE IDNum = @Knights
IF @IsValidKnight <> 0
BEGIN
SELECT @KnightName = IDName FROM KNIGHTS WHERE IDNum = @Knights
END
END
UPDATE USER_KNIGHTS_RANK SET strKarusUserID = @strUserId, strKarusKnightsName = @KnightName, nKarusLoyalty = @Loyalty WHERE shIndex = @Index
SET @Index = @Index + 1
FETCH NEXT FROM RANKING_CRS INTO @strUserId,@Loyalty,@Knights
END
CLOSE RANKING_CRS
DEALLOCATE RANKING_CRS
SET @Index = 1
SET @strUserId = NULL
SET @Loyalty = 0
SET @Knights = 0
DECLARE RANKING_CRS CURSOR FOR
SELECT TOP 100 strUserId,Loyalty,Knights FROM USERDATA WHERE Nation = 2 AND Authority = 1 ORDER BY Loyalty DESC, LoyaltyMonthly DESC, [Level] DESC
OPEN RANKING_CRS
FETCH NEXT FROM RANKING_CRS INTO @strUserId,@Loyalty,@Knights
WHILE @@FETCH_STATUS = 0
BEGIN
SET @KnightName = NULL
SET @IsValidKnight = 0
IF @Knights <> 0
BEGIN
SELECT @IsValidKnight = COUNT(IDName) FROM KNIGHTS WHERE IDNum = @Knights
IF @IsValidKnight <> 0
BEGIN
SELECT @KnightName = IDName FROM KNIGHTS WHERE IDNum = @Knights
END
END
UPDATE USER_KNIGHTS_RANK SET strElmoUserID = @strUserId, strElmoKnightsName = @KnightName, nElmoLoyalty = @Loyalty WHERE shIndex = @Index
SET @Index = @Index + 1
FETCH NEXT FROM RANKING_CRS INTO @strUserId,@Loyalty,@Knights
END
CLOSE RANKING_CRS
DEALLOCATE RANKING_CRS
GO
UPDATE_LOYALTY_MONTHLY_RANK
Bu prosedür Karesiz simgeleri belirler. Karesiz simgeler aylık puana göre belirlenir.
Toplam 100 karus, 100 human olmak üzere 200 tane karesiz simge verir. (K Simgesi Eklidir + SOACS v32)
Sadece normal oyuncuları sıralamaya sokar. Eğer oyuncu kareli bir simgeye sahipse onu sıralamaya almaz.
Eğer aylık puanları eşit olan iki oyuncu varsa ülke puanlarını daha sonrada seviyesini alır ve sıralamaya bağlar.
PHP:
if exists (select * from dbo.sysobjects where id = object_id(N'[USER_PERSONAL_RANK]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [USER_PERSONAL_RANK]
GO
/*
exselansTR / www.kokolik.com
Gerekli Tablo
*/
CREATE TABLE [USER_PERSONAL_RANK] (
[nRank] [smallint] NOT NULL ,
[strPosition] [char] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[nElmoUP] [smallint] NOT NULL ,
[strElmoUserID] [char] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[nElmoLoyaltyMonthly] [int] NULL ,
[nElmoCheck] [int] NOT NULL ,
[nKarusUP] [smallint] NOT NULL ,
[strKarusUserID] [char] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[nKarusLoyaltyMonthly] [int] NULL ,
[nKarusCheck] [int] NOT NULL ,
[nSalary] [int] NOT NULL ,
[UpdateDate] [smalldatetime] NULL
) ON [PRIMARY]
GO
CREATE PROCEDURE UPDATE_LOYALTY_MONTHLY_RANK
AS
/*
exselansTR / www.kokolik.com
Bu prosedür Karesiz simgeleri belirler. Karesiz simgeler aylık puana göre belirlenir.
Toplam 100 karus, 100 human olmak üzere 200 tane karesiz simge verir. (K Simgesi Eklidir + SOACS v32)
Sadece normal oyuncuları sıralamaya sokar. Eğer oyuncu kareli bir simgeye sahipse onu sıralamaya almaz.
Eğer aylık puanları eşit olan iki oyuncu varsa ülke puanlarını daha sonrada seviyesini alır ve sıralamaya bağlar.
*/
DECLARE @strUserId char(21)
DECLARE @LoyaltyMonthly int
DECLARE @Index smallint
DECLARE @IsValidCount tinyint
DECLARE @UserCount int
DECLARE @RankName varchar(30)
SELECT @IsValidCount = Count(*) FROM USER_PERSONAL_RANK
-- Tablo uyumsuz ise boş dolduralım!
IF @IsValidCount <> 100
BEGIN
SET @Index = 1
WHILE @Index < 101
BEGIN
IF @Index = 1
BEGIN
SET @RankName = 'Gold Knight'
END
IF @Index > 1 AND @Index <= 4
BEGIN
SET @RankName = 'Silver Knight'
END
IF @Index > 4 AND @Index <= 9
BEGIN
SET @RankName = 'Mirage Knight'
END
IF @Index > 9 AND @Index <= 25
BEGIN
SET @RankName = 'Shadow Knight'
END
IF @Index > 25 AND @Index <= 50
BEGIN
SET @RankName = 'Mist Knight'
END
IF @Index > 50 AND @Index <= 100
BEGIN
SET @RankName = 'Training Knight'
END
INSERT INTO USER_PERSONAL_RANK (nRank,strPosition,nElmoUP,strElmoUserID,nElmoLoyaltyMonthly,nElmoCheck,nKarusUP,strKarusUserID,nKarusLoyaltyMonthly,nKarusCheck,nSalary,UpdateDate) VALUES (@Index,@RankName,0,NULL,0,1000000,0,NULL,0,1000000,1000000,NULL)
SET @Index = @Index + 1
END
END
SELECT @UserCount = Count(*) FROM USERDATA
-- Tablo uyumsuz ise boş dolduralım!
IF @UserCount < 200
BEGIN
SET @Index = 1
WHILE @Index < 101
BEGIN
IF @Index = 1
BEGIN
SET @RankName = 'Gold Knight'
END
IF @Index > 1 AND @Index <= 4
BEGIN
SET @RankName = 'Silver Knight'
END
IF @Index > 4 AND @Index <= 9
BEGIN
SET @RankName = 'Mirage Knight'
END
IF @Index > 9 AND @Index <= 25
BEGIN
SET @RankName = 'Shadow Knight'
END
IF @Index > 25 AND @Index <= 50
BEGIN
SET @RankName = 'Mist Knight'
END
IF @Index > 50 AND @Index <= 100
BEGIN
SET @RankName = 'Training Knight'
END
INSERT INTO USER_PERSONAL_RANK (nRank,strPosition,nElmoUP,strElmoUserID,nElmoLoyaltyMonthly,nElmoCheck,nKarusUP,strKarusUserID,nKarusLoyaltyMonthly,nKarusCheck,nSalary,UpdateDate) VALUES (@Index,@RankName,0,NULL,0,1000000,0,NULL,0,1000000,1000000,NULL)
SET @Index = @Index + 1
END
END
SET @Index = 1
SET @strUserId = NULL
SET @LoyaltyMonthly = 0
DECLARE RANKING_CRS CURSOR FOR
SELECT TOP 100 strUserId,LoyaltyMonthly FROM USERDATA WHERE Nation = 1 AND Authority = 1 AND NOT strUserId IN (SELECT strKarusUserID FROM USER_KNIGHTS_RANK) ORDER BY LoyaltyMonthly DESC, Loyalty DESC, [Level] DESC
OPEN RANKING_CRS
FETCH NEXT FROM RANKING_CRS INTO @strUserId,@LoyaltyMonthly
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE USER_PERSONAL_RANK SET strKarusUserID = @strUserId, nKarusLoyaltyMonthly = @LoyaltyMonthly WHERE nRank = @Index
SET @Index = @Index + 1
FETCH NEXT FROM RANKING_CRS INTO @strUserId,@LoyaltyMonthly
END
CLOSE RANKING_CRS
DEALLOCATE RANKING_CRS
SET @Index = 1
SET @strUserId = NULL
SET @LoyaltyMonthly = 0
DECLARE RANKING_CRS CURSOR FOR
SELECT TOP 100 strUserId,LoyaltyMonthly FROM USERDATA WHERE Nation = 2 AND Authority = 1 AND NOT strUserId IN (SELECT strElmoUserID FROM USER_KNIGHTS_RANK) ORDER BY LoyaltyMonthly DESC, Loyalty DESC, [Level] DESC
OPEN RANKING_CRS
FETCH NEXT FROM RANKING_CRS INTO @strUserId,@LoyaltyMonthly
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE USER_PERSONAL_RANK SET strElmoUserID = @strUserId, nElmoLoyaltyMonthly = @LoyaltyMonthly WHERE nRank = @Index
SET @Index = @Index + 1
FETCH NEXT FROM RANKING_CRS INTO @strUserId,@LoyaltyMonthly
END
CLOSE RANKING_CRS
DEALLOCATE RANKING_CRS
- Kullanımı -
Kullanımı "EXEC" komutuyla prosedürü çalıştırmaktır. Sadece ufak bir ayrıntı var "UPDATE_MONTHLY_RANK" prosedürünü "UPDATE_LOYALTY_MONTHLY_RANK" prosedüründen önce çalıştırmalısınız şu şekilde çalıştırırsanız sorun yaşamazsınız:
PHP:
EXEC UPDATE_MONTHLY_RANK
EXEC UPDATE_LOYALTY_MONTHLY_RANK