Kayıt Ol
[-]
monetization_on Reklam Alanı
Reklam vermek istiyorum?

TOPLAMA PET BUGUNU ÖNLEME


view_headline Konu
15.07.2016, Saat: 14:37
#1
HistoricaL
HistoricaL
Konuları:
24
Yorumları:
973
Kayıt Tarihi:
25.07.2015
Rep Puanı:
61
verified_user Yönetici
TOPLAMA PET BUGUNU ÖNLEME
Arkadaşlar merhaba,
Bazı serverlerde toplama petlerini 5 liste vs yaparlar. Bu tamamen büyük bir hatadır. Çünkü 5 liste yapılan petler potansiyel bug sebebidir. 
Bug derken neyi kastediyorum? 
Arkadaşlar birçoğunuz rast gelmişinizdir. GM derki PETLER BUGA GİRMİŞ BUGLU PET OYUNA GİRİNCE OYUN CHECK OLUYOR..
İşte bunun sebebi 5 liste olan toplama petlerinden sadece 1 tanesinin buga girmesi ile birlikte gameserver'e hata göndererek Gameserver'i kapamasıdır.

Peki bu bug'dan nasıl korunacaksınız? 
Tek çözümü var oda ASLA petleri 5 liste yapmayacaksınız ve hatta petlerin sayfası ile ilgili hiçbir değişim yapmayacaksınız.
Bunu bilen arkadaşlar zaten prosedürlerini düzenleyecektir ama bilmeyenler için ben 2 prosedür vericem. Bunları ayrı ayrı 2 adet New Query açarak içine yapıştırın ve F5 ile okutun.
Bu query'ler orjinaldir. Yani editle pet listeleri bozulmamıştır.
Dipnot: Prosedür-1'de kervan petleri ile yapılan bir bugu önleyici korumada mevcuttur. Bir taşla iki kuş Wink


Prosedür-1
Kod:
USE [SRO_VT_SHARD]
GO
/****** Object:  StoredProcedure [dbo].[_AddNewCOS]    Script Date: 15.07.2016 13:31:41 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[_AddNewCOS]
    @OwnerCharID    int,
    @RefObjID    int,
    @Level        int,
    @HP        int,
    @MP        int,
    @HGP        int,
    @KeeperNPC    int,
    @State        int,
    @InventorySize  int,
    @itemID        int,
    @PickItemConfig tinyint,
    @RentEndTime     smalldatetime
as

begin tran

    declare @COS_ID    int
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
--        pet_skill_item (ÃÖ¼±È£)        
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

    declare @MaxInventorySize tinyint
    select @MaxInventorySize = InventorySize
    from _RefObjCommon, _RefObjChar
    where _RefObjCommon.ID = @RefObjID and _RefObjCommon.Link = _RefObjChar.ID
    
    if( @@rowcount = 0 or @MaxInventorySize < @InventorySize )
    begin
        rollback tran
        return -5
    end

    insert into _CharCOS values (@OwnerCharID, @RefObjID, @HP, @MP, @KeeperNPC, @State, NULL, @Level, 0, @HGP, @PickItemConfig, @RentEndTime)
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    set @COS_ID = @@identity
    if (@COS_ID = 0 OR @@error <> 0)
    begin
        rollback tran
        return -1
    end

--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
--        pet_skill_item (ÃÖ¼±È£)        
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    if (@MaxInventorySize > 0)
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    begin
        declare @Slot  int
        set @Slot = 0
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
--        pet_skill_item (ÃÖ¼±È£)        
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
        while (@Slot < @MaxInventorySize)
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
        begin
            insert into _InvCOS values(@COS_ID, @Slot, 0)
            if (@@error <> 0)
            begin
                -- Àκ¥Å丮 »ý¼º ½ÇÆÐ!
                rollback tran
                return -2
            end    
        
            set @Slot = @Slot + 1
        end
    end
    
/*    --´õ ÀÌ»ó ÀÌ Ä÷³¿¡´Â µ¥ÀÌÅ͸¦ ³ÖÁö ¾Ê´Â´Ù!
    UPDATE _Char SET EngagedCOS = @COS_ID WHERE CharID = @OwnerCharID
    IF (@@ERROR <> 0 OR @@ROWCOUNT = 0)
    BEGIN
        ROLLBACK TRANSACTION
        RETURN -3
    END
*/
    if( @itemID <> 0 )
    begin
        update _Items set Data = @COS_ID where ID64 = @itemID
        if( @@error <> 0 or @@rowcount = 0 )
        begin
            rollback transaction
            return -4
        end
        
    end

commit tran

declare @bla varchar(max);

select @bla = codename128 from _refobjcommon where ID = @ReFObjID

if @bla like '%COS_T%'

begin

WAITFOR DELAY '0:00:00.5' --süre

END

return @CoS_ID

Prosedür-2
Kod:
USE [SRO_VT_SHARD]
GO
/****** Object:  StoredProcedure [dbo].[_AddTimedJobForPet]    Script Date: 15.07.2016 13:31:48 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO



--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
--    pet_skill_item (ÃÖ¼±È£)        
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

ALTER PROCEDURE [dbo].[_AddTimedJobForPet]
    @CharID            int,
    @Category        tinyint,
    @JobID            int,
    @TimeToKeep        int,
    @Data1            int,
    @Data2            int,
    @Data3            int,
    @Data4            int,
    @Data5            int,
    @Data6            int,
    @Data7            int,
    @Data8            int,
    @Serial64        bigint
as
    if (not exists (select ID from _CharCOS with (nolock) where ID = @CharID))
        return -1

    if (@TimeToKeep <= 0)
        return -2

    declare @NewJobID int
    set @NewJobID = 0

    insert into _TimedJobForPet values(@CharID, @Category, @JobID, @TimeToKeep, @Data1, @Data2, @Data3, @Data4, @Data5, @Data6, @Data7, @Data8, @Serial64, 0)
    set @NewJobID = @@identity

    if (@@error <> 0 or @@rowcount = 0)
        return -3

    return @NewJobID

--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
İmza: @HistoricaL
Cevapla



Hızlı Menü:



[-]
monetization_on Reklam (728x90)
Reklam Ver
Reklam vermek istiyorum?