28-11-2016, 08:10 PM   #6

Dev.Ri3o



  Dev.Ri3o


Apr 2015
121546
4,029
https://t.me/pump_upp
MIS
No Server
Male
45
Dev.Ri3o

Dev.Ri3o


   ICQ  Dev.Ri3o    AIM  Dev.Ri3o    Yahoo  Dev.Ri3o

: 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


Dev.Ri3o :
,,, [ ]