------------------------------------------------------------------------------
DB 관련 History
------------------------------------------------------------------------------
------------------------------------------------------------------------------
# PLAYER_INDEX_CREATE_BUG_FIX
2005.11.07
새로 생성한 계정이 첫 접속시 접속이 되지 않는 문제 해결.
player_index에 새 계정의 정보를 만드는 Query의 리턴을 처리 하지 않았음.
처리후 되돌아가도록 함수 RESULT_PLAYER_INDEX_CREATE(...) 를 추가함.
------------------------------------------------------------------------------
# TTL_CACHE
------------------------------------------------------------------------------
alter table account add ttl_mileage int(11) NOT NULL default 0 after ttl_cash
# GUILD_SKILL_COOLTIME_BUG_FIX
------------------------------------------------------------------------------
* 구조체 변수 초기화 버그:
파라미터 _dwSkillVnum
dwSkillVnum(dwSkillVnum) (X)
dwSkillVnum(_dwSkillVnum) (O)
* m_pqSkill pop 이후 데이터 접근함
# UNKNOWN_GUILD_MANAGER_UPDATE_LOG
------------------------------------------------------------------------------
알수 없는 길드 매니저 로그 삭제 (1초마다 출력되어 양이 너무 많음)
# PATCH
------------------------------------------------------------------------------
* MYSHOP_PRICE_LIST:
비단 보따리를 사용하면 아이템 가격을 저장할 수 있다
SQL 테이블:
myshop_pricelist_POSTFIX
* ADD_GUILD_PRIV_TIME:
길드 보너스에 유효 시간을 추가함
* ADD_EMPIRE_PRIV_TIME:
제국 보너스 시간 조정
* BLOCK_CHAT:
특정 유저에게 채팅 금지
* ADD_GRANDMASTER_SKILL:
SQL 테이블:
skill_proto_POSTFIX:
szPointOn3, szPointPoly3, szDurationPoly3, szGrandMasterAddSPCostPoly 컬럼 추가
ALTER TABLE skill_proto_05 ADD COLUMN szPointOn3 varchar(100) NOT NULL default 'NONE';
ALTER TABLE skill_proto_05 ADD COLUMN szPointPoly3 varchar(100) NOT NULL default '';
ALTER TABLE skill_proto_05 ADD COLUMN szDurationPoly3 varchar(100) NOT NULL default '';
ALTER TABLE skill_proto_05 ADD COLUMN szGrandMasterAddSPCostPoly varchar(100) NOT NULL default '';
* ADD_BUILDING_NPC:
SQL 테이블:
object_proto_POSTFIX:
npc, group_vnum, dependent_group 컬럼 추가
* ITEM_LOAD_LOG_ATTACH_PID:
PID 덧붙임
* HOTBACKUP:
한시간단위로 캐릭터 변화 정보 저장
# 개인 상점 가격 저장 관련 로그
요청시:
캐쉬히트시:
Cache MyShopPricelist handle[%d] pid[%d]
캐쉬미스시:
Query MyShopPricelist handle[%d] pid[%d]
게임서버에 보낼때:
Load MyShopPricelist handle[%d] pid[%d] count[%d]
# 개인상점 아이템 가격정보 저장/갱신
Game server 로 부터 HEADER_GD_MYSHOP_PRICELIST_UPDATE packet 받음
1. ClientManager.cpp - CClientManager::MyshopPricelistUpdate
캐시에 가격정보가 있으면 캐시의 데이터 갱신.
캐시에 가격정보가 없으면 DB에 기존의 데이터 로드 쿼리.
SELECT item_vnum, price FROM myshop_pricelist_tor WHERE owner_id='owner_id'
2. ClientManager.cpp - CClientManager::RESULT_PRICELIST_LOAD_FOR_UPDATE
로드된 기존의 데이터로 캐시 생성.
받았던 갱신할 데이터로 캐시의 데이터 갱신. - CItemPriceListTableCache::UpdateList
# 개인상점 아이템 가격정보의 Load
Game server 로 부터 HEADER_GD_MYSHOP_PRICELIST_REQ pakcet 받음
1. ClientManager.cpp - CClientManager::MyshopPricelistRequest
캐시에 가격정보가 있으면 캐시를 읽어 응답 패킷(HEADER_GD_MYSHOP_PRICELIST_RES) 전송.
캐시에 가격정보가 없으면 DB 에 쿼리
SELECT item_vnum, price FROM myshop_pricelist_tor WHERE owner_id='owner_id'
2. ClientManager.cpp - CClientManager::RESULT_PRICELIST_LOAD
DB 에서 로드한 정보로 캐시 생성.
로드한 정보로 가격정보 리스트 요청에 대한 응답 패킷(HEADER_GD_MYSHOP_PRICELIST_RES) 전송.
# 개인상점 아이템 가격정보 캐시 Flush
Flush 주기: conf.txt 에 ITEM_PRICELIST_CACHE_FLUSH_SECONDS 값 추가.(초단위)
Cache.cpp - CItemPriceListTableCache::OnFlush
캐시를 소유하는 플레이어에 대한 아이템 가격정보 전부 삭제.
DELETE FROM myshop_pricelist_tor WHERE owner_id='owner_id'
캐시에 저장된 아이템 가격정보를 DB 에 전부 쿼리.
INSERT INTO myshop_pricelist_tor VALUES( 'owner_id', 'item_vnum', 'price' )
# 개인 상점 가격 저장 DB Scheme
CREATE TABLE `myshop_pricelist_tor` (
`owner_id` int(11) unsigned NOT NULL default '0',
`item_vnum` int(11) unsigned NOT NULL default '0',
`price` int(10) unsigned NOT NULL default '0',
) ENGINE=MyISAM DEFAULT CHARSET=euckr
# Billing ON - OFF 짝이 안 맞는 문제 2005.05.03.ipkn
1. 유저가 접속한 상태
2. DB가 셧다운 된다. ( 이 경우에도 유저는 정상적인 플레이 가능 )
3. 이 상황에서 유저가 접속을 종료한다. (DB가 끊겼서 패킷 전송 실패)
4. DB가 다시 켜지면 해당 유저의 빌링 정보가 복구되지 않는다.
5. 이 유저는 Billing ON 상태로 유지되어 계속 시간이 감소된다.
- DB-AUTH 접속이 각각 끊기면:
AUTH 에서 빌링 처리 테이블을 전부 지운다.
DB 가 다시 접속하면 생성한다.
-> 접속이 끊겨있는 동안은 유저는 무료 플레이가 가능하다
# 플레이어 아이디 확인
select id from player_postfix where name="라라";
# DB 테이블
현재(2005.04.13)는 서버별로 postfix 를 붙이고 있다
_01, _02, _03, _04 는 기존 서버군이며
_05 는 천마서버이다.
하지만 앞으로는 아예 데이터 베이스를 나누어서 구분하도록 한다
# 상점 아이템
db:
shop:
vnum: 상점 구분 번호
name: 상점 이름
npc_vnum: 연결된 NPC 이름
shop_item_table:
shop_vnum: 상점 구분 번호
item_vnum: 아이템 번호
count: 아이템 개수
상점 추가:
insert into shop (vnum, name, npc_vnum) values (9, "떠돌이 행상인", 20042);
상점 물건 추가:
insert into shop_item (shop_vnum, item_vnum, count) values (9, 11901, 1);
insert into shop_item (shop_vnum, item_vnum, count) values (9, 11903, 1);
insert into shop_item (shop_vnum, item_vnum, count) values (9, 11902, 1);
insert into shop_item (shop_vnum, item_vnum, count) values (9, 11904, 1);
리붓해야 적용됨