Restructure repository to include all source folders

Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-29 20:17:20 +09:00
parent 5d3cd64a25
commit dd97ddec92
11602 changed files with 1446576 additions and 0 deletions

View File

@@ -0,0 +1,87 @@
-- 2005-04-14 정섭에 적용됨
-- 파티 테이블 수정 --
ALTER TABLE dbo.PartyInfo
Add UserInfo varbinary(70)
GO
-- Friend 테이블 수정 --
GO
alter table Friend
add FriendInfo varBINARY(704)
GO
alter table Friend
add BanInfo varBinary(704)
-- 파티 정보 얻어오기 --
GO
----------------------------------------------------------------------------------------------------------------------
-- GetPartyInfo.sql
----------------------------------------------------------------------------------------------------------------------
/*
*/
GO
CREATE PROCEDURE dbo.GetPartyInfo_Part2
@Party_uid AS INT /* 파티 아이디 */
AS
SET NOCOUNT ON
SELECT Party, UserInfo FROM PartyInfo WHERE PID = @Party_uid
-- 파티 정보 업데이트 --
GO
----------------------------------------------------------------------------------------------------------------------
-- UpdatePartyInfo.sql
----------------------------------------------------------------------------------------------------------------------
/*
*/
CREATE PROCEDURE dbo.UpdatePartyInfo_Part2
@Party_uid AS INT, /* 파티 고유 아이디 */
@Party AS varBINARY(202), /* 친구 리스트 */
@UserInfo AS varBINARY(72) /* 유저 정보 */
AS
SET NOCOUNT ON
UPDATE PartyInfo SET Party = @Party, UserInfo = @UserInfo WHERE PID = @Party_uid
-- 파티 추가 --
GO
-------------------------------------------------------------------------------------------------------------
-- InsertParty.sql
----------------------------------------------------------------------------------------------------------------------
/*
*/
CREATE PROCEDURE dbo.InsertParty_Part2
@Party AS varBINARY(202), /* 친구 리스트 */
@UserInfo AS varBINARY(72) /* 유저 정보 */
AS
SET NOCOUNT ON
INSERT INTO PartyInfo (Party, UserInfo) VALUES (@Party, @UserInfo)
/* 고유 아이디 돌려줌 */
SELECT CAST(SCOPE_IDENTITY() AS INT)
GO

View File

@@ -0,0 +1,86 @@
ALTER TABLE [TblCampInfo] ADD [tnSiegeCount] [tinyint] NULL
GO
ALTER TABLE [TblCampShopInfo] DROP COLUMN [TransferTime]
GO
DROP TABLE [TblCastleInfo]
GO
CREATE TABLE [TblCastleInfo] (
[nCastleID] [int] IDENTITY (1, 1) NOT NULL,
[nGuildID] [int] NULL,
[tnZone] [tinyint] NULL,
[tnChannel] [tinyint] NULL,
[tnName] [tinyint] NULL,
[tnSiegeCount] [tinyint] NULL,
[tnInvincibleCount] [tinyint] NULL,
[snTotalSiegeCount] [smallint] NULL,
[nTotalTaxMoney] [int] NULL,
[bRight] [varbinary] (10) NULL,
[fPosInX] [real] NULL,
[fPosInY] [real] NULL,
[fPosInZ] [real] NULL,
[fPosOutX] [real] NULL,
[fPosOutY] [real] NULL,
[fPosOutZ] [real] NULL,
[snItemID] [smallint] NULL,
[tnItemNum] [tinyint] NULL
) ON [PRIMARY]
GO
CREATE TABLE [TblCastleTaxInfo] (
[nCastleID] [int] NULL,
[tnType] [tinyint] NULL,
[tnTax] [tinyint] NULL,
[nTempMoney] [int] NULL,
[nTaxMoney] [int] NULL,
[tnTaxChangable] [tinyint] NULL
) ON [PRIMARY]
GO
CREATE TABLE [TblCastleMineralInfo] (
[nCastleID] [int] NULL ,
[snMineralID] [smallint] NULL ,
[snAmount] [smallint] NULL ,
[tnFlag] [tinyint] NULL
) ON [PRIMARY]
GO
DROP PROC USPCastleUpdate
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE PROC USPCastleUpdate @nCastleID INT,@nGuildID INT,@tnSiegeCount TINYINT,
@tnInvincibleCount TINYINT,@snTotalSiegeCount SMALLINT,@nTotalTaxMoney INT,
@snItemID SMALLINT,@tnItemNum TINYINT
AS
SET NOCOUNT ON
DECLARE @RETURN INT
UPDATE TblCastleInfo
SET nGuildID = @nGuildID,tnSiegeCount = @tnSiegeCount,tnInvincibleCount = @tnInvincibleCount,
snTotalSiegeCount = @snTotalSiegeCount,nTotalTaxMoney = @nTotalTaxMoney,
snItemID = @snItemID,tnItemNum = @tnItemNum
WHERE nCastleID = @nCastleID
SET @RETURN = @@ROWCOUNT
SELECT @RETURN
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

View File

@@ -0,0 +1,80 @@
/*------------------------------------------------------------------------------//
// 적아군 식별 장치 관련 DB 수정. //
//------------------------------------------------------------------------------*/
-- 파티 정보에 길드 정보 추가 --
ALTER TABLE dbo.PartyInfo
ADD GID INT
-- 새로 만들 프로시저 모두 드랍
GO
DROP PROC InsertParty_Part2
GO
DROP PROC GetPartyInfo_Part2
GO
DROP PROC UpdatePartyInfo_Part2
GO
----------------------------------------------------------------------------------------------------------------------
-- GetPartyInfo.sql
----------------------------------------------------------------------------------------------------------------------
/*
*/
CREATE PROCEDURE dbo.GetPartyInfo_Part2
@Party_uid AS INT /* 파티 아이디 */
AS
SET NOCOUNT ON
SELECT Party, UserInfo, GID FROM PartyInfo WHERE PID = @Party_uid
GO
----------------------------------------------------------------------------------------------------------------------
-- InsertParty.sql
----------------------------------------------------------------------------------------------------------------------
/*
*/
CREATE PROCEDURE dbo.InsertParty_Part2
@Party AS varBINARY(202), /* 친구 리스트 */
@UserInfo AS varBINARY(72), /* 유저 정보 */
@GID AS int /* 임시 길드원 정보 */
AS
SET NOCOUNT ON
INSERT INTO PartyInfo (Party, UserInfo, GID) VALUES (@Party, @UserInfo, @GID)
/* 고유 아이디 돌려줌 */
SELECT CAST(SCOPE_IDENTITY() AS INT)
GO
----------------------------------------------------------------------------------------------------------------------
-- UpdatePartyInfo.sql
----------------------------------------------------------------------------------------------------------------------
CREATE PROCEDURE dbo.UpdatePartyInfo_Part2
@Party_uid AS INT, /* 파티 고유 아이디 */
@Party AS varBINARY(202), /* 친구 리스트 */
@UserInfo AS varBINARY(72), /* 유저 정보 */
@GID AS INT /* 임시 길드 정보 */
AS
SET NOCOUNT ON
UPDATE PartyInfo SET Party = @Party, UserInfo = @UserInfo, GID = @GID WHERE PID = @Party_uid

View File

@@ -0,0 +1,2 @@
INSERT INTO TblFertilityInfo(nVeinColor, nFertility, tnZone, tnChannel)
(SELECT nVeinColor, nFertility, 16, tnChannel FROM TblFertilityInfo WHERE tnZone = 8)

View File

@@ -0,0 +1,3 @@
Alter Table CharInfoEX
Add AdminFlag tinyint NULL

View File

@@ -0,0 +1,105 @@
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[vUserInfo]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view dbo.vUserInfo
GO
create view dbo.vUserInfo
AS
SELECT UID,OldServerGroupID,Nation,Char1 as CID FROM UserInfo
UNION ALL
SELECT UID,OldServerGroupID,Nation,Char2 FROM UserInfo
UNION ALL
SELECT UID,OldServerGroupID,Nation,Char3 FROM UserInfo
UNION ALL
SELECT UID,OldServerGroupID,Nation,Char4 FROM UserInfo
UNION ALL
SELECT UID,OldServerGroupID,Nation,Char5 FROM UserInfo
GO
/* 국적이 신의 해적단이면서, 종족이 휴먼인 사람들의 국적을 카르테란트로 바꿔준다. */
update UserInfo set UserInfo.Nation = 1 where UserInfo.UID in
(select distinct vUserInfo.UID from
vUserInfo INNER JOIN CharInfo
ON vUserInfo.CID = CharInfo.CID
where vUserInfo.Nation = 3 and CharInfo.Race = 0)
/* 국적이 신의 해적단이면서, 종족이 아칸인 사람들의 국적을 메르카디아로 바꿔준다. */
update UserInfo set UserInfo.Nation = 2 where UserInfo.UID in
(select distinct vUserInfo.UID from
vUserInfo INNER JOIN CharInfo
ON vUserInfo.CID = CharInfo.CID
where vUserInfo.Nation = 3 and CharInfo.Race = 1)
/* 길드 국적이 신의 해적단이고, 길드 마스터가 휴먼이면, 길드 국적을 카르테란트로 바꿔준다. */
update TblGuildInfo set TblGuildInfo.tnNationType = 1 where TblGuildInfo.nGuildID in
(select distinct TblGuildInfo.nGuildID from
TblGuildInfo INNER JOIN TblGuildMember
ON TblGuildInfo.nGuildID = TblGuildMember.nGuildID
INNER JOIN CharInfo
ON TblGuildMember.nCID = CharInfo.CID
where tnNationType = 3 and TblGuildMember.nPosition = 1 and CharInfo.Race = 0)
/* 길드 국적이 신의 해적단이고, 길드 마스터가 아칸이면, 길드 국적을 메르카디아로 바꿔준다. */
update TblGuildInfo set TblGuildInfo.tnNationType = 2 where TblGuildInfo.nGuildID in
(select distinct TblGuildInfo.nGuildID from
TblGuildInfo INNER JOIN TblGuildMember
ON TblGuildInfo.nGuildID = TblGuildMember.nGuildID
INNER JOIN CharInfo
ON TblGuildMember.nCID = CharInfo.CID
where tnNationType = 3 and TblGuildMember.nPosition = 1 and CharInfo.Race = 1)
/* 길드에 속한 캐릭터의 종족이, 그 길드에 가입할 수 없는 종족이면 해당 캐릭터를 길드에서 탈퇴시킨다 */
/* 길드에서 탈퇴시킬 캐릭터 정보 얻어오기 */
declare @DeleteInfo table (nCID int)
insert into @DeleteInfo
select distinct TblGuildMember.nCID from
TblGuildInfo INNER JOIN TblGuildMember
ON TblGuildInfo.nGuildID = TblGuildMember.nGuildID
INNER JOIN CharInfo
ON TblGuildMember.nCID = CharInfo.CID
where TblGuildInfo.tnNationType <> CharInfo.Race + 1
/* 길드에서 캐릭터 삭제, 캐릭터 정보에서 Guild ID클리어 */
delete from TblGuildMember where nCID in (select nCID from @DeleteInfo)
update CharInfo set CharInfo.Guild = 0 where CharInfo.CID in (select nCID from @DeleteInfo)
/* 캠프를 DB에서 전부 제거한다 */
delete from TblCampInfo
delete from TblCampShopInfo
delete from TblCampMineralInfo
delete from TblWorldWeaponInfo
/* 파티를 날려버린다 */
delete from PartyInfo
/* 길드전쟁, 국가전쟁 참여 플래그를 추가한다. */
ALTER TABLE [CharInfoEx] ADD [GuildWarFlag] [tinyint] NULL
ALTER TABLE [CharInfoEx] ADD [RealmWarFlag] [tinyint] NULL
/* 게임 시간 값 DB Table 생성 */
CREATE TABLE [TblGameTime] (
[GuildTime] [tinyint] NULL,
[RealmTime] [tinyint] NULL,
[SiegeTime] [tinyint] NULL,
[MiningTime] [tinyint] NULL
) ON [PRIMARY]
INSERT INTO TblGameTime(GuildTime, RealmTime, SiegeTime, MiningTime) VALUES (0, 0, 0, 0)
/* 국가 전잰 석상 DB 테이블 추가 */
CREATE TABLE [TblStatueInfo] (
[nIndex] [int] NULL,
[tnChannel] [tinyint] NULL,
[snKID] [smallint] NULL,
[nLostHP] [int] NULL
) ON [PRIMARY]
/* 국가 전쟁 석상 초기값 추가 */
INSERT INTO TblStatueInfo(nIndex, tnChannel, snKID, nLostHP) VALUES (1, 0, 1044, 0)
INSERT INTO TblStatueInfo(nIndex, tnChannel, snKID, nLostHP) VALUES (2, 0, 1044, 0)
INSERT INTO TblStatueInfo(nIndex, tnChannel, snKID, nLostHP) VALUES (3, 0, 1049, 0)
INSERT INTO TblStatueInfo(nIndex, tnChannel, snKID, nLostHP) VALUES (4, 0, 1049, 0)
INSERT INTO TblStatueInfo(nIndex, tnChannel, snKID, nLostHP) VALUES (5, 0, 1059, 0)
INSERT INTO TblStatueInfo(nIndex, tnChannel, snKID, nLostHP) VALUES (6, 0, 1059, 0)
INSERT INTO TblStatueInfo(nIndex, tnChannel, snKID, nLostHP) VALUES (7, 0, 1054, 0)

View File

@@ -0,0 +1,131 @@
-- CharInfoEx 에 컬럼 추가(국가전쟁 훈장 포인트, 로그아웃 시간) --
alter table CharInfoEx
add RealmPoint tinyint NULL
go
alter table CharInfoEx
add RealmCheckPoint tinyint NULL
go
alter table CharInfoEx
add RealmMinute tinyint NULL
go
alter table CharInfoEx
add LogoutTime smalldatetime Not NULL default(getdate())
go
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[vUserInfo]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view dbo.vUserInfo
GO
create view dbo.vUserInfo
AS
SELECT UID,OldServerGroupID,Nation,Char1 as CID FROM UserInfo
UNION ALL
SELECT UID,OldServerGroupID,Nation,Char2 FROM UserInfo
UNION ALL
SELECT UID,OldServerGroupID,Nation,Char3 FROM UserInfo
UNION ALL
SELECT UID,OldServerGroupID,Nation,Char4 FROM UserInfo
UNION ALL
SELECT UID,OldServerGroupID,Nation,Char5 FROM UserInfo
GO
/* 국적이 신의 해적단이면서, 종족이 휴먼인 사람들의 국적을 카르테란트로 바꿔준다. */
update UserInfo set UserInfo.Nation = 1 where UserInfo.UID in
(select distinct vUserInfo.UID from
vUserInfo INNER JOIN CharInfo
ON vUserInfo.CID = CharInfo.CID
where vUserInfo.Nation = 3 and CharInfo.Race = 0)
/* 국적이 신의 해적단이면서, 종족이 아칸인 사람들의 국적을 메르카디아로 바꿔준다. */
update UserInfo set UserInfo.Nation = 2 where UserInfo.UID in
(select distinct vUserInfo.UID from
vUserInfo INNER JOIN CharInfo
ON vUserInfo.CID = CharInfo.CID
where vUserInfo.Nation = 3 and CharInfo.Race = 1)
/* 길드 국적이 신의 해적단이고, 길드 마스터가 휴먼이면, 길드 국적을 카르테란트로 바꿔준다. */
update TblGuildInfo set TblGuildInfo.tnNationType = 1 where TblGuildInfo.nGuildID in
(select distinct TblGuildInfo.nGuildID from
TblGuildInfo INNER JOIN TblGuildMember
ON TblGuildInfo.nGuildID = TblGuildMember.nGuildID
INNER JOIN CharInfo
ON TblGuildMember.nCID = CharInfo.CID
where tnNationType = 3 and TblGuildMember.nPosition = 1 and CharInfo.Race = 0)
/* 길드 국적이 신의 해적단이고, 길드 마스터가 아칸이면, 길드 국적을 메르카디아로 바꿔준다. */
update TblGuildInfo set TblGuildInfo.tnNationType = 2 where TblGuildInfo.nGuildID in
(select distinct TblGuildInfo.nGuildID from
TblGuildInfo INNER JOIN TblGuildMember
ON TblGuildInfo.nGuildID = TblGuildMember.nGuildID
INNER JOIN CharInfo
ON TblGuildMember.nCID = CharInfo.CID
where tnNationType = 3 and TblGuildMember.nPosition = 1 and CharInfo.Race = 1)
/* 길드에 속한 캐릭터의 종족이, 그 길드에 가입할 수 없는 종족이면 해당 캐릭터를 길드에서 탈퇴시킨다 */
/* 길드에서 탈퇴시킬 캐릭터 정보 얻어오기 */
declare @DeleteInfo table (nCID int)
insert into @DeleteInfo
select distinct TblGuildMember.nCID from
TblGuildInfo INNER JOIN TblGuildMember
ON TblGuildInfo.nGuildID = TblGuildMember.nGuildID
INNER JOIN CharInfo
ON TblGuildMember.nCID = CharInfo.CID
where TblGuildInfo.tnNationType <> CharInfo.Race + 1
/* 길드에서 캐릭터 삭제, 캐릭터 정보에서 Guild ID클리어 */
delete from TblGuildMember where nCID in (select nCID from @DeleteInfo)
update CharInfo set CharInfo.Guild = 0 where CharInfo.CID in (select nCID from @DeleteInfo)
/* 길드간의 관계를 모두 제거한다. */
delete from TblGuildOtherList
/* 캠프를 DB에서 전부 제거한다 */
delete from TblCampInfo
delete from TblCampShopInfo
delete from TblCampMineralInfo
delete from TblWorldWeaponInfo
/* 파티를 날려버린다 */
delete from PartyInfo
Update CharInfo Set Party = 0
/* 길드전쟁, 국가전쟁 참여 플래그를 추가한다. */
ALTER TABLE [CharInfoEx] ADD [GuildWarFlag] [tinyint] NULL
ALTER TABLE [CharInfoEx] ADD [RealmWarFlag] [tinyint] NULL
/* 게임 시간 값 DB Table 생성 */
CREATE TABLE [TblGameTime] (
[GuildTime] [tinyint] NULL,
[RealmTime] [tinyint] NULL,
[SiegeTime] [tinyint] NULL,
[MiningTime] [tinyint] NULL
) ON [PRIMARY]
INSERT INTO TblGameTime(GuildTime, RealmTime, SiegeTime, MiningTime) VALUES (0, 0, 0, 0)
/* 국가 전잰 석상 DB 테이블 추가 */
CREATE TABLE [TblStatueInfo] (
[nIndex] [int] NULL,
[tnChannel] [tinyint] NULL,
[snKID] [smallint] NULL,
[nLostHP] [int] NULL
) ON [PRIMARY]
/* 국가 전쟁 석상 초기값 추가 */
INSERT INTO TblStatueInfo(nIndex, tnChannel, snKID, nLostHP) VALUES (1, 0, 1044, 0)
INSERT INTO TblStatueInfo(nIndex, tnChannel, snKID, nLostHP) VALUES (2, 0, 1044, 0)
INSERT INTO TblStatueInfo(nIndex, tnChannel, snKID, nLostHP) VALUES (3, 0, 1049, 0)
INSERT INTO TblStatueInfo(nIndex, tnChannel, snKID, nLostHP) VALUES (4, 0, 1049, 0)
INSERT INTO TblStatueInfo(nIndex, tnChannel, snKID, nLostHP) VALUES (5, 0, 1059, 0)
INSERT INTO TblStatueInfo(nIndex, tnChannel, snKID, nLostHP) VALUES (6, 0, 1059, 0)
INSERT INTO TblStatueInfo(nIndex, tnChannel, snKID, nLostHP) VALUES (7, 0, 1054, 0)

View File

@@ -0,0 +1,91 @@
alter table PartyInfo
drop column GID
go
alter Table TblGuildMember
add Tactics tinyint NULL
go
drop proc dbo.InsertParty_Part2
go
/*
파티 추가 프로시져
*/
CREATE PROCEDURE dbo.InsertParty_Part2
@Party AS varBINARY(202), /* 친구 리스트 */
@UserInfo AS varBINARY(72) /* 유저 정보 */
AS
SET NOCOUNT ON
INSERT INTO PartyInfo (Party, UserInfo) VALUES (@Party, @UserInfo)
/* 고유 아이디 돌려줌 */
SELECT CAST(SCOPE_IDENTITY() AS INT)
go
drop proc dbo.GetPartyInfo_Part2
go
/*
파티 정보 보기 프로시져
*/
CREATE PROCEDURE dbo.GetPartyInfo_Part2
@Party_uid AS INT /* 파티 아이디 */
AS
SET NOCOUNT ON
SELECT Party, UserInfo FROM PartyInfo WHERE PID = @Party_uid
go
drop proc dbo.UpdatePartyInfo_Part2
go
CREATE PROCEDURE dbo.UpdatePartyInfo_Part2
@Party_uid AS INT, /* 파티 고유 아이디 */
@Party AS varBINARY(202), /* 친구 리스트 */
@UserInfo AS varBINARY(72) /* 유저 정보 */
AS
SET NOCOUNT ON
UPDATE PartyInfo SET Party = @Party, UserInfo = @UserInfo WHERE PID = @Party_uid
/*
길드 관계 DB
DESC : 옛날 관계 DB 인 TblGuildOtherList 테이블을 삭제하고
TblGuildRelation 을 추가한다.
*/
DROP TABLE dbo.TblGuildOtherList
GO
CREATE TABLE [TblGuildRelation] (
[nGuildID] [int] NOT NULL ,
[nTargetGuildID] [int] NOT NULL ,
[tnRelation] [tinyint] NOT NULL ,
CONSTRAINT [PK_TblGuildRelation_1] PRIMARY KEY CLUSTERED
(
[nGuildID],
[nTargetGuildID]
) ON [PRIMARY] ,
CHECK ([tnRelation] = 1 or [tnRelation] = 2 or [tnRelation] = 3)
) ON [PRIMARY]
GO

View File

@@ -0,0 +1,18 @@
Create Table AdminCommandLog
(
[Index] [int] IDENTITY (1, 1),
[ServerGroupID] [int] NULL, -- ServerGroupID
[AdminCID] [int] NULL , -- 지금한 Admin UID
[CID] [int] NULL, -- 해당 CID
[Type] [varchar] (128) NULL, -- 해당 명령어
[Time] [datetime] DEFAULT(getdate()),
PRIMARY KEY CLUSTERED
(
[Index]
) ON [PRIMARY]
)

View File

@@ -0,0 +1,2 @@
alter table Quest
alter Column History varbinary(404)

View File

@@ -0,0 +1,2 @@
Alter Table Quest
Alter Column History varbinary(404)

View File

@@ -0,0 +1,55 @@
Create Table CharDeleteData
(
[Index] [int] IDENTITY (1, 1),
[CID] [int] Not NULL,
[Name] [varchar] (16) NULL,
[Level] [tinyint] NULL,
[Class] [smallint] NULL,
PRIMARY KEY CLUSTERED
(
[CID]
)
)
go
-- 퀘스트 삭제 --
Delete From Quest Where CID In (Select intCID From TblCharDelHistory where dateDeleteTime < getdate())
-- 캐릭터 시간 --
Delete From CharInfo_Time Where CID In (Select intCID From TblCharDelHistory where dateDeleteTime < getdate())
-- 캐릭터 정보 Ex --
Delete From CharInfoEx Where CID In (Select intCID From TblCharDelHistory where dateDeleteTime < getdate())
-- 캐릭터 아이템 --
Delete From CharItem Where CID In (Select intCID From TblCharDelHistory where dateDeleteTime < getdate())
-- 캐릭터 아이템 Ex --
Delete From CharItemEx Where CID In (Select intCID From TblCharDelHistory where dateDeleteTime < getdate())
-- 캐릭터 위치 --
Delete From CharPos Where CID In (Select intCID From TblCharDelHistory where dateDeleteTime < getdate())
-- 캐릭터 스킬 --
Delete From CharSkill Where CID In (Select intCID From TblCharDelHistory where dateDeleteTime < getdate())
-- 친구, 거부 리스트 --
Delete From Friend Where CID In (Select intCID From TblCharDelHistory where dateDeleteTime < getdate())
-- 데이터 저장
Insert into CharDeleteData Select CID, [Name], [Level], Class From CharInfo where CID In (Select intCID From TblCharDelHistory where dateDeleteTime < getdate())
-- 캐릭터 정보 삭제 --
Delete From CharInfo Where CID In (Select intCID From TblCharDelHistory where dateDeleteTime < getdate())

View File

@@ -0,0 +1,23 @@
ALTER TABLE AdminTool..TblRestraintChar
ADD idx int IDENTITY(1,1) NOT NULL
GO
ALTER PROC USPDeleteRestraintChar @SeverID tinyint,@nidx INT
AS
SET NOCOUNT ON
IF EXISTS (SELECT UID FROM TblRestraintChar WHERE tinyServerID=@SeverID AND idx = @nidx)
BEGIN
DELETE TblRestraintChar
WHERE tinyServerID=@SeverID AND idx = @nidx
SELECT @@ROWCOUNT
END
ELSE
BEGIN
SELECT -1
END
GO

View File

@@ -0,0 +1,135 @@
DROP TABLE TblCastleInfo
GO
CREATE TABLE [TblCastleInfo] (
[nCastleID] [int] IDENTITY (1, 1) NOT NULL ,
[tnNation] [tinyint] NULL ,
[tnZone] [tinyint] NULL ,
[tnChannel] [tinyint] NULL ,
[tnName] [tinyint] NULL ,
[tnSiegeCount] [tinyint] NULL ,
[tnInvincibleCount] [tinyint] NULL ,
[snTotalSiegeCount] [smallint] NULL ,
[nTotalTaxMoney] [int] NULL ,
[bRight] [varbinary] (10) NULL ,
[fPosInX] [real] NULL ,
[fPosInY] [real] NULL ,
[fPosInZ] [real] NULL ,
[fPosOutX] [real] NULL ,
[fPosOutY] [real] NULL ,
[fPosOutZ] [real] NULL ,
[snItemID] [smallint] NULL ,
[tnItemNum] [tinyint] NULL
) ON [PRIMARY]
GO
INSERT INTO TblCastleInfo(tnNation, tnZone, tnChannel, tnName, tnSiegeCount, tnInvincibleCount, snTotalSiegeCount, nTotalTaxMoney, bRight, fPosInX, fPosInY, fPosInZ, fPosOutX, fPosOutY, fPosOutZ, snItemID, tnItemNum)
VALUES (0, 16, 0, 1, 0, 0, 0, 0, 0x03030303030303030303, 0.0, 100.0, 0.0, 0.0, 100.0, 0.0, 0, 0)
GO
INSERT INTO TblCastleInfo(tnNation, tnZone, tnChannel, tnName, tnSiegeCount, tnInvincibleCount, snTotalSiegeCount, nTotalTaxMoney, bRight, fPosInX, fPosInY, fPosInZ, fPosOutX, fPosOutY, fPosOutZ, snItemID, tnItemNum)
VALUES (0, 16, 1, 1, 0, 0, 0, 0, 0x03030303030303030303, 0.0, 100.0, 0.0, 0.0, 100.0, 0.0, 0, 0)
GO
DROP TABLE TblCastleCreatureInfo
GO
CREATE TABLE [TblCastleCreatureInfo] (
[nCreatureID] [int] IDENTITY (1, 1) NOT NULL ,
[nCastleID] [int] NULL ,
[nOwnerID] [int] NULL,
[nHP] [int] NULL ,
[snObjectType] [smallint] NULL ,
[fDirection] [real] NULL ,
[tnState] [tinyint] NULL ,
[tnSubState] [tinyint] NULL ,
[tnUpgradeStep] [tinyint] NULL ,
[tnUpgradeType] [tinyint] NULL ,
[RemainTime] [smalldatetime] NULL ,
[LastUseTime] [smalldatetime] NULL,
[fPosX] [real] NULL ,
[fPosY] [real] NULL ,
[fPosZ] [real] NULL ,
PRIMARY KEY CLUSTERED
(
[nCreatureID]
) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT INTO TblCastleCreatureInfo(nCastleID, nOwnerID, nHP, snObjectType, fDirection, tnState, tnSubState, tnUpgradeStep, tnUpgradeType, RemainTime, LastUseTime, fPosX, fPosY, fPosZ)
VALUES (1, 0, 59973, 5000, 3.1670001, 0, 1, 1, 0, getdate(), getdate(), 2034.0, 138.133, 3004.5)
INSERT INTO TblCastleCreatureInfo(nCastleID, nOwnerID, nHP, snObjectType, fDirection, tnState, tnSubState, tnUpgradeStep, tnUpgradeType, RemainTime, LastUseTime, fPosX, fPosY, fPosZ)
VALUES (1, 0, 100, 5324, 3.1340001, 0, 2, 0, 0, getdate(), getdate(), 2034.5, 100.0, 2956.0)
INSERT INTO TblCastleCreatureInfo(nCastleID, nOwnerID, nHP, snObjectType, fDirection, tnState, tnSubState, tnUpgradeStep, tnUpgradeType, RemainTime, LastUseTime, fPosX, fPosY, fPosZ)
VALUES (1, 0, 100, 5433, 0.76999998, 0, 0, 0, 0, getdate(), getdate(), 1987.5, 118.1, 2952.0)
INSERT INTO TblCastleCreatureInfo(nCastleID, nOwnerID, nHP, snObjectType, fDirection, tnState, tnSubState, tnUpgradeStep, tnUpgradeType, RemainTime, LastUseTime, fPosX, fPosY, fPosZ)
VALUES (1, 0, 100, 5433, 0.0, 0, 0, 0, 0, getdate(), getdate(), 2018.0, 118.1, 2951.5)
INSERT INTO TblCastleCreatureInfo(nCastleID, nOwnerID, nHP, snObjectType, fDirection, tnState, tnSubState, tnUpgradeStep, tnUpgradeType, RemainTime, LastUseTime, fPosX, fPosY, fPosZ)
VALUES (1, 0, 100, 5433, 5.48, 0, 0, 0, 0, getdate(), getdate(), 2080.0, 118.1, 2952.0)
INSERT INTO TblCastleCreatureInfo(nCastleID, nOwnerID, nHP, snObjectType, fDirection, tnState, tnSubState, tnUpgradeStep, tnUpgradeType, RemainTime, LastUseTime, fPosX, fPosY, fPosZ)
VALUES (1, 0, 100, 5433, 0.0, 0, 0, 0, 0, getdate(), getdate(), 2050.0, 118.1, 2952.0)
GO
INSERT INTO TblCastleCreatureInfo(nCastleID, nOwnerID, nHP, snObjectType, fDirection, tnState, tnSubState, tnUpgradeStep, tnUpgradeType, RemainTime, LastUseTime, fPosX, fPosY, fPosZ)
VALUES (2, 0, 59973, 5000, 3.1670001, 0, 1, 1, 0, getdate(), getdate(), 2034.0, 138.133, 3004.0)
INSERT INTO TblCastleCreatureInfo(nCastleID, nOwnerID, nHP, snObjectType, fDirection, tnState, tnSubState, tnUpgradeStep, tnUpgradeType, RemainTime, LastUseTime, fPosX, fPosY, fPosZ)
VALUES (2, 0, 100, 5324, 3.1340001, 0, 2, 0, 0, getdate(), getdate(), 2034.0, 100.0, 2956.0)
INSERT INTO TblCastleCreatureInfo(nCastleID, nOwnerID, nHP, snObjectType, fDirection, tnState, tnSubState, tnUpgradeStep, tnUpgradeType, RemainTime, LastUseTime, fPosX, fPosY, fPosZ)
VALUES (2, 0, 100, 5433, 0.76999998, 0, 0, 0, 0, getdate(), getdate(), 1987.5, 118.1, 2952.0)
INSERT INTO TblCastleCreatureInfo(nCastleID, nOwnerID, nHP, snObjectType, fDirection, tnState, tnSubState, tnUpgradeStep, tnUpgradeType, RemainTime, LastUseTime, fPosX, fPosY, fPosZ)
VALUES (2, 0, 100, 5433, 0.0, 0, 0, 0, 0, getdate(), getdate(), 2018.0, 118.1, 2951.5)
INSERT INTO TblCastleCreatureInfo(nCastleID, nOwnerID, nHP, snObjectType, fDirection, tnState, tnSubState, tnUpgradeStep, tnUpgradeType, RemainTime, LastUseTime, fPosX, fPosY, fPosZ)
VALUES (2, 0, 100, 5433, 5.48, 0, 0, 0, 0, getdate(), getdate(), 2080.0, 118.1, 2952.0)
INSERT INTO TblCastleCreatureInfo(nCastleID, nOwnerID, nHP, snObjectType, fDirection, tnState, tnSubState, tnUpgradeStep, tnUpgradeType, RemainTime, LastUseTime, fPosX, fPosY, fPosZ)
VALUES (2, 0, 100, 5433, 0.0, 0, 0, 0, 0, getdate(), getdate(), 2050.0, 118.1, 2952.0)
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
ALTER PROC USPCastleUpdate @nCastleID INT,@tnNation TINYINT,@tnSiegeCount TINYINT,
@tnInvincibleCount TINYINT,@snTotalSiegeCount SMALLINT,@nTotalTaxMoney INT,
@snItemID SMALLINT,@tnItemNum TINYINT
AS
SET NOCOUNT ON
DECLARE @RETURN INT
UPDATE TblCastleInfo
SET tnNation = @tnNation,tnSiegeCount = @tnSiegeCount,tnInvincibleCount = @tnInvincibleCount,
snTotalSiegeCount = @snTotalSiegeCount,nTotalTaxMoney = @nTotalTaxMoney,
snItemID = @snItemID,tnItemNum = @tnItemNum
WHERE nCastleID = @nCastleID
SET @RETURN = @@ROWCOUNT
SELECT @RETURN
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

View File

@@ -0,0 +1,11 @@
Update TblCastleCreatureInfo Set fPosZ = 3004.5 where snObjectType = 5000
go
Update TblCastleCreatureInfo Set fPosX = 2033.98, fPosY = 100.5, fPosZ = 2957.3 where snObjectType = 5324
go
Update TblCastleInfo Set tnNation = 0 Where tnZone = 16
go

View File

@@ -0,0 +1,2 @@
Alter Table Quest
Alter Column Quest varbinary(264)

View File

@@ -0,0 +1,20 @@
CREATE TABLE [dbo].[CharSpell] (
[CID] [int] NOT NULL ,
[Spell] [varbinary] (270) NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[CharSpell] WITH NOCHECK ADD
PRIMARY KEY CLUSTERED
(
[CID]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[CharSpell] ADD
CONSTRAINT [FK_CharSpell_CharInfo] FOREIGN KEY
(
[CID]
) REFERENCES [dbo].[CharInfo] (
[CID]
)

View File

@@ -0,0 +1,124 @@
CREATE PROCEDURE dbo.InsertChar
@user_uid AS INT, /* 유저 고유 아이디 */
@user_pos AS INT, /* 캐릭터 위치 (3개의 슬롯) */
@user_name AS VARCHAR(16), /* 캐릭터 이름 */
@user_Sex AS TINYINT, /* 캐릭터 성 */
@user_Hair AS TINYINT, /* 캐릭터 머리 모양 */
@user_Face AS TINYINT, /* 캐릭터 얼굴 모양 */
@user_Nation AS TINYINT, /* 캐릭터 국가 */
@user_Class AS SMALLINT, /* 캐릭터 클래스 */
@C_Gold AS INT, /* 캐릭터 소지금 */
@C_STR AS SMALLINT, /* 캐릭터 STR */
@C_DEX AS SMALLINT, /* 캐릭터 DEX */
@C_CON AS SMALLINT, /* 캐릭터 CON */
@C_INT AS SMALLINT, /* 캐릭터 INT */
@C_WIS AS SMALLINT, /* 캐릭터 WIS */
@PointX AS REAL, /* 캐릭터 Point X 좌표 */
@PointY AS REAL, /* 캐릭터 Point Y 좌표 */
@PointZ AS REAL, /* 캐릭터 Point Z 좌표 */
@C_Equip AS varBINARY(30), /* 장비 (2 * 15 = 30) */
@Skill AS varBinary(84),
@UserInfoType TINYINT,
@CID INT OUTPUT
AS
SET NOCOUNT ON
--DECLARE @UID INT
DECLARE @C_HP INT, @C_MP INT
/* 캐릭터 이름 확인 */
SELECT @CID = CID FROM CharInfo WHERE Name = @user_name
IF @CID <> 0
BEGIN
SET @CID = -1 /* 동일 이름 존재 */
RETURN
END
/* 슬롯 확인 */
DECLARE @CharSlot INT
IF @user_pos = 0
BEGIN
SELECT @CharSlot = Char1 FROM UserInfo WHERE UID = @user_uid AND OldServerGroupID = @UserInfoType
END
ELSE IF @user_pos = 1
BEGIN
SELECT @CharSlot = Char2 FROM UserInfo WHERE UID = @user_uid AND OldServerGroupID = @UserInfoType
END
ELSE IF @user_pos = 2
BEGIN
SELECT @CharSlot = Char3 FROM UserInfo WHERE UID = @user_uid AND OldServerGroupID = @UserInfoType
END
ELSE IF @user_pos = 3
BEGIN
SELECT @CharSlot = Char4 FROM UserInfo WHERE UID = @user_uid AND OldServerGroupID = @UserInfoType
END
ELSE IF @user_pos = 4
BEGIN
SELECT @CharSlot = Char5 FROM UserInfo WHERE UID = @user_uid AND OldServerGroupID = @UserInfoType
END
IF @CharSlot <> 0
BEGIN
SET @CID = -2 /* 슬롯이 차있음 */
RETURN
END
SET @C_HP = 100 + @C_CON * 8 + 2
IF @C_INT > @C_WIS
BEGIN
SET @C_MP = 100 + @C_INT * 8 + 2
END
ELSE
BEGIN
SET @C_MP = 100 + @C_WIS * 8 + 2
END
BEGIN TRAN
SELECT @CID = MAX(CID) + 1 FROM CharInfo WITH (UPDLOCK)
IF (@CID IS NULL)
SET @CID = 1
INSERT INTO CharInfo (CID,Name, Sex, Hair, Face, Race, Class, Equip, Gold, STR, DEX, CON, Intell, WIS, HP, MP)
VALUES (@CID,@user_name, @user_Sex, @user_Hair, @user_Face, @user_Nation, @user_Class, @C_Equip, @C_Gold, @C_STR, @C_DEX, @C_CON, @C_INT, @C_WIS, @C_HP, @C_MP)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
SET @CID = -100
RETURN
END
COMMIT TRAN
INSERT INTO CharInfoEx (CID) VALUES (@CID)
INSERT INTO CharItem (CID) VALUES (@CID)
INSERT INTO CharItemEx (CID) VALUES (@CID)
INSERT INTO CharSkill (CID, Skill) VALUES (@CID, @Skill)
INSERT INTO CharSpell (CID) VALUES (@CID)
INSERT INTO CharPos (CID, LastPointX, LastPointY, LastPointZ, SavePointX, SavePointY, SavePointZ) VALUES (@CID, @PointX, @PointY, @PointZ, @PointX, @PointY, @PointZ)
INSERT INTO CharInfo_Time(CID,CreateTime,UpdateTime)
VALUES (@CID,GETDATE(),GETDATE())
INSERT INTO Friend (CID) VALUES (@CID)
INSERT INTO Quest (CID) VALUES (@CID)
-- UnifiedCharList정보테이블에 입력하기
INSERT TblUnifiedCharList(UID,OldServerGroupID,BeforeCID,NewCID,BeforeCharName)
VALUES (@user_uid,@UserInfoType,@CID,@CID,@user_name)
/* 유저 정보 테이블 업데이트 */
EXEC UpdateCharUID @user_uid, @user_pos, @CID , @UserInfoType
GO

View File

@@ -0,0 +1,2 @@
UPDATE CharSpell Set Spell = 0xFFFFFFFF35000100050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
WHERE CID IN (SELECT CID FROM CharInfo WHERE Level = 100)

View File

@@ -0,0 +1,26 @@
----------------------------------------------------------------------------------------------------------------------
-- UpdateCharSpell.sql
----------------------------------------------------------------------------------------------------------------------
/*
*/
CREATE PROCEDURE dbo.UpdateCharSpell
@char_uid AS INT, /* 캐릭터 고유 아이디 */
@C_Spell AS varBINARY(1664) /* 스펠 (128 * 13 = 1664) */
AS
SET NOCOUNT ON
IF EXISTS (SELECT CID FROM CharSpell WHERE CID = @char_uid)
BEGIN
UPDATE CharSpell SET Spell = @C_Spell WHERE CID = @char_uid
END
ELSE
BEGIN
INSERT INTO CharSpell(CID,Spell)
VALUES (@char_uid,@C_Spell)
END
GO

View File

@@ -0,0 +1,7 @@
1. CharSpell(Table).sql을 실행하여 CharSpell 테이블을 생성한다.
2. SELECT CID FROM CharInfo를 수행하여 나온 CID를 정규식을 사용하여 Insert문으로 변형하여 나온 Insert문을 실행한다.
- 찾을말 : [0-9]*
- 바꿀말 : INSERT INTO CharSpell(CID) VALUES(\0)
3. UpdateCharSpell(Procedure).sql UpdateCharSpell 프로시져를 생성한다.
4. 기존에 있던 InsertChar 프로시져를 InsertChar(Procedure).sql로 변경한다.
5. 이펙트 버그가 사라졌다면 SetSpell(Query)를 실행해서 기존에 100랩이던 유저들에게 만랩이펙트를 부여한다.

View File

@@ -0,0 +1,40 @@
-- 이미 Part2 파티 관련 프로시저가 있으나 제대로 동작하지 않는 경우 실행!
-- 관련 프로시저를 모두 바로 잡는다.
ALTER PROCEDURE dbo.GetPartyInfo_Part2
@Party_uid AS INT /* 파티 아이디 */
AS
SET NOCOUNT ON
SELECT Party, UserInfo, GID FROM PartyInfo WHERE PID = @Party_uid
GO
ALTER PROCEDURE dbo.InsertParty_Part2
@Party AS varBINARY(202), /* 친구 리스트 */
@UserInfo AS varBINARY(72), /* 유저 정보 */
@GID AS int /* 임시 길드원 정보 */
AS
SET NOCOUNT ON
INSERT INTO PartyInfo (Party, UserInfo, GID) VALUES (@Party, @UserInfo, @GID)
-- 고유 아이디 돌려줌
SELECT CAST(SCOPE_IDENTITY() AS INT)
GO
ALTER PROCEDURE dbo.UpdatePartyInfo_Part2
@Party_uid AS INT, /* 파티 고유 아이디 */
@Party AS varBINARY(202), /* 친구 리스트 */
@UserInfo AS varBINARY(72), /* 유저 정보 */
@GID AS INT /* 임시 길드 정보 */
AS
SET NOCOUNT ON
UPDATE PartyInfo SET Party = @Party, UserInfo = @UserInfo, GID = @GID WHERE PID = @Party_uid

View File

@@ -0,0 +1,48 @@
-- 마지막 수정: 파트2 1470
-- [길마가 없는 길드 바로잡기]
-- 1. 길마뿐 아니라 길드원이 없으나 존재하는 길드 검색
SELECT strGuildName FROM TblGuildInfo
WHERE nGuildID NOT IN (SELECT Distinct nGuildID FROM TblGuildMember)
-- 1-1. 해당 길드들 삭제
DELETE TblGuildInfo
WHERE nGuildID NOT IN (SELECT Distinct nGuildID FROM TblGuildMember)
-- 2. 길마가 없는 길드 검색
SELECT strGuildName FROM TblGuildInfo
WHERE nGuildID NOT IN (SELECT Distinct nGuildID FROM TblGuildMember WHERE nPosition = 1)
-- 2-1. 길마 만들어 주기 (길마 우선 순위 : 레벨 > 명성치 > 캐릭터명 > 인벤토리 금액)
DECLARE @ROW INT
DECLARE @GuildID INT
DECLARE @TABLE TABLE
(
nRowID INT IDENTITY(1,1)
, nGuildID INT
)
INSERT INTO @TABLE
SELECT nGuildID FROM TblGuildInfo
WHERE nGuildID NOT IN (SELECT Distinct nGuildID FROM TblGuildMember WHERE nPosition = 1)
SET @ROW = @@ROWCOUNT
WHILE (@ROW > 0)
BEGIN
SELECT @GuildID = nGuildID FROM @TABLE WHERE nRowID = @ROW
UPDATE TblGuildMember
SET nPosition = 1
FROM (
SELECT TOP 1 B.nGuildID,nCID FROM CharInfo A join TblGuildMember B
ON A.CID = B.nCID
WHERE nGuildID = @GuildID
ORDER BY A.Level desc,A.Fame desc) C,TblGuildMember D
WHERE C.nGuildID = D.nGuildID AND C.nCID = D.nCID
SET @ROW = @ROW - 1
END

View File

@@ -0,0 +1,2 @@
ALTER TABLE [TblGameTime] ADD [EnterTime] [tinyint] NULL
GO

View File

@@ -0,0 +1,3 @@
Alter Table UserInfo
Add KeyInfo varbinary(137)

View File

@@ -0,0 +1,2 @@
UPDATE UserFirstLoginInfo
SET TransferCharCount = 0