28-11-2016, 08:10 PM
|
#6
|
|
Apr 2015
|
121546
|
4,029
|
https://t.me/pump_upp
|
MIS
|
No Server
|
Male
|
45
|
|
|
: Bug with ShardManager
:
USE [SRO_VT_SHARD]
GO
/****** Object: StoredProcedure [dbo].[_DeleteCharPermanently] Script Date: 02/14/2012 12:54:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
--!!!CHECK!!!
ALTER PROCEDURE [dbo].[_DeleteCharPermanently]
@CharID as int
as
------------------------------------
-- 일단 **된 캐*인지 부터 검사!
------------------------------------
if (not exists(select charid from _deletedchar where charid = @CharID))
begin
return -1
end
------------------------------------
-- **후 경과된 시간이 대략 7일이 맞는가 확인 (샤드에 혹시 버그가 있을지 모르니깐...)
------------------------------------
declare @deleted_date datetime
declare @cur_date datetime
declare @elapsed_min int
declare @UserJID int
-- declare @deleted_slot int
set @cur_date = getdate()
select @UserJID = UserJID, /*@deleted_slot = CharSlot,*/ @deleted_date = deleteddate from _deletedchar with (nolock) where charid = @CharID
-- **시킨지 6일 + 23시간 이상이 지난 캐*인가? (1시간 *도의 오차라면 인*해 준다 냐하~)
set @elapsed_min = datediff(minute, @deleted_date, @cur_date)
if (@elapsed_min < ((60 * 24 * 6) + (60 * 23)))
begin
return -2
end
------------------------------------
-- **된 캐*이 맞는지 다시한번 확인
------------------------------------
declare @is_deleted tinyint
select @is_deleted = deleted from _Char where CharID = @CharID
if (@is_deleted <> 1)
begin
return -3
end
------------------------------------
-- 지울 캐*이 _User 에 있는 CharID와 일치하는가 검사
------------------------------------
declare @char_id_to_check int
set @char_id_to_check = 0
/* -- commented by novice. for server integration.
if (@deleted_slot = 0)
begin select @char_id_to_check = CharID1 from _User where UserJID = @UserJID end
else if (@deleted_slot = 1)
begin select @char_id_to_check = CharID2 from _User where UserJID = @UserJID end
else if (@deleted_slot = 2)
begin select @char_id_to_check = CharID3 from _User where UserJID = @UserJID end
else
begin
return -4
end
-- 켁! 어떻게 된거야? 이상한 넘이 자리를 차지하* 있다!
if (@char_id_to_check <> @CharID)
begin
return -5
end
*/
-- start by novice.
select @char_id_to_check = CharID from _User where UserJID = @UserJID and CharID = @CharID
if (@char_id_to_check = 0)
begin
-- 지울 캐*터가 _User 에 없어?
return -5
end
-- finish by novice.
begin transaction
declare @GuildID int
exec @GuildID = _DeleteCharPermanently_NoTX @UserJID, @CharID --, @deleted_slot
if (@GuildID is null)
set @GuildID = -10000
if (@GuildID < 0)
begin
rollback transaction
return @GuildID
end
commit transaction
return @GuildID
:
USE [SRO_VT_SHARD]
GO
/****** Object: StoredProcedure [dbo].[_DeleteCharPermanently_NoTX] Script Date: 02/14/2012 12:54:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [dbo].[_DeleteCharPermanently_NoTX]
@UserJID INT
, @CharID INT
AS
------------------------------------
-- Inventory È¿¡ ¡Áö* ÀÖø ÆÀÌÅÛ ÁöÀÚ...
------------------------------------
-------------- Æ ÒÈ ÆÀÌÅÛºÎÅÍ ÀÏÜ Á ----------------
declare @result int
declare @Slot tinyint
declare @RefItemID int
declare pc_inv_cursor cursor fast_forward for
select inv.slot
from _Inventory as inv join _Items as it on inv.ItemID = it.ID64
where
(inv.CharID = @CharID and inv.Slot >= 13 and inv.ItemID > 0) and -- Àåºñà Á¿ÜÇÏ* ÆÀÌÅÛ ÀÖ øö ÀκÅä È¿¡ ÀÖÀ
(it.Data <> 0) and -- ÒÈö ¡Áö* ÀÖÂ
(exists (select top 1 ID from _RefObjCommon where ID = it.RefItemID and TypeID1 = 3 and TypeID2 = 2)) -- ÆÒÈ ÆÀÌÅÛ ÃÆÁ~
open pc_inv_cursor
fetch next from pc_inv_cursor into @slot
while @@fetch_status = 0
begin
exec @result = _STRG_DEL_ITEM_NoTX 1, @CharID, @Slot
if (@result < 0)
begin
close pc_inv_cursor
deallocate pc_inv_cursor
return @result
end
fetch next from pc_inv_cursor into @Slot
end
close pc_inv_cursor
deallocate pc_inv_cursor
------------------- Àº ÆÀÌÅÛ Ã Á -------------------
-- ÆÀÌÅÛÀÌ ÇϪó ÀÖÙ...
if (exists (select top 1 itemID from _Inventory where CharID = @CharID AND ItemID <> 0))
begin
update _ItemPool Set InUse = 0
from _ItemPool as pool join _Inventory as inv on pool.ItemID = Inv.ItemID
where Inv.CharID = @CharID and Inv.ItemID <> 0
end
----------- ÆÀÌÅÛ ÈÀÏ ÃÖÁÀÀ ÀκÅä Á ------------
delete from _Inventory where CharID = @CharID
if (@@error <> 0)
begin
return -10001
end
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-- APPLY_AVATAR_SYSTEM (Çã¿*)
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
------------------- Àº ÆÙÅ ÀκÅä ÆÀÌÅÛ Ã Á -------------------
-- ÆÀÌÅÛÀÌ ÇϪó ÀÖÙ...
if (exists (select top 1 itemID from _InventoryForAvatar where CharID = @CharID AND ItemID <> 0))
begin
update _ItemPool Set InUse = 0
from _ItemPool as pool join _InventoryForAvatar as InvAva on pool.ItemID = InvAva.ItemID
where InvAva.CharID = @CharID and InvAva.ItemID <> 0
end
----------- ÆÀÌÅÛ ÈÀÏ ÃÖÁÀÀ ÆÙÅ ÀκÅä Á ------------
delete from _InventoryForAvatar where CharID = @CharID
if (@@error <> 0)
begin
return -10008
end
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-- APPLY_AVATAR_SYSTEM (Çã¿*)
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
------------------------------------
-- COS Á
------------------------------------
/*
declare @engaged_cos int
set @engaged_cos = 0
select @engaged_cos = EngagedCOS from _char with (nolock) where CharID = @CharID
if (@engaged_cos = 0)
begin
-- ¿Ö ßýÇÏ Áö Àß ðÚÁö... ÆÁÖ åÔ COS ÆÀÖ æ¿ì¡ ÀÖõó*... -_-;
select @engaged_cos = ID from _CharCOS with (nolock) where OwnerCharID = @CharID
if (@engaged_cos is null)
set @engaged_cos = 0
end
if (@engaged_cos is not null and @engaged_cos <> 0)
begin
declare @Return_Del_COS int
exec @Return_Del_COS = _DeleteCharCOS_NoTX @CharID, @engaged_cos
if (@Return_Del_COS < 0)
begin
return -10002
end
end
*/
------------------------------------
-- Trijob ÀÌÅÍ Á
------------------------------------
delete from _CharTrijob where CharID = @CharID
------------------------------------
-- ºÅ Á
------------------------------------
delete _CharSkill where CharId = @CharID
delete _CharSkillMastery where charId = @CharID
------------------------------------
-- ÄºÆ Á
------------------------------------
delete _CharQuest where CharID = @CharID
------------------------------------
-- æå ö Á
------------------------------------
-- !!! ¿* Guild ö Á¡ ÀϪÁö ÊÀ ShardManager ¿¡*
-- _Guild_DelMember ÈÃÇØ ÁÖÏ öÁÇØß ÇÑÙ! ÁöÝÀº úÁÀº SkipÇÏ*
-- Þð¿¡* Á ÀÏªÔ Ç ÀÖÅ...
declare @GuildID int
set @GuildID = 0
select @GuildID = GuildID from _char where charid = @CharID
if (@GuildID is not null and @GuildID <> 0)
begin
if (not exists (select ID from _Guild where ID = @GuildID))
begin
update _Char set GuildID = 0 where CharID = @CharID
end
else
begin
declare @Return_Del_GuildMember int
exec @Return_Del_GuildMember = _Guild_DelMember_NoTX @GuildID, @CharID
if (@Return_Del_GuildMember < 0)
return -10003
end
end
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-- APPLY_MENTOR_SYSTEM (ÃÖÀÎÈ)
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
DECLARE @CampID INT
SET @CampID = 0
SELECT @CampID = CampID FROM _TrainingCampMember WHERE CharID = @CharID
IF (@CampID IS NOT NULL AND @CampID <> 0)
BEGIN
DECLARE @Ret_DelCampMember INT
EXEC @Ret_DelCampMember = _TRAINING_CAMP_DELMEMBER @CampID, @CharID, 0
IF (@Ret_DelCampMember < 0)
RETURN -10007
END
-- ÀÖÀ Áö¿ööÀÚ~ .
DELETE FROM _TrainingCampSubMentorHonorPoint WHERE CharID = @CharID
-- æÇÄ¡ öÇÁ ÄÚå~~
DELETE FROM _TrainingCampBuffStatus WHERE CampID = @CampID
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-- APPLY_MENTOR_SYSTEM (ÃÖÀÎÈ)
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-----------------------------------
-- Ä ºÆ Á ( ªÀÇ Ä ºÆ + ÄÀÇ Ä ºÆÁß ª )
-----------------------------------
-- Ä..
declare @FriendCharID int
declare @cursor_var cursor
set @cursor_var = cursor fast_forward
for
select FriendCharID
from _Friend
where CharID = @CharID
open @cursor_var
fetch next from @cursor_var into @FriendCharID
while( @@FETCH_STATUS = 0 )
begin
delete _Friend where CharID = @FriendCharID and FriendCharID = @CharID
fetch next from @cursor_var into @FriendCharID
end
close @cursor_var
deallocate @cursor_var
-- ª..
delete _Friend where CharID = @CharID
-----------------------------------
-----------------------------------
-- ÂÊÁö Á
-----------------------------------
delete _Memo where CharID = @CharID
------------------------------------
-- TimedJob ÁÇÏ
------------------------------------
delete _TimedJob where CharID = @CharID
------------------------------------
-- Static Avatar Áº Á
------------------------------------
delete from _staticavatar where charid = @charid
------------------------------------
-- Ó º* Áº Á
------------------------------------
delete from _BlockedWhisperers where OwnerID = @charid
------------------------------------
-- ÆÄÆÃÊ º* Áº Á 10.06.07
------------------------------------
DELETE FROM _BlockedPartyInviter WHERE CharID = @charid
------------------------------------
-- _DeletedChar Entry Á
------------------------------------
delete from _DeletedChar where CharID = @CharID
if (@@error <> 0)
begin
return -10004
end
-- start by novice.
DELETE FROM _User WHERE UserJID = @UserJID and CharID = @CharID
-- finish by novice.
------------------------------------
-- commit !!!
------------------------------------
-- ÅóÀÌðÆ¿ ÄÔ Áº ÀúÀå ÅÀ̺* !!!
exec _RemoveClientConfig @CharID -- by novice...... for saving client configurations...
return @GuildID
|
|
|