Süper ACCONT_LOGIN Prosedürü [ Ekstra Ayarlamalar + Detaylar ]

    Paylaş
    avatar
    Admin
    YöneticiYönetici

    Erkek
    Mesaj Sayısı : 677
    Yaş : 27
    Nerden : çanakkale
    İş/Hobiler : öğrenci
    Lakap : webci
    Ruh Hali :
    işletim sistemin :
    Seviye :
    Madalyaların :
    Metin Alanı :
    Vatanını Seven Görevini En İyi Yapandı®.ElitSepet TeaM<<<< YÖNETİCİ

    Sanal Hayvan :
    Rap Derecesi :
    Kayıt tarihi : 15/07/08

    Rap Puanın
    Aktiflik:
    4999/5000  (4999/5000)
    Başarı puanı:
    98787/98787  (98787/98787)
    Güçlülük :
    4999/5000  (4999/5000)

    Süper ACCONT_LOGIN Prosedürü [ Ekstra Ayarlamalar + Detaylar ]

    Mesaj tarafından Admin Bir C.tesi Kas. 29, 2008 8:46 am

    Kolaylık olsun diye hazırladığım bir account_login projesi.Özellikleri :

    - Ayarlamalı Oto Master
    - Ayarlamalı Oto Uyelik
    - Ayarlamalı IP Ban
    - Ayarlamalı Server Limit
    - Ayarlamalı Account Ban
    - Ayarlamalı Bakım Modu
    - Detaylı Bilgilendirme
    - Problemsiz


    Öncelikle şunu söyeyim prosedürde ayarlayabileceğiniz özellikler en yukarıda belirtilmiştir :

    SET @OtoMaster = 0 ( Oto masterı kapatır ) , 1 ( Oto masterı açar )
    SET @OtoUyelik = 0 ( Oto uyeliği kapatır ) , 1 ( oto üyeliği açar )
    SET @AccountBan = 0 ( Account Ban özelliğini kapar ) , 1 ( Account ban özelliğini açar )
    SET @IPBan = 0 ( IP Ban sistemini kapar ) , 1 ( IP Ban sistemini açar )
    SET @ServerLimit = 0 ( Servera Herkes Girebilir ) , 0 Harici bir değer ( Server Giriş Limiti girdğiniz sayı olur )
    SET @Bakim = 0 ( Servera herkes giriş yapabilir ) , 1 ( Servera sadece gm karakteri olanlar giriş yapabilir )

    Kısacası 1 aktifleştirir , 0 pasifleştirir ..

    Tablolarımız :

    BLOCK_IP = Numara (nvarchar 21)
    BLOCK_ACCOUNT = strAccountID = (nvarchar 21)

    Yukarıdaki 2 tabloyu oluşturduktan sonra prosedürleri aşağıdaki gibi değiştiriyoruz :

    PROC_INSERT_CURRENTUSER


    Kod:
    CREATE PROCEDURE PROC_INSERT_CURRENTUSER
    @AccountID    varchar(50),
    @CharID        varchar(50),
    @ServerNo    int, 
    @ServerIP      varchar(50),
    @ClientIP      varchar(50),
    @nret smallint output 
    AS
    -- Ip Ban System by Trayhoper

    DECLARE @Sayi int
    SELECT @Sayi = count(Numara) FROM BLOCK_IP WHERE Numara = @ClientIP
    IF @Sayi > 0 
        BEGIN
            SET @nRet = 0
        RETURN
    END

    ELSE IF @Sayi = 0
        BEGIN
              INSERT INTO CURRENTUSER (nServerNo, strServerIP,  strAccountID, strCharID, strClientIP )  Values  (@ServerNo, @ServerIP, @AccountID, @CharID, @ClientIP )
        UPDATE TB_USER Set IP = @ClientIP WHERE strAccountID = @AccountID
            SET @nRet = 1
        RETURN
    END
    GO 

    ACCOUNT_LOGIN





    Kod:
    --Hazırlayan Trayhoper
    CREATE PROCEDURE ACCOUNT_LOGIN
    @AccountID    varchar(21),
    @Password    varchar(13),
    @nRet        smallint    OUTPUT

    AS
    DECLARE @OtoUyelik int,@ServerLimit int,@AccountBan int,@IPBan int,@OtoMaster int,@Bakim int
    SET @AccountBan = 0
    SET @IPBan = 0
    SET @ServerLimit = 800
    SET @OtoUyelik = 0
    SET @OtoMaster = 0
    SET @Bakim = 0
    -- Oto Uyelik
    IF @OtoUyelik = 1
        BEGIN
            SELECT @nRet = count(strAccountID) from TB_USER WHERE strAccountID = @AccountID
                IF NOT exists(SELECT strAccountID FROM TB_USER WHERE strAccountID = @AccountID)
                        insert into TB_USER (strAccountID, strPassWd, strSocNo, idays) values (@AccountID, @password, 1, '6')
    END   
    -- Oto Uyelik
    -- Server Limit
    DECLARE @Oyuncu int,@pwd varchar(13)
    SET @pwd = null
    IF NOT @ServerLimit = 0
        BEGIN
            SELECT @Oyuncu = Count(*) From CURRENTUSER
            IF @Oyuncu <= @ServerLimit
                BEGIN
                    SELECT @pwd = strPassWd FROM [dbo].[TB_USER] WHERE strAccountID = @AccountID
            END
        ELSE IF @Oyuncu > @ServerLimit
            BEGIN
                    SELECT @pwd = strPassWd FROM [dbo].[TB_USER] WHERE strAccountID = @AccountID and Premium > 0
        END
    END
    -- Server Limit
    -- Account Ban
    IF @AccountBan = 1
        BEGIN
            IF exists(SELECT strAccountID FROM BLOCK_ACCOUNT WHERE strAccountID = @AccountID)
                SET @nRet = 4
        RETURN
    END
    -- Accont Ban
    -- IP Ban 
    DECLARE @CharIP varchar(50)
    SELECT @CharIP = IP FROM TB_USER WHERE strAccountID = @AccountID
    IF @IPBan = 1
        BEGIN
            IF exists(SELECT Numara FROM BLOCK_IP WHERE Numara = @CharIP)
                SET @nRet = 4
    END   
    -- IP Ban
    -- Oto Master
    DECLARE @CharID1 varchar(21),@CharID2 nvarchar(21),@CharID3 nvarchar(21)
    SELECT @CharID1 = strCharID1,@CharID2 = strCharID3,@CharID3 = strCharID3 FROM ACCOUNT_CHAR WHERE strAccountID = @AccountID
    IF @OtoMaster = 1
        BEGIN
           
                UPDATE USERDATA SET class = class + 1 where class % 2 != 0 and level > 59 and strUserID = @CharID1
                UPDATE USERDATA SET class = class + 1 where class % 2 != 0 and level > 59 and strUserID = @CharID2
                UPDATE USERDATA SET class = class + 1 where class % 2 != 0 and level > 59 and strUserID = @CharID3
    END
    -- Oto Master
    -- Bakım Modu
    DECLARE @CharID1Au int,@CharID2Au int,@CharID3Au int
    SELECT @CharID1Au = Authority FROM USERDATA WHERE strUserID = @CharID1
    SELECT @CharID2Au = Authority FROM USERDATA WHERE strUserID = @CharID2
    SELECT @CharID3Au = Authority FROM USERDATA WHERE strUserID = @CharID3
    IF @Bakim = 1
        IF NOT @CharID1Au = 0 OR NOT @CharID2Au = 0 OR NOT @CharID3Au = 0
            BEGIN
                SET @nRet = 4
            RETURN
    END

    -- Bakım Modu
    DECLARE @Nation tinyint, @CharNum smallint,@Game int,@Limit int
    SET @Nation = 0
    SET @CharNum = 0

    -- Şifre Bölümü Boşsa
    IF @pwd IS null
        BEGIN
            SET @nRet = 3
        RETURN
    END
    -- Şifre Yanlışsa
        ELSE IF @pwd <> @Password
            BEGIN
                SET @nRet = 3
            RETURN
    END
    -- Hesap Kullanımdaysa
        ELSE IF exists(SELECT strAccountID FROM CURRENTUSER WHERE strAccountID = @AccountID)
            BEGIN
                SET @nRet = 5
        RETURN
    END
    -- Hesap Yoksa
        ELSE IF NOT exists(SELECT strAccountID FROM TB_USER WHERE strAccountID = @AccountID)
            BEGIN
                SET @nRet = 2
        RETURN
    END

    SELECT @Nation = bNation, @CharNum = bCharNum FROM ACCOUNT_CHAR WHERE strAccountID = @AccountID
    IF @@ROWCOUNT = 0
        BEGIN
            SET @nRet = 1
        RETURN
    END
    IF @CharNum = 0
        BEGIN
            SET @nRet = 1
        RETURN
    END
    ELSE
        BEGIN
            SET @nRet = @Nation + 1
        RETURN
    END
    GO 

    TB_USER tablosunda IP sekmesi bulunmalıdır.Çoğu db de vardır ama olmayanlarda TB_USER'a sağ tıklayıp design table a basarak IP sekmesini nvarchar(16) şeklinde ekleyebilirler ..

    Altını çizmek istiyorum vista kullandığım için prosedürü deneyemedim.Yanlış şifre girildiğinde yanlış şifre uyarısı , hesap bulunamadığında hesap yok hatası vb. bütün hatalar ayarlıdır.

    Local serverlarınızda deneyip sonuçları buraya yazarsanız sevinirim .. Daha önceki IP Ban Sistemi konumdakileri uygulayan arkadaşların yeni tablo eklemesine gerek yok fakat prosedürü üzerine tekrar kopyalamaları gerekiyor !

      Forum Saati C.tesi Ara. 15, 2018 3:00 am