use sro_vt_shard
/*
Run this script on:
On your Shard Database.
to synchronize it with:
VSROMAX V2.0 Features.
*/
SET NUMERIC_ROUNDABORT OFF
GO
SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT, QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
SET XACT_ABORT ON
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
GO
BEGIN TRANSACTION
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Dropping foreign keys from [dbo].[_Friend]'
GO
ALTER TABLE [dbo].[_Friend] DROP CONSTRAINT [FK__Friend__Char]
GO
ALTER TABLE [dbo].[_Friend] DROP CONSTRAINT [FK__Friend__Char1]
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Dropping constraints from [dbo].[_Friend]'
GO
ALTER TABLE [dbo].[_Friend] DROP CONSTRAINT [DF___Friend__RefObjI__0D269379]
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Altering [dbo].[_GuildMember]'
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
ALTER TABLE [dbo].[_GuildMember] ADD
[LatestRegion] [smallint] NOT NULL CONSTRAINT [DF___GuildMem__Lates__3E45F22F] DEFAULT ((0)),
[LastLogout] [smalldatetime] NOT NULL CONSTRAINT [DF___GuildMem__LastL__3F3A1668] DEFAULT (getdate()),
[LastLevelup] [smalldatetime] NOT NULL CONSTRAINT [DF___GuildMem__LastL__402E3AA1] DEFAULT (getdate())
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Altering [dbo].[_Guild_FnAddMember]'
GO
ALTER PROCEDURE [dbo].[_Guild_FnAddMember]
@GuildID int, @MemberID int, @MemberClass tinyint, @JoinDate smalldatetime, @Permission int
AS
if (exists (select CharID from _GuildMember where CharID = @MemberID))
begin
return -1001
end
declare @MemberName varchar(64)
declare @CurLevel tinyint
select @MemberName = CharName16, @CurLevel = CurLevel from _Char with (nolock) where CharID = @MemberID
if (@@error <> 0 or @@rowcount = 0)
begin
return -1
end
if (exists (select CharID from _GuildMember with (nolock) where GuildID = @GuildID and CharID = @MemberID))
begin
return -2
end
declare @RefObjID int
select @RefObjID = RefObjID from _Char with (nolock) where CharID = @MemberID
if (@@error <> 0 or @@rowcount = 0)
begin
return -5
end
declare @SiegeAuthority tinyint
set @SiegeAuthority = 0
if @MemberClass = 0
begin
set @SiegeAuthority = 1
end
declare @LatestRegion smallint, @LastLogout smalldatetime;
select @LatestRegion = LatestRegion, @LastLogout = LastLogout from _char with (nolock) where charid = @MemberID;
insert _GuildMember values(@GuildID, @MemberID, @MemberName, @MemberClass, @CurLevel, 0, @JoinDate,@Permission, 0, 0, 0, null, @RefObjID, @SiegeAuthority, @LatestRegion, @LastLogout,
DATEADD(dd, -8, @LastLogout))
if (@@error <> 0 or @@rowcount = 0)
begin
return -3
end
update _Char Set GuildID = @GuildID where CharID = @MemberID
if (@@error <> 0 or @@rowcount = 0)
begin
return -4
end
return 1
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Altering [dbo].[_Friend]'
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
ALTER TABLE [dbo].[_Friend] ADD
[GroupID] [smallint] NOT NULL CONSTRAINT [DGID] DEFAULT ((0))
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
ALTER TABLE [dbo].[_Friend] ALTER COLUMN [FriendCharName] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Altering [dbo].[_Guild_RefreshMemberStatus]'
GO
SET ANSI_NULLS OFF
GO
ALTER procedure [dbo].[_Guild_RefreshMemberStatus]
@GuildID int, @MemberID int, @RefreshTarget tinyint, @Data int, @Data2 int
AS
if (@RefreshTarget = 1)
begin
if(@Data2 < @Data)
begin
update _GuildMember Set CharLevel = @Data, LastLevelup = getdate() where GuildID = @GuildID and CharID = @MemberID
end
else
begin
update _GuildMember Set CharLevel = @Data where GuildID = @GuildID and CharID = @MemberID
end
end
else if (@RefreshTarget = 2)
begin
update _GuildMember Set LastLogout = getdate() where GuildID = @GuildID and CharID = @MemberID
end
else if (@RefreshTarget = 4)
begin
update _GuildMember Set MemberClass = @Data where GuildID = @GuildID and CharID = @MemberID
end
else if (@RefreshTarget = 128)
begin
update _GuildMember Set LatestRegion = @Data where GuildID = @GuildID and CharID = @MemberID
end
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Altering [dbo].[_Guild_AddMember]'
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
ALTER procedure [dbo].[_Guild_AddMember]
@GuildID int, @MemberID int, @MemberClass tinyint, @Permission int
AS
if (not exists (select id from _Guild with (nolock) where ID = @GuildID))
begin
return -1000
end
begin transaction
declare @rvalue int
declare @JoinDate smalldatetime
set @JoinDate = GetDate()
exec @rvalue = _Guild_FnAddMember @GuildID, @MemberID, @MemberClass, @JoinDate,@Permission
if (@@error <> 0 or @rvalue <= 0)
begin
rollback transaction
return @rvalue
end
commit transaction
return 1
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Creating [dbo].[_FriendGroup]'
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[_FriendGroup]
(
[CharID] [int] NOT NULL,
[GroupID] [smallint] NOT NULL,
[GroupName] [varchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
)
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Creating index [NC_IDX_FG_CharID] on [dbo].[_FriendGroup]'
GO
CREATE NONCLUSTERED INDEX [NC_IDX_FG_CharID] ON [dbo].[_FriendGroup] ([CharID])
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Creating index [NC_IDX_FG_CharID_GroupID] on [dbo].[_FriendGroup]'
GO
CREATE NONCLUSTERED INDEX [NC_IDX_FG_CharID_GroupID] ON [dbo].[_FriendGroup] ([CharID], [GroupID])
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Creating [dbo].[_FriendGroupAdd]'
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROC [dbo].[_FriendGroupAdd]
@CharID INT
, @GroupID SMALLINT
, @GroupName VARCHAR(30)
AS
SET NOCOUNT ON
DECLARE @GroupCnt INT, @GroupMax INT;
SET @GroupMax = 20;
SELECT @GroupCnt = count(*) FROM _FriendGroup with (nolock) WHERE CharID = @CharID;
IF(@GroupCnt >= @GroupMax)
BEGIN
SET NOCOUNT OFF
RETURN 1;
END
if(exists(select GroupID from _FriendGroup with (nolock) where CharID = @CharID and GroupName = @GroupName))
BEGIN
SET NOCOUNT OFF
RETURN 2;
END
if(exists(select GroupName from _FriendGroup with (nolock) where CharID = @CharID and GroupID = @GroupID))
BEGIN
SET NOCOUNT OFF
RETURN 3;
END
INSERT _FriendGroup Values(@CharID, @GroupID, @GroupName);
SET NOCOUNT OFF
RETURN 0;
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Creating [dbo].[_FriendGroupDel]'
GO
CREATE PROC [dbo].[_FriendGroupDel]
@CharID INT
, @GroupID SMALLINT
AS
SET NOCOUNT ON
IF(@GroupID = 0)
BEGIN
RETURN 1;
END
DELETE FROM _FriendGroup WHERE CharID = @CharID AND GroupID = @GroupID;
IF(@@ROWCOUNT <> 1)
BEGIN
SET NOCOUNT OFF
RETURN 2;
END
UPDATE _Friend SET GroupID = 0 WHERE CharID = @CharID AND GroupID = @GroupID;
IF(@@ERROR <> 0)
BEGIN
SET NOCOUNT OFF
RETURN 3;
END
SET NOCOUNT OFF
RETURN 0;
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Creating [dbo].[_FriendGroupAddMember]'
GO
CREATE PROC [dbo].[_FriendGroupAddMember]
@CharID INT
, @FriendCharID INT
, @GroupID SMALLINT
AS
SET NOCOUNT ON
DECLARE @Num INT;
SELECT @Num = COUNT(*) FROM _FriendGroup with (nolock) WHERE CharID = @CharID AND GroupID = @GroupID;
IF(@Num <> 1)
BEGIN
SET NOCOUNT OFF
RETURN 1;
END
UPDATE _Friend SET GroupID = @GroupID WHERE CharID = @CharID AND FriendCharID = @FriendCharID;
IF(@@ROWCOUNT <> 1)
BEGIN
SET NOCOUNT OFF
RETURN 2;
END
SET NOCOUNT OFF
RETURN 0;
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Altering [dbo].[_Friend_Add]'
GO
ALTER PROC [dbo].[_Friend_Add]
@CharID INT
, @MyrName VARCHAR(64)
, @FriendCharID INT
, @FriendCharName VARCHAR(64)
as
DECLARE @friend_count INT, @friend_max INT;
SET @friend_max = 50;
SET @friend_count = (SELECT COUNT(*) FROM _Friend WHERE CharID = @CharID)
IF(@friend_count >= @friend_max)
BEGIN
RETURN -1000
END
IF( EXISTS( SELECT FriendCharID FROM _Friend WITH (NOLOCK) WHERE CharID = @CharID and FriendCharID = @FriendCharID ) )
BEGIN
RETURN -1001
END
SET @friend_count = ( SELECT COUNT(*) FROM _Friend WHERE CharID = @FriendCharID )
IF( @friend_count >= @friend_max )
BEGIN
RETURN -1002
END
IF( EXISTS( SELECT FriendCharID FROM _Friend WITH (NOLOCK) WHERE CharID = @FriendCharID AND FriendCharID = @CharID ))
BEGIN
RETURN -1003
END
DECLARE @MyRefObjID INT, @FriendRefObjID INT;
SELECT @MyRefObjID = RefObjID FROM _Char WITH (NOLOCK) WHERE CharID = @CharID;
IF (@@ERROR <> 0 or @@ROWCOUNT = 0)
BEGIN
RETURN -1004
END
SELECT @FriendRefObjID = RefObjID FROM _Char WITH (NOLOCK) WHERE CharID = @FriendCharID;
IF (@@ERROR <> 0 or @@ROWCOUNT = 0)
BEGIN
RETURN -1005
END
BEGIN TRANSACTION
INSERT _Friend( CharID,FriendCharID,FriendCharName, RefObjID, GroupID) VALUES (@CharID,@FriendCharID,@FriendCharName, @FriendRefObjID, 0)
IF (@@ERROR <> 0 or @@ROWCOUNT = 0 )
BEGIN
ROLLBACK TRANSACTION
RETURN -1
END
INSERT _Friend( CharID,FriendCharID,FriendCharName, RefObjID, GroupID) VALUES ( @FriendCharID, @CharID, @MyrName, @MyRefObjID, 0 )
IF (@@ERROR <> 0 or @@ROWCOUNT = 0 )
BEGIN
ROLLBACK TRANSACTION
RETURN -2
END
COMMIT TRANSACTION
RETURN 1
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Creating [dbo].[_BlockedPartyInviter]'
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[_BlockedPartyInviter]
(
[CharID] [int] NOT NULL,
[BlockedName] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
)
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Creating index [BP_NIDX_CID_BN] on [dbo].[_BlockedPartyInviter]'
GO
CREATE NONCLUSTERED INDEX [BP_NIDX_CID_BN] ON [dbo].[_BlockedPartyInviter] ([CharID], [BlockedName])
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Creating [dbo].[_BlockedPartyInviter_Add]'
GO
CREATE PROCEDURE [dbo].[_BlockedPartyInviter_Add]
@CharID INT
, @BlockedName VARCHAR(64)
AS
SET NOCOUNT ON
DECLARE @_GM_ VARCHAR(10)
SET @_GM_ = LEFT(@BlockedName, 4)
IF(@_GM_ = '[GM]')
RETURN 4
IF( EXISTS( SELECT 1 FROM _BlockedPartyInviter WITH (NOLOCK) WHERE CharID = @CharID and BlockedName = @BlockedName ) )
RETURN 2
IF( NOT EXISTS( SELECT 1 FROM _CharNameList WITH (NOLOCK) WHERE CharName16 = @BlockedName) )
RETURN 3
DECLARE @blocked_count INT
SET @blocked_count = (SELECT COUNT(1) FROM _BlockedPartyInviter WHERE CharID = @CharID)
IF( @blocked_count >= 20 )
RETURN 1
INSERT _BlockedPartyInviter VALUES(@CharID, @BlockedName)
IF (@@error <> 0 or @@rowcount = 0 )
RETURN 5
RETURN 100
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Creating [dbo].[_BlockedPartyInviter_Remove]'
GO
CREATE PROCEDURE [dbo].[_BlockedPartyInviter_Remove]
@CharID INT
, @BlockedName VARCHAR(64)
AS
SET NOCOUNT ON
DELETE FROM _BlockedPartyInviter WHERE CharID = @CharID AND BlockedName = @BlockedName
IF (@@error <> 0)
RETURN 2
ELSE IF (@@rowcount = 0)
RETURN 1
RETURN 100
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Altering [dbo].[_AddNewChar]'
GO
ALTER PROCEDURE [dbo].[_AddNewChar]
@UserJID INT,
@RefCharID INT,
@CharName varchar (64),
@CharScale tinyINT,
@StartRegionID INT,
@StartPos_X real,
@StartPos_Y real,
@StartPos_Z real,
@DefaultTeleport INT,
@RefMailID INT,
@RefPantsID INT,
@RefBootsID INT,
@RefWeaponID INT,
@RefShield INT,
@DurMail tinyINT,
@DurPants tinyINT,
@DurBoots tinyINT,
@DurWeapon tinyINT,
@DurShield tinyINT,
@DefaultArrow INT
AS
SET NOCOUNT ON
DECLARE @Slot INT
DECLARE @temp INT
DECLARE @NewCharID INT
SET @NewCharID = 0
SELECT @temp = count(CharID) FROM _User WITH (NOLOCK) WHERE UserJID = @UserJID
IF (@temp >= 4)
BEGIN
RETURN -2
END
IF (@CharScale > 68)
BEGIN
RETURN -3
END
EXEC @temp = _IsExistingCharName @CharName
IF (@temp <> 0)
BEGIN
RETURN -4
END
BEGIN TRANSACTION
INSERT INTO _Char (RefObjID, CharName16, Scale, Strength, Intellect, LatestRegion,PosX, PosY, PosZ, AppointedTeleport, InventorySize,
LastLogout, CurLevel, MaxLevel, RemainGold, RemainStatPoint, RemainSkillPoint, HP, MP, JobLvl_Trader, JobLvl_Hunter, JobLvl_Robber, WorldID)
VALUES (@RefCharID, @CharName, @CharScale, 20, 20, @StartRegionID, @StartPos_X, @StartPos_Y, @StartPos_Z, @DefaultTeleport, 45,
GetDate(), 1, 1, 0, 0, 0, 200,200, 1, 1, 1, 1)
SET @NewCharID = @@IDENTITY
IF (@@ERROR <> 0 OR @@ROWCOUNT = 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -5
END
INSERT INTO _User VALUES (@UserJID, @NewCharID)
INSERT INTO _Inventory(CharID, Slot, ItemID)
SELECT @NewCharID, cnt, 0
FROM _RefDummySlot with( nolock )
WHERE cnt < 109
IF (@@ERROR <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -7
END
DECLARE @ItemID BIGINT
SET @ItemID = 0
IF (@RefMailID <> 0)
BEGIN
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 1, @RefMailID, @DurMail
IF (@ItemID <= 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -8
END
END
IF (@RefPantsID <> 0)
BEGIN
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 4, @RefPantsID, @DurPants
IF (@ItemID <= 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -9
END
END
IF (@RefBootsID <> 0)
BEGIN
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 5, @RefBootsID, @DurBoots
IF (@ItemID <= 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -10
END
END
IF (@RefWeaponID <> 0)
BEGIN
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 6, @RefWeaponID, @DurWeapon
IF (@ItemID <= 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -11
END
END
IF (@RefShield <> 0)
BEGIN
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 7, @RefShield, @DurShield
IF (@ItemID <= 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -12
END
END
IF (@DefaultArrow <> 0)
BEGIN
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 7, @DefaultArrow, 250
IF (@ItemID <= 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -13
END
END
INSERT INTO _InventoryForAvatar(CharID, Slot, ItemID)
SELECT @NewCharID, cnt, 0
FROM _RefDummySlot with( nolock )
WHERE cnt < 5
IF (@@ERROR <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -14
END
DECLARE @country tinyINT
EXEC @country = _GetObjCountry @RefCharID
INSERT INTO _CharSkillMastery (CharID, MasteryID, Level)
SELECT @NewCharID, MasteryID, 0
FROM _RefCharDefault_SkillMastery with(nolock)
WHERE Race = @country or Race = 3
IF (@@error <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -15
END
INSERT INTO _CharSkill (CharID,SkillID,Enable)
SELECT @NewCharID, SkillID, 1
FROM _RefCharDefault_Skill with(nolock)
WHERE Race = @country or Race = 3
IF (@@error <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -16
END
INSERT INTO _CharQuest (CharID, QuestID, Status, AchievementCount, StartTime, EndTime, QuestData1, QuestData2)
SELECT @NewCharID, ID, 1, 0, getdate(), getdate(), 0, 0
FROM _RefQuest
WHERE CodeName in (SELECT CodeName FROM _RefCharDefault_Quest with(nolock) WHERE (Race = @country or Race = 3) and RequiredLevel = 1 and Service = 1)
IF (@@error <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -17
END
INSERT INTO _StaticAvatar(CharID) values(@NewCharID)
IF (@@ERROR <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -18
END
INSERT INTO _CharTrijob VALUES (@NewCharID, 0, 1, 0, 0, 0)
IF (@@ERROR <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -19
END
INSERT _FriendGroup Values (@NewCharID, 0, 'Unclassified')
IF (@@ERROR <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -20
END
INSERT _CharNameList VALUES(@CharName, @NewCharID)
exec _ADD_ITEM_EXTERN @CharName,'ITEM_ETC_E060118_60EXP_HELP',1,1
exec _ADD_ITEM_EXTERN @CharName,'ITEM_ETC_E060118_100EXP_HELP',1,1
exec _ADD_ITEM_EXTERN @CharName,'ITEM_ETC_SCROLL_RETURN_NEWBIE_01',20,1
exec _AddNewClientConfig @NewCharID
COMMIT TRANSACTION
RETURN @NewCharID
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Adding constraints to [dbo].[_Friend]'
GO
ALTER TABLE [dbo].[_Friend] ADD CONSTRAINT [DF___Friend__RefObjI__5AE230DD] DEFAULT ((0)) FOR [RefObjID]
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Adding foreign keys to [dbo].[_Friend]'
GO
ALTER TABLE [dbo].[_Friend] ADD CONSTRAINT [FK___Friend__FriendC__5CCA794F] FOREIGN KEY ([FriendCharID]) REFERENCES [dbo].[_Char] ([CharID])
GO
ALTER TABLE [dbo].[_Friend] ADD CONSTRAINT [FK___Friend__CharID__5BD65516] FOREIGN KEY ([CharID]) REFERENCES [dbo].[_Char] ([CharID])
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Altering permissions on [dbo].[_Friend]'
GO
REVOKE SELECT ON [dbo].[_Friend] TO [public]
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
COMMIT TRANSACTION
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
DECLARE @Success AS BIT
SET @Success = 1
SET NOEXEC OFF
IF (@Success = 1) PRINT 'The database update succeeded'
ELSE BEGIN
IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION
PRINT 'The database update failed'
END
GO