{ "$schema": "https://raw.githubusercontent.com/haje01/loglab/master/schema/lab.schema.json", "domain": { "name": "rpg", "desc": "MMORPG 게임 로그 샘플", "version": "0.0.1" }, "import": ["common"], "types": { "stringId": { "type": "string", "desc": "문자열 ID" }, "unsigned": { "type": "integer", "desc": "0 또는 양의 정수", "minimum": 0 }, "unsignedId": { "type": "integer", "desc": "0 또는 양의 정수 ID", "minimum": 0 }, "platformId": { "type": "string", "desc": "플랫폼 ID", "enum": ["ios", "aos", "pc"] }, "networkId": { "type": "string", "desc": "네트워크 ID", "enum": ["wifi", "2G", "3G", "4G", "5G"] }, "ipType": { "type": "string", "desc": "IP 주소 타입", "enum": ["IPv4", "IPv6", "Unknown"] }, "ip": { "type": "string", "desc": "IP 주소" }, "moneyCd": { "desc": "돈 종류 코드", "type": "integer", "enum": [ [10, "귀속 게임 머니"], [20, "게임 머니"], [30, "귀속 유료 머니"], [40, "유료 머니"], [50, "포인트"] ] }, "normReasonCd": { "desc": "일반 원인 코드", "type": "integer", "enum": [ [0, "알수 없음"], [10, "시스템"], [20, "GM"], [30, "사용"], [40, "드랍"], [50, "채집"], [60, "전투"], [70, "퀘스트"], [80, "던전"], [90, "상점"], [100, "유료 상점"], [110, "거래소"], [120, "강화"], [130, "길드"], [140, "우편"], [150, "펫"] ] }, "questStatus": { "desc": "퀘스트 상태", "type": "string", "enum": [ ["take", "획득"], ["start", "시작"], ["cancel", "취소"], ["done", "종료"] ] }, "dungeonStatus": { "desc": "던전 상태", "type": "string", "enum": [ ["enter", "입장"], ["cancel", "취소"], ["done", "완료"], ["death", "사망"] ] }, "dungeonGrade": { "desc": "던전 완료 등급", "type": "string", "enum": ["s", "a", "b", "c", "f"] }, "joinStatus": { "desc": "단체 가입 상태", "type": "string", "enum": [ ["enter", "가입"], ["exit", "탈퇴"] ] }, "chatChannel": { "desc": "채팅 채널", "type": "integer", "enum": [ [0, "현재"], [1, "월드"], [2, "파티"], [3, "길드"], [4, "확성기"] ] }, "reportType": { "desc": "신고 종류", "type": "integer", "enum": [ [1, "욕설"], [2, "광고"], [3, "매크로 사용"], [4, "기타 어뷰징"], [5, "작업장"], [6, "개인 정보 요청"], [7, "불법/불건전 정보"], [99, "기타"] ] } }, "bases": { "Ip": { "desc": "IP 정보", "fields": [ ["ClientIpType", "types.ipType", "클라이언트 IP 타입"], ["ClientIp", "types.ip", "클라이언트 IP (ClientIpType 에 맞게)"] ] }, "Device": { "desc": "디바이스 정보", "mixins": ["bases.Ip"], "fields": [ ["AppId", "types.stringId", "앱 ID"], ["ClientVer", "types.stringId", "클라이언트 앱 버전"], ["DevicePlatform", "types.platformId", "디바이스 플랫폼"], ["DeviceOsVer", "string", "디바이스 OS 버전"], ["DeviceName", "string", "디바이스 이름"], ["Channel", "string", "접속 채널(루트)"], ["TelecomId", "types.stringId", "통신사 ID"], ["Network", "types.networkId", "네트워크 종류", true], ["ScreenWidth", "types.unsigned", "디바이스 화면 너비", true], ["ScreenHeight", "types.unsigned", "디바이스 화면 높이", true], ["ScreenDensity", "number", "디바이스 화소 밀도", true], ["CpuInfo", "string", "디바이스 CPU 정보 ('종류|클럭|코어수' 형식)", true], ["Memory", "types.unsigned", "디바이스 메모리 (MB)", true], ["GraphicsApi", "string", "디바이스 그래픽 API 정보", true], ["DeviceId", "string", "디바이스 ID", true] ] }, "GameServer": { "desc": "게임 서버 정보", "fields": [ ["GameSvrId", "types.stringId", "게임 서버 ID"], ["ZoneId", "types.unsignedId", "게임 서버가 속하는 구역 ID. 없는 경우 0"] ] }, "Account": { "desc": "게임 계정 정보", "fields": [ ["AcntId", "types.stringId", "게임 계정 ID"], ["LinkRd", "types.unsigned", "랜덤 코드로 로그들을 연결", true] ] }, "ServerAccount": { "desc": "게임 서버와 계정 정보", "mixins": ["bases.GameServer", "bases.Account"] }, "Vip": { "desc": "VIP 정보", "fields": [ ["TotalCharge", "types.unsigned", "계정 누적 충전액"], ["VipLevel", "types.unsigned", "계정 VIP 레벨"] ] }, "Character": { "desc": "캐릭터 정보", "mixins": ["bases.ServerAccount"], "fields": [ ["CharId", "types.stringId", "캐릭터 ID"], ["CharName", "string", "캐릭터 이름"], ["CharLevel", "types.unsigned", "캐릭터 레벨"] ] }, "Location": { "desc": "맵상 위치 정보", "fields": [ ["MapCd", "types.unsigned", "맵 코드", true], ["PosX", "number", "맵상 X 위치", true], ["PosY", "number", "맵상 Y 위치", true], ["PosZ", "number", "맵상 Z 위치", true] ] }, "LocCharacter": { "desc": "맵상 캐릭터 정보", "mixins": ["bases.Character", "bases.Location"] }, "Item": { "desc": "아이템 정보", "fields": [ ["ItemCd", "types.unsigned", "아이템 종류 코드"], ["ItemId", "types.stringId", "아이템 개체 ID"] ] }, "Money": { "desc": "돈 정보", "fields": [ ["MoneyCd", "types.moneyCd", "돈 종류 코드"] ] }, "Guild": { "desc": "길드 정보", "fields": [ ["GuildId", "types.unsigned", "길드 ID"], ["GuildName", "string", "길드 이름"] ] }, "Castle": { "desc": "성 정보", "fields": [ ["CastleId", "types.unsigned", "성 ID"], ["CastleName", "string", "성 이름"], ["CastleLevel", "types.unsigned", "성 레벨"] ] } }, "events": { "AcntCreate": { "desc": "계정 생성", "mixins": ["common.bases.CommonAcnt", "bases.Account", "bases.Device"] }, "CharCreate": { "desc": "캐릭터 생성", "mixins": ["bases.ServerAccount", "bases.Character"], "fields": [ ["CharIndex", "types.unsigned", "해당 캐릭터가 계정의 몇 번째 인지 (시작 1)"] ] }, "CharDelete": { "desc": "캐릭터 삭제", "mixins": ["bases.ServerAccount", "bases.Character"], "fields": [ ["CharLevel", "types.unsigned", "캐릭터 레벨"] ] }, "AcntLogin": { "desc": "계정 로그인", "mixins": ["common.bases.CommonAcnt", "bases.ServerAccount", "bases.Device", "bases.Vip"] }, "AcntLogout": { "desc": "계정 로그아웃", "mixins": ["bases.ServerAccount", "bases.Ip", "bases.Vip"], "fields": [ ["PlayTime", "number", "플레이 시간 (초)", true] ] }, "CharLogin": { "desc": "캐릭터 로그인", "mixins": ["bases.Character"] }, "CharLogout": { "desc": "캐릭터 로그아웃", "mixins": ["bases.Character"], "fields": [ ["PlayTime", "number", "플레이 시간 (초)", true] ] }, "CharDie": { "desc": "캐릭터 사망", "mixins": ["bases.LocCharacter"], "fields": [ { "name": "Reason", "desc": "캐릭터 사망 원인", "type": "string", "enum": [ ["npc", "몬스터"], ["pc", "다른 캐릭터"], ["etc", "기타"] ] }, ["ReasonInfo", "string", "사망 원인 추가 정보 (npc/pc 인 경우 ID)", true] ] }, "CharRevive": { "desc": "캐릭터 부활", "mixins": ["bases.LocCharacter"], "fields": [ ["Paid", "boolean", "유료 부활 여부"] ] }, "ItemChg": { "desc": "아이템 변화", "mixins": ["bases.LocCharacter", "bases.Item"], "fields": [ ["Change", "integer", "아이템 수 변화량 (+는 증가/-는 감소)"], ["After", "types.unsigned", "변화후 아이템 수"], ["ReasonCd", "types.normReasonCd", "아이템 변화 원인 코드"], ["ReasonInfo", "string", "아이템 변화 원인 추가 정보 (npc/pc 인 경우 ID)", true] ] }, "MoneyChg": { "desc": "돈 변화", "mixins": ["bases.LocCharacter", "bases.Money"], "fields": [ ["Change", "integer", "돈 변화량 (+는 증가/-는 감소)"], ["After", "types.unsigned", "변화후 돈"], ["ReasonCd", "types.normReasonCd", "돈 변화 원인 코드"], ["ReasonInfo", "string", "돈 변화 원인 추가 정보 (npc/pc 인 경우 ID)", true] ] }, "ExpChg": { "desc": "경험치 변화", "mixins": ["bases.LocCharacter"], "fields": [ ["Change", "integer", "경험치 변화량 (+는 증가/-는 감소)"], ["After", "types.unsigned", "변화후 경험치"], ["ReasonCd", "types.normReasonCd", "경험치 변화 원인 코드"], ["ReasonInfo", "string", "경험치 변화 원인 추가 정보", true] ] }, "LevelChg": { "desc": "레벨 변화", "mixins": ["bases.LocCharacter"], "fields": [ ["Change", "integer", "레벨 변화량 (+는 증가/-는 감소)"], ["After", "types.unsigned", "변화후 레벨"] ] }, "QuestChg": { "desc": "퀘스트 변화", "mixins": ["bases.LocCharacter"], "fields": [ ["QuestCd", "types.unsigned", "퀘스트 종류 코드"], ["QuestId", "types.unsigned", "퀘스트 개체 ID", true], ["Status", "types.questStatus", "퀘스트 상태"] ] }, "DungeonChg": { "desc": "던전 변화", "mixins": ["bases.LocCharacter"], "fields": [ ["Status", "types.dungeonStatus", "던전 상태"], ["Score", "types.dungeonGrade", "던전 완료 등급"] ] }, "SkillFreq": { "desc": "스킬별 1 분간 사용 빈도 (어뷰징 검출용)", "mixins": ["bases.LocCharacter"], "fields": [ ["SkillId", "types.unsigned", "스킬 ID"], ["Count", "types.unsigned", "사용 횟수"] ] }, "Enchant": { "desc": "아이템 강화 (소진된 돈/아이템들은 LinkRd 로 연결)", "mixins": ["bases.LocCharacter", "bases.Item"], "fields": [ ["Change", "integer", "아이템 레벨 변화"], ["After", "integer", "강화 후 아이템 레벨"], ["Break", "boolean", "파괴 여부"] ] }, "Produce": { "desc": "제작 (재료/생산 아이템들은 LinkRd 로 연결)", "mixins": ["bases.LocCharacter"], "fields": [ ["RecipeCd", "types.unsigned", "제작 레시피 코드"], ["Count", "types.unsigned", "제작 수량"] ] }, "ExchgReg": { "desc": "거래소 등록/재등록 (아이템 소진, 잔여 스택 아이템 추가는 LinkRd로 연결)", "mixins": ["bases.LocCharacter", "bases.Item"], "fields": [ ["ItemCount", "types.unsigned", "등록 아이템 수"], ["ExchgId", "types.unsigned", "거래 ID"], ["Price", "types.unsigned", "등록 금액"] ] }, "ExchgBuy": { "desc": "거래소에서 구매 (아이템 추가, 돈 소진은 LinkRd 로 연결)", "mixins": ["bases.LocCharacter", "bases.Item"], "fields": [ ["ItemCount", "types.unsigned", "구매 아이템 수"], ["ExchgId", "types.unsigned", "거래 ID"], ["Price", "types.unsigned", "구매 금액 (세금 포함)"], ["TaxRate", "number", "거래 당시의 세율"] ] }, "ExchgSell": { "desc": "거래소에서 판매 완료 (돈 추가는 LinkRd 로 연결)", "mixins": ["bases.LocCharacter", "bases.Item"], "fields": [ ["ItemCount", "types.unsigned", "판매 아이템 수"], ["ExchgId", "types.unsigned", "거래 ID"], ["Price", "types.unsigned", "판매 금액 (세금 포함)"], ["TaxRate", "number", "거래 당시의 세율"] ] }, "ExchgUnReg": { "desc": "거래소 등록 취소 (복구된 아이템은 LinkRd 로 연결)", "mixins": ["bases.LocCharacter", "bases.Item"], "fields": [ ["ItemCount", "types.unsigned", "복구 아이템 수"], ["ExchgId", "types.unsigned", "거래 ID"] ] }, "CashShopBuy": { "desc": "유료 상점 구매 (아이템 추가, 돈 소진은 LinkRd 로 연결)", "mixins": ["bases.LocCharacter", "bases.Item"], "fields": [ ["ItemCount", "types.unsigned", "구매 아이템 수"], ["Price", "types.unsigned", "구매 금액"] ] }, "CashShopSell": { "desc": "유료 상점 판매 (돈 추가는 LinkRd 로 연결)", "mixins": ["bases.LocCharacter", "bases.Item"], "fields": [ ["ItemCount", "types.unsigned", "판매 아이템 수"], ["Price", "types.unsigned", "판매 금액"] ] }, "PartyCreate": { "desc": "파티 생성", "mixins": ["bases.LocCharacter"], "fields": [ ["PartyId", "types.unsigned", "파티 ID"], ["MaxCount", "types.unsigned", "최대 인원"] ] }, "PartyMemChg": { "desc": "파티 멤버 변화", "mixins": ["bases.LocCharacter"], "fields": [ ["PartyId", "types.unsigned", "파티 ID"], ["Status", "types.joinStatus", "파티 가입 상태"] ] }, "PartyDelete": { "desc": "파티 삭제 (공헌도는 LinkRd 로 연결)", "mixins": ["bases.GameServer"], "fields": [ ["PartyId", "types.unsigned", "파티 ID"] ] }, "GuildCreate": { "desc": "길드 생성", "mixins": ["bases.LocCharacter", "bases.Guild"] }, "GuildMemChg": { "desc": "길드 멤버 변화", "mixins": ["bases.LocCharacter", "bases.Guild"], "fields": [ ["Status", "types.joinStatus", "길드 가입 상태"] ] }, "GuildDelete": { "desc": "길드 삭제", "mixins": ["bases.LocCharacter"], "fields": [ ["GuildId", "types.unsigned", "길드 ID"] ] }, "CastleWarDeclare": { "desc": "공성 선언", "mixins": ["bases.LocCharacter", "bases.Guild", "bases.Castle"], "fields": [ ["GuildMemCnt", "types.unsigned", "길드 멤버 수"] ] }, "CastleWarEnd": { "desc": "공성 종료 (공헌도는 LinkRd 로 연결)", "mixins": ["bases.LocCharacter", "bases.Guild", "bases.Castle"], "fields": [ ["GuildMemCnt", "types.unsigned", "길드 멤버 수"], ["Success", "boolean", "성공 여부"] ] }, "Contribute": { "desc": "레이드, 전쟁 등에서 공헌도", "mixins": ["bases.LocCharacter"], "fields": [ ["Point", "types.unsigned", "공헌 포인트"] ] }, "MailSend": { "desc": "우편 발신 (첨부된 아이템/돈은 LinkRd 로 연결)", "mixins": ["bases.LocCharacter"], "fields": [ ["title", "string", "우편 제목"], ["message", "string", "우편 내용", true] ] }, "AttachItem": { "desc": "첨부한 아이템", "mixins": ["bases.LocCharacter", "bases.Item"], "fields": [ ["Count", "integer", "아이템 수"] ] }, "AttachMoney": { "desc": "첨부한 돈", "mixins": ["bases.LocCharacter", "bases.Money"], "fields": [ ["Amount", "integer", "금액"] ] }, "MailRecv": { "desc": "우편 수신 (받은 아이템/돈은 LinkRd 로 연결)", "mixins": ["bases.LocCharacter"], "fields": [ ["Title", "string", "우편 제목"], ["Msg", "string", "우편 내용", true] ] }, "Chat": { "desc": "채팅", "mixins": ["bases.LocCharacter"], "fields": [ ["Channel", "types.chatChannel", "채팅 채널"], ["Msg", "string", "채팅 내용"] ] }, "Charge": { "desc": "충전 (얻은 돈은 LinkRd 로 연결)", "mixins": ["bases.LocCharacter", "bases.Vip"], "fields": [ ["Amount", "types.unsigned", "충전 금액 (패키지의 경우 0)"], ["PackageCd", "boolean", "패키지를 통한 충전시 패키지 코드"], ["PackageName", "boolean", "패키지를 통한 충전시 패키지 이름"] ] }, "Report": { "desc": "신고", "mixins": ["bases.LocCharacter", "bases.Vip"], "fields": [ ["GuildId", "types.unsigned", "길드 ID", true], ["GuildName", "string", "길드 이름", true], ["Type", "types.reportType", "신고 종류"], ["Title", "string", "신고 제목"], ["Msg", "string", "신고 내용", true], ["TargetCharId", "types.stringId", "대상 캐릭터 ID"], ["TargetCharName", "string", "대상 캐릭터 이름"], ["TargetCharLevel", "types.unsigned", "대상 캐릭터 레벨"], ["TargetGuildId", "types.unsigned", "대상 캐릭터 길드 ID", true], ["TargetGuildName", "string", "대상 캐릭터 길드 이름", true] ] }, "Return": { "desc": "복귀 (이벤트로 받은 아이템/돈은 LinkRd 로 연결)", "mixins": ["bases.LocCharacter", "bases.Vip"], "fields": [ ["ElapseDays", "types.unsigned", "마지막 접속후 경과일"], ["Days", "types.unsigned", "마지막 접속후 경과일"] ] }, "CharSync": { "desc": "정기적인 캐릭터 상태", "mixins": ["bases.LocCharacter"], "fields": [ ["Level", "types.unsigned", "캐릭터 레벨"], ["Exp", "types.unsigned", "캐릭터 경험치"] ] }, "CharMoneySync": { "desc": "정기적인 캐릭터 머니 상태", "mixins": ["bases.Money"], "fields": [ ["Amount", "types.unsigned", "금액"], ["LinkRd", "types.unsigned", "CharSync 와 연결"] ] }, "Debug": { "desc": "디버그 로그", "mixins": ["bases.GameServer"], "fields": [ ["Msg", "string", "디버깅용 메시지"] ] } } }