Hola muchachos, la idea de este sistema es poder almacenar el PK mas alla del "99" o "-1" que esta permitido en las versiones viejas (nose si aun se presenta este problema en versiones nuevas), ademas como plus le agregamos para que guarde valores en 2 columnas mas llamadas PkMensual y PkSemanal.
El sistema lo probe muy a grandes rasgos, nunca con un servidor online, en el caso de los pks no me preocupa el funcionamiento, es un 99% seguro que funcione como se espera, pero en el caso de los heroes podria llegar a variar, bueno, sin mas rodeos, les dejo los pasos a seguir.
Primero que nada, todo se realiza a traves del "Analizador de Consultas" y tienen que seleccionar la db en la cual van a correr las consultas (yo seleccione "MuOnline" porque es una db con la que pruebo estas pequeñeces)
1- Crear las tablas en la base de datos:
USE MuOnline
ALTER TABLE dbo.[Character] add PkTotal int not null default 0
ALTER TABLE dbo.[Character] add PkMensual int not null default 0
ALTER TABLE dbo.[Character] add PkSemanal int not null default 0
2- Creamos el trigger:
CREATE TRIGGER [dbo].[RankingPK] ON [dbo].[Character]
FOR Update
AS
BEGIN
SET NOCOUNT ON;
-- =============================================
-- Author: <kind>
-- Create date: <09/07/2015>
-- Description: <Obtiene los valores de PkCount y los guarda en otras columnas>
-- =============================================
DECLARE @accountid varchar(10)
DECLARE @ranknew int
DECLARE @rankold int
DECLARE @rankdif int
DECLARE @name varchar(10)
SELECT @ranknew = PkCount, @name = Name, @accountid = AccountID FROM INSERTED
SELECT @rankold = PkCount, @name = Name, @accountid = AccountID FROM DELETED
END
IF (@ranknew != @rankold)
BEGIN
SET @rankdif = @ranknew - @rankold
UPDATE Character SET PkTotal = PkTotal + @rankdif, PkSemanal = PkSemanal + @rankdif, PkMensual = PkMensual + @rankdif WHERE Name = @name
IF @ranknew = -3
BEGIN
UPDATE character SET PkCount = 0 WHERE Name = @name
END
IF @ranknew = 100
BEGIN
UPDATE character SET PkCount = 0 WHERE Name = @name
END
END
Solamente eso es necesario para aumentar el limite de kills almacenadas en la db, basicamente lo que hace el script es tomar los valores del PkCount ni bien se actualiza la tabla, y los agrega a las tablas creadas (PkTotal,PkMensual y PkSemanal). En el caso de que el personaje sea Heroe y tenga ya "-3" (el limite que se guarda), vuelve el valor de PkCount a 0, para poder seguir almacenando los kills de los heroes.
Para verificar que el script funciona basta con editar el PkCount de algun personaje, o entrar al juego y matar a alguien:
UPDATE Character SET PkCount = 3 WHERE Name = 'NombrePj'
Y luego la siguiente para ver si sumo o no los kills:
SELECT TOP 10 Name,PkTotal,PkSemanal,PkMensual FROM Character ORDER BY PkTotal DESC
Para mostrarlos despues en la pagina web, basta alterar todos los campos donde figure PkCount por PkTotal. Ya si quieren crear un sistema de rankings mensuales y semanales tendran que crear tareas que se ejecuten mensualmente/semanalmente borrando los valores de las tablas PkMensual y PkTotal.
CREDITOS :
kind
Espero que les sirva, SALUDOS!!!