Sorunsuz ve en iyi kareli/karesiz sembol güncelleme! (İsteyenler için K sembölüde!)

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.
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.
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
 
Cevap: Sorunsuz ve en iyi kareli/karesiz sembol güncelleme! (İsteyenler için K semböl

Teşekkürler, Anılcan artık kaliteli, düzgün paylaşım yapan kalmadı. :v:
 
Cevap: Sorunsuz ve en iyi kareli/karesiz sembol güncelleme! (İsteyenler için K semböl

Sa KAreli Sıralamaya Sahipte Onuda Sıralamaya Soksun İyice bozuldu bu Semboller Adamda Kareli Sembol varsa karesiz sembol çıkmıyor mesela adamda hero yada kareli m varsa karesizde dragon çıkacagı yere m gözüküyor bu nedir soacs ilemi alakalı yoksa procedür ilemi?
 
Geri
Üst Alt