Compare commits

..
2393 Commits
Author SHA1 Message Date
sars 720d57adc3 Merge branch 'devel' of ssh://storage.hided.net:2525/devsam/core into devel 2022-03-16 12:12:46 -07:00
sars 596fa9ccc8 토너먼트와 베팅장 하이라이트하기. (모바일에서 dropdown-item에서는 아직 적용 못함) 2022-03-16 12:09:29 -07:00
Hide_D 346f9868d5 refac: schema.sql COLLATE, json_valid 지정 2022-03-16 23:44:12 +09:00
Hide_D 8b005a7816 game: 조기 은퇴 커맨드 추가 2022-03-16 01:30:47 +09:00
Hide_D ecef26cdf0 game: 유저장 자동 금쌀매매 기준 추가 변경 2022-03-16 00:38:18 +09:00
Hide_D be567fc68c game: 유저장 자동 금쌀매매 기준 변경
- 3번 전멸하는 동안 필요한 금쌀을 모두 가지고 있을 경우 군량매매하지 않음
2022-03-16 00:02:38 +09:00
Hide_D 176cdae3e5 game: 천통국 결정 시 자동으로 임관 금지 설정 2022-03-15 23:43:43 +09:00
Hide_D 3005b30403 feat: BlockScoutAction Action 추가
- 모든 국가의 임관 설정을 임의 설정하는 이벤트 액션
2022-03-15 23:20:28 +09:00
sars f0e4f51c50 serverNameWithCount를 serverName과 serverCnt로 나눔 2022-03-14 19:39:35 -07:00
sars 9d25d5cc73 Merge branch 'devel' of ssh://storage.hided.net:2525/devsam/core into devel 2022-03-14 14:07:01 -07:00
sars f7f468dad6 서버 이름과 횟수를 printStaticValue에 추가 2022-03-14 14:06:08 -07:00
Hide_D 4e1c2fdcfd game,fix: 백이병 vs 정란, 벽력거 공격 상성 관련 문제 수정 2022-03-14 22:27:13 +09:00
Hide_D 556ef530fd misc: gitignore update 2022-03-14 22:13:06 +09:00
sars 4b61d3dc9c 동결상태를 isLocked로 printStaticValue에 추가 2022-03-14 03:42:04 -07:00
sars 0332cfb428 lastExecuted를 printStaticValues에 추가 2022-03-14 03:07:16 -07:00
Hide_D 21dd42cb71 misc: README 변경 2022-03-13 21:40:53 +09:00
Hide_D a85148790a Merge pull request 'feat: php vendor를 동적으로 구성하도록 변경' (#209) from no_php_vendor_code into devel
Reviewed-on: https://storage.hided.net/gitea/devsam/core/pulls/209
2022-03-13 21:15:42 +09:00
Hide_D 27a00b339b fix: composer 준비 전에도 j_install_status가 응답해야함 2022-03-13 21:03:39 +09:00
Hide_D 96caef8f43 fix: Web UI로 초기 install이 불가능한 버그 수정 2022-03-13 20:16:54 +09:00
Hide_D 4c8b0df8b0 build: 빌드 환경 재 설정
- lock에 따라 npm ci로 변경
- webpack build를 서버 내에서 하므로 dev dependency가 거의 없음
- webpack build에서 gateway build를 별도로 작성
2022-03-13 19:47:24 +09:00
Hide_D ba88642ab8 fix: 초기 index.php에서 vendor/autoload.php 검사 2022-03-13 19:06:31 +09:00
Hide_D db846c9bc2 feat: install에서 composer update도 수행. update 기준 변경
- lock file을 git에 추가하였으므로, 이에 따름
2022-03-13 18:56:29 +09:00
Hide_D 42f31ce46e dep: vendor directory 제거 2022-03-13 18:33:09 +09:00
Hide_D 796fbcce1a dep: composer update 2022-03-13 16:55:04 +09:00
Hide_D e15f964f81 fix: oauth_kakao에서 누락된 userID 반영 2022-03-13 13:46:13 +09:00
Hide_D 41234fd502 fix: COMPRESSED 타입 table 제거 2022-03-13 13:42:40 +09:00
Hide_D e54cdfdb13 dep: npm package update. package-lock.json 해제 2022-03-13 01:59:55 +09:00
Hide_D 556d6be15e feat: 해시 기반 간이 DRBG, 그에 기반한 RandUtil (#208)
기존의 Util 내의 함수는 mt_rand에 기반하고 있어서 일반적으론 충분하지만,
게임 내부에서 랜덤 값을 정교하게 제어하고 싶은 경우에는 적절하지 않았음.

따라서 직접 seed를 제어할 수 있는 난수생성기를 추가.
SHA512(seed || blockIdx) 의 형태로 동작하는 DRBG이며, FIPS 표준을 따르는 RNG는 아니지만 암호학적으로 안전한 형태로 구현함.

PHP, TS 두가지 형태로 구현.

Reviewed-on: https://storage.hided.net/gitea/devsam/core/pulls/208
Co-authored-by: hide_d <hided62@gmail.com>
Co-committed-by: hide_d <hided62@gmail.com>
2022-03-12 23:53:16 +09:00
Hide_D b19bd263a7 game: 정란 상성 공격력 상향, 차병 비용 절감 2022-03-12 20:11:36 +09:00
Hide_D 163709e1c0 game: 이세계무쌍- 유저무쌍 멀티 유니버스 수정 2022-03-10 23:12:47 +09:00
Hide_D e6286c711d feat: NPC 추방,몰수, 고유메시지 빈도를 GameConst에서 조절 2022-03-10 23:11:56 +09:00
Hide_D ac2d7b6289 game: 이세계무쌍 비급 시나리오 추가 2022-03-08 22:07:19 +09:00
Hide_D 5a3764b418 game: 이세계무쌍 시나리오 등록 2022-03-08 21:58:23 +09:00
Hide_D ed28cabb16 feat: 유닛테스트 준비 2022-03-03 00:16:01 +09:00
Hide_D f522a6cefd dep: typescript test 기반 추가 2022-03-02 23:31:32 +09:00
Hide_D 923d7f5178 dep: phpunit 추가 2022-03-02 23:29:09 +09:00
Hide_D f8ab617e4c fix: 커맨드 실행 조건 강제 탈출 조건을 잘못 작성하는 버그 수정 2022-03-01 12:29:21 +09:00
sars 022d6e94e3 $general->getVar('nation')로 수정 2022-02-25 20:19:56 -08:00
sars 25b414325d general -> $general, 오타수정 2022-02-25 20:16:48 -08:00
sars 15aaf04093 급하게 도기 코드 수정, 냐섭에서 테스트할 예정 2022-02-25 20:09:03 -08:00
sars bd896d1530 동결풀기위해 도기템을 임시로 일단 주석처리함 2022-02-25 19:41:10 -08:00
Hide_D 42ff8adee8 feat: api.php 호출에서 path를 경로로 지정하는 방식 추가 2022-02-25 01:54:22 +09:00
Hide_D 07dc78784e fix: 연감 static var 출력 버그 수정 2022-02-25 01:24:02 +09:00
Hide_D e3e009fe5b fix: 1개 선택 베팅 보상 예측값이 잘못 설정된 버그 2022-02-24 00:22:27 +09:00
Hide_D 893688459c game: 표준 공백지 시나리오에 천통 베팅 추가 2022-02-24 00:15:36 +09:00
Hide_D 0aa6120530 fix: 탑 바 메뉴에서 세력도 제거. 세력도 페이지 제거 2022-02-23 23:55:18 +09:00
Hide_D 85aa7ea71f feat: 연감에 기존 세력도 기능 통합 2022-02-23 23:46:40 +09:00
Hide_D 208a75dc16 game,feat: 소비형 아이템 효율 상승, 환약 3회용으로 변경 2022-02-23 01:41:24 +09:00
Hide_D 15453d0704 game: 숙련도로 얻는 유산 포인트 감소 2022-02-23 00:21:02 +09:00
Hide_D c77e89ca0d fix: 2회 이상 연속 전투에 성벽 전투가 포함된 경우 대인 사살이 계산되지 않는 버그 2022-02-22 23:55:13 +09:00
Hide_D 45ce1220dc fix: 재난 시 전체 이벤트 처리를 위해 column 추가 2022-02-22 15:39:43 +09:00
Hide_D 37740bbf41 fix: 방어 대상에 crewtype 포함 2022-02-22 14:41:37 +09:00
Hide_D 06959db5e5 game: 평시 유니크 획득 확률 변경 2022-02-22 00:43:22 +09:00
Hide_D 1fa0cf8d32 game: 작위 보상에서 아이템이 없는 사람이 받을 확률 대폭 증가 2022-02-22 00:28:35 +09:00
Hide_D ea50e53718 game: 반계도구 제거, 도구 밸런스 조정 2022-02-22 00:14:20 +09:00
Hide_D eb6b7ce84a fix: 아이템 판매시 에러 방지 2022-02-20 15:31:52 +09:00
Hide_D d8f4056f46 fix: 전투력보정에 unit이 제공되지 않음 2022-02-20 15:13:39 +09:00
Hide_D 240085834a fix: 이벤트로 모든 장수의 지출이 0인 경우 대비 2022-02-20 14:57:56 +09:00
Hide_D be735c0990 game: 아이템을 실제로 사용할 수 있도록 등록 2022-02-20 14:51:04 +09:00
Hide_D 58ae76f4c8 fix: 오타 수정 2022-02-20 05:11:26 +09:00
Hide_D afa08e9170 feat,game: 장비매매시 반응하는 트리거 추가, 판매시 국고에 추가되는 유니크 추가 2022-02-20 04:34:10 +09:00
Hide_D af3a60590e feat: 임의 커맨드용 트리거 추가 2022-02-20 04:30:05 +09:00
Hide_D 497d118627 game: 의술 유니크 추가 2022-02-20 04:10:34 +09:00
Hide_D bad7ed2772 game: 비전투 커맨드 효율 유니크 추가 2022-02-20 04:02:35 +09:00
Hide_D 74efa5c502 game,feat: 추가 숙련 trigger추가, 숙련 유니크 추가 2022-02-20 04:01:55 +09:00
Hide_D f014dae6af game,feat: 조달 효율 변경 trigger 추가, 조달 유니크 추가 2022-02-20 04:01:03 +09:00
Hide_D b692eccd08 fix: 능력치 유니크 오타 수정 2022-02-20 03:38:50 +09:00
Hide_D 613a0c00e8 game: 전투 특기 반영 유니크 도구 추가 2022-02-20 03:37:15 +09:00
Hide_D 2cdf00af50 game: 1회저지, 회피저지 유니크 추가 2022-02-20 03:17:35 +09:00
Hide_D 3a68cf07b3 feat,game: 반계불가 처리 추가, 반계불가 유니크 추가 2022-02-20 03:16:46 +09:00
Hide_D 484d939cea feat,game: 전투 중 약탈 추가, 약탈 유니크 추가 2022-02-20 03:13:03 +09:00
Hide_D 67d224c37e game: 경과 시간에 따라 변하는 유니크 추가 2022-02-20 03:12:17 +09:00
Hide_D 0793559831 game,feat: 계략 커맨드 방어 유니크
- 계략 방어 확률에 보정 trigger 추가
2022-02-20 03:11:02 +09:00
Hide_D b919a09d33 game: 회피 유니크 조절 2022-02-20 03:09:59 +09:00
Hide_D 90b51d5a21 game,feat: 전투력보정 관련 유니크 도구 추가
- 직접 전투력보정을 위한 WarUnitTrigger 추가
2022-02-20 03:08:24 +09:00
Hide_D 4e97c6f7a2 game: 사기, 훈련 유니크 수치 변경 2022-02-20 03:04:45 +09:00
Hide_D 575e03c0fc refac: 아이템에 미사용 $id 값 제거 2022-02-19 23:54:03 +09:00
Hide_D 300c364545 game: 벽력거를 진짜 무상성 병종으로 2022-02-19 17:55:29 +09:00
Hide_D fa13145e23 refac: 장수 생성시 임관권유문 문구 변경
- coreui/vue 의존성 제거
2022-02-18 21:15:06 +09:00
Hide_D dc0281d359 refac: toast 출력을 bootstrap-vue-3 내부 toast로 변경
- component로 src 내부 ts/vue 사용 시도 중
2022-02-18 20:54:26 +09:00
Hide_D bbf916f28c dep: package updates 2022-02-18 13:39:46 +09:00
Hide_D 0cf255702e fix: turnExecutionHelper env 관련 수정 2022-02-18 11:27:29 +09:00
Hide_D 7c8c4447cb fix: 토너먼트 참가 시점에서 생존여부 확인 2022-02-18 10:55:25 +09:00
Hide_D 1240ce2a02 scenario: 천지비급에 '견고' 추가 2022-02-16 22:55:47 +09:00
Hide_D 1cc9aa967f scenario: 천지비급에서는 183년 이전에 항상 상인 2022-02-16 22:52:01 +09:00
Hide_D a4883f5b0e 버그 수정 2022-02-14 00:26:42 +09:00
Hide_D f57fc6abbc fix: 토너먼트 실행 주기에서 초기화시 '수동'뜨는 문제 2022-02-08 20:39:49 +09:00
Hide_D e168399908 misc: 연도 갱신 2022-02-06 12:08:58 +09:00
Hide_D 7462e135fa fix: 커맨드 세부 선택시 스탯 표기 오류 수정
- 통/무/지 순이어야함
2022-02-06 12:06:14 +09:00
Hide_DandGitea ef339566a5 feat: 변경된 베팅 방식에 따라 결과 표기 2022-02-05 07:43:28 +00:00
Hide_DandGitea 3d6f8c6304 refac: 베팅 코드를 모듈로 2022-02-05 07:43:28 +00:00
Hide_DandGitea 5b58e2efa5 fix: n차 혼합 베팅 보상 수령이 하나만 되는 버그 수정 2022-02-05 07:43:28 +00:00
Hide_DandGitea 6650cd2e41 feat: 베팅시 유산포인트 로그에 추가 2022-02-05 07:43:28 +00:00
Hide_DandGitea f6fbb94ecc feat: 베팅 보상 등록 2022-02-05 07:43:28 +00:00
Hide_DandGitea 8730ab3377 feat(WIP): 베팅 보상 누락 수정 2022-02-05 07:43:28 +00:00
Hide_DandGitea 1b24b06eba feat(WIP): 보상을 위한 Betting 모듈 추가 2022-02-05 07:43:28 +00:00
Hide_DandGitea e3d62397a3 feat: 메인 페이지에 토너먼트 개최기간 표기 2022-02-05 07:43:27 +00:00
Hide_DandGitea 105ca78639 fix: 베팅시 추가 포인트 부여 불가 2022-02-05 07:43:27 +00:00
Hide_DandGitea 71ca5a3947 Revert "fix: 베팅시 추가 포인트 부여 불가"
This reverts commit 6fb4a1b274.
2022-02-05 07:43:27 +00:00
Hide_DandGitea d7fc024c04 fix: 베팅시 추가 포인트 부여 불가 2022-02-05 07:43:27 +00:00
Hide_DandGitea 5b89f66758 fix: 베팅 순서 수정 2022-02-05 07:43:27 +00:00
Hide_DandGitea 01e2702491 fix: 베팅 관련 사소한 버그 수정
- 베팅이 없을 경우
- 베팅 동시 신청
2022-02-05 07:43:27 +00:00
Hide_DandGitea ebe7ac1cfc feat: 국가 베팅 ui 2022-02-05 07:43:27 +00:00
Hide_DandGitea 0b29589055 fix: NPCControl volar error 2022-02-05 07:43:27 +00:00
Hide_DandGitea 5fb93afb24 build: warning 기준 변경
- 5MB, 3MB.......
2022-02-05 07:43:27 +00:00
Hide_DandGitea 6cdf442aa7 fix: template 2022-02-05 07:43:27 +00:00
Hide_DandGitea 5626b9e626 fix: volar error 수정
- getNPCColor 반환형
2022-02-05 07:43:27 +00:00
Hide_DandGitea 5b043eb6a4 game: npc 색상 분리 2022-02-05 07:43:27 +00:00
Hide_DandGitea d5748a7950 fix: 베팅 시 key 정렬을 숫자 정렬로 2022-02-05 07:43:27 +00:00
Hide_DandGitea df067be0b9 fix: 세력일람 분석에서 자동수행턴을 반영하지 않는 버그 수정 2022-02-05 07:43:27 +00:00
Hide_DandGitea 94b146d7bd game: 장수 생성시 종능이 부족하면 경고 2022-02-05 07:43:27 +00:00
Hide_DandGitea 868cf6c64b fix: 피장파장 시, 턴이 60턴이 늘어나는 것이 아니라 60턴이 되는 버그 수정 2022-02-05 07:43:27 +00:00
Hide_DandGitea 59b6a9e86e feat(WIP): 국가 베팅 '기능만' 구현 2022-02-05 07:43:27 +00:00
Hide_DandGitea 622c639e44 fix: type react가 volar에서 문제를 일으킴 2022-02-05 07:43:27 +00:00
Hide_DandGitea a0c9168791 feat(WIP): 베팅 개시 타입 변경
-candidate를 미리 추가.
-이를 통해 betting을 중립적으로 운용 가능
2022-02-05 07:43:27 +00:00
Hide_DandGitea d4c1c05b3c feat(WIP): OpenNationBetting에 보너스 상금 추가 2022-02-05 07:43:27 +00:00
Hide_DandGitea 711d8161f6 fix: 이벤트 조건 오류 수정 2022-02-05 07:43:27 +00:00
Hide_DandGitea b7eaba73b5 misc: OpenNationBetting TODO 추가 2022-02-05 07:43:27 +00:00
Hide_DandGitea c269b4938d Feat(WIP): OpenNationBetting Action 추가
- 시나리오 event에 추가
2022-02-05 07:43:27 +00:00
Hide_DandGitea 71dced5790 feat(WIP): 이벤트 시나리오에서 불가능한 커맨드 지정 2022-02-05 07:43:27 +00:00
Hide_DandGitea c0aea98e03 fix: 시나리오 모드에서 시작시점과 봉급월이 겹치는 경우 멈추는 문제 수정 2022-02-05 07:43:27 +00:00
Hide_DandGitea 96e1e45696 fix: N장만 건국한 경우에 CreateManyNPC가 동작하지 않는 버그 수정 2022-02-05 07:43:27 +00:00
Hide_DandGitea bb922f987e fix: 봉급 계산에서 부대장 처리를 하지 않은 문제 수정
- 전체 지출 계산에만 실수 발생
2022-02-05 07:43:27 +00:00
Hide_DandGitea fefc66ebe9 feat(WIP): 이벤트 시나리오 준비 2022-02-05 07:43:27 +00:00
Hide_DandGitea 307d08d898 feat: Event/Condition/RemainNation 추가 2022-02-05 07:43:27 +00:00
Hide_DandGitea ce2f97e738 feat: 시나리오 event 포맷에서 target, priority 추가 2022-02-05 07:43:27 +00:00
Hide_DandGitea 5a675ad048 feat: 도시 점령, 국가 멸망 시 트리거 추가 2022-02-05 07:43:27 +00:00
Hide_DandGitea d866989bc6 feat: event 테이블 준비 2022-02-05 07:43:27 +00:00
Hide_DandGitea 0f635c6dd0 feat(WIP): 베팅 상세 정보 반환 2022-02-05 07:43:27 +00:00
Hide_DandGitea a8b2ae5862 feat: Global/GetNationList 추가
- 세력일람의 데이터와 원칙적으로 동일
2022-02-05 07:43:27 +00:00
Hide_DandGitea d9f8ad9db8 feat(WIP): 베팅 관련 작업중 2022-02-05 07:43:27 +00:00
Hide_DandGitea 877d77f28b dep: DTO 2022-02-05 07:43:27 +00:00
Hide_DandGitea b26b8bdb98 feat: ng_betting 테이블 추가 2022-02-05 07:43:27 +00:00
Hide_D 1cac4fc4c0 fix: 이전 로그 키 정렬 기준이 int가 아니라 string인 버그 수정 2022-02-04 12:55:37 +09:00
Hide_D fc0c81e2ca game: 이민족 발동 관련 변경
- 이민족 멸망 후 타국가 임관
- 이민족 발동 시 명성을 평균치로
2022-01-21 01:00:31 +09:00
Hide_D 5db3bdcef9 fix: 내무부, 기밀 제한이 잘못된 버그 수정 2022-01-07 19:40:35 +09:00
Hide_D 793183cbea game: 기병 공성 능력 약화, 수비시 공방 각각 5% 손해 2022-01-05 01:00:13 +09:00
Hide_D a68b530a9d game: 유산으로 입찰된 유니크는 랜덤 유니크로 얻을 수 없음 2022-01-04 23:53:57 +09:00
Hide_D 0ebb105387 fix: 자동 사령턴 미 활성화 시 내정보&설정 에러 2022-01-04 06:32:45 +09:00
Hide_D e9019418f0 fix: 단궁, 맥궁 증가 사기 표기량 수정 2022-01-03 22:45:27 +09:00
Hide_D 3e4e25dee6 game: 이중 격노가 발동하지 않도록 수정 2022-01-03 22:38:42 +09:00
Hide_D d3e9c8d692 fix: 마지막 국가는 임관 불가능한 것처럼 나오는 버그 수정 2022-01-02 23:01:46 +09:00
Hide_D bd1f7adc0c fix: 임관 제어 코드에서 () 누락 2022-01-02 22:50:42 +09:00
Hide_D 099bcdaf8f fix: starts_with에 사소한 오류가 있어보임
- 이유는 잘 모르겠지만 starts_with($this->destNation['name'], 'ⓤ')
2022-01-02 22:46:32 +09:00
Hide_D b9582b0dd2 feat: 게시판 500px 모드 2022-01-02 00:58:34 +09:00
Hide_D f2fe9feb3a game: U국의 유저장간 거리를 4->3로 변경 2022-01-01 23:30:33 +09:00
Hide_D b99f3a3053 game: 토너먼트 자동 채우기 난이도 수정 2022-01-01 01:22:23 +09:00
Hide_D 3e3677987c fix: 전금 증가 횟수 누락 2021-12-31 23:24:15 +09:00
Hide_D 0cba30a202 fix: 전쟁 금지 설정 누락 부분 수정 2021-12-31 23:22:20 +09:00
Hide_D 9c08398d87 fix: front에서 둔전 수입 계산 수정 2021-12-31 23:07:42 +09:00
Hide_D 1a30da6726 fix: 세수 표기를 잘못 반영하는 버그 수정 2021-12-31 23:05:22 +09:00
Hide_D 30326825f0 build: d_setting json ignore 2021-12-31 17:58:36 +09:00
Hide_D a90baffda6 fix-build: install.php 초기 경로 관련 문제 수정 2021-12-31 17:55:29 +09:00
Hide_D 61ce23f7f9 build: postcss 설정
- discard-dedupe
- autoprefixer
2021-12-31 17:33:15 +09:00
Hide_D 0dcc973b2f misc: 사소하게 수정 2021-12-31 04:41:08 +09:00
Hide_D 10d07c8974 feat: 내무부 변경 2021-12-31 04:12:37 +09:00
Hide_D a79abfeab8 misc: toast 내부 정리 2021-12-31 02:25:43 +09:00
Hide_D b6a7b35555 feat: toast내부 div 객체가 무한히 쌓이지 않도록 2021-12-31 02:22:42 +09:00
Hide_D 0adfee68db feat(WIP): 내무부 국방/임관권유문 에디터 완료. 2021-12-30 22:50:33 +09:00
Hide_D d0ece51fbb misc: makeAPIPath 흔적 2021-12-29 05:50:21 +09:00
Hide_D 5471672ee5 feat: APIPathGen 추상화 2021-12-29 05:46:35 +09:00
Hide_D 470672e367 feat: ts APICall을 강제화.
- 오버 엔지니어링의 정석
2021-12-29 03:55:40 +09:00
Hide_D 03a0c67209 feat(WIP): 내무부 2021-12-28 04:29:13 +09:00
Hide_D 0660180c53 feat: APIPathGen 도우미 2021-12-28 04:28:26 +09:00
Hide_D 499a2ee472 misc: 미사용 파일 제거 2021-12-27 21:54:23 +09:00
Hide_D 8ccedb598b feat: 턴 선택기에서 '턴' 부분 선택 시 커맨드로 선택 2021-12-26 23:57:20 +09:00
Hide_D c3f1457fce fix: 턴 선택기 홀짝 색 선택 오류 수정 2021-12-26 23:43:01 +09:00
Hide_D 5c3dc0c2a5 feat: 사령부 턴 선택기 추가, 턴 해제 옵션 추가 2021-12-26 23:37:53 +09:00
Hide_D 590dfe90c3 feat: 턴 선택기에서 '드래그' 선택 지원 2021-12-26 23:22:43 +09:00
Hide_D f22a013079 feat: DragSelect 추가
- Vue2 버전을 Vue3로 이식
2021-12-26 22:32:04 +09:00
Hide_D e72975f552 game: 유니크 명마, 명검, 서적 갯수 2배
- 말 유니크로 백상, 오환마, 흉노마, 의남백마, 옥추마, 화종마, 옥란백용구 추가
  - 백상, 옥란백용구는 특수효과 부여
2021-12-26 20:44:32 +09:00
Hide_D 77a2e2b2d5 feat: 소모 군량 보정을 위한 trigger 추가 2021-12-26 20:06:39 +09:00
Hide_D 8c36e9444a fix: 급습에서 대상국에 메시지가 뜨지 않음 2021-12-26 18:46:50 +09:00
Hide_D 04b2b1cafe fix: processing $destNation 구분 버그 2021-12-26 04:19:26 +09:00
Hide_D 7de089dbbb fix: api 호출 순서가 거꾸로 2021-12-26 03:47:16 +09:00
Hide_D c30965055c Merge branch 'devel' into ng_depCenter 2021-12-26 03:33:57 +09:00
Hide_D 70cdb945f5 fix: toast가 가려지는 부분이 있는 문제 수정 2021-12-26 03:31:32 +09:00
Hide_D 433b4e8c44 misc: 시간-턴 순서 변경. 일관성 약간 향상 2021-12-26 02:36:05 +09:00
Hide_D 4bfb5b63c9 dep: 패키지 업데이트 2021-12-26 02:01:58 +09:00
Hide_D fad8358096 feat: api.php를 sammoAPI()로 통일 2021-12-26 01:58:26 +09:00
Hide_D d23c17d172 misc: 홀짝 색을 어둡게 2021-12-26 00:32:09 +09:00
Hide_D 426e68693a fix: 홀짝 색 일치...
- nth-child는 그 뜻이 아니다!
2021-12-26 00:06:43 +09:00
Hide_D 6712f88037 misc: 턴 선택기에 색 표기 2021-12-26 00:00:56 +09:00
Hide_D c351ecc299 fix: ui 요소 안정화
- 사령부
- 커맨드 되돌아가기
2021-12-25 23:08:53 +09:00
Hide_D b06b89dd86 fix: 사령부에 500px 전환 코드 추가 2021-12-25 22:55:16 +09:00
Hide_D cc48326977 fix: 사령부 오른쪽 여백으로 스크롤 2021-12-25 22:49:26 +09:00
Hide_D 2f8b368ae8 fix: 사령부가 덜 찬 상황에서 표기되지 않는 버그 수정 2021-12-25 22:30:23 +09:00
Hide_D 29b13f6b9c feat: chiefCenter 500px 재구현
- API: 사령턴 관련
- TopBackBar에 갱신 추가
2021-12-25 21:51:47 +09:00
Hide_D c6db4cd545 Merge branch 'g38_ui' into devel 2021-12-23 17:19:57 +09:00
Hide_D 2c00ad098c fix: 발령시 스탯 표기 2021-12-23 17:19:00 +09:00
Hide_D bac0d93ccb Merge branch 'g38_ui' into devel 2021-12-23 03:17:38 +09:00
Hide_D 6678e87cbf fix: 되돌아가기 위치 문제 수정 2021-12-23 03:16:24 +09:00
Hide_D adbe14fd30 Merge branch 'g38_ui' into devel 2021-12-23 03:06:57 +09:00
Hide_D 9b86aaa1bd feat: processing 검색 켬/끔 추가 2021-12-23 03:03:43 +09:00
Hide_D 2969ed2edc feat: processing 체계를 일괄 변경 2021-12-23 01:34:45 +09:00
Hide_D 41d5df60f4 feat(WIP): 장비매매
- 초성 검색을 일원화
2021-12-23 00:48:53 +09:00
Hide_D cfbaf60989 feat(WIP): processing 숙련전환, 불가침제의 2021-12-22 21:15:26 +09:00
Hide_D 4178927b6f feat(WIP): 증여,헌납,백성동원,수몰,천도,초토화,허보 2021-12-22 02:23:06 +09:00
Hide_D 291976893a refac(WIP): 파일 위치 변경 2021-12-22 02:06:40 +09:00
Hide_D cde55ab574 feat(WIP): processing 물자원조
- nations, nationList를 nationList로 통합
2021-12-22 01:01:06 +09:00
Hide_D 77b78d05ac feat(WIP): processing 계략 세부
- 기타 파일 잔여 코드 제거
2021-12-22 00:24:51 +09:00
Hide_D 1fa32554d8 feat(WIP): processing 선양, 장수대상임관 2021-12-22 00:10:02 +09:00
Hide_D f1e79699a4 feat(WIP): processing 임관
- 구 css 코드 남은것 해결
2021-12-21 23:19:07 +09:00
Hide_D c628f9237f misc: topBar 가로선 제거 2021-12-21 22:06:24 +09:00
Hide_D 6a83d1ce25 misc: 징병창 선택 병종 보기 옵션 수정 2021-12-21 22:05:04 +09:00
Hide_D 081d40cf82 fix: 국가 선택 버그 수정, 몰수 type warning 제거 2021-12-21 21:55:05 +09:00
Hide_D b23004c184 misc: 지도 내 소재 도시 표기 방식 변경 2021-12-21 21:52:34 +09:00
Hide_D bc58f48752 misc: 기본 커맨드 검색모드 끔 2021-12-21 21:06:15 +09:00
Hide_D 1ac255a556 feat: 선전포고 구현 2021-12-21 03:45:33 +09:00
Hide_D fb3cbbd924 feat(WIP): 징병, 모병 페이지 모바일 변경 2021-12-21 03:29:35 +09:00
Hide_D 1b29c7e463 fix: 선택 할 수 없는 병종 보기 버튼 에러 2021-12-21 03:09:52 +09:00
Hide_D 6003c19b32 feat: process 징병 페이지 2021-12-21 03:04:44 +09:00
Hide_D b54bf240a0 misc: 500px 모드를 일관되게 적용.
- media-1000px, media-500px 추가
2021-12-21 00:30:29 +09:00
Hide_D 505bbda675 misc: 동떨어진 파일 제거 2021-12-20 22:36:53 +09:00
Hide_D 26bd37af31 dep: e_lib 디렉토리 정리
- select2 하나 남음
2021-12-20 02:43:22 +09:00
Hide_D bf13ccdcd3 dep: quill 제거 2021-12-20 02:26:49 +09:00
Hide_D 645fc877e6 build: devtool 결과 최적화 2021-12-20 01:59:29 +09:00
Hide_D 6ac021ff12 feat(WIP): process 등용 등
- ColorSelect 색을 가득 채움,
- ColorSelect 결과값을 둥글게
- procGeneralList의 column 가변형 정의
- 등용 brief 조사 처리 버그 수정
2021-12-20 01:08:08 +09:00
Hide_D 5d8e2c16f5 feat(WIP): processing 건국, 다른 메뉴 UI 통일
- lazy loading은 의미가 없으므로 롤백
2021-12-19 22:50:15 +09:00
Hide_D 83a3ebb583 misc: 외부 UI 안정화.
- 세부메뉴 버튼 변경
- 메인 하단바 여백
2021-12-19 22:43:03 +09:00
Hide_D 481e23fce0 fix: 추방을 연속으로 실행하면 gennum이 과도하게 깎임 2021-12-19 19:26:43 +09:00
Hide_D be33ca69f8 feat(WIP): processing에서 vue 객체 통합, lazy loading 2021-12-19 17:22:54 +09:00
Hide_D bd54681d78 misc: 내 도시 위치를 '신경쓰이게' 표시 2021-12-19 04:55:28 +09:00
Hide_D f0ffd3356d feat(WIP): processing, 몰수
- 초성에서 Windows 겹받침, Mac 된소리 자음(automata 초성)
- 장수 선택에에서 검은색 테마
- 양 선택기에 숫자 추가
2021-12-19 04:28:44 +09:00
Hide_D 8a0b248caf feat(WIP): process 국가선택 추가 2021-12-18 23:14:04 +09:00
Hide_D bc71ce73cf feat(WIP): process 국기변경 2021-12-18 19:09:02 +09:00
Hide_D de93966192 Merge branch 'devel' into g38_ui 2021-12-18 18:03:06 +09:00
Hide_D a4e8221508 feat: getRankVar에 RankVar가 없을 경우 기본값 지정 가능
- 토너먼트 값 회수
2021-12-18 17:58:20 +09:00
Hide_D 36c37e97e0 feat: typescript JosaUtil 2021-12-18 17:33:54 +09:00
Hide_D 03993052a3 feat(WIP): processing, 출병 추가
- 장수 선택기 추가
- v-model 안 쓰는 바보짓 수정
- proc 전역 변수를 procRes로 묶음
2021-12-18 16:00:53 +09:00
Hide_D 3ef5c2aa6d fix: MapLeagcyTemplate warning 제거 2021-12-18 14:16:51 +09:00
Hide_D 02d84bada0 feat(WIP): processing 출병 2021-12-18 05:08:53 +09:00
Hide_D 25332f2728 feat(WIP): processing 작업 2021-12-18 05:02:47 +09:00
Hide_D 70e64e261e feat(WIP): processing을 vue로 전환 2021-12-18 04:36:06 +09:00
Hide_D 4ed88d33b1 fix: 전투 시뮬레이터 UI 깨짐 수정 2021-12-16 03:34:34 +09:00
Hide_D 3414241a71 fix: 내정보/설정에 툴팁이 해제되어있음 2021-12-16 03:23:36 +09:00
Hide_D e36a46b1cb refacor: customCSS 코드 분리 2021-12-16 03:23:11 +09:00
Hide_D df09a5227c game: 척사 강화. 15%p -> 20%p 2021-12-16 03:12:37 +09:00
Hide_D 1b1fcebeed fix: 500px/1000px 모드 2차 수정 2021-12-16 02:36:50 +09:00
Hide_D 33d9eb4c6d fix: 500px/1000px 모드 설정 2021-12-16 02:32:33 +09:00
Hide_D 347c0a1275 feat: 내 정보/설정 페이지 반응형, 500px/1000px 설정 2021-12-16 02:26:07 +09:00
Hide_D 1320c1fa58 feat: 상/하단 돌아가기 버튼을 bootstrap으로 변경 2021-12-16 01:56:44 +09:00
Hide_D 0ce101f038 feat: 임시 500px/1000px 모드 추가 2021-12-16 01:53:23 +09:00
Hide_D d56a0a8789 fix: 지도 옵션 버튼의 초기화 이벤트 시점이 다른 점 수정
- 항상 통제 가능한 localStorage 기준으로 변경
2021-12-16 01:24:41 +09:00
Hide_D 8da0e685c8 game: 토너먼터 자동 참가 시, 능력치에 기반 2021-12-16 01:05:59 +09:00
Hide_D 786306e32a fix: AI 전쟁 상태 정의를 다시. 2021-12-16 01:02:41 +09:00
Hide_D 4e20bf1d1c fix: 토너먼트 warning 제거 2021-12-15 22:27:37 +09:00
Hide_D 06797a78a7 scenario: 애니집결 업데이트 2021-12-15 20:10:04 +09:00
Hide_D 1f3bc6baa6 game: 저격 버프, 견고 효과 중 저격,필살 너프
- 저격 성공시 증가하는 사기량 증가
  - 전특만, 몇몇 유니크 제외
- 저격이 성벽에도 발동
  - 사기 상승만 추가, 성벽 너프 없음
- 견고 효과 변경
  - 필살 무효 -> 필살 확률 20% 감소
  - 저격 무효 -> 저격은 받지만 부상 무효
2021-12-15 16:34:07 +09:00
Hide_D ab0442cb59 fix: 기본 DummyGeneral에 NPC 타입 3번 부여 2021-12-15 12:01:50 +09:00
Hide_D e02a836063 fix: 베팅 결과에서 실제 장수가 아닌 총합(0번)을 가져오는 버그 수정 2021-12-15 12:00:54 +09:00
Hide_D 8dfebd055c fix: mergeQueryColumn의 기본 값에 npc 추가 2021-12-15 11:57:45 +09:00
Hide_D 219c7028a7 fix: 토너먼트 값에서 npc를 안받아옴 2021-12-15 09:09:35 +09:00
Hide_D 4c21da5373 game: NPC국이 접경이 사라져도 5개월가량은 기다림 2021-12-15 03:34:49 +09:00
Hide_D b2585137a5 game: 반환은 4개월 이전에도 이루어지도록 수정 2021-12-15 03:19:02 +09:00
Hide_D 2d585611a5 game: 시작한지 4개월째부터 유산으로 유니그 획득 가능 2021-12-15 03:13:24 +09:00
Hide_D bc2dfc5403 build: webpack 캐시를 버전이 바뀌어도 계속 사용하도록 설정 2021-12-15 02:28:47 +09:00
Hide_D 071271b7dd fix: 빙의 장수의 유산 포인트 적용 문제 수정
- 빙의장의 유산 포인트가 천통시엔 미적용.
- NPC 시절 베팅 결과가 반영되는 오류
  - 베팅횟수+0, 베팅성공+1, 베팅금액+ 문제
2021-12-15 02:15:38 +09:00
Hide_D bd05d5b650 Merge pull request 'feat: webpack 빌드 통일, TipTap 에디터 적용' (#201) from unifyBuildPath into devel
Reviewed-on: https://storage.hided.net/gitea/devsam/core/pulls/201
2021-12-14 02:24:17 +09:00
Hide_D f0839ade88 fix: 메인페이지, 임관권유 페이지에 적용 2021-12-14 02:05:59 +09:00
Hide_D 0b287be006 feat: TipTap 이미지 적용 2021-12-14 02:03:05 +09:00
Hide_D b0e928fc27 feat(WIP): tiptap 에디터 기능 구현 2021-12-13 21:45:49 +09:00
Hide_D 5cd2e9712e feat(WIP): 새 에디터 2021-12-13 03:24:14 +09:00
Hide_D cafde950a4 feat: 국방, 임관메시지 에디터에 TipTap 적용 2021-12-13 02:03:54 +09:00
Hide_D 34321ad89f build: esbuild-loader에서 es2021 2021-12-12 21:55:20 +09:00
Hide_D 3c09e77fba refac: vue 파일 구조 변경 2021-12-12 21:48:48 +09:00
Hide_D 8a899c9afe build(WIP): printDist를 모든 코드에 적용
- 현재 summernote 미작동
2021-12-12 19:26:27 +09:00
Hide_D 865d3c89bb build(WIP): php단에서 변경된 dist_js에 맞게 js,css 로드
- fix: webpack 출력물 문제
- webpack splitChunks 파일 통일
2021-12-12 16:33:20 +09:00
Hide_D a3ce526854 fix: 에러 없이 emit 된 경우에만 빌드 완료 표지 출력 2021-12-12 15:28:52 +09:00
Hide_D f5b33dbbc7 build(WIP): 빌드 결과물을 서버 주소에 관계없이 통일 2021-12-12 13:52:55 +09:00
Hide_D 83eb58fffa feat: 글꼴 속성 시험 적용 2021-12-12 12:53:50 +09:00
Hide_D 5e5d2d5c91 fix: 추가 수정 2021-12-11 23:22:12 +09:00
Hide_D af06fc460b fix: 등용 수락이 불가능한 버그 수정 2021-12-11 23:20:32 +09:00
Hide_D f874bf564d fix: showErrorLog 페이지 디스플레이 수정 2021-12-11 23:10:34 +09:00
Hide_D 1ab5fcb36f fix: 유산 포인트 반영시 ownerID가 아니라 generalID 를 사용하는 버그 2021-12-11 22:56:08 +09:00
Hide_D e30aff8ca2 fix: 상단 버튼 안되는 버그 수정 2021-12-11 14:05:06 +09:00
Hide_D b2211ac4e0 fix: 메인페이지 갱신 버튼이 일부만 동작하는 버그 2021-12-11 13:52:00 +09:00
Hide_D 0ad9347122 fix: 베팅에 사용할 값을 가져오지 못하는 버그 수정 2021-12-11 13:19:46 +09:00
Hide_D d48f71fc75 build: 약간 변경 2021-12-11 12:44:51 +09:00
Hide_D 11adb5ddf0 misc: scss 파일 정리 2021-12-11 12:12:16 +09:00
Hide_D 8d3a15b117 fix: main 페이지가 vue로 통합되었으므로 printCSS 변경 2021-12-11 11:55:17 +09:00
Hide_D dd2afb7609 misc: main의 외부 초기화 코드를 내부로 이동 2021-12-11 11:52:02 +09:00
Hide_D 08488cae4a fix: initTooltip과 bootstrap-vue-3 충돌 문제 해결
- 기타 data-bs 안붙은거 마저 수정
2021-12-11 11:37:41 +09:00
Hide_D ef6cb065d5 fix(WIP): bootstrap4 잔여 코드 수정 중
- 이상하게도 ingame에서 bootstrap이 충돌 중
2021-12-11 04:45:39 +09:00
Hide_D 2880a37595 fix: 비급 위압이 갱신된 위압을 따르지 않음 2021-12-11 03:31:09 +09:00
Hide_D 44afd72e8c misc: 줄어튼 선택기에 맞게 갱신버튼 이동 2021-12-11 03:30:01 +09:00
Hide_D 6a2804ad79 misc: bootstrap4 toast 사용코드 제거 2021-12-11 03:21:47 +09:00
Hide_D d8af8f143a misc: 여백을 위해 ReservedCommand 16->15 2021-12-11 02:57:32 +09:00
Hide_D c6540b4fea Merge pull request 'refactor: bootstrap4 => bootstrap5' (#200) from no_bootstrap4 into devel
Reviewed-on: https://storage.hided.net/gitea/devsam/core/pulls/200
2021-12-11 02:53:55 +09:00
Hide_D e1897964e8 refactor: goodbye bootstrap4 2021-12-11 02:50:24 +09:00
Hide_D 37212c9392 fix: bootstrap5 modal 2021-12-11 00:30:01 +09:00
Hide_D a4e8edce73 fix: bootstrap5 modal 2021-12-11 00:28:59 +09:00
Hide_D 9da82dd205 fix: login에서 modal을 Bootstrap5 Modal로 2021-12-11 00:20:11 +09:00
Hide_D 1c15b1fdb2 refactor: common_ts 분리 후 일괄 로드 2021-12-11 00:07:59 +09:00
Hide_D 27e02f22cc fix: webpack image.ext revert 2021-12-10 23:33:39 +09:00
Hide_D 08178dd3aa fix: 앞선 refactor에서 경로 문제 수정 2021-12-10 23:12:35 +09:00
Hide_D 9dc842c6e9 refactor: 상대경로를 @ 시작 절대경로로 2021-12-10 22:34:14 +09:00
Hide_D b706fd468d refactor(WIP): scss, ts 공통 파일 묶기 2021-12-10 21:45:02 +09:00
Hide_D 3d2489b51a fix: lint error fix 2021-12-10 02:55:53 +09:00
Hide_D f7121e25f6 dep: update packages 2021-12-10 02:53:12 +09:00
Hide_D 307cf5eeae feat(WIP): gateway bootstrap 호출 제거 진행
- 메인페이지 미동작
2021-12-10 02:47:10 +09:00
Hide_D a6ae77cebf dep: 이전 버전들과의 호환성을 위해 bootstrap5 명명 유지 2021-12-10 02:28:13 +09:00
Hide_D 3d1f16bfc2 feat(WIP): bootstrap 5 tooltip 적용
- bootstrap4 용의 popper.js 제거
- jquery기반 bootstrap tooltip 제거
2021-12-10 02:26:08 +09:00
Hide_D 60fdef9d3f dep(WIP): bootstrap4 1차 제거 2021-12-10 02:02:38 +09:00
Hide_D 8d90a00d0e fix: 수비자 숙련 변경 2021-12-09 23:58:57 +09:00
Hide_D 0169861c2a game: 수비자의 상대 병종을 0에서 0.1로 변경, 공격자 대비로는 10% 2021-12-09 01:59:04 +09:00
Hide_D 0f4304dcd4 game: 궁병 회피 살짝 너프 2021-12-09 01:32:17 +09:00
Hide_D 64cb898d13 game: 백이병 추가
- 성도 특수 병종
- 숨겨진 상성 수치
2021-12-09 01:00:27 +09:00
Hide_D d3ac47356d feat: (예약)plock을 세부 구분할 예정 2021-12-09 00:51:10 +09:00
Hide_D 054e58504f fix: KVStorage의 기본 상태가 turnOnCache가 아니었던 점 수정 2021-12-09 00:36:15 +09:00
Hide_D 66ad3cc587 game: 빙의장도 유산 획득이 가능하도록 수정
- 유산 실 반영 시점을 은퇴, 천통 시점으로 변경
2021-12-09 00:26:47 +09:00
Hide_D 386cc074e3 fix: 빙의가 불가능한 버그 수정 2021-12-09 00:01:20 +09:00
Hide_D 0b1f491d16 feat: 턴 선택기 실행 후 초기화시, 이전 턴 기억 2021-12-08 21:22:52 +09:00
Hide_D 5ce6035192 feat: 검색 모드 켬/끔 추가 2021-12-08 21:01:16 +09:00
Hide_D 8d322a51db fix: AI 유저장 포상 버그 수정 2021-12-08 01:54:00 +09:00
Hide_D 46d3c2bb69 fix: webp가 업로드 가능하나, 메시지 표기가 누락된 버그 수정 2021-12-08 01:38:23 +09:00
Hide_D 92e8c5f0ce misc: 턴 선택기에 기본턴 선택. 다른 턴 선택시 무효화. 2021-12-08 01:36:59 +09:00
Hide_D 8a458eb96a misc: 하단 바 세부 항목 크기 확대 2021-12-08 01:31:34 +09:00
Hide_D e3e98f9844 misc: 턴 입력이 아무것도 없으면 1턴 2021-12-08 01:23:58 +09:00
Hide_D 89a6d6c2ac misc: 하단 바, type2 버튼에 밑줄 2021-12-08 01:19:29 +09:00
Hide_D 0627466308 misc: 턴선택이 없을 경우 안내 2021-12-08 01:12:03 +09:00
Hide_D 163fea111b misc: 턴선택기 기본값을 무효화. 2021-12-08 01:11:14 +09:00
Hide_D b8eb56ac71 fix: initial-scale=1 제거 2021-12-08 01:06:56 +09:00
Hide_D e07b64339a fix: 구 sidebar 코드 제거 2021-12-08 01:01:25 +09:00
Hide_D df0c8b3c92 fix: 풀모드 메시지함 grid 깨짐 수정 2021-12-08 00:55:54 +09:00
Hide_D d4be69d44f feat: 스마트폰용 하단 바 구현, 버튼 템플릿 변경 2021-12-08 00:24:40 +09:00
Hide_D cd0b98ee3c fix: anchor 이동에서 #을 남기지 않도록 2021-12-07 02:27:42 +09:00
Hide_D d1a80241f5 feat: 초성 검색에서 '알파벳' 대신 검색 추가 2021-12-07 02:03:10 +09:00
Hide_D 4f3d3b0be8 fix: auto500px 가로모드 미설정 버그 수정 2021-12-07 01:54:22 +09:00
Hide_D 6f16d9413c Revert "misc: auto500px 필요없음."
This reverts commit 2b5f38ca52.
2021-12-07 01:44:36 +09:00
Hide_D 2b5f38ca52 misc: auto500px 필요없음. 2021-12-07 01:38:26 +09:00
Hide_D 9dec0ad916 misc: 스마트폰 모드에서 '명령으로' 추가 2021-12-07 01:22:09 +09:00
Hide_D 0c5118780c misc: 초기 스마트폰 크기 관련 수정 2021-12-07 01:19:38 +09:00
Hide_D 6e6f58ed94 fix: 12px -> 12.5px 2021-12-07 01:01:39 +09:00
Hide_D 00c31597c2 fix: font 정렬, 전체선택->턴 선택 2021-12-07 00:51:20 +09:00
Hide_D 91b16159b7 misc: 기본 글꼴 크기를13px -> 14px 2021-12-07 00:37:23 +09:00
Hide_D 840ab27570 misc,dep: 기본 글꼴을 Pretendard로 일괄 적용용 2021-12-07 00:27:50 +09:00
Hide_D 0d53277fcc fix: 하단 버튼이 container 밖으로 벗어나는 문제 수정 2021-12-05 23:58:06 +09:00
Hide_D 0218ac969b game: 랜덤 임관 밸런스 수정 2021-12-05 23:47:56 +09:00
Hide_D 2f62d2bc14 feat: 턴 선택기에 복합 커맨드 선택 적용 (#199)
- vue-multiselect 기반
- 초성 검색
- 이득, 불리 표기
- 불가 표기
- 선택후 단축 표기

Reviewed-on: https://storage.hided.net/gitea/devsam/core/pulls/199
Co-authored-by: hide_d <hided62@gmail.com>
Co-committed-by: hide_d <hided62@gmail.com>
2021-12-05 23:02:27 +09:00
Hide_D d46d281dcf fix: summernote 최신 버전에서 jQuery require 우회 2021-12-05 03:32:48 +09:00
Hide_D c812e24d8f dep: vue-select 4.0 추가가 2021-12-04 14:11:37 +09:00
Hide_D 7c120ee253 misc: 턴선택기에서 모두 선택, 당기기, 미루기 위치 조절절 2021-12-04 13:49:59 +09:00
Hide_D acbbe2c353 refac: 500px 모드 변환기 분리 2021-12-04 11:42:26 +09:00
Hide_D 5b6e15c5fd misc: 턴선택기 실행버튼 크기 50% 증가 2021-12-04 11:12:42 +09:00
Hide_D dfdbeac8e4 misc: 500px 레이아웃 순서 변경 2021-12-04 02:11:59 +09:00
Hide_D dcf65d47a3 fix: float-tabs가 sticky보다 아래에 오는 버그 수정 2021-12-04 01:13:50 +09:00
Hide_D 75fdc5368e feat: 500px 모드에서, 메시지 입력기가 메시지창을 쫓아감 2021-12-04 01:07:05 +09:00
Hide_D af1d8a3041 misc: 500px 레이아웃 구성 변경 2021-12-04 00:42:51 +09:00
Hide_D 6b0999d09b misc: 갱신/로비로 버튼 위치 이동 2021-12-04 00:10:41 +09:00
Hide_D 1efad18661 fix: buttonPlate에 gap 추가 2021-12-03 23:44:55 +09:00
Hide_D 4d3fe5aafa fix: 사령부 ajax 모드 2021-12-03 16:03:02 +09:00
Hide_D c50ee44433 feat: 메인페이지 화면비 자동 조정 2021-12-03 16:00:38 +09:00
Hide_D 83c71bec25 fix: 메인 화면 오동작 요소 수정
- 설문조사 항목 표기
- 설문조사 항목 marquee로 틀어짐(제거)
- 1000xp 모드에서 도시 툴팁 가려지는 문제 수정정
2021-12-03 15:26:45 +09:00
Hide_D 4c2dabe4cc fix: nation color-code #330000 2021-12-03 02:18:13 +09:00
Hide_D cf631491e8 feat: 500px 모드 나머지 최적화 2021-12-03 02:07:34 +09:00
Hide_D 5b026e3c5c fix: 메인 페이지, 장수 동향, 개인 기록, 중원 정세 띠 2021-12-03 00:18:18 +09:00
Hide_D 4d136a022c feat: 500xp 모드에서 오른쪽 고속 이동 툴바 2021-12-03 00:14:22 +09:00
Hide_D f0a8efb5ad fix: 500px 모드를 확실하게 명시 2021-12-02 22:01:29 +09:00
Hide_D fc94177340 misc: 메시지 받아오는 갯수 감소 2021-12-02 21:41:33 +09:00
Hide_D 3b29e17696 fix: .toolbarButton2 2021-11-30 02:00:35 +09:00
Hide_D a64431add8 misc: ReservedCommand 색을 약간 수정
- 딱히 어룰린다는 느낌은 여전히 없다.
2021-11-30 01:58:42 +09:00
Hide_D c90820e6e2 fix: 메인페이지 '이전 메시지 불러오기'를 전체 너비로 2021-11-30 01:44:02 +09:00
Hide_D 46f3709f09 fix: 메인 페이지 시나리오 표기, 줄 바꿈 2021-11-30 01:40:49 +09:00
Hide_D 8e0b908b5e feat: 나머지 메인 버튼도 lumen 버튼으로 통일 2021-11-30 01:38:07 +09:00
Hide_D a5f8aa6d17 feat: commandButton을 lumen 버튼으로 2021-11-30 01:09:37 +09:00
Hide_D 1d821480fc feat: 국가별 색 버튼을 lumen button profile에 맞춰 작성 2021-11-30 00:54:08 +09:00
Hide_D eaeb97baf0 feat(in-progress): 턴선택기 연월에 select, 강조 표기 2021-11-29 01:19:25 +09:00
Hide_D e2cc446c71 feat(in-progress): 턴 선택기에서 select와 toggle 분리 2021-11-29 01:17:36 +09:00
Hide_D 02b3fe2f25 feat(in-progress): 커맨드 목록 UI/UX 정리 2021-11-29 01:00:52 +09:00
Hide_D 16b1bece2b misc: common.css를 bootstrap5를 포함한 css로 변경 2021-11-28 23:09:37 +09:00
Hide_D 4c41486e1c feat: 메인화면의 도시정보를 500px, 700px 가변 2021-11-28 22:22:52 +09:00
Hide_D da71280a8d fix: 500px 지도모드에서 tooltip 위치 조정 2021-11-28 19:24:31 +09:00
Hide_D 6da30c5723 feat(in-progress): 메인메뉴 지도를 500px 모드에 맞게 수정 2021-11-28 18:54:37 +09:00
Hide_D aeabb05a9d dep: bootstrap5 custom 조합 darkly + lumen 2021-11-28 18:03:18 +09:00
Hide_D 2538dc5071 feat: 턴 선택기를 vue 기반으로 변경 2021-11-28 01:57:46 +09:00
Hide_D c7219eeb33 feat(in-progress): 턴 조작기를 vue로 분리 2021-11-27 15:40:31 +09:00
Hide_D c493640dae dep: bootstrap 2021-11-27 15:40:00 +09:00
Hide_D 0e7edad020 fix(in-progress): viewport width를 500으로 진행하기로 2021-11-27 02:15:39 +09:00
Hide_D b7328a56ae fix(in-progress): viewport width를 360px 폰에서 맞게 수정 2021-11-27 02:10:08 +09:00
Hide_D b34e17d69a feat(in-progress): 메인페이지 기본 반응형 전환.
- full, half 모드
2021-11-27 01:53:00 +09:00
Hide_D 0fec301f61 feat(in-progress): 메인 페이지에서 table 제거 2021-11-26 21:40:55 +09:00
Hide_D 82c8441e1d fix: 비쟁장에 쟁장 공식이 섞여서, 최소 포상 금쌀이 꼬이는 문제 수정 2021-11-26 19:53:12 +09:00
Hide_D e845777735 fix: branch 못 알아낸 건 unknown으로 하기 2021-11-26 19:11:50 +09:00
Hide_D f9b592fec7 fix: branch 가져오는 표기법 다시 수정 2021-11-26 19:05:59 +09:00
Hide_D 55de2d3f62 fix: git ignore 빠진부분 수정정 2021-11-26 19:03:34 +09:00
Hide_D ad6cae561a fix: origin branch를 제대로 파싱하지 못하는 버그 수정 2021-11-26 18:56:04 +09:00
Hide_D 6256867fa0 fix: 삭제된 기능인 '폐쇄중 로그인'을 UI에서도 제거 2021-11-26 18:48:00 +09:00
Hide_D 7f4205601d feat: 버전 표기에 branch명 같이 표기 2021-11-26 18:44:18 +09:00
Hide_D d50c409315 game: 수비자 피살 숙련도 0, 사살 숙련도 0.9->0.8 2021-11-26 17:42:50 +09:00
Hide_D 4ee6946828 fix: 권한 없는 유저가 수락 버튼을 누를 시, 아예 메시지가 사라지는 버그 수정 2021-11-20 14:00:01 +09:00
Hide_D e1df980ece fix: '최소 전투 가능 병력 수'를 매우 높여 출병 금지가 가능한 문제 수정 2021-11-20 00:37:07 +09:00
Hide_D be1198b4a1 feat: 전쟁 금지/허가 여부 횟수 제한 부활 2021-11-19 23:43:00 +09:00
Hide_D 976c0bee6b game: 출병은 일반내정보다 먼저여야함 2021-11-19 23:10:32 +09:00
Hide_D 4fc2fc1128 fix: 방어력 증가 세팅이 잘못됨. 2021-11-17 23:08:57 +09:00
Hide_D d3a455b955 game: 보병 수비시 방어력 5% 증가 2021-11-17 23:00:40 +09:00
Hide_D 0b815f89d6 game: NPC 베팅 판돈 스케일 증가가 2021-11-16 23:45:33 +09:00
Hide_D e6cdf1ee7c feat: 토너먼트 베팅에서 모든 NPC가 10원씩 베팅함
- 추가로 베팅 공지
2021-11-16 23:12:32 +09:00
Hide_D aa12604481 game: 국력, 랜임 계산식에서 유저장 전투력 계수를 NPC의 1.5로 설정 2021-11-16 22:40:47 +09:00
Hide_D 872e0f565a feat: 토너먼트 비중을 강제로 조정 2021-11-16 22:18:29 +09:00
Hide_D f21b15f2db feat: '능동 행동 수' 유산 포인트 추가
- 거병, 건국, 방량, 선양, 모반
- 임관, 랜덤임관, 장수대상임관, 등용수락, 하야
- 출병(500명 이상, 훈사 7070 초과)
- 인재탐색 성공(난도에 따라 추가 보정)
- 첩보(예외, 0.5)
- 증축, 감축, 국기변경, 국호변경, 천도성공
2021-11-16 21:38:55 +09:00
Hide_D 9aecca4cef feat: NPC정책 최대 포상량 지정 2021-11-16 20:45:16 +09:00
Hide_D 553f9d46ba game: 국고가 2000 밑으로 가더라도 무조건 물자조달만 하지는 않게 수정정 2021-11-16 20:01:50 +09:00
Hide_D 91079d9d40 game: 전특 요구 포인트 감소, 버프 요구 포인트 감소 2021-11-16 19:37:16 +09:00
Hide_D 6f6360d501 fix: 토큰 갱신 시 UserID가 잘못된 버그 수정정 2021-11-14 22:55:37 +09:00
Hide_D 5a8ca16e34 game: 국력 계산식에 랜덤임관 계산식 일부를 반영 2021-11-14 18:45:28 +09:00
Hide_D 9476c54eaa fix: 서버 정지로 의심되는 opcache_reset 해제
- 현재 validate timestamp를 켜서 사용하도록 유도
2021-11-14 13:31:30 +09:00
Hide_D edd5752de2 misc: 미활용 함수/상수 제거 2021-11-14 13:20:19 +09:00
Hide_D a560ee6f0a feat: NPC 거병, 이동 로직 대폭 개선
- 근처에 세울 도시를 보고 거병
- 원하는 도시를 정하고 그 도시를 향해 이동
2021-11-14 05:06:39 +09:00
Hide_D 3c28ceb701 fix: warning 제거거 2021-11-14 04:15:04 +09:00
Hide_D 527a0895f5 game: 랜덤임관 평가 기준 변경
- 전투 기준을 총 전투 대신 대인 전투로
- 내정 능력에 무력, 지력 비율 반영영
2021-11-14 02:51:40 +09:00
Hide_D 731f1e0226 feat: 자율행동 표기를 휴식(자율행동)으로 변경 2021-11-14 02:47:53 +09:00
Hide_D 6aa6a2e119 game: 랜덤임관 가중치 변경 2021-11-14 02:39:09 +09:00
Hide_D 91fac6972c game: 작위 보상에도 최대 보유 유니크 수 적용 2021-11-14 00:50:09 +09:00
Hide_D 9fd754f3bb game: 랜덤임관 로직에 전투력과 내정능력을 적극적으로 반영영 2021-11-14 00:46:46 +09:00
Hide_D a922f90046 fix: 자율턴에서 '월' 표기 빠짐 2021-11-13 16:48:49 +09:00
Hide_D 0c206c3835 feat: 자율행동 휴식을 명시적으로 자율행동으로 표기 2021-11-13 16:37:47 +09:00
Hide_D bdf6d38f5d feat: 자율턴 한계 표기 2021-11-13 16:33:11 +09:00
Hide_D cf0a74a9d3 fix: 자율행동턴 시간 제한이 동작하지 않던 버그 수정 2021-11-13 16:05:03 +09:00
Hide_D 2d0c19271b game: 기간별 최대 유니크 획득 수 변경경 2021-11-13 02:25:52 +09:00
Hide_D 3858f54fc5 fix: 자동로그인 과정 버그 수정정 2021-11-11 00:37:29 +09:00
Hide_D d58b9a211f game: snipe_combat 제거거 2021-11-08 23:31:56 +09:00
Hide_D ffde727d68 fix: dummySession 인자 수정정 2021-11-08 23:27:37 +09:00
Hide_D 6c3b9aafc1 dep: package update 2021-11-08 16:10:01 +09:00
Hide_D 872755e57f game: 수비자는 전멸 시 증가하는 사기량을 50%만 적용 2021-11-08 15:20:23 +09:00
Hide_D 07c20af53b game: 반계 효과 유니크 시도 확률 반감 2021-11-08 15:16:15 +09:00
Hide_D 0a4a7863f1 game: 피장파장 턴을 60턴 기준으로 변경(72턴 동일) 2021-11-08 15:11:24 +09:00
Hide_D a5738acc85 game: 피장파장 딜레이를 최소 72턴으로로 2021-11-08 15:10:45 +09:00
Hide_D fb308b560b game: 종횡가 전략 딜레이를 1/2에서 3/4으로로 2021-11-08 15:08:21 +09:00
Hide_D 6639356f88 자동 로그인 (#196)
자동 로그인 구현

- login_token 테이블
- reqNonce -> loginByToken
- sha512(token + nonce)

Reviewed-on: https://storage.hided.net/gitea/devsam/core/pulls/196
Co-authored-by: hide_d <hided62@gmail.com>
Co-committed-by: hide_d <hided62@gmail.com>
2021-11-08 04:23:07 +09:00
Hide_D f45e0c9c4b game: 장비매매 시 도구 유니크 덮어지지 않게 2021-10-29 02:21:53 +09:00
Hide_D 7648563b00 fix: 작위 보상이 군주인 경우 반영이 안되는 버그 수정 2021-10-27 02:04:10 +09:00
Hide_D 32ac719663 fix: 403 페이지 redirect 버그 수정 2021-10-27 01:29:19 +09:00
Hide_D f07ece9dd6 balance: 초기 +5%, -2% 추가가 2021-10-16 21:50:41 +09:00
Hide_D 4b703f2790 balance: 쌍무쌍 적용 불가, 무쌍 중반 이후 대폭 너프프 2021-10-16 21:22:28 +09:00
Hide_D 0e350c28c7 fix: 랜덤 임관 비중 계산식에서 u장 포함 2021-10-14 02:01:12 +09:00
Hide_D 50387cdbf5 fix: 창 닫기가 필요한 창은 window.open으로 열어야함 2021-10-14 01:12:21 +09:00
Hide_D 49fcfa61f2 fix: CreateManyNPC에서 npcCount가 0이면 fillCnt가 무시 2021-10-14 00:37:08 +09:00
Hide_D cd053d6a87 balance: 초반 NPC 생성 시 모든 국가를 채울 수 있을 정도로는 제공 2021-10-14 00:36:06 +09:00
Hide_D 74ed82f592 balance: 탈취량을 도시 내정치에 기반하도록 변경 2021-10-14 00:16:44 +09:00
Hide_D 10f23db843 balance: 랜임 시 의병장, 집합장 카운트는 제외 2021-10-13 02:05:04 +09:00
Hide_D 89ec5861b5 fix(misc): 상대가 치료시 '붉게' 표기 2021-10-13 02:01:41 +09:00
Hide_D ab614e4545 fix: 인탐, 의병에서 숙련도가 지정되지 않는 버그 수정 2021-10-13 01:56:06 +09:00
Hide_D 6559b3ba1b fix: DummyGeneral에 유산 관련 포인트 함수가 누락된 부분 수정 2021-10-12 02:25:24 +09:00
Hide_D b70debeffa fix: set_error_handler를 못잡는 문제 해결
기타 소소한 버그
- 피장파장 입력시 warning을 계속 일으키는 버그(동작 문제는 없음)
- 토너먼트에서 승리,패배,무승부 외에 MustNotBeReachedException이 throw되지 않음(동작 문제는 없음)
2021-10-12 01:43:54 +09:00
Hide_D 2a386e9c8b dep: update phan 2021-10-12 01:36:02 +09:00
Hide_D cf3f40b578 fix: 공격자 전투력 판정 문제 수정 2021-10-12 01:31:16 +09:00
Hide_D a18500dd9b fix(misc): phan 2021-10-12 01:30:37 +09:00
Hide_D 3998d10bba Merge pull request 'balance: 무쌍 너프, NPC 출병 금지 불가' (#195) from balance_210923 into devel
Reviewed-on: https://storage.hided.net/gitea/devsam/core/pulls/195
2021-10-10 13:30:01 +09:00
Hide_D 1372874ab4 balance: 무쌍 너프, NPC 출병 금지 불가 2021-09-23 03:59:08 +09:00
Hide_D cbce448f35 fix: RootDB template 2021-09-23 03:08:49 +09:00
Hide_D b715918998 fix: illuminate 2021-09-21 03:13:07 +09:00
Hide_D b4605958ad Illuminate: ready. (critical)
- DB에서 illuminate를 가져올 수 있도록 설정
- 업그레이듵 불가, RootDB, DB를 직접 수정해야함
2021-09-21 03:06:42 +09:00
Hide_D 40a20a55d3 fix: 자동 사령턴 조정이 되지 않는 버그 2021-09-19 15:44:49 +09:00
Hide_D 835e5ccc2b fix: 명예의 전당 검색 2021-09-19 13:38:40 +09:00
Hide_D 85fdbbd0ba scenario: 쿠키런 킹덤 임시 구현 2021-09-19 03:03:05 +09:00
Hide_D 6173e6c0f4 conf: vue-style-loader에 esbuild-loader적용 2021-09-18 04:53:26 +09:00
Hide_D 22d28f88c9 dep: babel-loader + ts-loader => esbuild-loader 2021-09-18 04:31:31 +09:00
Hide_D 8d759ddd0a dep: package upgrade 2021-09-18 03:52:27 +09:00
Hide_D 393078fb5f misc: lint warning, 불필요 파일 정리 2021-09-18 03:49:04 +09:00
Hide_D 3d2ce8bf49 fix: NPC포상 설정 메시지 수정 2021-09-18 03:42:20 +09:00
Hide_D a653cedb16 fix: 사망 시 유산 포인트 관련 환불/초기화가 없는 문제 2021-09-18 03:36:08 +09:00
Hide_D f3538fbcb7 fix: 장수 생성창 보이기/숨기기, 턴 시간 고정 표기 수정 2021-09-18 02:49:47 +09:00
Hide_D 4b44f378ee fix & inheritAction: 랜덤 유니크 습득시 환불 가능하게 수정 2021-09-18 00:15:00 +09:00
Hide_D 5efba2aa10 inheritAction: 설문조사에서는 특정 유니크 구입 기능 해제 2021-09-18 00:06:20 +09:00
Hide_D ce43221767 fix: hash -> gitHash 2021-09-17 23:40:47 +09:00
Hide_D 69654fa96d fix: 턴 초기화, 전특 초기화 표기 방식 변경 2021-09-17 23:37:53 +09:00
Hide_D 16d0509262 fix: 턴 초기화, 특기 초기화 포인트 안내가 1스텝 늦음 2021-09-17 23:34:33 +09:00
Hide_D e1a4ed67f4 fix: 반계시도에는 구분 코드가 동작하지 않았음 2021-09-17 23:17:13 +09:00
Hide_D 5abe949006 fix: 비급 반계가 전특 반계와 같이 동작하지 않는 버그 수정 2021-09-17 23:07:45 +09:00
Hide_D bbb9a01130 fix: 재야일 때에는 임관 년도 증가하지 않도록 2021-09-17 03:14:14 +09:00
Hide_D 5c589f0b39 fix: 생성하자마자 임관 1년차로 나오는 문제 수정 2021-09-17 03:12:38 +09:00
Hide_D dd37ea1295 inheritPoint: 로그 기록 2021-09-17 02:39:11 +09:00
Hide_D 7535f8b34c fix: summernote.css 2021-09-16 22:39:19 +09:00
Hide_D 3dcf76467e fix: 유저전투장 긴급포상 쌀 2021-09-16 22:37:31 +09:00
Hide_D dd8c1f3ec8 fix: 궁 유니크 저격 계수 2021-09-16 22:24:29 +09:00
Hide_D 327ef6a39b fix: 설문조사에서 환불 불가능한 문제 수정 2021-09-16 22:06:57 +09:00
Hide_D 742b70a5f0 fix: itemTrials 삭제 후 통째로 array가 비면 array도 마저 삭제 2021-09-16 22:00:35 +09:00
Hide_D fbf0610ff7 fix: eventColumn에 aux 추가 2021-09-16 21:47:32 +09:00
Hide_D a06c15f469 fix: vote에서 aux 2021-09-16 21:43:37 +09:00
Hide_D ef96c7d074 fix: 유니크를 얻는 턴이 아니더라도 환불은 하도록 수정 2021-09-16 21:38:43 +09:00
Hide_D a437675781 랜임 실패시 실행 턴. 요양 -> 인탐 2021-09-16 21:24:52 +09:00
Hide_D af0b10db40 schema 변경 2021-09-16 04:13:34 +09:00
Hide_DandGitea 60b5b0bf8d Join: 양식 일부 수정 2021-09-15 19:06:15 +00:00
Hide_DandGitea 88237d369d fix: 턴 시간 변경 코드 2021-09-15 19:06:15 +00:00
Hide_DandGitea 3433810ed0 fix: LazyVarUpdate unset 2021-09-15 19:06:15 +00:00
Hide_DandGitea 863a67516e fix: previous inheritPoint 지정값 버그 2021-09-15 19:06:15 +00:00
Hide_DandGitea 531b04b2ff misc: layout 2021-09-15 19:06:15 +00:00
Hide_DandGitea 603f93025f inheritAction: UI 1차 완성 2021-09-15 19:06:15 +00:00
Hide_DandGitea 51d4c4cdc9 miisc: 간격 조절 2021-09-15 19:06:15 +00:00
Hide_DandGitea f69a2be045 InheritAction: UI 턴 초기화, 전투 특기 초기화, 랜덤 유니크
- 턴 초기화에 버그가 있는듯?
2021-09-15 19:06:15 +00:00
Hide_DandGitea 07b49dca49 inheritStore: 버프/디버프 구매 UI 2021-09-15 19:06:15 +00:00
Hide_DandGitea f7ea1e3b99 inheritAction: 특정 전특 획득 2021-09-15 19:06:15 +00:00
Hide_DandGitea 8ecb42206f Inherit: Action 완료? 2021-09-15 19:06:15 +00:00
Hide_DandGitea 057f89ce01 InheritAction: 유니크 입찰, 랜덤 아이템 2021-09-15 19:06:15 +00:00
Hide_DandGitea dc8472323d dep: bootstrap-vue-3 추가
- 아직 없는 기능이 많으므로 단순 출력은 CoreUI Vue 동시 활용
- 불편..
2021-09-15 19:06:15 +00:00
Hide_DandGitea 974747b297 misc: License 2021-09-15 19:06:15 +00:00
Hide_DandGitea 6a8cc2a505 fix: 메인페이지 지도를 반응형으로 2021-09-15 19:06:15 +00:00
Hide_DandGitea 4bcdbde5bc inheritPoint: 가입폼
- 기본 동작
- 턴시간에는 버그 있음
2021-09-15 19:06:15 +00:00
Hide_DandGitea 8f2770be95 vue: join 생성 완료 메시지 2021-09-15 19:06:15 +00:00
Hide_DandGitea 7933336c25 vue: join 2021-09-15 19:06:15 +00:00
Hide_DandGitea 5e1267bc64 fix: inheritSkill 연산을 위해 aux 필요 2021-09-15 19:06:15 +00:00
Hide_DandGitea dc835b86e9 fix: maxPhase 연산에서는 oppose가 없음 2021-09-15 19:06:15 +00:00
Hide_DandGitea ca49fc368a fix: inheritUnique 처리 수정 2021-09-15 19:06:15 +00:00
Hide_DandGitea 0475359eff build: join 페이지 준비 2021-09-15 19:06:15 +00:00
Hide_DandGitea 119228c0b4 misc: 오타 수정 2021-09-15 19:06:15 +00:00
Hide_DandGitea f06adcb15d api: gateway, ingame 모두 가능하도록 변경 2021-09-15 19:06:15 +00:00
Hide_DandGitea 1ed27c4c94 유산 포인트로 랜덤 유니크 획득 2021-09-15 19:06:15 +00:00
Hide_DandGitea d57880510c balance: 아이템 습득 확률 조정
- 아이템을 소유할 수록, 획득 확률이 기존보다 훨씬 더 낮아진다.
2021-09-15 19:06:15 +00:00
Hide_DandGitea c24b9cc0d0 feat: 아이템 유산포인트로 입찰한 경우 최종적으로 얻는 기능 추가 2021-09-15 19:06:15 +00:00
Hide_DandGitea 2747f10901 balance: 유니크 아이템을 얻을 수 있는 커맨드 증가
- 강행, 거병, 견문, 군량매매, 귀환, 등용, 물자조달, 이동, 장비매매, 증여, 헌납
2021-09-15 19:06:15 +00:00
Hide_DandGitea 20202ee75e feat: TriggerInheritBuff 구현 2021-09-15 19:06:15 +00:00
Hide_DandGitea 58a43f5534 feat: '계략약화' 특성을 onCalcOpposeStat으로 이동 2021-09-15 19:06:15 +00:00
Hide_DandGitea c186f05dd3 feat: 전투 상대방의 특정 수치를 접근할 수 있는 callback류 생성 2021-09-15 19:06:15 +00:00
Hide_DandGitea f2182c195b inheritBuff 준비 2021-09-15 19:06:15 +00:00
Hide_D 066c6bd1cd api: 규격 정의 2021-09-12 04:59:34 +09:00
Hide_D 690df52019 api: join 2021-09-12 03:22:11 +09:00
Hide_D 533ba87ef4 feat: 장수 생성 시 유산 포인트에 따라 생성해주는 기능 추가 2021-09-12 02:59:49 +09:00
Hide_D b8581e3cec fix: 은퇴용 유산 포인트 코드가 항상 적용되는 문제 수정 2021-09-12 02:07:29 +09:00
Hide_D d7a7751480 fix: 수뇌가 소재 도시에 도시 관련 사령턴(백동 등) 실행시 발생하는 버그 수정
- 백동 + 성수 등등
2021-09-11 19:35:30 +09:00
Hide_D e816f7126d fix: 가오픈 정보 안나오는 버그 수정 2021-09-10 22:49:30 +09:00
Hide_D 6315dff17b fix: bootstrap4 package order 문제
- vue3 + bootstrap5 적용 전까진 고통 받아야...
- 당분간 Popper, jQuery가 제대로 export 되었는지 확인 필요
2021-09-10 22:26:14 +09:00
Hide_D 826d9fcf6a fix: gateway tooltip 2021-09-10 21:38:32 +09:00
Hide_D 4e642fe3d3 fix: 내 정보 로그 추가 불러오기 안되는 문제 수정 2021-09-10 21:05:26 +09:00
Hide_D 2012bbdbc1 fix: browser support 범위 추가 2021-09-10 18:43:29 +09:00
Hide_D 96e14fd6fc fix: 오타 수정 2021-09-09 01:27:29 +09:00
Hide_D 1449d31e34 Merge pull request '스크립트 기반을 WebPack + Babel + TypeScript + Vue3으로 변경' (#191) from ts_convert into devel
Reviewed-on: https://storage.hided.net/gitea/devsam/core/pulls/191
2021-09-09 01:00:42 +09:00
Hide_D a3a2a62819 [empty] this is a empty commit 2021-09-09 00:59:10 +09:00
Hide_D c59019f5f7 Squashed commit of the following:
commit 3ef363a01e
Author: hide_d <hided62@gmail.com>
Date:   Mon Sep 6 02:30:00 2021 +0900

    fix: 은퇴 시 숙련 포인트를 지나치게 많이 받는 문제 수정

commit 9e68bc90c2
Author: hide_d <hided62@gmail.com>
Date:   Mon Sep 6 02:17:56 2021 +0900

    재야에서 도시보기 warning

commit d2590607c2
Author: hide_d <hided62@gmail.com>
Date:   Sun Sep 5 23:05:06 2021 +0900

    fix: div 0

commit 2bce6e4f02
Author: hide_d <hided62@gmail.com>
Date:   Sun Sep 5 23:02:52 2021 +0900

    warning 메시지 수정

commit e64812da72
Author: hide_d <hided62@gmail.com>
Date:   Sat Sep 4 03:42:09 2021 +0900

    fix: m장, 의병장 숙련이 설정되지 않는 버그 수정

commit 7cd40fca03
Author: hide_d <hided62@gmail.com>
Date:   Sat Aug 21 16:04:03 2021 +0900

    fix: 모병/징병에서 조건 검사부 통솔 계산값

commit d1568a3b2c
Author: hide_d <hided62@gmail.com>
Date:   Sat Aug 21 02:50:54 2021 +0900

    허보에 수몰이 같이 들어간 버그 수정

commit e7dcc84afc
Author: hide_d <hided62@gmail.com>
Date:   Thu Aug 19 14:51:50 2021 +0900

    REAMDME.md 버전 수정

commit 8eaa940d4e
Author: hide_d <hided62@gmail.com>
Date:   Wed Aug 18 20:40:37 2021 +0900

    Revert "fix: 7.2에서 오동작 버그 수정"

    This reverts commit 9997675b1d.

commit 9997675b1d
Author: hide_d <hided62@gmail.com>
Date:   Wed Aug 18 20:32:47 2021 +0900

    fix: 7.2에서 오동작 버그 수정

commit 9ef566f11f
Author: hide_d <hided62@gmail.com>
Date:   Wed Aug 18 20:26:31 2021 +0900

    fix: 아이템중 WarActivateSkill 관련 중첩 해제 버그 수정
2021-09-09 00:53:35 +09:00
Hide_D 6bf09ff6da build: 서버별 build가 다를 가능성 고려 2021-09-09 00:32:42 +09:00
Hide_D 3a76d7df3a fix: tryNpmInstall 이후 genJS까지 실행해야 안전 2021-09-09 00:17:27 +09:00
Hide_D 1d516f08b3 fix: recent_map 에러 2021-09-08 23:55:37 +09:00
Hide_D 656245ce6a install: php 단에서 npm 설치 환경 구성 2021-09-08 23:50:38 +09:00
Hide_D 91d26db055 dep: build script 변경 2021-09-08 22:39:14 +09:00
Hide_D a354d60b77 misc: npc_control 기존 파일 제거 2021-09-08 21:06:21 +09:00
Hide_D 3112ac7f9a 요구사항에 nodejs 요구 추가 2021-09-08 20:41:55 +09:00
Hide_D 5351496d6e vue: NPCControl
- 외향  모사(딱히 의미는 없으나..)
- 약간 반응형
2021-09-08 20:39:04 +09:00
Hide_D 794f766db8 webpack: 최적화 옵션 변경 2021-09-08 03:29:43 +09:00
Hide_D 3fb5423fda vue: NPCControl
- 일단 모든 기능 작동
2021-09-08 03:04:40 +09:00
Hide_D 260cee9b38 vue: NPCControl(WIP) 메인 기능 동작 2021-09-08 02:48:46 +09:00
Hide_D c4a6735d60 vue: NPCControl(WIP) 2021-09-07 03:03:25 +09:00
Hide_D 28ad1b6c9d vue-component: NumberInputWithInfo 2021-09-07 00:29:38 +09:00
Hide_D f609e2b628 ts: numberWithCommas 분리 2021-09-07 00:16:28 +09:00
Hide_D 3ef363a01e fix: 은퇴 시 숙련 포인트를 지나치게 많이 받는 문제 수정 2021-09-06 02:30:00 +09:00
Hide_D 9e68bc90c2 재야에서 도시보기 warning 2021-09-06 02:17:56 +09:00
Hide_D 4a36ac6a04 vue: NPCControl(WIP) 2021-09-06 02:12:28 +09:00
Hide_D d2590607c2 fix: div 0 2021-09-05 23:05:06 +09:00
Hide_D 2bce6e4f02 warning 메시지 수정 2021-09-05 23:02:52 +09:00
Hide_D 53e95bfadf delete-old: board 2021-09-05 21:27:41 +09:00
Hide_D 6450629d70 CssMinimizer 적용 2021-09-05 18:20:39 +09:00
Hide_D 8261b85b86 vue: board 2021-09-05 17:52:39 +09:00
Hide_D 1c985e227f vue: Board(WIP) 2021-09-05 03:59:00 +09:00
Hide_D 4efb380a61 defer 대응 2021-09-05 03:32:57 +09:00
Hide_D e64812da72 fix: m장, 의병장 숙련이 설정되지 않는 버그 수정 2021-09-04 03:42:09 +09:00
Hide_D 14bbcd0617 vue: inheritPoint 샘플 작성 2021-09-04 00:06:54 +09:00
Hide_D ca4888ecae vue: inheritPoint(WIP) 2021-09-03 02:42:50 +09:00
Hide_D e3251b352f dep: ready for vue3 2021-09-02 23:03:19 +09:00
Hide_D a532e73b52 web_pack_config 2021-09-02 01:51:37 +09:00
Hide_D b11aa4e633 misc: move gateway path 2021-09-02 00:46:33 +09:00
Hide_D 1c66cf83bf misc: msg template 통합 2021-08-31 02:35:50 +09:00
Hide_D 4cbe3354e1 js2ts: kingdomList 2021-08-31 02:27:00 +09:00
Hide_D 1ae7ba6bbb js2ts: seleect_general_from_pool 2021-08-31 01:03:22 +09:00
Hide_D 8d28478b10 js2ts: join 2021-08-30 02:11:07 +09:00
Hide_D c1fb8c619f js2ts: history 2021-08-30 02:02:53 +09:00
Hide_D eb250f91cb js2ts: processing - plugin 구조 마저 변경 2021-08-30 01:47:42 +09:00
Hide_D 4ea2b963fa js2ts: hallOfFame 2021-08-30 01:43:01 +09:00
Hide_D 372b4bbb3f misc: 기존파일 제거 2021-08-30 01:38:24 +09:00
Hide_D 7577b1a958 js2ts: currentCity 2021-08-30 01:30:56 +09:00
Hide_D 7590c0241a core: getJSFiles -> getJSPlugins
- 각각 js를 불러오기보다.. 초기화 함수를 직접 호출
- lazy loading은 어차피 나중에 새로 만들거니까 안 함.
2021-08-30 01:14:20 +09:00
Hide_D 68b00733e3 js2ts: diplomacy
- select2 관련 문제 해결?
2021-08-30 00:27:04 +09:00
Hide_D 0cf1c48f2a legacy: #bg0, #bg1, #bg2 제거 2021-08-29 02:16:12 +09:00
Hide_D 8dbaa4c175 misc: Pooper export, summernote lang 2021-08-29 02:05:16 +09:00
Hide_D 9085ed7ab0 js2ts: dipcenter(WIP)
- summernote 이식
- summernote/imageFip plugin 이식
2021-08-29 01:39:03 +09:00
Hide_D 26c3fea611 misc: 미사용 파일 제거 2021-08-28 23:40:37 +09:00
Hide_D 6008cc3831 jquery-redirect 제거 2021-08-28 23:34:11 +09:00
Hide_D f9d71a741f js2ts: main(WIP)
- jquery-redirect 제거
- linkifyStr import
2021-08-28 23:14:07 +09:00
Hide_D 6affe95aea watch에 dev 모드 추가 2021-08-28 23:13:22 +09:00
Hide_D e83fe7f8ff dep: js package version up
- typscript
- sass
- typescript-eslint
- vue
- core-js
2021-08-28 19:03:28 +09:00
Hide_D 4926577eeb fix: admin_member path 2021-08-28 18:56:50 +09:00
Hide_D 584a9ba06c fix: msg 기본 동작 2021-08-28 17:25:33 +09:00
Hide_D c8f5f671a9 feat: exportWindow
- global을 지저분하게 하지 않고, window에 출력만 해줌
2021-08-28 17:20:44 +09:00
Hide_D cc852e5aad js2ts: msg(WIP) 2021-08-28 06:26:25 +09:00
Hide_D 1bb37ede87 js2ts: msg(WIP) 2021-08-28 06:23:25 +09:00
Hide_D 8eaee091ea js2ts: msg(WIP) 2021-08-28 06:22:30 +09:00
Hide_D 90340c5be8 String format 확장 제거 2021-08-27 03:53:15 +09:00
Hide_D 34258475f5 fix: extExpandCity (format func) 2021-08-27 03:41:32 +09:00
Hide_D 445c7a0472 js2ts: extExpandCity
- 이부분은 완벽히 새로만들어야 하므로 유지
2021-08-27 03:39:59 +09:00
Hide_D 541710ba1e js2ts: myCityInfo(wip) 2021-08-27 03:36:35 +09:00
Hide_D 27b6caf77d luxon -> date-fns 2021-08-26 22:50:02 +09:00
Hide_D 460c131c1e misc: type module 지정 2021-08-26 21:50:06 +09:00
Hide_D 6aff22ae35 misc: delete old gateway install.js 2021-08-26 21:20:47 +09:00
Hide_D 355021ba2d js2ts: gateway install 2021-08-26 21:20:08 +09:00
Hide_D 946fbc0933 feat: jqValidateForm에 Values Type 지정 2021-08-26 21:10:02 +09:00
Hide_D 7bebc7da8d js2ts: index(login)
- fix-workaround: popper 로드
2021-08-26 18:11:51 +09:00
Hide_D cd33ac3c3e misc: 사용하지 않은 deprecated 함수 마저 제거 2021-08-26 04:00:52 +09:00
Hide_D 32f98ac079 misc: 개발용 코드 삭제 2021-08-26 03:39:33 +09:00
Hide_D fad54d4627 js2ts: join user 2021-08-26 03:35:49 +09:00
Hide_D 8ac6daff95 js2ts: admin_userlist 2021-08-26 02:28:18 +09:00
Hide_D 342f20a5a6 refac: escapeHtml, nl2br, TemplateEngine 분리 2021-08-26 01:37:46 +09:00
Hide_D b02bf2e596 js2ts: entrance, webpack(entrance/dist_js) 2021-08-26 01:25:58 +09:00
Hide_D 3961ff5185 webpack: dynamic js build on update 2021-08-25 03:35:51 +09:00
Hide_D 90c696776c genJS 2021-08-25 02:55:11 +09:00
Hide_D d697d42c4e target별 JS 생성 2021-08-25 02:44:46 +09:00
Hide_D b52604cb1d feat: VersionGit hash 추가. dynamic추가. 버전 변수 방식 변경 2021-08-25 02:12:35 +09:00
Hide_D ee1639bbef feat: VersionGit에 'hash' 추가.(WIP) 2021-08-25 02:05:27 +09:00
Hide_D 59b09fa084 gitignore 준비 2021-08-25 01:22:03 +09:00
Hide_D 2d1a001c0f build: boosInfo, myPage, convertFormData 2021-08-22 20:13:08 +09:00
Hide_D cb6d78eccb js2ts: bossInfo, myPage
- convertFormData에서 null -> ''
2021-08-22 15:45:10 +09:00
Hide_D 65949cccfa js2ts: bossInfo 2021-08-22 14:49:03 +09:00
Hide_D 2d2c4d8ae4 fix: 리셋 옵션에서 '기본사령턴' 2021-08-22 02:48:14 +09:00
Hide_D a22005cf8c dep: package 2021-08-22 02:40:27 +09:00
Hide_D d5c88f2bc0 dep: webpack cache
- 개발용
2021-08-22 02:31:10 +09:00
Hide_D a7b816dd05 dep: overwrite
- TODO: 서버에서 npm run build를 자동으로 해야함
2021-08-22 02:11:33 +09:00
Hide_D c84924c23c dep: missing select2 2021-08-22 02:06:50 +09:00
Hide_D faa37756dc build: board 2021-08-21 21:41:43 +09:00
Hide_D 61ed7b167a js2ts: board 2021-08-21 21:41:32 +09:00
Hide_D cd6347a23a build: util.ts 분리 2021-08-21 20:45:24 +09:00
Hide_D 6cc37dedd2 js2ts: util.ts 분리 2021-08-21 20:45:10 +09:00
Hide_D 1496fbe0b7 build: betting 2021-08-21 20:38:24 +09:00
Hide_D 738758d753 js2ts: betting 2021-08-21 20:38:15 +09:00
Hide_D 7cd40fca03 fix: 모병/징병에서 조건 검사부 통솔 계산값 2021-08-21 16:04:03 +09:00
Hide_D 266da98a73 build: select_npc 2021-08-21 05:16:07 +09:00
Hide_D 2a17d357a1 js2ts: select_npc 2021-08-21 05:15:58 +09:00
Hide_D b081e3e011 build: processing 2021-08-21 04:40:55 +09:00
Hide_D 09f885ee68 js2ts: processing
- select2 version dependency 문제로 import는 유지
2021-08-21 04:40:40 +09:00
Hide_D d1568a3b2c 허보에 수몰이 같이 들어간 버그 수정 2021-08-21 02:50:54 +09:00
Hide_D f913a86dae build: processing plugin 2021-08-21 00:30:05 +09:00
Hide_D 5c56b5aacf js2ts: processing plugin 정리 2021-08-21 00:29:50 +09:00
Hide_D 096b87d4e3 build: recent_map 2021-08-20 04:59:13 +09:00
Hide_D 6e3d3584a1 gateway: 입구의 지도를 iframe으로 변경 2021-08-20 04:58:45 +09:00
Hide_D b0e7221950 gateway: 입구의 지도를 iframe으로 변경 2021-08-20 04:58:05 +09:00
Hide_D 92458fb1b3 build: processing parts 2021-08-20 03:24:14 +09:00
Hide_D 80541abe9f js2ts: processing parts(WIP) 2021-08-20 03:24:03 +09:00
Hide_D d7851e5ec9 build: battle_simulator 2021-08-20 02:55:07 +09:00
Hide_D 16a50d6271 js2ts: battle_simulator 2021-08-20 02:54:57 +09:00
Hide_D 72a58827bf misc: showErrorLog
현재 에러로그에는 javascript가 필요하지 않음
2021-08-20 01:40:03 +09:00
Hide_D 85b806283e build: install & jqValidateForm 2021-08-20 01:31:32 +09:00
Hide_D 15037edbde js2ts-fix: install 2021-08-20 01:31:18 +09:00
Hide_D 17c83f8db9 fix: jqValidateForm에서 복합 타입(radio, checkbox) 처리 오류 수정 2021-08-20 01:30:34 +09:00
Hide_D e7dcc84afc REAMDME.md 버전 수정 2021-08-19 14:51:50 +09:00
Hide_D 8eaa940d4e Revert "fix: 7.2에서 오동작 버그 수정"
This reverts commit 9997675b1d.
2021-08-18 20:40:37 +09:00
Hide_D 9997675b1d fix: 7.2에서 오동작 버그 수정 2021-08-18 20:32:47 +09:00
Hide_D 9ef566f11f fix: 아이템중 WarActivateSkill 관련 중첩 해제 버그 수정 2021-08-18 20:26:31 +09:00
Hide_D e3c3afe809 js2ts & wip: install
- jqValidateForm에 전/후처리 추가
2021-08-18 02:59:58 +09:00
Hide_D 5b14ca6b12 build-misc: BundleAnalyzerPlugin 2021-08-17 02:56:11 +09:00
Hide_D c4676fecda build: user_info 2021-08-17 02:25:15 +09:00
Hide_D a2872ef5b7 js2ts: user_info
- moment js 사용 대상 제거
- sha512 추가
- 비어있는 func.js 제거
2021-08-17 02:25:04 +09:00
Hide_D dea12f0e5e build: entrance 2021-08-17 01:05:54 +09:00
Hide_D a518a6e67d js2ts: entrance
- j_server_get_status 반환형 수정
- getDateTimeNow 추가
- common에서 TemplateEngine 코드 버그 수정
2021-08-17 01:05:41 +09:00
Hide_D 325f2c28f7 js2ts: install_db.php
- jqValidateForm 구현
  - async-validator + 수작업
- common.js 없이 ventor -> 타겟 ts 직접
2021-08-16 23:50:12 +09:00
Hide_D dc470402e7 gateway printJS 변경 2021-08-16 23:46:53 +09:00
Hide_D a029322aae fix-dep: 로그인 대문 dependency문제로 지도 안나오는 문제 해결 2021-08-16 16:09:54 +09:00
Hide_D e4a9953af4 build: map 2021-08-16 03:29:54 +09:00
Hide_D 57dc70f1bc js2ts: map 2021-08-16 03:29:44 +09:00
Hide_D dd83874d83 misc: 미사용 파일 삭제 2021-08-16 01:11:38 +09:00
Hide_D 1ef2b7398e js2ts: chiefCenter
- common: unwrap_any
- jQuery export 수정
- axios로 변경
- moment -> luxon
2021-08-16 01:06:17 +09:00
Hide_D a89696afbb js2ts: vendor, evergreen browsers
- IE11 제외(webpack)
- vendor에 bootstrap, jquery 번들
- common.js에서 번들된 jquery, bootstrap 초기화
- 기본 printJS 코드를 common_path, vendors, common으로 고정
2021-08-15 22:55:08 +09:00
Hide_D 1ac03ba6e5 js2ts: ext.plugin_troop
- async await 대응
- axios 준비
- troop.css
2021-08-15 21:04:06 +09:00
Hide_D 7e4068a244 js2ts: common 분리, troop.js 2021-08-15 20:19:47 +09:00
Hide_D c31a867bde js->ts: common.js 2021-08-15 19:59:34 +09:00
Hide_D f1252fa4e2 webpack: scss, vue (#189)
WebPack에 scss와 vue를 사용할 수 있도록 세팅.

현재는 php서버와 코드가 강하게 엮여있기 때문에 vue-cli 대신 수동으로 webpack에 등록.

파일 번들링 경로는 다음과 같음

- scss + style -> css
- ts -> js

Reviewed-on: https://storage.hided.net/gitea/devsam/core/pulls/189
Co-authored-by: hide_d <hided62@gmail.com>
Co-committed-by: hide_d <hided62@gmail.com>
2021-08-14 05:47:16 +09:00
Hide_D dd52766449 Merge pull request 'PHP8 버전 대응, 버그 수정' (#188) from php8 into devel
Reviewed-on: https://storage.hided.net/gitea/devsam/core/pulls/188
2021-08-13 00:00:32 +09:00
Hide_D 8f3c778b80 fix: phan 지시에 따라 일부 버그 수정
- null && key_exists 버그
- or assign이 integer 대상이므로 직접 연산
- false 대신 0 입력한 곳 수정
- 자체 Deprecate 처리한 함수 회피
- 초기화되지 않은 [] 확인하여 처리
- sleep은 정수만 받으므로 usleep으로 변경
- 선언하지 않고 그냥 사용하던 member 변수 선언
- boolean operation 순서 틀린 부분 수정
2021-08-12 23:58:20 +09:00
Hide_D 9aa1b25a56 use class, function 커맨드를 php8에서 사용할 수 있도록 수정
- \ 토큰 해석 문제
- VSCode 자동 완성 문제로 use function \sammo\{ 를 모두 해제
2021-08-12 22:35:42 +09:00
Hide_D b4d7acb827 유산 포인트 시스템, 추가 기수 대비 (#187)
- 유산 포인트
  - 기수 뒤로도 누적되는 포인트
  - 생존, 최대 임관년 수, 최대 연속 내정 성공, 병종 상성 우위 횟수, 전투 횟수, 계략 성공 횟수, 천통 기여(규모 상승, 천통 수뇌, 천통 군주), 숙련도, 토너먼트, 베팅 당첨
  - 유산 관리 페이지 제공

- 태수국
  - 181년 1월에 자동 생성되는 u장수국
  - 시간이 지나면 사실상 자동 소멸
  - 유저국과는 4칸 거리, 서로는 2칸 거리
  - 이 시스템으로 인해 m장 거병 차단

- NPC 원조시 불가침
  - 1년 세수만큼 받은 경우 24개월 불가침 제안
  - 최소 6개월
  - 불가침을 받지 않고 추가 원조한 경우 계속해서 기간 상승
  - 단, 불가침 수락 전에 선포를 할 수 있음

Reviewed-on: https://storage.hided.net/gitea/devsam/core/pulls/187
Co-authored-by: hide_d <hided62@gmail.com>
Co-committed-by: hide_d <hided62@gmail.com>
2021-08-11 21:57:52 +09:00
Hide_D b306601c72 Dep: update
주로 PHAN
2021-08-06 22:39:09 +09:00
Hide_D 5310c2e7f6 작위보상 비중 수정 2021-05-02 02:00:16 +09:00
Hide_D 859f49eb10 환약을 유니크로 습득하는 버그 수정 2021-05-01 23:48:01 +09:00
Hide_D ccfb73c19b 환약을 습득하게 되는 버그 수정 2021-05-01 23:46:33 +09:00
Hide_D b35c40c5a6 유니크 onCalcStat 버그 수정 2021-05-01 23:38:06 +09:00
Hide_D 288107c8bc 아이템 효과 텍스트 수정 2021-04-30 22:36:24 +09:00
Hide_D f9b56c7de2 무쌍 누락분 수정 2021-04-30 16:35:34 +09:00
Hide_D b48734ebfa TypeCode 추가 2021-04-29 22:38:46 +09:00
Hide_D 1aa944c3e1 전투 수비 파트 약 상향 2021-04-29 21:10:47 +09:00
Hide_D 0399b73c73 국가 규모 승급시 아이템 습득 방식 변경 2021-04-29 20:31:32 +09:00
Hide_D bcbd69e1b9 유니크 아이템에 효과 추가 2021-04-29 19:50:12 +09:00
Hide_D 14fc85db51 유니크 기본 획득 확률 변경 2021-04-29 18:49:19 +09:00
Hide_D 0c50c49555 무쌍 초반 버프, 후반 너프 2021-04-29 18:47:55 +09:00
Hide_D d37c254812 유니크 중복 획득 가능 2021-04-29 18:44:09 +09:00
Hide_D 9d3e83e1ba 초반 등록 NPC 30명 2021-04-29 18:30:46 +09:00
Hide_D 2df98c614d fix: 이민족 종료 시점 2021-04-11 23:17:47 +09:00
Hide_D ef7655101f fix: 이민족 종료조건 추가 2021-04-11 21:22:06 +09:00
Hide_D b1f33e84b9 fix: 후방 워프 인구 충분 판단 기준 수정 2021-04-10 16:01:21 +09:00
Hide_D be27328404 fix: AI 발령 턴 오류 수정 2021-04-10 15:39:03 +09:00
Hide_D f33a3989ea fix: 전방 도시가 '관'처럼 인구가 적은 경우 후방 워프하지 않는 버그 수정
feat: 후방 발령 관련 로직도 후방 워프와 유사하게 재 적용
2021-04-10 11:51:10 +09:00
Hide_D 174cef80c0 fix: 장수수 카운트에 "의병장"을 포함하여 계산하는 버그 수정 2021-04-02 14:39:57 +09:00
letrhee b2dc9dc113 이민족 난이도 기본 수치 변경 2021-03-29 22:45:43 +09:00
letrhee 7e161684e9 feat: 이민족 등장 2021-03-28 16:31:01 +09:00
letrhee a25654a1c2 fix: 이민족 2021-03-28 05:57:53 +09:00
letrhee 8f1fb5df6c fix: 수비자 도시 버그
fix: RaiseInvader 버그 수정 중
2021-03-28 04:12:10 +09:00
letrhee e9393a2e8e feat: RaiserInvader 초기 구현 2021-03-28 03:13:03 +09:00
Hide_D 91a4989ef3 fix: 가상 역사 모드에서 후계자 지정이 사실 모드 설정을 따라가는 버그 수정 2021-03-23 13:24:34 +09:00
Hide_D bbc70469e5 fix: 빙의 해제시 owner 값 버그 수정 2021-03-23 13:19:40 +09:00
letrhee eb4ad1af46 fix: RegNPC 버그 수정, event handler 규격 버그 수정 2021-03-19 18:09:53 +09:00
letrhee 0a42d7381c fix: RegNPC 버그 수정 2021-03-19 17:44:34 +09:00
letrhee 0165cfb3ac RegNPC 버그 수정 2021-03-19 17:36:13 +09:00
letrhee f44d45c992 fix: can부대구출발령 없음 2021-03-19 17:22:48 +09:00
letrhee 38037978a2 디버그2 2021-02-28 01:39:47 +09:00
letrhee e909a6927b 디버그 코드 추가 2021-02-28 01:33:58 +09:00
letrhee 85574ed40c 에러 로그용 추가 2021-02-28 01:05:27 +09:00
Hide_D 7e9181d935 긴급 호출 대비 2021-02-21 00:40:49 +09:00
Hide_D 87b3f3ed27 initFull을 할 필요가 없었던 것! 2021-02-10 21:24:04 +09:00
Hide_D 9ac3763bdd 불가침인데도 선포 가능한 버그 수정 2021-01-12 17:14:36 +09:00
Hide_D 5b4567b9ff 관리자 도구 수정 2021-01-07 22:22:04 +09:00
Hide_D 201080e6ff 모반시도 버그 수정 2021-01-07 01:12:06 +09:00
Hide_D 5d1d7da498 feat: 빙의일람에 장수 선택 내역
fix: 장수 선택 내역에서 owner_name 미반영 버그 수정
fix: 온라인 장수에서 npc가 뜨는 버그 수정
2021-01-03 18:31:18 +09:00
Hide_D c6f831aa38 초반 m장 스탯 관련 문제 해결, 장수 선택 term 해결 2021-01-01 21:09:43 +09:00
Hide_D fad7af19a7 의병모집 버그 수정 2021-01-01 19:56:29 +09:00
Hide_D 4327f9529a 버그 수정
- 의병 모집
- 장수 변경 시 생성 폼 남음
2021-01-01 19:54:28 +09:00
Hide_D d100030da6 버그 수정. 시간 변경 2020-12-31 16:21:57 +09:00
Hide_D 3632d2c3ef 버그.. 2020-12-31 13:34:37 +09:00
Hide_D a430a1dc0c 버그 수정2 2020-12-31 13:33:45 +09:00
Hide_D 739660e6ca 버그 수정 2020-12-31 13:29:57 +09:00
Hide_D 1a18dc23b9 버그 수정 2020-12-31 13:27:11 +09:00
Hide_D 55f37f856b select pool 수 증가 2020-12-31 13:24:33 +09:00
Hide_D c1df8d2ed3 턴 변경을 합리적으로 변경 2020-12-31 08:09:23 +09:00
Hide_D 6c92b2dd2e 버그 수정 2020-12-31 07:49:33 +09:00
Hide_D 3e35dec9fa general_pool 에서 장수 선택 기능 추가 2020-12-31 07:43:56 +09:00
Hide_D 187db3d011 readme 수정 2020-12-27 19:49:39 +09:00
Hide_D 0116e86fcc 일부 수정
composer update, README.md 업데이트
2020-12-27 02:11:53 +09:00
Hide_D aaa3f1aa88 DummySession 준비 2020-12-26 15:48:05 +09:00
Hide_D 84f54b4b8a 종전수락 버그 수정 2020-12-13 22:05:07 +09:00
Hide_D 8c7ec533bf 도시 정보 출력 순서 변경 2020-11-11 23:34:53 +09:00
Hide_D 9de1f95360 이벤트 빼빼로 추가 2020-11-11 23:04:08 +09:00
Hide_D cdefb96a8c 수극 연속 사용 버그 수정 2020-09-09 14:20:15 +09:00
Hide_D e25b6c9232 피장파장 로그 버그 수정 2020-09-09 14:20:15 +09:00
Hide_D eae58b59c9 수몰을 아무 국가에나 쓸 수 있는 버그 수정 2020-09-09 14:20:15 +09:00
Hide_D 4afedd5c88 훈사 제한 버그 2020-08-17 09:21:37 +09:00
Hide_D 6e5cc7fc6c 기본 도시 정보 데이터 대폭 추가 2020-08-15 03:46:43 +09:00
Hide_D 1b6c2152d3 귀병 첫 페이즈 매우 높은 확률로 계략 시도 2020-08-11 22:43:45 +09:00
Hide_D 1fc022bc60 전쟁/선포 중인 국가에 선포 확률 대폭 감소 2020-08-11 22:36:26 +09:00
Hide_D 858777606b 인탐 성공 시 확률따라 추가 보정, 인탐/의병 지장 버그 수정 2020-08-11 22:33:50 +09:00
Hide_D b4fe75af95 계략 강화, 탈취량 시간에 따라 증가 2020-08-11 22:33:00 +09:00
Hide_D e8d94fd116 회피 필살 중첩 가능 2020-07-24 14:19:05 +09:00
Hide_D d6ab066152 이호경식 버그 수정 2020-07-21 22:38:53 +09:00
Hide_D 54b7cb2c88 버그 테스트 2020-07-21 22:34:10 +09:00
Hide_D 90b2623b9d 격노비급 버그 수정 2020-07-21 03:41:27 +09:00
Hide_D 8782836d7b 격노 비급 버그 수정 2020-07-21 03:32:37 +09:00
Hide_D e3aa26a41a 방랑시 버그 수정 2020-07-20 23:24:15 +09:00
Hide_D 54b1fb739f 전략 턴 버그 수정. 글로벌 쿨 9턴으로 변경 2020-07-17 00:16:48 +09:00
Hide_D 9983b719d6 격노 추가 향상 2020-07-16 02:57:37 +09:00
Hide_D c70df7102b 아이템 짝 안맞는 것 수정 2020-07-16 02:38:40 +09:00
Hide_D f335b6837b 아이템 수정 2020-07-16 02:31:18 +09:00
Hide_D 19892a00f4 위압 사기버그 수정 2020-07-15 11:55:35 +09:00
Hide_D c6d753080a 저격 약간 더 강화 2020-07-15 02:56:31 +09:00
Hide_D 28547b32a0 필살 조금 더 강화 2020-07-15 02:52:14 +09:00
Hide_D 8aae688fb0 버그 수정 2020-07-15 02:43:00 +09:00
Hide_D 38a688f918 전특 대 개편 2020-07-15 02:33:21 +09:00
Hide_D 6f9cb12dd8 기본 스탯 향상 2020-07-13 23:25:33 +09:00
Hide_D 5c20d6c3f6 전략별 쿨타임 적용 2020-07-13 23:21:21 +09:00
Hide_D a09511defb 전략 사용 방식 변경 2020-07-13 21:54:32 +09:00
Hide_D 189db2a051 수동 토너먼트 버그 수정 2020-07-07 15:24:48 +09:00
Hide_D 8f9d695ca6 버그 수정 2020-06-26 23:33:39 +09:00
Hide_D cfc897055b 로그인 form draw 예시 2020-06-26 23:31:45 +09:00
Hide_D f74a7b31c3 file_cache_준비 2020-06-26 21:24:24 +09:00
Hide_D 1860e1dc43 webp 지원 2020-06-26 02:43:46 +09:00
Hide_D c5e6225e7f 후방워프 버그 수정 2020-06-26 02:30:35 +09:00
Hide_D 8e985ed413 중립턴, 내정워프 수정 2020-06-26 02:26:59 +09:00
Hide_D 392c627925 몰수 기준 완화 2020-06-26 00:16:56 +09:00
Hide_D cd9a4887fd 전특 초기화에서 '쿨'을 감안함 2020-06-25 23:45:09 +09:00
Hide_D 22f856668f 새 금쌀 구매 로직 2020-06-25 23:43:35 +09:00
Hide_D 0f926fc701 버그 수정 2020-06-21 17:07:03 +09:00
Hide_D 4ab5202ef2 서버 커스터마이징 가능 2020-06-21 17:03:32 +09:00
Hide_D 26c316a47a 유저장 구출 버그 수정 예상 2020-06-20 21:43:28 +09:00
Hide_D b25c2547b2 최근 전투 페이즈 계산 버그 수정 2020-06-20 15:09:35 +09:00
Hide_D 64b041ea05 recent_war 표기 방식 변경경 2020-06-19 20:24:50 +09:00
Hide_D 0ddc8588f8 수비 기호 표시 추가 2020-06-18 01:05:34 +09:00
Hide_D b4e274682a 부대유저장발령 코드 일부 수정 2020-06-17 03:39:22 +09:00
Hide_D 76ce203272 도시 치료 결과가 이상하게 뜨는 버그 수정 2020-06-16 00:26:45 +09:00
Hide_D 7116efd65d 버그 수정 2020-06-12 22:11:19 +09:00
Hide_D a9b2dcb49e 구출 발령 활성화 안된 버그 수정 2020-06-12 22:08:56 +09:00
Hide_D e804b6afb2 전방 발령 버그 수정 2020-06-12 21:16:37 +09:00
Hide_D 772d37131d ExistsDestNation 버그 수정 2020-06-12 20:39:31 +09:00
Hide_D ec30c46d7e warning 수정 2020-06-12 20:28:50 +09:00
Hide_D b5705e6ec3 오타 수정 2020-06-11 03:28:10 +09:00
Hide_D 4e0479262f 버그 수정 2020-06-11 03:21:26 +09:00
Hide_D 9a8088495e 버그 수정 2020-06-11 03:14:12 +09:00
Hide_D 983c5eb544 전투 시뮬레이터 장수 불러오기 완성 2020-06-11 03:13:02 +09:00
Hide_D 58fdbc4054 관직 비우기 안되는 것 수정 2020-06-11 00:29:36 +09:00
Hide_D 3673632089 원조 버그 수정 2020-06-11 00:20:08 +09:00
Hide_D 87e61c8920 포상 검사 로직 빠진 부분 수정 2020-06-09 20:50:57 +09:00
Hide_D d67e7a3b4d 전쟁장 판단 기준 임시 수정, 사망 대비 장수에겐 포상안함 2020-06-09 20:32:49 +09:00
Hide_D 954995b3ef Merge branch 'devel' of ssh://storage.hided.net:2525/devsam/core into devel 2020-06-09 20:30:41 +09:00
Hide_D f591849b8d 전쟁장 판별 코드 임시 수정 2020-06-09 20:30:34 +09:00
Hide_D 4c44b751e3 저격시 아이템이 무조건 소모되는 버그 수정 2020-06-09 01:45:52 +09:00
Hide_D 648ad23dcf 무장 신산 가능 2020-06-09 01:25:35 +09:00
Hide_D c46c8a010f 홀짝 버그 수정 2020-06-09 01:10:21 +09:00
Hide_D 832536f403 내특 동작 안하는 버그 수정 2020-06-09 01:03:58 +09:00
Hide_D f0067a1c04 찐유저무쌍 비급판 2020-06-07 16:08:04 +09:00
Hide_D f732a4b545 유지비를 깎고 세수를 계산하도록 수정 2020-06-06 19:21:51 +09:00
Hide_D 38cf897ae1 선포 동안에는 초토화 가능하도록 수정 2020-06-06 15:43:29 +09:00
Hide_D 8ca365da7b 숙련전환 효율 향상 2020-06-06 14:33:21 +09:00
Hide_D cbe8b4012b 환약 사용 여부가 안보이는 버그 수정 2020-06-06 13:45:31 +09:00
Hide_D 522f5c8a86 유저장은 자동 사령턴 켬끔 가능 2020-06-06 13:20:01 +09:00
Hide_D ac5d2268e5 전방 발령에 공백지 배제 2020-06-06 12:55:34 +09:00
Hide_D 3d0effb912 중립 인탐 확률 감소 2020-06-06 03:07:00 +09:00
Hide_D 90b970115a 랜덤 임관 버그 수정 2020-06-05 18:13:21 +09:00
Hide_D 0f5ba4ef5b 중립 커맨드 2020-06-05 02:25:44 +09:00
Hide_D bd428fa352 지도 기반 선택 버그 수정 2020-06-05 01:14:49 +09:00
Hide_D 00b57b2ff9 명령 입력턴에 select2 적용 2020-06-05 01:02:33 +09:00
Hide_D bd69e3dcc3 select2 업그레이드 2020-06-04 23:21:47 +09:00
Hide_D 275d492f39 오호 장군 수정 2020-06-04 21:31:26 +09:00
Hide_D f55f302306 천지비급 시나리오를 설명에 맞게 수정 2020-06-03 22:17:22 +09:00
Hide_D 650225ad00 서버가 닫힌 경우 리다이렉트하도록 2020-06-03 01:51:31 +09:00
Hide_D 631f5ed99c 세력도시 암행부 연동 버그 수정 2020-06-02 01:24:25 +09:00
Hide_D b9664dc710 버그 수정 시도2 2020-06-02 01:06:00 +09:00
Hide_D bd66871b0e 사령부 공백이어도 사령턴은 보임 2020-06-02 00:24:44 +09:00
Hide_D dccc880ef5 천지비급 디버그 풀기 2020-06-02 00:08:52 +09:00
Hide_D 0ccad9df90 composer 반영 2020-06-01 21:14:50 +09:00
Hide_D c75fbc5f00 버그 수정 2020-06-01 02:34:56 +09:00
Hide_D e257bed6de 환약 사용 기준 추가 2020-06-01 02:31:46 +09:00
Hide_D e56a550cff 내 설정 페이지 동작 방식 일단 수정 2020-06-01 02:17:20 +09:00
Hide_D 3d1ced386f 소모성 아이템 소비 2020-05-31 23:11:17 +09:00
Hide_D eb90b33485 setResultTurn 버그 수정 2020-05-31 17:21:51 +09:00
Hide_D 215a7501a6 버그 수정 2020-05-31 04:43:15 +09:00
Hide_D 9f228b6235 버그 수정 2020-05-31 04:42:11 +09:00
Hide_D 72e6132895 버그 수정 2020-05-31 04:32:46 +09:00
Hide_D fbe520d381 버그 수정 2020-05-31 04:25:36 +09:00
Hide_D 108f47c90d 장수 목록 json 버그 수정 2020-05-31 04:12:42 +09:00
Hide_D c65c34469a 격노 1회만 2020-05-31 01:47:44 +09:00
Hide_D b21845440a 격노 발동은 1회만 2020-05-31 01:44:44 +09:00
Hide_D 4ce642629c 이벤트 특기 버그 수정 2020-05-30 22:50:48 +09:00
Hide_D 68262d8abb 이중특기 테스트 2020-05-30 16:31:03 +09:00
Hide_D 093002db14 긴급 쌀 시 병량패퇴를 당하지 않기 위해 강제 회피 2020-05-30 04:48:33 +09:00
Hide_D b85f7915f4 워프 버그 수정 2020-05-30 04:41:47 +09:00
Hide_D e70315354e 의병모집, 소형b 초기 m장, 작위보상금쌀
의병모집 -> 초기 금쌀 1000
작위보상 -> 작위에 따라 금쌀*1000
소형b -> 초기 m장 10 추가
2020-05-30 04:36:42 +09:00
Hide_D 0867a234c2 멸망시 임관 확률을 변경 가능하도록 설정 2020-05-30 03:18:23 +09:00
Hide_D 4e962bba09 인재탐색 변경. 영입 불가, 재야 가능 2020-05-30 03:09:48 +09:00
Hide_D 279b0cd0c5 대인 사살, 점령률 추가 2020-05-30 03:05:03 +09:00
Hide_D 3dc3dc8cbe 대인살상률, 점령수 준비 2020-05-30 02:29:46 +09:00
Hide_D 38131f26be 수비 켬끔 다양화 2020-05-30 02:08:16 +09:00
Hide_D 0e38412510 숙련 전환 효율 향상 2020-05-30 01:56:31 +09:00
Hide_D 848279404f 성벽에 닳는 내정을 1/2 2020-05-29 19:16:24 +09:00
Hide_D 6e77c8b8fc 격노 회피 시도 캔슬 2020-05-28 01:39:14 +09:00
Hide_D 33438263ab 소집해제 위치 이동 2020-05-28 01:33:27 +09:00
Hide_D bbe4e6d7ed Merge branch 'devel' of ssh://storage.hided.net:2525/devsam/core into devel 2020-05-26 21:44:22 +09:00
Hide_D 69387b6444 내정 워프 버그 수정 2020-05-26 21:44:03 +09:00
Hide_D bf7ffda252 실패 메시지 수정 2020-05-26 10:44:55 +09:00
Hide_D 10c2f222e1 첩보 가격이 저렴한 버그 수정 2020-05-26 00:47:42 +09:00
Hide_D b0a0bfa4ac 징병창 병력 키보드 입력 버그 2020-05-25 23:28:16 +09:00
Hide_D b573130ab7 치안강화 만땅 채우기 2020-05-24 22:52:56 +09:00
Hide_D cd5468f55c 사망시 수명 계산 버그 2020-05-24 13:41:52 +09:00
Hide_D 83407e0c8d 사령부 확실히 엔터 2020-05-23 17:21:07 +09:00
Hide_D e1466fe160 헌납 비율 수정 2020-05-23 16:35:33 +09:00
Hide_D 94a6a26b48 조사 수정 2020-05-23 16:30:10 +09:00
Hide_D f205c82d90 헌납 메시지 수정 2020-05-23 16:28:21 +09:00
Hide_D f9e61e7ea0 AI 치안 버그 수정 2020-05-23 16:24:18 +09:00
Hide_D 9462d32f83 주민선정을 매우 열심히 합니다. 2020-05-23 15:33:10 +09:00
Hide_D da8203e64d 증축 버그 수정 2020-05-23 11:12:10 +09:00
Hide_D 83ebd55a15 사령부 시간 표기 문제 2020-05-22 00:24:52 +09:00
Hide_D 0c3e9eb716 호황, 풍작 색상 변경 2020-05-22 00:17:24 +09:00
Hide_D bc72a8f083 내특 중복 버그 수정 2020-05-21 12:52:00 +09:00
Hide_D 14a68d5806 generalCommand 생성이 preprecessCommand보다 빠른 문제 수정 2020-05-21 12:14:46 +09:00
Hide_D 86dc78b63a 요양 입력하면 템치료 무효화 2020-05-21 02:16:20 +09:00
Hide_D 5dd0a758d4 왕조일람 국가 타입 버그 수정 2020-05-20 01:35:11 +09:00
Hide_D e959b1edc2 인사부 임명시 색상 2020-05-20 01:31:26 +09:00
Hide_D 7533f6239c 랜덤임관에 긍정적인 메시지 추가 2020-05-20 01:26:28 +09:00
Hide_D 71636a4ce6 Merge branch 'devel' of ssh://storage.hided.net:2525/devsam/core into devel 2020-05-20 01:11:41 +09:00
Hide_D 72e4cf3d10 NPC 포상룰 변경 2020-05-20 01:11:35 +09:00
Hide_D a8c849a305 암해부 정렬 버그 2020-05-19 16:53:20 +09:00
Hide_D ce0a941e2d 버그 수정 2020-05-19 10:07:24 +09:00
Hide_D af899b3ca8 수정시도2 2020-05-19 00:32:52 +09:00
Hide_D 742234c757 수정시도2 2020-05-19 00:32:40 +09:00
Hide_D 15b8140690 수정시도1 2020-05-19 00:30:55 +09:00
Hide_D 89cd881397 수정시도 1 2020-05-19 00:29:24 +09:00
Hide_D 75fd905829 버그 수정 2020-05-19 00:25:41 +09:00
Hide_D 5d77e227e9 버그 수정 2020-05-19 00:18:45 +09:00
Hide_D 1da46f1615 보궁기귀 전특 중 '통장'에 타 능력치 금지 추가 2020-05-19 00:08:50 +09:00
Hide_D 09bcf05b04 NPC 자원 기준 대폭 변경 2020-05-18 23:49:13 +09:00
Hide_D 5c590f4ad8 불가침 하나만 있어도 계략이 안들어가는 버그 수정 2020-05-18 23:25:53 +09:00
Hide_D 1feb66dc86 정착장려, 주민선정 색상 문제 2020-05-18 23:24:17 +09:00
Hide_D e83ebc2581 onCalcNationalIncome 버그 2020-05-18 23:17:16 +09:00
Hide_D c97889f249 계략 성공시 대미지 없는 문제 수정 2020-05-18 20:12:57 +09:00
Hide_D 5f1a8b406a 징병시 부상을 무시하는 버그 수정 2020-05-18 19:35:41 +09:00
Hide_D 3781d43fa8 로그에 도시 추가 2020-05-18 14:30:39 +09:00
Hide_D d950315e5a 버그 수정? 2020-05-18 09:55:00 +09:00
Hide_D fae10ae979 등용 UI 버그 수정 2020-05-17 20:07:09 +09:00
Hide_D c1cc453761 등용 UI 버그 수정 2020-05-17 20:05:47 +09:00
Hide_D 52aad2db2a 등용장 버그 수정
등용장 초반에도 보낼 수 있도록,
리스트에서 optgroup 작성 실수
2020-05-17 20:00:06 +09:00
Hide_D 777d2dae40 npc 정책 UI 수정 2020-05-17 19:48:20 +09:00
Hide_D 6c2388633c npc 정책 UI
?가 아니라 본체를 선택해도 보이도록
2020-05-17 19:45:18 +09:00
Hide_D 9ade8f69fd 버그 수정 2020-05-17 18:15:02 +09:00
Hide_D aded799b81 NPC 생성시 스케일러 제거 2020-05-17 13:47:28 +09:00
Hide_D 34bcd946e9 버그 수정 2020-05-17 03:03:04 +09:00
Hide_D 791db54746 npcMax 추가 감소 2020-05-16 21:12:09 +09:00
Hide_D 5c2d9dddb0 인탐, 의병모집 수정, npcMin, npcTotal 추가 2020-05-16 18:59:10 +09:00
Hide_D b4d5fbcb61 오호장군 표기기준 버그 수정 2020-05-16 18:16:52 +09:00
Hide_D 7a9ea55100 부대장후방발령버그 2020-05-16 16:24:45 +09:00
Hide_D b6eaf30829 출병 경로 설정 메시지 버그 수정 2020-05-16 14:14:13 +09:00
Hide_D ee778e6a09 인재탐색 연령버그 수정 2020-05-16 12:37:13 +09:00
Hide_D df5c4cefeb 버그 수정 2020-05-15 21:59:10 +09:00
Hide_D de8c0b6d09 수치 버그 수정 2020-05-15 21:51:29 +09:00
Hide_D 86dcf290a6 초토화 배율 변경 2020-05-15 21:50:11 +09:00
Hide_D cd9bfba7c6 초토화에 전 장수 배신 1호 추가, 반환 금액 입력 2020-05-15 21:25:01 +09:00
Hide_D aa5b8740fd 한계징병 2020-05-15 12:36:01 +09:00
Hide_D 869a31abf0 npc 조작 권한 안내 2020-05-15 00:38:26 +09:00
Hide_D f8fa10389a 애니 집결 수정 2020-05-15 00:30:14 +09:00
Hide_D 553efb890e 베팅장 수리 2020-05-15 00:23:10 +09:00
Hide_D 4b276370dc 헌납 버그 수정 2020-05-14 23:54:02 +09:00
Hide_D 2d739a956d 거래장 버그 수정 2020-05-14 23:47:08 +09:00
Hide_D 66dbc0366c 유니크템 습득 확률 버그 2020-05-14 22:05:47 +09:00
Hide_D 553ee02387 NPC 정책 설명 추가, 부대구조 추가, 포상/몰수량 조절 2020-05-14 02:04:28 +09:00
Hide_D 8e5c65f03b 조언자 포함 2020-05-13 02:28:35 +09:00
Hide_D 2bb8f969dc 외교권자만 수정 가능하도록 변경 2020-05-13 02:28:14 +09:00
Hide_D e46f5ea1bf 긴천시 쌀이 250만 생기니 500으로 증량 2020-05-13 02:22:58 +09:00
Hide_D 6549c5d1a0 버그 수정 2020-05-13 02:13:58 +09:00
Hide_D 1710dc9c72 코드 버그 수정 2020-05-13 02:11:25 +09:00
Hide_D 1e963ee1d8 정책 반영 2020-05-13 01:56:08 +09:00
Hide_D a133dfc722 입력창 준비 2020-05-13 00:45:38 +09:00
Hide_D 42c3c6ff46 npc_control form 2020-05-12 03:20:20 +09:00
Hide_D a62cd40fc0 첩보 버그 수정 2020-05-11 02:23:27 +09:00
Hide_D b0dcf14d96 응답시 새로고침, 등용수락 안되는 버그 수정 2020-05-11 02:14:33 +09:00
Hide_D 780169962d 등용장 버그 2020-05-11 01:53:15 +09:00
Hide_D 99d6c8c879 이동시 사기 하락 2020-05-11 01:38:47 +09:00
Hide_D ed6d19e8ab 버그 수정 2020-05-11 01:37:37 +09:00
Hide_D c02581978d 출병 에러 로그 수정 2020-05-11 01:24:34 +09:00
Hide_D 1feb732ebc 출병 어택땅시 아국 때리는 버그 수정 2020-05-11 01:21:46 +09:00
Hide_D 1029acab75 금쌀 구매 관련 임시 수정 2020-05-11 01:16:27 +09:00
Hide_D db00b65e3c 이전 로그 보기 추가 2020-05-11 01:05:55 +09:00
Hide_D 10533dcba2 테스트용 치트템 추가 2020-05-10 22:24:20 +09:00
Hide_D 773ae2bfe3 history 간소화 2020-05-10 15:06:51 +09:00
Hide_D fd4d10e6e7 보상 기준 변경, 버그 수정 2020-05-10 04:50:10 +09:00
Hide_D 14e267b4b0 인탐 확률 2020-05-10 04:29:14 +09:00
Hide_D 60d04b1bdf 발령을 위해 수정 2020-05-10 04:18:12 +09:00
Hide_D bebe535d94 $connect 잘 가 2020-05-10 03:39:02 +09:00
Hide_D d7d084b57a 같은 장수 같은 관직 임명시 버그 2020-05-10 03:26:25 +09:00
Hide_D 265200b5bc 약간의 쿼리 최적화 2020-05-10 02:18:44 +09:00
Hide_D 3b60d9ba77 점령->멸망 순서 정정 2020-05-10 02:15:56 +09:00
Hide_D 3baf761b3b 중원 정보 재작성 2020-05-10 02:12:25 +09:00
Hide_D 6623e5cb2d $connect 박멸중. 2020-05-10 01:15:25 +09:00
Hide_D 13f5cb1539 접속자수 계산 코드 수정 2020-05-09 23:46:43 +09:00
Hide_D 6e19722742 getVar('npc') -> getNPCType() 2020-05-09 23:18:47 +09:00
Hide_D d083dc36b2 장수 수 적용 관련 변경 2020-05-09 23:09:36 +09:00
Hide_D 8eb2380542 소소한 설문 결과 수정 2020-05-09 17:55:07 +09:00
Hide_D aac7391d28 토너먼트 우승 처리 버그 수정 2020-05-09 17:52:06 +09:00
Hide_D 691ac56723 핵심 디버그 코드 제외 제거 2020-05-09 17:47:51 +09:00
Hide_D 009e310a75 pushGlobalHistory 해제 2020-05-09 17:41:24 +09:00
Hide_D 90cb9d58a4 내무부 국력순 정렬 2020-05-09 17:22:35 +09:00
Hide_D 7501570cea 포상 기준 변경 2020-05-09 17:16:21 +09:00
Hide_D c5486f3e77 버그 수정 2020-05-09 17:00:36 +09:00
Hide_D dbf376d400 디버그 코드 추가 2020-05-09 16:50:53 +09:00
Hide_D 2da6108d19 징병 버그 1차 수정 2020-05-09 15:54:02 +09:00
Hide_D 4f3c2e8adc m장 의병장 스탯 버그 수정 2020-05-09 15:34:32 +09:00
Hide_D ea9a0130db 관직 임명을 3,6,9,12에 하도록 변경 2020-05-09 15:16:27 +09:00
Hide_D ff0fd9e20f 자가 발령 포상 몰수 2020-05-09 15:14:24 +09:00
Hide_D ad868f1df3 특기 초기화 추가 2020-05-09 13:14:11 +09:00
Hide_D 7104d983cd 설문조사시 아이템을 안 가진것으로 판정하는 버그 수정 2020-05-09 12:20:52 +09:00
Hide_D ff9db8ff5a 버그 수정 2020-05-08 22:09:56 +09:00
Hide_D 231df0b15b 버그 수정 2020-05-08 22:03:12 +09:00
Hide_D f978e528de 따라 임관 추가 2020-05-08 21:49:05 +09:00
Hide_D cc73c7c0b6 버그 수정 2020-05-08 21:18:58 +09:00
Hide_D 15701a4a90 즉시 사망 안되는 문제 해결 2020-05-08 21:14:33 +09:00
Hide_D f8d6204f0c TriggerCaller버그 수정 2020-05-08 20:52:16 +09:00
Hide_D c3ceef836a betray가 없는 버그 수정 2020-05-08 20:18:54 +09:00
Hide_D de44c416f6 예약턴 바로 받아오도록 수정 2020-05-08 20:14:20 +09:00
Hide_D 25d2824478 턴 실행 순서 조정 2020-05-08 03:31:17 +09:00
Hide_D 62872b34c2 자가 치료 문제 2020-05-08 03:17:30 +09:00
Hide_D ddbe6f4683 버그 수정 2020-05-08 03:13:20 +09:00
Hide_D d3922804eb 백동 재수정 2020-05-08 03:11:37 +09:00
Hide_D ce8fdb1595 백동 버그 수정 2020-05-08 03:09:20 +09:00
Hide_D b000ee7745 일부 수치 변경 2020-05-08 03:03:16 +09:00
Hide_D 69a7ef2318 관직 코드 버그 수정 2020-05-08 01:52:24 +09:00
Hide_D d6e09a6738 장수, 도시가 없을 경우 문제 수정 2020-05-08 01:22:27 +09:00
Hide_D 9d642bf941 장수 출력 일부 수정 2020-05-08 01:14:15 +09:00
Hide_D 1f4d543fe1 연감 저장방식 수정 2020-05-08 01:09:39 +09:00
Hide_D 93363ec2e3 통합, 항복 제거 2020-05-07 23:48:08 +09:00
Hide_D a5ec1c886a 버그 수정 2020-05-07 23:38:26 +09:00
Hide_D cb4d467f8e 천도시 인구의 비중을 조금 더 높게 2020-05-07 00:59:28 +09:00
Hide_D 3c9add272a 버그 수정 2020-05-07 00:48:13 +09:00
Hide_D 73a3cacfbd 버그 수정 2020-05-07 00:43:32 +09:00
Hide_D 6149a12180 버그 수정 2020-05-07 00:39:25 +09:00
Hide_D 790ef81101 run_daemon 버그 수정 2020-05-06 22:58:58 +09:00
Hide_D 5cc57110c1 버그 수정 2020-05-06 20:58:08 +09:00
Hide_D d54adf7ca9 버그 수정, 반복 도구 강화 2020-05-06 20:56:13 +09:00
Hide_D 195a590de3 버그 수정 2020-05-06 20:08:00 +09:00
Hide_D 5f8056fad6 버그 수정 2020-05-06 09:10:24 +09:00
Hide_D 87bfa7f0f3 버그 수정 2020-05-06 09:08:26 +09:00
Hide_D dc645ff08f 버그 수정 2020-05-06 09:06:47 +09:00
Hide_D c72e0d5ea3 버그 수정 2020-05-06 09:01:40 +09:00
Hide_D 97261e2ee9 접속장수 수 위치 이동 2020-05-06 02:25:58 +09:00
Hide_D 3cbc018f25 버그 수정 2020-05-06 02:13:40 +09:00
Hide_D e0c908d88f nation_env 수정, $connect 일부 제거 2020-05-06 01:53:00 +09:00
Hide_D 562c69307e 국방,임관권유문을 KVStorage로 분리 2020-05-05 19:55:59 +09:00
Hide_D 9a6b5d8e66 json_valid 설정. officer 설정 방식 변경 2020-05-05 19:17:27 +09:00
Hide_D 8f1845b334 국기 변경 수정, 아이템 보상 추가 2020-05-05 17:24:03 +09:00
Hide_D 5703db8c2b neutralize 일부 롤백
과거의 나는 다 계획이 있었구나.
2020-05-05 03:57:00 +09:00
Hide_D 42b59f0471 국호변경, 국기변경, string neutralize 2020-05-05 03:44:00 +09:00
Hide_D 76b8f8743d 버그 수정 2020-05-05 00:41:16 +09:00
Hide_D a3779ff1e1 빠진 코드 추가 2020-05-05 00:19:13 +09:00
Hide_D f93739c0e0 getReq변경, ajax인 경우 ajax요청 2020-05-05 00:19:01 +09:00
Hide_D 1d6bd5acf6 건국시 국가색 2020-05-04 21:02:46 +09:00
Hide_D 592903f3f8 testPermissionToReserve 수정 2020-05-04 20:52:33 +09:00
Hide_D c17f905ed2 MinCondition 조건 약화 2020-05-04 20:37:23 +09:00
Hide_D 44e1bb10c3 버그 수정 2020-05-04 20:01:23 +09:00
Hide_D 77248ad4d8 커맨드 유효성을 2개에서 3개구성으로 변경 2020-05-04 19:51:11 +09:00
Hide_D f25f5008f1 랜임모드시 임관출력 버그 수정 2020-05-04 07:26:53 +09:00
Hide_D 666da255b8 초토화 스택 버그 2020-05-04 06:25:28 +09:00
Hide_D 60f9d4b3a3 버그 수정 2020-05-04 06:24:01 +09:00
Hide_D 115c6dd178 버그 수정 2020-05-04 06:22:34 +09:00
Hide_D a1142100ab 버그 수정 2020-05-04 06:18:20 +09:00
Hide_D 6b2ebe2f0e 초토화 버그 수정 2020-05-04 06:17:13 +09:00
Hide_D 0ec8c74015 초토화 추가 2020-05-04 06:13:15 +09:00
Hide_D 8baa24a539 턴 계산 수정 2020-05-04 02:48:09 +09:00
Hide_D 6141a6b467 루드라사움 2020-05-04 02:04:34 +09:00
Hide_D 02f8dd928a update server 반영 2020-05-04 01:42:20 +09:00
Hide_D 31baa7fa85 전략 구현 2020-05-03 17:30:43 +09:00
Hide_D 207758482f 숙련전환 추가 2020-05-03 04:09:44 +09:00
Hide_D 0293e3a40a 토너먼트 버그 수정 2020-05-03 03:36:21 +09:00
Hide_D 5445be2056 불가침파기제의 추가 2020-05-03 01:33:52 +09:00
Hide_D ce5ad89d5e 불가침, 종전 메시지 2020-05-03 00:31:04 +09:00
Hide_D 83e8cfc2cc 버그 수정 2020-05-02 17:52:08 +09:00
Hide_D 44d9818e97 명전 살상률 수정 2020-05-02 17:29:20 +09:00
Hide_D ce4bece9ed 토너먼트 나눗셈 버그 수정 2020-05-02 16:20:36 +09:00
Hide_D 18e2323cf4 phan 처리 2020-05-02 12:01:54 +09:00
Hide_D 8ebd6df41a 버그 수정 2020-05-02 02:25:45 +09:00
Hide_D c30dd01377 장수 등록 수정 2020-05-02 02:15:59 +09:00
Hide_D e84dc0120f 색상 2020-05-02 02:14:48 +09:00
Hide_D 47ea0cd282 강조 수정 2020-05-02 02:13:18 +09:00
Hide_D e928b19b47 표시 2020-05-02 02:12:23 +09:00
Hide_D 3f42024ffd raise event 등록 CreateManyNPC 추가 2020-05-02 02:09:21 +09:00
Hide_D 0d1c168cbe 버그 수정 2020-05-02 01:16:09 +09:00
Hide_D 3e32904c4b 버그 수정 2020-05-02 01:15:52 +09:00
Hide_D 1c4697c2eb 버그 수정 2020-05-02 01:09:41 +09:00
Hide_D 0cb73199b8 토너먼트 무명장수 코드 수정 2020-05-02 00:36:14 +09:00
Hide_D 8cc406260d 토너먼트 롤백 2020-05-01 23:41:41 +09:00
Hide_D 9a6f9f0a5e 버그 수정 2020-05-01 21:59:53 +09:00
Hide_D ee9483a291 지급률 수정 2020-05-01 18:26:49 +09:00
Hide_D c8d2050c7a 코드 수정 2020-05-01 18:24:05 +09:00
Hide_D ef5dd47604 phan 1차 2020-05-01 17:33:14 +09:00
Hide_D f7a123c10b 메시지 컬러 수정 2020-05-01 16:09:03 +09:00
Hide_D 34fb3d9cd9 선양 버그 수정.. 2020-05-01 16:02:36 +09:00
Hide_D d712d53020 버그 수정 2020-05-01 15:28:00 +09:00
Hide_D ac6b2ef4b4 선양 코드 수정 2020-05-01 15:27:42 +09:00
Hide_D 9fd1f620d3 phan 설치 2020-05-01 15:26:54 +09:00
Hide_D 6de1a523bc 버그 수정 2020-05-01 03:36:17 +09:00
Hide_D 37bface3a7 None 처리 2020-05-01 03:27:43 +09:00
Hide_D 3e0a8618fd 징병 버그 다시 수정 ㅜㅜ 2020-04-30 19:58:17 +09:00
Hide_D 5d15141ae9 징병 입력 버그 수정 2020-04-30 19:56:38 +09:00
Hide_D 908863c076 버그 수정 2020-04-30 19:29:39 +09:00
Hide_D 628530dcff 저격 설명 수정 2020-04-30 17:08:55 +09:00
Hide_D ff36369e57 전멸시마다 저격 가능 2020-04-30 17:08:34 +09:00
Hide_D 366cba2102 버그 수정 2020-04-30 16:47:11 +09:00
Hide_D 39ea45eb51 저격 버그 수정 2020-04-30 16:02:46 +09:00
Hide_D 07a1a3b469 부대후방발령 버그 수정 2020-04-30 13:44:42 +09:00
Hide_D b888be9dad 부대유저장 후방발령 버그 2020-04-30 13:40:55 +09:00
Hide_D c2ed6b8b08 병종 이미지경로 변경 2020-04-30 06:31:12 +09:00
Hide_D 90de11f4c9 내정을 조금 더 고려함 2020-04-30 05:58:44 +09:00
Hide_D 083f26f3c4 디버그 코드 제거 2020-04-30 05:42:11 +09:00
Hide_D 4283d94edc AI 천도 안하는 버그 수정 2020-04-30 05:41:42 +09:00
Hide_D 46dece1b50 저격 버그 수정, 필살 강화 2020-04-30 05:07:52 +09:00
Hide_D 15e1ba7c05 살상률 표기 버그 수정 2020-04-30 04:34:51 +09:00
Hide_D 9ea1b15753 견고 버그 수정, 저격 상향 2020-04-30 04:32:35 +09:00
Hide_D 07e186bc5f 증축,감축,천도 버그 2020-04-30 04:03:43 +09:00
Hide_D 1bb5525c84 천도 버그 수정 2020-04-30 03:16:16 +09:00
Hide_D b0f47d70f1 징병 로직 일부 수정 2020-04-29 00:28:27 +09:00
Hide_D 8e4ee05bc1 출병 기준 수정 2020-04-28 04:02:14 +09:00
Hide_D 51b04b68de 랜덤 성격 불가 수정 2020-04-28 02:18:02 +09:00
Hide_D 6ec86fba1c 방랑군 warning 2020-04-28 02:14:10 +09:00
Hide_D e14a4382e5 디버그 로그 제거 2020-04-28 02:11:25 +09:00
Hide_D a7ef197510 숙련 버그 수정 2020-04-28 02:02:28 +09:00
Hide_D 12f75688ff 버그 수정 2020-04-28 01:50:25 +09:00
Hide_D a1fd1acb86 버그 수정 2020-04-28 01:37:52 +09:00
Hide_D d521bcede7 버그 수정 2020-04-28 01:09:07 +09:00
Hide_D 46eaa35718 버그 수정 2020-04-27 14:22:07 +09:00
Hide_D 2d905f9862 버그 수정 2020-04-27 14:12:51 +09:00
Hide_D 6ab2f99182 버그 테스트 2020-04-27 14:09:23 +09:00
Hide_D 324b2f524c 선정 열심히 2020-04-27 13:03:12 +09:00
Hide_D 64973e46dd 기술연구 우선순위 낮춤 2020-04-27 12:54:16 +09:00
Hide_D 1980ef8e33 내정 시도율 변경 2020-04-27 03:09:05 +09:00
Hide_D 3852f644b8 재야 부대장 사망 2020-04-27 02:53:13 +09:00
Hide_D dc780bd5fe 디버그 코드 임시 제거 2020-04-27 02:42:10 +09:00
Hide_D 11057154a7 수치 수정 2020-04-27 02:39:26 +09:00
Hide_D 215796bcaf 버그 수정 2020-04-27 02:37:11 +09:00
Hide_D cc70cb44ab 부대장 동작 관련 수정 2020-04-27 02:30:52 +09:00
Hide_D b9833c49d1 버그 수정 2020-04-27 02:21:11 +09:00
Hide_D 685461b70f 버그 수정 2020-04-27 02:18:42 +09:00
Hide_D 227b0a08ed 버그 수정 2020-04-27 02:07:34 +09:00
Hide_D 2c45d38a66 버그 수정 2020-04-27 00:30:48 +09:00
Hide_D c2364e3508 스킬 안 쓰는 버그 해결 2020-04-26 23:52:17 +09:00
Hide_D 5aea034a17 특기 획득 구조 변경 2020-04-26 22:31:49 +09:00
Hide_D 73aa2bd158 관직 임명 보정 2020-04-26 04:48:31 +09:00
Hide_D 79b3e6882a 버그 수정 2020-04-26 04:08:47 +09:00
Hide_D 8208a3c3e3 버그 수정 2020-04-26 04:02:16 +09:00
Hide_D 71e52e0b65 버그 수정 2020-04-26 04:00:06 +09:00
Hide_D 79919802c9 버그 수정 2020-04-26 03:45:19 +09:00
Hide_D 5ac4fcc4fc 버그 수정 2020-04-26 03:36:40 +09:00
Hide_D 902b22afac 버그 수정 2020-04-26 03:23:32 +09:00
Hide_D f33c293b1d 선전포고 최종 수정 2020-04-26 00:15:30 +09:00
Hide_D 86ae97e63c reqGold 수정 2020-04-25 23:57:31 +09:00
Hide_D 116aa5a508 수정 2020-04-25 23:54:40 +09:00
Hide_D 9b4bdc8e33 디버그 수정2 2020-04-25 23:53:19 +09:00
Hide_D 5cc2d74128 디버그 코드 2020-04-25 23:51:10 +09:00
Hide_D 22938a9d90 버그 수정 2020-04-25 23:39:42 +09:00
Hide_D 38020740d8 의병모집 버그 수정 2020-04-25 23:22:51 +09:00
Hide_D 1e5ad5ad09 의병 버그? 2020-04-25 23:18:32 +09:00
Hide_D 9382ad5809 선포 확률 추가 수정 2020-04-25 23:15:26 +09:00
Hide_D 8357180b78 선포 기준 변경2 2020-04-25 22:56:13 +09:00
Hide_D 0e0ee29cb6 선포 기준 변경 2020-04-25 22:37:51 +09:00
Hide_D c347ee1974 버그 수정 2020-04-25 21:45:41 +09:00
Hide_D a0bc9c996d 버그 수정 2020-04-25 20:59:13 +09:00
Hide_D 0ff098c2dd 버그 수정 2020-04-25 20:47:11 +09:00
Hide_D bf651ecad2 내정장 포상금 설정 2020-04-25 07:35:04 +09:00
Hide_D b516b704bb 선전포고 대상이 이상한 버그 수정 2020-04-25 07:02:13 +09:00
Hide_D 7a051d2587 지급률, 선포기준 수정 2020-04-25 06:43:45 +09:00
Hide_D d9dbedfded 일부 설정값 수정 2020-04-25 06:30:01 +09:00
Hide_D 1f0590eff5 버그 수정 2020-04-25 06:10:57 +09:00
Hide_D 3b0b0e1cd5 군량매매 버그 수정 2020-04-25 05:28:43 +09:00
Hide_D 9280cc841c 버그 수정 2020-04-25 05:09:00 +09:00
Hide_D 57591444a9 버그 수정 2020-04-25 04:55:59 +09:00
Hide_D 704307c062 버그 수정 2020-04-25 04:47:58 +09:00
Hide_D 4bde1ba9f3 버그 수정 2020-04-25 04:33:53 +09:00
Hide_D 4524de492d 버그 수정 2020-04-24 03:01:26 +09:00
Hide_D 1998d80162 버그 수정 2020-04-24 02:56:09 +09:00
Hide_D 8fb8e6f75e 버그 수정 2020-04-24 02:24:15 +09:00
Hide_D 2455b14cc0 버그 수정 2020-04-24 02:04:41 +09:00
Hide_D ef3e94edd3 버그 수정 2020-04-24 01:51:15 +09:00
Hide_D cf06d79e8d 버그 수정 2020-04-24 01:32:58 +09:00
Hide_D b1ad327d16 버그 수정 2020-04-24 01:28:41 +09:00
Hide_D 223eaf7ee8 버그 수정 2020-04-24 01:19:02 +09:00
Hide_D b7ed51ed49 버그 수정 2020-04-24 01:09:49 +09:00
Hide_D 7805c4eee6 버그 수정 2020-04-24 00:44:31 +09:00
Hide_D 5176d9a97d 버그 수정 2020-04-23 01:11:40 +09:00
Hide_D 225199f264 디버그 코드 제거 2020-04-23 00:44:57 +09:00
Hide_D 70703e6952 버그 수정 2020-04-23 00:36:45 +09:00
Hide_D c9ff23f243 버그 수정 2020-04-23 00:11:39 +09:00
Hide_D 127cbf1509 버그 수정 2020-04-22 23:55:13 +09:00
Hide_D 3de14c7c4c 버그 수정 2020-04-22 23:36:21 +09:00
Hide_D 41ec5f262f 버그 수정 2020-04-22 23:35:06 +09:00
Hide_D 773d772f8e 버그 수정 2020-04-22 23:26:28 +09:00
Hide_D 8f700af029 버그 수정 2020-04-22 23:22:39 +09:00
Hide_D 0360bd168c 버그 수정 2020-04-22 23:18:50 +09:00
Hide_D 8f438f95d0 버그 수정 2020-04-22 03:18:01 +09:00
Hide_D 0b825f58cf 버그 수정 2020-04-22 03:05:05 +09:00
Hide_D 5893d853aa 버그 수정 2020-04-22 02:31:53 +09:00
Hide_D cf7a4a82f3 버그 수정 2020-04-22 02:01:16 +09:00
Hide_D 3c7bee32f8 버그 수정 2020-04-21 02:06:03 +09:00
Hide_D 6b9157f1d4 range 버그 수정 2020-04-21 01:21:10 +09:00
Hide_D e229b207c1 버그 수정 2020-04-21 01:19:24 +09:00
Hide_D 6af3c1d523 명장일람 버그 수정 2020-04-20 23:04:03 +09:00
Hide_D 51f24748a9 디버그 코드 추가, 버그 수정 2020-04-20 03:08:08 +09:00
Hide_D 3a44782b05 버그 수정 2020-04-20 00:47:35 +09:00
Hide_D 8d41dead5d 버그 수정 2020-04-19 18:48:56 +09:00
Hide_D c611e98cf7 버그 수정 2020-04-19 06:18:35 +09:00
Hide_D b98df58c76 버그 수정 2020-04-19 05:38:25 +09:00
Hide_D feee4b2022 버그 수정 2020-04-18 22:49:50 +09:00
Hide_D 0dc061611f db table 구조 일부 수정 2020-04-18 14:52:16 +09:00
Hide_D 27aa1c1973 history 관련 처리 변경 2020-04-18 14:36:05 +09:00
Hide_D c1bf3a773f history column을 테이블로 분리 2020-04-18 14:07:07 +09:00
Hide_D 57ba12834a 오타 수정 2020-04-18 03:59:16 +09:00
Hide_D 16f2c9fb42 city의 officer를 general로 이동 2020-04-18 03:57:58 +09:00
Hide_D b8c28e0a89 $_POST 삭제 2020-04-17 01:30:05 +09:00
Hide_D 5e2f722e1c 투표 코드 수정 2020-04-17 01:23:52 +09:00
Hide_D df67c0540c 인사부 일부 코드 수정 2020-04-17 01:15:19 +09:00
Hide_D f26fb3cdf8 통합 세력장수,암행부 query 2020-04-16 02:37:36 +09:00
Hide_D 083dcb3647 experience, dedication 변경
expereince, dedication 변경을 add 함수로 변경
경험치,계급 변경을 '즉시' 하도록 변경(남은 부분 있음)
관직 임명을 c에서 j로 변경
2020-04-15 05:34:27 +09:00
Hide_D a01fa3bc54 name2 -> owner_name (or orderName) 2020-04-15 02:44:06 +09:00
Hide_D a53a69d374 부대 버그 2020-04-15 02:14:49 +09:00
Hide_D 98e0a48226 부대 편성 버그 수정 2020-04-15 02:13:58 +09:00
Hide_D 2c8e33b643 부대 코드 변경 2020-04-15 02:13:16 +09:00
Hide_D 224a9e5cd8 버그 수정 2020-04-14 02:38:39 +09:00
Hide_D 4de249efa0 커맨드 활성화 2020-04-14 02:38:05 +09:00
Hide_D cbe341ff2c 증축, 천도, 감축 2020-04-14 02:36:20 +09:00
Hide_D a4595a6592 Merge branch 'ng_turn' of ssh://storage.hided.net:2525/devsam/core into ng_turn 2020-04-14 01:49:46 +09:00
Hide_D b1c458bdc4 천도 추가 2020-04-14 01:49:40 +09:00
Hide_D 3fd747febf AI 구현 2020-04-13 02:45:24 +09:00
Hide_D 598f12a90a AI 구현중 2020-04-12 02:46:51 +09:00
Hide_D bd88cbfe64 AI 구현중 2020-04-10 03:19:56 +09:00
Hide_D 5a2c21f956 AI 커맨드 구현중 2020-04-09 03:13:14 +09:00
Hide_D 09d28eff90 Util::range 추가 2020-04-09 02:07:50 +09:00
Hide_D d540cd0a77 AI 구현중 2020-04-08 03:30:40 +09:00
Hide_D 4e5caa7b8b AI턴 추가 구현 2020-04-07 02:55:59 +09:00
Hide_D 968655c9cd NPC 자동 턴 추가 구현 2020-04-06 03:01:20 +09:00
Hide_D 1470793b52 AI 작업중 2020-04-04 04:52:18 +09:00
Hide_D e99832e2f0 병종 코드, 숙련 코드 재설정
병종 상성 지정시 병종 단위가 아니라 병종 코드 자체로 지정 가능
2020-04-03 23:54:26 +09:00
Hide_D 327f85fdcc Merge branch 'ng_turn' of ssh://storage.hided.net:2525/devsam/core into ng_turn 2020-04-01 20:24:51 +09:00
Hide_D 3b57965f8b join 버그 수정? 2020-04-01 20:24:43 +09:00
Hide_D baf697a134 AI 천도 알고리즘 2020-04-01 03:30:10 +09:00
Hide_D 8c900e5ca0 AI 뼈대 다시 잡는중 2020-03-31 02:50:07 +09:00
Hide_D e6c37c0d1e 신규 AI 구현 준비 2020-03-31 02:05:04 +09:00
Hide_D b116741e25 토너먼트값, 전투, 계략값을 분리 2020-03-29 05:03:49 +09:00
Hide_D 0087d5784b 버그 수정 2020-03-28 19:56:11 +09:00
Hide_D 8f95d4b279 __dir__ -> __DIR__ 2020-03-28 19:48:09 +09:00
Hide_D baba2d34dd VAL2를 VAL_max로 변경 2020-03-28 19:43:40 +09:00
Hide_D 42e8f8f610 Array type arg js 처리 2020-03-25 02:56:45 +09:00
Hide_D b739bfa01e 금액 단위를 GameConst로 이동, 원조 추가
arg 목록으로 amountList 추가
2020-03-25 02:54:33 +09:00
Hide_D a68b9643fc dev에서 쉽게 확인가능한 코드 이전 2020-03-23 02:11:00 +09:00
Hide_D 8d87c9bb19 MyISAM to Aria 2020-03-23 00:24:17 +09:00
Hide_D 287dd241e7 dev 코드와 일치 2020-03-22 23:30:11 +09:00
Hide_D 287dfded0e dev와 composer 버전 일치 2020-03-22 23:22:50 +09:00
Hide_D db5892b983 의병모집 버그 수정 2020-03-22 04:20:21 +09:00
Hide_D 7c7caf98c1 의병모집 구현 2020-03-22 04:16:42 +09:00
Hide_D 869dd8d5a8 전략 DetailTitle/ isReservable 완화 2020-03-22 03:17:05 +09:00
Hide_D e5a4074c03 사령턴 커맨드 버그 수정 2020-03-22 02:47:44 +09:00
Hide_D 0ee8913199 피장파장 추가 2020-03-22 02:34:04 +09:00
Hide_D ef94478db8 버그 수정, 허보 구현 2020-03-21 20:17:39 +09:00
Hide_D bb65e2c5c1 백성동원, 버그 수정 2020-03-21 19:13:13 +09:00
Hide_D 6cd5cb7ed0 오타 수정 2020-03-21 17:36:53 +09:00
Hide_D 3c0bb7ca41 수몰 구현, createGeneralObjFromDB 최적화 2020-03-21 17:36:36 +09:00
Hide_D 48d5c2c772 등용수락에서 destNationID 빠진것 추가 2020-03-13 01:45:42 +09:00
Hide_D 9e7b8bb6b2 등용 수락 변경, Aux 처리 추가
nations->aux.joinedNations
dummyGeneral에 exp,ded 추가
scheme에서 nations 제거
2020-03-13 01:44:18 +09:00
Hide_D 553e0fdbe3 필사즉생 디버그 수정 2020-03-12 22:02:50 +09:00
Hide_D 38bef005f7 필사즉생 구현 2020-03-12 21:57:57 +09:00
Hide_D 1bc468095c 불가침 메시지를 좀더 명확히 2020-03-12 15:59:36 +09:00
Hide_D 23089d2288 불가침 외교 커맨드 부활. 버그 수정 2020-03-12 15:58:14 +09:00
Hide_D 0fe8b3f671 Constraint 변경 내용 버그 수정 2020-03-11 22:17:26 +09:00
Hide_D 61c1221b5e Contraint Reason 추가 2020-03-11 21:49:41 +09:00
Hide_D 7fe04eee5a 지도 선택 살짝 수정 2020-03-11 21:38:49 +09:00
Hide_D 744c24b032 선전포고에 지도 추가 2020-03-11 18:10:41 +09:00
Hide_D 00d3105aad 선전포고 구현 2020-03-11 17:08:55 +09:00
Hide_D 42bb937e68 버그 수정
랜덤임관, 모반시도
2020-03-08 22:55:10 +09:00
Hide_D 86e58437aa 커맨드 brief 수정, 내무부 버그 수정 2020-03-08 20:01:49 +09:00
Hide_D 89a6769385 증여 버그 수정, 출병을 현 코드에 맞게 수정 2020-03-08 19:30:49 +09:00
Hide_D d7989ab34d 사령부 밀기 당기기 추가, 기존 코드 삭제 2020-03-08 13:26:56 +09:00
Hide_D d291d38b38 버그 수정, 커맨드 사이즈 자동 반영 2020-03-08 13:18:54 +09:00
Hide_D 6722de4173 아이템 구매 버그 수정, 아이템 호칭문제 수정 2020-03-08 12:03:23 +09:00
Hide_D c63085be15 버그 수정 2020-03-08 09:57:32 +09:00
Hide_D 5a1003ad71 arg 경고 회피, 사령부 버그 수정, 턴반복 추가 2020-03-07 23:12:59 +09:00
Hide_D 29c7e3696a 발령,몰수,포상 활성화, 사령턴 턴 입력 활성화 2020-03-07 19:52:33 +09:00
Hide_D 28c3ebb5f9 버그 수정, 사령부 UI 복구 2020-03-07 18:04:23 +09:00
Hide_D 573d313cc8 버그 수정.. 2020-03-06 20:01:11 +09:00
Hide_D 33c7b4c440 버그 수정 2020-03-05 23:53:59 +09:00
Hide_D 4abf43e0ca 징병 폼 완료 2020-03-05 21:53:37 +09:00
Hide_D 12529b2c41 징병 구현중 2019-11-27 13:54:19 +09:00
Hide_D 144b0c651c 버그 수정2 2019-10-10 02:42:49 +09:00
Hide_D a4f7514220 버그 수정 2019-10-10 02:39:25 +09:00
Hide_D 22edba6c43 func_time_event 재작성, 수입관련 코드 수정 2019-10-10 02:36:42 +09:00
Hide_D 987450d880 버그 수정. getStatValue 성능 향상 2019-10-09 15:57:18 +09:00
Hide_D 107263d061 코드 일부 수정 2019-10-09 14:43:26 +09:00
Hide_D f667eb1500 round 문제 수정 2019-10-09 12:36:06 +09:00
Hide_D 50d7fa684f 버그 수정 2019-10-09 12:12:23 +09:00
Hide_D 09ae205e37 isConsumableNow 버그 수정 2019-10-09 11:38:28 +09:00
Hide_D 68aeafaa0b 아이템 관련 버그 수정 2019-10-09 11:34:56 +09:00
Hide_D cb1ac4541b 버그 수정 2019-10-09 03:19:50 +09:00
Hide_D 073759612a 버그 수정 2019-10-08 02:29:07 +09:00
Hide_D 2ea726518e 구 코드 삭제 2019-10-07 02:06:02 +09:00
Hide_D 7e5a1d385c 장수 커맨드 설명 추가 2019-10-07 00:38:52 +09:00
Hide_D 1a9168e824 소비 금액 반올림 2019-10-07 00:17:17 +09:00
Hide_D 3c247e2156 커맨드 상세 입력 페이지 초기 구현 2019-10-07 00:09:13 +09:00
Hide_D 6e80561f32 기본 커맨드 입력 가능하도록 구현 2019-10-06 22:39:13 +09:00
Hide_D fb752f6ade 오타 수정 2019-10-06 19:26:41 +09:00
Hide_D 497f848b70 NPC 수뇌 임명 버그 수정 2019-10-06 19:26:08 +09:00
Hide_D 8ce33b10a3 디버깅용 변경 2019-10-06 19:06:49 +09:00
Hide_D e77d40c4c2 턴 표기 '드디어' 추가 2019-10-06 19:01:46 +09:00
Hide_D 323cf47417 버그 수정 2019-10-06 16:14:41 +09:00
Hide_D 026d72d68a 세력 일람 쿼리 최적화 2019-10-06 16:05:20 +09:00
Hide_D 617ca22f2d 버그 수정... 2019-10-06 14:49:41 +09:00
Hide_D 46acfe9470 전투 버그 수정 중 2019-10-06 02:49:54 +09:00
Hide_D 5df66ede36 장수 정보 버그 수정 2019-10-06 02:02:31 +09:00
Hide_D 9b4d512429 기존 파일 제거 2019-10-06 01:46:38 +09:00
Hide_D c48b0c17ba 턴 버그 수정, 아이템 관련 구 코드 수정 2019-10-06 01:45:50 +09:00
Hide_D 969306822f turntime 관련 조정중 2019-10-05 10:52:31 +09:00
Hide_D 01d3e6c03d 버그 수정 2019-10-05 03:11:44 +09:00
Hide_D 61da4e56c1 gen123 => officer432 2019-10-05 02:45:20 +09:00
Hide_D 614cd1c96f 버그 수정 2019-10-05 01:19:58 +09:00
Hide_D 53a3767829 iAction,name,info, buildiActionCache, mode, myInfo 2019-10-05 01:17:43 +09:00
Hide_D 5eec7f9bbc 일부 버그 수정 old 파일 삭제 2019-10-04 23:03:19 +09:00
Hide_D 6f722f9ead weap -> weapon 2019-10-04 18:15:12 +09:00
Hide_D 4c3cc8547c leader->leadership, power->strength 2019-10-04 18:07:42 +09:00
Hide_D 2ff74a2b68 버그 수정 2019-10-04 16:33:00 +09:00
Hide_D 793ee2acbe 아이템 속성이 동적으로 변경되어 static 제거 2019-10-04 14:30:45 +09:00
Hide_D 7abcbcda15 lbonus를TriggerGeneralLevel, calcLeadershipBonus로통합 2019-10-04 13:02:16 +09:00
Hide_D 674f3b95c5 stat 관련 데이터 수정 2019-10-04 12:50:48 +09:00
Hide_D 42eb107ecb season merge 2019-10-04 11:44:03 +09:00
Hide_D 107f28ca93 season 반영 안된것 마저 추가 2019-10-04 11:39:08 +09:00
Hide_D b180fa901d 94f3906949...06f86c6c27 반영, 시즌 값, 부대정보, 왕조일람 2019-07-20 15:48:30 +09:00
Hide_D 72682a3dd1 훈련, 사기템 효과 두배 2019-07-20 15:32:01 +09:00
Hide_D 549114ae1f c0a30a2640...ff00990520 까지 반영 2019-07-20 15:29:47 +09:00
Hide_D ead0e14350 장수 생성 시 본닉 항상 추가. 사망시 본닉 출력 2019-07-20 15:22:51 +09:00
Hide_D 1a69ee2b2c 버그 수정 2019-06-17 03:13:05 +09:00
Hide_D fe32958d59 장비매매버그 수정 2019-06-17 03:11:33 +09:00
Hide_D a0215586f2 장비매매버그 수정 2019-06-17 03:10:41 +09:00
Hide_D d18f795202 커맨드 선택 form 구현 중 2019-06-17 03:08:05 +09:00
Hide_D 125d33d6b7 아이템 관련 속성 일부 변경, 유니크 획득 코드를 수정 2019-06-17 02:47:00 +09:00
Hide_D 378d2e043f 이동 초기 구현 2019-06-16 21:41:31 +09:00
Hide_D 1d4a2c5863 버그 수정, 턴 입력 form 준비 2019-06-16 21:07:08 +09:00
Hide_D 109d6300ab js, css 출력을 위한 코드 추가 2019-06-16 17:07:43 +09:00
Hide_D 9483035056 도시 목록 임시 구현 2019-06-16 03:47:58 +09:00
Hide_D f69de0db21 스1 시나리오 업데이트 2019-06-14 23:56:06 +09:00
Hide_D 2fa5c1a67c 버그 수정 2019-06-13 02:43:25 +09:00
Hide_D cbe47aea1b 아이템 int->string 반영 2019-06-10 02:20:48 +09:00
Hide_D f40c9199fc 쌀 거래만 가능하므로 아이템 거래는 삭제 2019-06-09 22:56:51 +09:00
Hide_D 890ecf5846 아이템 코드를 String으로 바꾸었으므로 연동 대상 또한 변경 2019-06-09 22:50:39 +09:00
Hide_D 23d4136096 버그 수정 2019-06-08 04:56:32 +09:00
Hide_D 97d5f68072 TriggerCaller에 약간의 유연성 추가 2019-06-08 03:04:31 +09:00
Hide_D 53cebd7d2f 구 코드 수정 2019-06-08 03:03:11 +09:00
Hide_D 21d06c00aa 전특 구현 완료 2019-06-08 02:56:15 +09:00
Hide_D 95487bba48 BaseWarUnitTrigger, TriggerCaller 구조 변경, 클래스 반영 2019-06-06 22:32:35 +09:00
Hide_D a544f4349f 회피시도 추가, spl_object_hash를 spl_object_id로 변경 2019-06-06 03:34:47 +09:00
Hide_D 22b57f39ef 전투 이벤트 갱신 2019-06-05 01:36:57 +09:00
Hide_D 4fdcc0221d 전투 스킬 세팅 중 2019-05-31 02:28:08 +09:00
Hide_D 2a78622529 서적 등록 2019-05-15 03:04:34 +09:00
Hide_D 21d21f4261 명마, 무기 타입 변경 2019-05-15 03:00:00 +09:00
Hide_D 7dd519565b 명마 등록 2019-05-15 02:29:21 +09:00
Hide_D 2e06b28e5a 아이템에 consumable 개념 추가, GameConstBase에 아이템 준비 2019-05-13 03:17:48 +09:00
Hide_D 85409263c8 아이템 전량 구현, 말, 무기, 책 준비 2019-05-13 02:44:01 +09:00
Hide_D 91b5a1e44a WarUnitTrigger 개편, 병종 Trigger 개념 추가, 저지, 성벽부상무효 2019-05-13 00:49:44 +09:00
Hide_D 08373b76a2 저격 다시 세팅, 아이템 namespace 버그 수정, 전투치료(의술) 구현 2019-05-12 21:03:21 +09:00
Hide_D 3386d2f637 가오픈 merge 2019-05-10 01:29:01 +09:00
Hide_D c047d23c69 서버의 오픈 시간을 기록했으므로 변경 2019-05-09 02:00:25 +09:00
Hide_D 31ec481d46 커맨드 창에서 가오픈 때문에 턴이 이상하게 보이는 버그 수정 2019-05-09 01:59:06 +09:00
Hide_D 6a1cb8c597 가오픈 일자 표시 2019-05-09 01:34:06 +09:00
Hide_D 653d1460a3 예약턴 초기 릴리즈 2019-05-09 01:28:49 +09:00
Hide_D ff5ab5ab1d 턴 시간 동작 안내 2019-05-05 20:14:53 +09:00
Hide_D af2eee17fe 동작 시간 베이스로 변경 2019-05-05 20:13:48 +09:00
Hide_D ae02bbcce7 devel merge 2019-05-05 17:58:27 +09:00
Hide_D 7d3ec1368f 빙의 선택 시 성격과 국가 표기 2019-05-04 20:41:27 +09:00
Hide_D 3267595bc5 entrance 띄어쓰기 장수 전콘 문제 수정 2019-05-04 20:28:41 +09:00
Hide_D 750788d300 빙의에 약간의 편의성 추가 2019-05-04 20:09:52 +09:00
Hide_D ff528cbbaf 장수 목록에 pagenation 추가 2019-05-04 20:01:17 +09:00
Hide_D 210f77c46e 장수 빙의에 장수 리스트 띄움 2019-05-04 19:46:55 +09:00
Hide_D d77ee9b638 디버그 코드 제거 2019-05-04 18:37:41 +09:00
Hide_D 2a5e73a48a 장수 일람 시간 문제 수정 2019-05-04 18:33:48 +09:00
Hide_D b3fb20df58 장수일람 API 생성 2019-05-04 18:33:09 +09:00
Hide_D 1d7bf20f96 서버 루트 js include 순서 변경 2019-05-04 17:08:36 +09:00
Hide_D 08ecd47cf0 서버 기간 표기 수정 2019-05-04 17:05:48 +09:00
Hide_D c14fcf29e8 서버가 열린 경우 서버가 열린 기간을 표기하도록 수정 2019-05-04 17:03:03 +09:00
Hide_D e7b526455c 서버 리셋 권한자는 서버 시작, 또는 천통시 닫을 수 있음 2019-05-04 16:38:44 +09:00
Hide_D 5c2b4f03f3 영릉 장사 구지도 복구 2019-05-04 16:18:53 +09:00
Hide_D 832750ec57 병종 전콘 문제 수정 2019-05-02 01:20:45 +09:00
Hide_D 8149df1e34 sidebar 다시 제거 2019-05-02 00:53:09 +09:00
Hide_D 3b60a5d3c4 chess 맵 테스트로 추가, 전차전 php 코드 버그 수정 2019-05-02 00:50:40 +09:00
Hide_D 14e074a64f 지도 등을 추가할 경우 css, js를 새로 설정하는 기능 추가 2019-05-02 00:50:24 +09:00
Hide_D b04f1643c9 충차전 기본 코드 추가 2019-05-01 14:55:42 +09:00
Hide_D 14904a2958 충차전 코드 준비 2019-05-01 14:41:06 +09:00
Hide_D d43ea9bedd 시간이 지날 수록 접경 수도 농상, 성수의 디버프가 생김 2019-05-01 03:08:46 +09:00
Hide_D d397cdf0f6 부대장 삭턴 계산 방식 일부 변경 2019-05-01 02:57:48 +09:00
Hide_D 93104a21f3 코드 버그 수정 2019-05-01 02:47:27 +09:00
Hide_D d3f36f9b71 유니크 획득시 골고루 획득하도록 변경 2019-05-01 02:42:23 +09:00
Hide_D fdb46534ab 도시 목록에도 전콘을 띄워줌 2019-05-01 02:33:49 +09:00
Hide_D ee2f6e9c13 스마트폰이더라도 neutralView(도시선택모드)에서는 두번선택 해제 2019-05-01 02:21:06 +09:00
Hide_D cc9706c413 m장 의병장 초 강화! 2019-05-01 02:06:51 +09:00
Hide_D 13d3db0516 로그인 버그 수정 2019-05-01 01:52:50 +09:00
Hide_D 2ee0ad157d 부대장 이름을 정렬하기에 편리하도록 수정 2019-05-01 01:51:49 +09:00
Hide_D 2dbbf052d2 에러 로그 강화 2019-04-30 23:20:39 +09:00
Hide_D 453f5681dd 수극을 통한 저격 예시 2019-04-29 02:04:45 +09:00
Hide_D afeaf01fdb 병종이 행동에 전투에 event로 개입 가능하도록 수정 중 2019-04-29 01:01:47 +09:00
Hide_D bbfe5c2ab0 processWar 입출력 부근을 General Object로 변경 2019-04-29 00:13:25 +09:00
Hide_D c8422421ab 부대 번호를 부대장 ID로 변경 2019-04-28 20:50:25 +09:00
Hide_D 477ec440bc WarUnit의 일부 요소를 General과 ActionSpecialWar 등으로 분리 2019-04-28 05:43:59 +09:00
Hide_D ef40f299ef 버그 수정, 구조 변경 2019-04-28 03:49:03 +09:00
Hide_D fe2a076558 버그 수정 2019-04-28 02:54:01 +09:00
Hide_D b32eb07d1e 버그 수정 2019-04-28 02:17:20 +09:00
Hide_D 723150b755 버그 수정 2019-04-28 01:54:44 +09:00
Hide_D d398f903f8 일부 수정. 버그 수정. 2019-04-28 00:18:36 +09:00
Hide_D 44142be28e 버그 수정 2019-04-24 02:47:50 +09:00
Hide_D 5de5a77902 버그 수정 2019-04-24 02:36:50 +09:00
Hide_D 5d1b39ca49 버그 수정 2019-04-24 01:17:21 +09:00
Hide_D d2cce02669 redirect 변경 2019-04-23 12:03:36 +09:00
Hide_D 05b5a33eee 갱신 되돌림.. 2019-04-23 11:05:09 +09:00
Hide_D 8f1884349a 갱신방식 변경 2019-04-23 11:01:42 +09:00
Hide_D 8ece1a3454 갱신 버튼 변경 2019-04-23 10:59:03 +09:00
Hide_D 3f2cf23f47 버그 수정 2019-04-21 22:29:08 +09:00
Hide_D 9268ca51da db schema에 not null. 2019-04-21 22:17:23 +09:00
Hide_D 5da29ba148 err_log 강화 2019-04-21 22:15:41 +09:00
Hide_D 0c64b506c2 버그 수정 2019-04-21 21:15:53 +09:00
Hide_D da5fc417c5 버그 수정 2019-04-21 16:57:05 +09:00
Hide_D 186df66e81 버그 수정 2019-04-21 16:27:57 +09:00
Hide_D f52865ce98 버그 수정 2019-04-21 16:06:27 +09:00
Hide_D 9ad8d70cf7 버그 수정 2019-04-21 15:41:02 +09:00
Hide_D 2765e1c923 부대장 숫자를 '능동적'으로 재 계산 2019-04-21 15:32:36 +09:00
Hide_D 44e0067e34 버그 수정 2019-04-21 12:52:57 +09:00
Hide_D 066e62c0aa 버그 수정 2019-04-21 12:11:01 +09:00
Hide_D 1a0e84e6d7 버그 수정 2019-04-21 11:43:23 +09:00
Hide_D 03510ee1e7 버그 수정 2019-04-21 04:53:14 +09:00
Hide_D cc1b61e522 TimeUtil 버그 수정 2019-04-21 03:31:23 +09:00
Hide_D af61d13bb3 버그 수정 2019-04-21 03:05:53 +09:00
Hide_D 3038e9309d 버그 수정 2019-04-21 03:04:08 +09:00
Hide_D 668206af1c 버그 수정 2019-04-21 02:55:32 +09:00
Hide_D a0a4e52fca 버그 수정 2019-04-21 02:53:27 +09:00
Hide_D 3064a13450 devel 반영 2019-04-21 02:42:43 +09:00
Hide_D df1221ba74 count를 써야할 자리에 MYDB_num_rows를 쓰는 코드 수정, 일부 정리 2019-04-21 02:34:22 +09:00
Hide_D 71ce5c4dcb 천통시 최소 명전 등록 가능 연도를 GameConst로 2019-04-21 02:30:12 +09:00
Hide_D e6e0a4bd7d $connect 쓰는 부분 일부 제거 2019-04-21 01:54:22 +09:00
Hide_D bda3cac24b 에러 반환 타입 수정 2019-04-21 01:47:01 +09:00
Hide_D d7522d0dc1 버그 수정 2019-04-21 01:38:17 +09:00
Hide_D ae3688577d 오타 수정 2019-04-20 02:54:24 +09:00
Hide_D 11077b1042 여백 주기 2019-04-11 19:53:27 +09:00
Hide_D 396db36829 서버별 아이콘 적용 가능 2019-04-11 19:50:59 +09:00
Hide_D f8f09a3654 tooltip 처리 방식을 지연 처리로 변경 2019-04-10 23:27:53 +09:00
Hide_D 7eb6f42bee 년, 월로 넘치더라도 그냥 자름 2019-04-08 01:56:57 +09:00
Hide_D 447efc2174 스타크래프트 1 프로게이대전 추가 2019-04-08 01:51:38 +09:00
Hide_D b809a577ff 인탐 조건에서 방랑군은 다시 불가능하게. 2019-04-08 01:45:05 +09:00
Hide_D 9d63453130 방랑군이거나, 국가의 인구가 다 차더라도 인구 탐색 가능 2019-04-08 01:43:01 +09:00
Hide_D 8dd55ae036 장수수 > 10, 집합장 제외 장수수 < 10일 때, 기술이 과도하게 오르는버그 수정 2019-04-08 01:33:49 +09:00
Hide_D 6250f2ab28 새 숙련도 공식 반영, 제곱식 기반에서 세제곱식 기반으로 2019-04-08 01:21:06 +09:00
Hide_D 59583d48d7 진유저무쌍 릴리즈 2019-04-07 23:55:44 +09:00
Hide_D b8daf9882b Merge commit 'f6eae2274f6d56403c0644829042ce4d72b80ec9' into ng_turn 2019-04-07 23:45:17 +09:00
Hide_D 587f2754d4 v0.10.1까지 merge 마저 반영 2019-04-07 23:36:09 +09:00
Hide_D b247af7af6 v0.10.1까지 merge 2019-04-07 23:35:54 +09:00
Hide_D 15facbc291 [881bf08aee]v.0.10.0 커밋까지 반영 2019-04-07 23:23:46 +09:00
Hide_D e919ddb83c devel 코드 merge 2019-04-07 22:58:44 +09:00
Hide_D 9dd7d96266 [f8bb7aaf30]ng_diplomacy 적용 2019-04-07 22:52:50 +09:00
Hide_D 7191a9273c Merge commit 'b6f76562e2c6999af16502d802bd523a8484e167' into ng_turn 2019-04-07 22:44:43 +09:00
Hide_D 3aefbf71a9 중첩된 내용 merge 2019-04-07 22:42:39 +09:00
Hide_D e5d544e583 이전 외교 메시지를 불러 올 수 있음 2019-04-07 22:31:08 +09:00
Hide_D d5a845c3e1 외교권자에게는 메시지를 보낼 수 없음 2019-04-07 22:30:00 +09:00
Hide_D cbe1248e0c 1차 버그 수정 2019-04-07 22:29:46 +09:00
Hide_D fec23b56eb DB 스키마 변경 2019-04-07 22:29:29 +09:00
Hide_D 8f3e6d8c77 중간반영 2019-04-07 22:28:57 +09:00
Hide_D 1649e5115d 외교부 틀 작성 2019-04-07 22:27:49 +09:00
Hide_D 509904b7a5 국메 처리 방식을 변경. 국가간 메시지는 외교권자만 가능 2019-04-07 22:27:14 +09:00
Hide_D 8d51b76ca2 외교메시지 수신 기준 변경중 2019-04-07 22:26:50 +09:00
Hide_D f5c833882d [5f0258022a]기존 회의실, 기밀실 코드 삭제 2019-04-07 22:20:25 +09:00
Hide_D 9989e76ef7 외교서신 응답 2019-04-07 22:17:46 +09:00
Hide_D 53e6c69b54 파일 명을 namespace를 고려하여 수정 2019-04-07 22:17:33 +09:00
Hide_D 9bf7b0184b 외교 서신 추가 기능 2019-04-07 22:17:13 +09:00
Hide_D ccec652adc 게시물 코드 2019-04-07 22:16:43 +09:00
Hide_D 23a5ce6874 게시판 글, 댓글 작성 초안 2019-04-07 22:16:19 +09:00
Hide_D 8027d4922b [b422cac734]권한 세팅 2019-04-07 22:15:53 +09:00
Hide_D 6dcafc3129 왕 무장 관직 순서 변경 2019-04-07 22:08:19 +09:00
Hide_D c99935bf2e 무관 최종 관직을 실제 삼국지 관직 순서에 맞게 변경 2019-04-07 22:05:33 +09:00
Hide_D 90d5ced632 [8d6c4ed713]시중->종사 2019-04-07 21:34:36 +09:00
Hide_D 11c9edaf98 [1ddce7ac2e]게시물 구조 설정 2019-04-07 21:33:09 +09:00
Hide_D 2ac53142b5 tui-editor와 새 게시판 준비 2019-04-07 21:31:28 +09:00
Hide_D 95a0b1d77e permission, penalty 대응 준비 2019-04-07 21:31:03 +09:00
Hide_D 694a68c7f8 [18d11b2c6a]장수 schema 수정 2019-04-07 21:30:24 +09:00
Hide_D 56b26822a2 [00bbf4eae2]버튼 이동 코드 정리 2019-04-07 21:28:45 +09:00
Hide_D 075904616a [3cf9d39cf2]DB 스키마 정리, diplomacy 테이블 정리, 코드 정리 2019-04-07 21:27:08 +09:00
Hide_D 8e0d3ec4d0 병합 충돌 오타 수정 2019-04-07 21:12:20 +09:00
Hide_D ef092bfefb [8ee2def02a]국법 기능 제거. 외교부를 위한 자리 추가 2019-04-07 21:11:46 +09:00
Hide_D b16dce7343 DB 스키마 준비 2019-04-07 21:08:38 +09:00
Hide_D cda257a971 [51e9de0e79]DB 스키마 준비 2019-04-07 21:08:28 +09:00
Hide_D 89dc1c45d7 걸그룹 전콘 문제 일부 수정 2019-04-07 21:06:47 +09:00
Hide_D c43cdcd5de 걸그룹 대전 0.5 반영 2019-04-07 21:06:23 +09:00
Hide_D 32d56503fc [ca6e97be65]지급율 -> 지급률 2019-04-07 21:04:08 +09:00
Hide_D 157a04ef76 외교 메시지는 삭제 할 수 없도록 2019-04-07 21:03:01 +09:00
Hide_D 679bf22b74 국메 삭제 가능 2019-04-07 21:02:45 +09:00
Hide_D cb97c00611 디버그 코드 제거 2019-04-07 21:02:18 +09:00
Hide_D b36262b167 메시지 삭제 기능 추가 2019-04-07 21:01:38 +09:00
Hide_D 54c9279734 메시지 타이밍 정책 일부 수정 2019-04-07 21:01:17 +09:00
Hide_D ee6b45894f 페이지당 갱신 시간을 10초에서 5초로 변경 2019-04-07 20:58:19 +09:00
Hide_D 112adf47be 메시지를 띄울 때 flex 적용 2019-04-07 20:57:48 +09:00
Hide_D ac98f51356 로그아웃 되었을 경우 무한히 호출하는 버그 수정 2019-04-07 20:56:56 +09:00
Hide_D 139f5cf7b3 이전 메시지 가져오기 기능 추가 2019-04-07 20:56:19 +09:00
Hide_D 4dbb58af64 부상으로 인한 전투 우선순위 감소를 완화 2019-04-07 20:55:31 +09:00
Hide_D 8167d7b6ae 등갑, 맹수 너프 2019-04-07 20:54:27 +09:00
Hide_D f2aefb1d39 자객병의 기동을 8로 상향 2019-04-07 20:54:00 +09:00
Hide_D 167e76897f selector에 검은색 추가 2019-04-07 20:53:35 +09:00
Hide_D b47f21feaf 도시 목록에 select2를 시험 적용 2019-04-07 20:52:41 +09:00
Hide_D 9e2f7981fb 암행부의 장수수에서 '부대장'이 제외됩니다. 2019-04-07 20:42:15 +09:00
Hide_D cf78a30d89 임관턴이 어찌저찌 어거지로 동작하던 버그 수정 2019-04-07 20:40:30 +09:00
Hide_D 61fa82a4fe 랜덤임관 인자 버그 수정 2019-04-07 20:36:49 +09:00
Hide_D e5347e6ee3 [4103831401,+]부대장은 기술연구, 전투시 기술,전략턴에 영향을 주지 않도록 변경 2019-04-07 20:33:47 +09:00
Hide_D 1396f960b0 통합, 합병시 부대장까지 같이 포함되는 문제 수정 2019-04-07 19:58:38 +09:00
Hide_D 6221ee164f select2 설치 2019-04-07 19:56:52 +09:00
Hide_D 309d18bebc [eaa9e6d840]불필요한 가로바 길이 줄임 2019-04-07 19:55:54 +09:00
Hide_D ec22926189 [e5da1905c6]추방시 명성 안깎이는 버그 수정 2019-04-07 19:53:30 +09:00
Hide_D 084c6d24e2 [864b94f62a]반계 상향 2019-04-07 19:51:19 +09:00
Hide_D de96aad086 [cac19cad4d]수비 우선 순위를 부상여부, 수뇌여부, 훈사 여부를 반영하도록 변경 2019-04-07 19:48:51 +09:00
Hide_D f6eae2274f 세력 장수 쿼리 버그 수정 2019-04-07 17:15:16 +09:00
Hide_D c9ee477c08 세력장수 본닉 2019-04-06 14:46:07 +09:00
Hide_D 18aef77c4a 천통시 장수 일람 2019-04-06 14:25:12 +09:00
Hide_D 9a78eac0ff 오타(?) 수정 2019-03-26 15:47:17 +09:00
Hide_D 74f20c2a5d 명전 재 갱신 코드 추가 2019-03-26 15:44:04 +09:00
Hide_D 9106d1f39b 명전 등록시 문자 문제 수정 2019-03-26 15:36:38 +09:00
Hide_D 1c56fe0f1a cache control 수정 2019-03-22 09:30:24 +09:00
Hide_D 3dd4e06fbe session_cache_limiter 삭제. no-cache가 기본값임 2019-03-22 09:26:52 +09:00
Hide_D d21e696892 확률 추가 수정 2019-03-15 15:15:00 +09:00
Hide_D a1556212bc 인탐 확률 핫픽스 2019-03-15 15:00:12 +09:00
Hide_D 0eab965933 지연 threshold 증가 2019-03-10 17:20:44 +09:00
Hide_D 0c82f97880 점령 시 도시 관직 초기화. 코드 정리 2019-03-10 17:19:35 +09:00
Hide_D 4e6b9dbdb4 장사-영릉이 이어진걸로 나오는 일반지도 버그 수정 2019-03-10 14:19:29 +09:00
Hide_D 1ba9526e0b 불가침 서신 거부 불가능한 버그 수정 2019-03-10 00:47:13 +09:00
Hide_D 568ff4b366 은퇴 연령 값을 GameConst로 이동 2019-03-09 17:08:11 +09:00
Hide_D 16a82a28ae 인탐, 의병에서 발생할 수 있는 숙련 예외 케이스 제거 2019-03-09 16:50:31 +09:00
Hide_D 2d56f33b60 값 실수 수정 2019-03-09 16:41:41 +09:00
Hide_D 8db39d2e6b 인탐 확률 추가 수정 2019-03-09 16:23:47 +09:00
Hide_D cd31768b5e 시나리오 최대 장수값 조절 2019-03-09 13:45:29 +09:00
Hide_D 077ce1b0a7 인탐 가속 조건 강화 2019-03-09 06:12:26 +09:00
Hide_D c990aa410e 오타 수정 2019-03-09 03:43:15 +09:00
Hide_D 6a1848e814 커맨드 attr 수정 2019-03-09 02:30:12 +09:00
Hide_D ff8c876274 커맨드 버그 수정? 2019-03-09 02:26:50 +09:00
Hide_D 2126a4067b 의병 고용으로는 무지장이 안나옴 2019-03-09 01:59:41 +09:00
Hide_D a9e58df64d 의병고용 버그 수정 2019-03-09 01:57:51 +09:00
Hide_D e038620878 m장 합산 능력치 버그 수정 2019-03-09 01:05:47 +09:00
Hide_D 4468e5fa06 사령턴 실행후 재 로드시 수비 켬끔 리셋 관련 버그 수정 2019-03-09 00:59:16 +09:00
Hide_D 59922480fa 영입 금지시에는 인탐 확률 보정 없음 2019-03-09 00:41:38 +09:00
Hide_D 29a140cb00 Revert "커밋 취소"
This reverts commit 0843da7a7c.
2019-03-09 00:40:16 +09:00
Hide_D 0843da7a7c 커밋 취소 2019-03-09 00:39:13 +09:00
Hide_D 50edd7dfbe m장이 아주 적을땐 잘 뽑히도록 2019-03-09 00:33:14 +09:00
Hide_D 37bfb7d936 인탐 장수 비율 4:4:2로 변경. 인탐장 숙련도 평준화. 인탐 확률 상승. 발견 추가. 2019-03-09 00:15:51 +09:00
Hide_D fc349e9865 관리자 턴 당김 버그 수정 2019-03-09 00:00:00 +09:00
Hide_D bec8b4d1b2 의병, 인탐장도 적은 비중으로 장수 카운트에 추가 2019-03-08 22:20:45 +09:00
Hide_D 3a48483700 황제가 있을 경우 황제. 없으면 이전 천통 군주의 명으로 토너먼트 개최 2019-03-06 01:44:24 +09:00
Hide_D 363278089d 토너먼트 변경이 변경 횟수를 깎지 않음. 수비 끔 시 훈사 3 감소 2019-03-06 01:09:34 +09:00
Hide_D 7d426fbfa9 인자 버그 수정 2019-03-06 00:40:56 +09:00
Hide_D 3f45a0dbc9 수비 순서에 훈사 영향을 더 강하게 주도록 변경 2019-03-06 00:38:35 +09:00
Hide_D 69d00d1a4d 두번 탭 해 도시 이동 기능 재 부활, 옵션 설정 가능 2019-03-05 23:06:34 +09:00
Hide_D 92ca904748 천통 시에는 계략 명장이 보임 2019-03-05 02:32:42 +09:00
Hide_D 33034118f2 아이템에 장수명을 띄우는것은 비합리적으로 보임 2019-03-05 02:29:10 +09:00
Hide_D dcd0ec9f29 명장일람에서 계략 시도 장수 본닉이 뜨는 문제 수정 2019-03-05 02:27:22 +09:00
Hide_D 467d53db81 천통 후에는 명장 일람에 장수 본닉이 뜨도록 2019-03-05 02:23:28 +09:00
Hide_D f8a890c579 명전에서 장수의 본닉이 뜨도록 2019-03-05 02:11:52 +09:00
Hide_D 881bf08aee 은퇴 후 명전 등록 시 '이전 값보다 높아진 경우'에만 경신하도록 수정 2019-03-05 01:45:03 +09:00
Hide_D 297767a42b 집합장이 군주인 경우 아무에게나 선양 2019-03-05 01:20:27 +09:00
Hide_D f81a88abbf 외교권자 등에서 인사부 연동이 안되는 버그 해결 2019-02-27 23:33:18 +09:00
Hide_D f335c882ba 권한 관련 버그 수정 2019-02-27 23:23:53 +09:00
Hide_D 27ad4b9eb9 선양 버그 수정 2019-02-25 21:27:17 +09:00
Hide_D 23f71d1ec8 외교권자 버그 수정 2019-02-25 21:25:29 +09:00
Hide_D 5c120c3fc2 버그 수정 2019-02-24 19:41:00 +09:00
Hide_D db56b74475 본인 국가 아닌 곳에 임명 가능한 버그 수정 2019-02-24 01:12:59 +09:00
Hide_D 6576bffa52 회의실 기밀실 '타이틀'이 거꾸로 표기되는 버그 수정 2019-02-24 00:56:25 +09:00
Hide_D 594de74a88 게시판 위아래 가운데 정렬.. 2019-02-24 00:55:13 +09:00
Hide_D 395d58009e NPC 군주는 유저장 수뇌에게 외교권자 권한 부여 2019-02-24 00:52:42 +09:00
Hide_D 48adea0d16 자국 내 외교권자에게는 메시지 보낼 수 있도록 수정 2019-02-24 00:42:34 +09:00
Hide_D dce24681e2 선양시 외교권자 지정 코드 수정 2019-02-24 00:37:01 +09:00
Hide_D eecac2b007 외교 서신 수락시, 국메, 외교 둘다 뜨도록 수정 2019-02-24 00:32:22 +09:00
Hide_D 53d5b6c37f 게시판 이름 ㅇ 2019-02-24 00:23:45 +09:00
Hide_D 6a8196b42c 메시지 변경 2019-02-20 01:40:56 +09:00
Hide_D 9e801f9ced 비재야망명 버그 수정 2019-02-17 23:57:26 +09:00
Hide_D 4955edf69c 외교부 버그 수정 2019-02-14 21:28:15 +09:00
Hide_D 0ab6cc9b75 한칸 띄움 2019-02-03 02:18:07 +09:00
Hide_D 5f29fe3c4f 간이 툴바 생성 2019-02-03 01:54:58 +09:00
Hide_D a2ab0a1173 메시지 자동 링크 2019-02-03 00:28:29 +09:00
Hide_D d37b9c3c26 고대무장 신대륙국가 추가 2019-01-31 02:24:18 +09:00
Hide_D 82dbb39568 애니집결 5차 반영 2019-01-31 02:14:10 +09:00
Hide_D 23f2f96361 외교부 버튼 조건 변경 2019-01-30 02:54:38 +09:00
Hide_D dfa585467f 버그 수정 2019-01-30 00:04:33 +09:00
Hide_D 33b914fd4b 버그 수정 2019-01-30 00:03:36 +09:00
Hide_D 18100867c5 외교 메시지 과거 권한 문제 수정 2019-01-30 00:02:28 +09:00
Hide_D d4bd27cb38 댓글 입력도 투명하게 2019-01-29 23:46:47 +09:00
Hide_D d4f682dadb 댓글 엔터시 입력 2019-01-29 23:43:37 +09:00
Hide_D f8bb7aaf30 Merge branch 'ng_diplomacy' of ssh://storage.hided.net:2525/devsam/core into ng_diplomacy 2019-01-29 23:40:35 +09:00
Hide_D 6b02384fb8 회의실 기밀실 템플릿 2019-01-29 23:40:28 +09:00
Hide_D 65724bcaa7 하야 임관시 권한 초기화 2019-01-29 17:12:04 +09:00
Hide_D 4fa9346652 버그 수정 2019-01-29 02:57:24 +09:00
Hide_D bc1459f107 승인시 이전 내용 중첩 2019-01-29 02:53:39 +09:00
Hide_D 9f11d7ec88 파기 요청 추가 2019-01-29 02:48:41 +09:00
Hide_D 369271b29f 시중->종사, 감찰부 권한 정리 2019-01-28 20:33:44 +09:00
Hide_D 4d34009d32 공개, 비밀 문구 변경 2019-01-26 06:58:12 +09:00
Hide_D 0d2c469ad9 템플릿 미완 부분 수정 2019-01-26 06:56:19 +09:00
Hide_D a8bf85906a 대체된 메시지 보기 가능 2019-01-26 06:44:34 +09:00
Hide_D 99369da128 틀 일부 수정 2019-01-26 06:36:48 +09:00
Hide_D 648b3772a1 외교부 추가 2019-01-26 06:30:29 +09:00
Hide_D db45bfd07d 외교 메시지 필터링에 invalid 옵션 추가 2019-01-26 04:03:15 +09:00
Hide_D 06d88d3fe5 외교 메시지 전송시 알림 2019-01-26 03:50:08 +09:00
Hide_D 177d0a2de3 조언자 인원수로 보여줌 2019-01-26 03:40:01 +09:00
Hide_D 1bc08930be 외교부 틀 작성중. 재야의 외교 메시지는 항상 보이도록 2019-01-26 03:31:04 +09:00
Hide_D cc853a0632 권한 문제 수정 2019-01-25 23:29:35 +09:00
Hide_D 3e89b8f781 내무부 권한 수정 2019-01-25 22:35:49 +09:00
Hide_D 6a928cd83a 국적 변경시 permission 초기화 2019-01-25 20:30:02 +09:00
Hide_D 358ec17c61 게시물 순서 변경 2019-01-25 20:17:36 +09:00
Hide_D 765991b32e 외교권자 기밀실 버튼 활성화 2019-01-25 19:49:29 +09:00
Hide_D 1c11a22347 수락 불가능한 문제 해결 2019-01-25 19:46:32 +09:00
Hide_D b74244652e 없는것보단 나은 회의실 css 2019-01-25 19:40:13 +09:00
Hide_D b6f76562e2 내무부 비고란 제거 2019-01-25 19:34:36 +09:00
Hide_D fa2e3f18d6 외교 메시지 삭제 조건 완화 2019-01-25 19:32:13 +09:00
Hide_D 7a5efa938b 메시지 삭제가 안되던 버그 수정 2019-01-25 19:30:33 +09:00
Hide_D b7b755a79d 인사부 수정 2019-01-25 19:22:30 +09:00
Hide_D 29e562259d 외교권자 임명 대기중 2019-01-25 03:16:34 +09:00
Hide_D fa74b2a084 외교권자 목록 출력 2019-01-25 02:18:20 +09:00
Hide_D f2d2d287f5 게시판 기능만 동작 2019-01-25 02:11:54 +09:00
Hide_D 8d701e46df 게시판이 '동작만 함' 2019-01-25 01:51:26 +09:00
Hide_D 3a17e1f9b2 이전 외교 메시지를 불러 올 수 있음 2019-01-25 01:39:45 +09:00
Hide_D 6d0306444d 외교권자에게는 메시지를 보낼 수 없음 2019-01-25 01:28:06 +09:00
Hide_D 02e37eaf88 1차 버그 수정 2019-01-25 01:02:13 +09:00
Hide_D 17daf67662 DB 스키마 변경 2019-01-25 00:13:04 +09:00
Hide_D 1ee3c49011 중간반영 2019-01-24 03:34:03 +09:00
Hide_D e3af89b001 외교부 틀 작성 2019-01-23 03:11:07 +09:00
Hide_D c8f5ac4d25 국메 처리 방식을 변경. 국가간 메시지는 외교권자만 가능 2019-01-23 02:36:03 +09:00
Hide_D ba841ce1b7 외교메시지 수신 기준 변경중 2019-01-23 01:37:40 +09:00
Hide_D 5f0258022a 기존 회의실, 기밀실 코드 삭제 2019-01-22 03:17:44 +09:00
Hide_D 006ab00f20 외교서신 응답 2019-01-22 02:47:27 +09:00
Hide_D 94bc074f0d 파일 명을 namespace를 고려하여 수정 2019-01-21 02:25:54 +09:00
Hide_D a99941d7dc 외교 서신 추가 기능 2019-01-21 02:23:23 +09:00
Hide_D a763681d2e 게시물 코드 2019-01-21 02:00:48 +09:00
Hide_D 32bc143589 게시판 글, 댓글 작성 초안 2019-01-21 01:45:32 +09:00
Hide_D b422cac734 권한 세팅 2019-01-18 03:01:02 +09:00
Hide_D 9f9a7b9c4b 왕 무장 관직 순서 변경 2019-01-17 23:01:05 +09:00
Hide_D 5416978da5 무관 최종 관직을 실제 삼국지 관직 순서에 맞게 변경 2019-01-17 22:59:54 +09:00
Hide_D 8d6c4ed713 시중->종사 2019-01-17 22:44:18 +09:00
Hide_D 1ddce7ac2e 게시물 구조 설정 2019-01-17 03:12:26 +09:00
Hide_D 6d642139d1 tui-editor와 새 게시판 준비 2019-01-17 02:54:58 +09:00
Hide_D eb845a1eb7 permission, penalty 대응 준비 2019-01-16 02:47:48 +09:00
Hide_D 18d11b2c6a 장수 schema 수정 2019-01-16 02:26:28 +09:00
Hide_D 00bbf4eae2 버튼 이동 코드 정리 2019-01-16 02:18:42 +09:00
Hide_D 3cf9d39cf2 DB 스키마 정리, diplomacy 테이블 정리, 코드 정리 2019-01-16 01:59:07 +09:00
Hide_D 8ee2def02a 국법 기능 제거. 외교부를 위한 자리 추가 2019-01-12 18:53:01 +09:00
Hide_D 51e9de0e79 DB 스키마 준비 2019-01-12 07:21:34 +09:00
Hide_D bd3e886d7e 걸그룹 전콘 문제 일부 수정 2018-12-08 20:55:48 +09:00
Hide_D 37eafa54cc 걸그룹 대전 0.5 반영 2018-12-02 22:28:10 +09:00
Hide_D ca6e97be65 지급율 -> 지급률 2018-12-01 23:37:40 +09:00
Hide_D 22bcef1310 외교 메시지는 삭제 할 수 없도록 2018-12-01 18:36:43 +09:00
Hide_D 900f307847 국메 삭제 가능 2018-11-30 21:49:19 +09:00
Hide_D 5602653ba9 디버그 코드 제거 2018-11-30 21:44:59 +09:00
Hide_D c209dbd90b 메시지 삭제 기능 추가 2018-11-30 21:29:31 +09:00
Hide_D 1c87db1faf 메시지 타이밍 정책 일부 수정 2018-11-30 19:03:26 +09:00
Hide_D 73cd675dc9 페이지당 갱신 시간을 10초에서 5초로 변경 2018-11-30 02:05:33 +09:00
Hide_D dc374df350 메시지를 띄울 때 flex 적용 2018-11-30 01:51:24 +09:00
Hide_D 9485725df5 로그아웃 되었을 경우 무한히 호출하는 버그 수정 2018-11-30 01:24:45 +09:00
Hide_D 81e59d5fe4 이전 메시지 가져오기 기능 추가 2018-11-30 01:18:07 +09:00
Hide_D bcc9741fbe 부상으로 인한 전투 우선순위 감소를 완화 2018-11-28 23:43:42 +09:00
Hide_D 1151572814 등갑, 맹수 너프 2018-11-28 01:24:29 +09:00
Hide_D c648bb71f5 자객병의 기동을 8로 상향 2018-11-28 01:20:32 +09:00
Hide_D be7dbc0e51 selector에 검은색 추가 2018-11-28 01:14:43 +09:00
Hide_D 10a4350cae 도시 목록에 select2를 시험 적용 2018-11-28 01:02:56 +09:00
Hide_D b15f2fc49b 암행부의 장수수에서 '부대장'이 제외됩니다. 2018-11-28 00:29:53 +09:00
Hide_D b793b81e4d 임관턴이 어찌저찌 어거지로 동작하던 버그 수정 2018-11-28 00:26:29 +09:00
Hide_D ac6be74471 랜덤 임관을 더 고르게 합니다. 2018-11-28 00:18:09 +09:00
Hide_D 4103831401 부대장은 기술연구, 전투시 기술 상승에 영향을 주지 않도록 변경 2018-11-28 00:16:34 +09:00
Hide_D 7e87b4bed3 통합, 합병시 부대장까지 같이 포함되는 문제 수정 2018-11-28 00:14:36 +09:00
Hide_D 6fc05cb587 select2 설치 2018-11-27 23:52:12 +09:00
Hide_D eaa9e6d840 도시 목록 등 불필요한 가로바 길이 줄임 2018-11-26 22:29:11 +09:00
Hide_D e5da1905c6 추방시 명성 안깎이는 버그 수정, 첫 하야시 패널티 없음 2018-11-26 18:12:21 +09:00
Hide_D 864b94f62a 반계 상향 2018-11-26 18:08:57 +09:00
Hide_D cac19cad4d 수비 우선 순위를 부상여부, 수뇌여부, 훈사 여부를 반영하도록 변경 2018-11-26 15:17:51 +09:00
Hide_D 7b68309301 gitignore 변경 2018-11-26 15:08:33 +09:00
Hide_D af9cbb47ef 첫 화면 띄우기 성공 2018-11-26 04:05:34 +09:00
Hide_D 8bb9ed8a18 general_turn, nation_turn 대응 2018-11-26 01:32:42 +09:00
Hide_D 0813f48fce 버그 1차 수정 2018-11-26 00:03:11 +09:00
Hide_D 130d079c90 git ignore 변경, 소소한 버그 수정 2018-11-25 21:01:39 +09:00
Hide_D caf503faa3 j_set_general_command, j_set_nation_command 구현 2018-11-25 20:35:29 +09:00
Hide_D ae817daa8e 이전 디렉토리를 이동하도록 변경 2018-11-25 00:58:17 +09:00
Hide_D 86659896da 디버그 코드 제거 2018-11-25 00:51:59 +09:00
Hide_D 70ae6d612c php의 rename을 OS의 mv로 변경 2018-11-25 00:50:41 +09:00
Hide_D cfa2d29a4b 디버그 모드 2018-11-25 00:39:49 +09:00
Hide_D ca22dfec3a rename 재수정 2018-11-25 00:37:24 +09:00
Hide_D bbfecf1b47 base을 filename으로 수정 시도 2018-11-25 00:35:11 +09:00
Hide_D 7f949472f7 파일명 에러 수정 2018-11-25 00:29:26 +09:00
Hide_D 379c75aab6 폴더명 실수.. 2018-11-24 23:46:04 +09:00
Hide_D 23481318a2 이전 디렉토리를 이동하도록 변경 2018-11-24 23:44:33 +09:00
Hide_D 5ceb2ea1c9 button에 type="button" 지정 2018-11-24 22:38:09 +09:00
Hide_D 2af4c94817 사령턴 반환값 수정 2018-11-24 22:29:50 +09:00
Hide_D f6333ba304 사령부 UI 간결화, (구현은 아직), 일부 변수명 변경 2018-11-24 22:22:27 +09:00
Hide_D 1d3e29cea2 data-reqArg 추가 2018-11-23 03:13:03 +09:00
Hide_D 2e462f39f7 커맨드 출력 준비 2018-11-23 03:12:08 +09:00
Hide_D c5868b7e5a 기본 커맨드 지정 2018-11-23 02:23:19 +09:00
Hide_D 2651e81cd3 $reqArg 지정 2018-11-23 02:07:44 +09:00
Hide_D db7a2d8768 불가침 제의 구현 2018-11-22 02:48:42 +09:00
Hide_D d0d17d0033 diplomacy_ticket 테이블 추가 2018-11-22 02:26:07 +09:00
Hide_D 3ebfb57527 구 불가침 코드 삭제 2018-11-22 02:15:24 +09:00
Hide_D b485dddfa2 선전포고 추가, DisallowDiplomacyStatus 구현 변경 2018-11-22 02:13:23 +09:00
Hide_D 979d7e3662 sabotagelimit을 strategic_cmd_limit로 변경 2018-11-18 03:57:22 +09:00
Hide_D 5de9859a1e 발령 구현 2018-11-18 03:57:09 +09:00
Hide_D 5b96cc9b0a 단련 버그 수정 2018-11-17 21:17:39 +09:00
Hide_D 7886682f7c 몰수, 포상 구현, 증여 헌납 버그 수정 2018-11-17 15:40:34 +09:00
Hide_D f95ba3f61c func_process_chief 백업 2018-11-17 02:17:09 +09:00
Hide_D c6cb3190cf 선동, 탈취, 파괴 구현 2018-11-17 01:57:21 +09:00
Hide_D c8c026af16 화계 구현 2018-11-17 01:44:54 +09:00
Hide_D e9012adaa4 item의 static 변경 2018-11-17 01:33:17 +09:00
Hide_D e769b70099 sabotage 백업 2018-11-17 00:24:36 +09:00
Hide_D 0bfc7d430b func_process_personnel.php 삭제 2018-11-17 00:24:12 +09:00
Hide_D 8a04fc058d 방랑 구현 2018-11-17 00:22:53 +09:00
Hide_D 288e6eae00 Constraint 수정 2018-11-16 23:35:43 +09:00
Hide_D 84f4a022ed 모반 구현 2018-11-15 03:42:55 +09:00
Hide_D 76079f24c0 ConstraintHelper 추가 2018-11-15 03:33:44 +09:00
Hide_D 0c5d62a0dd 국방 표기 방식 변경 2018-11-15 01:23:32 +09:00
Hide_D 13d2e91914 국방 표기 방식 변경 2018-11-13 19:55:40 +09:00
Hide_D 9f0b2c570e extractMissingPostToGlobals(); 제거 2018-11-13 02:11:00 +09:00
Hide_D 1d5d72967a extractMissingPostToGlobals(); 제거 2018-11-13 02:10:17 +09:00
Hide_D ba8bae67ae 글 넘치는 것 해결 2018-11-11 23:52:54 +09:00
Hide_D c68de36bce msg overflow 적용 2018-11-11 23:32:19 +09:00
Hide_D 6c86fcf6fa 해산 수정 2018-11-11 23:30:39 +09:00
Hide_D f594a84664 nextRuler 재구현 2018-11-11 21:29:06 +09:00
Hide_D b89e14f78d 해산 구현 2018-11-11 20:46:12 +09:00
Hide_D a872d10770 랜임 코드 수정 2018-11-11 20:28:05 +09:00
Hide_D 390cfa6058 선형 랜덤에서 값이 음수가 들어가는 경우 보정 2018-11-11 19:53:49 +09:00
Hide_D 613e10a2cf 랜덤 임관시 제곱근에서 선형으로 변경 2018-11-11 19:44:14 +09:00
Hide_D 4ce23aee6e defulatGold, defaultRice 개념 지정 2018-11-11 19:38:43 +09:00
Hide_D 2534e5f668 선양 추가 2018-11-09 00:14:26 +09:00
Hide_D 16cc281a22 인증 토큰 '초기화' 문구를 '연장'으로 변경 2018-11-08 16:01:01 +09:00
Hide_D 5fdcffc97d 거병 추가 2018-11-06 02:50:25 +09:00
Hide_D 55abaf0dae 하야 메시지 출력 수정 2018-11-06 01:34:40 +09:00
Hide_D 8ece68a3c7 건국 구현 2018-10-31 02:39:40 +09:00
Hide_D 0ff3817c28 방랑군이 아니어도 건국 가능한 버그 수정 2018-10-29 03:15:45 +09:00
Hide_D 12d0ec2cf6 건국 조건 설정 2018-10-29 03:14:03 +09:00
Hide_D 13fab5ebe4 글자 너비를 반각 18자까지 확장 2018-10-29 02:39:23 +09:00
Hide_D 2cc0150bec 랜임 코드 마저 반영 2018-10-28 03:35:32 +09:00
Hide_D 8be7a7e67d 랜덤 임관 깃수용 코드 이식 2018-10-28 03:32:03 +09:00
Hide_D 41ef70c1e4 오타 수정 2018-10-28 03:15:07 +09:00
Hide_D 26991b21ce ReqEnvValue 추가 2018-10-28 03:14:03 +09:00
Hide_D 3d79f39600 견문 무력 버그 수정 2018-10-25 01:26:59 +09:00
Hide_D be940a32f5 3인 임관 실패시 견문 2018-10-25 01:21:52 +09:00
Hide_D fb2d3d6151 견문 시 무력이 떨어지지 않도록 변경 2018-10-25 01:17:04 +09:00
Hide_D 5180266f01 기타 설정 추가 2018-10-24 03:27:22 +09:00
Hide_D e00e160f35 예약 안되는 버그 수정 2018-10-24 03:22:41 +09:00
Hide_D 077bd3b538 랜임 개월 수 버그 수정 2018-10-24 01:17:03 +09:00
Hide_D 8e8eda1012 랜임 모드 버그 수정 2018-10-24 00:54:18 +09:00
Hide_D 40e0adfefe 등용장 무효화 2018-10-23 23:33:12 +09:00
Hide_D 7ef11cb05f 오타 수정 설명 수정 2018-10-23 16:38:25 +09:00
Hide_D d05ed7a26c 오타 수정 2018-10-23 16:35:28 +09:00
Hide_D b39befc111 랜덤 임관 모드 추가 2018-10-23 15:05:19 +09:00
Hide_D d6a81e320b 건국 코드 준비 2018-10-22 02:30:44 +09:00
Hide_D 4fbbb63712 하야 추가 2018-10-21 22:35:02 +09:00
Hide_D 8858287469 인재탐색 추가. gencount, npc_id 관련 수정 2018-10-21 21:53:34 +09:00
Hide_D 08bff5d7df 임관 추가. 유니크 복권 추첨을 General 클래스 용으로 변경 2018-10-21 15:20:27 +09:00
Hide_D 3cc437a17f argTest를 로직 순서에 맞게 변경 2018-10-21 14:28:29 +09:00
Hide_D c71a92302a 등용 추가 2018-10-21 03:02:22 +09:00
Hide_D 6e5faa8cc1 군량매매 구현 2018-10-21 02:36:05 +09:00
Hide_D b6db653f41 아이템 구현. 장비매매 추가 2018-10-21 01:55:09 +09:00
Hide_D 05fcb5397e 징병 모병 추가, iAction 구조 일부 변경 2018-10-20 23:31:32 +09:00
Hide_D 18ae2f121a 일부 DB 값 관련 정보 변경. update 쿼리, insert into 쿼리 일부 변경 2018-10-20 17:41:48 +09:00
Hide_D 3536b01981 전투태세, 첩보 추가, 기존 코드 일부 정리 2018-10-20 16:45:57 +09:00
Hide_D 0b2bc922bb 견문 추가 2018-10-20 03:24:34 +09:00
Hide_D 5226ee0343 증여 추가 2018-10-20 02:11:23 +09:00
Hide_D af94f87196 요양 헌납 추가 2018-10-19 02:47:07 +09:00
Hide_D 743c8172e8 출병 커맨드 구현 2018-10-17 17:42:47 +09:00
Hide_D 0816d14264 generalSource 폐기 2018-10-17 16:01:38 +09:00
Hide_D dde5bcbfe1 createGeneralObjFromDB 추가 2018-10-17 15:34:32 +09:00
Hide_D 220e98b2cc 집합, 귀환 추가 2018-10-17 02:38:51 +09:00
Hide_D 337424cb96 강행, 단련 추가 2018-10-17 02:01:00 +09:00
Hide_D a5c3a2fc79 이동 구현. BaseCommand에 GeneralSource 연결. 2018-10-16 02:29:33 +09:00
Hide_D 642ad6f6f4 소집해제 추가. 커맨드 버그 수정 2018-10-16 01:01:50 +09:00
Hide_D f592eb66a3 func_process에서 훈련, 사기 삭제 2018-10-16 00:55:44 +09:00
Hide_D 6297314c4a 물자조달 턴 추가 기타 커맨드 버그 수정 2018-10-16 00:53:19 +09:00
Hide_D 37bec05857 사기진작 추가 2018-10-15 02:09:19 +09:00
Hide_D 2b3886617e 훈련 턴 추가 2018-10-15 02:05:39 +09:00
Hide_D 8c93d35ca9 턴에 canDisplay() 추가 2018-10-15 01:28:03 +09:00
Hide_D f501eea00a NPC능동 추가 2018-10-15 01:23:44 +09:00
Hide_D 13f7398761 func_npc.php 삭제 2018-10-15 00:51:50 +09:00
Hide_D d9c2111961 NPC 사령턴 일부 수정 2018-10-15 00:14:44 +09:00
Hide_D 5bf206c933 NPC 새로짜던 사령턴 파기 2018-10-15 00:11:26 +09:00
Hide_D 26a0983860 장수 이전턴 코딩 2018-10-15 00:11:01 +09:00
Hide_D c8add882f8 NPC 수뇌턴 정비 2018-10-13 01:44:20 +09:00
Hide_D 77a13d0f2b NPC 일반장 턴 완성 2018-10-12 00:57:21 +09:00
Hide_D 0b63dba86d 전투 턴 관련 등록 2018-10-11 23:22:44 +09:00
Hide_D 376abd10a7 NPC 행동 재 작성중 2018-10-11 01:07:37 +09:00
Hide_D 6239486361 접경 방식 수정. 상업 투자의 접경식도 같이 수정 2018-10-11 00:33:06 +09:00
Hide_D a949a38bdf 접경 코드를 1(곧 접경), 2(공백지[출병가능]), 3(적 도시[출병가능]) 으로 구분 2018-10-11 00:28:11 +09:00
Hide_D 06f1085b89 NPC 군주 거병시 이동 로직 수정 2018-10-10 22:24:13 +09:00
Hide_D 708b05a9bd NPC 군주턴 까지 완료 2018-10-08 03:36:43 +09:00
Hide_D bc21d78217 NPC 부대장 수치 버그 수정 2018-10-07 21:46:28 +09:00
Hide_D 2217d678e4 부대장 수치 버그 수정 2018-10-07 21:43:21 +09:00
Hide_D 719922c7db 능력치 변경시 색상 변경 2018-10-07 19:23:26 +09:00
Hide_D 6db3d92e2d AI에서 '내정풀' 인식 2018-10-06 04:18:08 +09:00
Hide_D 3f65424d99 NPC 행동 코드 재 구현중 2018-10-06 04:08:53 +09:00
Hide_D 7cfc8f0269 buildGeneralCommandClass류 구현 2018-10-06 04:08:43 +09:00
Hide_D bf788d4f6e npc 처리용 새 클래스 준비중 2018-10-06 01:52:14 +09:00
Hide_D d76b970d85 커맨드 관련 구 코드 이전 2018-10-06 00:13:13 +09:00
Hide_D b7ac53b7ea turn0 사용하는 부분 리팩토링 2018-10-06 00:12:16 +09:00
Hide_D a379f2d441 Merge branch 'devel' into ng_turn 2018-10-05 21:50:54 +09:00
Hide_D 5c9cdd0524 getGeneralTurnBrief 연동 코드 수정 2018-10-05 21:49:53 +09:00
Hide_D 2e5612697f general에 getID 추가 2018-10-05 21:04:43 +09:00
Hide_D 921d3d0894 중간 작업(getGeneralTurnBrief, turn0, npc_turn 작업 남음) 2018-10-04 02:37:54 +09:00
Hide_D b76b467436 유틸리티 함수 추가 2018-10-04 02:07:31 +09:00
Hide_D 290c302352 턴 요약 위해 getBrief 추가 2018-10-04 01:57:56 +09:00
Hide_D 8de8a156b8 general.turn0 기반 코드 일부를 general_turn 기반으로 변경 2018-10-04 01:18:23 +09:00
Hide_D 1953b95732 processCommand 함수 삭제 2018-10-04 01:12:38 +09:00
Hide_D b5b161e0d3 스키마 수정 2018-10-04 01:10:31 +09:00
Hide_D f8ead0093d 유틸리티 함수들 일부 수정. 랜덤값 뽑기 함수 하나 더 추가 2018-10-04 01:08:56 +09:00
Hide_D a3d27c634e sql 선언 수정 2018-10-04 00:20:30 +09:00
sars 00f0b97ccb camelCase대신 underscore_case 사용 2018-10-04 00:16:08 +09:00
sars c342b4dd9a 장수 동향, 개인 기록, 중원 정세 id 등록 2018-10-04 00:07:46 +09:00
Hide_D 04b9d47a47 지난 턴 관리 부분 이상한 부분 수정 2018-10-03 22:41:49 +09:00
Hide_D 7aa7b4b6dd '지난 턴'을 관리하는 기능 추가 2018-10-03 22:38:05 +09:00
Hide_D 4baac981c2 턴 커맨드에 getPreReqTurn, getPostReqTurn 추가 2018-10-03 17:45:47 +09:00
Hide_D c596c2768c LastTurn 관리용 객체 추가 2018-10-03 17:27:04 +09:00
Hide_D 50e97109b9 lock 버그 수정 2018-10-03 16:21:00 +09:00
Hide_D 6970ea1ccc lock 버그 수정 2018-10-03 16:20:47 +09:00
Hide_D 22d31661cb 사령턴 수행용 '지난턴' 추가 2018-10-02 03:06:17 +09:00
Hide_D a61d8bae53 버그 수정. 커맨드. 사령턴 실행. 2018-10-02 02:27:42 +09:00
Hide_D 4fb542d5ee 코드 정리. 버그 수정. 접경 디버프 반영 2018-10-02 02:27:29 +09:00
Hide_D 9a021e5687 preprocessCommand 정리 2018-10-02 00:15:15 +09:00
Hide_D 168d302892 우선 순위를 오름차순으로 변경 2018-10-02 00:11:27 +09:00
Hide_D c98aed68da 전투 우선순위에 '유니크 아이템'의 효과가 과도하게 측정되는 버그 수정 2018-10-01 23:10:47 +09:00
Hide_D 2cb7a5174b 전투 우선순위에 '유니크 아이템'의 효과가 과도하게 측정되는 버그 수정 2018-10-01 23:10:27 +09:00
Hide_D 629d63f5e2 의술의 도시 치료 커맨드 추가 2018-10-01 03:35:07 +09:00
Hide_D 2bd894f53f ?> 제거 2018-10-01 03:03:30 +09:00
Hide_D 63ed05fafb Trigger 추가 수정 2018-10-01 03:02:03 +09:00
Hide_D 935473823a trigger 구성을 올바르게 수정 2018-10-01 02:52:27 +09:00
Hide_D 89ecbe34ed Trigger, Action 역할 재정의 2018-10-01 02:02:30 +09:00
Hide_D 731a6e9587 기본 커맨드를 새 turn 테이블 기준으로 변경 2018-09-30 03:17:55 +09:00
Hide_D a02454e2b4 command로 새 table용 장수, 수뇌 턴 당기기,밀기 추가 2018-09-30 03:07:24 +09:00
Hide_D 082c376dde Command 구조 일부 수정 2018-09-30 03:04:20 +09:00
Hide_D 98cfc8a748 updateTurntime을 TurnExecutionHelper로 이동 2018-09-30 02:05:55 +09:00
Hide_D e8e405648f 사망, 환생을 General 클래스로 이동 2018-09-30 02:05:37 +09:00
Hide_D 432318226e 사망 메시지를 별도로 분리 2018-09-30 02:05:12 +09:00
Hide_D 77c3385f93 코드 병합 2018-09-29 22:37:30 +09:00
Hide_D 36e45ecf68 gitignore 조정 2018-09-29 22:29:02 +09:00
Hide_D a90096ab3c 계략 기본 성공률을 '보급'과 거꾸로 적용한 버그 수정 2018-09-27 17:00:56 +09:00
Hide_D 414717cebf 임관 코드 최종 수정 2018-09-27 16:36:55 +09:00
Hide_D b50a2125e4 사실 모드 임관 수정 2018-09-27 16:29:49 +09:00
Hide_D e647f8405d 사실 모드 랜임 코드 버그 수정 2018-09-27 16:27:38 +09:00
Hide_D 613b374dcb 인증 코드 자리 수 하나 감소 2018-09-25 10:45:21 +09:00
Hide_D 2f28d5b327 주자사, 공, 황제일 때 장수 수가 내부적으로 1 차이나게 적용되는 버그 수정 2018-09-25 10:12:42 +09:00
Hide_D 5400eb0e32 전환 시 '빈칸' 보정, 설명 추가 2018-09-24 04:23:47 +09:00
Hide_D 34083c1798 flip image 추가 2018-09-24 04:17:54 +09:00
Hide_D eeb67d5e57 data-flip을 허용하고, summernote에 img 태그에 data-flip을 추가하도록 2018-09-24 03:58:40 +09:00
Hide_D 4d22814b95 장수 생성시 초기 스탯으로 '임의 버튼을 클릭'하도록 지정 2018-09-24 02:16:42 +09:00
Hide_D c0fc922597 설치 설명에서 MariaDB만 지원한다고 변경 2018-09-23 17:31:40 +09:00
Hide_D 093cd0a050 WebUtil.php에서 drawMenu fallback 추가. 설치시 '활성화되지 않은' KakaoKey.php 파일 추가 2018-09-23 17:31:30 +09:00
Hide_D a2caf2e971 이미지 업로드 기능 추가 2018-09-22 03:05:58 +09:00
Hide_D a5fcf837bb 초반 제한 기간 텍스트 수정 2018-09-21 02:08:51 +09:00
Hide_D 0d152fafc7 툴팁 class 수정. 지도의 년월에 올리면 초반 제한, 기술 제한 툴팁 2018-09-21 02:06:45 +09:00
Hide_D 5bba050403 왕조 일람 버그 수정 2018-09-20 02:26:20 +09:00
Hide_D b0264db0e6 전쟁 기한 공식을 스택형으로 변경 2018-09-20 01:15:50 +09:00
Hide_D e0497d9481 멸망 시 접경 재설정 코드 버그 수정 2018-09-20 01:02:29 +09:00
Hide_D 86d4706efc 버그 수정 2018-09-20 00:43:36 +09:00
Hide_D cf973847ab 후발 주자에게, 명성, 전특, 내특에 대해 일정 부분 보상 제공 2018-09-20 00:35:38 +09:00
Hide_D 863fd2bdb5 NPC 부대장에게 포상하지 않도록 수정 2018-09-19 23:56:33 +09:00
Hide_D 8cbb637690 부대탄 유저장도 발령하지 않도록 수정 2018-09-19 23:37:36 +09:00
Hide_D 938fd98717 전투 코드를 모두 generator 기반으로 변경 2018-09-19 23:29:36 +09:00
Hide_D 3030e0d874 부대장 주는 횟수 변경 2018-09-19 22:57:06 +09:00
Hide_D 88e3eb1d2c 집합장 때문에 총 기술치가 깎이는 버그 수정 2018-09-19 22:55:48 +09:00
Hide_D 174214b096 접경 내정 상승량 감소는 '수도가 아닐때' 적용 2018-09-19 03:01:38 +09:00
Hide_D aa5bf600ef 부대장에게는 금쌀이 제공되지 않도록 수정 2018-09-19 02:21:38 +09:00
Hide_D a14f6e1455 주석 수정 2018-09-19 02:13:44 +09:00
Hide_D 849b0b2a27 치안에 따른 재난 확률 변경 2018-09-19 02:09:08 +09:00
Hide_D b95ff07f61 전쟁 중 접경에서는 농상성수 가 제대로 안 오르도록 2018-09-19 02:00:29 +09:00
Hide_D ab3dcff023 접경지 처리시, 공백지 접경인지 적군 접경인지 구분 2018-09-19 01:49:46 +09:00
Hide_D b257672717 트래픽이 0인 경우 버그 수정 2018-09-19 01:46:15 +09:00
Hide_D 59a220ee51 루드라사움에서도 보병의 성벽 대미지 증가 2018-09-19 01:33:33 +09:00
Hide_D ac3784c732 보병의 성벽 상대 전투력 20% 증가 2018-09-19 01:32:04 +09:00
Hide_D fde07c539b 돌격에 저지 불가 제거 2018-09-19 01:16:50 +09:00
Hide_D 01c0ea13b9 저지 숙련 증가 2018-09-19 01:00:25 +09:00
Hide_D d1fe9ca364 차병은 성벽 전투시 부상을 입지 않음 2018-09-19 00:39:15 +09:00
Hide_D 69197e6bf7 견고 설명 수정 2018-09-19 00:29:24 +09:00
Hide_D 2c092997ba 견고 추가 상향 2018-09-19 00:28:09 +09:00
Hide_D fab148d168 소울소드 리마스터 시나리오 업데이트 2018-09-18 23:19:30 +09:00
Hide_D 38af755e56 버그 수정 ㅜ 2018-09-18 03:30:40 +09:00
Hide_D 94f30ab40a 천통했을 때에는 벌점이 늘어나지 않도록 수정 2018-09-18 03:26:12 +09:00
Hide_D 4596a16a8c NPC 안생기는 버그 수정 2018-09-18 03:22:55 +09:00
Hide_D f478b5a688 변수 대소문자 버그 수정 2018-09-18 03:17:20 +09:00
Hide_D 47634f7f4e NPC 생성 루프 수정 2018-09-18 03:15:40 +09:00
Hide_D 865dd9a2c7 주목, 왕이되면 NPC 부대장 하나 더 추가 2018-09-18 02:56:35 +09:00
Hide_D 4d81af640a 메시지 전송 시 장수명 순서대로 정렬 2018-09-18 02:31:41 +09:00
Hide_D ffbd3eb38a 집합장 NPC 삭턴이 실행되지 않는 문제 수정 2018-09-18 02:25:03 +09:00
Hide_D 893f063ffa 통합 제의 임시 삭제 2018-09-18 02:15:48 +09:00
Hide_D d3dccd3a8e 집합장 턴을 그나마 확인할 수 있도록 삭턴 조정 2018-09-18 02:02:26 +09:00
Hide_D aeb5e93548 집합장은 턴이 항상 풀로 차도록.. 2018-09-18 02:01:55 +09:00
Hide_D 998cf86d1a 부대장 시작 도시를 랜덤으로 2018-09-18 01:56:32 +09:00
Hide_D 4248e6ee89 NPC 부대장 버그 수정 2018-09-18 01:51:28 +09:00
Hide_D eba2bb33bb 부대장 번호 버그 수정 2018-09-18 01:47:48 +09:00
Hide_D 3d61dad2c7 집합장 명칭을 부대장으로 변경 2018-09-18 01:46:37 +09:00
Hide_D 14966a88c2 부대 탄 사람은 발령 로직에서 최대한 배제 2018-09-18 01:27:30 +09:00
Hide_D a44ea2c791 NPC 부대 생성 버그 수정 2018-09-18 01:18:03 +09:00
Hide_D 7ce1b0a6be 집합장 등장 수식 수정 2018-09-18 00:36:05 +09:00
Hide_D d3d3242e0b 집합장 테스트 2018-09-18 00:29:44 +09:00
Hide_D 44b3c6fb51 reset_token에서 불필요한 명령 제거 2018-09-17 23:06:24 +09:00
Hide_D 8a374e1963 전투 특기 클래스 추가, 2018-09-17 03:31:36 +09:00
Hide_D 51fdc2d920 일단 push 2018-09-17 02:57:44 +09:00
Hide_D f919e6eb43 턴 수행 constraint를 상세하게 분리, argTest 추가. 턴 커맨드 실행용 클래스, ajax 파일 준비 2018-09-16 22:16:08 +09:00
Hide_D 0dfd010685 reset_token에서 불필요한 명령 제거 2018-09-16 17:58:56 +09:00
Hide_D 558e3ab493 턴 표기 방식 대폭 변경 2018-09-16 04:54:17 +09:00
Hide_D 105ddf93e0 동결, 지연인 경우에 한해 커맨드 창의 월 표시가 다르게 되던 문제 수정.
addTurn, subTurn, cutTurn 등에서 밀리초 표기 개선
2018-09-16 04:52:13 +09:00
Hide_D a15be024a6 Auction에서 구형 Ymd his 변경 2018-09-16 04:41:00 +09:00
Hide_D b10cf6e461 서버의 분턴 변경시 '정확히' 현재 턴에 비례해서 변경되도록 변경 2018-09-16 04:38:06 +09:00
Hide_D 71d2102c4c 랜덤 턴에서 '소수점'을 다룸 2018-09-16 04:18:22 +09:00
Hide_D eece42480a TimeUtil 리팩토링 2018-09-16 04:14:22 +09:00
Hide_D 0e9de6e1bb TimeUtil을 소수점 시간을 고려할 수 있도록 수정 2018-09-16 03:54:24 +09:00
Hide_D 178e0c4840 정장, 선정 커맨드 문제로 명성,계급 반영 위치 이동 2018-09-15 03:49:08 +09:00
Hide_D 7232b0e48e 기술연구의 calcBaseScore는 상업 투자 것을 가져오기로 2018-09-15 03:44:10 +09:00
Hide_D 732528ce85 내정 커맨드 버그 수정, 정착장려, 주민선정 추가, RemainCityTrust 추가, succ -> success 2018-09-15 03:42:09 +09:00
Hide_D 7b71a1cf20 phan 타겟 버전 변경 2018-09-15 02:52:40 +09:00
Hide_D f9d45e05a9 필요없어진 gennum2 삭제. gennum 재연산 2018-09-15 02:51:33 +09:00
Hide_D 1eafc96b35 사용되지 않는 chemi 제거 2018-09-15 02:43:24 +09:00
Hide_D 7520a21b43 totaltech, tech를 float tech로 일원화, NPC가 기술레벨 10을 넘으면 기연 안하는 버그 수정 2018-09-15 02:37:11 +09:00
Hide_D 0e244c52e9 기술연구 추가 2018-09-15 01:53:17 +09:00
Hide_D 8fb48127fe 내정턴 성공 확률 계산을 실패->성공->일반에서 성공->실패->일반으로 변경 2018-09-15 01:33:44 +09:00
Hide_D 39ff1921ec func_process 이전 코드 분리 2018-09-15 00:59:51 +09:00
Hide_D 7c470dcd24 기본 내정턴을 클래스 기반으로 가능하도록 수정 2018-09-15 00:57:58 +09:00
Hide_D bd44e24398 농상치성수 내정 코드 구현 2018-09-15 00:40:24 +09:00
Hide_D 96b8b8fd07 BaseCommand에 '대상이 지정되지 않아' 대략적으로 가능성을 추측해야하는 경우 추가 2018-09-15 00:39:03 +09:00
Hide_D 2a461e53b1 General의 통합 interface 간소화 2018-09-15 00:38:28 +09:00
Hide_D a1102599d7 농지 개간, 상업 투자를 외부 커맨드로 연결 2018-09-14 02:35:27 +09:00
Hide_D 8c491201df 모 징병 코드의 uniqueItem을 uniqueItemEx로 변경 2018-09-14 02:28:05 +09:00
Hide_D 9139582ecd 농지개간, 상업투자 구현, General 클래스로 checkStatChange 이동, uniqueItemEx 추가(및 재구현) 2018-09-14 02:26:41 +09:00
Hide_D 262f50cdeb 119 코드에서 $connect 제거 2018-09-14 00:58:55 +09:00
Hide_D 177b5ea7ac 상업투자 구현 중 2018-09-13 03:02:51 +09:00
Hide_D 7b3144b76a General에 iActionTrigger 활성화 2018-09-13 02:38:27 +09:00
Hide_D 118877534d getPersonalityClass 추가 2018-09-13 02:21:42 +09:00
Hide_D 4566f2c172 전략 관련 보정 함수 명 변경 2018-09-13 02:10:37 +09:00
Hide_D 62aa4ae53d 은둔 보정 수정 2018-09-13 01:52:36 +09:00
Hide_D b35b231d1a 상업투자 구현 중 2018-09-13 01:43:44 +09:00
Hide_D d981265f12 trigger 타입에서 $tunType을 한글로 변경. 성격 추가. 계략 성공 확률을 onCalcDomestic으로 통합. 2018-09-13 01:43:32 +09:00
Hide_D 145a6636ca 천통시 모든 국가 등재 장수의 이름이 9글자 인 경우 발생하는 버그 수정 2018-09-12 01:46:16 +09:00
Hide_D 8192674948 메뉴 아이템 길이 버그 2018-09-12 01:16:17 +09:00
Hide_D 1efef1fdcd Merge branch 'devel' into ng_turn 2018-09-12 00:54:48 +09:00
Hide_D 5655568070 meta keyword 추가 2018-09-12 00:35:50 +09:00
Hide_D 0ac08df532 sitemap을 위하여 메뉴를 php에서 직접 출력하도록 변경 2018-09-12 00:12:32 +09:00
Hide_D 26f3f320b8 robots.txt 재등록 2018-09-11 23:50:29 +09:00
Hide_D cffbfc0f04 로봇에 대문자 들어가서 삭제 2018-09-11 23:50:16 +09:00
Hide_D 190769569c Robots.txt 설명 추가 2018-09-11 23:48:02 +09:00
Hide_D 6c28f0e213 대문에 meta 태그 추가 2018-09-11 23:03:10 +09:00
Hide_D 77ada220d5 머지 2018-09-11 21:40:07 +09:00
Hide_D a7872d4c33 refresh_token 변수가 잘못된 것 수정 2018-09-11 11:13:37 +09:00
Hide_D c523711577 access token 체크용 디버그 2018-09-11 11:08:37 +09:00
Hide_D 9a5d5a75ed 로그인 인증 버그 체크 2018-09-11 10:55:53 +09:00
Hide_D f8a5ce44cf 로그인 인증 디버깅용 코드 추가 2018-09-10 23:12:27 +09:00
Hide_D 49e5e3b66e 로그인 토큰을 제대로 못 받은 경우 추가 2018-09-10 23:07:44 +09:00
Hide_D b315d80838 createOTP 반환형 버그 2018-09-10 01:49:11 +09:00
Hide_D cebc8b77bf 세션 로그인시 oauth token 값이 제대로 저장 안되는 버그 수정 2018-09-10 01:09:55 +09:00
Hide_D 18055ce244 인증시 로그아웃이 바로 풀리는 버그 수정 2018-09-10 00:38:06 +09:00
Hide_D bdbb81cbd7 IE에서 인증이 이상한 문제 해결 2018-09-10 00:35:59 +09:00
Hide_D 3e5eb9cf2d 토큰 시간 초과시 즉시 로그아웃 되도록 변경 2018-09-10 00:22:57 +09:00
Hide_D 338f309f47 Merge branch 'kakao_login' into devel 2018-09-09 23:58:51 +09:00
Hide_D 58d4000359 oauth 인증중 token_valid_until만 table column으로 분리 2018-09-09 23:57:26 +09:00
Hide_D fb7b6ba7e5 5일이 지난후 로그인 토큰을 미리 초기화 가능하도록 수정 2018-09-09 23:18:23 +09:00
Hide_D 5956c8cb84 메인 페이지에 '비밀번호 초기화' 추가 2018-09-09 21:53:00 +09:00
Hide_D 75619befef 카카오 로그인 작업 개선 2018-09-09 21:16:44 +09:00
Hide_D 1596269848 카카오 로그인용 디버깅 코드 제거 2018-09-09 20:22:34 +09:00
Hide_D 7737cdd4d5 카카오 로그인 초기 구현 2018-09-09 20:19:00 +09:00
Hide_D 4620b93752 반계에 '동그라미' 오타 제거 2018-09-09 15:54:17 +09:00
Hide_D 0d7c5d898d 성벽 상대로 '혼란' 계략을 사용하지 않는 버그 수정 2018-09-08 12:33:41 +09:00
Hide_D a6a2c77416 운영자 찬스 수정 2018-09-07 02:06:13 +09:00
Hide_D 4b4fc84d66 운영자 찬스2 2018-09-07 02:04:50 +09:00
Hide_D 4ef725106c 운영자 찬스 2018-09-07 02:03:37 +09:00
Hide_D a1988aa18c 불가능한 커맨드일 때 '불가' 표기 추가 2018-09-07 00:45:38 +09:00
Hide_D 0fc7c457bf customCSS를 조금 더 안전하게 적용 2018-09-06 23:38:47 +09:00
Hide_D 16e219a629 왕조 일람의 '현재'에 대한 자세히 보기를 삭제 2018-09-05 23:39:16 +09:00
Hide_D 36cbd21101 내정턴 준비 2018-09-05 01:28:58 +09:00
Hide_D 63ea8500b6 통합 안되는 버그 수정 2018-09-04 15:48:18 +09:00
Hide_D 0ae4fc1113 외교 커맨드 수정 2018-09-04 01:39:58 +09:00
Hide_D 661275c934 외교 커맨드 수식 오류 수정 2018-09-04 01:33:21 +09:00
Hide_D e392207c5a 외교 커맨드 수식 오류 수정 2018-09-04 01:30:06 +09:00
Hide_D 1529913ae4 내특을 int에서 string으로 변경 2018-09-03 02:07:41 +09:00
Hide_D be35cac6ae 내 정보에서 수비, 토너먼트가 즉시 반영되지 않는 버그 수정 2018-09-03 01:09:03 +09:00
Hide_D 9c15dbd673 내 정보에서 수비, 토너먼트가 즉시 반영되지 않는 버그 수정 2018-09-03 01:08:42 +09:00
Hide_D 1301b37901 내특을 iActionTrigger로 구현 2018-09-03 01:03:51 +09:00
Hide_D 1fe3bfd0f3 onCalcDomesticTurnScore 구조 변경 2018-09-02 23:11:07 +09:00
Hide_D c216c6d8ae 국가 성향 증가/감소 기본 구현 완료 2018-09-02 23:02:12 +09:00
Hide_D 8082eb2dec 치안, 수성, 민심까지 반영 완료 2018-09-02 22:50:25 +09:00
Hide_D c56ee45397 계략 확률, 전략턴, 기술 반영 2018-09-02 22:19:38 +09:00
Hide_D 2873856a63 금수입, 살수입 반영 2018-09-02 22:04:08 +09:00
Hide_D 49adfc9675 onCalcDomesticTurnScore 변경 TriggerNationType에서 숫자 id 제거 2018-09-02 21:57:44 +09:00
Hide_D 476de90ca7 국가 성향 converter를 TriggerNationType으로 통합 2018-09-02 21:37:23 +09:00
Hide_D 5e0834b0c6 메인 페이지 width 일부 수정 2018-09-02 21:00:05 +09:00
Hide_D fcd04032f7 commandlist 가로로 짤리는 몇몇 유저용 수정 2018-09-02 20:55:47 +09:00
Hide_D 27295d69c3 getNationTypeList 변경 2018-09-02 20:54:32 +09:00
Hide_D e8dab58dec nation type을 char로 변경하고 해당하는 iActionTrigger 추가 2018-09-02 19:52:04 +09:00
Hide_D 0fec47cbff ActionTrigger 초안 추가 2018-09-02 19:51:48 +09:00
Hide_D 3ada2df618 LazyVarUpdater를 활용하는 General 클래스 추가 2018-09-02 19:51:17 +09:00
Hide_D b8445347d9 명성에 따른 보정치 함수 추가 2018-09-02 19:50:50 +09:00
Hide_D 844d394b14 updateVar 정리 2018-09-02 19:50:31 +09:00
Hide_D 0a888b0d0e 범용성을 목적으로 LazyVarUpdater를 분리 2018-09-02 17:25:04 +09:00
Hide_D e7ed58ea2b 구버전 전투 코드 삭제 2018-09-02 17:18:05 +09:00
Hide_D 65241b1038 잘못된 rate->trust 변경 복구 2018-09-02 16:05:44 +09:00
Hide_D 43f561ce11 도시의 민심을 int에서 float으로 변경하고 명칭을 rate에서 trust로 변경 2018-09-02 16:03:04 +09:00
Hide_D e74d042dcf 부대 탈퇴시 확인 창이 정상적으로 뜨지 않는 버그 수정 2018-09-02 14:19:17 +09:00
Hide_D 7bab771555 contraint 일괄 체크 함수 추가 2018-09-02 14:18:59 +09:00
Hide_D fb55312056 부대 탈퇴시 확인 창이 정상적으로 뜨지 않는 버그 수정 2018-09-02 14:18:44 +09:00
Hide_D 940c615458 도시명 표기시 ==== 기호 제거 2018-09-02 14:15:24 +09:00
Hide_D e4cfebb044 contraint 추가 2018-09-02 13:46:57 +09:00
Hide_D cf443e8531 초기 constraint 지정 2018-09-02 13:17:26 +09:00
Hide_D 7f8c339c0f 이전 시간대에 대해 리셋 가능하지 않도록 변경 2018-08-31 20:36:59 +09:00
Hide_D e78dc083e3 customCSS 추가
장수 아이콘에 generalIcon 클래스 추가
2018-08-31 20:25:10 +09:00
Hide_D df69ebf90e 전투 시뮬레이터에서 대미지 범위 표기 2018-08-31 19:32:56 +09:00
Hide_D f23b87c334 글꼴 크기 범위 추가 2018-08-30 22:06:37 +09:00
Hide_D 73a885a79e Merge branch 'devel' of ssh://storage.hided.net:2525/devsam/core into devel 2018-08-30 22:02:58 +09:00
Hide_D af544ab7c9 에디터 변경 2018-08-30 22:02:51 +09:00
Hide_D 45e3aeaed4 원조시 특정 경우에 쌀 소모를 줄일 수 있는 버그 수정 2018-08-30 11:51:02 +09:00
Hide_D d7b2272a20 증축 시 쌀 2000이 아닌 0 기준으로 계산하는 버그 수정 2018-08-30 11:49:37 +09:00
Hide_D 9460291eef 천도 시 쌀이 2000 미만이어도 가능한 버그 수정 2018-08-30 11:49:06 +09:00
Hide_D 37f86a7622 장수 일람 연동 코드 버그 수정 2018-08-30 09:08:19 +09:00
Hide_D 593ebd3d6e 폰트 크기 변경에 대해서 즉시 반영이 되지 않는 버그 수정 2018-08-30 03:04:05 +09:00
Hide_D c9788c31d3 글꼴 크기 커스터마이징 완료 2018-08-30 02:41:58 +09:00
Hide_D 21744c6880 에디터 글꼴 크기 커스터마이징 2018-08-30 02:12:48 +09:00
Hide_D c6cc92dbdf GUI 에디터 추가 옵션 2018-08-30 01:56:47 +09:00
Hide_D 613425855d gui 에디터 추가 2018-08-30 01:25:45 +09:00
Hide_D e2ee292e47 스탯 분류 방식 변경 2018-08-29 20:36:43 +09:00
Hide_D 1f6e7e06da 네임스페이스 버그 해결 2018-08-29 15:04:44 +09:00
Hide_D e8b3132e18 NPC 네임스페이스 버그 해결 2018-08-29 15:03:43 +09:00
Hide_D 8d6aa28af4 성벽 공격 로그 수정 2018-08-28 21:56:33 +09:00
Hide_D 1548ef0aa3 '성인이 되어 등장' 시 전콘이 안뜨는 문제 해결 2018-08-28 20:36:46 +09:00
Hide_D d1bf893b4f 애니 집결 시나리오 변경 2018-08-28 20:29:42 +09:00
Hide_D 2fd2a3a6eb 의병 고용, 인재 탐색시 기본 변종에 0 코드가 없는 경우 수정 2018-08-28 20:17:43 +09:00
Hide_D 3a4103ac60 튜토리얼 버튼을 전투 시뮬레이터로 변경 2018-08-28 20:13:54 +09:00
Hide_D 604d85f894 구버전 시뮬레이터 삭제 2018-08-28 13:22:17 +09:00
Hide_D 86a24ae44b 국가에는 escape가 되어있으므로 메시지 템플릿에 2중 escape는 필요하지 않음 2018-08-28 01:49:25 +09:00
Hide_D 4f926b3746 이미지 출력시 주소에 빈칸이 있는 경우 안보이는 문제 해결 2018-08-27 23:39:58 +09:00
Hide_DandGogs abcf7dfc97 Merge branch 'devel' of cappu/core into devel 2018-08-27 23:31:51 +09:00
cappu 6464f741e4 테스트 겸 스탯업데이트 2018-08-27 23:17:31 +09:00
Hide_D aab4ee2f30 전투 시뮬레이터를 포함한 코드 적용 2018-08-27 21:11:05 +09:00
Hide_D 845a2c63c9 계략수비 시 전특 징병의 통솔이 반영되지 않는 버그 수정 2018-08-27 17:46:43 +09:00
Hide_D b380f2d804 계략시 '징병' 전특의 통솔 상승을 받지 못하는 버그 수정 2018-08-27 17:43:53 +09:00
Hide_D 6a32606762 화계시 도시 내정이 반영 안되는 버그 수정 2018-08-27 17:39:05 +09:00
Hide_D de2ef2033d 화계시 도시 내정이 반영 안되는 버그 수정 2018-08-27 17:38:08 +09:00
Hide_D e9d5380eba 단어 수정 2018-08-27 13:53:07 +09:00
Hide_D e9e9a69cec 시뮬레이터 UI 일부 수정 2018-08-27 13:52:51 +09:00
Hide_D 15b9cecfc6 시뮬레이터 숙련도 반영 안되는 버그 수정 2018-08-27 13:47:51 +09:00
Hide_D 665a8cab31 불러오기시 json을 확장자로 지정 2018-08-27 03:13:34 +09:00
Hide_D 434468ca65 전투 시뮬레이터 모두 저장/모두 불러오기 구현 2018-08-27 03:08:35 +09:00
Hide_D 44c59f2236 전투 시뮬레이터 기본 기능 구현 완료 2018-08-27 02:21:45 +09:00
Hide_D 81d12ce928 전투 시뮬레이션 구현 (동작) 2018-08-27 01:23:45 +09:00
Hide_D dd778d5c3a 수비시 국가 성향이 공격국으로 지정되는 버그 수정 2018-08-27 00:18:50 +09:00
Hide_D 60ef249b5e 전투 시뮬레이터 구현 2018-08-27 00:18:19 +09:00
Hide_D 9e687a34cc 전투 순서 버그 수정 2018-08-26 23:29:15 +09:00
Hide_D 7889c429d9 전투 종료시 로그 순서 변경 2018-08-26 23:25:47 +09:00
Hide_D 1da3623c03 Revert "전투 종료 시 뜨는 로그 순서 변경"
This reverts commit 568e1b2923.
2018-08-26 23:23:06 +09:00
Hide_D 8ed76b4bd7 쌀 소모에 '명성 버프/디버프' 성격이 적용되는 기존 버그 수정 2018-08-26 23:19:21 +09:00
Hide_D 568e1b2923 전투 종료 시 뜨는 로그 순서 변경 2018-08-26 23:19:09 +09:00
Hide_D bc92c2e8c4 수비 순서대로 정렬 버튼 활성화 2018-08-26 23:16:42 +09:00
Hide_D 3f63440b93 쌀 소모에 '명성 버프/디버프' 성격이 적용되는 기존 버그 수정 2018-08-26 23:11:19 +09:00
Hide_D fca433f447 전투 종료 시 뜨는 로그 순서 변경 2018-08-26 22:59:14 +09:00
Hide_D b166f2a469 시뮬레이터 전투 준비 2018-08-26 22:32:37 +09:00
Hide_D 0a9537ab07 ajax 쿼리 validation 종료 2018-08-26 22:31:14 +09:00
Hide_D 08417f6f41 계략 실패 계수가 거꾸로 적용되는 버그 수정 2018-08-26 20:29:59 +09:00
Hide_D 632e62e5e3 전투 시뮬레이터 구현 중 2018-08-26 20:29:42 +09:00
Hide_D 2146db9600 계략 실패 계수가 거꾸로 적용되는 버그 수정 2018-08-26 20:29:32 +09:00
Hide_D c93fa92c7d 전투 시뮬레이터 추가 구현 2018-08-26 20:01:08 +09:00
Hide_D f594d594d3 국가 성향 버그 수정 2018-08-26 18:25:14 +09:00
Hide_D c2bd6bcce8 국가 성향 출력 버그 수정 2018-08-26 18:24:35 +09:00
Hide_D 8d84ccd2cc 국가 성향이 제대로 등록되지 않는 버그 수정. 시뮬레이터 구현 2018-08-26 18:19:27 +09:00
Hide_D 52875fb7fa 전투 시뮬레이터 로컬 기능 구현 2018-08-26 17:20:47 +09:00
Hide_D 119cf123fe 전투 시뮬레이터 추가 구현 2018-08-26 04:54:43 +09:00
Hide_D b90d61dc15 전투 시뮬레이터 구현 중 2018-08-25 11:27:29 +09:00
Hide_D 40f35f0809 전투 시뮬레이터 추가 구현 2018-08-25 11:25:34 +09:00
Hide_D b9a8202762 전투 시뮬레이터 UI 추가 구현 2018-08-25 11:15:33 +09:00
Hide_D ef17f7ba2c 전투 시뮬레이터 작업 중 2018-08-24 03:46:21 +09:00
Hide_D 81bb511c07 전투 시뮬레이터 틀 작성 중 2018-08-24 01:09:17 +09:00
Hide_D 400d21cdc5 장수 생성시 능력치 덧셈이 이상한 버그 수정 2018-08-23 20:26:23 +09:00
Hide_D 7a31b57667 계략 시 수비 장수를 무시하는 버그 수정 2018-08-23 19:26:15 +09:00
Hide_D 5fdea3ce2b Merge branch 'devel' into battle_simulator 2018-08-23 18:45:32 +09:00
Hide_D e11d9f0e5c 유니크 훈련,사기 템에서 훈련, 사기가 영구적으로 오르는 버그 수정 2018-08-23 16:21:18 +09:00
Hide_D 1cb1ef0fea 도시 점령시, 승수, 사기가 추가로 오르는 버그 수정 2018-08-23 16:10:49 +09:00
Hide_D fe5a3f9d5a 파일 준비 2018-08-23 16:07:11 +09:00
Hide_D 29bb3df160 탈취 확률 버그 수정 2018-08-23 01:53:00 +09:00
Hide_D 2773bf9888 NPC가 기본 병종만 뽑는 버그 수정 2018-08-23 01:46:45 +09:00
Hide_D 1941cdf9cc 장수 생성 시 종능 부족하면 경고창 띄움 2018-08-23 01:07:25 +09:00
Hide_D edfced294a 수뇌이면 감찰부 상세 로그 표기 2018-08-22 15:27:44 +09:00
Hide_D 836f6dffd0 계략 로그에서 장수 부상 수치도 강조 2018-08-22 15:23:46 +09:00
Hide_D c437f4e2c1 민심 깎이는 로그에 반올림 적용 2018-08-22 15:22:20 +09:00
Hide_D 6787279542 전투 계략 실패 색상 버그 수정 2018-08-22 15:12:08 +09:00
Hide_D f123a17fcc 계략에 로그 추가 2018-08-22 15:11:29 +09:00
Hide_D a4ffe4e16c 탈취 버그 수정 2018-08-22 14:52:09 +09:00
Hide_D a145562535 탈취 성공시 일부는 장수가 소유 2018-08-22 14:49:15 +09:00
Hide_D f186441900 계략이 항상 성공하는 버그 수정 2018-08-22 14:43:01 +09:00
Hide_D abdcf40aad 탈취 버그 수정 2018-08-22 14:37:48 +09:00
Hide_D e172219c2a 탈취 버그 수정 2018-08-22 14:36:52 +09:00
Hide_D 4521711106 계략 버그 수정 2018-08-22 14:31:37 +09:00
Hide_D f81e249a47 계략시 소모성 아이템이 소모되지 않는 버그 수정 2018-08-22 14:29:27 +09:00
Hide_D 369aef624f 계략 버그 수정 2018-08-22 14:21:53 +09:00
Hide_D 3925a92d84 계략 버그 수정 2018-08-22 14:20:49 +09:00
Hide_D 27d09aab61 계략 버그 수정 2018-08-22 14:18:30 +09:00
Hide_D bfcdeb069f 계략 시전 버그 수정 2018-08-22 14:16:56 +09:00
Hide_D b1b3afa073 계략 커맨드 리팩터링 2018-08-22 14:09:24 +09:00
Hide_D ef79553121 전투 중 사기 증가가 제대로 반영되지 않는 버그 수정 2018-08-22 02:44:59 +09:00
Hide_D 4d4cb59b80 병력의 소집해제가 0분 0초가 아닌 '본인의 턴 실행 직전'에 실행되도록 변경 2018-08-22 02:18:55 +09:00
Hide_D 20935af299 보급 끊긴 곳에 대한 계략 동작 변경 2018-08-22 02:05:24 +09:00
Hide_D 79d1c61494 무한 발동 가능한 사령턴 커맨드의 명성,계급치 증가 삭제 2018-08-22 01:51:11 +09:00
Lee 5c40b84c8c Revert "Revert "사스 권한 테스트겸, camelCase 적용""
This reverts commit 415791dddd.
2018-08-21 18:07:56 +09:00
Lee 415791dddd Revert "사스 권한 테스트겸, camelCase 적용"
This reverts commit a5be15e453.
2018-08-21 18:07:05 +09:00
Lee a5be15e453 사스 권한 테스트겸, camelCase 적용 2018-08-21 18:03:55 +09:00
Hide_D 9f34b82135 기술 제한이 항상 걸리는 버그 수정 2018-08-21 18:02:02 +09:00
Hide_D 3d88ecdeed 성벽 전투시 떨어지는 내정 수치 수정 2018-08-21 16:41:31 +09:00
Hide_D 3a35c84b57 성벽 공격시 떨어지는 내정수치 수정 2018-08-21 16:35:37 +09:00
Hide_D 69310a2b72 올바르지 않은 성격일 경우 기본 값 설정 2018-08-21 15:43:59 +09:00
Hide_D 8a512f6f19 저지 증가 숙련 변경 2018-08-21 14:59:58 +09:00
Hide_D 8dab02a5e0 툴팁 변경. 저지시 숙련 추가 2018-08-21 14:58:48 +09:00
Hide_D 7217eea23e 징병 전특은 순수 통솔에서 15% 보정 2018-08-21 12:23:19 +09:00
Hide_D 7120bf8d3b 보병 상대 회피율 변경 2018-08-21 11:54:01 +09:00
Hide_D 65718024e5 보병은 상대의 회피를 5%p 감소 2018-08-21 11:51:09 +09:00
Hide_D ef3c2b85f7 견고시 계략 성공 확률 변경 2018-08-21 11:07:28 +09:00
Hide_D 2ca4abcf11 견고 방식 변경 2018-08-21 11:04:27 +09:00
Hide_D 07d02f3abe 수극 사용시 부상 정도 약화 2018-08-21 10:47:47 +09:00
Hide_D 1ad2e62287 전투 로그 중 회피에 오타 수정 2018-08-21 09:29:28 +09:00
Hide_D 74c8e82e02 암행부 병종 표기 버그 수정 2018-08-21 02:24:58 +09:00
Hide_D 98062c24ff 전투 엔진 버그 4차 수정 2018-08-21 02:22:29 +09:00
Hide_D 26b1dbd02b 전투 엔진 버그 3차 수정 2018-08-21 02:01:56 +09:00
Hide_D 720e6b8fbd 운영자가 '지도'에서 도시를 클릭할 수 있도록 변경 2018-08-21 01:32:00 +09:00
Hide_D 52d82b141f 전투 엔진 버그 2차 수정 2018-08-21 01:22:18 +09:00
Hide_D e6595a5e77 전투 엔진 버그 1차 수정 2018-08-21 00:53:00 +09:00
Hide_D a478200549 전투 종료 코드 구현(마무리?) 2018-08-20 23:57:36 +09:00
Hide_D faf79e4331 전투 종료 코드 구현(마무리?) 2018-08-20 22:26:34 +09:00
Hide_D 3d28ef1386 전투 종료 코드 구현 2018-08-20 22:20:59 +09:00
Hide_D f188bc0d09 일부 게임 유틸리티 함수 간소화 2018-08-20 20:21:26 +09:00
Hide_D e003cd5276 전투 종료 코드 구현 2018-08-20 17:24:16 +09:00
Hide_D e9c965ff7f 전투 구현 반영 2018-08-20 03:48:54 +09:00
Hide_D afdfcdd465 전투 구현 반영 2018-08-20 03:46:59 +09:00
Hide_D ae8ccfe3a1 전투 구현 반영 2018-08-20 03:14:56 +09:00
Hide_D 1e01f2a749 전투 구현 반영 2018-08-19 03:47:28 +09:00
Hide_D 66adfb99b4 전투 구현 반영 2018-08-19 03:45:43 +09:00
Hide_D f59e21d20e 전투 구현 반영 2018-08-19 03:30:47 +09:00
Hide_D d54c128ad6 치료가 '필살', '회피'와 중복 가능. 전특과 의술 아이템의 치료 효과 증폭 2018-08-19 03:00:08 +09:00
Hide_D 689b48af78 전투 구현 반영 2018-08-19 02:57:25 +09:00
Hide_D c41dbf3f4c 전투 구현 반영 2018-08-19 02:33:42 +09:00
Hide_D 434842c22b 전투 코드 반영 2018-08-18 23:18:40 +09:00
Hide_D be65031af4 전투 구현 반영 2018-08-18 22:21:25 +09:00
Hide_D 537416190e 전투 코드 반영 2018-08-18 21:24:02 +09:00
Hide_D 47478f3899 성벽 전투시 깎이는 성벽이 기존 대비 1/2 2018-08-18 20:46:30 +09:00
Hide_D d76d1f913a 코드 중간 반영 2018-08-18 20:45:59 +09:00
Hide_D 4bc78dba1e 전투 엔진 중간 반영 2018-08-18 19:04:13 +09:00
Hide_D 0cca2d5bda 유틸리티 함수 추가 2018-08-18 16:59:34 +09:00
Hide_D bc33e6fe66 충차 성벽 보정 버그 수정 2018-08-18 15:18:40 +09:00
Hide_D 40547088f6 CriticalScore2, getCrew 이동 2018-08-18 14:02:53 +09:00
Hide_D ce8ab00a37 전투 추가 구현 2018-08-18 10:53:04 +09:00
Hide_D 8fbbd15dbe 새 전투 엔진 중간 반영 2018-08-18 02:26:27 +09:00
Hide_D 3a805a7fcf 전투 파일 추가 작성중
전투 코드 추가 준비

추가 구현
2018-08-14 23:11:03 +09:00
Hide_D a2f853fb76 새 전투 엔진 준비 2018-08-12 22:23:53 +09:00
Hide_D 8de42c3b25 수극 사용 로그 버그 수정 2018-08-12 13:25:24 +09:00
Hide_D 534684a796 전투 공식 핫픽스 2018-08-11 08:49:23 +09:00
Hide_D 971f53c7bf 전콘 용량을 30KB로 증가 2018-08-10 19:58:31 +09:00
Hide_D 4abe8ae005 루드라사움 지도 업데이트 2018-08-10 02:22:31 +09:00
Hide_D 55d6414497 루드라사움 스탯 수정 2018-08-08 03:47:04 +09:00
Hide_D ed9ccca134 루드라사움 지도 업데이트 2018-08-08 03:36:00 +09:00
Hide_D 1296f0fe23 루드라사움 패치 2018-08-08 03:21:42 +09:00
Hide_D 5e2d8ef1e7 엑셀 파일에 빙의 불가 장수 목록 개념 추가 2018-08-08 02:48:17 +09:00
Hide_D 1a7a41e131 빙의가 불가능한 general_neutral 항목 추가 2018-08-08 02:45:41 +09:00
Hide_D 10335fbf16 이민족 코드를 5에서 9로 이동. 그에따른 추가 코드 변경 2018-08-08 02:31:49 +09:00
Hide_D f1243e3d5b 토너먼트 중복 참가 방지. 자동 참가시 돈을 받지 않음 2018-08-08 01:54:57 +09:00
Hide_D d5214d616c 성벽을 때렸을 때 차숙이 오르지 않는 버그 해결 2018-08-07 04:00:31 +09:00
Hide_D 5a167b05f0 명성 / 계급 계산식을 for loop 없앰 2018-08-06 01:23:39 +09:00
Hide_D 302c09c4cb 물자 조달로 올라가는 명성, 계급의 양을 다른 내정과 비슷하게 변경 2018-08-06 00:46:22 +09:00
Hide_D c4fc6856cd 지도 툴팁 line break 없앰 2018-07-30 03:23:01 +09:00
Hide_D f1ec28c663 지도 툴팁 너비 수정 2018-07-30 02:13:46 +09:00
Hide_D 2d2f177773 루도라사움 지도 위치 수정 2018-07-30 02:11:51 +09:00
Hide_D 2504a03211 지도 출력 변경 2018-07-30 02:07:02 +09:00
Hide_D 467d03d0e5 지도를 변경 가능하도록 업데이트 2018-07-30 02:00:53 +09:00
Hide_D d5581eb8b8 j_map_history에서 year가 0인 경우 2018-07-30 01:47:33 +09:00
Hide_D ca18648917 장수 생성시 기본 타입 2018-07-30 01:42:42 +09:00
Hide_D 0eada14ea9 연감용 루드라사움 지도 추가 2018-07-30 01:34:39 +09:00
Hide_D adaa1592f8 버그 수정 2018-07-30 01:26:12 +09:00
Hide_D 5bd0db2257 루드라사움을 위한 시스템 보정 2018-07-30 00:37:39 +09:00
Hide_D 3d462c9948 에러메시지를 VSCode에서 바로 이동하기 쉽도록 변경 2018-07-29 23:43:36 +09:00
Hide_D 39450d9e89 루드라사움 지도 연결 수정 2018-07-29 23:41:35 +09:00
Hide_D 418213dbfc Neo 루드라사움 준비 2018-07-29 23:26:19 +09:00
Hide_D 83cfe9fdb5 부대편성 버그 수정 2018-07-29 16:20:43 +09:00
Hide_D dbf7daa17e 부대 편성 일부 수정 2018-07-29 13:57:10 +09:00
Hide_D cab159921d 암행부 추가 확장 2018-07-28 02:38:19 +09:00
Hide_D 421765c40d 암행부 너비 추가 수정 2018-07-28 02:33:42 +09:00
Hide_D e8e5c4f023 암행부 턴 표기 수정 2018-07-28 02:02:50 +09:00
Hide_D f69d90276e IE11 모병창 UI 버그 수정 2018-07-28 01:58:35 +09:00
Hide_D 20aaf3a319 IE 메인페이지 깨짐 일부 수정 2018-07-28 01:38:53 +09:00
Hide_D e693541c88 submit_btn 버그 수정 2018-07-28 01:32:00 +09:00
Hide_D e3ae63eb4a 모/징병 페이지 변경 2018-07-28 01:24:23 +09:00
Hide_D b5bf1beffa 로그인 페이지를 모바일에서도 조금 더 잘보이게 변경 2018-07-27 18:56:01 +09:00
Hide_D 7d8fea286a 로그인 페이지가 약관 등에 가리지 않도록 변경 2018-07-27 18:47:48 +09:00
Hide_D 7c4fefe672 1턴에 어쩌다 휴식턴이 입력되는 버그 수정 2018-07-27 18:14:16 +09:00
Hide_D 238fa407d5 장수 호칭 변경 2018-07-27 03:03:25 +09:00
Hide_D 811218d30c 세력일람 장수 표기순 변경 2018-07-27 02:39:26 +09:00
Hide_D 46eed584fb Merge branch 'devel' of ssh://storage.hided.net:2525/devsam/core into devel 2018-07-27 02:34:02 +09:00
Hide_D 1a25cccc0b 세력일람 업데이트 2018-07-27 02:33:56 +09:00
Hide_D 2a3ebae4ae 회피 디버그 수정 2018-07-26 17:13:27 +09:00
Hide_D 4acb6304df 전투 디버그 2018-07-26 15:40:46 +09:00
Hide_D 12fabb31f3 전투 회피 코드 디버깅 적용 2018-07-26 15:39:34 +09:00
Hide_D 67d89a2558 foreach reference loop 버그 2018-07-26 00:12:12 +09:00
Hide_D 8253edcf1a 기존 도시/암행부 스크립트 통합. 2018-07-25 23:58:58 +09:00
Hide_D 342242f6e4 서버 관리 창에 에러 로그 보기 버튼 추가 2018-07-23 23:44:48 +09:00
Hide_D 2a9ebeb8dc j_map_history에서 fallback arg 제거 2018-07-23 23:30:53 +09:00
Hide_D 5b3dccff52 Trace의 모든 내용이 나오도록 수정 2018-07-23 23:26:32 +09:00
Hide_D 24746c8395 에러 로그 보기 기능 추가 2018-07-23 23:19:39 +09:00
Hide_D 8df67e8243 에러 로그 업데이트 2018-07-23 22:54:06 +09:00
Hide_D 5df3078125 에러 로그용 클래스 설정 2018-07-23 22:50:22 +09:00
Hide_D 792e9717b2 FileDB 클래스 추가 2018-07-23 22:37:30 +09:00
Hide_D 7b0cffcf30 라이브러리 업데이트 catfan/medoo 추가 2018-07-23 21:27:26 +09:00
Hide_D 3e81a4e3fe NPC 군주의 호전성 추가(?) 2018-07-23 02:56:33 +09:00
Hide_D 8c4dbbfb90 npc attackable 보완 2018-07-23 02:50:58 +09:00
Hide_D 55a2250efc NPC의 선포 대상을 '국력'이 낮은 국가에 더 잘 하도록 변경 2018-07-23 01:49:43 +09:00
Hide_D 4868fa3655 선포 코드를 조금더 직관적으로 수정 2018-07-23 01:28:34 +09:00
Hide_D 5370cbd7a1 징,모병시 민심이 떨어지지 않는 버그 수정 2018-07-22 15:39:53 +09:00
Hide_D 5b69890cae 사령부 휴식 커맨드가 제대로 안보이는 문제 해결 2018-07-22 15:10:37 +09:00
Hide_D 815f440833 연감에 serverID가 잘못된 경우 해결 2018-07-22 03:37:14 +09:00
Hide_D 79e2b5a70b 부대편성의 '집합' 확인 코드가 하드코딩인 부분 수정 2018-07-22 03:28:10 +09:00
revofpla 77de32a64f 필살확률 무조건 최소 50%인 버그 픽스 2018-07-21 13:49:15 +09:00
revofpla 02cd3e66d8 체섭 버그로 인한 핫픽스 1차
- 징병 숙련 100배 문제
 - 모병 비용 2배로 계산 안되는 문제
2018-07-21 13:12:52 +09:00
Hide_D 3503d66773 애니집결 시나리오 번호 변경 2018-07-20 19:53:21 +09:00
Hide_D 46b902a802 애니집결 업데이트 2018-07-20 19:51:11 +09:00
Hide_D fc5e0de386 충차가 1등급 되기만 하면 쓸 수 있던 버그 수정 2018-07-20 10:44:14 +09:00
Hide_D 3d480e950a protected인 자료에 접근해서 발생하는 문제 수정 2018-07-20 10:05:08 +09:00
Hide_D 998d27bd39 버튼 너비 수정 2018-07-20 09:12:37 +09:00
Hide_D 9c199161fe 계정 관리 창 살짝 넓힘 2018-07-20 09:08:04 +09:00
Hide_D 865fe23a64 숙련 단련 버그 수정 2018-07-20 09:01:50 +09:00
Hide_D 7a8cd04447 message 템플릿 버그 수정 2018-07-20 00:06:03 +09:00
Hide_D 340360d024 등용장의 경우에도 누를수 없는 경우 수정 2018-07-19 23:59:27 +09:00
Hide_D 4cbe278bec 추방 버그 수정 2018-07-19 23:13:05 +09:00
Hide_D acdc74969e 외교 서신 레벨 지정 2018-07-19 22:19:26 +09:00
Hide_D 95ac9a215c 리셋 첫 해에는 추방해도 제약 없음 2018-07-19 21:25:00 +09:00
Hide_D d3f6047d3b 임관 권유 메시지 창 2018-07-19 21:03:42 +09:00
Hide_D 1776cfc3a8 relativeYear에 음수 불가 2018-07-19 20:53:46 +09:00
Hide_D c703c48d0f 시작 시 develcost가 0인 버그 해결 2018-07-19 20:50:29 +09:00
Hide_D 3b77fddade Merge branch 'devel' of ssh://storage.hided.net:2525/devsam/core into devel 2018-07-19 20:06:51 +09:00
Hide_D e83559e971 공백지 시나리오에 특기 연령 문제 해결 2018-07-19 20:06:39 +09:00
Hide_D ed243ea56c 전투시 병종 명 버그 수정 2018-07-19 10:59:01 +09:00
Hide_D f3fb9d884c 반복 버튼 키움 2018-07-19 02:33:59 +09:00
Hide_D 027e39a081 Credit 양식 추가 2018-07-19 02:29:03 +09:00
Hide_D 6a6db1a4fc 리셋 시 사령부 Command encode가 제대로 이뤄지지 않았던 버그 수정 2018-07-19 01:42:16 +09:00
Hide_D 3de6687f4e 연감에서도 비교적 빠르게 동작하도록 설정 2018-07-19 01:31:13 +09:00
Hide_D c50642dd95 실시간 맵은 캐싱하도록 처리 2018-07-19 01:21:00 +09:00
Hide_D 283b4f7d00 영웅 난무 220 제목 변경 2018-07-19 00:51:47 +09:00
Hide_D 7906ea7c2e 지도가 들어간 곳에 부트스트랩 추가 2018-07-19 00:46:15 +09:00
Hide_D fa7035510b 연감에 부트스트랩 없는 문제 해결 2018-07-19 00:44:01 +09:00
Hide_D 472db24705 지도에 도시명 켬끔 추가 2018-07-19 00:39:05 +09:00
Hide_D abeba9384f 최대 스탯 표기 변경 2018-07-18 23:44:41 +09:00
Hide_D a7c3f50a08 내 정보 페이지 툴팁 안나오는 문제 2018-07-18 23:14:52 +09:00
Hide_D b010808618 도시 좌표 업데이트 2018-07-18 23:11:02 +09:00
Hide_D 07a4517079 출력 병종 에러 2018-07-18 22:26:15 +09:00
Hide_D b5caa2d6b0 도시 css contain 2018-07-18 22:24:22 +09:00
Hide_D 175744c545 훈련에서 사기 하락 문구 삭제 2018-07-18 16:54:25 +09:00
Hide_D 80fe42c741 천인 강림 극 소형맵 2018-07-18 14:23:12 +09:00
Hide_D a0aed33b3c 훈련시 사기 감소하지 않음 2018-07-18 11:18:33 +09:00
Hide_D 9b9a17ba65 맵 업데이트 2018-07-18 10:46:33 +09:00
Hide_D a4731e612e 호로->사수, 몇몇 소성들 다시 진,수로 롤백 2018-07-18 10:41:06 +09:00
Hide_D bdedb488e4 쿼리 받아오는 것 수정 2018-07-18 09:28:53 +09:00
Hide_D 14989d0088 history 받아오는 버그 수정 2018-07-18 09:28:10 +09:00
Hide_D 7925434603 오타 수정 2018-07-18 09:08:20 +09:00
Hide_D 537ae51750 오타수정 2018-07-18 09:05:36 +09:00
Hide_D 4bcf729a80 버그 수정. 오타 수정 2018-07-18 08:24:09 +09:00
Hide_D de217eb9db 오타 수정 2018-07-18 04:51:19 +09:00
Hide_D 16ac951eae $me 버그 2018-07-18 04:50:17 +09:00
Hide_D a634423266 모병코드 2018-07-18 04:49:30 +09:00
Hide_D c2ce4ab43d 쌀 검사 코드 2018-07-18 04:47:28 +09:00
Hide_D 80c224d43b 징모병창 코스트 2018-07-18 04:44:12 +09:00
Hide_D f3921d130a formattext 2018-07-18 04:41:08 +09:00
Hide_D 63c1c13cd7 gameStor 값 버그 2018-07-18 04:40:18 +09:00
Hide_D 229ecfc6a2 모병창 수정 2018-07-18 04:37:00 +09:00
Hide_D dfd5940d51 징병창 우선 부활 2018-07-18 04:30:54 +09:00
Hide_D d3d3a56d58 징모병창 변수명 에러 2018-07-18 04:18:15 +09:00
Hide_D a7001ff6a2 아이템 return 값 수정 2018-07-18 04:15:28 +09:00
Hide_D a4c583361c 급한대로 도시명 띄움 2018-07-18 04:10:07 +09:00
Hide_D fec6ff29d7 miniche가 최신 버전이 아닌 버그 수정 2018-07-18 03:44:32 +09:00
Hide_D ca1e102949 버그 체크 2018-07-18 03:41:45 +09:00
Hide_D 403d914193 버그 수정 2018-07-18 03:32:47 +09:00
Hide_D 62520fb7fe 미니체 basemap 2018-07-18 03:05:36 +09:00
Hide_D 53c880e9c0 초기 버그 수정 2018-07-18 03:04:59 +09:00
Hide_D badf89c660 영난 1c 2018-07-18 02:58:56 +09:00
Hide_D 5d7f916ee9 도시 정보 업데이트 2018-07-18 02:57:08 +09:00
Hide_D 1f291853d6 credit 링크 추가 2018-07-18 02:31:15 +09:00
Hide_D a45ef44d0f 커스텀 맵 준비 2018-07-18 00:25:51 +09:00
Hide_D 96239aea0b 변수명 통일 2018-07-16 02:56:52 +09:00
Hide_D 4e7d213f19 병종 코드를 GameUnitConst, GameUnitDetail에 기반하도록 변경 2018-07-16 02:54:47 +09:00
Hide_D 8bdfb8a814 병종 테이블에 상성 값 확장 2018-07-16 01:43:11 +09:00
Hide_D 5cd4e0528a 전투 코드 반영 중 2018-07-15 01:46:29 +09:00
Hide_D 70a3b6f65a 징병, 모병 form 수정 2018-07-15 01:01:36 +09:00
Hide_D 3af73b35b8 모병, 징병 코드 재 구현. 능력치 상승/감소 코드 재구현 2018-07-14 22:41:10 +09:00
Hide_D 1d640ab9ce ActionLogger rollback 추가 2018-07-14 18:23:31 +09:00
Hide_D c2c4c63542 현재까지 작업물 보강, 모.징병 페이지 개선 중 2018-07-14 18:17:37 +09:00
Hide_D 4ebd2ba5dc ActionLogger 보강 2018-07-14 18:17:18 +09:00
Hide_D 60f4ad7716 ActionLogger 추가 2018-07-14 17:53:08 +09:00
Hide_D 47594b2cd7 병종값 변경 2018-07-13 00:41:56 +09:00
Hide_D 7911c7473a 병종 테이블에 '병종 타입' 지정, 턴 커맨드를 json array로 변경 2018-07-13 00:12:12 +09:00
Hide_D d75aa7e8dc GameConst에 mapName과 unitSet추가 2018-07-12 01:59:32 +09:00
Hide_D b6cd004117 d_setting 디렉도리 보관 방식 변경 2018-07-12 01:56:46 +09:00
Hide_D 4cd901cf8e 기본 파일 추가 2018-07-12 01:02:28 +09:00
Hide_D fe4d370f60 맵 규격 재 정의 2018-07-12 01:00:24 +09:00
Hide_D d774d8bbd0 새 지도 준비를 위해 커밋 2018-07-12 00:20:43 +09:00
Hide_D f0103356ba 메시지함 높이 고정을 최소 높이로 변경 2018-07-11 23:49:57 +09:00
Hide_D dd38d1ca23 메시지함 사라지는 버그 수정? 2018-07-11 23:04:38 +09:00
Hide_D d6d45fe9cb 도움 주신 분 임시 삭제. 나중에 Credit으로 되살리기로 2018-07-11 22:37:36 +09:00
Hide_D 9e24d08ab6 td tr 되돌려놓음 2018-07-11 22:18:08 +09:00
Hide_D f0b9a8df5f list 일부 수정. tfoot 안에 tr td없는거 수정 2018-07-11 22:17:03 +09:00
Hide_D e8a23f701a 지도 표기에서 box 표기 문제로 일부 수정 2018-07-11 22:04:20 +09:00
Hide_D 46e32154d7 귀병, 환술 설명 수정 2018-07-11 21:53:13 +09:00
Hide_D 359da4026f 장수 성격, 아이템 설명 툴팁 추가 2018-07-11 21:50:01 +09:00
Hide_D 76786882ff tooltip html trim 추가 2018-07-11 20:52:46 +09:00
Hide_D d165dbdca4 특기 없을 때 텍스트 수정 2018-07-11 20:51:13 +09:00
Hide_D 791e8b02c3 특기가 없는 경우에도 tooltip 띄우도록 2018-07-11 17:03:47 +09:00
Hide_D 53c61fe2d0 빙의 시에도 전특 표기 2018-07-11 03:27:27 +09:00
Hide_D 1eb73eb005 특기 전 페이지에 반영 2018-07-11 03:03:52 +09:00
Hide_D 96c79a4404 특기 마우스 오버 1차 적용 2018-07-11 02:47:31 +09:00
Hide_D 26a8dcafce message form box sizing 변경. 메인 페이지에 bootstrap css 적용 2018-07-11 01:31:59 +09:00
Hide_D bb0575a35d darkly 적용 2018-07-11 01:19:24 +09:00
Hide_D 99e29a586e 툴팁 준비 2018-07-11 01:15:22 +09:00
Hide_D d1af971d9a bootstrap 최신 버전으로 2018-07-11 01:15:02 +09:00
Hide_D dc9c586dc8 공성 전특 버그 수정. 전특 설명을 위한 텍스트 추가 2018-07-11 00:53:10 +09:00
Hide_D f2486e7470 세력도시에서 n장, m장 임명이 불가능한 버그 수정 2018-07-07 05:13:22 +09:00
Hide_D 5364e2008c 구버전 첩보 마이그레이션시 지도 표기 버그 수정 2018-07-07 04:58:19 +09:00
Hide_D 9b4b835c08 첩보를 join '|' 에서 json dict로 변경 2018-07-07 04:39:44 +09:00
Hide_D 14d9b0dd31 현재 진행중인 깃수인 경우 장수가 안 죽었으면 안나타나는 문제 해결 2018-07-05 00:24:03 +09:00
Hide_D 51b376add2 왕조일람 버그 수정 2018-07-05 00:12:34 +09:00
Hide_D aad7ddbc04 왕조 일람에 아무것도 없을 때 '현재'가 안보이는 문제 해결 2018-07-05 00:10:33 +09:00
Hide_D 3007f1ba97 왕조 일람에 현재 국가 표시 2018-07-05 00:05:48 +09:00
Hide_D 2b712baa50 메시지 버그 수정 2018-07-03 22:09:07 +09:00
Hide_D b02d5b368d parseJsonPost 기반 동작 포기 2018-07-03 21:35:17 +09:00
Hide_D 0e5b321e58 국가 정보 빈칸 2018-07-03 20:48:34 +09:00
Hide_D 100bb00739 월마다 최대 국력, 최대 병력, 최대 도시 수를 계산하는 코드 추가. ng_old_nations에도 반영 2018-07-03 20:43:14 +09:00
Hide_D 39c774625d nation 테이블에 aux 추가 2018-07-03 20:09:36 +09:00
Hide_D 49606adcf9 왕조일람 임시 갱신 2018-07-03 06:59:27 +09:00
Hide_D 6324563acd 버튼 대체 css 추가. form 일부 제거 2018-07-03 02:55:45 +09:00
Hide_D 1b5d39afcf 명예의 전당 시나리오명 제대로 표기 안되는 문제 해결 2018-07-02 19:45:41 +09:00
Hide_D 21740b76e6 명예의 전당 배경색 오류 수정 2018-07-02 19:15:43 +09:00
Hide_D 19e979769d 빙의 해제시 닉네임 초기화 2018-07-02 03:23:20 +09:00
Hide_D 0f0bea61d0 베팅수익률 오타 2018-07-01 15:34:20 +09:00
Hide_D 97ceaf221c 명장 일람 레퍼런스 값 미표기 문제 해결 2018-07-01 15:30:15 +09:00
Hide_D 4d0808efea 명장일람에서 제약 조건 수정 2018-07-01 15:27:41 +09:00
Hide_D efc287a3b9 회원 가입시 링크 변경 2018-07-01 03:58:47 +09:00
Hide_D 2daef4e9bc 세력도시 스크립트 동작 안하는 문제 해결 2018-07-01 01:35:47 +09:00
Hide_D 6b2b8fd3c2 html 5 비표준 스크립트 제거 2018-07-01 01:28:35 +09:00
Hide_D 3780dbb2bb IE=edge 대소문자 주의 2018-06-30 01:52:07 +09:00
Hide_D 517fe05567 Revert "컬러 프로필 적용"
This reverts commit 4f279c49c8.
2018-06-30 01:32:46 +09:00
Hide_D 4f279c49c8 컬러 프로필 적용 2018-06-30 01:26:23 +09:00
Hide_D 1ed1078979 범장 -> 만능장 2018-06-30 01:18:52 +09:00
Hide_D 46075cf317 확장 스크립트를 위해 태그 일부 정리 2018-06-30 00:28:45 +09:00
Hide_D 87bdd06037 extractMissingPostToGlobals 호환을 위해 server_id 인자명 변경 2018-06-29 16:23:48 +09:00
Hide_D 015487b800 font boosting 약화 2018-06-29 14:46:06 +09:00
Hide_D 95f5375288 뷰포트 추가 지정 2018-06-29 14:41:09 +09:00
Hide_D 5763bd5628 뷰포트 크기 변경 2018-06-29 14:37:30 +09:00
Hide_D 181a7e6f8e 모든 웹 페이지에 viewport 지정 2018-06-29 14:32:59 +09:00
Hide_D cac02fc2e8 기본 폰트 크기 지정 2018-06-29 14:20:20 +09:00
Hide_D f6315a5b46 unset대신 []로 초기화 2018-06-29 09:35:24 +09:00
Hide_D 5caeef134a history 함수 인자 제한 완화 2018-06-29 09:28:58 +09:00
Hide_D b5dacced35 기본 폰트 지정 2018-06-29 09:16:40 +09:00
Hide_D a42387948a 예약 테이블 점검. 스키마 수정 2018-06-29 01:50:28 +09:00
Hide_D a76dc6436f 토너먼트 inf 버그 수정 2018-06-29 01:25:43 +09:00
Hide_D 657900feb6 jquery 버전 업데이트 2018-06-29 01:22:03 +09:00
Hide_D 27f36ca508 Json 에러시 에러 표기하도록 2018-06-29 00:30:05 +09:00
Hide_D bcb8696384 세력일람 코드 변경 2018-06-28 14:16:38 +09:00
Hide_D b4e72d56c7 세력일람 연동 2018-06-28 14:14:56 +09:00
Hide_D 8bd6bc4f60 세력도시 코드 일단 통합 2018-06-28 13:57:21 +09:00
Hide_D 0b20c34fb3 IE에서 카카오 2018-06-28 13:39:58 +09:00
Hide_D 1cdb367081 randBool이 아니라 randF 써서 생기는 버그 수정 2018-06-28 01:57:41 +09:00
Hide_D c879a81a95 천통 안되는 버그 수정 2018-06-28 00:28:00 +09:00
Hide_D 3c47f8c1a4 천통시 저장되는 데이터 변경 2018-06-27 03:43:01 +09:00
Hide_D 0f4b97daf8 버그 수정 2018-06-27 03:05:39 +09:00
Hide_D a086cab252 서버 오픈시 천통국 체크가 이상한 버그 수정 2018-06-27 03:04:54 +09:00
Hide_D 11219a0073 사망, 천통시 장수를 ng_old_generals에 보관 2018-06-27 02:53:58 +09:00
Hide_D 4a609c81ee 왕조 일람에 연감을 볼 수 있도록 통합 2018-06-27 02:12:59 +09:00
Hide_D 8d495051d7 모든 국가 멸망 케이스에 ng_old_nations 백업 추가 2018-06-27 01:55:28 +09:00
Hide_D 734b8a2ddb 천통시 깃수 자동 표기 2018-06-27 01:49:46 +09:00
Hide_D a03a7d5ae9 사소한 코드 수정 2018-06-27 01:34:11 +09:00
Hide_D e40ec7664e 오타 수정 2018-06-27 01:26:02 +09:00
Hide_D b9a0e7f3fa 명전에 0 이하는 안받도록 변경 2018-06-27 01:25:50 +09:00
Hide_D 1001d4bd9d 연감 월 표기 버그 수정 2018-06-27 01:22:16 +09:00
Hide_D b33d39d475 왕조 일람에서 서버 정보와 국가 정보를 보관하도록 변경 2018-06-27 01:14:34 +09:00
Hide_D 5357402bf1 왕조일람 '전체보기' 기능 살림 2018-06-26 23:05:04 +09:00
Hide_D 1539321521 천통 시 왕조 일람용 테이블에 server_id 기록. 연감에 server_id로 이전 연감 조회기능 추가 2018-06-26 23:01:43 +09:00
Hide_D addc8fc404 천통국 정상 추가 2018-06-26 22:45:47 +09:00
Hide_D 44c0601414 명장일람 버그? 2018-06-26 16:27:51 +09:00
Hide_D 33c7dc29da 명장 일람 보정 시도 2018-06-26 16:21:47 +09:00
Hide_D 756b0de34b 명장 일람, 설전 승률 % 표기 오류 2018-06-26 16:18:58 +09:00
Hide_D b5ee605b30 오타 수정 2018-06-26 09:45:15 +09:00
Hide_D a619ca4e72 크롬과 파이어폭스에 최적화 2018-06-26 09:44:26 +09:00
Hide_D b1fe39ccb0 임관 권유문 길이 제한 2018-06-26 04:13:41 +09:00
Hide_D 3b7912e2d5 초반 3년 수뇌 임명 방식 변경 2018-06-26 03:52:17 +09:00
Hide_D 86e29c4579 천통시 재야 장수도 저장 2018-06-26 03:33:56 +09:00
Hide_D 0762ca8e4f ng_games에 시나리오명 남도록 수정 2018-06-26 03:20:57 +09:00
Hide_D 974edf710c chmod 재설정 2018-06-26 03:19:47 +09:00
Hide_D 1c69656d2c 디렉토리 권한 문제 해결 2018-06-26 03:15:38 +09:00
Hide_D bf1575e92b ng_games 누락분 추가 2018-06-26 03:10:50 +09:00
Hide_D 93c8ef0259 schema 값 꼬이는 문제 해결 2018-06-26 03:06:34 +09:00
Hide_D 4c5ed4ce86 천통시에도 ng_old_nations에 데이터가 저장되도록 변경 2018-06-26 03:00:02 +09:00
Hide_D 2fdc8e179e 명장 일람, 명예의 전당 최종 개선 2018-06-26 02:36:20 +09:00
Hide_D f5f06dbd3e 국가 멸망시 국가 정보 백업 2018-06-26 00:47:54 +09:00
Hide_D f707da3601 등용장 및 메시지 일괄 전송 TODO 해결 2018-06-26 00:45:31 +09:00
Hide_D e74851b289 명장 일람, 명예의 전당 코드 재구현. 연감 등에 이전 국가 기록 남기도록 설정 2018-06-26 00:32:43 +09:00
Hide_D 356eb8a8b5 서버 별명에 연월일 추가 2018-06-25 16:08:19 +09:00
Hide_D f7b7acc1d5 왕조 일람 테이블 구조 변경. 2018-06-25 01:53:16 +09:00
Hide_D 64ff1439b9 게임 오픈 시 logs에 서브 디렉토리를 사용하도록 변경 2018-06-25 01:45:23 +09:00
Hide_D 6147e207a1 건국 등 문자열 입력 변경 2018-06-25 00:46:07 +09:00
Hide_D b534da34ad 스페이스 바 등 몇몇 문자열 가능하게 처리 & 문자열 보정 2018-06-24 04:44:34 +09:00
Hide_D c4f5962c7e 국방 표기 변경 2018-06-24 04:18:54 +09:00
Hide_D 330d9650c5 임관 권유 메시지를 템플릿으로 이동 2018-06-24 04:12:19 +09:00
Hide_D 8e26910343 purifier 1차 적용 2018-06-24 03:47:44 +09:00
Hide_D 2add3944d3 html purifier 보강 2018-06-24 02:56:38 +09:00
Hide_D 6031ec2578 포상 계수 조절 2018-06-23 23:49:22 +09:00
Hide_D 69ff5393ef 무지장의 경우에는 쌀 적게 주도록 수정 2018-06-23 22:58:11 +09:00
Hide_D fba0f67181 베팅 표기 오류 변경 2018-06-23 22:55:59 +09:00
Hide_D 3998bddaca npc 발령 로직 변경. 유저 무지장 포상 로직 변경 2018-06-23 22:52:43 +09:00
Hide_D 4645679d47 인사부 조건 검사 순서 변경 2018-06-23 14:36:05 +09:00
Hide_D ead76e2486 적극적 금쌀 교환 2018-06-23 14:22:41 +09:00
Hide_D e4f53b50fd 금쌀 계수 조정 2018-06-23 14:10:52 +09:00
Hide_D 931d291e65 인사부 임명 해제 불가 버그 수정 2018-06-23 13:28:36 +09:00
Hide_D 230df2cec0 내정, 전투 기준 일부 변경 2018-06-23 13:08:16 +09:00
Hide_D 3a33d0cbc2 내정 발령시 내정 찬곳으로는 안함 2018-06-23 12:57:11 +09:00
Hide_D 61911bdd28 query 간소화 2018-06-23 05:37:34 +09:00
Hide_D bed4b87a54 포상 전략 변경 2018-06-23 05:22:49 +09:00
Hide_D 3a37b35cee 발령 전략 변경 2018-06-23 05:06:10 +09:00
Hide_D df7d568c2e npc 발령 전략 변경 2018-06-23 05:00:57 +09:00
Hide_D d9e5a8224d 전방 설정을 5개월 내로 변경 2018-06-23 04:51:07 +09:00
Hide_D 69031f6da5 NPC 사령턴 로직 새로 작성 2018-06-23 04:45:27 +09:00
Hide_D 6089c449bf 상인 거래시 110% 가 잘 적용되도록 변경. 삭제된 거상 문구 수정 2018-06-23 02:23:06 +09:00
Hide_D 469fea321d key,value pair를 보존한 섞기 추가 2018-06-23 02:22:49 +09:00
Hide_D 85b7e6ad17 저격 특기, 활 유니크, 수극 확률이 각각 적용되도록 수정 2018-06-23 02:22:32 +09:00
Hide_D b47cbcb925 환상향 시나리오 전콘 방식 재 적용 2018-06-21 20:16:01 +09:00
Hide_D 39b5362442 장수 등록시 최저 스탯이 10으로 표시되는 버그 수정 2018-06-21 02:55:52 +09:00
Hide_D b5ba1c4e4f 천인 강림 개선 2018-06-21 02:47:29 +09:00
Hide_D 0f5790c5e6 HTML Purifier 추가 2018-06-21 02:27:02 +09:00
Hide_D 1b6820664b PHP 7.2 버전용으로 올림! 2018-06-21 02:17:31 +09:00
Hide_D 2a872397f6 설문 제목이 제대로 표시되지 않는 버그 수정 2018-06-19 02:42:55 +09:00
Hide_D eff9ce8a70 업데이트 기능 추가 2018-06-19 02:11:17 +09:00
Hide_D a602d2d6a2 투표 동작 방식 변경 2018-06-19 01:49:16 +09:00
Hide_D d878c7add7 Merge branch 'devel' of ssh://storage.hided.net:2525/devsam/core into devel 2018-06-19 01:42:46 +09:00
Hide_D 3023032524 투표 권한 추가 2018-06-19 01:42:40 +09:00
Hide_D 903d0cc021 공지 수정 불가능한 버그 수정 2018-06-18 10:11:56 +09:00
Hide_D 11973e02e8 서버 열단, 리셋 부분 권한 추가 2018-06-18 03:21:52 +09:00
Hide_D 0f342270dc 시나리오 생성시 잘못된 도시를 입력한 경우에도 정상 빌드되도록 수정 2018-06-18 02:23:30 +09:00
Hide_D bc03a2885a 시나리오 두개 수정 2018-06-18 02:01:45 +09:00
Hide_D 0020cf7364 npc 생성시 전콘이 있는지 확인하는 코드 추가. 걸그룹 대전 변경 2018-06-16 11:01:12 +09:00
Hide_D 2af3070449 buildScoutMessage에서 null 반환 가능하던 문제 수정 2018-06-16 00:42:48 +09:00
Hide_D 4727da6acf 이미지 주소 기반 자동 NPC 전콘 설정 기능 추가. 루드라사움 추가 2018-06-15 03:32:37 +09:00
Hide_D 688936fd66 기본 iconPath 설정 2018-06-15 02:18:44 +09:00
Hide_D 8c0103f83d 변환 코드를 v3에 맞게 변경 2018-06-15 02:17:07 +09:00
Hide_D 8628f90592 등용장 안 받아지는 버그 수정 2018-06-14 02:41:36 +09:00
Hide_D fd90bb6c9b 빙의 모드에서 장수 칸 여유있게 2018-06-14 02:00:09 +09:00
Hide_D 581212b8f7 processCommand에 affinity 없는 버그 수정, 등용장 못받는 버그 수정 2018-06-14 01:57:28 +09:00
Hide_D 351f84c6e6 Merge branch 'devel' of ssh://storage.hided.net:2525/devsam/core into devel 2018-06-14 01:49:22 +09:00
Hide_D cfbb4863c4 storage의 isunited 변수 문제 2018-06-14 01:49:15 +09:00
revofpla 394e486ecb 가상시나리오 16(애니집결) 추가 2018-06-13 17:46:34 +09:00
Hide_D 26459665c6 개전시 조사 버그 2018-06-13 10:20:48 +09:00
Hide_D 240268c7dd 랜임시 장수수를 셀 때 유저장, 빙의장, n장만 카운트하도록 변경 2018-06-13 04:17:18 +09:00
Hide_D 3ed0a4d794 거병 확률 최종 수정 2018-06-13 03:50:51 +09:00
Hide_D c12e7821ec 거병 확률 재 수정 2018-06-13 03:29:09 +09:00
Hide_D 1388137158 추방 기준을 3년 이내로 재 변경 2018-06-13 03:28:11 +09:00
Hide_D 3380970f6f 추방 후 임관 확률 재 조정 2018-06-13 03:27:08 +09:00
Hide_D 2f7105f518 거병 확률 변경. NPC 임관 확률 추가 변경 2018-06-13 03:21:55 +09:00
Hide_D 7c4b9536cd 임관 속도 조정 2018-06-13 03:06:30 +09:00
Hide_D 3e4995ae84 임관 시도 확률 변경, NPC 랜임시 부상 패널티 약화 2018-06-13 02:51:39 +09:00
Hide_D 090aeed9f9 걸그룹 시나리오 수정, NPC 임관 확률 대폭 감소 2018-06-13 02:45:00 +09:00
Hide_D 4a7b2d04c2 npc 거병 확률 수정 2018-06-13 02:29:37 +09:00
Hide_D 5556815d46 거병 확률 계수 변경 2018-06-13 02:24:52 +09:00
Hide_D 1baa00b4ff 임관시 $general['nations'] 를 Json Array로 변경 2018-06-13 02:21:31 +09:00
Hide_D 78d5323345 일부 브라우저에서 명령창 줄 넘어감 방지 2018-06-13 00:53:31 +09:00
Hide_D 83396dec59 Merge branch 'devel' of ssh://storage.hided.net:2525/devsam/core into devel 2018-06-12 22:28:10 +09:00
letrhee 7248e65cba JosaUtil 응급 대응 2018-06-12 13:05:22 +09:00
221 changed files with 5293 additions and 14333 deletions
+4 -16
View File
@@ -3,23 +3,20 @@ module.exports = {
parser: "vue-eslint-parser",
"env": {
"browser": true,
"es2021": true,
'vue/setup-compiler-macros': true
"es2021": true
},
ignorePatterns: ['*.test.ts', '.eslintrc.cjs', 'postcss.config.cjs', 'webpack.config.cjs', '*.js'],
overrides: [{
files: ['*.ts', '*.tsx', "*.vue"],
}],
plugins: [
"@typescript-eslint",
"prettier"
"@typescript-eslint"
],
extends: [
"eslint:recommended",
"plugin:vue/vue3-recommended",
"plugin:@typescript-eslint/recommended",
"prettier",
"plugin:vue/vue3-essential",
"plugin:@typescript-eslint/recommended"
],
parserOptions: {
"sourceType": "module",
@@ -30,15 +27,6 @@ module.exports = {
},
rules: {
'@typescript-eslint/no-floating-promises': 'error',
'vue/script-setup-uses-vars': 'error',
'vue/max-attributes-per-line': [
'warn',
{
singleline: 4, //prettier와 싸우지 말자
},
],
'vue/v-on-event-hyphenation': 'off', //vue3에선 필요없다고 생각
'vue/attribute-hyphenation': 'off', //vue3에선 필요없다고 생각
},
settings: {
'import/resolver': {
+1 -1
View File
@@ -42,7 +42,7 @@ d_setting/*.php
*/d_setting/templates/*.php
!*.orig.php
**/data/file_cache
*/data/file_cache
**/old/*
test.*
+2 -1
View File
@@ -101,7 +101,8 @@ return [
'hwe/j_general_set_permission.php',
'hwe/j_get_basic_general_list.php',
'hwe/j_get_city_list.php',
'hwe/j_get_reserved_command.php',
'hwe/j_get_general_list.php',
'hwe/j_get_nation_general_list.php',
'hwe/j_get_select_npc_token.php',
'hwe/j_get_select_pool.php',
'hwe/j_image_upload.php',
-5
View File
@@ -1,5 +0,0 @@
{
"tabWidth": 2,
"useTabs": false,
"printWidth": 120
}
+1 -2
View File
@@ -28,6 +28,5 @@
"cSpell.words": [
"josa",
"sammo"
],
"editor.tabSize": 2
]
}
+1 -5
View File
@@ -8,9 +8,5 @@ require(__DIR__ . '/vendor/autoload.php');
if (!class_exists('\\sammo\\RootDB')) {
Json::dieWithReason('No DB');
}
$eParams = $_GET;
if(key_exists('path', $eParams)){
unset($eParams['path']);
}
APIHelper::launch(dirname(__FILE__), $_GET['path']??'', $eParams, true);
APIHelper::launch(dirname(__FILE__), $_GET['path']??null);
-1
View File
@@ -172,7 +172,6 @@ if ($gameStor->isunited) {
data-general-strength='{$general['strength']}'
data-general-intel='{$general['intel']}'
data-is-npc='" . ($general['npc'] >= 2 ? 'true' : 'false') . "'
data-npc-type='{$general['npc']}'
>
<td align=center><img class='generalIcon' width='64' height='64' src='{$imageTemp}/{$general['picture']}'></img></td>
<td align=center>$name</td>
+16 -18
View File
@@ -23,7 +23,7 @@ if ($serverID === UniqueConst::$serverID) {
increaseRefresh("연감", 1);
}
$admin = $gameStor->getValues(['startyear', 'year', 'month']);
$admin = $gameStor->getValues(['startyear', 'year', 'month', 'map_theme']);
$me = $db->queryFirstRow('SELECT con, turntime FROM general WHERE owner = %i', $userID);
@@ -47,9 +47,9 @@ if ($s_year === null) {
$e = Util::joinYearMonth($e_year, $e_month);
if ($serverID !== UniqueConst::$serverID) {
$mapName = $db->queryFirstField('SELECT map FROM ng_games WHERE server_id=%s', $serverID) ?: 'che';
$mapTheme = $db->queryFirstField('SELECT map FROM ng_games WHERE server_id=%s', $serverID) ?: 'che';
} else {
$mapName = GameConst::$mapName;
$mapTheme = $admin['map_theme'] ?? 'che';
}
//FIXME: $yearmonth가 올바르지 않을 경우에 처리가 필요.
@@ -104,26 +104,22 @@ $nations = $history['nations'];
<meta name="viewport" content="width=1024" />
<title><?= UniqueConst::$serverName ?>: 연감</title>
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
<?= WebUtil::printJS("js/map/theme_{$mapName}.js") ?>
<?= WebUtil::printJS("js/map/theme_{$mapTheme}.js") ?>
<?= WebUtil::printCSS('../d_shared/common.css') ?>
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
<?= WebUtil::printCSS('css/map.css') ?>
<?= WebUtil::printCSS('css/history.css') ?>
<?= WebUtil::printStaticValues([
'staticValues' => [
'startYear' => $s_year,
'startMonth' => $s_month,
'lastYear' => $e_year,
'lastMonth' => $e_month,
'selectYear' => $year,
'selectMonth' => $month,
'nations' => $nations ? $history['nations'] : [],
'serverNick' => DB::prefix(),
'serverID' => UniqueConst::$serverID,
]
])?>
<?= WebUtil::printDist('ts', ['common', 'history']) ?>
<script>
var startYear = <?= $s_year ?>;
var startMonth = <?= $s_month ?>;
var lastYear = <?= $e_year ?>;
var lastMonth = <?= $e_month ?>;
var selectYear = <?= $year ?>;
var selectMonth = <?= $month ?>;
var nations = <?= $nations ? JSON::encode($history['nations']) : '{}' ?>;
</script>
</head>
<body>
@@ -155,7 +151,7 @@ $nations = $history['nations'];
<tbody>
<tr height=520>
<td width=698>
<?= getMapHtml($mapName) ?>
<?= getMapHtml($mapTheme) ?>
</td>
<td id='nation_list_frame'>
<table id='nation_list'>
@@ -208,6 +204,8 @@ $nations = $history['nations'];
</tr>
</table>
<script>
window.serverNick = '<?= DB::prefix() ?>';
window.serverID = '<?= UniqueConst::$serverID ?>';
<?php if($isCurrent): ?>
reloadWorldMap({
showMe: false,
+2 -2
View File
@@ -111,7 +111,7 @@ if ($con >= 2) {
}
$chief = $chiefs[$chiefLevel] ?? ['name' => '-', 'npc' => 0];
$officerLevelText = getOfficerLevelText($chiefLevel, $nation['level']);
$chiefText = formatName($chief['name'], $chief['npc']);
$chiefText = getColoredName($chief['name'], $chief['npc']);
echo "<td class='center bg1'>{$officerLevelText}</td>
<td class='center'>{$chiefText}</td>";
}
@@ -178,7 +178,7 @@ if ($con >= 2) {
<tr>
<td colspan=5> 장수 일람 : ";
foreach ($nations[0]['generals'] as $general) {
$generalText = formatName($general['name'], $general['npc']);
$generalText = getColoredName($general['name'], $general['npc']);
echo "{$generalText}, ";
}
echo "
+1 -1
View File
@@ -111,7 +111,7 @@ $sel[$type] = "selected";
</tr>
<?php foreach ($generalList as $general) : ?>
<tr>
<td align=center><?= formatName($general['name'], $general['npc']) ?></td>
<td align=center><?= getColoredName($general['name'], $general['npc']) ?></td>
<td align=center><?= $general['owner_name'] ?></td>
<td align=center>Lv <?= $general['explevel'] ?></td>
<td align=center><?= $nationName[$general['nation']] ?></td>
+1 -6
View File
@@ -5,9 +5,4 @@ namespace sammo;
include "lib.php";
include "func.php";
$eParams = $_GET;
if(key_exists('path', $eParams)){
unset($eParams['path']);
}
APIHelper::launch(dirname(__FILE__), $_GET['path']??'', $eParams, true);
APIHelper::launch(dirname(__FILE__), $_GET['path']??null);
+1 -1
View File
@@ -133,7 +133,7 @@ $showGeneral = General::createGeneralObjFromDB($gen);
</tr>
<tr>
<td>
<form name=form1 method=get>
<form name=form1 method=post>
정렬순서 :
<select name='query_type' size=1>
<?php foreach ($queryMap as $queryType => [$queryTypeText,]) : ?>
+33 -37
View File
@@ -38,25 +38,25 @@ if ($con >= 2) {
switch ($admin['tnmt_type']) {
default:
throw new \RuntimeException('Invalid tnmt_type');
case convertTournamentType('전력전'):
case 0:
$tnmt_type = "<font color=cyan>전력전</font>";
$tp = "total";
$tp2 = "종합";
$tp3 = "total";
break;
case convertTournamentType('통솔전'):
case 1:
$tnmt_type = "<font color=cyan>통솔전</font>";
$tp = "leadership";
$tp2 = "통솔";
$tp3 = "leadership";
break;
case convertTournamentType('일기토'):
case 2:
$tnmt_type = "<font color=cyan>일기토</font>";
$tp = "strength";
$tp2 = "무력";
$tp3 = "strength";
break;
case convertTournamentType('설전'):
case 3:
$tnmt_type = "<font color=cyan>설전</font>";
$tp = "intel";
$tp2 = "지력";
@@ -273,7 +273,7 @@ if ($str3) {
for ($i = 0; $i < 8; $i++) {
$cent[$i] = "<font color=white>";
}
$generalList = $db->query('SELECT npc,name,win,leadership,strength,intel,leadership+strength+intel as total from tournament where grp>=20 order by grp, grp_no LIMIT 16');
$generalList = $db->query('SELECT npc,name,win from tournament where grp>=20 order by grp, grp_no LIMIT 16');
while (count($generalList) < 16) {
$generalList[] = [
'name' => '-',
@@ -293,7 +293,6 @@ if ($str3) {
$line[$i] = "<font color=white>";
}
$gen[$i] = $general['name'];
$stat[$i] = $general[$tp];
}
for ($i = 0; $i < 8; $i++) {
$cent[$i] = $cent[$i] . "┻" . "</font>";
@@ -301,43 +300,40 @@ if ($str3) {
$line[$i * 2 + 1] = $line[$i * 2 + 1] . "━━┓" . "</font>";
echo "<td colspan=2>{$line[$i * 2]}{$cent[$i]}{$line[$i * 2 + 1]}</td>";
}
?>
echo "
</tr>
<tr align=center>
<?php for ($i = 0; $i < 16; $i++) { ?>
<td width=70><?=$gen[$i]?></td>
<?php } ?>
</tr>
<tr align=center>
<?php for ($i = 0; $i < 16; $i++) { ?>
<td width=70 style="font-size: 14px"><?=$stat[$i]?></td>
<?php } ?>
</tr>
<tr align=center>";
for ($i = 0; $i < 16; $i++) {
echo "<td width=70>{$gen[$i]}</td>";
}
$bet = [];
$gold = [];
for ($i = 0; $i < 16; $i++) {
if ($globalBet[$i] == 0) {
$bet[$i] = "∞";
} else {
$bet[$i] = round($globalBetTotal / $globalBet[$i], 2);
}
}
for ($i = 0; $i < 16; $i++) {
if (!is_numeric($bet[$i])) {
$gold[$i] = 0;
} else {
$gold[$i] = Util::round($myBet[$i] * $bet[$i]);
}
}
?>
</tr>
</table>
<table align=center width=1120 style="table-layout: fixed" class='tb_layout bg0'>
<table align=center width=1120 class='tb_layout bg0'>
<tr align=center>
<td height=10 colspan=16></td>
</tr>
<?php
$bet = [];
$gold = [];
for ($i = 0; $i < 16; $i++) {
if ($globalBet[$i] == 0) {
$bet[$i] = "∞";
} else {
$bet[$i] = round($globalBetTotal / $globalBet[$i], 2);
}
}
for ($i = 0; $i < 16; $i++) {
if (!is_numeric($bet[$i])) {
$gold[$i] = 0;
} else {
$gold[$i] = Util::round($myBet[$i] * $bet[$i]);
}
}
echo "
<tr align=center>";
+1 -2
View File
@@ -337,7 +337,6 @@ $templates = new \League\Plates\Engine('templates');
'ourGeneral' => $ourGeneral,
'iconPath' => GetImageURL($general['imgsvr']) . '/' . $general['picture'],
'isNPC' => $isNPC,
'npc' => $general['npc'],
'wounded' => $wounded,
'name' => $name,
'nameText' => $nameText,
@@ -365,7 +364,7 @@ $templates = new \League\Plates\Engine('templates');
}
$generalsName = array_map(function ($gen) {
return formatName($gen['name'], $gen['npc']);
return getColoredName($gen['name'], $gen['npc']);
}, $generals);
$enemyCrew = 0;
+16 -16
View File
@@ -13,6 +13,8 @@ $gameStor = KVStorage::getStorage($db, 'game_env');
increaseRefresh("중원정보", 1);
$mapTheme = $gameStor->map_theme ?? 'che';
$me = $db->queryFirstRow('SELECT no,nation FROM general WHERE owner=%i', $userID);
$myNationID = $me['nation'];
@@ -95,15 +97,20 @@ $neutralStateCharMap = [
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
<?= WebUtil::printCSS('css/map.css') ?>
<?= WebUtil::printCSS('css/history.css') ?>
<?= WebUtil::printStaticValues([
'staticValues' => [
'serverNick' => DB::prefix(),
'serverID' => UniqueConst::$serverID,
'unitSet' => GameConst::$unitSet,
'mapName' => GameConst::$mapName,
],
]) ?>
<?= WebUtil::printDist('ts', ['common', 'map']) ?>
<script>
window.serverNick = '<?= DB::prefix() ?>';
window.serverID = '<?= UniqueConst::$serverID ?>';
$(function() {
reloadWorldMap({
neutralView: true,
showMe: true,
useCachedMap: true
});
});
</script>
</head>
<body>
@@ -187,7 +194,7 @@ $neutralStateCharMap = [
</tr>
<tr>
<td width=698 height=420>
<?= getMapHtml() ?>
<?= getMapHtml($mapTheme) ?>
</td>
<td id='nation_list_frame'>
<table id='nation_list'>
@@ -224,13 +231,6 @@ $neutralStateCharMap = [
<td><?= banner() ?></td>
</tr>
</table>
<script>
reloadWorldMap({
neutralView: true,
showMe: true,
useCachedMap: true
});
</script>
</body>
</html>
+1 -1
View File
@@ -172,7 +172,7 @@ $templates = new \League\Plates\Engine('templates');
$general['expLevelText'] = getExpLevel($general['experience']);
$general['nameText'] = formatName($general['name'], $general['npc']);
$general['nameText'] = getColoredName($general['name'], $general['npc']);
$general['modeText'] = formatDefenceTrain($general['defence_train']);
$general['crewtypeText'] = GameUnitConst::byId($general['crewtype'])->name ?? '-';
+58 -72
View File
@@ -71,8 +71,7 @@ $sel = [$type => "selected"];
</table>
<?php
$nation = $db->queryFirstRow('SELECT nation, name, color, type, level, capital, gennum, `power`, `rate` from nation WHERE nation = %i', $nationID); //국가정보
$nationTypeObj = buildNationTypeClass($nation['type']);
$nation = getNationStaticInfo($me['nation']); //국가정보
$officerList = [];
foreach ($db->query('SELECT no,name,npc,city,officer_level,officer_city,belong FROM general WHERE nation = %i AND 2 <= officer_level AND officer_level <= 4', $nationID) as $officer) {
@@ -83,17 +82,6 @@ $sel = [$type => "selected"];
$officerList[$officerCityID][$officer['officer_level']] = $officer;
}
$generalList = $db->query('SELECT npc, name, city FROM general WHERE nation = %i', $me['nation']);
$cityGeneralList = [];
foreach ($generalList as $general) {
$cityID = $general['city'];
if (!key_exists($cityID, $cityGeneralList)) {
$cityGeneralList[$cityID] = [];
}
$cityGeneralList[$cityID][] = formatName($general['name'], $general['npc']);
}
$cityList = $db->query('SELECT *,pop/pop_max as poprate from city where nation=%i', $nationID);
@@ -183,12 +171,8 @@ $sel = [$type => "selected"];
];
$cityOfficerList = $officerList[$cityID] ?? [];
$effectiveOfficerCnt = 0;
foreach ($cityOfficerList as $cityOfficer) {
if ($cityOfficer['city'] == $cityID) {
$effectiveOfficerCnt += 1;
}
$officerName[$cityOfficer['officer_level']] = formatName($cityOfficer['name'], $cityOfficer['npc']);
$officerName[$cityOfficer['officer_level']] = getColoredName($cityOfficer['name'], $cityOfficer['npc']);
}
if ($type == 10 && $city['region'] != $region) {
@@ -203,60 +187,62 @@ $sel = [$type => "selected"];
$city['trade'] = "- ";
}
$cityGoldIncome = $nation['rate'] / 20 * calcCityGoldIncome($city, $effectiveOfficerCnt, $nation['capital'] == $cityID, $nation['level'], $nationTypeObj);
$cityRiceIncome = $nation['rate'] / 20 * calcCityRiceIncome($city, $effectiveOfficerCnt, $nation['capital'] == $cityID, $nation['level'], $nationTypeObj);
$cityWallIncome = $nation['rate'] / 20 * calcCityWallRiceIncome($city, $effectiveOfficerCnt, $nation['capital'] == $cityID, $nation['level'], $nationTypeObj);
echo "
<table align=center width=1000 class='tb_layout bg2'>
<tr>
<td colspan=12 style=color:" . newColor($nation['color']) . "; bgcolor={$nation['color']}><font size=2>【 " . CityConst::$regionMap[$city['region']] . " | " . CityConst::$levelMap[$city['level']] . " 】 {$city['name']}</font></td>
</tr>
<tr>
<td align=center width=46 class='bg1'>주민</td>
<td align=center width=140>{$city['pop']}/{$city['pop_max']}</td>
<td align=center width=46 class='bg1'>농업</td>
<td align=center width=140>{$city['agri']}/{$city['agri_max']}</td>
<td align=center width=46 class='bg1'>상업</td>
<td align=center width=140>{$city['comm']}/{$city['comm_max']}</td>
<td align=center width=46 class='bg1'>치안</td>
<td align=center width=140>{$city['secu']}/{$city['secu_max']}</td>
<td align=center width=46 class='bg1'>수비</td>
<td align=center width=140>{$city['def']}/{$city['def_max']}</td>
<td align=center width=46 class='bg1'>성벽</td>
<td align=center width=140>{$city['wall']}/{$city['wall_max']}</td>
</tr>
<tr>
<td align=center class='bg1'>민심</td>
<td align=center>" . round($city['trust'], 1) . "</td>
<td align=center class='bg1'>시세</td>
<td align=center>{$city['trade']}%</td>
<td align=center class='bg1'>인구</td>
<td align=center>" . round($city['pop'] / $city['pop_max'] * 100, 2) . " %</td>
<td align=center class='bg1'>태수</td>
<td align=center>";
echo $officerName[4];
echo "</td>
<td align=center class='bg1'>군사</td>
<td align=center>";
echo $officerName[3];
echo "</td>
<td align=center class='bg1'>종사</td>
<td align=center>";
echo $officerName[2];
echo "</td>
</tr>
<tr>
<td align=center class='bg1'>장수</td>
<td colspan=11>";
$generalList = $db->query('SELECT npc, name FROM general WHERE city = %i AND nation = %i', $city['city'], $me['nation']);
if (!$generalList) {
echo "-";
}
foreach ($generalList as $general) {
echo getColoredName($general['name'], $general['npc']) . ', ';
}
echo "
</td>
</tr>
</table>
";
}
?>
<table align=center width=1000 class='tb_layout bg2'>
<tr>
<td colspan=10 style="color:<?= newColor($nation['color']) ?>; background-color:<?= $nation['color'] ?>;">
<font size=2>【 <?= CityConst::$regionMap[$city['region']] ?> | <?= CityConst::$levelMap[$city['level']] ?> 】 <?= $city['name'] ?></font>
</td>
</tr>
<tr style='text-align:center;'>
<td width=60 class='bg1'>주민</td>
<td width=140 class='pop-value'><?= $city['pop'] ?>/<?= $city['pop_max'] ?></td>
<td width=60 class='bg1'>인구율</td>
<td width=140 class='pop-prop-value'><?= round($city['pop'] / $city['pop_max'] * 100, 2) ?>%</td>
<td width=60 class='bg1'>자금 수입</td>
<td width=140 class='gold-income'><?= number_format($cityGoldIncome) ?></td>
<td width=60 class='bg1'>군량 수입</td>
<td width=140 class='rice-income'><?= number_format($cityRiceIncome) ?></td>
<td width=60 class='bg1'>둔전 수입</td>
<td width=140 class='wall-income'><?= number_format($cityWallIncome) ?></td>
</tr>
<tr style='text-align:center;'>
<td class='bg1'>농업</td>
<td class='agri-value'><?= $city['agri'] ?>/<?= $city['agri_max'] ?></td>
<td class='bg1'>상업</td>
<td class='comm-value'><?= $city['comm'] ?>/<?= $city['comm_max'] ?></td>
<td class='bg1'>치안</td>
<td class='secu-value'><?= $city['secu'] ?>/<?= $city['secu_max'] ?></td>
<td class='bg1'>수비</td>
<td class='def-value'><?= $city['def'] ?>/<?= $city['def_max'] ?></td>
<td class='bg1'>성벽</td>
<td class='wall-value'><?= $city['wall'] ?>/<?= $city['wall_max'] ?></td>
</tr>
<tr style='text-align:center;'>
<td class='bg1'>민심</td>
<td class='trust-value'><?= round($city['trust'], 1) ?></td>
<td class='bg1'>시세</td>
<td class='trade-value'><?= $city['trade'] ?>%</td>
<td class='bg1'>태수</td>
<td class='officer-4-value'><?= $officerName[4] ?></td>
<td class='bg1'>군사</td>
<td class='officer-3-value'><?= $officerName[3] ?></td>
<td class='bg1'>종사</td>
<td class='officer-2-value'><?= $officerName[2] ?></td>
</tr>
<tr>
<td style='text-align:center;' class='bg1'>장수</td>
<td colspan=9 class='city-generals'><?= key_exists($cityID, $cityGeneralList) ? join(', ', $cityGeneralList[$cityID]) : '-' ?></td>
</tr>
</table>
<?php } ?>
<table align=center width=1000 class='tb_layout bg0 anchor'>
<tr>
@@ -266,7 +252,7 @@ $sel = [$type => "selected"];
<td><?= banner() ?></td>
</tr>
</table>
<div id="helper_genlist" style="display:none;"></div>
</body>
<div id="helper_genlist" style="display:none;"></div>
</html>
+2 -2
View File
@@ -98,8 +98,8 @@ if($btn == '참가') {
], 'no=%i', $general['no']);
}
$grpCount = $db->queryFirstColumn('SELECT count(grp) FROM tournament where grp<10 GROUP BY grp;');
if(min($grpCount) >= 8) {
$grpCount = $db->queryFirstField('SELECT count(*) FROM tournament where grp<10 GROUP BY grp HAVING count(*)=8');
if($grpCount >= 8) {
$gameStor->tournament = 2;
$gameStor->phase = 0;
}
+3 -3
View File
@@ -171,7 +171,7 @@ function cityInfo(General $generalObj)
];
foreach ($db->query('SELECT `officer_level`, `name`, npc, no FROM general WHERE officer_city = %i', $cityID) as $officer) {
$officerName[$officer['officer_level']] = formatName($officer['name'], $officer['npc']);
$officerName[$officer['officer_level']] = getColoredName($officer['name'], $officer['npc']);
}
$city['officerName'] = $officerName;
@@ -199,8 +199,8 @@ function myNationInfo(General $generalObj)
$topChiefs = Util::convertArrayToDict($db->query('SELECT officer_level, no, name, npc FROM general WHERE nation = %i AND officer_level >= 11', $nationID), 'officer_level');
$level12Name = key_exists(12, $topChiefs) ? formatName($topChiefs[12]['name'], $topChiefs[12]['npc']) : '-';
$level11Name = key_exists(11, $topChiefs) ? formatName($topChiefs[11]['name'], $topChiefs[11]['npc']) : '-';
$level12Name = key_exists(12, $topChiefs) ? getColoredName($topChiefs[12]['name'], $topChiefs[12]['npc']) : '-';
$level11Name = key_exists(11, $topChiefs) ? getColoredName($topChiefs[11]['name'], $topChiefs[11]['npc']) : '-';
$impossibleStrategicCommandLists = [];
$strategicCommandLists = GameConst::$availableChiefCommand['전략'];
-2
View File
@@ -393,7 +393,6 @@ function setGeneralCommand(int $generalID, array $rawTurnList, string $command,
_setGeneralCommand($commandObj, $turnList);
return [
'result'=>true,
'brief'=>$commandObj->getBrief(),
'reason'=>'success'
];
}
@@ -475,7 +474,6 @@ function setNationCommand(int $generalID, array $turnList, string $command, ?arr
_setNationCommand($commandObj, $turnList);
return [
'result'=>true,
'brief'=>$commandObj->getBrief(),
'arg_test'=>true,
'reason'=>'success'
];
+8 -31
View File
@@ -64,15 +64,6 @@ function getNationLevel(int $level) {
][$level];
}
function convertTournamentType(string $type){
return[
'전력전'=>0,
'통솔전'=>1,
'일기토'=>2,
'설전'=>3,
][$type]??-1;
}
function getGenChar(?string $type) {
if($type === null){
return '-';
@@ -701,35 +692,21 @@ function isConsumable(?string $item) : bool{
return $itemClass->isConsumable();
}
function getNPCColor(int $npc): ?string{
if ($npc == 1) {
return 'skyblue';
}
if ($npc == 4){
return 'deepskyblue';
}
if ($npc == 5){
return 'darkcyan';
}
if ($npc == 6){
return 'mediumaquamarine';
}
if ($npc > 1) {
function getNameColor(int $npcType):?string{
if($npcType >= 2){
return 'cyan';
}
if($npcType == 1){
return 'skyblue';
}
return null;
}
function formatName(string $name, int $npc): string
{
$color = getNPCColor($npc);
function getColoredName(string $name, int $npcType):string{
$color = getNameColor($npcType);
if($color === null){
return $name;
}
return "<span style='color:{$color}'>$name</span>";
return "<span style='color:{$color}'>{$name}</span>";
}
function ConvertLog(?string $str, $type=1) : string {
+1 -1
View File
@@ -371,7 +371,7 @@ function postUpdateMonthly()
sum(pop)*sum(pop+agri+comm+secu+wall+def)/sum(pop_max+agri_max+comm_max+secu_max+wall_max+def_max)/100
) from city where nation=A.nation and supply=1
))
+(select SUM((ra.value + 1000)/(rb.value + 1000)*(CASE WHEN g.`npc` < 2 THEN 1.2 ELSE 1 END)*(CASE WHEN g.`leadership` >= 40 THEN g.`leadership` ELSE 0 END)*2 + (SQRT(g.intel * g.strength) * 2 + g.leadership / 2)/2)
+(select SUM((ra.value + 1000)/(rb.value + 1000)*(CASE WHEN g.`leadership` >= 40 THEN g.`leadership` ELSE 0 END)*2 + (SQRT(g.intel * g.strength) * 2 + g.leadership / 2)/2)
FROM general AS g
LEFT JOIN `rank_data` AS ra ON g.`no` = ra.general_id AND ra.`type` = \'killcrew_person\'
LEFT JOIN `rank_data` AS rb ON g.`no` = rb.general_id AND rb.`type` = \'deathcrew_person\'
+40 -6
View File
@@ -168,7 +168,7 @@ function commandButton(array $opts = [])
$showSecret = false;
$permission = checkSecretPermission($me);
$btnClassForTournament = $opts['btnClass'];
if ($opts['isTournamentApplicationOpen']) {
if ($opts['isTournamentActive']) {
if ($btnClassForTournament != 'dropdown-item') {
$btnClassForTournament = 'toolbarButton2';
}
@@ -231,23 +231,57 @@ function formatLeadershipBonus(int $value): string
return "<font color=cyan>+{$value}</font>";
}
function getNPCColor(int $npc): ?string{
if ($npc == 1) {
return 'skyblue';
}
if ($npc == 4){
return 'deepskyblue';
}
if ($npc == 5){
return 'darkcyan';
}
if ($npc == 6){
return 'mediumaquamarine';
}
if ($npc > 1) {
return 'cyan';
}
return null;
}
function formatName(string $name, int $npc): string
{
$color = getNPCColor($npc);
if($color === null){
return $name;
}
return "<span style='color:{$color}'>$name</span>";
}
function getMapTheme(): string
{
return GameConst::$mapName;
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$mapTheme = $gameStor->map_theme ?? 'che';
return $mapTheme;
}
function getMapHtml(?string $mapName = null)
function getMapHtml(?string $mapTheme = null)
{
$templates = new \League\Plates\Engine(__DIR__ . '/templates');
if($mapName === null){
$mapName = GameConst::$mapName;
if ($mapTheme === null) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$mapTheme = $gameStor->map_theme ?? 'che';
}
return $templates->render('map', [
'mapName' => $mapName
'mapTheme' => $mapTheme
]);
}
+19 -19
View File
@@ -4,12 +4,14 @@ namespace sammo;
* 시간 단위로 일어나는 이벤트들에 대한 함수 모음
*/
//1월마다 실행
function processSpring() {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
//인구 증가
popIncrease();
// 1월엔 무조건 내정 1% 감소
$db->update('city',[
'dead'=>0,
@@ -20,9 +22,6 @@ function processSpring() {
'wall'=>$db->sqleval('wall * 0.99'),
],true);
//인구 증가
popIncrease();
// > 10000 유지비 3%, > 1000 유지비 1%
// 유지비 1%
$db->update('general', [
@@ -101,7 +100,7 @@ function processGoldIncome() {
$generalObj = new General($rawGeneral, null, null, null, $year, $month, false);
$gold = Util::round(getBill($generalObj->getVar('dedication'))*$ratio);
$generalObj->increaseVar('gold', $gold);
$logger = $generalObj->getLogger();
if($generalObj->getVar('officer_level') > 4){
$logger->pushGeneralActionLog($incomeLog, $logger::PLAIN);
@@ -122,9 +121,9 @@ function processGoldIncome() {
function popIncrease() {
$db = DB::db();
$nationList = $db->queryAllLists('SELECT nation,rate_tmp,type FROM nation');
// 인구 및 민심
$db->update('city', [
@@ -139,7 +138,7 @@ function popIncrease() {
foreach($nationList as [$nationID, $taxRate, $nationType]){
$nationTypeObj = buildNationTypeClass($nationType);
$popRatio = (30 - $taxRate)/200; // 20일때 5% 5일때 12.5% 50일때 -10%
$popRatio = $nationTypeObj->onCalcNationalIncome('pop', $popRatio);
@@ -247,7 +246,7 @@ function getGoldIncome(int $nationID, int $nationLevel, float $taxRate, int $cap
}
$cityIncome *= ($taxRate / 20);
return $cityIncome;
}
@@ -291,6 +290,9 @@ function getWarGoldIncome(string $nationType, array $cityList){
function processFall() {
$db = DB::db();
//인구 증가
popIncrease();
// 7월엔 무조건 내정 1% 감소
$db->update('city',[
'dead'=>0,
@@ -301,8 +303,6 @@ function processFall() {
'wall'=>$db->sqleval('wall * 0.99'),
],true);
//인구 증가
popIncrease();
// > 10000 유지비 3%, > 1000 유지비 1%
// 유지비 1%
@@ -378,7 +378,7 @@ function processRiceIncome() {
$generalObj = new General($rawGeneral, null, null, null, $year, $month, false);
$rice = Util::round(getBill($generalObj->getVar('dedication'))*$ratio);
$generalObj->increaseVar('rice', $rice);
$logger = $generalObj->getLogger();
if($generalObj->getVar('officer_level') > 4){
$logger->pushGeneralActionLog($incomeLog, $logger::PLAIN);
@@ -418,7 +418,7 @@ function getRiceIncome(int $nationID, int $nationLevel, float $taxRate, int $cap
}
$cityIncome *= ($taxRate / 20);
return $cityIncome;
}
@@ -439,12 +439,12 @@ function getWallIncome(int $nationID, int $nationLevel, float $taxRate, int $cap
$cityIncome = 0;
foreach($cityList as $rawCity){
$cityID = $rawCity['city'];
$cityIncome += calcCityWallRiceIncome($rawCity, $officersCnt[$cityID]??0, $capitalID == $cityID, $nationLevel, $nationTypeObj);
}
$cityIncome *= ($taxRate / 20);
return $cityIncome;
}
@@ -520,7 +520,7 @@ function disaster() {
}
else {
$raiseProp = 0.06 - ($city['secu'] / $city['secu_max']) * 0.05; // 1 ~ 6%
}
}
if(Util::randBool($raiseProp)) {
$targetCityList[] = $city;
@@ -592,11 +592,11 @@ function disaster() {
'def'=>$db->sqleval('def * %d', $affectRatio),
'wall'=>$db->sqleval('wall * %d', $affectRatio),
], 'city = %i', $city['city']);
$generalList = array_map(
function($rawGeneral) use ($city, $year, $month){
return new General($rawGeneral, null, $city, null, $year, $month, false);
},
},
$generalListByCity[$city['city']]??[]
);
@@ -619,7 +619,7 @@ function disaster() {
'wall'=>$db->sqleval('least(wall * %d, wall_max)', $affectRatio),
], 'city = %i', $city['city']);
}
}
+7 -22
View File
@@ -83,12 +83,12 @@ if ($gameStor->npcmode == 0) {
$npcmode = "선택 생성";
}
$color = "cyan";
$mapTheme = $gameStor->map_theme;
$serverName = UniqueConst::$serverName;
$serverCnt = $gameStor->server_cnt;
$auctionCount = $db->queryFirstField('SELECT count(`no`) FROM auction');
$isTournamentActive = $gameStor->tournament > 0;
$isTournamentApplicationOpen = $gameStor->tournament == 1;
$isBettingActive = $gameStor->tournament == 6;
$myNationStatic = getNationStaticInfo($generalObj->getNationID());
@@ -125,34 +125,19 @@ if (!$otherTextInfo) {
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
<?= WebUtil::printCSS('css/map.css') ?>
<?= WebUtil::printStaticValues([
//deprecated, staticValues를 이용할 것
'serverName' => $serverName,
'serverCnt' => $serverCnt,
'serverNick' => DB::prefix(),
'serverID' => UniqueConst::$serverID,
'maxTurn' => GameConst::$maxTurn,
'maxPushTurn' => 12,
'commandList' => getCommandTable($generalObj),
'serverNow' => TimeUtil::now(false),
'baseColor2' => GameConst::$basecolor2,
'lastExecuted' => $gameStor->turntime,
'isLocked' => $plock,
'isTournamentActive' => $isTournamentActive,
'isBettingActive' => $isBettingActive,
'staticValues' => [
'serverName' => $serverName,
'serverCnt' => $serverCnt,
'serverNick' => DB::prefix(),
'serverID' => UniqueConst::$serverID,
'maxTurn' => GameConst::$maxTurn,
'maxPushTurn' => 12,
'commandList' => getCommandTable($generalObj),
'serverNow' => TimeUtil::now(false),
'lastExecuted' => $gameStor->turntime,
'isLocked' => $plock,
'isTournamentActive' => $isTournamentActive,
'isBettingActive' => $isBettingActive,
'mapName' => GameConst::$mapName,
'unitSet' => GameConst::$unitSet,
]
'isBettingActive' => $isBettingActive
]) ?>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.1/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
</head>
@@ -256,7 +241,7 @@ if (!$otherTextInfo) {
</div>
<?php endif; ?>
<div id="map_view" class="gx-0">
<div id="mapZone" class="view-item"><?= getMapHtml() ?></div>
<div id="mapZone" class="view-item"><?= getMapHtml($mapTheme) ?></div>
<div class="view-item" id="reservedCommandZone">
<div id="reservedCommandList"></div>
<div id="actionMiniPlate" class="gx-0 row">
@@ -272,7 +257,7 @@ if (!$otherTextInfo) {
<div id="nation-position"><?php myNationInfo($generalObj); ?></div>
<div id="general-position"><?php generalInfo($generalObj); ?></div>
<div id="generalCommandButton" class="row gx-0">
<div class="buttonPlate bg2"><?= commandButton(['btnClass' => 'btn btn-sammo-nation', 'isTournamentApplicationOpen' => $isTournamentApplicationOpen, 'isBettingActive' => $isBettingActive]) ?></div>
<div class="buttonPlate bg2"><?= commandButton(['btnClass' => 'btn btn-sammo-nation', 'isTournamentActive' => $isTournamentActive, 'isBettingActive' => $isBettingActive]) ?></div>
</div>
</div>
</div>
@@ -372,7 +357,7 @@ if (!$otherTextInfo) {
국가 메뉴
</div>
<ul class="dropdown-menu" aria-labelledby="navbarNation" id="navbarNationItems">
<?= commandButton(['btnBegin' => '<li>', 'btnEnd' => '</li>', 'btnClass' => 'dropdown-item', 'isTournamentApplicationOpen' => $isTournamentApplicationOpen, 'isBettingActive' => $isBettingActive]) ?>
<?= commandButton(['btnBegin' => '<li>', 'btnEnd' => '</li>', 'btnClass' => 'dropdown-item', 'isTournamentActive' => $isTournamentActive, 'isBettingActive' => $isBettingActive]) ?>
</ul>
</li>
<li class="nav-item dropup">
+3 -1
View File
@@ -41,6 +41,8 @@ if ($permission < 4) {
]);
}
$reason = trim($reason);
$letter = $db->queryFirstRow('SELECT * FROM ng_diplomacy WHERE no=%i AND src_nation_id = %i AND state = \'proposed\'', $letterNo, $me['nation']);
if(!$letter){
Json::die([
@@ -64,7 +66,7 @@ $unlimited = new \DateTime('9999-12-31');
$aux['reason'] = [
'who'=>$me['no'],
'action'=>'cancelled',
'reason'=>'회수',
'reason'=>$reason
];
$db->update('ng_diplomacy', [
'state'=>'cancelled',
+109
View File
@@ -0,0 +1,109 @@
<?php
namespace sammo;
include "lib.php";
include "func.php";
//로그인 검사
$session = Session::requireLogin([]);
$userID = Session::getUserID();
$db = DB::db();
$withToken = Util::getPost('with_token', 'bool', false);
$gameStor = KVStorage::getStorage($db, 'game_env');
if($session->isGameLoggedIn()){
increaseRefresh("장수일람", 2);
$me = $db->queryFirstRow('SELECT con, turntime FROM general WHERE owner=%i', $userID);
$con = checkLimit($me['con']);
if ($con >= 2) {
Json::die([
'result'=>false,
'reason'=>'접속 제한중입니다. 1턴 이내에 너무 많은 갱신을 하셨습니다.'
]);
}
}
else{
$availableNextCall = $session->availableNextCallGetGeneralList??'2000-01-01 00:00:00';
$now = new \DateTimeImmutable();
if($now <= new \DateTimeImmutable($availableNextCall) && $session->userGrade < 5){
Json::die([
'result'=>false,
'reason'=>"장수 리스트는 10초에 한번 갱신 가능합니다.\n다음 시간 : ".$availableNextCall
]);
}
$availableNextCall = $now->add(new \DateInterval('PT10S'))->format('Y-m-d H:i:s');
$session->availableNextCallGetGeneralList = $availableNextCall;
}
$session->setReadOnly();
$rawGeneralList = $db->queryAllLists('SELECT owner,no,picture,imgsvr,npc,age,nation,special,special2,personal,name,owner_name as ownerName,injury,leadership,strength,intel,experience,dedication,officer_level,killturn,connect from general');
$ownerNameList = [];
if($gameStor->isunited){
foreach(RootDB::db()->queryAllLists('SELECT no, name FROM member') as [$ownerID, $ownerName]){
$ownerNameList[$ownerID] = $ownerName;
}
}
$generalList = [];
foreach($rawGeneralList as $rawGeneral){
[$owner,$no,$picture,$imgsvr,$npc,$age,$nation,$special,$special2,$personal,$name,$ownerName,$injury,$leadership,$strength,$intel,$experience,$dedication,$officerLevel,$killturn,$connectCnt] = $rawGeneral;
if(key_exists($owner, $ownerNameList)){
$ownerName = $ownerNameList[$owner];
}
$nationArr = getNationStaticInfo($nation);
$lbonus = calcLeadershipBonus($officerLevel, $nationArr['level']);
$generalList[] = [
$no,
$picture,
$imgsvr,
$npc,
$age,
$nationArr['name'],
getGeneralSpecialDomesticName($special),
getGeneralSpecialWarName($special2),
getGenChar($personal),
$name,
$npc==1?$ownerName:null,
$injury,
$leadership,
$lbonus,
$strength,
$intel,
getExpLevel($experience),
getHonor($experience),
getDed($dedication),
getOfficerLevelText($officerLevel, $nationArr['level']),
$killturn,
$connectCnt
];
}
$result = [
'result'=>'true',
'list'=>$generalList,
];
if($withToken){
$now = (new \DateTimeImmutable())->format('Y-m-d H:i:s');
$tokens = [];
foreach($db->query('SELECT * FROM select_npc_token WHERE `valid_until`>=%s', $now) as $token){
$validUntil = $token['valid_until'];
foreach(Json::decode($token['pick_result']) as $pickResult){
$tokens[$pickResult['no']]=$pickResult['keepCnt'];
}
}
$result['token'] = $tokens;
}
Json::die($result);
+184
View File
@@ -0,0 +1,184 @@
<?php
namespace sammo;
//통합 세력장수&암행부 viewer
include "lib.php";
include "func.php";
//로그인 검사
$session = Session::requireGameLogin([])->setReadOnly();
$userID = Session::getUserID();
$db = DB::db();
$reqType = Util::getReq('req', 'int', 1);
$reqForce = Util::getReq('force', 'bool', false);
$gameStor = KVStorage::getStorage($db, 'game_env');
increaseRefresh("세력장수", 1);
$me = $db->queryFirstRow('SELECT con, turntime, belong, nation, officer_level, permission, penalty FROM general WHERE owner=%i', $userID);
$con = checkLimit($me['con']);
if ($con >= 2) {
Json::die([
'result' => false,
'reason' => '접속 제한중입니다. 1턴 이내에 너무 많은 갱신을 하셨습니다.'
]);
}
$nationID = $me['nation'];
$permission = checkSecretPermission($me, true);
if ($reqForce && $reqType > $permission) {
Json::die([
'result' => false,
'reason' => '권한이 부족합니다.'
]);
}
$permission = min($reqType, $permission);
$nationArr = getNationStaticInfo($nationID);
$viewColumns = [
'no' => 0,
'name' => 0,
'owner_name' => 9,
'nation' => 0,
'city' => 1,
'officer_level' => 2,
'officer_city' => 2,
'npc' => 0,
'defence_train' => 2,
'troop' => 2,
'injury' => 0,
'leadership' => 0,
'strength' => 0,
'intel' => 0,
'experience' => 1,
'explevel' => 0,
'dedication' => 1,
'dedlevel' => 0,
'gold' => 0,
'rice' => 0,
'crewtype' => 2,
'crew' => 2,
'train' => 2,
'atmos' => 2,
'killturn' => 0,
'turntime' => 2,
'picture' => 0,
'imgsvr' => 0,
'age' => 0,
'special' => 0,
'special2' => 0,
'personal' => 0,
'belong' => 0,
'horse' => 2,
'weapon' => 2,
'book' => 2,
'item' => 2,
'connect' => 0
];
$customViewColumns = [
'officerLevel' => 0,
'officerLevelText' => 0,
'lbonus' => 0,
'ownerName' => 0,
'honorText' => 0
];
function getOfficerLevel($rawGeneral)
{
global $permission;
$level = $rawGeneral['officer_level'];
if ($level >= 5) {
return $level;
}
if ($permission > 1) {
return $level;
}
return 1;
}
$specialViewFilter = [
'officerLevel' => function ($rawGeneral){
return getOfficerLevel($rawGeneral);
},
'special' => function ($rawGeneral) {
return getGeneralSpecialDomesticName($rawGeneral['special']);
},
'special2' => function ($rawGeneral) {
return getGeneralSpecialWarName($rawGeneral['special2']);
},
'personal' => function ($rawGeneral) {
return getGenChar($rawGeneral['personal']);
},
'lbonus' => function ($rawGeneral) use ($nationArr) {
return calcLeadershipBonus($rawGeneral['officer_level'], $nationArr['level']);
},
'ownerName' => function ($rawGeneral) {
if ($rawGeneral['npc'] != 1) {
return null;
}
return $rawGeneral['owner_name'];
},
'officerLevelText' => function ($rawGeneral) use ($nationArr) {
$level = getOfficerLevel($rawGeneral);
return getOfficerLevelText($level, $nationArr['level']);
},
'honorText' => function ($rawGeneral) {
return getHonor($rawGeneral['experience']);
},
'dedLevelText' => function ($rawGeneral) {
return getDedLevelText($rawGeneral['dedLevel']);
},
'turntime' => function ($rawGeneral) {
//'0000-00-00 11:23';
return substr($rawGeneral['turntime'], 11, 5);
}
];
[$queryColumns, $rankColumns] = General::mergeQueryColumn(array_keys($viewColumns), 1);
$rawGeneralList = Util::convertArrayToDict($db->query('SELECT %l from general WHERE nation = %i', Util::formatListOfBackticks($queryColumns), $nationID), 'no');
$resultColumns = [];
foreach ($viewColumns as $column => $reqPermission) {
if ($reqPermission > $permission) {
continue;
}
$resultColumns[] = $column;
}
foreach ($customViewColumns as $column => $reqPermission) {
if ($reqPermission > $permission) {
continue;
}
$resultColumns[] = $column;
}
$generalList = [];
foreach ($rawGeneralList as $rawGeneral) {
//General 생성?
$item = [];
foreach ($resultColumns as $column) {
if (key_exists($column, $specialViewFilter)) {
$value = $specialViewFilter[$column]($rawGeneral);
}
else{
$value = $rawGeneral[$column];
}
$item[] = $value;
}
$generalList[] = $item;
}
$result = [
'result' => true,
'column' => $resultColumns,
'list' => $generalList,
];
Json::die($result);
+15 -8
View File
@@ -31,12 +31,17 @@ $now = time();
if($mapInfo && ($now - $mapInfo['timestamp'] < 600)){
$mapEtag = $mapInfo['etag'];
$mapModified = $mapInfo['timestamp'];
WebUtil::setCacheHeader(new APICacheResult(TimeUtil::secondsToDateTime($mapModified), $mapEtag));
$reqMapEtag = WebUtil::parseETag();
$reqModifiedSince = WebUtil::parseLastModified();
if($mapEtag === $reqMapEtag || $mapModified === $reqModifiedSince){
WebUtil::dieWithNotModified();
}
header("Last-Modified: ".gmdate("D, d M Y H:i:s", $mapModified)." GMT");
header("Etag: $mapEtag");
if (
strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']??'2000-01-01') === $mapModified ||
trim($_SERVER['HTTP_IF_NONE_MATCH']??'') === $mapEtag
) {
header("HTTP/1.1 304 Not Modified");
die();
}
Json::die($mapInfo['data'], 0);
}
@@ -60,9 +65,10 @@ $rawMap = getWorldMap([
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$mapTheme = $gameStor->map_theme ?? 'che';
$rawMap['history'] = $history;
$rawMap['theme'] = GameConst::$mapName;
$rawMap['theme'] = $mapTheme;
$etag = hash('sha256', $serverID.$now);
$map = [
@@ -71,6 +77,7 @@ $map = [
'data'=>$rawMap,
];
$cache->save("recent_map", $map);
WebUtil::setCacheHeader(new APICacheResult(TimeUtil::secondsToDateTime($now), $etag));
header("Last-Modified: ".gmdate("D, d M Y H:i:s", $now)." GMT");
header("Etag: $etag");
Json::die($map['data'], 0);
+8 -21
View File
@@ -231,10 +231,7 @@ function processWar_NG(
$logger->pushGlobalActionLog("<D><b>{$attacker->getNationVar('name')}</b></>의 <Y>{$attacker->getName()}</>{$josaYi} <G><b>{$city->getName()}</b></>{$josaRo} 진격합니다.");
$logger->pushGeneralActionLog("<G><b>{$city->getName()}</b></>{$josaRo} <M>진격</>합니다. <1>$date</>");
$logWritten = false;
while($attacker->getPhase() < $attacker->getMaxPhase()){
$logWritten = false;
for ($currPhase = 0; $currPhase < $attacker->getMaxPhase(); $currPhase += 1) {
if ($defender === null) {
$defender = $city;
@@ -259,8 +256,8 @@ function processWar_NG(
}
}
if ($defender->getPhase() == 0 && $defender->getOppose() == null) {
$defender->setPrePhase($attacker->getPhase());
if ($defender->getPhase() == 0) {
$defender->setPrePhase($currPhase);
$attacker->addTrain(1);
$defender->addTrain(1);
@@ -350,22 +347,15 @@ function processWar_NG(
$attacker->increaseKilled($deadDefender);
$defender->increaseKilled($deadAttacker);
if($defender->getPhase() < 0){
$phaseNickname = '先';
}
else{
$currPhase = $attacker->getPhase() + 1;
$phaseNickname = "{$currPhase} ";
}
$phaseNickname = $currPhase + 1;
if ($deadAttacker > 0 || $deadDefender > 0) {
$attacker->getLogger()->pushGeneralBattleDetailLog(
"$phaseNickname: <Y1>【{$attacker->getName()}】</> <C>{$attacker->getHP()} (-$deadAttacker)</> VS <C>{$defender->getHP()} (-$deadDefender)</> <Y1>【{$defender->getName()}】</>"
"$phaseNickname : <Y1>【{$attacker->getName()}】</> <C>{$attacker->getHP()} (-$deadAttacker)</> VS <C>{$defender->getHP()} (-$deadDefender)</> <Y1>【{$defender->getName()}】</>"
);
$defender->getLogger()->pushGeneralBattleDetailLog(
"$phaseNickname: <Y1>【{$defender->getName()}】</> <C>{$defender->getHP()} (-$deadDefender)</> VS <C>{$attacker->getHP()} (-$deadAttacker)</> <Y1>【{$attacker->getName()}】</>"
"$phaseNickname : <Y1>【{$defender->getName()}】</> <C>{$defender->getHP()} (-$deadDefender)</> VS <C>{$attacker->getHP()} (-$deadAttacker)</> <Y1>【{$attacker->getName()}】</>"
);
}
@@ -374,8 +364,6 @@ function processWar_NG(
$defender->addPhase();
if (!$attacker->continueWar($noRice)) {
$logWritten = true;
$attacker->logBattleResult();
$defender->logBattleResult();
@@ -398,7 +386,6 @@ function processWar_NG(
}
if (!$defender->continueWar($noRice)) {
$logWritten = true;
$attacker->logBattleResult();
$defender->logBattleResult();
@@ -427,7 +414,7 @@ function processWar_NG(
$defender->getLogger()->pushGeneralActionLog("전멸했습니다.", ActionLogger::PLAIN);
}
if ($attacker->getPhase() >= $attacker->getMaxPhase()) {
if ($currPhase + 1 == $attacker->getMaxPhase()) {
break;
}
@@ -440,7 +427,7 @@ function processWar_NG(
}
}
if (!$logWritten) {
if ($currPhase == $attacker->getMaxPhase()) {
//마지막 페이즈의 전투 마무리
$attacker->logBattleResult();
$defender->logBattleResult();
+2 -4
View File
@@ -16,10 +16,8 @@ include "func.php";
<title>최근 지도</title>
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
<?= WebUtil::printStaticValues([
'staticValues' => [
'serverNick' => DB::prefix(),
'serverID' => UniqueConst::$serverID
],
'serverNick' => DB::prefix(),
'serverID' => UniqueConst::$serverID
]) ?>
<?= WebUtil::printJS('d_shared/base_map.js') ?>
@@ -1,76 +0,0 @@
<?php
namespace sammo\API\Command;
use sammo\Session;
use DateTimeInterface;
use sammo\GameConst;
use sammo\Util;
use sammo\Validator;
use function sammo\setGeneralCommand;
class ReserveBulkCommand extends \sammo\BaseAPI
{
public function validateArgs(): ?string
{
foreach ($this->args as $idx => $turn) {
$v = new Validator($turn);
$v->rule('required', [
'action',
'turnList'
])
->rule('lengthMin', 'action', 1)
->rule('integerArray', 'turnList');
if (!$v->validate()) {
return "{$idx}:{$v->errorStr()}";
}
}
return null;
}
public function getRequiredSessionMode(): int
{
return static::REQ_GAME_LOGIN | static::REQ_READ_ONLY;
}
public function launch(Session $session, ?DateTimeInterface $modifiedSince, ?string $reqEtag)
{
$briefList = [];
foreach ($this->args as $idx => $turn) {
$action = $turn['action'];
$turnList = $turn['turnList'];
$arg = $turn['arg'] ?? [];
if (!$turnList) {
return "{$idx}: 턴이 입력되지 않았습니다";
}
if (!in_array($action, Util::array_flatten(GameConst::$availableGeneralCommand))) {
return "{$idx}: 사용할 수 없는 커맨드입니다.";
}
if (!is_array($arg)) {
return "{$idx}: 올바른 arg 형태가 아닙니다.";
}
$partialResult = setGeneralCommand($session->generalID, $turnList, $action, $arg);
if(!$partialResult['result']){
return [
'result' => false,
'briefList' => $briefList,
'errorIdx' => $idx,
'reason' => $partialResult['reason']
];
}
$briefList[$idx] = $partialResult['brief'];
}
return [
'result' => true,
'briefList' => $briefList,
'reason' => 'success'
];
}
}
-165
View File
@@ -1,165 +0,0 @@
<?php
namespace sammo\API\List\Nation;
use sammo\DB;
use sammo\General;
use sammo\Json;
use sammo\KVStorage;
use sammo\RootDB;
use sammo\Session;
use sammo\Util;
use sammo\Validator;
use function sammo\calcLeadershipBonus;
use function sammo\checkLimit;
use function sammo\checkSecretPermission;
use function sammo\getDed;
use function sammo\getDedLevelText;
use function sammo\getExpLevel;
use function sammo\getGenChar;
use function sammo\getGeneralSpecialDomesticName;
use function sammo\getGeneralSpecialWarName;
use function sammo\getHonor;
use function sammo\getNationStaticInfo;
use function sammo\getOfficerLevelText;
use function sammo\increaseRefresh;
class GeneralList extends \sammo\BaseAPI
{
public function validateArgs(): ?string
{
$v = new Validator($this->args);
$v
->rule('boolean', 'with_token');
if (!$v->validate()) {
return $v->errorStr();
}
return null;
}
public function getRequiredSessionMode(): int
{
return static::REQ_LOGIN;
}
public function launch(Session $session, ?\DateTimeInterface $modifiedSince, ?string $reqEtag)
{
$db = DB::db();
$withToken = $this->args['with_token']??false;
$gameStor = KVStorage::getStorage($db, 'game_env');
$userID = $session->userID;
if ($session->isGameLoggedIn()) {
increaseRefresh("장수일람", 2);
$me = $db->queryFirstRow('SELECT con, turntime FROM general WHERE owner=%i', $userID);
$con = checkLimit($me['con']);
if ($con >= 2) {
return '접속 제한중입니다. 1턴 이내에 너무 많은 갱신을 하셨습니다.';
}
} else {
$availableNextCall = $session->availableNextCallGetGeneralList ?? '2000-01-01 00:00:00';
$now = new \DateTimeImmutable();
if ($now <= new \DateTimeImmutable($availableNextCall) && $session->userGrade < 5) {
return "장수 리스트는 10초에 한번 갱신 가능합니다.\n다음 시간 : " . $availableNextCall;
}
$availableNextCall = $now->add(new \DateInterval('PT10S'))->format('Y-m-d H:i:s');
$session->availableNextCallGetGeneralList = $availableNextCall;
}
$session->setReadOnly();
$rawGeneralList = $db->queryAllLists('SELECT owner,no,picture,imgsvr,npc,age,nation,special,special2,personal,name,owner_name as ownerName,injury,leadership,strength,intel,experience,dedication,officer_level,killturn,connect from general');
$ownerNameList = [];
if ($gameStor->isunited) {
foreach (RootDB::db()->queryAllLists('SELECT no, name FROM member') as [$ownerID, $ownerName]) {
$ownerNameList[$ownerID] = $ownerName;
}
}
$generalList = [];
foreach ($rawGeneralList as $rawGeneral) {
[$owner, $no, $picture, $imgsvr, $npc, $age, $nation, $special, $special2, $personal, $name, $ownerName, $injury, $leadership, $strength, $intel, $experience, $dedication, $officerLevel, $killturn, $connectCnt] = $rawGeneral;
if (key_exists($owner, $ownerNameList)) {
$ownerName = $ownerNameList[$owner];
}
$nationArr = getNationStaticInfo($nation);
$lbonus = calcLeadershipBonus($officerLevel, $nationArr['level']);
$generalList[] = [
$no,
$picture,
$imgsvr,
$npc,
$age,
$nationArr['name'],
getGeneralSpecialDomesticName($special),
getGeneralSpecialWarName($special2),
getGenChar($personal),
$name,
$npc == 1 ? $ownerName : null,
$injury,
$leadership,
$lbonus,
$strength,
$intel,
getExpLevel($experience),
getHonor($experience),
getDed($dedication),
getOfficerLevelText($officerLevel, $nationArr['level']),
$killturn,
$connectCnt
];
}
$resultColumns = [
'no',
'picture',
'imgsvr',
'npc',
'age',
'nationName',
'special',
'special2',
'personal',
'name',
'ownerName',
'injury',
'leadership',
'lbonus',
'strength',
'intel',
'explevel',
'honorText',
'dedLevelText',
'officerLevelText',
];
$result = [
'result' => 'true',
'column' => $resultColumns,
'list' => $generalList,
];
if ($withToken) {
$now = (new \DateTimeImmutable())->format('Y-m-d H:i:s');
$tokens = [];
foreach ($db->query('SELECT * FROM select_npc_token WHERE `valid_until`>=%s', $now) as $token) {
$validUntil = $token['valid_until'];
foreach (Json::decode($token['pick_result']) as $pickResult) {
$tokens[$pickResult['no']] = $pickResult['keepCnt'];
}
}
$result['token'] = $tokens;
}
return $result;
}
}
-325
View File
@@ -1,325 +0,0 @@
<?php
namespace sammo\API\Global;
use sammo\Session;
use DateTimeInterface;
use sammo\VersionGit;
use Nette\Caching\Cache;
use RuntimeException;
use sammo\APICacheResult;
use sammo\CityConst;
use sammo\GameConst;
use sammo\GameUnitConst;
use sammo\Json;
use sammo\TimeUtil;
use sammo\UniqueConst;
use function sammo\prepareDir;
class GetConst extends \sammo\BaseAPI
{
/** 반환하는 StaticValues 타입이 달라지면 +1 */
const CONST_API_VERSION = 2;
const CACHE_KEY = 'JSConst';
private ?string $cacheKey = null;
public function __construct(string $rootPath, array $args)
{
parent::__construct($rootPath, $args);
}
public function validateArgs(): ?string
{
return null;
}
public function getRequiredSessionMode(): int
{
return static::REQ_LOGIN;
}
public function findLastModified(): ?int
{
$rawResult = explode("\n", shell_exec('git status -u -s --no-rename'));
$files = [];
foreach ($rawResult as $rawLine) {
if (strlen($rawLine) < 3) {
continue;
}
$filePath = trim(substr($rawLine, 3));
if ($filePath[0] == '"') {
$filePath = substr($filePath, 1, strlen($filePath) - 2);
}
if (!file_exists($filePath)) {
continue;
}
$files[] = $filePath;
}
$lastModified = null;
foreach ($files as $filePath) {
$fileModified = filemtime($filePath);
if ($fileModified === false) {
continue;
}
if ($lastModified === null) {
$lastModified = $fileModified;
continue;
}
if ($lastModified > $fileModified) {
continue;
}
$lastModified = $fileModified;
}
if ($lastModified === null) {
return null;
}
return $lastModified;
}
public function getCacheKey(): string
{
if ($this->cacheKey !== null) {
return $this->cacheKey;
}
if (is_subclass_of('\\sammo\\VersionGit', '\\sammo\VersionGitDynamic')) {
$lastModified = $this->findLastModified();
if ($lastModified !== null) {
$versionHash = "lt{$lastModified}";
} else {
$versionHash = VersionGit::getHash();
}
} else {
$versionHash = VersionGit::getHash();
}
$apiVersion = static::CONST_API_VERSION;
$serverID = UniqueConst::$serverID;
$cacheKey = "{$apiVersion}_{$serverID}_{$versionHash}";
$this->cacheKey = $cacheKey;
return $cacheKey;
}
public function tryCache(): ?APICacheResult
{
if (is_subclass_of('\\sammo\\VersionGit', '\\sammo\VersionGitDynamic')) {
return new APICacheResult(TimeUtil::secondsToDateTime($this->findLastModified()??\time(), true, true));
}
return new APICacheResult(null, $this->getCacheKey());
}
public function readCache(Cache $cache): null|string|array|int|float|bool
{
$rawJSONCache = $cache->load(static::CACHE_KEY);
if ($rawJSONCache === null) {
return null;
}
$jsonCache = Json::decode($rawJSONCache);
if (!key_exists('cacheKey', $jsonCache)) {
return null;
}
$jsonCacheKey = $jsonCache['cacheKey'];
if ($jsonCacheKey !== $this->getCacheKey()) {
return null;
}
return $jsonCache['data'] ?? null;
}
public function extractObjClassInfo(string $objKey, callable $callerFunction): array
{
/** @var \sammo\iAction */
$target = $callerFunction($objKey);
if (!($target instanceof \sammo\iAction)) {
throw new \RuntimeException("{$objKey}의 대상이 iAction이 아님");
}
return [
'value' => $objKey,
'name' => $target->getName(),
'info' => $target->getInfo(),
];
}
public function extractObjClassInfoFromArray(array $constArray, callable $callerFunction): array
{
$result = [];
foreach ($constArray as $key => $target) {
if (is_string($target)) {
$actionInfo = $this->extractObjClassInfo($target, $callerFunction);
if (is_string($key)) {
$result[$key] = $actionInfo;
} else {
$result[$target] = $actionInfo;
}
continue;
}
if (is_array($target)) {
$result[$key] = $this->extractObjClassInfoFromArray($target, $callerFunction);
continue;
}
if(is_string($key) && is_int($target)){
//역전된 상황이다.
$result[$key] = $this->extractObjClassInfo($key, $callerFunction);
continue;
}
$result[$key] = $target;
}
return $result;
}
public function extractObjClassInfoFromGameConst(string $gameConstKey, callable $callerFunction): array
{
$gameConstKeyList = explode(".", $gameConstKey);
$target = (GameConst::${$gameConstKeyList[0]}) ?? [];
foreach(\array_slice($gameConstKeyList, 1) as $gameConstSubKey){
$target = $target[$gameConstSubKey] ?? [];
}
if (is_string($target)) {
return [$target => $this->extractObjClassInfo($target, $callerFunction)];
}
if (!is_array($target)) {
throw new \RuntimeException("GameConst::{$gameConstKey}의 값이 {$target}");
}
return $this->extractObjClassInfoFromArray($target, $callerFunction);
}
public function genConstData()
{
$gameConstKeys = [
'nationType' => [
'\sammo\buildNationTypeClass',
['availableNationType', 'neutralNationType']
],
'specialDomestic' => [
'\sammo\buildGeneralSpecialDomesticClass',
['defaultSpecialDomestic', 'availableSpecialDomestic', 'optionalSpecialDomestic']
],
'specialWar' => [
'\sammo\buildGeneralSpecialWarClass',
['defaultSpecialWar', 'availableSpecialWar', 'optionalSpecialWar']
],
'personality' => [
'\sammo\buildPersonalityClass',
['neutralPersonality', 'availablePersonality', 'optionalPersonality']
],
'item' => [
'\sammo\buildItemClass',
['allItems'],
1
],
];
//GameConst 중 BaseCommand는 시간 흐름, 장수에 따라 정보가 달라지므로 따로 처리해야함
$iActionInfo = [];
$iActionKeyMap = [];
foreach ($gameConstKeys as $mappedKey => $callerTarget) {
$flatLevel = 0;
if (is_array($callerTarget)) {
$callerFunction = $callerTarget[0];
$gameConstSubKey = $callerTarget[1];
if(count($callerTarget) > 2){
/** @var int */
$flatLevel = $callerTarget[2];
}
} else {
$gameConstSubKey = [$mappedKey];
$callerFunction = $callerTarget;
}
if (!is_callable($callerFunction)) {
throw new \RuntimeException("{$mappedKey} => {$callerFunction}이 callable이 아님");
}
$actionInfo = [];
foreach ($gameConstSubKey as $key) {
$appendInfo = $this->extractObjClassInfoFromGameConst($key, $callerFunction);
$actionInfo = array_merge($actionInfo, $appendInfo);
$iActionKeyMap[$key] = $mappedKey;
}
if($flatLevel > 0){
foreach(range(0, $flatLevel - 1) as $tryFlatLevel){
$actionInfo = array_merge(...array_values($actionInfo));
}
}
$iActionInfo[$mappedKey] = $actionInfo;
}
$crewtypeMap = [];
foreach(GameUnitConst::all() as $crewtypeObj){
$crewtypeMap[$crewtypeObj->id] = [
'value'=>(string)$crewtypeObj->id,
'name'=>$crewtypeObj->name,
'info'=>$crewtypeObj->getInfo(),
];
}
$iActionInfo['crewtype'] = $crewtypeMap;
return [
'gameConst' => get_class_vars('\sammo\GameConst'),
'gameUnitConst' => GameUnitConst::all(),
'cityConst' => CityConst::all(),
'cityConstMap' => [
'region' => CityConst::$regionMap,
'level' => CityConst::$levelMap,
],
'iActionInfo' => $iActionInfo,
'iActionKeyMap' => $iActionKeyMap,
];
}
public function launch(Session $session, ?DateTimeInterface $modifiedSince, ?string $reqEtag)
{
$cacheDir = $this->rootPath . '/data/file_cache';
if (!prepareDir($cacheDir)) {
throw new RuntimeException('cache 폴더 없음');
}
$storage = new \Nette\Caching\Storages\FileStorage($cacheDir);
$cache = new Cache($storage);
$currentCacheKey = $this->tryCache();
if($modifiedSince !== null && $currentCacheKey->lastModified == $modifiedSince){
return null;
}
if($reqEtag !== null && $currentCacheKey->etag == $reqEtag){
return null;
}
$constCache = $this->readCache($cache);
if ($constCache !== null) {
return [
'result' => true,
'cacheKey' => $this->getCacheKey(),
'data' => $constCache,
];
}
$constCache = $this->genConstData();
$cache->save(static::CACHE_KEY, Json::encode([
'cacheKey' => $this->getCacheKey(),
'data' => $constCache
]));
return [
'result' => true,
'cacheKey' => $this->getCacheKey(),
'data' => $constCache,
];
}
}
-285
View File
@@ -1,285 +0,0 @@
<?php
namespace sammo\API\Nation;
use sammo\DB;
use sammo\General;
use sammo\Session;
use sammo\Util;
use sammo\Validator;
use function sammo\calcLeadershipBonus;
use function sammo\checkLimit;
use function sammo\checkSecretPermission;
use function sammo\getBillByLevel;
use function sammo\getDedLevelText;
use function sammo\getGenChar;
use function sammo\getGeneralSpecialDomesticName;
use function sammo\getGeneralSpecialWarName;
use function sammo\getHonor;
use function sammo\getNationStaticInfo;
use function sammo\getOfficerLevelText;
use function sammo\increaseRefresh;
class GeneralList extends \sammo\BaseAPI
{
private int $permission;
static $viewColumns = [
'no' => 0,
'name' => 0,
'nation' => 0,
'npc' => 0,
'injury' => 0,
'leadership' => 0,
'strength' => 0,
'intel' => 0,
'explevel' => 0,
'dedlevel' => 0,
'gold' => 0,
'rice' => 0,
'killturn' => 0,
'picture' => 0,
'imgsvr' => 0,
'age' => 0,
'special' => 0,
'special2' => 0,
'personal' => 0,
'belong' => 0,
'connect' => 0,
'city' => 1,
'experience' => 1,
'dedication' => 1,
'officer_level' => 2,
'officer_city' => 2,
'defence_train' => 2,
'troop' => 2,
'crewtype' => 2,
'crew' => 2,
'train' => 2,
'atmos' => 2,
'turntime' => 2,
'horse' => 2,
'weapon' => 2,
'book' => 2,
'item' => 2,
'recent_war' => 2,
'aux' => 2,
'owner_name' => 9,//안씀.
//RANK
'warnum' => 2,
'killnum' => 2,
'deathnum' => 2,
'killcrew' => 2,
'deathcrew' => 2,
'firenum' => 2,
];
static $columnRemap = [
'special' => 'specialDomestic',
'special2' => 'specialWar',
'aux' => null,
];
static $customViewColumns = [
'officerLevel' => 0,
'officerLevelText' => 0,
'lbonus' => 0,
'ownerName' => 0,
'honorText' => 0,
'dedLevelText' => 0,
'bill' => 0,
'reservedCommand' => 2,
'autorun_limit' => 2,
];
public function validateArgs(): ?string
{
//TODO: 장기적으로는 요청에 따라 반환해야...
return null;
}
public function getRequiredSessionMode(): int
{
return static::REQ_GAME_LOGIN | static::REQ_READ_ONLY;
}
private function getOfficerLevel($rawGeneral)
{
$level = $rawGeneral['officer_level'];
if ($level >= 5) {
return $level;
}
if ($this->permission > 1) {
return $level;
}
return 1;
}
public function launch(Session $session, ?\DateTimeInterface $modifiedSince, ?string $reqEtag)
{
increaseRefresh("세력장수", 1);
$db = DB::db();
$gameStor = \sammo\KVStorage::getStorage($db, 'game_env');
$env = $gameStor->getValues(['year', 'month', 'turntime', 'turnterm', 'autorun_user', 'killturn']);
$me = $db->queryFirstRow('SELECT con, turntime, belong, nation, officer_level, permission, penalty FROM general WHERE owner=%i', $session->getUserID());
$con = checkLimit($me['con']);
if ($con >= 2) {
return '접속 제한중입니다. 1턴 이내에 너무 많은 갱신을 하셨습니다.';
}
$nationID = $me['nation'];
$this->permission = checkSecretPermission($me, true);
$nationArr = getNationStaticInfo($nationID);
[$queryColumns, $rankColumns] = General::mergeQueryColumn(array_keys(static::$viewColumns), 1);
$rawGeneralList = Util::convertArrayToDict($db->query('SELECT %l from general WHERE nation = %i ORDER BY turntime ASC', Util::formatListOfBackticks($queryColumns), $nationID), 'no');
$reservedCommand = [];
if ($this->permission >= 2) {
$nonNPCGeneralIDList = [];
foreach ($rawGeneralList as $rawGeneral) {
if ($rawGeneral['npc'] < 2) {
$nonNPCGeneralIDList[] = $rawGeneral['no'];
}
}
$rawTurnList = $db->query(
'SELECT general_id, turn_idx, action, arg, brief FROM general_turn WHERE general_id IN %li AND turn_idx < 5 ORDER BY general_id asc, turn_idx asc',
$nonNPCGeneralIDList
);
foreach ($rawTurnList as $rawTurn) {
[
'general_id' => $generalID,
'action' => $action,
'arg' => $arg,
'brief' => $brief,
] = $rawTurn;
if (!key_exists($generalID, $reservedCommand)) {
$reservedCommand[$generalID] = [];
}
$reservedCommand[$generalID][] = [
'action' => $action,
'arg' => $arg,
'brief' => $brief
];
}
}
$rankList = [];
if ($rankColumns) {
$rawRankList = $db->query('SELECT general_id, `type`, `value` FROM rank_data WHERE nation_id = %i AND `type` IN %ls', $nationID, $rankColumns);
foreach ($rawRankList as $rawRank) {
[
'general_id' => $generalID,
'type' => $type,
'value' => $value
] = $rawRank;
if (!key_exists($generalID, $rankList)) {
$rankList[$generalID] = [];
}
$rankList[$generalID][$type] = $value;
}
}
$getRankVar = fn ($key) => (fn ($rawGeneral) => (($rankList[$rawGeneral['no']] ?? [])[$key] ?? 0));
$specialViewFilter = [
'officerLevel' => fn ($rawGeneral) => $this->getOfficerLevel($rawGeneral),
'officerLevelText' => fn ($rawGeneral) => getOfficerLevelText($this->getOfficerLevel($rawGeneral), $nationArr['level']),
'lbonus' => fn ($rawGeneral) => calcLeadershipBonus($rawGeneral['officer_level'], $nationArr['level']),
'ownerName' => fn ($rawGeneral) => ($rawGeneral['npc'] != 1) ? null : $rawGeneral['owner_name'],
'honorText' => fn ($rawGeneral) => getHonor($rawGeneral['experience']),
'dedLevelText' => fn ($rawGeneral) => getDedLevelText($rawGeneral['dedlevel']),
//'0000-00-00 11:23';
'turntime' => fn ($rawGeneral) => substr($rawGeneral['turntime'], 0, 19),
'recent_war' => fn ($rawGeneral) => substr($rawGeneral['recent_war'], 0, 19),
'bill' => fn ($rawGeneral) => getBillByLevel($rawGeneral['dedlevel']),
'reservedCommand' => fn ($rawGeneral) => $reservedCommand[$rawGeneral['no']] ?? null,
'autorun_limit' => fn ($rawGeneral) => ($rawGeneral['aux'] ?? [])['autorun_limit'] ?? 0,
];
foreach ($rankColumns as $rankKey) {
$specialViewFilter[$rankKey] = $getRankVar($rankKey);
}
$resultColumns = [];
foreach (static::$viewColumns as $column => $reqPermission) {
if ($reqPermission > $this->permission) {
continue;
}
if (key_exists($column, static::$columnRemap)) {
$newColumn = static::$columnRemap[$column];
if($newColumn !== null){
$resultColumns[$newColumn] = $column;
}
} else {
$resultColumns[$column] = $column;
}
}
foreach (static::$customViewColumns as $column => $reqPermission) {
if ($reqPermission > $this->permission) {
continue;
}
$resultColumns[$column] = $column;
}
$generalList = [];
foreach ($rawGeneralList as $rawGeneral) {
//General 생성?
if (key_exists('aux', $rawGeneral)) {
$rawGeneral['aux'] = \sammo\JSON::decode($rawGeneral['aux']);
}
$item = [];
foreach ($resultColumns as $column) {
if (key_exists($column, $specialViewFilter)) {
$value = $specialViewFilter[$column]($rawGeneral);
} else {
$value = $rawGeneral[$column];
}
$item[] = $value;
}
$generalList[] = $item;
}
if($this->permission >= 2){
$troops = $db->queryAllLists('SELECT troop_leader,name FROM troop WHERE nation = %i', $nationID);
}
else{
$troops = null;
}
$result = [
'result' => true,
'permission' => $this->permission,
'column' => array_keys($resultColumns),
'list' => $generalList,
'troops' => $troops,
'env' => $env,
];
return $result;
}
}
@@ -117,8 +117,6 @@ class GetReservedCommand extends \sammo\BaseAPI
'autorun_limit' => $generalObj->getAuxVar('autorun_limit'),
'officerLevel' => $me['officer_level'],
'commandList' => getChiefCommandTable($generalObj),
'mapName' => GameConst::$mapName,
'unitSet' => GameConst::$unitSet,
];
}
}
@@ -1,76 +0,0 @@
<?php
namespace sammo\API\NationCommand;
use sammo\Session;
use DateTimeInterface;
use sammo\GameConst;
use sammo\Util;
use sammo\Validator;
use function sammo\setNationCommand;
class ReserveBulkCommand extends \sammo\BaseAPI
{
public function validateArgs(): ?string
{
foreach ($this->args as $idx => $turn) {
$v = new Validator($turn);
$v->rule('required', [
'action',
'turnList'
])
->rule('lengthMin', 'action', 1)
->rule('integerArray', 'turnList');
if (!$v->validate()) {
return "{$idx}:{$v->errorStr()}";
}
}
return null;
}
public function getRequiredSessionMode(): int
{
return static::REQ_GAME_LOGIN | static::REQ_READ_ONLY;
}
public function launch(Session $session, ?DateTimeInterface $modifiedSince, ?string $reqEtag)
{
$briefList = [];
foreach ($this->args as $idx => $turn) {
$action = $turn['action'];
$turnList = $turn['turnList'];
$arg = $turn['arg'] ?? [];
if (!$turnList) {
return "{$idx}: 턴이 입력되지 않았습니다";
}
if (!in_array($action, Util::array_flatten(GameConst::$availableChiefCommand))) {
return "{$idx}: 사용할 수 없는 커맨드입니다.";
}
if (!is_array($arg)) {
return "{$idx}: 올바른 arg 형태가 아닙니다.";
}
$partialResult = setNationCommand($session->generalID, $turnList, $action, $arg);
if(!$partialResult['result']){
return [
'result' => false,
'briefList' => $briefList,
'errorIdx' => $idx,
'reason' => $partialResult['reason']
];
}
$briefList[$idx] = $partialResult['brief'];
}
return [
'result' => true,
'briefList' => $briefList,
'reason' => 'success'
];
}
}
+3 -4
View File
@@ -13,7 +13,7 @@ class che_보물_도기 extends \sammo\BaseItem
protected $rawName = '도기';
protected $name = '도기(보물)';
protected $info = '[개인] 판매 시 장수 소지금과 국고에 금, 쌀 중 하나를 추가 (+10,000, 5년마다 +10,000)';
protected $info = '[개인] 판매 시 국고에 금, 쌀 중 하나를 추가 (+10,000, 5년마다 +10,000)';
protected $cost = 200;
protected $consumable = false;
@@ -48,16 +48,15 @@ class che_보물_도기 extends \sammo\BaseItem
if ($nationId != 0) {
$db->update('nation', [
$resKey => $db->sqleval('%b + %i', $resKey, Util::toInt($score / 2))
$resKey => $db->sqleval('%b + %i', $resKey, $score)
], 'nation=%i', $nationId);
}
$general->increaseVar($resKey, $score - Util::toInt($score / 2));
$score = Util::round($score);
$scoreText = number_format($score, 0);
$logger = $general->getLogger();
$logger->pushGeneralActionLog("재산과 국고에 {$resName} <C>{$scoreText}</>을 보충합니다.");
$logger->pushGeneralActionLog("국고에 {$resName} <C>{$scoreText}</>을 보충합니다.");
return $aux;
}
}
@@ -10,7 +10,7 @@ class che_상성보정_과실주 extends \sammo\BaseItem{
protected $rawName = '과실주';
protected $name = '과실주(상성)';
protected $info = '[전투] 대등/유리한 병종 전투시 공격력 +10%, 피해 -10%';
protected $info = '[전투] 유리한 병종 전투시 공격력 +10%, 피해 -10%';
protected $cost = 200;
protected $consumable = false;
@@ -18,7 +18,7 @@ class che_상성보정_과실주 extends \sammo\BaseItem{
{
$oppose = $unit->getOppose();
$attackCoef = $unit->getCrewType()->getAttackCoef($oppose->getCrewType());
if($attackCoef < 1){
if($attackCoef <= 1){
return null;
}
return new WarUnitTriggerCaller(
-6
View File
@@ -10,10 +10,4 @@ abstract class BaseNation implements iAction{
protected $info = '';
static $pros = '';
static $cons = '';
public function getInfo(): string{
$pros = static::$pros;
$cons = static::$cons;
return "{$pros} {$cons}";
}
}
+10 -31
View File
@@ -26,7 +26,7 @@ class Betting
return Json::encode($bettingType);
}
public function purifyBettingKey(array $bettingType, bool $ignoreOver = false): array
public function purifyBettingKey(array $bettingType): array
{
$selectCnt = $this->info->selectCnt;
sort($bettingType, SORT_NUMERIC);
@@ -39,7 +39,7 @@ class Betting
throw new \InvalidArgumentException('올바르지 않은 값이 있습니다.(0 미만)' . print_r($bettingType, true));
}
if (!$ignoreOver && Util::array_last($bettingType) >= count($this->info->candidates)) {
if (Util::array_last($bettingType) >= count($this->info->candidates)) {
throw new \InvalidArgumentException('올바르지 않은 값이 있습니다.(초과)' . print_r($bettingType, true));
}
@@ -155,19 +155,6 @@ class Betting
}
if ($subAmount == 0) {
$refundList = [];
//당첨자가 아무도 없다면 무효로 하자.
foreach ($db->queryAllLists(
'SELECT general_id, user_id, amount, betting_type FROM ng_betting WHERE betting_id = %i',
$this->bettingID
) as [$generalID, $userID, $amount, $bettingTypeKey]) {
$refundList[] = [
'generalID' => $generalID,
'userID' => $userID,
'amount' => $amount,
'matchPoint' => 0,
];
}
return [];
}
@@ -246,12 +233,8 @@ class Betting
}
$remainRewardAmount = $totalAmount;
$accumulatedRewardAmount = 0;
$givenRewardAmount = $totalAmount;
$rewardAmount = [];
foreach (Util::range($selectCnt, 0, -1) as $matchPoint) {
$givenRewardAmount /= 2;
$accumulatedRewardAmount += $givenRewardAmount;
if (count($subWinners[$matchPoint]) == 0) {
continue;
}
@@ -259,21 +242,17 @@ class Betting
continue;
}
$rewardAmount[$matchPoint] = $accumulatedRewardAmount;
$remainRewardAmount -= $accumulatedRewardAmount;
$accumulatedRewardAmount = 0;
$givenRewardAmount = $remainRewardAmount / 2;
$rewardAmount[$matchPoint] = $givenRewardAmount;
$remainRewardAmount -= $givenRewardAmount; // /2가 아니라 다른 값이 될 경우를 대비..
}
//남은 상금은 '당첨자'에게 몰아준다.
//당첨자가 아무도 없다면, 0개 맞춘 그룹에게 돌아간다.
if($rewardAmount){
foreach(Util::range($selectCnt, -1, -1) as $matchPoint){
if (!key_exists($matchPoint, $rewardAmount)) {
continue;
}
$rewardAmount[$matchPoint] += $rewardAmount;
break;
foreach (Util::range(1, $selectCnt + 1) as $matchPoint) {
if (!key_exists($matchPoint, $rewardAmount)) {
continue;
}
$rewardAmount[$matchPoint] += $remainRewardAmount;
break;
}
$result = [];
+1
View File
@@ -173,6 +173,7 @@ class che_강행 extends Command\GeneralCommand
public function exportJSVars(): array
{
return [
'mapTheme' => \sammo\getMapTheme(),
'procRes' => [
'cities' => \sammo\JSOptionsForCities(),
'distanceList' => \sammo\JSCitiesBasedOnDistance($this->generalObj->getCityID(), 3),
@@ -183,7 +183,7 @@ class che_랜덤임관 extends Command\GeneralCommand
if ($notIn) {
$rawGeneralsCnt = $db->query(
"SELECT g.`nation`, n.`gennum`, n.name, SUM((ra.value + 1000)/(rb.value + 1000)*(CASE WHEN g.`npc` < 2 THEN 1.2 ELSE 1 END)*(CASE WHEN g.`leadership` >= 40 THEN g.`leadership` ELSE 0 END)) AS warpower, SUM(SQRT(g.intel * g.strength) * 2 + g.leadership / 2)/5 AS develpower
"SELECT g.`nation`, n.`gennum`, n.name, SUM((ra.value + 1000)/(rb.value + 1000)*(CASE WHEN g.`leadership` >= 40 THEN g.`leadership` ELSE 0 END)) AS warpower, SUM(SQRT(g.intel * g.strength) * 2 + g.leadership / 2)/5 AS develpower
FROM general AS g
LEFT JOIN `rank_data` AS ra ON g.`no` = ra.general_id AND ra.`type` = 'killcrew_person'
LEFT JOIN `rank_data` AS rb ON g.`no` = rb.general_id AND rb.`type` = 'deathcrew_person'
@@ -195,7 +195,7 @@ class che_랜덤임관 extends Command\GeneralCommand
);
} else {
$rawGeneralsCnt = $db->query(
"SELECT g.`nation`, n.`gennum`, n.name, SUM((ra.value + 100)/(rb.value + 100)*(CASE WHEN g.`npc` < 2 THEN 1.2 ELSE 1 END)*(CASE WHEN g.`leadership` >= 40 THEN g.`leadership` ELSE 0 END)) AS warpower, SUM(SQRT(g.intel * g.strength) * 2 + g.leadership / 2)/5 AS develpower
"SELECT g.`nation`, n.`gennum`, n.name, SUM((ra.value + 100)/(rb.value + 100)*(CASE WHEN g.`leadership` >= 40 THEN g.`leadership` ELSE 0 END)) AS warpower, SUM(SQRT(g.intel * g.strength) * 2 + g.leadership / 2)/5 AS develpower
FROM general AS g
LEFT JOIN `rank_data` AS ra ON g.`no` = ra.general_id AND ra.`type` = 'killcrew_person'
LEFT JOIN `rank_data` AS rb ON g.`no` = rb.general_id AND rb.`type` = 'deathcrew_person'
+1
View File
@@ -181,6 +181,7 @@ class che_이동 extends Command\GeneralCommand
public function exportJSVars(): array
{
return [
'mapTheme' => \sammo\getMapTheme(),
'procRes' => [
'cities' => \sammo\JSOptionsForCities(),
'distanceList' => \sammo\JSCitiesBasedOnDistance($this->generalObj->getCityID(), 1),
+1 -2
View File
@@ -162,7 +162,6 @@ class che_임관 extends Command\GeneralCommand
$general->setVar('officer_level', 1);
$general->setVar('officer_city', 0);
$general->setVar('belong', 1);
$general->setVar('troop', 0);
if ($this->destGeneralObj !== null) {
$general->setVar('city', $this->destGeneralObj->getCityID());
@@ -201,7 +200,6 @@ class che_임관 extends Command\GeneralCommand
$rawNationList = Util::convertArrayToDict($db->query('SELECT nation,`name`,color,gennum,`power` FROM nation'), 'nation');
$scoutMsgs = KVStorage::getValuesFromInterNamespace($db, 'nation_env', 'scout_msg');
$nationList = [];
foreach ($scoutMsgs as $destNationID => $scoutMsg) {
$rawNationList[$destNationID]['scoutmsg'] = $scoutMsg;
}
@@ -225,6 +223,7 @@ class che_임관 extends Command\GeneralCommand
$nationList[] = $nationTarget;
}
return [
'mapTheme' => \sammo\getMapTheme(),
'procRes' => [
'nationList' => $nationList,
'startYear' => $this->env['startyear'],
@@ -13,7 +13,7 @@ use \sammo\{
};
use function sammo\getAllNationStaticInfo;
use function \sammo\formatName;
use function \sammo\getColoredName;
use function \sammo\tryUniqueItemLottery;
use function \sammo\getInvitationList;
use function \sammo\getNationStaticInfo;
+1
View File
@@ -228,6 +228,7 @@ class che_첩보 extends Command\GeneralCommand
public function exportJSVars(): array
{
return [
'mapTheme' => \sammo\getMapTheme(),
'procRes' => [
'cities' => \sammo\JSOptionsForCities(),
'distanceList' => \sammo\JSCitiesBasedOnDistance($this->generalObj->getCityID(), 3),
+1
View File
@@ -244,6 +244,7 @@ class che_출병 extends Command\GeneralCommand
public function exportJSVars(): array
{
return [
'mapTheme' => \sammo\getMapTheme(),
'procRes' => [
'cities' => \sammo\JSOptionsForCities(),
'distanceList' => \sammo\JSCitiesBasedOnDistance($this->generalObj->getCityID(), 1),
-12
View File
@@ -62,7 +62,6 @@ class che_하야 extends Command\GeneralCommand{
$general = $this->generalObj;
$date = $general->getTurnTime($general::TURNTIME_HM);
$generalID = $general->getID();
$generalName = $general->getName();
$josaYi = JosaUtil::pick($generalName, '이');
@@ -102,17 +101,6 @@ class che_하야 extends Command\GeneralCommand{
$general->setVar('officer_city', 0);
$general->setVar('belong', 0);
$general->setVar('makelimit', 12);
//부대장일 경우
if($general->getVar('troop') == $generalID){
// 모두 탈퇴
$db->update('general', [
'troop'=>0,
], 'troop = %i', $generalID);
$db->delete('troop', 'troop_leader=%i', $generalID);
}
$general->setVar('troop', 0);
$general->increaseInheritancePoint('active_action', 1);
$this->setResultTurn(new LastTurn(static::getName(), $this->arg));
+1 -1
View File
@@ -281,7 +281,6 @@ class che_화계 extends Command\GeneralCommand
$prob = GameConst::$sabotageDefaultProb + $this->calcSabotageAttackProb() - $this->calcSabotageDefenceProb($destCityGeneralList);
$prob /= $dist;
$prob = Util::valueFit($prob, 0, 0.5);
if (!Util::randBool($prob)) {
$josaYi = JosaUtil::pick($commandName, '이');
@@ -342,6 +341,7 @@ class che_화계 extends Command\GeneralCommand
public function exportJSVars(): array
{
return [
'mapTheme' => \sammo\getMapTheme(),
'procRes' => [
'cities' => \sammo\JSOptionsForCities(),
'distanceList' => \sammo\JSCitiesBasedOnDistance($this->generalObj->getCityID(), 3),
+1
View File
@@ -221,6 +221,7 @@ class che_급습 extends Command\NationCommand
$nationList[] = $nationTarget;
}
return [
'mapTheme' => \sammo\getMapTheme(),
'procRes' => [
'nationList' => $nationList,
'startYear' => $this->env['startyear'],
@@ -291,6 +291,7 @@ class che_물자원조 extends Command\NationCommand
}
return [
'mapTheme' => \sammo\getMapTheme(),
'procRes' => [
'nationList' => $nationList,
'currentNationLevel' => $currentNationLevel,
+1
View File
@@ -177,6 +177,7 @@ class che_발령 extends Command\NationCommand
$troops = Util::convertArrayToDict($db->query('SELECT * FROM troop WHERE nation=%i', $nationID), 'troop_leader');
$destRawGenerals = $db->queryAllLists('SELECT no,name,officer_level,npc,gold,rice,leadership,strength,intel,city,crew,train,atmos,troop FROM general WHERE nation = %i ORDER BY npc,binary(name)', $nationID);
return [
'mapTheme' => \sammo\getMapTheme(),
'procRes' => [
'distanceList' => \sammo\JSCitiesBasedOnDistance($this->generalObj->getCityID(), 1),
'cities' => \sammo\JSOptionsForCities(),
@@ -156,8 +156,11 @@ class che_백성동원 extends Command\NationCommand
'wall' => $db->sqleval('GREATEST(wall_max * 0.8, wall)'),
], 'city=%i', $destCityID);
$josaYiNation = JosaUtil::pick($nationName, '이');
$logger->pushGeneralHistoryLog('<M>백성동원</>을 발동');
$logger->pushNationalHistoryLog("<Y>{$generalName}</>{$josaYi} <G><b>{$destCityName}</b></>에 <M>백성동원</>을 발동");
$logger->pushNationalHistoryLog("<L><b>【전략】</b></><D><b>{$nationName}</b></>{$josaYiNation} <G><b>{$destCityName}</b></>에 <M>백성동원</>을 하였습니다.");
$db->update('nation', [
'strategic_cmd_limit' => $this->generalObj->onCalcStrategic($this->getName(), 'globalDelay', 9)
@@ -172,6 +175,7 @@ class che_백성동원 extends Command\NationCommand
public function exportJSVars(): array
{
return [
'mapTheme' => \sammo\getMapTheme(),
'procRes' => [
'cities' => \sammo\JSOptionsForCities(),
'distanceList' => new \stdClass(),
@@ -101,13 +101,13 @@ class che_불가침제의 extends Command\NationCommand
$nationID = $this->nation['nation'];
if ($reqMonth < $currentMonth + 6) {
if ($reqMonth < $currentMonth + 12) {
$this->permissionConstraints = [
ConstraintHelper::AlwaysFail('기한은 6개월 이상이어야 합니다.')
ConstraintHelper::AlwaysFail('기한은 1년 이상이어야 합니다.')
];
$this->fullConditionConstraints = [
ConstraintHelper::AlwaysFail('기한은 6개월 이상이어야 합니다.')
ConstraintHelper::AlwaysFail('기한은 1년 이상이어야 합니다.')
];
return;
}
@@ -255,6 +255,7 @@ class che_불가침제의 extends Command\NationCommand
$nationList[] = $nationTarget;
}
return [
'mapTheme' => \sammo\getMapTheme(),
'procRes' => [
'nationList' => $nationList,
'startYear' => $this->env['startyear'],
@@ -200,6 +200,7 @@ class che_불가침파기제의 extends Command\NationCommand{
$nationList[] = $nationTarget;
}
return [
'mapTheme' => \sammo\getMapTheme(),
'procRes' => [
'nationList' => $nationList,
'startYear' => $this->env['startyear'],
@@ -219,6 +219,7 @@ class che_선전포고 extends Command\NationCommand
$nationList[] = $nationTarget;
}
return [
'mapTheme' => \sammo\getMapTheme(),
'procRes' => [
'nationList' => $nationList,
'startYear' => $this->env['startyear'],
+1
View File
@@ -199,6 +199,7 @@ class che_수몰 extends Command\NationCommand
public function exportJSVars(): array
{
return [
'mapTheme' => \sammo\getMapTheme(),
'procRes' => [
'cities' => \sammo\JSOptionsForCities(),
'distanceList' => new \stdClass(),
@@ -224,6 +224,7 @@ class che_이호경식 extends Command\NationCommand
$nationList[] = $nationTarget;
}
return [
'mapTheme' => \sammo\getMapTheme(),
'procRes' => [
'nationList' => $nationList,
'startYear' => $this->env['startyear'],
@@ -193,6 +193,7 @@ class che_종전제의 extends Command\NationCommand{
$nationList[] = $nationTarget;
}
return [
'mapTheme' => \sammo\getMapTheme(),
'procRes' => [
'nationList' => $nationList,
'startYear' => $this->env['startyear'],
+1
View File
@@ -233,6 +233,7 @@ class che_천도 extends Command\NationCommand
public function exportJSVars(): array
{
return [
'mapTheme' => \sammo\getMapTheme(),
'procRes' => [
'cities' => \sammo\JSOptionsForCities(),
'distanceList' => new \stdClass(),
@@ -199,6 +199,7 @@ class che_초토화 extends Command\NationCommand{
public function exportJSVars(): array
{
return [
'mapTheme' => \sammo\getMapTheme(),
'procRes' => [
'cities' => \sammo\JSOptionsForCities(),
'distanceList' => new \stdClass(),
@@ -280,6 +280,7 @@ class che_피장파장 extends Command\NationCommand
}
return [
'mapTheme' => \sammo\getMapTheme(),
'procRes' => [
'nationList' => $nationList,
'startYear' => $this->env['startyear'],
+1
View File
@@ -202,6 +202,7 @@ class che_허보 extends Command\NationCommand
public function exportJSVars(): array
{
return [
'mapTheme' => \sammo\getMapTheme(),
'procRes' => [
'cities' => \sammo\JSOptionsForCities(),
'distanceList' => new \stdClass(),
-3
View File
@@ -16,9 +16,6 @@ class DummyGeneral extends General{
'dedication'=>0,
'gold'=>0,
'rice'=>0,
'leadership'=>10,
'strength'=>10,
'intel'=>10,
];
$this->raw = $raw;
+2 -12
View File
@@ -49,20 +49,10 @@ class FinishNationBetting extends \sammo\Event\Action
}
$winnerTypes = [];
$notInBettingWinner = 0;
foreach ($winnerNations as $winnerNationID) {
if(key_exists($winnerNationID, $nationIDMap)){
$winnerTypes[] = $nationIDMap[$winnerNationID];
}
else{
//혹시라도 베팅 시점 이후에 생성된 국가라 없을 수 있다.
$winnerTypes[] = count($nationIDMap) + $notInBettingWinner;
$notInBettingWinner += 1;
}
$winnerTypes[] = $nationIDMap[$winnerNationID];
}
$winnerTypes = $bettingHelper->purifyBettingKey($winnerTypes, $notInBettingWinner > 0);
$winnerTypes = $bettingHelper->purifyBettingKey($winnerTypes);
$bettingHelper->giveReward($winnerTypes);
$logger = new ActionLogger(0, 0, $env['year'], $env['month']);
+17 -17
View File
@@ -275,17 +275,9 @@ class GameConstBase
/** @var array 선택 가능한 커맨드 */
public static $availableGeneralCommand = [
'개인' => [
'' => [
'휴식',
'che_요양',
'che_단련',
'che_숙련전환',
'che_견문',
'che_은퇴',
'che_장비매매',
'che_군량매매',
'che_내정특기초기화',
'che_전투특기초기화',
'che_요양'
],
'내정' => [
'che_농지개간',
@@ -299,35 +291,43 @@ class GameConstBase
'che_물자조달',
],
'군사' => [
'che_소집해제',
'che_첩보',
'che_징병',
'che_모병',
'che_훈련',
'che_사기진작',
'che_출병',
'che_집합',
'che_소집해제',
'che_첩보',
],
'인사' => [
'che_이동',
'che_강행',
'che_인재탐색',
'che_등용',
'che_집합',
'che_귀환',
'che_임관',
'che_랜덤임관',
'che_장수대상임관',
],
'계략' => [
'che_선동',
'che_탈취',
'che_파괴',
'che_화계',
'che_파괴',
'che_탈취',
'che_선동',
],
'국가' => [
'개인' => [
'che_내정특기초기화',
'che_전투특기초기화',
'che_단련',
'che_숙련전환',
'che_견문',
'che_장비매매',
'che_군량매매',
'che_증여',
'che_헌납',
'che_하야',
'che_은퇴',
'che_거병',
'che_건국',
'che_선양',
+11 -11
View File
@@ -110,48 +110,48 @@ class GameUnitConstBase{
[
1200, self::T_ARCHER, '궁병',
100, 100, 7, 10, 0, 10, 10,
100, 100, 7, 15, 0, 10, 10,
0, null, null, 0,
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
['표준적인 궁병입니다.','궁병은 선제사격을 하는 병종입니다.'],
null, ['che_궁병선제사격']
['표준적인 궁병입니다.','궁병은 회피특화입니다.'],
null, null
],
[
1201, self::T_ARCHER, '궁기병',
100, 100, 8, 20, 0, 11, 12,
100, 100, 8, 25, 0, 11, 12,
1000, null, ['동이'], 0,
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
['말을 타고 잘 피합니다.'],
null, ['che_궁병선제사격']
null, null
],
[
1202, self::T_ARCHER, '연노병',
150, 100, 8, 10, 0, 12, 11,
150, 100, 8, 15, 0, 12, 11,
1000, null, ['서촉'], 0,
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
['화살을 연사합니다.'],
null, ['che_궁병선제사격']
null, null
],
[
1203, self::T_ARCHER, '강궁병',
150, 150, 7, 10, 0, 13, 13,
150, 150, 7, 15, 0, 13, 13,
3000, ['양양'], null, 0,
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
['강건한 궁병입니다.'],
null, ['che_궁병선제사격']
null, null
],
[
1204, self::T_ARCHER, '석궁병',
200, 100, 7, 10, 0, 13, 13,
200, 100, 7, 15, 0, 13, 13,
3000, ['건업'], null, 0,
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
['강력한 화살을 쏩니다.'],
null, ['che_궁병선제사격']
null, null
],
[
+2 -9
View File
@@ -4095,21 +4095,17 @@ class GeneralAI
return 20;
}
$nationGenerals = $this->nationGenerals;
$nationGenerals[] = $this->general;
$dedicationList = array_map(function (General $general) {
return $general->getRaw();
}, array_filter($this->nationGenerals, function (General $rawGeneral) {
return $rawGeneral->getVar('npc') != 5;
return $rawGeneral->getVar('officer_level') != 5;
}));
$goldIncome = getGoldIncome($nation['nation'], $nation['level'], $nation['rate'], $nation['capital'], $nation['type'], $cityList);
$warIncome = getWarGoldIncome($nation['type'], $cityList);
$income = $goldIncome + $warIncome;
$outcome = Util::valueFit(getOutcome(100, $dedicationList), 1);
$outcome = getOutcome(100, $dedicationList);
$bill = intval($income / $outcome * 90); // 수입의 90% 만 지급
if ($nation['gold'] + $income - $outcome > $this->nationPolicy->reqNationGold * 2) {
@@ -4142,9 +4138,6 @@ class GeneralAI
return 20;
}
$nationGenerals = $this->nationGenerals;
$nationGenerals[] = $this->general;
$dedicationList = array_map(function (General $general) {
return $general->getRaw();
}, array_filter($this->nationGenerals, function (General $rawGeneral) {
+1 -1
View File
@@ -250,7 +250,7 @@ class ResetHelper{
'month'=> $month,
'init_year'=> $year,
'init_month'=>$month,
'map_theme' => $scenarioObj->getMapTheme(), //@deprecated
'map_theme' => $scenarioObj->getMapTheme(),
'season'=>$seasonIdx,
'msg'=>'공지사항',//TODO:공지사항
'maxgeneral'=>GameConst::$defaultMaxGeneral,
+2 -28
View File
@@ -47,8 +47,8 @@ class TriggerOfficerLevel implements iAction{
}
}
}
return $value;
}
@@ -58,30 +58,4 @@ class TriggerOfficerLevel implements iAction{
}
return $value;
}
public function getWarPowerMultiplier(WarUnit $unit): array
{
$officerLevel = $this->officerLevel;
$warPowerMultiply = 1;
$opposeWarPowerMultiply = 1;
if ($officerLevel == 12) {
$warPowerMultiply = 1.07;
$opposeWarPowerMultiply = 0.93;
}
else if($officerLevel == 11){
$warPowerMultiply = 1.05;
$opposeWarPowerMultiply = 0.95;
}
else if(in_array($officerLevel, [10, 8, 6])){
$warPowerMultiply = 1.10;
}
else if(in_array($officerLevel, [9, 7, 5])){
$opposeWarPowerMultiply = 0.90;
}
else if(in_array($officerLevel, [4, 3, 2])){
$warPowerMultiply = 1.05;
$opposeWarPowerMultiply = 0.95;
}
return [$warPowerMultiply, $opposeWarPowerMultiply];
}
}
+88 -157
View File
@@ -1,9 +1,7 @@
<?php
namespace sammo;
class WarUnit
{
class WarUnit{
protected $general;
protected $rawNation;
@@ -33,39 +31,32 @@ class WarUnit
protected $logActivatedSkill = [];
protected $isFinished = false;
private function __construct(General $general)
{
private function __construct(General $general){
$this->general = $general;
}
/* XXX:Dirty wrapper */
function getRaw(): array
{
function getRaw():array{
return $this->general->getRaw();
}
function getVar(string $key)
{
function getVar(string $key){
return $this->general->getVar($key);
}
function touchVar(string $key): bool
{
function touchVar(string $key):bool{
return $this->general->touchVar($key);
}
function setVar(string $key, $value)
{
function setVar(string $key, $value){
return $this->general->setVar($key, $value);
}
function updateVar(string $key, $value)
{
function updateVar(string $key, $value){
return $this->general->updateVar($key, $value);
}
function updateVarWithLimit(string $key, $value, $min = null, $max = null)
{
function updateVarWithLimit(string $key, $value, $min = null, $max = null){
return $this->general->updateVarWithLimit($key, $value, $min, $max);
}
@@ -74,8 +65,7 @@ class WarUnit
return $this->general->increaseVar($key, $value);
}
function increaseVarWithLimit(string $key, $value, $min = null, $max = null)
{
function increaseVarWithLimit(string $key, $value, $min = null, $max = null){
return $this->general->increaseVarWithLimit($key, $value, $min, $max);
}
@@ -84,203 +74,170 @@ class WarUnit
return $this->general->multiplyVar($key, $value);
}
function multiplyVarWithLimit(string $key, $value, $min = null, $max = null)
{
function multiplyVarWithLimit(string $key, $value, $min = null, $max = null){
return $this->general->multiplyVarWithLimit($key, $value, $min, $max);
}
function getUpdatedValues(): array
{
function getUpdatedValues():array {
return $this->general->getUpdatedValues();
}
function flushUpdateValues(): void
{
function flushUpdateValues():void {
$this->general->flushUpdateValues();
}
protected function clearActivatedSkill()
{
foreach ($this->activatedSkill as $skillName => $state) {
if (!$state) {
protected function clearActivatedSkill(){
foreach($this->activatedSkill as $skillName=>$state){
if(!$state){
continue;
}
if (!key_exists($skillName, $this->logActivatedSkill)) {
if(!key_exists($skillName, $this->logActivatedSkill)){
$this->logActivatedSkill[$skillName] = 1;
} else {
}
else{
$this->logActivatedSkill[$skillName] += 1;
}
}
$this->activatedSkill = [];
}
function getActivatedSkillLog(): array
{
function getActivatedSkillLog():array{
return $this->logActivatedSkill;
}
function getRawNation(): array
{
function getRawNation():array{
return $this->rawNation;
}
function getNationVar(string $key)
{
function getNationVar(string $key){
return $this->rawNation[$key];
}
function getPhase(): int
{
function getPhase():int{
return $this->currPhase;
}
function getRealPhase(): int
{
function getRealPhase():int{
return $this->prePhase + $this->currPhase;
}
function getName(): string
{
function getName():string{
return 'EMPTY';
}
function isAttacker(): bool
{
function isAttacker():bool{
return $this->isAttacker;
}
function getCrewType(): GameUnitDetail
{
function getCrewType():GameUnitDetail{
return $this->crewType;
}
function getCrewTypeName(): string
{
function getCrewTypeName():string{
return $this->getCrewType()->name;
}
function getCrewTypeShortName(): string
{
function getCrewTypeShortName():string{
return $this->getCrewType()->getShortName();
}
function getLogger(): ActionLogger
{
function getLogger():ActionLogger{
$logger = $this->getGeneral()->getLogger();
if ($logger === null) {
if($logger === null){
throw new \RuntimeException();
}
return $logger;
}
function getKilled(): int
{
function getKilled():int{
return $this->killed;
}
function getDead(): int
{
function getDead():int{
return $this->dead;
}
function getKilledCurrentBattle(): int
{
function getKilledCurrentBattle():int{
return $this->killedCurr;
}
function getDeadCurrentBattle(): int
{
function getDeadCurrentBattle():int{
return $this->deadCurr;
}
function getGeneral(): General
{
function getGeneral():General{
return $this->general;
}
function getMaxPhase(): int
{
function getMaxPhase():int{
$phase = $this->getCrewType()->speed;
return $phase + $this->bonusPhase;
}
function setPrePhase(int $phase)
{
function setPrePhase(int $phase){
$this->prePhase = $phase;
}
function addPhase(int $phase = 1)
{
$this->currPhase += $phase;
function addPhase(){
$this->currPhase += 1;
}
function addBonusPhase(int $cnt)
{
function addBonusPhase(int $cnt){
$this->bonusPhase += $cnt;
}
function setOppose(?WarUnit $oppose)
{
function setOppose(?WarUnit $oppose){
$this->oppose = $oppose;
$this->killedCurr = 0;
$this->deadCurr = 0;
$this->clearActivatedSkill();
}
function getOppose(): ?WarUnit
{
function getOppose():?WarUnit{
return $this->oppose;
}
function getWarPower()
{
function getWarPower(){
return $this->warPower * $this->warPowerMultiply;
}
function getRawWarPower()
{
function getRawWarPower(){
return $this->warPower;
}
function getWarPowerMultiply()
{
function getWarPowerMultiply(){
return $this->warPowerMultiply;
}
function setWarPowerMultiply($multiply = 1.0)
{
function setWarPowerMultiply($multiply = 1.0){
$this->warPowerMultiply = $multiply;
}
function multiplyWarPowerMultiply($multiply)
{
function multiplyWarPowerMultiply($multiply){
$this->warPowerMultiply *= $multiply;
}
function getComputedAttack()
{
function getComputedAttack(){
return $this->getCrewType()->getComputedAttack($this->general, $this->getNationVar('tech'));
}
function getComputedDefence()
{
function getComputedDefence(){
return $this->getCrewType()->getComputedDefence($this->general, $this->getNationVar('tech'));
}
function computeWarPower()
{
function computeWarPower(){
$oppose = $this->getOppose();
$general = $this->general;
$opposeGeneral = $oppose->getGeneral();
$myAtt = $this->getComputedAttack();
$opDef = $oppose->getComputedDefence();
// 감소할 병사
// 감소할 병사
$warPower = GameConst::$armperphase + $myAtt - $opDef;
$opposeWarPowerMultiply = 1.0;
if ($warPower < 100) {
if($warPower < 100){
//최소 전투력 50 보장
$warPower = max(0, $warPower);
$warPower = ($warPower + 100) / 2;
@@ -291,11 +248,11 @@ class WarUnit
$warPower /= $oppose->getComputedTrain();
$genDexAtt = $this->getDex($this->getCrewType(), true);
$oppDexDef = $oppose->getDex($this->getCrewType(), false);
$warPower *= getDexLog($genDexAtt, $oppDexDef);
$warPower *= $this->getCrewType()->getAttackCoef($oppose->getCrewType());
$opposeWarPowerMultiply *= $this->getCrewType()->getDefenceCoef($oppose->getCrewType());
@@ -305,143 +262,117 @@ class WarUnit
return [$warPower, $opposeWarPowerMultiply];
}
function addTrain(int $train)
{
function addTrain(int $train){
return;
}
function addAtmos(int $atmos)
{
function addAtmos(int $atmos){
return;
}
function addTrainBonus(int $trainBonus)
{
function addTrainBonus(int $trainBonus){
$this->trainBonus += $trainBonus;
}
function addAtmosBonus(int $atmosBonus)
{
function addAtmosBonus(int $atmosBonus){
$this->atmosBonus += $atmosBonus;
}
function getComputedTrain()
{
function getComputedTrain(){
return GameConst::$maxTrainByCommand;
}
function getComputedAtmos()
{
function getComputedAtmos(){
return GameConst::$maxAtmosByCommand;
}
function getComputedCriticalRatio(): float
{
function getComputedCriticalRatio():float{
return $this->getCrewType()->getCriticalRatio($this->general);
}
function getComputedAvoidRatio(): float
{
function getComputedAvoidRatio():float{
return $this->getCrewType()->avoid / 100;
}
function addWin()
{
function addWin(){
}
function addLose()
{
function addLose(){
}
function getDex(GameUnitDetail $crewType)
{
function getDex(GameUnitDetail $crewType){
throw new NotInheritedMethodException();
}
function finishBattle()
{
function finishBattle(){
throw new NotInheritedMethodException();
}
function beginPhase(): void
{
function beginPhase():void{
$this->clearActivatedSkill();
$this->computeWarPower();
}
function hasActivatedSkill(string $skillName): bool
{
return $this->activatedSkill[$skillName] ?? false;
function hasActivatedSkill(string $skillName):bool{
return $this->activatedSkill[$skillName]??false;
}
function hasActivatedSkillOnLog(string $skillName): int
{
return ($this->logActivatedSkill[$skillName] ?? 0) + ($this->hasActivatedSkill($skillName) ? 1 : 0);
function hasActivatedSkillOnLog(string $skillName):int{
return ($this->logActivatedSkill[$skillName]??0)+($this->hasActivatedSkill($skillName)?1:0);
}
function activateSkill(...$skillNames)
{
foreach ($skillNames as $skillName) {
function activateSkill(... $skillNames){
foreach($skillNames as $skillName){
$this->activatedSkill[$skillName] = true;
}
}
function deactivateSkill(...$skillNames)
{
foreach ($skillNames as $skillName) {
function deactivateSkill(... $skillNames){
foreach($skillNames as $skillName){
$this->activatedSkill[$skillName] = false;
}
}
function getHP(): int
{
function getHP():int{
throw new NotInheritedMethodException();
}
function decreaseHP(int $damage): int
{
function decreaseHP(int $damage):int{
$this->dead += $damage;
throw new NotInheritedMethodException();
}
function increaseKilled(int $damage): int
{
function increaseKilled(int $damage):int{
$this->killed += $damage;
throw new NotInheritedMethodException();
}
function calcDamage(): int
{
function calcDamage():int{
$warPower = $this->getWarPower();
$warPower *= Util::randRange(0.9, 1.1);
return Util::round($warPower);
}
function tryWound(): bool
{
function tryWound():bool{
return false;
}
function continueWar(&$noRice): bool
{
function continueWar(&$noRice):bool{
//전투가 가능하면 true
$noRice = false;
return false;
}
function logBattleResult()
{
function logBattleResult(){
$this->getLogger()->pushBattleResultTemplate($this, $this->getOppose());
}
function criticalDamage(): float
{
function criticalDamage():float{
//전특, 병종에 따라 필살 데미지가 달라질지도 모르므로 static 함수는 아닌 것으로
return Util::randRange(1.3, 2.0);
}
function applyDB(\MeekroDB $db): bool
{
function applyDB(\MeekroDB $db):bool{
throw new MustNotBeReachedException('Must be WarUnitCity or WarUnitGeneral');
}
}
}
+20
View File
@@ -209,6 +209,25 @@ class WarUnitGeneral extends WarUnit
[$warPower, $opposeWarPowerMultiply] = parent::computeWarPower();
$general = $this->general;
$cityID = $general->getCityID();
$officerLevel = $general->getVar('officer_level');
$officerCity = $general->getVar('officer_city');
if ($this->isAttacker) {
if ($officerLevel == 12) {
$warPower *= 1.10;
} else if ($officerLevel == 11 || $officerLevel == 10 || $officerLevel == 8 || $officerLevel == 6) {
$warPower *= 1.05;
}
} else {
if ($officerLevel == 12) {
$opposeWarPowerMultiply *= 0.90;
} else if ($officerLevel == 11 || $officerLevel == 9 || $officerLevel == 7 || $officerLevel == 5) {
$opposeWarPowerMultiply *= 0.95;
} else if (2 <= $officerLevel && $officerLevel <= 4 && $officerCity == $cityID) {
$opposeWarPowerMultiply *= 0.95;
}
}
$expLevel = $general->getVar('explevel');
@@ -219,6 +238,7 @@ class WarUnitGeneral extends WarUnit
$opposeWarPowerMultiply *= max(0.01, 1 - $expLevel / 300);
}
[$specialMyWarPowerMultiply, $specialOpposeWarPowerMultiply] = $this->general->getWarPowerMultiplier($this);
$warPower *= $specialMyWarPowerMultiply;
$opposeWarPowerMultiply *= $specialOpposeWarPowerMultiply;
@@ -1,52 +0,0 @@
<?php
namespace sammo\WarUnitTrigger;
use sammo\ActionLogger;
use sammo\BaseWarUnitTrigger;
use sammo\GameUnitConst;
use sammo\WarUnitGeneral;
use sammo\WarUnitCity;
use sammo\WarUnit;
use sammo\GameUnitDetail;
use sammo\Util;
use sammo\ObjectTrigger;
class che_궁병선제사격 extends BaseWarUnitTrigger
{
protected $priority = ObjectTrigger::PRIORITY_BEGIN;
protected function actionWar(WarUnit $self, WarUnit $oppose, array &$selfEnv, array &$opposeEnv): bool
{
assert($self instanceof WarUnitGeneral, 'General만 발동 가능');
if ($self->getPhase() !== 0 && $oppose->getPhase() !== 0) {
return true;
}
if ($self->hasActivatedSkill('선제')) {
return true;
}
if ($self->hasActivatedSkillOnLog('선제')) {
return true;
}
$self->activateSkill('특수', '선제');
if (!$self->isAttacker()) {
$self->addPhase(-1);
$oppose->addPhase(-1);
if ($oppose->getCrewType()->armType == GameUnitConst::T_ARCHER) {
$oppose->multiplyWarPowerMultiply(0.5);
} else {
$oppose->multiplyWarPowerMultiply(0);
$self->activateSkill('회피불가', '필살불가', '계략불가');
$oppose->activateSkill('회피불가', '계략불가');
}
} else {
$oppose->multiplyWarPowerMultiply(0.5);
}
$oppose->getLogger()->pushGeneralBattleDetailLog('상대에게 <R>선제 사격</>을 받았다!</>', ActionLogger::PLAIN);
$self->getLogger()->pushGeneralBattleDetailLog('상대에게 <C>선제 사격</>을 했다!</>', ActionLogger::PLAIN);
return true;
}
}
@@ -20,14 +20,11 @@ class che_돌격지속 extends BaseWarUnitTrigger{
if(!$self->isAttacker()){
return true;
}
$attackCoef = $self->getCrewType()->getAttackCoef($oppose->getCrewType());
if($attackCoef < 1){
if($oppose->hasActivatedSkill('선제') && $self->getPhase() >= $self->getMaxPhase() - 2){
$self->addBonusPhase(-1);
}
if($self->getPhase() < $self->getMaxPhase() - 1){
return true;
}
if($self->getPhase() < $self->getMaxPhase() - 1){
$attackCoef = $self->getCrewType()->getAttackCoef($oppose->getCrewType());
if($attackCoef < 1){
return true;
}
$self->addBonusPhase(1);
@@ -33,6 +33,9 @@ class che_약탈발동 extends BaseWarUnitTrigger
return true;
}
$general->increaseVarWithLimit('atmos', $selfEnv['addAtmos'], 0, GameConst::$maxAtmosByWar);
$opposeGeneral = $oppose->getGeneral();
$theftGold = $opposeGeneral->getVar('gold') * $selfEnv['theftRatio'];
+1 -1
View File
@@ -1,5 +1,5 @@
{
"title": "【가상모드24-b】 유저무쌍 멀티 유니버스!(비급)",
"title": "【가상모드24-b】 유저무쌍 멀티 유니버스!(천지비급)",
"startYear": 180,
"history": [
"<C>●</>180년 1월:<L><b>【가상모드24-b】</b>유저무쌍 멀티 유니버스!(비급)</>",
-734
View File
@@ -1,734 +0,0 @@
{
"title": "【가상모드25】 악질유저무쌍!",
"startYear": 180,
"history": [
"<C>●</>180년 1월:<L><b>【가상모드25】</b>악질유저무쌍!</>",
"<C>●</>180년 1월:<L><b>【이벤트】</b></>최고의 악질유저를 가려라!"
],
"stat": {
"total": 310,
"min": 40,
"max": 140
},
"iconPath": ".",
"fiction": 1,
"nation":[
],
"diplomacy":[],
"general":[
[0, "아회남", null, 0, null, 65, 74, 26, 0, 160, 300, null, null],
[0, "이적", null, 0, null, 40, 24, 84, 0, 160, 300, null, null],
[0, "윤상", null, 0, null, 51, 44, 62, 0, 160, 300, null, null],
[0, "윤묵", null, 0, null, 26, 15, 66, 0, 160, 300, null, null],
[0, "우금", null, 0, null, 85, 82, 62, 0, 160, 300, null, null],
[0, "위관", null, 0, null, 69, 46, 79, 0, 160, 300, null, null],
[0, "원윤", null, 0, null, 32, 14, 39, 0, 160, 300, null, null],
[0, "원희", null, 0, null, 66, 43, 63, 0, 160, 300, null, null],
[0, "염행", null, 0, null, 78, 90, 58, 0, 160, 300, null, null],
[0, "염유", null, 0, null, 71, 50, 71, 0, 160, 300, null, null],
[0, "원술", null, 0, null, 76, 55, 75, 0, 160, 300, null, null],
[0, "원상", null, 0, null, 63, 75, 42, 0, 160, 300, null, null],
[0, "원소", null, 0, null, 90, 62, 81, 0, 160, 300, null, null],
[0, "염상", null, 0, null, 40, 27, 71, 0, 160, 300, null, null],
[0, "원담", null, 0, null, 60, 78, 30, 0, 160, 300, null, null],
[0, "염포", null, 0, null, 40, 25, 82, 0, 160, 300, null, null],
[0, "왕위", null, 0, null, 60, 70, 48, 0, 160, 300, null, null],
[0, "왕윤", null, 0, null, 26, 6, 68, 0, 160, 300, null, null],
[0, "왕항", null, 0, null, 76, 43, 61, 0, 160, 300, null, null],
[0, "왕찬", null, 0, null, 15, 3, 79, 0, 160, 300, null, null],
[0, "왕수", null, 0, null, 54, 27, 77, 0, 160, 300, null, null],
[0, "왕숙", null, 0, null, 36, 22, 76, 0, 160, 300, null, null],
[0, "왕준", null, 0, null, 85, 64, 84, 0, 160, 300, null, null],
[0, "왕쌍", null, 0, null, 67, 88, 19, 0, 160, 300, null, null],
[0, "왕창", null, 0, null, 74, 57, 79, 0, 160, 300, null, null],
[0, "왕평", null, 0, null, 88, 81, 61, 0, 160, 300, null, null],
[0, "왕보", null, 0, null, 62, 41, 79, 0, 160, 300, null, null],
[0, "왕문", null, 0, null, 65, 64, 31, 0, 160, 300, null, null],
[0, "왕릉", null, 0, null, 74, 50, 71, 0, 160, 300, null, null],
[0, "왕루", null, 0, null, 28, 30, 79, 0, 160, 300, null, null],
[0, "왕랑", null, 0, null, 47, 35, 79, 0, 160, 300, null, null],
[0, "온회", null, 0, null, 62, 36, 74, 0, 160, 300, null, null],
[0, "하안", null, 0, null, 15, 30, 72, 0, 160, 300, null, null],
[0, "괴월", null, 0, null, 50, 38, 85, 0, 160, 300, null, null],
[0, "괴량", null, 0, null, 68, 33, 88, 0, 160, 300, null, null],
[0, "가화", null, 0, null, 49, 65, 41, 0, 160, 300, null, null],
[0, "가규", null, 0, null, 78, 61, 84, 0, 160, 300, null, null],
[0, "하의", null, 0, null, 56, 69, 36, 0, 160, 300, null, null],
[0, "화흠", null, 0, null, 51, 33, 88, 0, 160, 300, null, null],
[0, "가후", null, 0, null, 71, 40, 98, 0, 160, 300, null, null],
[0, "곽가", null, 0, null, 70, 41, 97, 0, 160, 300, null, null],
[0, "악환", null, 0, null, 65, 80, 42, 0, 160, 300, null, null],
[0, "곽사", null, 0, null, 64, 76, 13, 0, 160, 300, null, null],
[0, "악취", null, 0, null, 53, 66, 61, 0, 160, 300, null, null],
[0, "곽준", null, 0, null, 73, 52, 73, 0, 160, 300, null, null],
[0, "학소", null, 0, null, 88, 63, 83, 0, 160, 300, null, null],
[0, "악진", null, 0, null, 80, 85, 56, 0, 160, 300, null, null],
[0, "곽도", null, 0, null, 62, 50, 82, 0, 160, 300, null, null],
[0, "학맹", null, 0, null, 62, 67, 42, 0, 160, 300, null, null],
[0, "곽유지", null, 0, null, 28, 9, 69, 0, 160, 300, null, null],
[0, "곽익", null, 0, null, 73, 69, 69, 0, 160, 300, null, null],
[0, "곽회", null, 0, null, 90, 66, 85, 0, 160, 300, null, null],
[0, "하후위", null, 0, null, 71, 73, 49, 0, 160, 300, null, null],
[0, "하후연", null, 0, null, 95, 92, 72, 0, 160, 300, null, null],
[0, "하후은", null, 0, null, 63, 72, 53, 0, 160, 300, null, null],
[0, "하후화", null, 0, null, 48, 51, 71, 0, 160, 300, null, null],
[0, "하후혜", null, 0, null, 50, 44, 76, 0, 160, 300, null, null],
[0, "하후현", null, 0, null, 54, 39, 76, 0, 160, 300, null, null],
[0, "하후상", null, 0, null, 79, 55, 75, 0, 160, 300, null, null],
[0, "하후덕", null, 0, null, 69, 73, 32, 0, 160, 300, null, null],
[0, "하후돈", null, 0, null, 91, 88, 68, 0, 160, 300, null, null],
[0, "하후패", null, 0, null, 79, 85, 63, 0, 160, 300, null, null],
[0, "하후무", null, 0, null, 20, 7, 4, 0, 160, 300, null, null],
[0, "가충", null, 0, null, 54, 31, 89, 0, 160, 300, null, null],
[0, "하진", null, 0, null, 68, 54, 75, 0, 160, 300, null, null],
[0, "화웅", null, 0, null, 78, 90, 55, 0, 160, 300, null, null],
[0, "한윤", null, 0, null, 26, 29, 65, 0, 160, 300, null, null],
[0, "관우", null, 0, null, 96, 99, 76, 0, 160, 300, null, null],
[0, "환계", null, 0, null, 25, 26, 68, 0, 160, 300, null, null],
[0, "관해", null, 0, null, 70, 82, 10, 0, 160, 300, null, null],
[0, "관구검", null, 0, null, 84, 86, 62, 0, 160, 300, null, null],
[0, "한현", null, 0, null, 22, 33, 7, 0, 160, 300, null, null],
[0, "한호", null, 0, null, 73, 61, 84, 0, 160, 300, null, null],
[0, "관흥", null, 0, null, 76, 84, 62, 0, 160, 300, null, null],
[0, "관색", null, 0, null, 74, 83, 56, 0, 160, 300, null, null],
[0, "한수", null, 0, null, 78, 58, 79, 0, 160, 300, null, null],
[0, "한숭", null, 0, null, 25, 15, 71, 0, 160, 300, null, null],
[0, "관정", null, 0, null, 36, 52, 73, 0, 160, 300, null, null],
[0, "한섬", null, 0, null, 69, 66, 36, 0, 160, 300, null, null],
[0, "감택", null, 0, null, 51, 49, 83, 0, 160, 300, null, null],
[0, "한충", null, 0, null, 64, 67, 18, 0, 160, 300, null, null],
[0, "한당", null, 0, null, 76, 85, 61, 0, 160, 300, null, null],
[0, "한덕", null, 0, null, 63, 76, 25, 0, 160, 300, null, null],
[0, "감녕", null, 0, null, 92, 95, 74, 0, 160, 300, null, null],
[0, "한복", null, 0, null, 28, 3, 27, 0, 160, 300, null, null],
[0, "관평", null, 0, null, 78, 82, 60, 0, 160, 300, null, null],
[0, "간옹", null, 0, null, 20, 32, 75, 0, 160, 300, null, null],
[0, "안량", null, 0, null, 88, 96, 43, 0, 160, 300, null, null],
[0, "위연", null, 0, null, 91, 90, 70, 0, 160, 300, null, null],
[0, "국의", null, 0, null, 84, 78, 51, 0, 160, 300, null, null],
[0, "희지재", null, 0, null, 63, 35, 91, 0, 160, 300, null, null],
[0, "위속", null, 0, null, 67, 78, 31, 0, 160, 300, null, null],
[0, "위유", null, 0, null, 46, 29, 74, 0, 160, 300, null, null],
[0, "우금2", null, 0, null, 72, 79, 38, 0, 160, 300, null, null],
[0, "우보", null, 0, null, 38, 60, 21, 0, 160, 300, null, null],
[0, "강유", null, 0, null, 92, 72, 93, 0, 160, 300, null, null],
[0, "공지", null, 0, null, 43, 53, 62, 0, 160, 300, null, null],
[0, "교유", null, 0, null, 64, 69, 38, 0, 160, 300, null, null],
[0, "공도", null, 0, null, 59, 70, 23, 0, 160, 300, null, null],
[0, "허공", null, 0, null, 44, 66, 64, 0, 160, 300, null, null],
[0, "허정", null, 0, null, 23, 5, 68, 0, 160, 300, null, null],
[0, "허저", null, 0, null, 74, 97, 36, 0, 160, 300, null, null],
[0, "허유", null, 0, null, 36, 21, 80, 0, 160, 300, null, null],
[0, "기령", null, 0, null, 85, 84, 51, 0, 160, 300, null, null],
[0, "김의", null, 0, null, 32, 38, 65, 0, 160, 300, null, null],
[0, "김배삼결", null, 0, null, 64, 76, 19, 0, 160, 300, null, null],
[0, "김선", null, 0, null, 52, 68, 13, 0, 160, 300, null, null],
[0, "우번", null, 0, null, 46, 46, 87, 0, 160, 300, null, null],
[0, "형도영", null, 0, null, 69, 79, 41, 0, 160, 300, null, null],
[0, "엄안", null, 0, null, 82, 83, 62, 0, 160, 300, null, null],
[0, "엄망", null, 0, null, 68, 71, 40, 0, 160, 300, null, null],
[0, "엄준", null, 0, null, 41, 12, 71, 0, 160, 300, null, null],
[0, "엄정", null, 0, null, 50, 55, 39, 0, 160, 300, null, null],
[0, "엄백호", null, 0, null, 67, 70, 42, 0, 160, 300, null, null],
[0, "엄여", null, 0, null, 61, 78, 44, 0, 160, 300, null, null],
[0, "오의", null, 0, null, 79, 73, 53, 0, 160, 300, null, null],
[0, "황개", null, 0, null, 80, 86, 64, 0, 160, 300, null, null],
[0, "고간", null, 0, null, 74, 56, 38, 0, 160, 300, null, null],
[0, "황권", null, 0, null, 75, 59, 88, 0, 160, 300, null, null],
[0, "고유", null, 0, null, 57, 43, 72, 0, 160, 300, null, null],
[0, "고순", null, 0, null, 87, 89, 60, 0, 160, 300, null, null],
[0, "고상", null, 0, null, 68, 68, 53, 0, 160, 300, null, null],
[0, "고승", null, 0, null, 67, 73, 41, 0, 160, 300, null, null],
[0, "후성", null, 0, null, 74, 75, 54, 0, 160, 300, null, null],
[0, "후선", null, 0, null, 63, 66, 34, 0, 160, 300, null, null],
[0, "황조", null, 0, null, 81, 66, 48, 0, 160, 300, null, null],
[0, "공손월", null, 0, null, 74, 72, 47, 0, 160, 300, null, null],
[0, "공손연", null, 0, null, 65, 70, 49, 0, 160, 300, null, null],
[0, "공손공", null, 0, null, 39, 17, 69, 0, 160, 300, null, null],
[0, "공손강", null, 0, null, 72, 66, 46, 0, 160, 300, null, null],
[0, "공손찬", null, 0, null, 86, 82, 62, 0, 160, 300, null, null],
[0, "공손속", null, 0, null, 63, 68, 46, 0, 160, 300, null, null],
[0, "공손도", null, 0, null, 67, 71, 49, 0, 160, 300, null, null],
[0, "공손범", null, 0, null, 73, 69, 49, 0, 160, 300, null, null],
[0, "황충", null, 0, null, 88, 96, 65, 0, 160, 300, null, null],
[0, "고정", null, 0, null, 55, 63, 43, 0, 160, 300, null, null],
[0, "고패", null, 0, null, 66, 48, 69, 0, 160, 300, null, null],
[0, "황보숭", null, 0, null, 91, 61, 82, 0, 160, 300, null, null],
[0, "공융", null, 0, null, 30, 5, 73, 0, 160, 300, null, null],
[0, "고람", null, 0, null, 76, 82, 60, 0, 160, 300, null, null],
[0, "오경", null, 0, null, 69, 66, 45, 0, 160, 300, null, null],
[0, "호거아", null, 0, null, 70, 82, 41, 0, 160, 300, null, null],
[0, "호진", null, 0, null, 65, 74, 12, 0, 160, 300, null, null],
[0, "올돌골", null, 0, null, 79, 86, 11, 0, 160, 300, null, null],
[0, "호반", null, 0, null, 55, 55, 59, 0, 160, 300, null, null],
[0, "오반", null, 0, null, 74, 71, 50, 0, 160, 300, null, null],
[0, "고옹", null, 0, null, 52, 18, 81, 0, 160, 300, null, null],
[0, "오란", null, 0, null, 68, 80, 35, 0, 160, 300, null, null],
[0, "채화", null, 0, null, 39, 50, 1, 0, 160, 300, null, null],
[0, "채중", null, 0, null, 40, 54, 2, 0, 160, 300, null, null],
[0, "채모", null, 0, null, 70, 55, 77, 0, 160, 300, null, null],
[0, "착융", null, 0, null, 60, 69, 38, 0, 160, 300, null, null],
[0, "사마의", null, 0, null, 99, 63, 98, 0, 160, 300, null, null],
[0, "사마염", null, 0, null, 69, 59, 77, 0, 160, 300, null, null],
[0, "사마사", null, 0, null, 84, 64, 89, 0, 160, 300, null, null],
[0, "사마소", null, 0, null, 85, 57, 88, 0, 160, 300, null, null],
[0, "사마부", null, 0, null, 70, 37, 77, 0, 160, 300, null, null],
[0, "사마랑", null, 0, null, 20, 21, 72, 0, 160, 300, null, null],
[0, "사마가", null, 0, null, 66, 84, 25, 0, 160, 300, null, null],
[0, "주흔", null, 0, null, 65, 51, 73, 0, 160, 300, null, null],
[0, "주앙", null, 0, null, 74, 65, 48, 0, 160, 300, null, null],
[0, "주지", null, 0, null, 73, 85, 41, 0, 160, 300, null, null],
[0, "주창", null, 0, null, 68, 77, 42, 0, 160, 300, null, null],
[0, "주태", null, 0, null, 84, 90, 48, 0, 160, 300, null, null],
[0, "주방", null, 0, null, 52, 41, 80, 0, 160, 300, null, null],
[0, "주유", null, 0, null, 97, 71, 97, 0, 160, 300, null, null],
[0, "주환", null, 0, null, 87, 84, 64, 0, 160, 300, null, null],
[0, "주거", null, 0, null, 77, 57, 72, 0, 160, 300, null, null],
[0, "축융", null, 0, null, 72, 75, 35, 0, 160, 300, null, null],
[0, "주준", null, 0, null, 89, 57, 76, 0, 160, 300, null, null],
[0, "주연", null, 0, null, 86, 75, 57, 0, 160, 300, null, null],
[0, "주치", null, 0, null, 71, 56, 72, 0, 160, 300, null, null],
[0, "주포", null, 0, null, 68, 73, 34, 0, 160, 300, null, null],
[0, "주령", null, 0, null, 78, 73, 53, 0, 160, 300, null, null],
[0, "순욱", null, 0, null, 78, 38, 97, 0, 160, 300, null, null],
[0, "순우경", null, 0, null, 78, 66, 29, 0, 160, 300, null, null],
[0, "순심", null, 0, null, 45, 25, 78, 0, 160, 300, null, null],
[0, "순유", null, 0, null, 80, 35, 95, 0, 160, 300, null, null],
[0, "장완", null, 0, null, 78, 34, 89, 0, 160, 300, null, null],
[0, "종회", null, 0, null, 88, 62, 93, 0, 160, 300, null, null],
[0, "장간", null, 0, null, 19, 6, 66, 0, 160, 300, null, null],
[0, "장의거", null, 0, null, 71, 41, 59, 0, 160, 300, null, null],
[0, "장흠", null, 0, null, 78, 85, 54, 0, 160, 300, null, null],
[0, "장제3", null, 0, null, 62, 43, 85, 0, 160, 300, null, null],
[0, "초주", null, 0, null, 16, 3, 67, 0, 160, 300, null, null],
[0, "초촉", null, 0, null, 65, 76, 33, 0, 160, 300, null, null],
[0, "향총", null, 0, null, 76, 56, 77, 0, 160, 300, null, null],
[0, "종요", null, 0, null, 79, 24, 90, 0, 160, 300, null, null],
[0, "향랑", null, 0, null, 28, 18, 74, 0, 160, 300, null, null],
[0, "서영", null, 0, null, 92, 80, 62, 0, 160, 300, null, null],
[0, "제갈각", null, 0, null, 72, 47, 90, 0, 160, 300, null, null],
[0, "제갈근", null, 0, null, 75, 34, 85, 0, 160, 300, null, null],
[0, "제갈균", null, 0, null, 29, 25, 52, 0, 160, 300, null, null],
[0, "제갈탄", null, 0, null, 72, 54, 76, 0, 160, 300, null, null],
[0, "제갈량", null, 0, null, 98, 43, 100, 0, 160, 300, null, null],
[0, "서황", null, 0, null, 95, 94, 74, 0, 160, 300, null, null],
[0, "서서", null, 0, null, 85, 64, 94, 0, 160, 300, null, null],
[0, "서성", null, 0, null, 86, 81, 61, 0, 160, 300, null, null],
[0, "서막", null, 0, null, 55, 32, 68, 0, 160, 300, null, null],
[0, "신의", null, 0, null, 55, 59, 60, 0, 160, 300, null, null],
[0, "신탐", null, 0, null, 56, 62, 54, 0, 160, 300, null, null],
[0, "심배", null, 0, null, 80, 60, 84, 0, 160, 300, null, null],
[0, "신비", null, 0, null, 42, 24, 79, 0, 160, 300, null, null],
[0, "신평", null, 0, null, 69, 43, 77, 0, 160, 300, null, null],
[0, "진복", null, 0, null, 31, 7, 73, 0, 160, 300, null, null],
[0, "진랑", null, 0, null, 58, 70, 35, 0, 160, 300, null, null],
[0, "휴고", null, 0, null, 63, 71, 38, 0, 160, 300, null, null],
[0, "추단", null, 0, null, 61, 64, 34, 0, 160, 300, null, null],
[0, "성의", null, 0, null, 74, 72, 41, 0, 160, 300, null, null],
[0, "성공영", null, 0, null, 73, 58, 80, 0, 160, 300, null, null],
[0, "설종", null, 0, null, 34, 16, 73, 0, 160, 300, null, null],
[0, "단경", null, 0, null, 71, 68, 43, 0, 160, 300, null, null],
[0, "전종", null, 0, null, 78, 55, 75, 0, 160, 300, null, null],
[0, "조예", null, 0, null, 72, 52, 82, 0, 160, 300, null, null],
[0, "조휴", null, 0, null, 84, 78, 58, 0, 160, 300, null, null],
[0, "송헌", null, 0, null, 68, 77, 38, 0, 160, 300, null, null],
[0, "조앙", null, 0, null, 78, 50, 69, 0, 160, 300, null, null],
[0, "조홍", null, 0, null, 80, 75, 55, 0, 160, 300, null, null],
[0, "조순", null, 0, null, 85, 83, 63, 0, 160, 300, null, null],
[0, "조창", null, 0, null, 86, 91, 59, 0, 160, 300, null, null],
[0, "조식", null, 0, null, 45, 22, 86, 0, 160, 300, null, null],
[0, "조진", null, 0, null, 88, 74, 56, 0, 160, 300, null, null],
[0, "조인", null, 0, null, 94, 90, 70, 0, 160, 300, null, null],
[0, "조성", null, 0, null, 54, 74, 38, 0, 160, 300, null, null],
[0, "조조", null, 0, null, 100, 72, 96, 0, 160, 300, null, null],
[0, "조충", null, 0, null, 43, 21, 74, 0, 160, 300, null, null],
[0, "장패", null, 0, null, 78, 86, 53, 0, 160, 300, null, null],
[0, "조비", null, 0, null, 75, 64, 87, 0, 160, 300, null, null],
[0, "조표", null, 0, null, 54, 69, 32, 0, 160, 300, null, null],
[0, "저수", null, 0, null, 86, 46, 95, 0, 160, 300, null, null],
[0, "소비", null, 0, null, 69, 45, 66, 0, 160, 300, null, null],
[0, "조무", null, 0, null, 70, 71, 50, 0, 160, 300, null, null],
[0, "손환", null, 0, null, 82, 56, 76, 0, 160, 300, null, null],
[0, "손견", null, 0, null, 94, 95, 73, 0, 160, 300, null, null],
[0, "손건", null, 0, null, 44, 33, 79, 0, 160, 300, null, null],
[0, "손권", null, 0, null, 86, 61, 81, 0, 160, 300, null, null],
[0, "손교", null, 0, null, 77, 72, 52, 0, 160, 300, null, null],
[0, "손책", null, 0, null, 93, 94, 74, 0, 160, 300, null, null],
[0, "손소", null, 0, null, 82, 79, 59, 0, 160, 300, null, null],
[0, "손정", null, 0, null, 66, 53, 73, 0, 160, 300, null, null],
[0, "손중", null, 0, null, 62, 71, 36, 0, 160, 300, null, null],
[0, "손등", null, 0, null, 62, 37, 79, 0, 160, 300, null, null],
[0, "손유", null, 0, null, 77, 70, 51, 0, 160, 300, null, null],
[0, "손익", null, 0, null, 67, 83, 27, 0, 160, 300, null, null],
[0, "손례", null, 0, null, 78, 81, 59, 0, 160, 300, null, null],
[0, "태사자", null, 0, null, 94, 94, 72, 0, 160, 300, null, null],
[0, "대래동주", null, 0, null, 51, 53, 54, 0, 160, 300, null, null],
[0, "대릉", null, 0, null, 70, 75, 39, 0, 160, 300, null, null],
[0, "타사대왕", null, 0, null, 62, 48, 70, 0, 160, 300, null, null],
[0, "담웅", null, 0, null, 58, 73, 14, 0, 160, 300, null, null],
[0, "장윤", null, 0, null, 72, 67, 42, 0, 160, 300, null, null],
[0, "조운", null, 0, null, 90, 96, 75, 0, 160, 300, null, null],
[0, "장위", null, 0, null, 74, 66, 45, 0, 160, 300, null, null],
[0, "장영", null, 0, null, 75, 74, 41, 0, 160, 300, null, null],
[0, "장연", null, 0, null, 76, 81, 57, 0, 160, 300, null, null],
[0, "장횡", null, 0, null, 59, 70, 23, 0, 160, 300, null, null],
[0, "장온", null, 0, null, 32, 10, 72, 0, 160, 300, null, null],
[0, "장개", null, 0, null, 34, 66, 8, 0, 160, 300, null, null],
[0, "장각", null, 0, null, 87, 35, 90, 0, 160, 300, null, null],
[0, "장기", null, 0, null, 74, 35, 76, 0, 160, 300, null, null],
[0, "장의", null, 0, null, 79, 55, 75, 0, 160, 300, null, null],
[0, "장훈", null, 0, null, 72, 68, 41, 0, 160, 300, null, null],
[0, "장굉", null, 0, null, 24, 22, 86, 0, 160, 300, null, null],
[0, "장합", null, 0, null, 92, 89, 69, 0, 160, 300, null, null],
[0, "조홍2", null, 0, null, 66, 72, 28, 0, 160, 300, null, null],
[0, "장제2", null, 0, null, 70, 66, 46, 0, 160, 300, null, null],
[0, "장수", null, 0, null, 80, 73, 51, 0, 160, 300, null, null],
[0, "장소", null, 0, null, 41, 13, 87, 0, 160, 300, null, null],
[0, "장송", null, 0, null, 40, 6, 85, 0, 160, 300, null, null],
[0, "장임", null, 0, null, 85, 84, 64, 0, 160, 300, null, null],
[0, "장제", null, 0, null, 67, 43, 80, 0, 160, 300, null, null],
[0, "장막", null, 0, null, 52, 53, 71, 0, 160, 300, null, null],
[0, "조범", null, 0, null, 28, 21, 32, 0, 160, 300, null, null],
[0, "장비", null, 0, null, 87, 98, 72, 0, 160, 300, null, null],
[0, "장포", null, 0, null, 78, 84, 48, 0, 160, 300, null, null],
[0, "장보", null, 0, null, 83, 60, 81, 0, 160, 300, null, null],
[0, "장만성", null, 0, null, 75, 81, 45, 0, 160, 300, null, null],
[0, "장양", null, 0, null, 72, 70, 50, 0, 160, 300, null, null],
[0, "장익", null, 0, null, 75, 55, 76, 0, 160, 300, null, null],
[0, "장료", null, 0, null, 96, 94, 74, 0, 160, 300, null, null],
[0, "장량", null, 0, null, 78, 80, 59, 0, 160, 300, null, null],
[0, "조루", null, 0, null, 70, 43, 68, 0, 160, 300, null, null],
[0, "장로", null, 0, null, 65, 42, 81, 0, 160, 300, null, null],
[0, "진횡", null, 0, null, 64, 63, 26, 0, 160, 300, null, null],
[0, "진응", null, 0, null, 62, 72, 45, 0, 160, 300, null, null],
[0, "진기", null, 0, null, 58, 65, 43, 0, 160, 300, null, null],
[0, "진궁", null, 0, null, 84, 55, 90, 0, 160, 300, null, null],
[0, "진교", null, 0, null, 61, 27, 77, 0, 160, 300, null, null],
[0, "진군", null, 0, null, 32, 14, 75, 0, 160, 300, null, null],
[0, "진규", null, 0, null, 30, 4, 82, 0, 160, 300, null, null],
[0, "진식", null, 0, null, 70, 71, 25, 0, 160, 300, null, null],
[0, "진진", null, 0, null, 46, 46, 69, 0, 160, 300, null, null],
[0, "진태", null, 0, null, 86, 68, 89, 0, 160, 300, null, null],
[0, "진등", null, 0, null, 79, 59, 81, 0, 160, 300, null, null],
[0, "진도", null, 0, null, 82, 78, 58, 0, 160, 300, null, null],
[0, "진무", null, 0, null, 76, 87, 43, 0, 160, 300, null, null],
[0, "진란", null, 0, null, 66, 69, 40, 0, 160, 300, null, null],
[0, "진림", null, 0, null, 25, 9, 75, 0, 160, 300, null, null],
[0, "정욱", null, 0, null, 76, 49, 94, 0, 160, 300, null, null],
[0, "정원지", null, 0, null, 69, 74, 17, 0, 160, 300, null, null],
[0, "정은", null, 0, null, 69, 73, 40, 0, 160, 300, null, null],
[0, "정원", null, 0, null, 70, 76, 35, 0, 160, 300, null, null],
[0, "정보", null, 0, null, 84, 79, 59, 0, 160, 300, null, null],
[0, "정봉", null, 0, null, 81, 92, 69, 0, 160, 300, null, null],
[0, "전위", null, 0, null, 79, 98, 42, 0, 160, 300, null, null],
[0, "전해", null, 0, null, 68, 65, 45, 0, 160, 300, null, null],
[0, "전주", null, 0, null, 66, 51, 73, 0, 160, 300, null, null],
[0, "전풍", null, 0, null, 82, 43, 96, 0, 160, 300, null, null],
[0, "전예", null, 0, null, 93, 85, 66, 0, 160, 300, null, null],
[0, "동윤", null, 0, null, 47, 28, 79, 0, 160, 300, null, null],
[0, "동화", null, 0, null, 57, 34, 75, 0, 160, 300, null, null],
[0, "등애", null, 0, null, 92, 73, 94, 0, 160, 300, null, null],
[0, "도겸", null, 0, null, 51, 27, 64, 0, 160, 300, null, null],
[0, "등현", null, 0, null, 61, 73, 45, 0, 160, 300, null, null],
[0, "등지", null, 0, null, 73, 52, 81, 0, 160, 300, null, null],
[0, "동습", null, 0, null, 72, 85, 50, 0, 160, 300, null, null],
[0, "동승", null, 0, null, 56, 53, 65, 0, 160, 300, null, null],
[0, "동소", null, 0, null, 34, 25, 80, 0, 160, 300, null, null],
[0, "동탁", null, 0, null, 91, 87, 67, 0, 160, 300, null, null],
[0, "동도나", null, 0, null, 68, 73, 31, 0, 160, 300, null, null],
[0, "동민", null, 0, null, 49, 60, 25, 0, 160, 300, null, null],
[0, "등무", null, 0, null, 61, 75, 29, 0, 160, 300, null, null],
[0, "두기", null, 0, null, 74, 43, 78, 0, 160, 300, null, null],
[0, "두예", null, 0, null, 96, 69, 95, 0, 160, 300, null, null],
[0, "배원소", null, 0, null, 49, 65, 25, 0, 160, 300, null, null],
[0, "마완", null, 0, null, 71, 74, 16, 0, 160, 300, null, null],
[0, "마휴", null, 0, null, 68, 73, 48, 0, 160, 300, null, null],
[0, "파재", null, 0, null, 74, 74, 55, 0, 160, 300, null, null],
[0, "마준", null, 0, null, 38, 52, 31, 0, 160, 300, null, null],
[0, "마속", null, 0, null, 61, 59, 84, 0, 160, 300, null, null],
[0, "마대", null, 0, null, 79, 85, 62, 0, 160, 300, null, null],
[0, "마충", null, 0, null, 78, 72, 52, 0, 160, 300, null, null],
[0, "마초", null, 0, null, 86, 97, 44, 0, 160, 300, null, null],
[0, "마철", null, 0, null, 70, 62, 43, 0, 160, 300, null, null],
[0, "마등", null, 0, null, 85, 80, 52, 0, 160, 300, null, null],
[0, "마량", null, 0, null, 53, 23, 85, 0, 160, 300, null, null],
[0, "반준", null, 0, null, 61, 46, 82, 0, 160, 300, null, null],
[0, "반장", null, 0, null, 76, 80, 59, 0, 160, 300, null, null],
[0, "번조", null, 0, null, 66, 73, 31, 0, 160, 300, null, null],
[0, "번능", null, 0, null, 69, 61, 36, 0, 160, 300, null, null],
[0, "반봉", null, 0, null, 56, 77, 4, 0, 160, 300, null, null],
[0, "비의", null, 0, null, 82, 56, 88, 0, 160, 300, null, null],
[0, "비연", null, 0, null, 60, 66, 21, 0, 160, 300, null, null],
[0, "비시", null, 0, null, 18, 28, 65, 0, 160, 300, null, null],
[0, "미축", null, 0, null, 33, 29, 78, 0, 160, 300, null, null],
[0, "미방", null, 0, null, 54, 61, 32, 0, 160, 300, null, null],
[0, "비요", null, 0, null, 70, 52, 73, 0, 160, 300, null, null],
[0, "무안국", null, 0, null, 70, 79, 34, 0, 160, 300, null, null],
[0, "풍습", null, 0, null, 72, 71, 39, 0, 160, 300, null, null],
[0, "부사인", null, 0, null, 46, 63, 37, 0, 160, 300, null, null],
[0, "부첨", null, 0, null, 73, 85, 62, 0, 160, 300, null, null],
[0, "부손", null, 0, null, 29, 13, 70, 0, 160, 300, null, null],
[0, "문앙", null, 0, null, 76, 96, 65, 0, 160, 300, null, null],
[0, "문흠", null, 0, null, 74, 79, 43, 0, 160, 300, null, null],
[0, "문추", null, 0, null, 87, 95, 49, 0, 160, 300, null, null],
[0, "문빙", null, 0, null, 88, 85, 65, 0, 160, 300, null, null],
[0, "변희", null, 0, null, 56, 70, 62, 0, 160, 300, null, null],
[0, "망아장", null, 0, null, 45, 79, 3, 0, 160, 300, null, null],
[0, "봉기", null, 0, null, 56, 48, 84, 0, 160, 300, null, null],
[0, "방희", null, 0, null, 60, 38, 69, 0, 160, 300, null, null],
[0, "법정", null, 0, null, 82, 47, 94, 0, 160, 300, null, null],
[0, "방통", null, 0, null, 79, 34, 97, 0, 160, 300, null, null],
[0, "방덕", null, 0, null, 89, 94, 70, 0, 160, 300, null, null],
[0, "포륭", null, 0, null, 58, 76, 49, 0, 160, 300, null, null],
[0, "목순", null, 0, null, 52, 77, 11, 0, 160, 300, null, null],
[0, "목록대왕", null, 0, null, 65, 71, 39, 0, 160, 300, null, null],
[0, "보즐", null, 0, null, 83, 51, 81, 0, 160, 300, null, null],
[0, "만총", null, 0, null, 88, 64, 87, 0, 160, 300, null, null],
[0, "모개", null, 0, null, 63, 39, 60, 0, 160, 300, null, null],
[0, "맹획", null, 0, null, 81, 88, 42, 0, 160, 300, null, null],
[0, "맹체", null, 0, null, 75, 55, 75, 0, 160, 300, null, null],
[0, "맹우", null, 0, null, 50, 68, 22, 0, 160, 300, null, null],
[0, "유섭", null, 0, null, 62, 79, 24, 0, 160, 300, null, null],
[0, "양부", null, 0, null, 62, 48, 68, 0, 160, 300, null, null],
[0, "옹개", null, 0, null, 73, 75, 57, 0, 160, 300, null, null],
[0, "양의", null, 0, null, 68, 40, 82, 0, 160, 300, null, null],
[0, "양호", null, 0, null, 94, 69, 92, 0, 160, 300, null, null],
[0, "양홍", null, 0, null, 33, 15, 77, 0, 160, 300, null, null],
[0, "양앙", null, 0, null, 68, 72, 38, 0, 160, 300, null, null],
[0, "양추", null, 0, null, 52, 65, 40, 0, 160, 300, null, null],
[0, "양수", null, 0, null, 46, 23, 83, 0, 160, 300, null, null],
[0, "양추2", null, 0, null, 67, 64, 44, 0, 160, 300, null, null],
[0, "양송", null, 0, null, 17, 5, 28, 0, 160, 300, null, null],
[0, "양임", null, 0, null, 70, 78, 56, 0, 160, 300, null, null],
[0, "양조", null, 0, null, 53, 61, 36, 0, 160, 300, null, null],
[0, "양백", null, 0, null, 44, 45, 19, 0, 160, 300, null, null],
[0, "양부2", null, 0, null, 67, 50, 83, 0, 160, 300, null, null],
[0, "양봉", null, 0, null, 66, 65, 31, 0, 160, 300, null, null],
[0, "양봉2", null, 0, null, 54, 62, 53, 0, 160, 300, null, null],
[0, "뇌동", null, 0, null, 69, 78, 51, 0, 160, 300, null, null],
[0, "뇌박", null, 0, null, 62, 70, 36, 0, 160, 300, null, null],
[0, "이이", null, 0, null, 63, 77, 19, 0, 160, 300, null, null],
[0, "이회", null, 0, null, 79, 58, 79, 0, 160, 300, null, null],
[0, "이각", null, 0, null, 69, 72, 24, 0, 160, 300, null, null],
[0, "육항", null, 0, null, 94, 68, 93, 0, 160, 300, null, null],
[0, "육적", null, 0, null, 20, 7, 72, 0, 160, 300, null, null],
[0, "육손", null, 0, null, 95, 71, 96, 0, 160, 300, null, null],
[0, "이엄", null, 0, null, 83, 84, 63, 0, 160, 300, null, null],
[0, "이유", null, 0, null, 61, 26, 93, 0, 160, 300, null, null],
[0, "이숙", null, 0, null, 46, 69, 61, 0, 160, 300, null, null],
[0, "이통", null, 0, null, 73, 81, 62, 0, 160, 300, null, null],
[0, "이전", null, 0, null, 78, 80, 59, 0, 160, 300, null, null],
[0, "이풍", null, 0, null, 69, 74, 50, 0, 160, 300, null, null],
[0, "유언", null, 0, null, 61, 38, 80, 0, 160, 300, null, null],
[0, "유괴", null, 0, null, 71, 73, 52, 0, 160, 300, null, null],
[0, "유기", null, 0, null, 52, 12, 63, 0, 160, 300, null, null],
[0, "유우", null, 0, null, 62, 33, 75, 0, 160, 300, null, null],
[0, "유훈", null, 0, null, 47, 63, 35, 0, 160, 300, null, null],
[0, "유현", null, 0, null, 54, 66, 51, 0, 160, 300, null, null],
[0, "유순", null, 0, null, 63, 46, 28, 0, 160, 300, null, null],
[0, "유장", null, 0, null, 31, 5, 34, 0, 160, 300, null, null],
[0, "유심", null, 0, null, 60, 48, 70, 0, 160, 300, null, null],
[0, "유선", null, 0, null, 3, 5, 9, 0, 160, 300, null, null],
[0, "유종", null, 0, null, 24, 22, 65, 0, 160, 300, null, null],
[0, "유도", null, 0, null, 25, 23, 26, 0, 160, 300, null, null],
[0, "유파", null, 0, null, 29, 22, 75, 0, 160, 300, null, null],
[0, "유반", null, 0, null, 69, 76, 47, 0, 160, 300, null, null],
[0, "유비", null, 0, null, 88, 78, 59, 0, 160, 300, null, null],
[0, "유표", null, 0, null, 48, 31, 72, 0, 160, 300, null, null],
[0, "유복", null, 0, null, 64, 49, 74, 0, 160, 300, null, null],
[0, "유벽", null, 0, null, 70, 72, 47, 0, 160, 300, null, null],
[0, "유봉", null, 0, null, 75, 79, 44, 0, 160, 300, null, null],
[0, "유엽", null, 0, null, 56, 32, 92, 0, 160, 300, null, null],
[0, "유요", null, 0, null, 62, 67, 46, 0, 160, 300, null, null],
[0, "여위황", null, 0, null, 58, 63, 29, 0, 160, 300, null, null],
[0, "요화", null, 0, null, 73, 76, 54, 0, 160, 300, null, null],
[0, "양흥", null, 0, null, 61, 65, 19, 0, 160, 300, null, null],
[0, "양습", null, 0, null, 73, 40, 74, 0, 160, 300, null, null],
[0, "양서", null, 0, null, 56, 62, 66, 0, 160, 300, null, null],
[0, "능조", null, 0, null, 75, 81, 42, 0, 160, 300, null, null],
[0, "능통", null, 0, null, 83, 89, 60, 0, 160, 300, null, null],
[0, "여개", null, 0, null, 53, 30, 67, 0, 160, 300, null, null],
[0, "여건", null, 0, null, 57, 70, 62, 0, 160, 300, null, null],
[0, "여광", null, 0, null, 56, 70, 13, 0, 160, 300, null, null],
[0, "여상", null, 0, null, 54, 71, 12, 0, 160, 300, null, null],
[0, "여대", null, 0, null, 80, 71, 52, 0, 160, 300, null, null],
[0, "여범", null, 0, null, 73, 54, 75, 0, 160, 300, null, null],
[0, "여포", null, 0, null, 89, 100, 42, 0, 160, 300, null, null],
[0, "여몽", null, 0, null, 91, 69, 90, 0, 160, 300, null, null],
[0, "윤직", null, 0, null, 46, 42, 73, 0, 160, 300, null, null],
[0, "냉포", null, 0, null, 71, 82, 61, 0, 160, 300, null, null],
[0, "누규", null, 0, null, 52, 13, 87, 0, 160, 300, null, null],
[0, "노숙", null, 0, null, 89, 56, 93, 0, 160, 300, null, null],
[0, "노식", null, 0, null, 86, 63, 82, 0, 160, 300, null, null],
[0, "범강", null, 0, null, 49, 50, 36, 0, 160, 300, null, null],
[0, "장달", null, 0, null, 43, 56, 34, 0, 160, 300, null, null],
[0, "규람", null, 0, null, 55, 70, 58, 0, 160, 300, null, null],
[0, "대원", null, 0, null, 38, 32, 68, 0, 160, 300, null, null],
[0, "왕기", null, 0, null, 81, 64, 86, 0, 160, 300, null, null],
[0, "왕상", null, 0, null, 23, 19, 68, 0, 160, 300, null, null],
[0, "왕돈", null, 0, null, 60, 66, 46, 0, 160, 300, null, null],
[0, "악침", null, 0, null, 73, 75, 43, 0, 160, 300, null, null],
[0, "하제", null, 0, null, 83, 61, 82, 0, 160, 300, null, null],
[0, "환범", null, 0, null, 40, 11, 78, 0, 160, 300, null, null],
[0, "견초", null, 0, null, 72, 79, 57, 0, 160, 300, null, null],
[0, "고당륭", null, 0, null, 35, 24, 76, 0, 160, 300, null, null],
[0, "오찬", null, 0, null, 68, 41, 78, 0, 160, 300, null, null],
[0, "호질", null, 0, null, 73, 46, 74, 0, 160, 300, null, null],
[0, "오질", null, 0, null, 16, 29, 68, 0, 160, 300, null, null],
[0, "호준", null, 0, null, 79, 76, 55, 0, 160, 300, null, null],
[0, "고담", null, 0, null, 53, 23, 77, 0, 160, 300, null, null],
[0, "최림", null, 0, null, 32, 22, 66, 0, 160, 300, null, null],
[0, "사마망", null, 0, null, 78, 58, 83, 0, 160, 300, null, null],
[0, "주이", null, 0, null, 70, 73, 52, 0, 160, 300, null, null],
[0, "전단", null, 0, null, 67, 64, 39, 0, 160, 300, null, null],
[0, "조우", null, 0, null, 50, 43, 37, 0, 160, 300, null, null],
[0, "조상", null, 0, null, 39, 33, 30, 0, 160, 300, null, null],
[0, "조방", null, 0, null, 20, 14, 27, 0, 160, 300, null, null],
[0, "태사향", null, 0, null, 57, 66, 48, 0, 160, 300, null, null],
[0, "장휴", null, 0, null, 63, 27, 74, 0, 160, 300, null, null],
[0, "장호", null, 0, null, 75, 74, 51, 0, 160, 300, null, null],
[0, "조광", null, 0, null, 67, 71, 53, 0, 160, 300, null, null],
[0, "장집", null, 0, null, 76, 29, 80, 0, 160, 300, null, null],
[0, "장승", null, 0, null, 77, 55, 75, 0, 160, 300, null, null],
[0, "장소2", null, 0, null, 23, 56, 31, 0, 160, 300, null, null],
[0, "조통", null, 0, null, 68, 67, 46, 0, 160, 300, null, null],
[0, "진표", null, 0, null, 66, 42, 74, 0, 160, 300, null, null],
[0, "정무", null, 0, null, 56, 35, 75, 0, 160, 300, null, null],
[0, "정봉2", null, 0, null, 66, 66, 46, 0, 160, 300, null, null],
[0, "전만", null, 0, null, 51, 73, 39, 0, 160, 300, null, null],
[0, "마균", null, 0, null, 22, 17, 71, 0, 160, 300, null, null],
[0, "방회", null, 0, null, 69, 75, 49, 0, 160, 300, null, null],
[0, "낙통", null, 0, null, 76, 58, 75, 0, 160, 300, null, null],
[0, "육개", null, 0, null, 65, 61, 79, 0, 160, 300, null, null],
[0, "유찬", null, 0, null, 78, 81, 59, 0, 160, 300, null, null],
[0, "유소", null, 0, null, 68, 53, 74, 0, 160, 300, null, null],
[0, "요립", null, 0, null, 32, 15, 76, 0, 160, 300, null, null],
[0, "여거", null, 0, null, 78, 51, 71, 0, 160, 300, null, null],
[0, "제갈첨", null, 0, null, 70, 57, 76, 0, 160, 300, null, null],
[0, "손휴", null, 0, null, 57, 42, 78, 0, 160, 300, null, null],
[0, "극정", null, 0, null, 42, 23, 68, 0, 160, 300, null, null],
[0, "호분", null, 0, null, 71, 76, 50, 0, 160, 300, null, null],
[0, "손량", null, 0, null, 32, 26, 70, 0, 160, 300, null, null],
[0, "마막", null, 0, null, 34, 12, 44, 0, 160, 300, null, null],
[0, "손호", null, 0, null, 41, 73, 71, 0, 160, 300, null, null],
[0, "조모", null, 0, null, 54, 61, 59, 0, 160, 300, null, null],
[0, "조환", null, 0, null, 30, 28, 30, 0, 160, 300, null, null],
[0, "사마유", null, 0, null, 71, 54, 75, 0, 160, 300, null, null],
[0, "제갈상", null, 0, null, 64, 79, 62, 0, 160, 300, null, null],
[0, "손화", null, 0, null, 31, 39, 68, 0, 160, 300, null, null],
[0, "염우", null, 0, null, 52, 61, 51, 0, 160, 300, null, null],
[0, "왕경", null, 0, null, 67, 49, 71, 0, 160, 300, null, null],
[0, "왕혼", null, 0, null, 74, 71, 50, 0, 160, 300, null, null],
[0, "곽혁", null, 0, null, 33, 29, 70, 0, 160, 300, null, null],
[0, "가범", null, 0, null, 60, 50, 73, 0, 160, 300, null, null],
[0, "서질", null, 0, null, 68, 83, 24, 0, 160, 300, null, null],
[0, "손준", null, 0, null, 64, 70, 48, 0, 160, 300, null, null],
[0, "손침", null, 0, null, 58, 55, 65, 0, 160, 300, null, null],
[0, "우사", null, 0, null, 61, 34, 74, 0, 160, 300, null, null],
[0, "진건", null, 0, null, 72, 71, 50, 0, 160, 300, null, null],
[0, "동궐", null, 0, null, 65, 59, 76, 0, 160, 300, null, null],
[0, "당자", null, 0, null, 61, 71, 50, 0, 160, 300, null, null],
[0, "등충", null, 0, null, 76, 80, 59, 0, 160, 300, null, null],
[0, "황숭", null, 0, null, 67, 50, 72, 0, 160, 300, null, null],
[0, "화핵", null, 0, null, 20, 24, 71, 0, 160, 300, null, null],
[0, "허의", null, 0, null, 51, 74, 15, 0, 160, 300, null, null],
[0, "송겸", null, 0, null, 66, 78, 42, 0, 160, 300, null, null],
[0, "호제", null, 0, null, 57, 39, 68, 0, 160, 300, null, null],
[0, "나헌", null, 0, null, 86, 62, 82, 0, 160, 300, null, null],
[0, "노숙2", null, 0, null, 73, 53, 74, 0, 160, 300, null, null],
[0, "구성", null, 0, null, 63, 70, 38, 0, 160, 300, null, null],
[0, "어부라", null, 0, null, 72, 68, 21, 0, 160, 300, null, null],
[0, "아하소과", null, 0, null, 61, 76, 13, 0, 160, 300, null, null],
[0, "가비능", null, 0, null, 77, 69, 52, 0, 160, 300, null, null],
[0, "구력거", null, 0, null, 80, 68, 50, 0, 160, 300, null, null],
[0, "강단", null, 0, null, 65, 83, 48, 0, 160, 300, null, null],
[0, "황란", null, 0, null, 63, 75, 44, 0, 160, 300, null, null],
[0, "호주천", null, 0, null, 70, 71, 40, 0, 160, 300, null, null],
[0, "종리목", null, 0, null, 84, 61, 82, 0, 160, 300, null, null],
[0, "제갈교", null, 0, null, 62, 27, 75, 0, 160, 300, null, null],
[0, "답돈", null, 0, null, 84, 82, 61, 0, 160, 300, null, null],
[0, "반임", null, 0, null, 66, 79, 38, 0, 160, 300, null, null],
[0, "보도근", null, 0, null, 64, 73, 50, 0, 160, 300, null, null],
[0, "미당대왕", null, 0, null, 59, 69, 21, 0, 160, 300, null, null],
[0, "유표2", null, 0, null, 73, 74, 48, 0, 160, 300, null, null],
[0, "루반", null, 0, null, 65, 76, 39, 0, 160, 300, null, null],
[0, "손관", null, 0, null, 72, 78, 51, 0, 160, 300, null, null],
[0, "곽석", null, 0, null, 59, 71, 48, 0, 160, 300, null, null],
[0, "주조", null, 0, null, 63, 68, 26, 0, 160, 300, null, null],
[0, "장거", null, 0, null, 79, 75, 56, 0, 160, 300, null, null],
[0, "장순", null, 0, null, 73, 81, 60, 0, 160, 300, null, null],
[0, "철리길", null, 0, null, 77, 70, 52, 0, 160, 300, null, null],
[0, "주삭", null, 0, null, 54, 60, 50, 0, 160, 300, null, null],
[0, "황월영", null, 0, null, 46, 33, 78, 0, 160, 300, null, null],
[0, "채염", null, 0, null, 42, 26, 82, 0, 160, 300, null, null],
[0, "소교", null, 0, null, 23, 15, 78, 0, 160, 300, null, null],
[0, "신헌영", null, 0, null, 65, 35, 90, 0, 160, 300, null, null],
[0, "손상향", null, 0, null, 72, 79, 55, 0, 160, 300, null, null],
[0, "대교", null, 0, null, 22, 30, 78, 0, 160, 300, null, null],
[0, "초선", null, 0, null, 12, 22, 71, 0, 160, 300, null, null],
[0, "교모", null, 0, null, 54, 45, 69, 0, 160, 300, null, null],
[0, "관구수", null, 0, null, 58, 62, 33, 0, 160, 300, null, null],
[0, "관구전", null, 0, null, 63, 47, 69, 0, 160, 300, null, null],
[0, "원유", null, 0, null, 56, 40, 73, 0, 160, 300, null, null],
[0, "왕광", null, 0, null, 65, 41, 61, 0, 160, 300, null, null],
[0, "신창", null, 0, null, 50, 26, 42, 0, 160, 300, null, null],
[0, "사마주", null, 0, null, 61, 40, 61, 0, 160, 300, null, null],
[0, "양제", null, 0, null, 67, 49, 71, 0, 160, 300, null, null],
[0, "성만", null, 0, null, 61, 68, 46, 0, 160, 300, null, null],
[0, "오연", null, 0, null, 66, 73, 42, 0, 160, 300, null, null],
[0, "맹충", null, 0, null, 47, 28, 72, 0, 160, 300, null, null],
[0, "잠혼", null, 0, null, 1, 1, 22, 0, 160, 300, null, null],
[0, "사정", null, 0, null, 64, 76, 34, 0, 160, 300, null, null],
[0, "심영", null, 0, null, 70, 77, 55, 0, 160, 300, null, null],
[0, "도준", null, 0, null, 65, 66, 46, 0, 160, 300, null, null],
[0, "만욱", null, 0, null, 21, 25, 71, 0, 160, 300, null, null],
[0, "오언", null, 0, null, 76, 81, 59, 0, 160, 300, null, null],
[0, "위막", null, 0, null, 57, 62, 59, 0, 160, 300, null, null],
[0, "시삭", null, 0, null, 38, 65, 47, 0, 160, 300, null, null],
[0, "전속", null, 0, null, 47, 60, 55, 0, 160, 300, null, null],
[0, "장화", null, 0, null, 36, 27, 78, 0, 160, 300, null, null],
[0, "오거", null, 0, null, 49, 61, 23, 0, 160, 300, null, null],
[0, "추정", null, 0, null, 70, 46, 66, 0, 160, 300, null, null],
[0, "장특", null, 0, null, 73, 54, 75, 0, 160, 300, null, null],
[0, "곽마", null, 0, null, 68, 71, 47, 0, 160, 300, null, null],
[0, "석포", null, 0, null, 69, 71, 49, 0, 160, 300, null, null],
[0, "견홍", null, 0, null, 70, 74, 53, 0, 160, 300, null, null],
[0, "한거자", null, 0, null, 51, 59, 51, 0, 160, 300, null, null],
[0, "휴원진", null, 0, null, 52, 68, 45, 0, 160, 300, null, null],
[0, "곽원", null, 0, null, 66, 73, 36, 0, 160, 300, null, null],
[0, "계옹", null, 0, null, 63, 52, 33, 0, 160, 300, null, null],
[0, "이부", null, 0, null, 31, 36, 74, 0, 160, 300, null, null],
[0, "왕업", null, 0, null, 33, 6, 35, 0, 160, 300, null, null],
[0, "좌혁", null, 0, null, 62, 66, 51, 0, 160, 300, null, null],
[0, "화타", null, 0, null, 57, 25, 73, 0, 160, 300, null, null],
[0, "사마휘", null, 0, null, 55, 26, 82, 0, 160, 300, null, null],
[0, "우길", null, 0, null, 23, 15, 90, 0, 160, 300, null, null],
[0, "헌제", null, 0, null, 22, 18, 68, 0, 160, 300, null, null],
[0, "백기", null, 0, null, 100, 88, 69, 0, 160, 300, null, null],
[0, "한신", null, 0, null, 100, 74, 95, 0, 160, 300, null, null],
[0, "악비", null, 0, null, 99, 91, 71, 0, 160, 300, null, null],
[0, "항적", null, 0, null, 99, 100, 65, 0, 160, 300, null, null],
[0, "악의", null, 0, null, 98, 75, 96, 0, 160, 300, null, null],
[0, "영정", null, 0, null, 97, 55, 92, 0, 160, 300, null, null],
[0, "강상", null, 0, null, 94, 49, 100, 0, 160, 300, null, null],
[0, "전단2", null, 0, null, 96, 75, 95, 0, 160, 300, null, null],
[0, "이목", null, 0, null, 96, 69, 88, 0, 160, 300, null, null],
[0, "염파", null, 0, null, 97, 96, 75, 0, 160, 300, null, null],
[0, "왕전", null, 0, null, 94, 64, 83, 0, 160, 300, null, null],
[0, "오기", null, 0, null, 94, 66, 95, 0, 160, 300, null, null],
[0, "곽거병", null, 0, null, 93, 92, 53, 0, 160, 300, null, null],
[0, "영포", null, 0, null, 82, 91, 54, 0, 160, 300, null, null],
[0, "이신", null, 0, null, 81, 88, 63, 0, 160, 300, null, null],
[0, "몽념", null, 0, null, 87, 86, 65, 0, 160, 300, null, null],
[0, "전기", null, 0, null, 80, 85, 44, 0, 160, 300, null, null],
[0, "극신", null, 0, null, 76, 83, 42, 0, 160, 300, null, null],
[0, "항연", null, 0, null, 89, 80, 61, 0, 160, 300, null, null],
[0, "인상여", null, 0, null, 69, 38, 96, 0, 160, 300, null, null],
[0, "장자방", null, 0, null, 72, 40, 100, 0, 160, 300, null, null],
[0, "관이오", null, 0, null, 85, 64, 99, 0, 160, 300, null, null],
[0, "손빈", null, 0, null, 83, 22, 98, 0, 160, 300, null, null],
[0, "소진", null, 0, null, 90, 47, 96, 0, 160, 300, null, null],
[0, "범증", null, 0, null, 68, 24, 94, 0, 160, 300, null, null],
[0, "장의2", null, 0, null, 75, 23, 93, 0, 160, 300, null, null],
[0, "공구", null, 0, null, 68, 70, 91, 0, 160, 300, null, null],
[0, "소하", null, 0, null, 56, 27, 97, 0, 160, 300, null, null],
[0, "한비", null, 0, null, 49, 18, 97, 0, 160, 300, null, null],
[0, "이사", null, 0, null, 48, 24, 95, 0, 160, 300, null, null],
[0, "전문", null, 0, null, 79, 67, 89, 0, 160, 300, null, null],
[0, "황헐", null, 0, null, 81, 68, 88, 0, 160, 300, null, null],
[0, "방난", null, 0, null, 88, 95, 66, 0, 160, 300, null, null],
[0, "개섭", null, 0, null, 43, 97, 54, 0, 160, 300, null, null],
[0, "형가", null, 0, null, 42, 89, 43, 0, 160, 300, null, null],
[0, "유방", null, 0, null, 90, 66, 85, 0, 160, 300, null, null],
[0, "하리", null, 0, null, 95, 95, 65, 0, 160, 300, null, null],
[0, "헹이", null, 0, null, 95, 62, 90, 0, 160, 300, null, null],
[0, "나나", null, 0, null, 91, 52, 93, 0, 160, 300, null, null],
[0, "장임2", null, 0, null, 90, 92, 55, 0, 160, 300, null, null],
[0, "하야미", null, 0, null, 92, 57, 92, 0, 160, 300, null, null],
[0, "이시리스", null, 0, null, 93, 59, 92, 0, 160, 300, null, null],
[0, "연채홍", null, 0, null, 91, 52, 91, 0, 160, 300, null, null],
[0, "임사영", null, 0, null, 40, 40, 40, 0, 160, 300, null, null],
[0, "장군보", null, 0, null, 90, 90, 53, 0, 160, 300, null, null],
[0, "크렌스", null, 0, null, 91, 91, 56, 0, 160, 300, null, null],
[0, "콘", null, 0, null, 91, 92, 56, 0, 160, 300, null, null],
[0, "리즈나", null, 0, null, 90, 56, 90, 0, 160, 300, null, null],
[0, "오티누스", null, 0, null, 92, 91, 56, 0, 160, 300, null, null],
[0, "네시", null, 0, null, 91, 57, 93, 0, 160, 300, null, null, "안 자고 싸우면 이겨요"],
[0, "시뉴카린", null, 0, null, 95, 90, 52, 0, 160, 300, null, null, "피리피리~"],
[0, "Hide_D", null, 0, null, 92, 60, 95, 0, 160, 300, null, null],
[0, "Pray", null, 0, null, 90, 92, 54, 0, 160, 300, null, null],
[0, "사스케", null, 0, null, 91, 94, 54, 0, 160, 300, null, null],
[0, "SARS", null, 0, null, 91, 61, 92, 0, 160, 300, null, null],
[0, "마요이", null, 0, null, 92, 53, 93, 0, 160, 300, null, null, "로열방 없습니다"],
[0, "세정", null, 0, null, 90, 92, 60, 0, 160, 300, null, null],
[0, "김나영", null, 0, null, 93, 90, 60, 0, 160, 300, null, null],
[0, "독구", null, 0, null, 95, 91, 62, 0, 160, 300, null, null, "웃자 ^-^"],
[0, "천괴금", null, 0, null, 33, 66, 99, 0, 160, 300, null, null],
[0, "관지평", null, 0, null, 90, 91, 52, 0, 160, 300, null, null, "농장팬티강도소녀!"],
[0, "모니카", null, 0, null, 90, 60, 93, 0, 160, 300, null, null, "론조.."],
[0, "카리야", null, 0, null, 93, 58, 95, 0, 160, 300, null, null, "깡!"],
[0, "rwitch", null, 0, null, 90, 52, 90, 0, 160, 300, null, null],
[0, "카류", null, 0, null, 92, 53, 92, 0, 160, 300, null, null],
[0, "갈근", null, 0, null, 94, 54, 94, 0, 160, 300, null, null],
[0, "페이트", null, 0, null, 92, 59, 90, 0, 160, 300, null, null],
[0, "앵벌스", null, 0, null, 94, 91, 57, 0, 160, 300, null, null, "다람쥐는 위대하고 그 외에 다른 설치류는 없다"],
[0, "조밧", null, 0, null, 91, 93, 53, 0, 160, 300, null, null],
[0, "슬라임", null, 0, null, 90, 56, 93, 0, 160, 300, null, null],
[0, "제노에이지", null, 0, null, 93, 61, 93, 0, 160, 300, null, null],
[0, "평민킬러", null, 0, null, 95, 92, 55, 0, 160, 300, null, null],
[0, "아유", null, 0, null, 91, 54, 92, 0, 160, 300, null, null],
[0, "로리", null, 0, null, 92, 55, 92, 0, 160, 300, null, null],
[0, "n아텐 누", null, 0, null, 92, 55, 92, 0, 160, 300, null, null],
[0, "Card", null, 0, null, 91, 90, 59, 0, 160, 300, null, null],
[0, "Per", null, 0, null, 93, 57, 90, 0, 160, 300, null, null],
[0, "아쉐리트", null, 0, null, 94, 55, 90, 0, 160, 300, null, null],
[0, "외심장", null, 0, null, 91, 57, 92, 0, 160, 300, null, null],
[0, "카이스트", null, 0, null, 91, 53, 93, 0, 160, 300, null, null],
[0, "아키라", null, 0, null, 80, 50, 80, 0, 160, 300, null, null, "뻐끔뻐끔"],
[0, "카오스피닉스", null, 0, null, 93, 58, 92, 0, 160, 300, null, null, "=ㅁ="],
[0, "민트토끼", null, 0, null, 92, 54, 90, 0, 160, 300, null, null, "나 바보 아니다!"],
[0, "くま", null, 0, null, 90, 92, 57, 0, 160, 300, null, null],
[0, "북오더", null, 0, null, 91, 58, 92, 0, 160, 300, null, null],
[0, "이쓰미", null, 0, null, 92, 58, 91, 0, 160, 300, null, null],
[0, "개미호랑이", null, 0, null, 91, 55, 92, 0, 160, 300, null, null],
[0, "수장", null, 0, null, 93, 57, 91, 0, 160, 300, null, null],
[0, "이드", null, 0, null, 92, 93, 53, 0, 160, 300, null, null],
[0, "호무새", null, 0, null, 91, 53, 91, 0, 160, 300, null, null, "호우~"],
[0, "박일아", null, 0, null, 93, 59, 93, 0, 160, 300, null, null],
[0, "유기체", null, 0, null, 92, 56, 95, 0, 160, 300, null, null, "흠... 그렇다면 어쩔 수 없이 흉노로 가야겠군요..."],
[0, "황약사", null, 0, null, 92, 92, 60, 0, 160, 300, null, null],
[0, "하후연묘재", null, 0, null, 92, 52, 95, 0, 160, 300, null, null],
[0, "초절정미녀", null, 0, null, 95, 65, 95, 0, 160, 300, null, null],
[0, "제갈여포", null, 0, null, 92, 54, 91, 0, 160, 300, null, null],
[0, "온몸이근육", null, 0, null, 93, 93, 52, 0, 160, 300, null, null, "불끈불끈"],
[0, "네이미", null, 0, null, 91, 93, 56, 0, 160, 300, null, null],
[0, "ARES군주", null, 0, null, 90, 93, 55, 0, 160, 300, null, null],
[0, "중달", null, 0, null, 93, 92, 56, 0, 160, 300, null, null],
[0, "쿠레나이", null, 0, null, 90, 52, 90, 0, 160, 300, null, null],
[0, "만샘", null, 0, null, 92, 55, 92, 0, 160, 300, null, null],
[0, "우돌", null, 0, null, 93, 91, 53, 0, 160, 300, null, null],
[0, "아이린", null, 0, null, 93, 54, 90, 0, 160, 300, null, null],
[0, "유카", null, 0, null, 91, 92, 57, 0, 160, 300, null, null],
[0, "기", null, 0, null, 95, 90, 52, 0, 160, 300, null, null],
[0, "병리학적자세", null, 0, null, 91, 55, 93, 0, 160, 300, null, null],
[0, "료우기시키", null, 0, null, 92, 90, 53, 0, 160, 300, null, null],
[0, "Cure", null, 0, null, 92, 92, 55, 0, 160, 300, null, null],
[0, "40장로", null, 0, null, 85, 85, 85, 0, 160, 300, null, null]
],
"initialEvents":[
],
"events":[
[
"destroy_nation", 1000,
["and",
["Date", ">=", 183, 1],
["RemainNation", "==", 1]
],
["BlockScoutAction"],
["DeleteEvent"]
]
]
}
-915
View File
@@ -1,915 +0,0 @@
{
"title": "【가상모드25-b】 악질유저무쌍!(비급)",
"startYear": 180,
"history": [
"<C>●</>180년 1월:<L><b>【가상모드25-b】</b>악질유저무쌍!(비급)</>",
"<C>●</>180년 1월:<L><b>【이벤트】</b></>최고의 악질유저를 가려라!"
],
"stat": {
"total": 310,
"min": 40,
"max": 140
},
"iconPath": ".",
"fiction": 1,
"nation":[
],
"diplomacy":[],
"const": {
"npcBanMessageProb":0,
"npcSeizureMessageProb":0,
"npcMessageFreqByDay":8,
"availableSpecialWar": [
"che_귀병", "che_신산", "che_환술", "che_집중", "che_신중", "che_반계",
"che_보병", "che_궁병", "che_기병", "che_공성",
"che_돌격", "che_무쌍", "che_견고", "che_위압",
"che_저격", "che_필살", "che_징병", "che_의술", "che_격노", "che_척사"
],
"allItems": {
"horse": {
"che_명마_01_노기": 0,
"che_명마_02_조랑": 0,
"che_명마_03_노새": 0,
"che_명마_04_나귀": 0,
"che_명마_05_갈색마": 0,
"che_명마_06_흑색마": 0,
"che_명마_07_백마" : 2,
"che_명마_07_기주마" : 2,
"che_명마_07_오환마" : 2,
"che_명마_07_백상" : 2,
"che_명마_08_양주마" : 2,
"che_명마_08_흉노마" : 2,
"che_명마_09_과하마" : 2,
"che_명마_09_의남백마" : 2,
"che_명마_10_대완마" : 2,
"che_명마_10_옥추마" : 2,
"che_명마_11_서량마" : 2,
"che_명마_11_화종마" : 2,
"che_명마_12_사륜거" : 2,
"che_명마_12_옥란백용구": 2,
"che_명마_13_절영" : 2,
"che_명마_13_적로" : 2,
"che_명마_14_적란마" : 2,
"che_명마_14_조황비전" : 2,
"che_명마_15_한혈마" : 2,
"che_명마_15_적토마" : 2
},
"weapon": {
"che_무기_01_단도": 0,
"che_무기_02_단궁": 0,
"che_무기_03_단극": 0,
"che_무기_04_목검": 0,
"che_무기_05_죽창": 0,
"che_무기_06_소부": 0,
"che_무기_07_동추": 2,
"che_무기_07_철편": 2,
"che_무기_07_철쇄": 2,
"che_무기_07_맥궁": 2,
"che_무기_08_유성추": 2,
"che_무기_08_철질여골": 2,
"che_무기_09_쌍철극": 2,
"che_무기_09_동호비궁": 2,
"che_무기_10_삼첨도": 2,
"che_무기_10_대부": 2,
"che_무기_11_고정도": 2,
"che_무기_11_이광궁": 2,
"che_무기_12_철척사모": 2,
"che_무기_12_칠성검": 2,
"che_무기_13_사모": 2,
"che_무기_13_양유기궁": 2,
"che_무기_14_언월도": 2,
"che_무기_14_방천화극": 2,
"che_무기_15_청홍검": 2,
"che_무기_15_의천검": 2
},
"book": {
"che_서적_01_효경전": 0,
"che_서적_02_회남자": 0,
"che_서적_03_변도론": 0,
"che_서적_04_건상역주": 0,
"che_서적_05_여씨춘추": 0,
"che_서적_06_사민월령": 0,
"che_서적_07_위료자": 2,
"che_서적_07_사마법": 2,
"che_서적_07_한서": 2,
"che_서적_07_논어": 2,
"che_서적_08_전론": 2,
"che_서적_08_사기": 2,
"che_서적_09_장자": 2,
"che_서적_09_역경": 2,
"che_서적_10_시경": 2,
"che_서적_10_구국론": 2,
"che_서적_11_상군서": 2,
"che_서적_11_춘추전": 2,
"che_서적_12_산해경": 2,
"che_서적_12_맹덕신서": 2,
"che_서적_13_관자": 2,
"che_서적_13_병법24편": 2,
"che_서적_14_한비자": 2,
"che_서적_14_오자병법": 2,
"che_서적_15_노자": 2,
"che_서적_15_손자병법": 2
},
"item": {
"che_치료_환약": 0,
"che_저격_수극": 0,
"che_사기_탁주": 0,
"che_훈련_청주": 0,
"che_계략_이추": 0,
"che_계략_향낭": 0,
"event_전투특기_격노": 0,
"event_전투특기_견고": 0,
"event_전투특기_공성": 0,
"event_전투특기_궁병": 0,
"event_전투특기_귀병": 0,
"event_전투특기_기병": 0,
"event_전투특기_돌격": 0,
"event_전투특기_무쌍": 0,
"event_전투특기_반계": 0,
"event_전투특기_보병": 0,
"event_전투특기_신산": 0,
"event_전투특기_신중": 0,
"event_전투특기_위압": 0,
"event_전투특기_의술": 0,
"event_전투특기_저격": 0,
"event_전투특기_집중": 0,
"event_전투특기_징병": 0,
"event_전투특기_척사": 0,
"event_전투특기_필살": 0,
"event_전투특기_환술": 0
}
}
},
"general":[
[0, "아회남", null, 0, null, 65, 74, 26, 0, 160, 300, null, null],
[0, "이적", null, 0, null, 40, 24, 84, 0, 160, 300, null, null],
[0, "윤상", null, 0, null, 51, 44, 62, 0, 160, 300, null, null],
[0, "윤묵", null, 0, null, 26, 15, 66, 0, 160, 300, null, null],
[0, "우금", null, 0, null, 85, 82, 62, 0, 160, 300, null, null],
[0, "위관", null, 0, null, 69, 46, 79, 0, 160, 300, null, null],
[0, "원윤", null, 0, null, 32, 14, 39, 0, 160, 300, null, null],
[0, "원희", null, 0, null, 66, 43, 63, 0, 160, 300, null, null],
[0, "염행", null, 0, null, 78, 90, 58, 0, 160, 300, null, null],
[0, "염유", null, 0, null, 71, 50, 71, 0, 160, 300, null, null],
[0, "원술", null, 0, null, 76, 55, 75, 0, 160, 300, null, null],
[0, "원상", null, 0, null, 63, 75, 42, 0, 160, 300, null, null],
[0, "원소", null, 0, null, 90, 62, 81, 0, 160, 300, null, null],
[0, "염상", null, 0, null, 40, 27, 71, 0, 160, 300, null, null],
[0, "원담", null, 0, null, 60, 78, 30, 0, 160, 300, null, null],
[0, "염포", null, 0, null, 40, 25, 82, 0, 160, 300, null, null],
[0, "왕위", null, 0, null, 60, 70, 48, 0, 160, 300, null, null],
[0, "왕윤", null, 0, null, 26, 6, 68, 0, 160, 300, null, null],
[0, "왕항", null, 0, null, 76, 43, 61, 0, 160, 300, null, null],
[0, "왕찬", null, 0, null, 15, 3, 79, 0, 160, 300, null, null],
[0, "왕수", null, 0, null, 54, 27, 77, 0, 160, 300, null, null],
[0, "왕숙", null, 0, null, 36, 22, 76, 0, 160, 300, null, null],
[0, "왕준", null, 0, null, 85, 64, 84, 0, 160, 300, null, null],
[0, "왕쌍", null, 0, null, 67, 88, 19, 0, 160, 300, null, null],
[0, "왕창", null, 0, null, 74, 57, 79, 0, 160, 300, null, null],
[0, "왕평", null, 0, null, 88, 81, 61, 0, 160, 300, null, null],
[0, "왕보", null, 0, null, 62, 41, 79, 0, 160, 300, null, null],
[0, "왕문", null, 0, null, 65, 64, 31, 0, 160, 300, null, null],
[0, "왕릉", null, 0, null, 74, 50, 71, 0, 160, 300, null, null],
[0, "왕루", null, 0, null, 28, 30, 79, 0, 160, 300, null, null],
[0, "왕랑", null, 0, null, 47, 35, 79, 0, 160, 300, null, null],
[0, "온회", null, 0, null, 62, 36, 74, 0, 160, 300, null, null],
[0, "하안", null, 0, null, 15, 30, 72, 0, 160, 300, null, null],
[0, "괴월", null, 0, null, 50, 38, 85, 0, 160, 300, null, null],
[0, "괴량", null, 0, null, 68, 33, 88, 0, 160, 300, null, null],
[0, "가화", null, 0, null, 49, 65, 41, 0, 160, 300, null, null],
[0, "가규", null, 0, null, 78, 61, 84, 0, 160, 300, null, null],
[0, "하의", null, 0, null, 56, 69, 36, 0, 160, 300, null, null],
[0, "화흠", null, 0, null, 51, 33, 88, 0, 160, 300, null, null],
[0, "가후", null, 0, null, 71, 40, 98, 0, 160, 300, null, null],
[0, "곽가", null, 0, null, 70, 41, 97, 0, 160, 300, null, null],
[0, "악환", null, 0, null, 65, 80, 42, 0, 160, 300, null, null],
[0, "곽사", null, 0, null, 64, 76, 13, 0, 160, 300, null, null],
[0, "악취", null, 0, null, 53, 66, 61, 0, 160, 300, null, null],
[0, "곽준", null, 0, null, 73, 52, 73, 0, 160, 300, null, null],
[0, "학소", null, 0, null, 88, 63, 83, 0, 160, 300, null, null],
[0, "악진", null, 0, null, 80, 85, 56, 0, 160, 300, null, null],
[0, "곽도", null, 0, null, 62, 50, 82, 0, 160, 300, null, null],
[0, "학맹", null, 0, null, 62, 67, 42, 0, 160, 300, null, null],
[0, "곽유지", null, 0, null, 28, 9, 69, 0, 160, 300, null, null],
[0, "곽익", null, 0, null, 73, 69, 69, 0, 160, 300, null, null],
[0, "곽회", null, 0, null, 90, 66, 85, 0, 160, 300, null, null],
[0, "하후위", null, 0, null, 71, 73, 49, 0, 160, 300, null, null],
[0, "하후연", null, 0, null, 95, 92, 72, 0, 160, 300, null, null],
[0, "하후은", null, 0, null, 63, 72, 53, 0, 160, 300, null, null],
[0, "하후화", null, 0, null, 48, 51, 71, 0, 160, 300, null, null],
[0, "하후혜", null, 0, null, 50, 44, 76, 0, 160, 300, null, null],
[0, "하후현", null, 0, null, 54, 39, 76, 0, 160, 300, null, null],
[0, "하후상", null, 0, null, 79, 55, 75, 0, 160, 300, null, null],
[0, "하후덕", null, 0, null, 69, 73, 32, 0, 160, 300, null, null],
[0, "하후돈", null, 0, null, 91, 88, 68, 0, 160, 300, null, null],
[0, "하후패", null, 0, null, 79, 85, 63, 0, 160, 300, null, null],
[0, "하후무", null, 0, null, 20, 7, 4, 0, 160, 300, null, null],
[0, "가충", null, 0, null, 54, 31, 89, 0, 160, 300, null, null],
[0, "하진", null, 0, null, 68, 54, 75, 0, 160, 300, null, null],
[0, "화웅", null, 0, null, 78, 90, 55, 0, 160, 300, null, null],
[0, "한윤", null, 0, null, 26, 29, 65, 0, 160, 300, null, null],
[0, "관우", null, 0, null, 96, 99, 76, 0, 160, 300, null, null],
[0, "환계", null, 0, null, 25, 26, 68, 0, 160, 300, null, null],
[0, "관해", null, 0, null, 70, 82, 10, 0, 160, 300, null, null],
[0, "관구검", null, 0, null, 84, 86, 62, 0, 160, 300, null, null],
[0, "한현", null, 0, null, 22, 33, 7, 0, 160, 300, null, null],
[0, "한호", null, 0, null, 73, 61, 84, 0, 160, 300, null, null],
[0, "관흥", null, 0, null, 76, 84, 62, 0, 160, 300, null, null],
[0, "관색", null, 0, null, 74, 83, 56, 0, 160, 300, null, null],
[0, "한수", null, 0, null, 78, 58, 79, 0, 160, 300, null, null],
[0, "한숭", null, 0, null, 25, 15, 71, 0, 160, 300, null, null],
[0, "관정", null, 0, null, 36, 52, 73, 0, 160, 300, null, null],
[0, "한섬", null, 0, null, 69, 66, 36, 0, 160, 300, null, null],
[0, "감택", null, 0, null, 51, 49, 83, 0, 160, 300, null, null],
[0, "한충", null, 0, null, 64, 67, 18, 0, 160, 300, null, null],
[0, "한당", null, 0, null, 76, 85, 61, 0, 160, 300, null, null],
[0, "한덕", null, 0, null, 63, 76, 25, 0, 160, 300, null, null],
[0, "감녕", null, 0, null, 92, 95, 74, 0, 160, 300, null, null],
[0, "한복", null, 0, null, 28, 3, 27, 0, 160, 300, null, null],
[0, "관평", null, 0, null, 78, 82, 60, 0, 160, 300, null, null],
[0, "간옹", null, 0, null, 20, 32, 75, 0, 160, 300, null, null],
[0, "안량", null, 0, null, 88, 96, 43, 0, 160, 300, null, null],
[0, "위연", null, 0, null, 91, 90, 70, 0, 160, 300, null, null],
[0, "국의", null, 0, null, 84, 78, 51, 0, 160, 300, null, null],
[0, "희지재", null, 0, null, 63, 35, 91, 0, 160, 300, null, null],
[0, "위속", null, 0, null, 67, 78, 31, 0, 160, 300, null, null],
[0, "위유", null, 0, null, 46, 29, 74, 0, 160, 300, null, null],
[0, "우금2", null, 0, null, 72, 79, 38, 0, 160, 300, null, null],
[0, "우보", null, 0, null, 38, 60, 21, 0, 160, 300, null, null],
[0, "강유", null, 0, null, 92, 72, 93, 0, 160, 300, null, null],
[0, "공지", null, 0, null, 43, 53, 62, 0, 160, 300, null, null],
[0, "교유", null, 0, null, 64, 69, 38, 0, 160, 300, null, null],
[0, "공도", null, 0, null, 59, 70, 23, 0, 160, 300, null, null],
[0, "허공", null, 0, null, 44, 66, 64, 0, 160, 300, null, null],
[0, "허정", null, 0, null, 23, 5, 68, 0, 160, 300, null, null],
[0, "허저", null, 0, null, 74, 97, 36, 0, 160, 300, null, null],
[0, "허유", null, 0, null, 36, 21, 80, 0, 160, 300, null, null],
[0, "기령", null, 0, null, 85, 84, 51, 0, 160, 300, null, null],
[0, "김의", null, 0, null, 32, 38, 65, 0, 160, 300, null, null],
[0, "김배삼결", null, 0, null, 64, 76, 19, 0, 160, 300, null, null],
[0, "김선", null, 0, null, 52, 68, 13, 0, 160, 300, null, null],
[0, "우번", null, 0, null, 46, 46, 87, 0, 160, 300, null, null],
[0, "형도영", null, 0, null, 69, 79, 41, 0, 160, 300, null, null],
[0, "엄안", null, 0, null, 82, 83, 62, 0, 160, 300, null, null],
[0, "엄망", null, 0, null, 68, 71, 40, 0, 160, 300, null, null],
[0, "엄준", null, 0, null, 41, 12, 71, 0, 160, 300, null, null],
[0, "엄정", null, 0, null, 50, 55, 39, 0, 160, 300, null, null],
[0, "엄백호", null, 0, null, 67, 70, 42, 0, 160, 300, null, null],
[0, "엄여", null, 0, null, 61, 78, 44, 0, 160, 300, null, null],
[0, "오의", null, 0, null, 79, 73, 53, 0, 160, 300, null, null],
[0, "황개", null, 0, null, 80, 86, 64, 0, 160, 300, null, null],
[0, "고간", null, 0, null, 74, 56, 38, 0, 160, 300, null, null],
[0, "황권", null, 0, null, 75, 59, 88, 0, 160, 300, null, null],
[0, "고유", null, 0, null, 57, 43, 72, 0, 160, 300, null, null],
[0, "고순", null, 0, null, 87, 89, 60, 0, 160, 300, null, null],
[0, "고상", null, 0, null, 68, 68, 53, 0, 160, 300, null, null],
[0, "고승", null, 0, null, 67, 73, 41, 0, 160, 300, null, null],
[0, "후성", null, 0, null, 74, 75, 54, 0, 160, 300, null, null],
[0, "후선", null, 0, null, 63, 66, 34, 0, 160, 300, null, null],
[0, "황조", null, 0, null, 81, 66, 48, 0, 160, 300, null, null],
[0, "공손월", null, 0, null, 74, 72, 47, 0, 160, 300, null, null],
[0, "공손연", null, 0, null, 65, 70, 49, 0, 160, 300, null, null],
[0, "공손공", null, 0, null, 39, 17, 69, 0, 160, 300, null, null],
[0, "공손강", null, 0, null, 72, 66, 46, 0, 160, 300, null, null],
[0, "공손찬", null, 0, null, 86, 82, 62, 0, 160, 300, null, null],
[0, "공손속", null, 0, null, 63, 68, 46, 0, 160, 300, null, null],
[0, "공손도", null, 0, null, 67, 71, 49, 0, 160, 300, null, null],
[0, "공손범", null, 0, null, 73, 69, 49, 0, 160, 300, null, null],
[0, "황충", null, 0, null, 88, 96, 65, 0, 160, 300, null, null],
[0, "고정", null, 0, null, 55, 63, 43, 0, 160, 300, null, null],
[0, "고패", null, 0, null, 66, 48, 69, 0, 160, 300, null, null],
[0, "황보숭", null, 0, null, 91, 61, 82, 0, 160, 300, null, null],
[0, "공융", null, 0, null, 30, 5, 73, 0, 160, 300, null, null],
[0, "고람", null, 0, null, 76, 82, 60, 0, 160, 300, null, null],
[0, "오경", null, 0, null, 69, 66, 45, 0, 160, 300, null, null],
[0, "호거아", null, 0, null, 70, 82, 41, 0, 160, 300, null, null],
[0, "호진", null, 0, null, 65, 74, 12, 0, 160, 300, null, null],
[0, "올돌골", null, 0, null, 79, 86, 11, 0, 160, 300, null, null],
[0, "호반", null, 0, null, 55, 55, 59, 0, 160, 300, null, null],
[0, "오반", null, 0, null, 74, 71, 50, 0, 160, 300, null, null],
[0, "고옹", null, 0, null, 52, 18, 81, 0, 160, 300, null, null],
[0, "오란", null, 0, null, 68, 80, 35, 0, 160, 300, null, null],
[0, "채화", null, 0, null, 39, 50, 1, 0, 160, 300, null, null],
[0, "채중", null, 0, null, 40, 54, 2, 0, 160, 300, null, null],
[0, "채모", null, 0, null, 70, 55, 77, 0, 160, 300, null, null],
[0, "착융", null, 0, null, 60, 69, 38, 0, 160, 300, null, null],
[0, "사마의", null, 0, null, 99, 63, 98, 0, 160, 300, null, null],
[0, "사마염", null, 0, null, 69, 59, 77, 0, 160, 300, null, null],
[0, "사마사", null, 0, null, 84, 64, 89, 0, 160, 300, null, null],
[0, "사마소", null, 0, null, 85, 57, 88, 0, 160, 300, null, null],
[0, "사마부", null, 0, null, 70, 37, 77, 0, 160, 300, null, null],
[0, "사마랑", null, 0, null, 20, 21, 72, 0, 160, 300, null, null],
[0, "사마가", null, 0, null, 66, 84, 25, 0, 160, 300, null, null],
[0, "주흔", null, 0, null, 65, 51, 73, 0, 160, 300, null, null],
[0, "주앙", null, 0, null, 74, 65, 48, 0, 160, 300, null, null],
[0, "주지", null, 0, null, 73, 85, 41, 0, 160, 300, null, null],
[0, "주창", null, 0, null, 68, 77, 42, 0, 160, 300, null, null],
[0, "주태", null, 0, null, 84, 90, 48, 0, 160, 300, null, null],
[0, "주방", null, 0, null, 52, 41, 80, 0, 160, 300, null, null],
[0, "주유", null, 0, null, 97, 71, 97, 0, 160, 300, null, null],
[0, "주환", null, 0, null, 87, 84, 64, 0, 160, 300, null, null],
[0, "주거", null, 0, null, 77, 57, 72, 0, 160, 300, null, null],
[0, "축융", null, 0, null, 72, 75, 35, 0, 160, 300, null, null],
[0, "주준", null, 0, null, 89, 57, 76, 0, 160, 300, null, null],
[0, "주연", null, 0, null, 86, 75, 57, 0, 160, 300, null, null],
[0, "주치", null, 0, null, 71, 56, 72, 0, 160, 300, null, null],
[0, "주포", null, 0, null, 68, 73, 34, 0, 160, 300, null, null],
[0, "주령", null, 0, null, 78, 73, 53, 0, 160, 300, null, null],
[0, "순욱", null, 0, null, 78, 38, 97, 0, 160, 300, null, null],
[0, "순우경", null, 0, null, 78, 66, 29, 0, 160, 300, null, null],
[0, "순심", null, 0, null, 45, 25, 78, 0, 160, 300, null, null],
[0, "순유", null, 0, null, 80, 35, 95, 0, 160, 300, null, null],
[0, "장완", null, 0, null, 78, 34, 89, 0, 160, 300, null, null],
[0, "종회", null, 0, null, 88, 62, 93, 0, 160, 300, null, null],
[0, "장간", null, 0, null, 19, 6, 66, 0, 160, 300, null, null],
[0, "장의거", null, 0, null, 71, 41, 59, 0, 160, 300, null, null],
[0, "장흠", null, 0, null, 78, 85, 54, 0, 160, 300, null, null],
[0, "장제3", null, 0, null, 62, 43, 85, 0, 160, 300, null, null],
[0, "초주", null, 0, null, 16, 3, 67, 0, 160, 300, null, null],
[0, "초촉", null, 0, null, 65, 76, 33, 0, 160, 300, null, null],
[0, "향총", null, 0, null, 76, 56, 77, 0, 160, 300, null, null],
[0, "종요", null, 0, null, 79, 24, 90, 0, 160, 300, null, null],
[0, "향랑", null, 0, null, 28, 18, 74, 0, 160, 300, null, null],
[0, "서영", null, 0, null, 92, 80, 62, 0, 160, 300, null, null],
[0, "제갈각", null, 0, null, 72, 47, 90, 0, 160, 300, null, null],
[0, "제갈근", null, 0, null, 75, 34, 85, 0, 160, 300, null, null],
[0, "제갈균", null, 0, null, 29, 25, 52, 0, 160, 300, null, null],
[0, "제갈탄", null, 0, null, 72, 54, 76, 0, 160, 300, null, null],
[0, "제갈량", null, 0, null, 98, 43, 100, 0, 160, 300, null, null],
[0, "서황", null, 0, null, 95, 94, 74, 0, 160, 300, null, null],
[0, "서서", null, 0, null, 85, 64, 94, 0, 160, 300, null, null],
[0, "서성", null, 0, null, 86, 81, 61, 0, 160, 300, null, null],
[0, "서막", null, 0, null, 55, 32, 68, 0, 160, 300, null, null],
[0, "신의", null, 0, null, 55, 59, 60, 0, 160, 300, null, null],
[0, "신탐", null, 0, null, 56, 62, 54, 0, 160, 300, null, null],
[0, "심배", null, 0, null, 80, 60, 84, 0, 160, 300, null, null],
[0, "신비", null, 0, null, 42, 24, 79, 0, 160, 300, null, null],
[0, "신평", null, 0, null, 69, 43, 77, 0, 160, 300, null, null],
[0, "진복", null, 0, null, 31, 7, 73, 0, 160, 300, null, null],
[0, "진랑", null, 0, null, 58, 70, 35, 0, 160, 300, null, null],
[0, "휴고", null, 0, null, 63, 71, 38, 0, 160, 300, null, null],
[0, "추단", null, 0, null, 61, 64, 34, 0, 160, 300, null, null],
[0, "성의", null, 0, null, 74, 72, 41, 0, 160, 300, null, null],
[0, "성공영", null, 0, null, 73, 58, 80, 0, 160, 300, null, null],
[0, "설종", null, 0, null, 34, 16, 73, 0, 160, 300, null, null],
[0, "단경", null, 0, null, 71, 68, 43, 0, 160, 300, null, null],
[0, "전종", null, 0, null, 78, 55, 75, 0, 160, 300, null, null],
[0, "조예", null, 0, null, 72, 52, 82, 0, 160, 300, null, null],
[0, "조휴", null, 0, null, 84, 78, 58, 0, 160, 300, null, null],
[0, "송헌", null, 0, null, 68, 77, 38, 0, 160, 300, null, null],
[0, "조앙", null, 0, null, 78, 50, 69, 0, 160, 300, null, null],
[0, "조홍", null, 0, null, 80, 75, 55, 0, 160, 300, null, null],
[0, "조순", null, 0, null, 85, 83, 63, 0, 160, 300, null, null],
[0, "조창", null, 0, null, 86, 91, 59, 0, 160, 300, null, null],
[0, "조식", null, 0, null, 45, 22, 86, 0, 160, 300, null, null],
[0, "조진", null, 0, null, 88, 74, 56, 0, 160, 300, null, null],
[0, "조인", null, 0, null, 94, 90, 70, 0, 160, 300, null, null],
[0, "조성", null, 0, null, 54, 74, 38, 0, 160, 300, null, null],
[0, "조조", null, 0, null, 100, 72, 96, 0, 160, 300, null, null],
[0, "조충", null, 0, null, 43, 21, 74, 0, 160, 300, null, null],
[0, "장패", null, 0, null, 78, 86, 53, 0, 160, 300, null, null],
[0, "조비", null, 0, null, 75, 64, 87, 0, 160, 300, null, null],
[0, "조표", null, 0, null, 54, 69, 32, 0, 160, 300, null, null],
[0, "저수", null, 0, null, 86, 46, 95, 0, 160, 300, null, null],
[0, "소비", null, 0, null, 69, 45, 66, 0, 160, 300, null, null],
[0, "조무", null, 0, null, 70, 71, 50, 0, 160, 300, null, null],
[0, "손환", null, 0, null, 82, 56, 76, 0, 160, 300, null, null],
[0, "손견", null, 0, null, 94, 95, 73, 0, 160, 300, null, null],
[0, "손건", null, 0, null, 44, 33, 79, 0, 160, 300, null, null],
[0, "손권", null, 0, null, 86, 61, 81, 0, 160, 300, null, null],
[0, "손교", null, 0, null, 77, 72, 52, 0, 160, 300, null, null],
[0, "손책", null, 0, null, 93, 94, 74, 0, 160, 300, null, null],
[0, "손소", null, 0, null, 82, 79, 59, 0, 160, 300, null, null],
[0, "손정", null, 0, null, 66, 53, 73, 0, 160, 300, null, null],
[0, "손중", null, 0, null, 62, 71, 36, 0, 160, 300, null, null],
[0, "손등", null, 0, null, 62, 37, 79, 0, 160, 300, null, null],
[0, "손유", null, 0, null, 77, 70, 51, 0, 160, 300, null, null],
[0, "손익", null, 0, null, 67, 83, 27, 0, 160, 300, null, null],
[0, "손례", null, 0, null, 78, 81, 59, 0, 160, 300, null, null],
[0, "태사자", null, 0, null, 94, 94, 72, 0, 160, 300, null, null],
[0, "대래동주", null, 0, null, 51, 53, 54, 0, 160, 300, null, null],
[0, "대릉", null, 0, null, 70, 75, 39, 0, 160, 300, null, null],
[0, "타사대왕", null, 0, null, 62, 48, 70, 0, 160, 300, null, null],
[0, "담웅", null, 0, null, 58, 73, 14, 0, 160, 300, null, null],
[0, "장윤", null, 0, null, 72, 67, 42, 0, 160, 300, null, null],
[0, "조운", null, 0, null, 90, 96, 75, 0, 160, 300, null, null],
[0, "장위", null, 0, null, 74, 66, 45, 0, 160, 300, null, null],
[0, "장영", null, 0, null, 75, 74, 41, 0, 160, 300, null, null],
[0, "장연", null, 0, null, 76, 81, 57, 0, 160, 300, null, null],
[0, "장횡", null, 0, null, 59, 70, 23, 0, 160, 300, null, null],
[0, "장온", null, 0, null, 32, 10, 72, 0, 160, 300, null, null],
[0, "장개", null, 0, null, 34, 66, 8, 0, 160, 300, null, null],
[0, "장각", null, 0, null, 87, 35, 90, 0, 160, 300, null, null],
[0, "장기", null, 0, null, 74, 35, 76, 0, 160, 300, null, null],
[0, "장의", null, 0, null, 79, 55, 75, 0, 160, 300, null, null],
[0, "장훈", null, 0, null, 72, 68, 41, 0, 160, 300, null, null],
[0, "장굉", null, 0, null, 24, 22, 86, 0, 160, 300, null, null],
[0, "장합", null, 0, null, 92, 89, 69, 0, 160, 300, null, null],
[0, "조홍2", null, 0, null, 66, 72, 28, 0, 160, 300, null, null],
[0, "장제2", null, 0, null, 70, 66, 46, 0, 160, 300, null, null],
[0, "장수", null, 0, null, 80, 73, 51, 0, 160, 300, null, null],
[0, "장소", null, 0, null, 41, 13, 87, 0, 160, 300, null, null],
[0, "장송", null, 0, null, 40, 6, 85, 0, 160, 300, null, null],
[0, "장임", null, 0, null, 85, 84, 64, 0, 160, 300, null, null],
[0, "장제", null, 0, null, 67, 43, 80, 0, 160, 300, null, null],
[0, "장막", null, 0, null, 52, 53, 71, 0, 160, 300, null, null],
[0, "조범", null, 0, null, 28, 21, 32, 0, 160, 300, null, null],
[0, "장비", null, 0, null, 87, 98, 72, 0, 160, 300, null, null],
[0, "장포", null, 0, null, 78, 84, 48, 0, 160, 300, null, null],
[0, "장보", null, 0, null, 83, 60, 81, 0, 160, 300, null, null],
[0, "장만성", null, 0, null, 75, 81, 45, 0, 160, 300, null, null],
[0, "장양", null, 0, null, 72, 70, 50, 0, 160, 300, null, null],
[0, "장익", null, 0, null, 75, 55, 76, 0, 160, 300, null, null],
[0, "장료", null, 0, null, 96, 94, 74, 0, 160, 300, null, null],
[0, "장량", null, 0, null, 78, 80, 59, 0, 160, 300, null, null],
[0, "조루", null, 0, null, 70, 43, 68, 0, 160, 300, null, null],
[0, "장로", null, 0, null, 65, 42, 81, 0, 160, 300, null, null],
[0, "진횡", null, 0, null, 64, 63, 26, 0, 160, 300, null, null],
[0, "진응", null, 0, null, 62, 72, 45, 0, 160, 300, null, null],
[0, "진기", null, 0, null, 58, 65, 43, 0, 160, 300, null, null],
[0, "진궁", null, 0, null, 84, 55, 90, 0, 160, 300, null, null],
[0, "진교", null, 0, null, 61, 27, 77, 0, 160, 300, null, null],
[0, "진군", null, 0, null, 32, 14, 75, 0, 160, 300, null, null],
[0, "진규", null, 0, null, 30, 4, 82, 0, 160, 300, null, null],
[0, "진식", null, 0, null, 70, 71, 25, 0, 160, 300, null, null],
[0, "진진", null, 0, null, 46, 46, 69, 0, 160, 300, null, null],
[0, "진태", null, 0, null, 86, 68, 89, 0, 160, 300, null, null],
[0, "진등", null, 0, null, 79, 59, 81, 0, 160, 300, null, null],
[0, "진도", null, 0, null, 82, 78, 58, 0, 160, 300, null, null],
[0, "진무", null, 0, null, 76, 87, 43, 0, 160, 300, null, null],
[0, "진란", null, 0, null, 66, 69, 40, 0, 160, 300, null, null],
[0, "진림", null, 0, null, 25, 9, 75, 0, 160, 300, null, null],
[0, "정욱", null, 0, null, 76, 49, 94, 0, 160, 300, null, null],
[0, "정원지", null, 0, null, 69, 74, 17, 0, 160, 300, null, null],
[0, "정은", null, 0, null, 69, 73, 40, 0, 160, 300, null, null],
[0, "정원", null, 0, null, 70, 76, 35, 0, 160, 300, null, null],
[0, "정보", null, 0, null, 84, 79, 59, 0, 160, 300, null, null],
[0, "정봉", null, 0, null, 81, 92, 69, 0, 160, 300, null, null],
[0, "전위", null, 0, null, 79, 98, 42, 0, 160, 300, null, null],
[0, "전해", null, 0, null, 68, 65, 45, 0, 160, 300, null, null],
[0, "전주", null, 0, null, 66, 51, 73, 0, 160, 300, null, null],
[0, "전풍", null, 0, null, 82, 43, 96, 0, 160, 300, null, null],
[0, "전예", null, 0, null, 93, 85, 66, 0, 160, 300, null, null],
[0, "동윤", null, 0, null, 47, 28, 79, 0, 160, 300, null, null],
[0, "동화", null, 0, null, 57, 34, 75, 0, 160, 300, null, null],
[0, "등애", null, 0, null, 92, 73, 94, 0, 160, 300, null, null],
[0, "도겸", null, 0, null, 51, 27, 64, 0, 160, 300, null, null],
[0, "등현", null, 0, null, 61, 73, 45, 0, 160, 300, null, null],
[0, "등지", null, 0, null, 73, 52, 81, 0, 160, 300, null, null],
[0, "동습", null, 0, null, 72, 85, 50, 0, 160, 300, null, null],
[0, "동승", null, 0, null, 56, 53, 65, 0, 160, 300, null, null],
[0, "동소", null, 0, null, 34, 25, 80, 0, 160, 300, null, null],
[0, "동탁", null, 0, null, 91, 87, 67, 0, 160, 300, null, null],
[0, "동도나", null, 0, null, 68, 73, 31, 0, 160, 300, null, null],
[0, "동민", null, 0, null, 49, 60, 25, 0, 160, 300, null, null],
[0, "등무", null, 0, null, 61, 75, 29, 0, 160, 300, null, null],
[0, "두기", null, 0, null, 74, 43, 78, 0, 160, 300, null, null],
[0, "두예", null, 0, null, 96, 69, 95, 0, 160, 300, null, null],
[0, "배원소", null, 0, null, 49, 65, 25, 0, 160, 300, null, null],
[0, "마완", null, 0, null, 71, 74, 16, 0, 160, 300, null, null],
[0, "마휴", null, 0, null, 68, 73, 48, 0, 160, 300, null, null],
[0, "파재", null, 0, null, 74, 74, 55, 0, 160, 300, null, null],
[0, "마준", null, 0, null, 38, 52, 31, 0, 160, 300, null, null],
[0, "마속", null, 0, null, 61, 59, 84, 0, 160, 300, null, null],
[0, "마대", null, 0, null, 79, 85, 62, 0, 160, 300, null, null],
[0, "마충", null, 0, null, 78, 72, 52, 0, 160, 300, null, null],
[0, "마초", null, 0, null, 86, 97, 44, 0, 160, 300, null, null],
[0, "마철", null, 0, null, 70, 62, 43, 0, 160, 300, null, null],
[0, "마등", null, 0, null, 85, 80, 52, 0, 160, 300, null, null],
[0, "마량", null, 0, null, 53, 23, 85, 0, 160, 300, null, null],
[0, "반준", null, 0, null, 61, 46, 82, 0, 160, 300, null, null],
[0, "반장", null, 0, null, 76, 80, 59, 0, 160, 300, null, null],
[0, "번조", null, 0, null, 66, 73, 31, 0, 160, 300, null, null],
[0, "번능", null, 0, null, 69, 61, 36, 0, 160, 300, null, null],
[0, "반봉", null, 0, null, 56, 77, 4, 0, 160, 300, null, null],
[0, "비의", null, 0, null, 82, 56, 88, 0, 160, 300, null, null],
[0, "비연", null, 0, null, 60, 66, 21, 0, 160, 300, null, null],
[0, "비시", null, 0, null, 18, 28, 65, 0, 160, 300, null, null],
[0, "미축", null, 0, null, 33, 29, 78, 0, 160, 300, null, null],
[0, "미방", null, 0, null, 54, 61, 32, 0, 160, 300, null, null],
[0, "비요", null, 0, null, 70, 52, 73, 0, 160, 300, null, null],
[0, "무안국", null, 0, null, 70, 79, 34, 0, 160, 300, null, null],
[0, "풍습", null, 0, null, 72, 71, 39, 0, 160, 300, null, null],
[0, "부사인", null, 0, null, 46, 63, 37, 0, 160, 300, null, null],
[0, "부첨", null, 0, null, 73, 85, 62, 0, 160, 300, null, null],
[0, "부손", null, 0, null, 29, 13, 70, 0, 160, 300, null, null],
[0, "문앙", null, 0, null, 76, 96, 65, 0, 160, 300, null, null],
[0, "문흠", null, 0, null, 74, 79, 43, 0, 160, 300, null, null],
[0, "문추", null, 0, null, 87, 95, 49, 0, 160, 300, null, null],
[0, "문빙", null, 0, null, 88, 85, 65, 0, 160, 300, null, null],
[0, "변희", null, 0, null, 56, 70, 62, 0, 160, 300, null, null],
[0, "망아장", null, 0, null, 45, 79, 3, 0, 160, 300, null, null],
[0, "봉기", null, 0, null, 56, 48, 84, 0, 160, 300, null, null],
[0, "방희", null, 0, null, 60, 38, 69, 0, 160, 300, null, null],
[0, "법정", null, 0, null, 82, 47, 94, 0, 160, 300, null, null],
[0, "방통", null, 0, null, 79, 34, 97, 0, 160, 300, null, null],
[0, "방덕", null, 0, null, 89, 94, 70, 0, 160, 300, null, null],
[0, "포륭", null, 0, null, 58, 76, 49, 0, 160, 300, null, null],
[0, "목순", null, 0, null, 52, 77, 11, 0, 160, 300, null, null],
[0, "목록대왕", null, 0, null, 65, 71, 39, 0, 160, 300, null, null],
[0, "보즐", null, 0, null, 83, 51, 81, 0, 160, 300, null, null],
[0, "만총", null, 0, null, 88, 64, 87, 0, 160, 300, null, null],
[0, "모개", null, 0, null, 63, 39, 60, 0, 160, 300, null, null],
[0, "맹획", null, 0, null, 81, 88, 42, 0, 160, 300, null, null],
[0, "맹체", null, 0, null, 75, 55, 75, 0, 160, 300, null, null],
[0, "맹우", null, 0, null, 50, 68, 22, 0, 160, 300, null, null],
[0, "유섭", null, 0, null, 62, 79, 24, 0, 160, 300, null, null],
[0, "양부", null, 0, null, 62, 48, 68, 0, 160, 300, null, null],
[0, "옹개", null, 0, null, 73, 75, 57, 0, 160, 300, null, null],
[0, "양의", null, 0, null, 68, 40, 82, 0, 160, 300, null, null],
[0, "양호", null, 0, null, 94, 69, 92, 0, 160, 300, null, null],
[0, "양홍", null, 0, null, 33, 15, 77, 0, 160, 300, null, null],
[0, "양앙", null, 0, null, 68, 72, 38, 0, 160, 300, null, null],
[0, "양추", null, 0, null, 52, 65, 40, 0, 160, 300, null, null],
[0, "양수", null, 0, null, 46, 23, 83, 0, 160, 300, null, null],
[0, "양추2", null, 0, null, 67, 64, 44, 0, 160, 300, null, null],
[0, "양송", null, 0, null, 17, 5, 28, 0, 160, 300, null, null],
[0, "양임", null, 0, null, 70, 78, 56, 0, 160, 300, null, null],
[0, "양조", null, 0, null, 53, 61, 36, 0, 160, 300, null, null],
[0, "양백", null, 0, null, 44, 45, 19, 0, 160, 300, null, null],
[0, "양부2", null, 0, null, 67, 50, 83, 0, 160, 300, null, null],
[0, "양봉", null, 0, null, 66, 65, 31, 0, 160, 300, null, null],
[0, "양봉2", null, 0, null, 54, 62, 53, 0, 160, 300, null, null],
[0, "뇌동", null, 0, null, 69, 78, 51, 0, 160, 300, null, null],
[0, "뇌박", null, 0, null, 62, 70, 36, 0, 160, 300, null, null],
[0, "이이", null, 0, null, 63, 77, 19, 0, 160, 300, null, null],
[0, "이회", null, 0, null, 79, 58, 79, 0, 160, 300, null, null],
[0, "이각", null, 0, null, 69, 72, 24, 0, 160, 300, null, null],
[0, "육항", null, 0, null, 94, 68, 93, 0, 160, 300, null, null],
[0, "육적", null, 0, null, 20, 7, 72, 0, 160, 300, null, null],
[0, "육손", null, 0, null, 95, 71, 96, 0, 160, 300, null, null],
[0, "이엄", null, 0, null, 83, 84, 63, 0, 160, 300, null, null],
[0, "이유", null, 0, null, 61, 26, 93, 0, 160, 300, null, null],
[0, "이숙", null, 0, null, 46, 69, 61, 0, 160, 300, null, null],
[0, "이통", null, 0, null, 73, 81, 62, 0, 160, 300, null, null],
[0, "이전", null, 0, null, 78, 80, 59, 0, 160, 300, null, null],
[0, "이풍", null, 0, null, 69, 74, 50, 0, 160, 300, null, null],
[0, "유언", null, 0, null, 61, 38, 80, 0, 160, 300, null, null],
[0, "유괴", null, 0, null, 71, 73, 52, 0, 160, 300, null, null],
[0, "유기", null, 0, null, 52, 12, 63, 0, 160, 300, null, null],
[0, "유우", null, 0, null, 62, 33, 75, 0, 160, 300, null, null],
[0, "유훈", null, 0, null, 47, 63, 35, 0, 160, 300, null, null],
[0, "유현", null, 0, null, 54, 66, 51, 0, 160, 300, null, null],
[0, "유순", null, 0, null, 63, 46, 28, 0, 160, 300, null, null],
[0, "유장", null, 0, null, 31, 5, 34, 0, 160, 300, null, null],
[0, "유심", null, 0, null, 60, 48, 70, 0, 160, 300, null, null],
[0, "유선", null, 0, null, 3, 5, 9, 0, 160, 300, null, null],
[0, "유종", null, 0, null, 24, 22, 65, 0, 160, 300, null, null],
[0, "유도", null, 0, null, 25, 23, 26, 0, 160, 300, null, null],
[0, "유파", null, 0, null, 29, 22, 75, 0, 160, 300, null, null],
[0, "유반", null, 0, null, 69, 76, 47, 0, 160, 300, null, null],
[0, "유비", null, 0, null, 88, 78, 59, 0, 160, 300, null, null],
[0, "유표", null, 0, null, 48, 31, 72, 0, 160, 300, null, null],
[0, "유복", null, 0, null, 64, 49, 74, 0, 160, 300, null, null],
[0, "유벽", null, 0, null, 70, 72, 47, 0, 160, 300, null, null],
[0, "유봉", null, 0, null, 75, 79, 44, 0, 160, 300, null, null],
[0, "유엽", null, 0, null, 56, 32, 92, 0, 160, 300, null, null],
[0, "유요", null, 0, null, 62, 67, 46, 0, 160, 300, null, null],
[0, "여위황", null, 0, null, 58, 63, 29, 0, 160, 300, null, null],
[0, "요화", null, 0, null, 73, 76, 54, 0, 160, 300, null, null],
[0, "양흥", null, 0, null, 61, 65, 19, 0, 160, 300, null, null],
[0, "양습", null, 0, null, 73, 40, 74, 0, 160, 300, null, null],
[0, "양서", null, 0, null, 56, 62, 66, 0, 160, 300, null, null],
[0, "능조", null, 0, null, 75, 81, 42, 0, 160, 300, null, null],
[0, "능통", null, 0, null, 83, 89, 60, 0, 160, 300, null, null],
[0, "여개", null, 0, null, 53, 30, 67, 0, 160, 300, null, null],
[0, "여건", null, 0, null, 57, 70, 62, 0, 160, 300, null, null],
[0, "여광", null, 0, null, 56, 70, 13, 0, 160, 300, null, null],
[0, "여상", null, 0, null, 54, 71, 12, 0, 160, 300, null, null],
[0, "여대", null, 0, null, 80, 71, 52, 0, 160, 300, null, null],
[0, "여범", null, 0, null, 73, 54, 75, 0, 160, 300, null, null],
[0, "여포", null, 0, null, 89, 100, 42, 0, 160, 300, null, null],
[0, "여몽", null, 0, null, 91, 69, 90, 0, 160, 300, null, null],
[0, "윤직", null, 0, null, 46, 42, 73, 0, 160, 300, null, null],
[0, "냉포", null, 0, null, 71, 82, 61, 0, 160, 300, null, null],
[0, "누규", null, 0, null, 52, 13, 87, 0, 160, 300, null, null],
[0, "노숙", null, 0, null, 89, 56, 93, 0, 160, 300, null, null],
[0, "노식", null, 0, null, 86, 63, 82, 0, 160, 300, null, null],
[0, "범강", null, 0, null, 49, 50, 36, 0, 160, 300, null, null],
[0, "장달", null, 0, null, 43, 56, 34, 0, 160, 300, null, null],
[0, "규람", null, 0, null, 55, 70, 58, 0, 160, 300, null, null],
[0, "대원", null, 0, null, 38, 32, 68, 0, 160, 300, null, null],
[0, "왕기", null, 0, null, 81, 64, 86, 0, 160, 300, null, null],
[0, "왕상", null, 0, null, 23, 19, 68, 0, 160, 300, null, null],
[0, "왕돈", null, 0, null, 60, 66, 46, 0, 160, 300, null, null],
[0, "악침", null, 0, null, 73, 75, 43, 0, 160, 300, null, null],
[0, "하제", null, 0, null, 83, 61, 82, 0, 160, 300, null, null],
[0, "환범", null, 0, null, 40, 11, 78, 0, 160, 300, null, null],
[0, "견초", null, 0, null, 72, 79, 57, 0, 160, 300, null, null],
[0, "고당륭", null, 0, null, 35, 24, 76, 0, 160, 300, null, null],
[0, "오찬", null, 0, null, 68, 41, 78, 0, 160, 300, null, null],
[0, "호질", null, 0, null, 73, 46, 74, 0, 160, 300, null, null],
[0, "오질", null, 0, null, 16, 29, 68, 0, 160, 300, null, null],
[0, "호준", null, 0, null, 79, 76, 55, 0, 160, 300, null, null],
[0, "고담", null, 0, null, 53, 23, 77, 0, 160, 300, null, null],
[0, "최림", null, 0, null, 32, 22, 66, 0, 160, 300, null, null],
[0, "사마망", null, 0, null, 78, 58, 83, 0, 160, 300, null, null],
[0, "주이", null, 0, null, 70, 73, 52, 0, 160, 300, null, null],
[0, "전단", null, 0, null, 67, 64, 39, 0, 160, 300, null, null],
[0, "조우", null, 0, null, 50, 43, 37, 0, 160, 300, null, null],
[0, "조상", null, 0, null, 39, 33, 30, 0, 160, 300, null, null],
[0, "조방", null, 0, null, 20, 14, 27, 0, 160, 300, null, null],
[0, "태사향", null, 0, null, 57, 66, 48, 0, 160, 300, null, null],
[0, "장휴", null, 0, null, 63, 27, 74, 0, 160, 300, null, null],
[0, "장호", null, 0, null, 75, 74, 51, 0, 160, 300, null, null],
[0, "조광", null, 0, null, 67, 71, 53, 0, 160, 300, null, null],
[0, "장집", null, 0, null, 76, 29, 80, 0, 160, 300, null, null],
[0, "장승", null, 0, null, 77, 55, 75, 0, 160, 300, null, null],
[0, "장소2", null, 0, null, 23, 56, 31, 0, 160, 300, null, null],
[0, "조통", null, 0, null, 68, 67, 46, 0, 160, 300, null, null],
[0, "진표", null, 0, null, 66, 42, 74, 0, 160, 300, null, null],
[0, "정무", null, 0, null, 56, 35, 75, 0, 160, 300, null, null],
[0, "정봉2", null, 0, null, 66, 66, 46, 0, 160, 300, null, null],
[0, "전만", null, 0, null, 51, 73, 39, 0, 160, 300, null, null],
[0, "마균", null, 0, null, 22, 17, 71, 0, 160, 300, null, null],
[0, "방회", null, 0, null, 69, 75, 49, 0, 160, 300, null, null],
[0, "낙통", null, 0, null, 76, 58, 75, 0, 160, 300, null, null],
[0, "육개", null, 0, null, 65, 61, 79, 0, 160, 300, null, null],
[0, "유찬", null, 0, null, 78, 81, 59, 0, 160, 300, null, null],
[0, "유소", null, 0, null, 68, 53, 74, 0, 160, 300, null, null],
[0, "요립", null, 0, null, 32, 15, 76, 0, 160, 300, null, null],
[0, "여거", null, 0, null, 78, 51, 71, 0, 160, 300, null, null],
[0, "제갈첨", null, 0, null, 70, 57, 76, 0, 160, 300, null, null],
[0, "손휴", null, 0, null, 57, 42, 78, 0, 160, 300, null, null],
[0, "극정", null, 0, null, 42, 23, 68, 0, 160, 300, null, null],
[0, "호분", null, 0, null, 71, 76, 50, 0, 160, 300, null, null],
[0, "손량", null, 0, null, 32, 26, 70, 0, 160, 300, null, null],
[0, "마막", null, 0, null, 34, 12, 44, 0, 160, 300, null, null],
[0, "손호", null, 0, null, 41, 73, 71, 0, 160, 300, null, null],
[0, "조모", null, 0, null, 54, 61, 59, 0, 160, 300, null, null],
[0, "조환", null, 0, null, 30, 28, 30, 0, 160, 300, null, null],
[0, "사마유", null, 0, null, 71, 54, 75, 0, 160, 300, null, null],
[0, "제갈상", null, 0, null, 64, 79, 62, 0, 160, 300, null, null],
[0, "손화", null, 0, null, 31, 39, 68, 0, 160, 300, null, null],
[0, "염우", null, 0, null, 52, 61, 51, 0, 160, 300, null, null],
[0, "왕경", null, 0, null, 67, 49, 71, 0, 160, 300, null, null],
[0, "왕혼", null, 0, null, 74, 71, 50, 0, 160, 300, null, null],
[0, "곽혁", null, 0, null, 33, 29, 70, 0, 160, 300, null, null],
[0, "가범", null, 0, null, 60, 50, 73, 0, 160, 300, null, null],
[0, "서질", null, 0, null, 68, 83, 24, 0, 160, 300, null, null],
[0, "손준", null, 0, null, 64, 70, 48, 0, 160, 300, null, null],
[0, "손침", null, 0, null, 58, 55, 65, 0, 160, 300, null, null],
[0, "우사", null, 0, null, 61, 34, 74, 0, 160, 300, null, null],
[0, "진건", null, 0, null, 72, 71, 50, 0, 160, 300, null, null],
[0, "동궐", null, 0, null, 65, 59, 76, 0, 160, 300, null, null],
[0, "당자", null, 0, null, 61, 71, 50, 0, 160, 300, null, null],
[0, "등충", null, 0, null, 76, 80, 59, 0, 160, 300, null, null],
[0, "황숭", null, 0, null, 67, 50, 72, 0, 160, 300, null, null],
[0, "화핵", null, 0, null, 20, 24, 71, 0, 160, 300, null, null],
[0, "허의", null, 0, null, 51, 74, 15, 0, 160, 300, null, null],
[0, "송겸", null, 0, null, 66, 78, 42, 0, 160, 300, null, null],
[0, "호제", null, 0, null, 57, 39, 68, 0, 160, 300, null, null],
[0, "나헌", null, 0, null, 86, 62, 82, 0, 160, 300, null, null],
[0, "노숙2", null, 0, null, 73, 53, 74, 0, 160, 300, null, null],
[0, "구성", null, 0, null, 63, 70, 38, 0, 160, 300, null, null],
[0, "어부라", null, 0, null, 72, 68, 21, 0, 160, 300, null, null],
[0, "아하소과", null, 0, null, 61, 76, 13, 0, 160, 300, null, null],
[0, "가비능", null, 0, null, 77, 69, 52, 0, 160, 300, null, null],
[0, "구력거", null, 0, null, 80, 68, 50, 0, 160, 300, null, null],
[0, "강단", null, 0, null, 65, 83, 48, 0, 160, 300, null, null],
[0, "황란", null, 0, null, 63, 75, 44, 0, 160, 300, null, null],
[0, "호주천", null, 0, null, 70, 71, 40, 0, 160, 300, null, null],
[0, "종리목", null, 0, null, 84, 61, 82, 0, 160, 300, null, null],
[0, "제갈교", null, 0, null, 62, 27, 75, 0, 160, 300, null, null],
[0, "답돈", null, 0, null, 84, 82, 61, 0, 160, 300, null, null],
[0, "반임", null, 0, null, 66, 79, 38, 0, 160, 300, null, null],
[0, "보도근", null, 0, null, 64, 73, 50, 0, 160, 300, null, null],
[0, "미당대왕", null, 0, null, 59, 69, 21, 0, 160, 300, null, null],
[0, "유표2", null, 0, null, 73, 74, 48, 0, 160, 300, null, null],
[0, "루반", null, 0, null, 65, 76, 39, 0, 160, 300, null, null],
[0, "손관", null, 0, null, 72, 78, 51, 0, 160, 300, null, null],
[0, "곽석", null, 0, null, 59, 71, 48, 0, 160, 300, null, null],
[0, "주조", null, 0, null, 63, 68, 26, 0, 160, 300, null, null],
[0, "장거", null, 0, null, 79, 75, 56, 0, 160, 300, null, null],
[0, "장순", null, 0, null, 73, 81, 60, 0, 160, 300, null, null],
[0, "철리길", null, 0, null, 77, 70, 52, 0, 160, 300, null, null],
[0, "주삭", null, 0, null, 54, 60, 50, 0, 160, 300, null, null],
[0, "황월영", null, 0, null, 46, 33, 78, 0, 160, 300, null, null],
[0, "채염", null, 0, null, 42, 26, 82, 0, 160, 300, null, null],
[0, "소교", null, 0, null, 23, 15, 78, 0, 160, 300, null, null],
[0, "신헌영", null, 0, null, 65, 35, 90, 0, 160, 300, null, null],
[0, "손상향", null, 0, null, 72, 79, 55, 0, 160, 300, null, null],
[0, "대교", null, 0, null, 22, 30, 78, 0, 160, 300, null, null],
[0, "초선", null, 0, null, 12, 22, 71, 0, 160, 300, null, null],
[0, "교모", null, 0, null, 54, 45, 69, 0, 160, 300, null, null],
[0, "관구수", null, 0, null, 58, 62, 33, 0, 160, 300, null, null],
[0, "관구전", null, 0, null, 63, 47, 69, 0, 160, 300, null, null],
[0, "원유", null, 0, null, 56, 40, 73, 0, 160, 300, null, null],
[0, "왕광", null, 0, null, 65, 41, 61, 0, 160, 300, null, null],
[0, "신창", null, 0, null, 50, 26, 42, 0, 160, 300, null, null],
[0, "사마주", null, 0, null, 61, 40, 61, 0, 160, 300, null, null],
[0, "양제", null, 0, null, 67, 49, 71, 0, 160, 300, null, null],
[0, "성만", null, 0, null, 61, 68, 46, 0, 160, 300, null, null],
[0, "오연", null, 0, null, 66, 73, 42, 0, 160, 300, null, null],
[0, "맹충", null, 0, null, 47, 28, 72, 0, 160, 300, null, null],
[0, "잠혼", null, 0, null, 1, 1, 22, 0, 160, 300, null, null],
[0, "사정", null, 0, null, 64, 76, 34, 0, 160, 300, null, null],
[0, "심영", null, 0, null, 70, 77, 55, 0, 160, 300, null, null],
[0, "도준", null, 0, null, 65, 66, 46, 0, 160, 300, null, null],
[0, "만욱", null, 0, null, 21, 25, 71, 0, 160, 300, null, null],
[0, "오언", null, 0, null, 76, 81, 59, 0, 160, 300, null, null],
[0, "위막", null, 0, null, 57, 62, 59, 0, 160, 300, null, null],
[0, "시삭", null, 0, null, 38, 65, 47, 0, 160, 300, null, null],
[0, "전속", null, 0, null, 47, 60, 55, 0, 160, 300, null, null],
[0, "장화", null, 0, null, 36, 27, 78, 0, 160, 300, null, null],
[0, "오거", null, 0, null, 49, 61, 23, 0, 160, 300, null, null],
[0, "추정", null, 0, null, 70, 46, 66, 0, 160, 300, null, null],
[0, "장특", null, 0, null, 73, 54, 75, 0, 160, 300, null, null],
[0, "곽마", null, 0, null, 68, 71, 47, 0, 160, 300, null, null],
[0, "석포", null, 0, null, 69, 71, 49, 0, 160, 300, null, null],
[0, "견홍", null, 0, null, 70, 74, 53, 0, 160, 300, null, null],
[0, "한거자", null, 0, null, 51, 59, 51, 0, 160, 300, null, null],
[0, "휴원진", null, 0, null, 52, 68, 45, 0, 160, 300, null, null],
[0, "곽원", null, 0, null, 66, 73, 36, 0, 160, 300, null, null],
[0, "계옹", null, 0, null, 63, 52, 33, 0, 160, 300, null, null],
[0, "이부", null, 0, null, 31, 36, 74, 0, 160, 300, null, null],
[0, "왕업", null, 0, null, 33, 6, 35, 0, 160, 300, null, null],
[0, "좌혁", null, 0, null, 62, 66, 51, 0, 160, 300, null, null],
[0, "화타", null, 0, null, 57, 25, 73, 0, 160, 300, null, null],
[0, "사마휘", null, 0, null, 55, 26, 82, 0, 160, 300, null, null],
[0, "우길", null, 0, null, 23, 15, 90, 0, 160, 300, null, null],
[0, "헌제", null, 0, null, 22, 18, 68, 0, 160, 300, null, null],
[0, "백기", null, 0, null, 100, 88, 69, 0, 160, 300, null, null],
[0, "한신", null, 0, null, 100, 74, 95, 0, 160, 300, null, null],
[0, "악비", null, 0, null, 99, 91, 71, 0, 160, 300, null, null],
[0, "항적", null, 0, null, 99, 100, 65, 0, 160, 300, null, null],
[0, "악의", null, 0, null, 98, 75, 96, 0, 160, 300, null, null],
[0, "영정", null, 0, null, 97, 55, 92, 0, 160, 300, null, null],
[0, "강상", null, 0, null, 94, 49, 100, 0, 160, 300, null, null],
[0, "전단2", null, 0, null, 96, 75, 95, 0, 160, 300, null, null],
[0, "이목", null, 0, null, 96, 69, 88, 0, 160, 300, null, null],
[0, "염파", null, 0, null, 97, 96, 75, 0, 160, 300, null, null],
[0, "왕전", null, 0, null, 94, 64, 83, 0, 160, 300, null, null],
[0, "오기", null, 0, null, 94, 66, 95, 0, 160, 300, null, null],
[0, "곽거병", null, 0, null, 93, 92, 53, 0, 160, 300, null, null],
[0, "영포", null, 0, null, 82, 91, 54, 0, 160, 300, null, null],
[0, "이신", null, 0, null, 81, 88, 63, 0, 160, 300, null, null],
[0, "몽념", null, 0, null, 87, 86, 65, 0, 160, 300, null, null],
[0, "전기", null, 0, null, 80, 85, 44, 0, 160, 300, null, null],
[0, "극신", null, 0, null, 76, 83, 42, 0, 160, 300, null, null],
[0, "항연", null, 0, null, 89, 80, 61, 0, 160, 300, null, null],
[0, "인상여", null, 0, null, 69, 38, 96, 0, 160, 300, null, null],
[0, "장자방", null, 0, null, 72, 40, 100, 0, 160, 300, null, null],
[0, "관이오", null, 0, null, 85, 64, 99, 0, 160, 300, null, null],
[0, "손빈", null, 0, null, 83, 22, 98, 0, 160, 300, null, null],
[0, "소진", null, 0, null, 90, 47, 96, 0, 160, 300, null, null],
[0, "범증", null, 0, null, 68, 24, 94, 0, 160, 300, null, null],
[0, "장의2", null, 0, null, 75, 23, 93, 0, 160, 300, null, null],
[0, "공구", null, 0, null, 68, 70, 91, 0, 160, 300, null, null],
[0, "소하", null, 0, null, 56, 27, 97, 0, 160, 300, null, null],
[0, "한비", null, 0, null, 49, 18, 97, 0, 160, 300, null, null],
[0, "이사", null, 0, null, 48, 24, 95, 0, 160, 300, null, null],
[0, "전문", null, 0, null, 79, 67, 89, 0, 160, 300, null, null],
[0, "황헐", null, 0, null, 81, 68, 88, 0, 160, 300, null, null],
[0, "방난", null, 0, null, 88, 95, 66, 0, 160, 300, null, null],
[0, "개섭", null, 0, null, 43, 97, 54, 0, 160, 300, null, null],
[0, "형가", null, 0, null, 42, 89, 43, 0, 160, 300, null, null],
[0, "유방", null, 0, null, 90, 66, 85, 0, 160, 300, null, null],
[0, "하리", null, 0, null, 95, 95, 65, 0, 160, 300, null, null],
[0, "헹이", null, 0, null, 95, 62, 90, 0, 160, 300, null, null],
[0, "나나", null, 0, null, 91, 52, 93, 0, 160, 300, null, null],
[0, "장임2", null, 0, null, 90, 92, 55, 0, 160, 300, null, null],
[0, "하야미", null, 0, null, 92, 57, 92, 0, 160, 300, null, null],
[0, "이시리스", null, 0, null, 93, 59, 92, 0, 160, 300, null, null],
[0, "연채홍", null, 0, null, 91, 52, 91, 0, 160, 300, null, null],
[0, "임사영", null, 0, null, 40, 40, 40, 0, 160, 300, null, null],
[0, "장군보", null, 0, null, 90, 90, 53, 0, 160, 300, null, null],
[0, "크렌스", null, 0, null, 91, 91, 56, 0, 160, 300, null, null],
[0, "콘", null, 0, null, 91, 92, 56, 0, 160, 300, null, null],
[0, "리즈나", null, 0, null, 90, 56, 90, 0, 160, 300, null, null],
[0, "오티누스", null, 0, null, 92, 91, 56, 0, 160, 300, null, null],
[0, "네시", null, 0, null, 91, 57, 93, 0, 160, 300, null, null, "안 자고 싸우면 이겨요"],
[0, "시뉴카린", null, 0, null, 95, 90, 52, 0, 160, 300, null, null, "피리피리~"],
[0, "Hide_D", null, 0, null, 92, 60, 95, 0, 160, 300, null, null],
[0, "Pray", null, 0, null, 90, 92, 54, 0, 160, 300, null, null],
[0, "사스케", null, 0, null, 91, 94, 54, 0, 160, 300, null, null],
[0, "SARS", null, 0, null, 91, 61, 92, 0, 160, 300, null, null],
[0, "마요이", null, 0, null, 92, 53, 93, 0, 160, 300, null, null, "로열방 없습니다"],
[0, "세정", null, 0, null, 90, 92, 60, 0, 160, 300, null, null],
[0, "김나영", null, 0, null, 93, 90, 60, 0, 160, 300, null, null],
[0, "독구", null, 0, null, 95, 91, 62, 0, 160, 300, null, null, "웃자 ^-^"],
[0, "천괴금", null, 0, null, 33, 66, 99, 0, 160, 300, null, null],
[0, "관지평", null, 0, null, 90, 91, 52, 0, 160, 300, null, null, "농장팬티강도소녀!"],
[0, "모니카", null, 0, null, 90, 60, 93, 0, 160, 300, null, null, "론조.."],
[0, "카리야", null, 0, null, 93, 58, 95, 0, 160, 300, null, null, "깡!"],
[0, "rwitch", null, 0, null, 90, 52, 90, 0, 160, 300, null, null],
[0, "카류", null, 0, null, 92, 53, 92, 0, 160, 300, null, null],
[0, "갈근", null, 0, null, 94, 54, 94, 0, 160, 300, null, null],
[0, "페이트", null, 0, null, 92, 59, 90, 0, 160, 300, null, null],
[0, "앵벌스", null, 0, null, 94, 91, 57, 0, 160, 300, null, null, "다람쥐는 위대하고 그 외에 다른 설치류는 없다"],
[0, "조밧", null, 0, null, 91, 93, 53, 0, 160, 300, null, null],
[0, "슬라임", null, 0, null, 90, 56, 93, 0, 160, 300, null, null],
[0, "제노에이지", null, 0, null, 93, 61, 93, 0, 160, 300, null, null],
[0, "평민킬러", null, 0, null, 95, 92, 55, 0, 160, 300, null, null],
[0, "아유", null, 0, null, 91, 54, 92, 0, 160, 300, null, null],
[0, "로리", null, 0, null, 92, 55, 92, 0, 160, 300, null, null],
[0, "n아텐 누", null, 0, null, 92, 55, 92, 0, 160, 300, null, null],
[0, "Card", null, 0, null, 91, 90, 59, 0, 160, 300, null, null],
[0, "Per", null, 0, null, 93, 57, 90, 0, 160, 300, null, null],
[0, "아쉐리트", null, 0, null, 94, 55, 90, 0, 160, 300, null, null],
[0, "외심장", null, 0, null, 91, 57, 92, 0, 160, 300, null, null],
[0, "카이스트", null, 0, null, 91, 53, 93, 0, 160, 300, null, null],
[0, "아키라", null, 0, null, 80, 50, 80, 0, 160, 300, null, null, "뻐끔뻐끔"],
[0, "카오스피닉스", null, 0, null, 93, 58, 92, 0, 160, 300, null, null, "=ㅁ="],
[0, "민트토끼", null, 0, null, 92, 54, 90, 0, 160, 300, null, null, "나 바보 아니다!"],
[0, "くま", null, 0, null, 90, 92, 57, 0, 160, 300, null, null],
[0, "북오더", null, 0, null, 91, 58, 92, 0, 160, 300, null, null],
[0, "이쓰미", null, 0, null, 92, 58, 91, 0, 160, 300, null, null],
[0, "개미호랑이", null, 0, null, 91, 55, 92, 0, 160, 300, null, null],
[0, "수장", null, 0, null, 93, 57, 91, 0, 160, 300, null, null],
[0, "이드", null, 0, null, 92, 93, 53, 0, 160, 300, null, null],
[0, "호무새", null, 0, null, 91, 53, 91, 0, 160, 300, null, null, "호우~"],
[0, "박일아", null, 0, null, 93, 59, 93, 0, 160, 300, null, null],
[0, "유기체", null, 0, null, 92, 56, 95, 0, 160, 300, null, null, "흠... 그렇다면 어쩔 수 없이 흉노로 가야겠군요..."],
[0, "황약사", null, 0, null, 92, 92, 60, 0, 160, 300, null, null],
[0, "하후연묘재", null, 0, null, 92, 52, 95, 0, 160, 300, null, null],
[0, "초절정미녀", null, 0, null, 95, 65, 95, 0, 160, 300, null, null],
[0, "제갈여포", null, 0, null, 92, 54, 91, 0, 160, 300, null, null],
[0, "온몸이근육", null, 0, null, 93, 93, 52, 0, 160, 300, null, null, "불끈불끈"],
[0, "네이미", null, 0, null, 91, 93, 56, 0, 160, 300, null, null],
[0, "ARES군주", null, 0, null, 90, 93, 55, 0, 160, 300, null, null],
[0, "중달", null, 0, null, 93, 92, 56, 0, 160, 300, null, null],
[0, "쿠레나이", null, 0, null, 90, 52, 90, 0, 160, 300, null, null],
[0, "만샘", null, 0, null, 92, 55, 92, 0, 160, 300, null, null],
[0, "우돌", null, 0, null, 93, 91, 53, 0, 160, 300, null, null],
[0, "아이린", null, 0, null, 93, 54, 90, 0, 160, 300, null, null],
[0, "유카", null, 0, null, 91, 92, 57, 0, 160, 300, null, null],
[0, "기", null, 0, null, 95, 90, 52, 0, 160, 300, null, null],
[0, "병리학적자세", null, 0, null, 91, 55, 93, 0, 160, 300, null, null],
[0, "료우기시키", null, 0, null, 92, 90, 53, 0, 160, 300, null, null],
[0, "Cure", null, 0, null, 92, 92, 55, 0, 160, 300, null, null],
[0, "40장로", null, 0, null, 85, 85, 85, 0, 160, 300, null, null]
],
"initialEvents":[
[
true,
["ChangeCity", "all", {
"trade":100
}]
]
],
"events":[
[
"month", 1000,
["Date", "==", 180, 1],
["ChangeCity", "all", {
"trade":100
}],
["DeleteEvent"]
],
[
"month", 1000,
["Date", "==", 180, 7],
["ChangeCity", "all", {
"trade":100
}],
["DeleteEvent"]
],
[
"month", 1000,
["Date", "==", 181, 1],
["ChangeCity", "all", {
"trade":100
}],
["DeleteEvent"]
],
[
"month", 1000,
["Date", "==", 181, 7],
["ChangeCity", "all", {
"trade":100
}],
["DeleteEvent"]
],
[
"month", 1000,
["Date", "==", 182, 1],
["ChangeCity", "all", {
"trade":100
}],
["DeleteEvent"]
],
[
"month", 1000,
["Date", "==", 182, 7],
["ChangeCity", "all", {
"trade":100
}],
["DeleteEvent"]
],
[
"destroy_nation", 1000,
["and",
["Date", ">=", 183, 1],
["RemainNation", "==", 1]
],
["BlockScoutAction"],
["DeleteEvent"]
]
]
}
+103 -757
View File
@@ -1,27 +1,19 @@
{
"title": "【이벤트】 대리전",
"startYear": 180,
"map": {
"mapName": "miniche_b"
"title":"【이벤트】 대리전",
"startYear":180,
"map":{
"mapName":"miniche_b"
},
"history": [
"history":[
"<C>●</>180년 1월:<L><b>【이벤트】</b></>NPC 군주 뒤에 플레이해보는 이벤트 깃수"
],
"const": {
"joinRuinedNPCProp": 0,
"npcBanMessageProb": 1,
"joinRuinedNPCProp":0,
"npcBanMessageProb":1,
"availableGeneralCommand": {
"개인": [
"": [
"휴식",
"che_요양",
"che_단련",
"che_숙련전환",
"che_견문",
"che_은퇴",
"che_장비매매",
"che_군량매매",
"che_내정특기초기화",
"che_전투특기초기화"
"che_요양"
],
"내정": [
"che_농지개간",
@@ -35,29 +27,36 @@
"che_물자조달"
],
"군사": [
"che_소집해제",
"che_첩보",
"che_징병",
"che_모병",
"che_훈련",
"che_사기진작",
"che_출병",
"che_집합",
"che_소집해제",
"che_첩보"
"che_출병"
],
"인사": [
"che_이동",
"che_강행",
"che_인재탐색",
"che_집합",
"che_귀환",
"che_랜덤임관"
],
"계략": [
"che_선동",
"che_탈취",
"che_화계",
"che_파괴",
"che_화계"
"che_탈취",
"che_선동"
],
"국가": [
"개인": [
"che_내정특기초기화",
"che_전투특기초기화",
"che_단련",
"che_숙련전환",
"che_견문",
"che_장비매매",
"che_군량매매",
"che_증여",
"che_헌납",
"che_하야"
@@ -94,755 +93,102 @@
]
}
},
"nation": [
[
"엄백호",
"#800080",
10000,
10000,
"엄백호",
500,
"che_덕가",
1,
[
"건안"
]
],
[
"맹획",
"#A0522D",
10000,
10000,
"맹획",
500,
"che_덕가",
1,
[
"월수"
]
],
[
"유표",
"#E0FFFF",
10000,
10000,
"유표",
500,
"che_도가",
1,
[
"영릉"
]
],
[
"올돌골",
"#800000",
10000,
10000,
"올돌골",
500,
"che_도적",
1,
[
"남해"
]
],
[
"동탁",
"#A9A9A9",
10000,
10000,
"동탁",
500,
"che_도적",
1,
[
"안정"
]
],
[
"유비",
"#008000",
10000,
10000,
"유비",
500,
"che_명가",
1,
[
"평원"
]
],
[
"유기",
"#008080",
10000,
10000,
"유기",
500,
"che_명가",
1,
[
"강하"
]
],
[
"유장",
"#483D8B",
10000,
10000,
"유장",
500,
"che_묵가",
1,
[
"덕양"
]
],
[
"조조",
"#000080",
10000,
10000,
"조조",
500,
"che_법가",
1,
[
"진류"
]
],
[
"원소",
"#FF00FF",
10000,
10000,
"원소",
500,
"che_병가",
1,
[
"거록"
]
],
[
"공손찬",
"#87CEEB",
10000,
10000,
"공손찬",
500,
"che_병가",
1,
[
"계"
]
],
[
"신라",
"#FFA500",
10000,
10000,
"신라",
500,
"che_불가",
1,
[
"계림"
]
],
[
"고구려",
"#FF6347",
10000,
10000,
"고구려",
500,
"che_불가",
1,
[
"국내"
]
],
[
"장로",
"#20B2AA",
10000,
10000,
"장로",
500,
"che_오두미도",
1,
[
"상용"
]
],
[
"도겸",
"#00FF00",
10000,
10000,
"도겸",
500,
"che_오두미도",
1,
[
"하비"
]
],
[
"손권",
"#FF0000",
10000,
10000,
"손권",
500,
"che_유가",
1,
[
"오"
]
],
[
"헌제",
"#BA55D3",
10000,
10000,
"헌제",
500,
"che_유가",
1,
[
"홍농"
]
],
[
"원술",
"#FFC0CB",
10000,
10000,
"원술",
500,
"che_음양가",
1,
[
"여남"
]
],
[
"마등",
"#808000",
10000,
10000,
"마등",
500,
"che_종횡가",
1,
[
"무도"
]
],
[
"목록대왕",
"#7CFC00",
10000,
10000,
"목록대왕",
500,
"che_종횡가",
1,
[
"건녕"
]
],
[
"장량",
"#FFD700",
10000,
10000,
"장량",
500,
"che_태평도",
1,
[
"하내"
]
]
"nation":[
["엄백호", "#800080", 10000, 10000, "엄백호", 500, "che_덕가", 1, ["건안"]],
["맹획", "#A0522D", 10000, 10000, "맹획", 500, "che_덕가", 1, ["월수"]],
["유표", "#E0FFFF", 10000, 10000, "유표", 500, "che_도가", 1, ["영릉"]],
["올돌골", "#800000", 10000, 10000, "올돌골", 500, "che_도적", 1, ["남해"]],
["동탁", "#A9A9A9", 10000, 10000, "동탁", 500, "che_도적", 1, ["안정"]],
["유비", "#008000", 10000, 10000, "유비", 500, "che_명가", 1, ["평원"]],
["유기", "#008080", 10000, 10000, "유기", 500, "che_명가", 1, ["강하"]],
["유장", "#483D8B", 10000, 10000, "유장", 500, "che_묵가", 1, ["덕양"]],
["조조", "#000080", 10000, 10000, "조조", 500, "che_법가", 1, ["진류"]],
["원소", "#FF00FF", 10000, 10000, "원소", 500, "che_병가", 1, ["거록"]],
["공손찬", "#87CEEB", 10000, 10000, "공손찬", 500, "che_병가", 1, ["계"]],
["신라", "#FFA500", 10000, 10000, "신라", 500, "che_불가", 1, ["계림"]],
["고구려", "#FF6347", 10000, 10000, "고구려", 500, "che_불가", 1, ["국내"]],
["장로", "#20B2AA", 10000, 10000, "장로", 500, "che_오두미도", 1, ["상용"]],
["도겸", "#00FF00", 10000, 10000, "도겸", 500, "che_오두미도", 1, ["하비"]],
["손권", "#FF0000", 10000, 10000, "손권", 500, "che_유가", 1, ["오"]],
["헌제", "#BA55D3", 10000, 10000, "헌제", 500, "che_유가", 1, ["홍농"]],
["원술", "#FFC0CB", 10000, 10000, "원술", 500, "che_음양가", 1, ["여남"]],
["마등", "#808000", 10000, 10000, "마등", 500, "che_종횡가", 1, ["무도"]],
["목록대왕", "#7CFC00", 10000, 10000, "목록대왕", 500, "che_종횡가", 1, ["건녕"]],
["장량", "#FFD700", 10000, 10000, "장량", 500, "che_태평도", 1, ["하내"]]
],
"general": [
[
999,
"엄백호",
1217,
1,
null,
85,
85,
85,
12,
150,
250,
null,
null
],
[
999,
"맹획",
1108,
2,
null,
85,
85,
85,
12,
150,
250,
null,
null
],
[
999,
"유표",
1293,
3,
null,
85,
85,
85,
12,
150,
250,
null,
null
],
[
999,
"올돌골",
1241,
4,
null,
85,
85,
85,
12,
150,
250,
null,
null
],
[
999,
"동탁",
1083,
5,
null,
85,
85,
85,
12,
150,
250,
null,
null
],
[
999,
"유비",
1281,
6,
null,
85,
85,
85,
12,
150,
250,
null,
null
],
[
999,
"유기",
1276,
7,
null,
85,
85,
85,
12,
150,
250,
null,
null
],
[
999,
"유장",
1290,
8,
null,
85,
85,
85,
12,
150,
250,
null,
null
],
[
999,
"조조",
1392,
9,
null,
85,
85,
85,
12,
150,
250,
null,
null
],
[
999,
"원소",
1268,
10,
null,
85,
85,
85,
12,
150,
250,
null,
null
],
[
999,
"공손찬",
1033,
11,
null,
85,
85,
85,
12,
150,
250,
null,
null
],
[
999,
"석벌휴",
null,
12,
null,
85,
85,
85,
12,
150,
250,
null,
null
],
[
999,
"고남무",
null,
13,
null,
85,
85,
85,
12,
150,
250,
null,
null
],
[
999,
"장로",
1319,
14,
null,
85,
85,
85,
12,
150,
250,
null,
null
],
[
999,
"도겸",
1074,
15,
null,
85,
85,
85,
12,
150,
250,
null,
null
],
[
999,
"손권",
1169,
16,
null,
85,
85,
85,
12,
150,
250,
null,
null
],
[
999,
"헌제",
1002,
17,
null,
85,
85,
85,
12,
150,
250,
null,
null
],
[
999,
"원술",
1269,
18,
null,
85,
85,
85,
12,
150,
250,
null,
null
],
[
999,
"마등",
1094,
19,
null,
85,
85,
85,
12,
150,
250,
null,
null
],
[
999,
"목록대왕",
1110,
20,
null,
85,
85,
85,
12,
150,
250,
null,
null
],
[
999,
"장량",
1318,
21,
null,
85,
85,
85,
12,
150,
250,
null,
null
]
"general":[
[999, "엄백호", 1217, 1, null, 85, 85, 85, 12, 150, 250, null, null],
[999, "맹획", 1108, 2, null, 85, 85, 85, 12, 150, 250, null, null],
[999, "유표", 1293, 3, null, 85, 85, 85, 12, 150, 250, null, null],
[999, "올돌골", 1241, 4, null, 85, 85, 85, 12, 150, 250, null, null],
[999, "동탁", 1083, 5, null, 85, 85, 85, 12, 150, 250, null, null],
[999, "유비", 1281, 6, null, 85, 85, 85, 12, 150, 250, null, null],
[999, "유기", 1276, 7, null, 85, 85, 85, 12, 150, 250, null, null],
[999, "유장", 1290, 8, null, 85, 85, 85, 12, 150, 250, null, null],
[999, "조조", 1392, 9, null, 85, 85, 85, 12, 150, 250, null, null],
[999, "원소", 1268, 10, null, 85, 85, 85, 12, 150, 250, null, null],
[999, "공손찬", 1033, 11, null, 85, 85, 85, 12, 150, 250, null, null],
[999, "석벌휴", null, 12, null, 85, 85, 85, 12, 150, 250, null, null],
[999, "고남무", null, 13, null, 85, 85, 85, 12, 150, 250, null, null],
[999, "장로", 1319, 14, null, 85, 85, 85, 12, 150, 250, null, null],
[999, "도겸", 1074, 15, null, 85, 85, 85, 12, 150, 250, null, null],
[999, "손권", 1169, 16, null, 85, 85, 85, 12, 150, 250, null, null],
[999, "헌제", 1002, 17, null, 85, 85, 85, 12, 150, 250, null, null],
[999, "원술", 1269, 18, null, 85, 85, 85, 12, 150, 250, null, null],
[999, "마등", 1094, 19, null, 85, 85, 85, 12, 150, 250, null, null],
[999, "목록대왕", 1110, 20, null, 85, 85, 85, 12, 150, 250, null, null],
[999, "장량", 1318, 21, null, 85, 85, 85, 12, 150, 250, null, null]
],
"events": [
"events":[
[
"month",
1000,
[
"or",
[
"Date",
"==",
null,
12
],
[
"Date",
"==",
null,
6
]
],
[
"CreateManyNPC",
10,
10
],
[
"DeleteEvent"
]
"month", 1000,
["or", ["Date", "==", null, 12], ["Date", "==", null, 6]],
["CreateManyNPC", 10, 10],
["DeleteEvent"]
],
[
"month",
1000,
[
"Date",
"==",
181,
1
],
[
"OpenNationBetting",
4,
1000
],
[
"OpenNationBetting",
1,
1000
],
[
"DeleteEvent"
]
"month", 1000,
["Date", "==", 181, 1],
["OpenNationBetting", 4, 1000],
["OpenNationBetting", 1, 1000],
["DeleteEvent"]
],
[
"month",
1000,
[
"and",
[
"Date",
">=",
183,
1
],
[
"RemainNation",
"<=",
16
]
"month", 1000,
["and",
["Date", ">=", 183, 1],
["RemainNation", "<=", 16]
],
[
"OpenNationBetting",
4,
1000
],
[
"OpenNationBetting",
1,
1000
],
[
"DeleteEvent"
]
["OpenNationBetting", 4, 1000],
["OpenNationBetting", 1, 1000],
["DeleteEvent"]
],
[
"month",
1000,
[
"and",
[
"Date",
">=",
183,
1
],
[
"RemainNation",
"<=",
8
]
"month", 1000,
["and",
["Date", ">=", 183, 1],
["RemainNation", "<=", 8]
],
[
"OpenNationBetting",
1,
1000
],
[
"DeleteEvent"
]
["OpenNationBetting", 1, 1000],
["DeleteEvent"]
],
[
"month",
1000,
[
"and",
[
"Date",
">=",
183,
1
],
[
"RemainNation",
"<=",
4
]
"month", 1000,
["and",
["Date", ">=", 183, 1],
["RemainNation", "<=", 4]
],
[
"OpenNationBetting",
1,
1000
],
[
"DeleteEvent"
]
["OpenNationBetting", 1, 1000],
["DeleteEvent"]
],
[
"destroy_nation",
1000,
[
"and",
[
"Date",
">=",
183,
1
],
[
"RemainNation",
"==",
1
]
"destroy_nation", 1000,
["and",
["Date", ">=", 183, 1],
["RemainNation", "==", 1]
],
[
"BlockScoutAction"
],
[
"DeleteEvent"
]
["BlockScoutAction"],
["DeleteEvent"]
]
]
}
+5 -9
View File
@@ -31,16 +31,11 @@ $modcolor2: color.adjust($nbase2color, $lightness: -5%);
line-height: 30px;
}
.time_pad.inverted{
background-color: gray;
color: white;
}
.turn_pad {
line-height: 30px;
}
.row:nth-of-type(odd) .turn_pad {
.row:nth-child(odd) .turn_pad {
background-color: $modcolor2;
}
}
@@ -88,7 +83,7 @@ $modcolor2: color.adjust($nbase2color, $lightness: -5%);
}
.commandBox .controlPad {
.turn_pad:nth-of-type(even) {
.turn_pad:nth-child(2n) {
background-color: $modcolor2;
}
}
@@ -114,6 +109,7 @@ $modcolor2: color.adjust($nbase2color, $lightness: -5%);
width: 500px;
height: 460px;
margin: auto;
overflow: hidden;
}
#mainTable {
@@ -135,7 +131,7 @@ $modcolor2: color.adjust($nbase2color, $lightness: -5%);
.commandBox .controlPad {
margin-top: 10px;
.turn_pad:nth-of-type(even) {
.turn_pad:nth-child(even) {
background-color: $modcolor2;
}
}
@@ -149,7 +145,7 @@ $modcolor2: color.adjust($nbase2color, $lightness: -5%);
overflow: hidden;
.turn_pad:nth-of-type(even) {
.turn_pad:nth-child(even) {
background-color: $modcolor2;
}
}
-28
View File
@@ -1,28 +0,0 @@
@import '@scss/common/bootstrap5.scss';
@import "@scss/game_bg.scss";
@import "@scss/util.scss";
#container{
padding: 0;
}
#app {
width: 100%;
}
@include media-1000px {
#container {
width: 1000px;
margin: 0 auto;
position: relative;
}
}
@include media-500px {
#container {
position: relative;
width: 500px;
margin: auto;
}
}
+2 -3
View File
@@ -1,7 +1,6 @@
<tr
data-is-our-general="<?=$ourGeneral?'true':'false'?>"
data-is-npc="<?=$isNPC?'true':'false'?>"
data-npc-type="<?=$npc?>"
data-general-wounded="<?=$wounded?>"
data-general-name="<?=$this->e($name)?>"
data-general-leadership="<?=$leadership?>"
@@ -34,7 +33,7 @@
<td><?=$train?></td>
<td><?=$atmos?></td>
<?php if($isNPC): ?>
<td>NPC 장수</td>
<td>NPC 장수</td>
<?php else: ?>
<td class="general_turn_text"><?=$turnText?></td>
<?php endif; ?>
@@ -50,5 +49,5 @@
<td>재 야</td>
<?php endif; ?>
<?php endif; ?>
</tr>
+1 -1
View File
@@ -10,7 +10,7 @@
<?=$btnBegin??''?><a href='b_tournament.php' target='_blank' class='open-window <?=$btnClassForTournament??""?>'>토 너 먼 트</a><?=$btnEnd??''?>
<?=$btnBegin??''?><a href='b_myKingdomInfo.php' class='commandButton <?=$btnClass??""?> <?= $meLevel >= 1 ? '' : 'disabled' ?>'>세력 정보</a><?=$btnEnd??''?>
<?=$btnBegin??''?><a href='b_myCityInfo.php' class='commandButton <?=$btnClass??""?> <?= ($meLevel >= 1 && $nationLevel >= 1) ? '' : 'disabled' ?>'>세력 도시</a><?=$btnEnd??''?>
<?=$btnBegin??''?><a href='v_nationGeneral.php' class='commandButton <?=$btnClass??""?> <?= $meLevel >= 1 ? '' : 'disabled' ?>'>세력 장수</a><?=$btnEnd??''?>
<?=$btnBegin??''?><a href='b_myGenInfo.php' class='commandButton <?=$btnClass??""?> <?= $meLevel >= 1 ? '' : 'disabled' ?>'>세력 장수</a><?=$btnEnd??''?>
<?=$btnBegin??''?><a href='b_diplomacy.php' class='commandButton <?=$btnClass??""?>'>중원 정보</a><?=$btnEnd??''?>
<?=$btnBegin??''?><a href='b_currentCity.php' class='commandButton <?=$btnClass??""?>'>현재 도시</a><?=$btnEnd??''?>
<?=$btnBegin??''?><a href='b_battleCenter.php' target='_blank' class='open-window commandButton <?=$btnClass??""?> <?= $showSecret ? '' : 'disabled' ?>'>감 찰 부</a><?=$btnEnd??''?>
-1
View File
@@ -22,7 +22,6 @@
<tr class='general_id_<?=$general['no']?>'
data-general-id="<?=$general['no']?>"
data-is-npc="<?=$general['npc']>=2?'true':'false'?>"
data-npc-type='<?=$general['npc']?>'
data-general-wounded="<?=$general['injury']?>"
data-general-name="<?=$general['name']?>"
data-general-leadership="<?=$general['leadership']?>"
+1 -1
View File
@@ -1,4 +1,4 @@
<div class="world_map map_theme_<?= $mapName ?> draw_required">
<div class="world_map map_theme_<?= $mapTheme ?> draw_required">
<div class="map_title obj_tooltip" data-bs-toggle="tooltip" data-bs-placement="top" data-tooltip-class="map_title_tooltiptext">
<span class="map_title_text ">
</span>
+11 -12
View File
@@ -1,8 +1,8 @@
<template>
<div
v-for="(officer, _idx) in [chiefList[chiefLevel]]"
:key="_idx"
:class="[`chiefBox${chiefLevel}`, 'subRows']"
v-for="(officer, idx) in [chiefList[chiefLevel]]"
:key="idx"
:style="style"
@click="$emit('click', this)"
>
@@ -13,22 +13,21 @@
textDecoration: isMe ? 'underline' : undefined,
}"
>
{{ officer ? officer?.name ?? "-" : "" }}
{{ officer?(officer?.name ?? "-"):'' }}
</div>
<div class="bg1 center row gx-0">
<div class="col">
{{ officer?.officerLevelText }}
</div>
<div class="col">
{{ officer ? (officer?.turnTime ?? " - ").slice(-5) : "" }}
</div>
<div class="col">{{ officer?.officerLevelText }}</div>
<div class="col">{{ officer?((officer?.turnTime ?? " - ").slice(-5)):'' }}</div>
</div>
<div
v-for="(turn, idx) in officer?.turn ?? []"
:key="idx"
class="tableCell align-self-center turn_pad"
v-for="(turn, idx) in officer?.turn??[]"
:key="idx"
:style="{
fontSize: mb_strwidth(turn.brief) > 28 ? `${28 / mb_strwidth(turn.brief)}em` : undefined,
fontSize:
mb_strwidth(turn.brief) > 28
? `${28 / mb_strwidth(turn.brief)}em`
: undefined,
}"
>
{{ turn.brief }}
+68 -158
View File
@@ -1,178 +1,88 @@
<template>
<div style="position: relative">
<DragSelect
v-slot="{ selected }"
:class="['subRows', 'chiefCommand']"
:style="style"
:disabled="!props.officer || !isEditMode"
attribute="turnIdx"
@dragStart="dragStart()"
@dragDone="dragDone(...$event)"
>
<div class="bg1 center row gx-0" style="font-size: 1.2em">
<div class="col-5 align-self-center text-end">
{{ officer ? `${officer.officerLevelText} : ` : "" }}
</div>
<div
class="col-7 align-self-center"
:style="{
color: getNpcColor(officer?.npcType ?? 0),
}"
>
{{ officer?.name }}
</div>
<div :class="['subRows', 'chiefCommand']" :style="style">
<div class="bg1 center row gx-0" style="font-size: 1.2em">
<div class="col-5 align-self-center text-end">
{{ officer ? `${officer.officerLevelText} : ` : "" }}
</div>
<div v-for="vidx in maxTurn" :key="vidx" :turnIdx="vidx" class="row c-bg2 gx-0">
<div
:class="[
'col-2',
'time_pad',
'f_tnum',
(isDragToggle || isCopyButtonShown) && selected.has(vidx.toString()) ? 'inverted' : undefined,
]"
>
{{ turnTimes[vidx - 1] }}
</div>
<div v-if="!officer || !officer.turn || !(vidx - 1 in officer.turn)" class="center" />
<div
v-else
class="tableCell align-self-center col-10 center turn_pad"
:style="{
fontSize:
mb_strwidth(officer.turn[vidx - 1].brief) > 28
? `${28 / mb_strwidth(officer.turn[vidx - 1].brief)}em`
: undefined,
}"
>
{{ officer.turn[vidx - 1].brief }}
</div>
<div
class="col-7 align-self-center"
:style="{
color: getNpcColor(officer?.npcType ?? 0),
}"
>
{{ officer?.name }}
</div>
</DragSelect>
<BButton
ref="btnCopy"
:style="{
position: 'absolute',
display: isCopyButtonShown ? 'block' : 'none',
top: `${btnPos * 30 + 25}px`,
right: '10px',
}"
@blur="isCopyButtonShown = false"
@click="tryCopy()"
>
복사하기
</BButton>
</div>
<div class="row c-bg2 gx-0" v-for="vidx in maxTurn" :key="vidx">
<div class="col-2 time_pad f_tnum">
{{ turnTimes[vidx - 1] }}
</div>
<div
class="center"
v-if="!officer || (!officer.turn) || !(vidx - 1 in officer.turn)"
></div>
<div
v-else
class="tableCell align-self-center col-10 center turn_pad"
:style="{
fontSize:
mb_strwidth(officer.turn[vidx - 1].brief) > 28
? `${28 / mb_strwidth(officer.turn[vidx - 1].brief)}em`
: undefined,
}"
>
{{ officer.turn[vidx - 1].brief }}
</div>
</div>
</div>
</template>
<script setup lang="ts">
<script lang="ts">
import { getNpcColor } from "@/common_legacy";
import { ChiefResponse } from "@/defs";
import { formatTime } from "@/util/formatTime";
import { mb_strwidth } from "@/util/mb_strwidth";
import { parseTime } from "@/util/parseTime";
import type { StoredActionsHelper } from "@/util/StoredActionsHelper";
import addMinutes from "date-fns/esm/addMinutes/index";
import { range } from "lodash";
import { inject, onMounted, ref, type PropType } from "vue";
import { defineComponent, PropType } from "vue";
import VueTypes from "vue-types";
import DragSelect from "@/components/DragSelect.vue";
import { BButton } from "bootstrap-vue-3";
import { QueryActionHelper } from "@/util/QueryActionHelper";
import type { ChiefResponse } from "@/defs/API/NationCommand";
const props = defineProps({
style: VueTypes.object.isRequired,
officer: {
type: Object as PropType<ChiefResponse["chiefList"][0]>,
default: undefined,
export default defineComponent({
props: {
style: VueTypes.object.isRequired,
officer: {
type: Object as PropType<ChiefResponse["chiefList"][0]>,
},
turnTerm: VueTypes.integer.isRequired,
maxTurn: VueTypes.integer.isRequired,
},
methods: {
getNpcColor,
mb_strwidth,
},
turnTerm: VueTypes.integer.isRequired,
maxTurn: VueTypes.integer.isRequired,
});
const btnPos = ref(0);
const btnCopy = ref<InstanceType<typeof BButton> | null>(null);
data() {
const turnTimes: string[] = [];
if (!this.officer || !this.officer.turnTime) {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
for (const _ of range(this.maxTurn)) {
turnTimes.push("\xa0");
}
} else {
const baseTurnTime = parseTime(this.officer.turnTime);
for (const idx of range(this.officer.turn.length)) {
turnTimes.push(
formatTime(
addMinutes(baseTurnTime, idx * this.turnTerm),
this.turnTerm >= 5 ? "HH:mm" : "mm:ss"
)
);
}
}
const storedActionsHelper = inject<StoredActionsHelper>("storedNationActionsHelper");
const isEditMode = storedActionsHelper?.isEditMode ?? ref(false);
const isDragToggle = ref(false);
const isCopyButtonShown = ref(false);
const queryActionHelper = new QueryActionHelper(props.maxTurn);
const selectedTurnList = queryActionHelper.selectedTurnList;
onMounted(() => {
if (props.officer === undefined) {
return;
}
queryActionHelper.reservedCommandList.value = props.officer.turn.map((rawTurn) => {
return {
...rawTurn,
time: "",
turnTimes,
};
});
console.log(queryActionHelper.reservedCommandList.value);
},
});
function dragStart() {
isDragToggle.value = true;
}
function eqSet<T>(as: Set<T>, bs: Set<T>) {
if (as.size !== bs.size) return false;
for (var a of as) if (!bs.has(a)) return false;
return true;
}
function dragDone(...rawSelectedTurn: string[]) {
if (rawSelectedTurn.length === 0) {
return;
}
const newSelectedTurnList = new Set<number>();
let maxPos = -1;
for (const rawIdx of rawSelectedTurn) {
const idx = parseInt(rawIdx) - 1;
newSelectedTurnList.add(idx);
maxPos = Math.max(maxPos, idx);
}
btnPos.value = maxPos;
isDragToggle.value = false;
if (newSelectedTurnList.size == 1 && eqSet(selectedTurnList.value, newSelectedTurnList)) {
isCopyButtonShown.value = false;
return;
}
selectedTurnList.value = newSelectedTurnList;
isCopyButtonShown.value = true;
setTimeout(() => {
(btnCopy.value?.$el as HTMLButtonElement).focus();
}, 0);
}
function tryCopy() {
const actions = queryActionHelper.extractQueryActions();
isCopyButtonShown.value = false;
if (!storedActionsHelper) {
return;
}
storedActionsHelper.clipboard.value = [...actions];
}
const turnTimes = ref<string[]>([]);
if (!props.officer || !props.officer.turnTime) {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
for (const _ of range(props.maxTurn)) {
turnTimes.value.push("\xa0");
}
} else {
const baseTurnTime = parseTime(props.officer.turnTime);
for (const idx of range(props.officer.turn.length)) {
turnTimes.value.push(
formatTime(addMinutes(baseTurnTime, idx * props.turnTerm), props.turnTerm >= 5 ? "HH:mm" : "mm:ss")
);
}
}
</script>
-49
View File
@@ -1,49 +0,0 @@
import { SammoAPI } from './SammoAPI';
import type { GetConstResponse } from './defs/API/Global';
import type { CityID, CrewTypeID, GameCityDefault, GameConstType, GameUnitType, GameIActionCategory, GameIActionKey, GameIActionInfo } from './defs/GameObj';
export class GameConstStore {
public readonly gameConst: GameConstType;
public readonly gameUnitConst: Record<CrewTypeID, GameUnitType>;
public readonly cityConst: Record<CityID, GameCityDefault>;
public readonly cityConstMap: {
region: Record<number | string, string | number>;
level: Record<number | string, string | number>; //defs.CityLevelText
};
public readonly iActionInfo: Record<
GameIActionCategory,
Record<
GameIActionKey,
GameIActionInfo
>
>;
public readonly iActionKeyMap: Record<string, GameIActionCategory>;
constructor(response: GetConstResponse) {
const data = response.data;
this.gameConst = Object.freeze(data.gameConst);
this.gameUnitConst = Object.freeze(data.gameUnitConst);
this.cityConst = Object.freeze(data.cityConst);
this.cityConstMap = Object.freeze(data.cityConstMap);
this.iActionInfo = Object.freeze(data.iActionInfo);
this.iActionKeyMap = Object.freeze(data.iActionKeyMap);
}
}
let gameConstStore: GameConstStore | undefined = undefined;
export async function getGameConstStore(): Promise<GameConstStore> {
//TODO: LocalStorage Cache 조합도 생각해보기.
if (gameConstStore !== undefined) {
return gameConstStore;
}
try {
const result = await SammoAPI.Global.GetConst();
gameConstStore = new GameConstStore(result);
}
catch (e: unknown) {
console.error(`FATAL!: GameConst를 가져오지 못함: ${e}`);
throw e;
}
return gameConstStore;
}
+57 -51
View File
@@ -7,23 +7,29 @@
<div class="row gx-0">
<div class="col-2 col-md-1 articleTitle bg1 center">제목</div>
<div class="col-10 col-md-11">
<input v-model="newArticle.title" class="titleInput" type="text" maxlength="250" placeholder="제목" />
<input
class="titleInput"
type="text"
maxlength="250"
placeholder="제목"
v-model="newArticle.title"
/>
</div>
</div>
<div class="row gx-0">
<div class="col-2 col-md-1 bg1 center">내용</div>
<div class="col-10 col-md-11">
<textarea
ref="newArticleTextForm"
v-model="newArticle.text"
class="contentInput autosize"
ref="newArticleTextForm"
placeholder="내용"
v-model="newArticle.text"
@input="autoResizeTextarea"
/>
</div>
</div>
<div class="row">
<div class="col-8 col-md-10" />
<div class="col-8 col-md-10"></div>
<div class="col-4 col-md-2 d-grid">
<b-button id="submitArticle" @click="submitArticle"> 등록 </b-button>
</div>
@@ -35,13 +41,13 @@
v-for="article in articles"
:key="article.no"
:article="article"
@submitComment="reloadArticles"
@submit-comment="reloadArticles"
/>
</template>
<template v-else> 게시물이 없습니다. </template>
</div>
<BottomBar />
<BottomBar/>
</div>
</template>
@@ -52,7 +58,7 @@ import BottomBar from "@/components/BottomBar.vue";
import BoardArticle from "@/components/BoardArticle.vue";
import { convertFormData } from "@util/convertFormData";
import axios from "axios";
import type { InvalidResponse } from "@/defs";
import { InvalidResponse } from "@/defs";
import { autoResizeTextarea } from "@util/autoResizeTextarea";
import { unwrap } from "@util/unwrap";
export type BoardResponse = {
@@ -97,49 +103,6 @@ export default defineComponent({
required: true,
},
},
setup(props) {
const newArticleTextForm = ref<HTMLInputElement>();
const articles = reactive<BoardArticleItem[]>([]);
const reloadArticles = async () => {
let boardResponse: BoardResponse;
try {
const response = await axios({
url: "j_board_get_articles.php",
responseType: "json",
method: "post",
data: convertFormData({
isSecret: props.isSecretBoard,
}),
});
const result: InvalidResponse | BoardResponse = response.data;
if (!result.result) {
throw result.reason;
}
boardResponse = result;
} catch (e) {
console.error(e);
alert(`에러: ${e}`);
return;
}
articles.length = 0;
articles.push(...Object.values(boardResponse.articles));
articles.reverse();
};
onMounted(async () => {
await reloadArticles();
});
return {
newArticleTextForm,
articles,
reloadArticles,
};
},
data() {
return {
title: this.isSecretBoard ? "기밀실" : "회의실",
@@ -187,5 +150,48 @@ export default defineComponent({
await this.reloadArticles();
},
},
setup(props) {
const newArticleTextForm = ref<HTMLInputElement>();
const articles = reactive<BoardArticleItem[]>([]);
const reloadArticles = async () => {
let boardResponse: BoardResponse;
try {
const response = await axios({
url: "j_board_get_articles.php",
responseType: "json",
method: "post",
data: convertFormData({
isSecret: props.isSecretBoard,
}),
});
const result: InvalidResponse | BoardResponse = response.data;
if (!result.result) {
throw result.reason;
}
boardResponse = result;
} catch (e) {
console.error(e);
alert(`에러: ${e}`);
return;
}
articles.length = 0;
articles.push(...Object.values(boardResponse.articles));
articles.reverse();
};
onMounted(async () => {
await reloadArticles();
});
return {
newArticleTextForm,
articles,
reloadArticles,
};
},
});
</script>
</script>
+413 -133
View File
@@ -2,12 +2,29 @@
<div id="container" class="pageChiefCenter">
<TopBackBar title="사령부" reloadable @reload="reloadTable" />
<div v-if="chiefList !== undefined" id="mainTable" :class="`${targetIsMe ? 'targetIsMe' : 'targetIsNotMe'}`">
<template v-for="(chiefLevel, vidx) in [12, 10, 8, 6, 11, 9, 7, 5]" :key="chiefLevel">
<div v-if="vidx % 4 == 0" :class="['turnIdx', vidx == 0 && !targetIsMe ? undefined : 'only1000px']">
<div
id="mainTable"
v-if="chiefList !== undefined"
:class="`${targetIsMe ? 'targetIsMe' : 'targetIsNotMe'}`"
>
<template
v-for="(chiefLevel, vidx) in [12, 10, 8, 6, 11, 9, 7, 5]"
:key="chiefLevel"
>
<div
v-if="vidx % 4 == 0"
:class="[
'turnIdx',
vidx == 0 && !targetIsMe ? undefined : 'only1000px',
]"
>
<div :class="['subRows', 'bg0']" :style="mainTableGridRows">
<div class="bg1">&nbsp;</div>
<div v-for="idx in maxChiefTurn" :key="idx" :class="[`turnIdxLeft`, 'align-self-center', 'center']">
<div
v-for="idx in maxChiefTurn"
:class="[`turnIdxLeft`, 'align-self-center', 'center']"
:key="idx"
>
{{ idx }}
</div>
</div>
@@ -24,27 +41,152 @@
:maxTurn="maxChiefTurn"
:turnTerm="turnTerm"
/>
<ChiefReservedCommand
v-else
:key="idx"
:targetIsMe="targetIsMe"
:year="year"
:month="month"
:turn="officer.turn"
:turnTerm="turnTerm"
:commandList="unwrap(commandList)"
:turnTime="officer.turnTime"
:maxTurn="maxChiefTurn"
:maxPushTurn="Math.floor(maxChiefTurn / 2)"
:date="date"
:officer="officer"
@raiseReload="reloadTable()"
/>
<div class="commandBox" v-else>
<div
class="only1000px bg1 center row gx-0"
style="height: 24px; font-size: 1.2em"
>
<div class="col-5 align-self-center text-end">
{{ officer.officerLevelText }} :
</div>
<div
class="col-7 align-self-center"
:style="{
color: getNpcColor(officer.npcType ?? 0),
}"
>
{{ officer.name }}
</div>
</div>
<div
:class="[
'row',
'controlPad',
chiefLevel == officerLevel ? 'targetIsMe' : 'targetIsNotMe',
]"
>
<div class="col-3 col-md-12 order-md-last">
<div class="d-grid mb-1 py-1 only500px bg1 center">
<div
:style="{
color: getNpcColor(officer.npcType ?? 0),
fontSize: '1.2em',
}"
>
{{ officer.name }}
</div>
<div>{{ officer.officerLevelText }}</div>
</div>
<div class="row gx-1 gy-1 py-1">
<div class="col-md-4 mx-0 mb-0 mt-1 d-grid">
<div
class="alert alert-primary mb-0 center"
style="padding: 0.5rem 0"
>
{{ serverNow }}
</div>
</div>
<b-dropdown class="col-md-4" left text="턴 선택">
<b-dropdown-item @click="selectNone()"
>해제</b-dropdown-item
>
<b-dropdown-item @click="selectAll(true)"
>모든턴</b-dropdown-item
>
<b-dropdown-item @click="selectStep(0, 2)"
>홀수턴</b-dropdown-item
>
<b-dropdown-item @click="selectStep(1, 2)"
>짝수턴</b-dropdown-item
>
<b-dropdown-divider></b-dropdown-divider>
<b-dropdown-text
v-for="spanIdx in [3, 4, 5, 6, 7]"
:key="spanIdx"
>
{{ spanIdx }} 간격<br />
<b-button-group>
<b-button
class="ignoreMe"
v-for="beginIdx in spanIdx"
:key="beginIdx"
@click="selectStep(beginIdx - 1, spanIdx)"
>{{ beginIdx }}</b-button
>
</b-button-group>
</b-dropdown-text>
</b-dropdown>
<b-dropdown class="col-md-4" text="반복">
<b-dropdown-item
v-for="turnIdx in maxPushTurn"
:key="turnIdx"
@click="repeatNationCommand(turnIdx)"
>{{ turnIdx }}
</b-dropdown-item>
</b-dropdown>
<b-dropdown
class="col-md-6"
split
text="당기기"
@click="pullNationCommandSingle"
>
<b-dropdown-item
v-for="turnIdx in maxPushTurn"
:key="turnIdx"
@click="pushNationCommand(-turnIdx)"
>{{ turnIdx }}
</b-dropdown-item>
</b-dropdown>
<b-dropdown
class="col-md-6"
split
text="미루기"
@click="pushNationCommandSingle"
>
<b-dropdown-item
v-for="turnIdx in maxPushTurn"
:key="turnIdx"
@click="pushNationCommand(turnIdx)"
>{{ turnIdx }}
</b-dropdown-item>
</b-dropdown>
</div>
</div>
<div class="col">
<ChiefReservedCommand
:key="idx"
:year="year"
:month="month"
:turn="officer.turn"
:turnTerm="turnTerm"
:commandList="commandList"
:turnTime="officer.turnTime"
:maxTurn="maxChiefTurn"
:maxPushTurn="Math.floor(maxChiefTurn / 2)"
:date="date"
v-model:selectedTurn="turnList"
@raiseReload="reloadTable()"
/>
</div>
</div>
</div>
</div>
<div v-if="vidx % 4 == 3" :class="['turnIdx', vidx == 7 && !targetIsMe ? undefined : 'only1000px']">
<div
v-if="vidx % 4 == 3"
:class="[
'turnIdx',
vidx == 7 && !targetIsMe ? undefined : 'only1000px',
]"
>
<div :class="['subRows', 'bg0']" :style="mainTableGridRows">
<div class="bg1">&nbsp;</div>
<div v-for="idx in maxChiefTurn" :key="idx" :class="[`turnIdxRight`, 'align-self-center', 'center']">
<div
v-for="idx in maxChiefTurn"
:class="[`turnIdxRight`, 'align-self-center', 'center']"
:key="idx"
>
{{ idx }}
</div>
</div>
@@ -52,12 +194,19 @@
</template>
</div>
</div>
<div v-if="chiefList" id="bottomChiefBox">
<div id="bottomChiefBox" v-if="chiefList">
<div id="bottomChiefList" class="c-bg2">
<template v-for="(chiefLevel, vidx) in [12, 10, 8, 6, 11, 9, 7, 5]" :key="chiefLevel">
<div v-if="vidx % 4 == 0" class="turnIdx subRows bg0" :style="subTableGridRows">
<div class="bg1" style="grid-row: 1/3" />
<div v-for="idx in maxChiefTurn" :key="idx" :class="[`turnIdxLeft`]">
<template
v-for="(chiefLevel, vidx) in [12, 10, 8, 6, 11, 9, 7, 5]"
:key="chiefLevel"
>
<div
class="turnIdx subRows bg0"
:style="subTableGridRows"
v-if="vidx % 4 == 0"
>
<div class="bg1" style="grid-row: 1/3"></div>
<div v-for="idx in maxChiefTurn" :class="[`turnIdxLeft`]" :key="idx">
{{ idx }}
</div>
</div>
@@ -68,9 +217,13 @@
:isMe="chiefLevel == officerLevel"
@click="viewTarget = chiefLevel"
/>
<div v-if="vidx % 4 == 3" class="turnIdx subRows bg0" :style="subTableGridRows">
<div class="bg1" style="grid-row: 1/3" />
<div v-for="idx in maxChiefTurn" :key="idx" :class="`turnIdxRight`">
<div
class="turnIdx subRows bg0"
:style="subTableGridRows"
v-if="vidx % 4 == 3"
>
<div class="bg1" style="grid-row: 1/3"></div>
<div v-for="idx in maxChiefTurn" :class="`turnIdxRight`" :key="idx">
{{ idx }}
</div>
</div>
@@ -82,128 +235,255 @@
</div>
</template>
<script lang="ts">
declare const staticValues: {
serverNick: string;
mapName: string;
unitSet: string;
};
</script>
<script lang="ts" setup>
import "@scss/common/bootstrap5.scss";
import "@scss/game_bg.scss";
import "../../css/config.css";
import { computed, provide, reactive, ref, toRefs, watch } from "vue";
import { computed, defineComponent, reactive, ref, toRefs, watch } from "vue";
import ChiefReservedCommand from "@/components/ChiefReservedCommand.vue";
import TopBackBar from "@/components/TopBackBar.vue";
import BottomBar from "@/components/BottomBar.vue";
import VueTypes from "vue-types";
import { isString } from "lodash";
import { isString, range } from "lodash";
import { mb_strwidth } from "./util/mb_strwidth";
import { entriesWithType } from "./util/entriesWithType";
import { addMilliseconds } from "date-fns";
import { formatTime } from "./util/formatTime";
import { parseTime } from "./util/parseTime";
import { getNpcColor } from "./common_legacy";
import TopItem from "@/ChiefCenter/TopItem.vue";
import BottomItem from "@/ChiefCenter/BottomItem.vue";
import type { OptionalFull } from "./defs";
import { ChiefResponse, OptionalFull } from "./defs";
import { SammoAPI } from "./SammoAPI";
import { unwrap } from "@/util/unwrap";
import { StoredActionsHelper } from "./util/StoredActionsHelper";
import type { ChiefResponse } from "./defs/API/NationCommand";
const props = defineProps({
maxChiefTurn: VueTypes.number.isRequired,
});
const tableObj = reactive<Omit<OptionalFull<ChiefResponse>, "result">>({
lastExecute: undefined,
year: undefined,
month: undefined,
turnTerm: undefined,
date: undefined,
chiefList: undefined,
isChief: undefined,
autorun_limit: undefined,
officerLevel: undefined,
commandList: undefined,
mapName: undefined,
unitSet: undefined,
});
const { year, month, turnTerm, date, chiefList, officerLevel, commandList } = toRefs(tableObj);
const viewTarget = ref<number | undefined>();
const targetIsMe = ref<boolean>(false);
watch(viewTarget, (val) => {
console.log("targetChange!", val, targetIsMe);
if (val === undefined) {
targetIsMe.value = false;
return;
function isDropdownChildren(e?: Event): boolean {
if (!e) {
return false;
}
if (tableObj.officerLevel === undefined) {
targetIsMe.value = false;
if (!e.target) {
return false;
}
targetIsMe.value = val === tableObj.officerLevel;
});
async function reloadTable(): Promise<void> {
try {
const response = await SammoAPI.NationCommand.GetReservedCommand();
console.log(response);
for (const [key, value] of entriesWithType(response)) {
if (key === "result") {
continue;
}
if (key === "officerLevel") {
if (value < 5) {
tableObj.officerLevel = undefined;
} else {
tableObj.officerLevel = value as number;
}
continue;
}
//HACK:
tableObj[key as unknown as "year"] = value as unknown as undefined;
}
if (viewTarget.value === undefined) {
if (!tableObj.officerLevel) {
viewTarget.value = 12;
} else {
viewTarget.value = tableObj.officerLevel;
}
}
} catch (e) {
if (isString(e)) {
alert(e);
}
console.error(e);
return;
if (
(e.target as HTMLElement).classList.contains("dropdown-item") ||
(e.target as HTMLElement).classList.contains("dropdown-toggle-split") ||
(e.target as HTMLElement).classList.contains("ignoreMe")
) {
return true;
}
return false;
}
const mainTableGridRows = computed(() => {
return {
gridTemplateRows: `24px repeat(${props.maxChiefTurn}, 30px)`,
};
export default defineComponent({
components: {
TopBackBar,
BottomBar,
ChiefReservedCommand,
TopItem,
BottomItem,
},
props: {
maxChiefTurn: VueTypes.number.isRequired,
},
watch: {
year() {
console.log(this.lastExecute);
},
},
methods: {
toggleTurn(turnIdx: number) {
if (this.turnList.has(turnIdx)) {
this.turnList.delete(turnIdx);
} else {
this.turnList.add(turnIdx);
}
},
selectTurn(turnIdx: number) {
this.turnList.clear();
this.turnList.add(turnIdx);
},
selectNone() {
this.turnList.clear();
},
selectAll(e: Event | true) {
//NOTE: split 구현에 버그가 있어서, 수동으로 구분해야함
if (e !== true && isDropdownChildren(e)) {
return;
}
if (this.turnList.size * 3 > this.maxChiefTurn) {
this.turnList.clear();
} else {
for (let i = 0; i < this.maxChiefTurn; i++) {
this.turnList.add(i);
}
}
},
selectStep(begin: number, step: number) {
this.turnList.clear();
for (const idx of range(0, this.maxChiefTurn)) {
if ((idx - begin) % step == 0) {
this.turnList.add(idx);
}
}
},
async repeatNationCommand(amount: number) {
try {
await SammoAPI.NationCommand.RepeatCommand({ amount });
} catch (e) {
console.error(e);
alert(`실패했습니다: ${e}`);
return;
}
await this.reloadTable();
},
async pushNationCommand(amount: number) {
try {
await SammoAPI.NationCommand.PushCommand({ amount });
} catch (e) {
console.error(e);
alert(`실패했습니다: ${e}`);
return;
}
await this.reloadTable();
},
pushNationCommandSingle(e: Event) {
//NOTE: split 구현에 버그가 있어서, 수동으로 구분해야함
if (isDropdownChildren(e)) {
return;
}
void this.pushNationCommand(1);
},
pullNationCommandSingle(e: Event) {
//NOTE: split 구현에 버그가 있어서, 수동으로 구분해야함
if (isDropdownChildren(e)) {
return;
}
void this.pushNationCommand(-1);
},
},
setup(props) {
const viewTarget = ref<number | undefined>();
const turnList = ref(new Set<number>());
const targetIsMe = ref<boolean>(false);
watch(viewTarget, (val) => {
console.log("targetChange!", val, targetIsMe);
if (val === undefined) {
targetIsMe.value = false;
return;
}
if (tableObj.officerLevel === undefined) {
targetIsMe.value = false;
}
targetIsMe.value = val === tableObj.officerLevel;
console.log("result", targetIsMe.value);
});
const tableObj = reactive<Omit<OptionalFull<ChiefResponse>, "result">>({
lastExecute: undefined,
year: undefined,
month: undefined,
turnTerm: undefined,
date: undefined,
chiefList: undefined,
isChief: undefined,
autorun_limit: undefined,
officerLevel: undefined,
commandList: undefined,
});
async function reloadTable(): Promise<void> {
try {
const response =
await SammoAPI.NationCommand.GetReservedCommand<ChiefResponse>();
console.log(response);
for (const [key, value] of entriesWithType(response)) {
if (key === "result") {
continue;
}
if (key === "officerLevel") {
if (value < 5) {
tableObj.officerLevel = undefined;
} else {
tableObj.officerLevel = value as number;
}
continue;
}
//HACK:
tableObj[key as unknown as "year"] = value as unknown as undefined;
}
const serverNowObj = parseTime(response.date);
const clientNowObj = new Date();
timeDiff.value = serverNowObj.getTime() - clientNowObj.getTime();
if (viewTarget.value === undefined) {
if (!tableObj.officerLevel) {
viewTarget.value = 12;
} else {
viewTarget.value = tableObj.officerLevel;
}
}
} catch (e) {
if (isString(e)) {
alert(e);
}
console.error(e);
return;
}
}
//
const mainTableGridRows = computed(() => {
return {
gridTemplateRows: `24px repeat(${props.maxChiefTurn}, 30px)`,
};
});
const subTableGridRows = computed(() => {
return {
gridTemplateRows: `36px repeat(${props.maxChiefTurn + 1}, 1fr)`,
};
});
void reloadTable();
const serverNow = ref(formatTime(new Date(), "HH:mm:ss"));
const timeDiff = ref(0);
function updateNow() {
const serverNowObj = addMilliseconds(new Date(), timeDiff.value);
serverNow.value = formatTime(serverNowObj, "HH:mm:ss");
setTimeout(() => {
updateNow();
}, 1000 - serverNowObj.getMilliseconds());
}
setTimeout(() => {
updateNow();
}, 500);
return {
updateNow,
serverNow,
timeDiff,
turnList,
...toRefs(tableObj),
mb_strwidth,
mainTableGridRows,
subTableGridRows,
reloadTable,
getNpcColor,
viewTarget,
targetIsMe,
maxPushTurn: props.maxChiefTurn / 2,
};
},
});
const subTableGridRows = computed(() => {
return {
gridTemplateRows: `36px repeat(${props.maxChiefTurn + 1}, 1fr)`,
};
});
void reloadTable();
const storedActionsHelper = new StoredActionsHelper(
staticValues.serverNick,
"nation",
staticValues.mapName,
staticValues.unitSet
);
provide("storedNationActionsHelper", storedActionsHelper);
</script>
<style lang="scss">
@import "@scss/chiefCenter.scss";
</style>
</style>
+143 -57
View File
@@ -1,31 +1,40 @@
<template>
<TopBackBar :title="title" />
<top-back-bar :title="title" />
<div
id="container"
class="bg0 px-2"
style="max-width: 1000px; margin: auto; border: solid 1px #888888; overflow: hidden"
style="
max-width: 1000px;
margin: auto;
border: solid 1px #888888;
overflow: hidden;
"
>
<div id="inheritance_list" class="row">
<template v-for="(text, key) in inheritanceViewText" :key="key">
<div :id="`inherit_${key}`" class="col col-sm-4 col-12 inherit_item inherit_template_item">
<div
:id="`inherit_${key}`"
class="col col-sm-4 col-12 inherit_item inherit_template_item"
>
<div class="row">
<label :id="`inherit_${key}_head`" class="inherit_head col col-md-6 col-sm-7 col-6 col-form-label">{{
text.title
}}</label>
<label
:id="`inherit_${key}_head`"
class="inherit_head col col-md-6 col-sm-7 col-6 col-form-label"
>{{ text.title }}</label
>
<div class="col col-md-6 col-sm-5 col-6">
<input
:id="`inherit_${key}_value`"
type="text"
class="form-control inherit_value f_tnum"
readonly
:id="`inherit_${key}_value`"
:value="Math.floor(items[key]).toLocaleString()"
/>
</div>
</div>
<div style="text-align: right">
<!-- eslint-disable-next-line vue/no-v-html -->
<small class="form-text text-muted" v-html="text.info" />
<small class="form-text text-muted" v-html="text.info"></small>
</div>
</div>
<div v-if="key == 'new'" style="width: 100%; padding: 0 10px">
@@ -35,18 +44,22 @@
</div>
<div id="inheritance_store">
<div class="row">
<div class="col">
<div class="bg1 a-center">유산 포인트 상점</div>
</div>
<div class="col"><div class="bg1 a-center">유산 포인트 상점</div></div>
</div>
<div class="row">
<div class="col offset-md-4 col-md-4 col-sm-6 col-12 py-2">
<div class="row px-4">
<div class="a-right col-6 align-self-center">다음 전투 특기 선택</div>
<div class="a-right col-6 align-self-center">
다음 전투 특기 선택
</div>
<div class="col-6">
<select v-model="nextSpecialWar" class="form-select col-6">
<option v-for="(info, key) in availableSpecialWar" :key="key" :value="key">
<select class="form-select col-6" v-model="nextSpecialWar">
<option
v-for="(info, key) in availableSpecialWar"
:key="key"
:value="key"
>
{{ info.title }}
</option>
</select>
@@ -54,23 +67,34 @@
</div>
<div class="a-right">
<small class="form-text text-muted"
><!-- eslint-disable-next-line vue/no-v-html -->
<span style="color: white" v-html="availableSpecialWar[nextSpecialWar].info" /><br />다음에 얻을 전투
특기를 정합니다.<br /><span style="color: white"
><span
style="color: white"
v-html="availableSpecialWar[nextSpecialWar].info"
/><br />다음에 얻을 전투 특기를 정합니다.<br /><span
style="color: white"
>필요 포인트: {{ inheritActionCost.nextSpecial }}</span
></small
>
</div>
<div class="row px-4">
<b-button class="col-6 offset-6" variant="primary" @click="setNextSpecialWar"> 구입 </b-button>
<b-button
class="col-6 offset-6"
variant="primary"
@click="setNextSpecialWar"
>구입</b-button
>
</div>
</div>
<div class="col col-md-4 col-sm-6 col-12 py-2">
<div class="row px-4">
<div class="a-right col-6 align-self-center">유니크 입찰</div>
<div class="col-6">
<select v-model="specificUnique" class="form-select col-6">
<option v-for="(info, key) in availableUnique" :key="key" :value="key">
<select class="form-select col-6" v-model="specificUnique">
<option
v-for="(info, key) in availableUnique"
:key="key"
:value="key"
>
{{ info.title }}
</option>
</select>
@@ -79,23 +103,29 @@
<div class="row px-4">
<div class="col f_tnum">
<NumberInputWithInfo
v-model="specificUniqueAmount"
title="입찰 포인트"
:min="inheritActionCost.minSpecificUnique"
:max="items.previous"
v-model="specificUniqueAmount"
/>
</div>
</div>
<div class="a-right">
<small class="form-text text-muted"
>얻고자 하는 유니크 아이템을 포인트를 걸어 입찰합니다. 최고 포인트인 경우 다음 턴에 유니크를 얻습니다.<br />
<!-- eslint-disable-next-line vue/no-v-html -->
<span style="color: white" v-html="availableUnique[specificUnique].info" />
</small>
>얻고자 하는 유니크 아이템을 포인트를 걸어 입찰합니다. 최고
포인트인 경우 다음 턴에 유니크를 얻습니다.<br /><span
style="color: white"
v-html="availableUnique[specificUnique].info"
/></small>
</div>
<div class="row px-4">
<b-button class="col-6 offset-6" variant="primary" @click="buySpecificUnique"> 구입 </b-button>
<b-button
class="col-6 offset-6"
variant="primary"
@click="buySpecificUnique"
>구입</b-button
>
</div>
</div>
</div>
@@ -106,11 +136,16 @@
<div class="col col-md-4 col-sm-6 col-12 py-2">
<div class="row px-4">
<div class="a-right col-6 align-self-center">랜덤 초기화</div>
<b-button class="col-6" variant="primary" @click="buySimple('ResetTurnTime')"> 구입 </b-button>
<b-button
class="col-6"
variant="primary"
@click="buySimple('ResetTurnTime')"
>구입</b-button
>
</div>
<div class="a-right">
<small class="form-text text-muted"
>다음 턴이 랜덤으로 바뀝니다. (필요 포인트가 피보나치식으로 증가합니다)<br /><span style="color: white"
>다음 턴이 랜덤으로 바뀝니다.<br /><span style="color: white"
>필요 포인트: {{ inheritActionCost.resetTurnTime }}</span
></small
>
@@ -119,7 +154,12 @@
<div class="col col-md-4 col-sm-6 col-12 py-2">
<div class="row px-4">
<div class="a-right col-6 align-self-center">랜덤 유니크 획득</div>
<b-button class="col-6" variant="primary" @click="buySimple('BuyRandomUnique')"> 구입 </b-button>
<b-button
class="col-6"
variant="primary"
@click="buySimple('BuyRandomUnique')"
>구입</b-button
>
</div>
<div class="a-right">
<small class="form-text text-muted"
@@ -131,12 +171,19 @@
</div>
<div class="col col-md-4 col-sm-6 col-12 py-2">
<div class="row px-4">
<div class="a-right col-6 align-self-center">즉시 전투 특기 초기화</div>
<b-button class="col-6" variant="primary" @click="buySimple('ResetSpecialWar')"> 구입 </b-button>
<div class="a-right col-6 align-self-center">
즉시 전투 특기 초기화
</div>
<b-button
class="col-6"
variant="primary"
@click="buySimple('ResetSpecialWar')"
>구입</b-button
>
</div>
<div class="a-right">
<small class="form-text text-muted"
>즉시 전투 특기를 초기화합니다. (필요 포인트가 피보나치식으로 증가합니다)<br /><span style="color: white"
>즉시 전투 특기를 초기화합니다.<br /><span style="color: white"
>필요 포인트: {{ inheritActionCost.resetSpecialWar }}</span
></small
>
@@ -148,17 +195,23 @@
<hr :style="{ opacity: 0.5 }" />
</div>
<div class="row">
<div v-for="(info, buffKey) in inheritBuffHelpText" :key="buffKey" class="col col-md-4 col-sm-6 col-12">
<div
class="col col-md-4 col-sm-6 col-12"
v-for="(info, buffKey) in inheritBuffHelpText"
:key="buffKey"
>
<div class="row">
<label class="col col-sm-6 col-form-label" :for="`buff-${buffKey}`">{{ info.title }}</label>
<label class="col col-sm-6 col-form-label" :for="`buff-${buffKey}`">{{
info.title
}}</label>
<div class="col col-sm-6 f_tnum">
<b-form-input
:id="`buff-${buffKey}`"
v-model="inheritBuff[buffKey]"
type="number"
v-model="inheritBuff[buffKey]"
:min="prevInheritBuff[buffKey] ?? 0"
:max="maxInheritBuff"
/>
></b-form-input>
</div>
</div>
<div style="text-align: right">
@@ -166,7 +219,8 @@
>{{ info.info }}<br /><span style="color: white"
>필요 포인트:
{{
inheritActionCost.buff[inheritBuff[buffKey]] - inheritActionCost.buff[prevInheritBuff[buffKey] ?? 0]
inheritActionCost.buff[inheritBuff[buffKey]] -
inheritActionCost.buff[prevInheritBuff[buffKey] ?? 0]
}}</span
></small
>
@@ -174,11 +228,15 @@
<div class="row px-4" style="margin-bottom: 1em">
<b-button
variant="secondary"
class="col col-md-6 col-4 offset-md-0 offset-4"
@click="inheritBuff[buffKey] = prevInheritBuff[buffKey] ?? 0"
class="col col-md-6 col-4 offset-md-0 offset-4"
>리셋</b-button
><b-button
variant="primary"
class="col col-md-6 col-4"
@click="buyInheritBuff(buffKey)"
>구입</b-button
>
리셋 </b-button
><b-button variant="primary" class="col col-md-6 col-4" @click="buyInheritBuff(buffKey)"> 구입 </b-button>
</div>
</div>
</div>
@@ -187,7 +245,7 @@
<div class="bg1 a-center">유산 포인트 변경 내역(최근 30)</div>
</div>
</div>
<div v-for="(log, idx) in lastInheritPointLogs" :key="idx" class="row">
<div class="row" v-for="(log, idx) in lastInheritPointLogs" :key="idx">
<div class="col a-right" style="max-width: 20ch">
<small class="text-muted tnum">[{{ log.date }}]</small>
</div>
@@ -206,7 +264,6 @@ import TopBackBar from "@/components/TopBackBar.vue";
import _ from "lodash";
import NumberInputWithInfo from "@/components/NumberInputWithInfo.vue";
import { SammoAPI } from "./SammoAPI";
import type { inheritBuffType } from "./defs/API/InheritAction";
type InheritanceType =
| "previous"
@@ -234,7 +291,10 @@ declare const lastInheritPointLogs: {
declare const items: Record<InheritanceType, number>;
const inheritanceViewText: Record<InheritanceViewType, { title: string; info: string }> = {
const inheritanceViewText: Record<
InheritanceViewType,
{ title: string; info: string }
> = {
sum: {
title: "총 포인트",
info: "다음 플레이에서 사용할 수 있는 총 포인트입니다.",
@@ -293,6 +353,15 @@ const inheritanceViewText: Record<InheritanceViewType, { title: string; info: st
},
};
type inheritBuffType =
| "warAvoidRatio"
| "warCriticalRatio"
| "warMagicTrialProb"
| "domesticSuccessProb"
| "domesticFailProb"
| "warAvoidRatioOppose"
| "warCriticalRatioOppose"
| "warMagicTrialProbOppose";
declare const currentInheritBuff: {
[v in inheritBuffType]: number | undefined;
@@ -370,13 +439,11 @@ declare const availableUnique: Record<
export default defineComponent({
name: "PageInheritPoint",
components: {
TopBackBar,
NumberInputWithInfo,
},
data() {
const inheritBuff = {} as Record<inheritBuffType, number>;
for (const buffKey of Object.keys(inheritBuffHelpText) as inheritBuffType[]) {
for (const buffKey of Object.keys(
inheritBuffHelpText
) as inheritBuffType[]) {
inheritBuff[buffKey] = currentInheritBuff[buffKey] ?? 0;
}
return {
@@ -419,7 +486,9 @@ export default defineComponent({
alert("낮출 수 없습니다.");
return;
}
const cost = this.inheritActionCost.buff[level] - this.inheritActionCost.buff[prevLevel];
const cost =
this.inheritActionCost.buff[level] -
this.inheritActionCost.buff[prevLevel];
if (this.items.previous < cost) {
alert("유산 포인트가 부족합니다.");
return;
@@ -427,7 +496,11 @@ export default defineComponent({
const name = inheritBuffHelpText[buffKey].title;
if (!confirm(`${name}${level}등급으로 올릴까요? ${cost} 포인트가 소모됩니다.`)) {
if (
!confirm(
`${name}${level}등급으로 올릴까요? ${cost} 포인트가 소모됩니다.`
)
) {
return;
}
@@ -446,7 +519,9 @@ export default defineComponent({
//TODO: 페이지 새로고침 필요없이 하도록
location.reload();
},
async buySimple(type: "ResetTurnTime" | "BuyRandomUnique" | "ResetSpecialWar") {
async buySimple(
type: "ResetTurnTime" | "BuyRandomUnique" | "ResetSpecialWar"
) {
const costMap: Record<typeof type, number> = {
ResetTurnTime: inheritActionCost.resetTurnTime,
ResetSpecialWar: inheritActionCost.resetSpecialWar,
@@ -473,7 +548,7 @@ export default defineComponent({
}
try {
await SammoAPI.InheritAction[type]();
await SammoAPI.InheritAction[type]({});
} catch (e) {
console.error(e);
alert(`실패했습니다: ${e}`);
@@ -485,7 +560,8 @@ export default defineComponent({
location.reload();
},
async setNextSpecialWar() {
const specialWarName = this.availableSpecialWar[this.nextSpecialWar].title ?? undefined;
const specialWarName =
this.availableSpecialWar[this.nextSpecialWar].title ?? undefined;
if (specialWarName === undefined) {
alert(`잘못된 타입: ${this.nextSpecialWar}`);
return;
@@ -497,7 +573,11 @@ export default defineComponent({
return;
}
//TODO: JosaUtil
if (!confirm(`${cost} 포인트로 다음 전특을 ${specialWarName}(으)로 고정하겠습니까?`)) {
if (
!confirm(
`${cost} 포인트로 다음 전특을 ${specialWarName}(으)로 고정하겠습니까?`
)
) {
return;
}
@@ -516,7 +596,8 @@ export default defineComponent({
location.reload();
},
async buySpecificUnique() {
const uniqueName = this.availableUnique[this.specificUnique].title ?? undefined;
const uniqueName =
this.availableUnique[this.specificUnique].title ?? undefined;
if (uniqueName === undefined) {
alert(`잘못된 타입: ${this.specificUnique}`);
return;
@@ -548,9 +629,14 @@ export default defineComponent({
location.reload();
},
},
components: {
TopBackBar,
NumberInputWithInfo,
},
});
</script>
<style>
.col-form-label {
text-align: right;
@@ -564,4 +650,4 @@ export default defineComponent({
.tnum {
font-feature-settings: "tnum";
}
</style>
</style>
+312 -294
View File
@@ -1,31 +1,27 @@
<template>
<TopBackBar title="장수 생성" />
<top-back-bar title="장수 생성" />
<div v-if="gameConstStore && args" id="container" class="bg0">
<div id="container" class="bg0">
<div class="nation-list">
<div class="nation-header nation-row bg1 center">
<div>국가명</div>
<div>임관권유문</div>
<div class="display-toggle d-grid">
<b-button
v-model="displayTable"
:pressed="displayTable"
:variant="displayTable ? 'info' : 'secondary'"
v-model="displayTable"
@click="displayTable = !displayTable"
>
{{ displayTable ? "숨기기" : "보이기" }}
</b-button>
>{{ displayTable ? "숨기기" : "보이기" }}</b-button>
</div>
<div class="zoom-toggle d-grid">
<b-button
v-model="toggleZoom"
:pressed="toggleZoom"
:variant="toggleZoom ? 'info' : 'secondary'"
:disabled="!displayTable"
v-model="toggleZoom"
@click="toggleZoom = !toggleZoom"
>
{{ toggleZoom ? "작게 보기" : "크게 보기" }}
</b-button>
:disabled="!displayTable"
>{{ toggleZoom ? "작게 보기" : "크게 보기" }}</b-button>
</div>
</div>
<template v-if="displayTable">
@@ -42,12 +38,9 @@
}"
class="d-grid"
>
<div class="align-self-center center">
{{ nation.name }}
</div>
<div class="align-self-center center">{{ nation.name }}</div>
</div>
<div class="nation-scout-plate align-self-center">
<!-- eslint-disable-next-line vue/no-v-html -->
<div class="nation-scout-msg" v-html="nation.scoutmsg ?? '-'" />
</div>
</div>
@@ -67,22 +60,32 @@
<div class="col col-md-1 col-3 a-right align-self-center">전콘 사용</div>
<div class="col col-md-4 col-9 align-self-center">
<img style="height: 64px; width: 64px" :src="iconPath" />
<label> <input v-model="args.pic" type="checkbox" /> 사용 </label>
<label>
<input type="checkbox" v-model="args.pic" /> 사용
</label>
</div>
<div class="col col-md-4 col-3 align-self-center a-right">성격</div>
<div class="col col-md-8 col-9 align-self-center">
<div class="row">
<div class="col col-md-3 col-4 align-self-center">
<select v-model="args.character" class="form-select form-inline" style="max-width: 20ch">
<option v-for="(personalityObj, key) in availablePersonality" :key="key" :value="key">
{{ personalityObj.name }}
</option>
<select
class="form-select form-inline"
style="max-width: 20ch"
v-model="args.character"
>
<option
v-for="(personalityObj, key) in availablePersonality"
:key="key"
:value="key"
>{{ personalityObj.name }}</option>
</select>
</div>
<div class="col col-md-9 col-8 align-self-center">
<small class="text-muted">
{{ availablePersonality[args.character].info }}
{{
availablePersonality[args.character].info
}}
</small>
</div>
</div>
@@ -100,35 +103,37 @@
<small class="text-muted">//</small>
</div>
<div class="col col-md-2 col-3 align-self-center">
<input v-model="args.leadership" type="number" class="form-control" />
<input type="number" class="form-control" v-model="args.leadership" />
</div>
<div class="col col-md-2 col-3 align-self-center">
<input v-model="args.strength" type="number" class="form-control" />
<input type="number" class="form-control" v-model="args.strength" />
</div>
<div class="col col-md-2 col-3 align-self-center">
<input v-model="args.intel" type="number" class="form-control" />
<input type="number" class="form-control" v-model="args.intel" />
</div>
</div>
<div class="row" style="margin-top: 1em">
<div class="col col-md-4 col-3 a-right align-self-center">능력치 조절</div>
<div class="col col-md-8 col-9">
<b-button variant="secondary" class="stat-btn" @click="randStatRandom"> 랜덤형 </b-button>
<b-button variant="secondary" class="stat-btn" @click="randStatLeadPow"> 통솔무력형 </b-button>
<b-button variant="secondary" class="stat-btn" @click="randStatLeadInt"> 통솔지력형 </b-button>
<b-button variant="secondary" class="stat-btn" @click="randStatPowInt"> 무력지력형 </b-button>
<b-button variant="secondary" class="stat-btn" @click="randStatRandom">랜덤형</b-button>
<b-button variant="secondary" class="stat-btn" @click="randStatLeadPow">통솔무력형</b-button>
<b-button variant="secondary" class="stat-btn" @click="randStatLeadInt">통솔지력형</b-button>
<b-button variant="secondary" class="stat-btn" @click="randStatPowInt">무력지력형</b-button>
</div>
</div>
</div>
<div class="row" style="border-top: solid 1px #aaa; margin-top: 0.5em">
<div class="col a-center" style="color: orange">
모든 능력치는 ( {{ stats.min }} &lt;= 능력치 &lt;= {{ stats.max }} ) 사이로 잡으셔야 합니다. <br /> 외의
능력치는 가입되지 않습니다.
모든 능력치는 ( {{ stats.min }} &lt;= 능력치 &lt;= {{ stats.max }} )
사이로 잡으셔야 니다.
<br /> 외의 능력치는 가입되지 않습니다.
</div>
</div>
<div class="row">
<div class="col a-center">
능력치의 총합은 {{ stats.total }} 입니다. 가입후 {{ stats.bonusMin }} ~ {{ stats.bonusMax }} 능력치 보너스를
받게 니다. <br />임의의 도시에서 재야로 시작하며 건국과 임관은 게임 내에서 실행합니다.
능력치의 총합은 {{ stats.total }} 입니다. 가입후 {{ stats.bonusMin }} ~
{{ stats.bonusMax }} 능력치 보너스를 받게 됩니다.
<br />임의의 도시에서 재야로 시작하며 건국과 임관은 게임 내에서 실행합니다.
</div>
</div>
@@ -136,18 +141,20 @@
<div class="col col-md-11 col-9 center align-self-center">유산 포인트 사용</div>
<div class="col col-md-1 col-3">
<label>
<input v-model="displayInherit" type="checkbox" />
{{ displayInherit ? "숨기기" : "보이기" }}
<input type="checkbox" v-model="displayInherit" />
{{
displayInherit ? "숨기기" : "보이기"
}}
</label>
</div>
</div>
<div v-if="displayInherit" class="inherit-block">
<div class="inherit-block" v-if="displayInherit">
<div class="row">
<div class="col">
<NumberInputWithInfo v-model="inheritTotalPoint" title="보유한 유산 포인트" :readonly="true" />
<NumberInputWithInfo title="보유한 유산 포인트" v-model="inheritTotalPoint" :readonly="true" />
</div>
<div class="col">
<NumberInputWithInfo v-model="inheritRequiredPoint" title="필요 유산 포인트" :readonly="true" />
<NumberInputWithInfo title="필요 유산 포인트" v-model="inheritRequiredPoint" :readonly="true" />
</div>
</div>
<hr />
@@ -156,17 +163,28 @@
<div class="row">
<div class="col col-6 a-right align-self-center">천재로 생성</div>
<div class="col col-6 align-self-center">
<select v-model="args.inheritSpecial" class="form-select form-inline" style="max-width: 20ch">
<select
class="form-select form-inline"
style="max-width: 20ch"
v-model="args.inheritSpecial"
>
<option :value="undefined">사용안함</option>
<option v-for="(inheritSpecial, key) in availableInheritSpecial" :key="key" :value="key">
{{ inheritSpecial.name }}
</option>
<option
v-for="(inheritSpecial, key) in availableInheritSpecial"
:key="key"
:value="key"
>{{ inheritSpecial.name }}</option>
</select>
</div>
</div>
<div class="col align-self-center">
<!-- eslint-disable-next-line vue/no-v-html -->
<small class="text-muted" v-html="availableInheritSpecial[args.inheritSpecial ?? '']?.info" />
<small
class="text-muted"
v-html="
(availableInheritSpecial[args.inheritSpecial ?? ''] ?? { info: '' })
.info
"
/>
</div>
</div>
@@ -174,11 +192,17 @@
<div class="row">
<div class="col col-6 a-right align-self-center">도시</div>
<div class="col col-6 align-self-center">
<select v-model="args.inheritCity" class="form-select form-inline" style="max-width: 20ch">
<select
class="form-select form-inline"
style="max-width: 20ch"
v-model="args.inheritCity"
>
<option :value="undefined">사용안함</option>
<option v-for="city in availableInheritCity" :key="city.id" :value="city.id">
{{ `[${city.region}] ${city.name}` }}
</option>
<option
v-for="city in availableInheritCity"
:key="city[0]"
:value="city[0]"
>{{ `[${city[1]}] ${city[2]}` }}</option>
</select>
</div>
</div>
@@ -186,25 +210,28 @@
<div class="col col-md-6 col-sm-6 col-12 p-2 align-self-center">
<div class="a-center">
<label> <input v-model="inheritTurnTimeSet" type="checkbox" /> 시간 고정 </label>
<label>
<input type="checkbox" v-model="inheritTurnTimeSet" />턴 시간
고정
</label>
</div>
<div class="row turn_time_pad">
<div class="col col-md-4 offset-md-3 col-4 offset-3">
<NumberInputWithInfo
v-model="inheritTurnTimeMinute"
:readonly="!inheritTurnTimeSet"
:min="0"
:max="1 - turnterm"
v-model="inheritTurnTimeMinute"
:right="true"
title="분"
/>
</div>
<div class="col col-md-4 col-4">
<NumberInputWithInfo
v-model="inheritTurnTimeSecond"
:readonly="!inheritTurnTimeSet"
:min="0"
:max="60"
v-model="inheritTurnTimeSecond"
:right="true"
title="초"
/>
@@ -216,13 +243,13 @@
<div class="a-center">추가 능력치 고정</div>
<div class="row">
<div class="col">
<NumberInputWithInfo v-model="(args.inheritBonusStat ?? [0, 0, 0])[0]" :max="stats.bonusMax" title="통솔" />
<NumberInputWithInfo title="통솔" v-model="(args.inheritBonusStat ?? [0, 0, 0])[0]" />
</div>
<div class="col">
<NumberInputWithInfo v-model="(args.inheritBonusStat ?? [0, 0, 0])[1]" :max="stats.bonusMax" title="무력" />
<NumberInputWithInfo title="무력" v-model="(args.inheritBonusStat ?? [0, 0, 0])[1]" />
</div>
<div class="col">
<NumberInputWithInfo v-model="(args.inheritBonusStat ?? [0, 0, 0])[2]" :max="stats.bonusMax" title="지력" />
<NumberInputWithInfo title="지력" v-model="(args.inheritBonusStat ?? [0, 0, 0])[2]" />
</div>
</div>
</div>
@@ -231,271 +258,262 @@
<div class="row" style="border-top: solid 1px #aaa">
<div class="col a-center" style="margin: 0.5em">
<b-button color="primary" @click="submitForm"> 장수 생성 </b-button>&nbsp;
<b-button color="secondary" @click="resetArgs"> 다시 입력 </b-button>
<b-button color="primary" @click="submitForm">장수 생성</b-button>&nbsp;
<b-button color="secondary" @click="resetArgs">다시 입력</b-button>
</div>
</div>
</div>
</template>
<script lang="ts">
declare const staticValues: {
nationList: {
nation: number;
name: string;
color: string;
scout: number;
scoutmsg?: string;
}[];
turnterm: number;
member: {
name: string;
grade: number;
picture: string;
imgsvr: 0 | 1;
};
serverID: string;
inheritTotalPoint: number;
};
</script>
<script lang="ts" setup>
import "@scss/common/bootstrap5.scss";
import "@scss/game_bg.scss";
import { defineComponent } from "vue";
import TopBackBar from "@/components/TopBackBar.vue";
import { getIconPath } from "@util/getIconPath";
import { isBrightColor } from "@util/isBrightColor";
import { abilityLeadint, abilityLeadpow, abilityPowint, abilityRand } from "@util/generalStats";
import { shuffle, sum } from "lodash";
import {
abilityLeadint,
abilityLeadpow,
abilityPowint,
abilityRand,
} from "@util/generalStats";
import { clone, shuffle, sum } from "lodash";
import NumberInputWithInfo from "@/components/NumberInputWithInfo.vue";
import { SammoAPI } from "./SammoAPI";
import type { JoinArgs } from "./defs/API/General";
import { GameConstStore, getGameConstStore } from "@/GameConstStore";
import { computed, onMounted, ref, watch } from "vue";
import type { CityID, GameIActionInfo } from "./defs/GameObj";
import { unwrap } from "@/util/unwrap";
const gameConstStore = ref<GameConstStore>();
const { serverID, member, turnterm } = staticValues;
const nationList = ref(shuffle(staticValues.nationList));
const args = ref<JoinArgs>();
const stats = ref({
min: 50,
max: 50,
total: 50,
bonusMin: 1,
bonusMax: 5,
});
const inheritTotalPoint = ref(staticValues.inheritTotalPoint);
const availableInheritCity = ref<{ id: CityID; name: string; region: string }[]>([]);
const availableInheritSpecial = ref<Record<string, GameIActionInfo>>({});
const availablePersonality = ref<Record<string, GameIActionInfo>>({});
watch(gameConstStore, (gameConst) => {
if (gameConst === undefined) {
console.error();
return;
}
availableInheritCity.value = (() => {
const cityList: { id: CityID; name: string; region: string }[] = [];
for (const city of Object.values(gameConst.cityConst)) {
cityList.push({
id: city.id,
name: city.name,
region: gameConst.cityConstMap.region[city.region] as string,
});
}
cityList.sort((lhs, rhs) => {
const rC = lhs.region.localeCompare(rhs.region);
if (rC != 0) return rC;
return lhs.name.localeCompare(rhs.name);
});
return cityList;
})();
availableInheritSpecial.value = (() => {
const specialList: typeof availableInheritSpecial.value = {};
for (const specialWarID of Object.values(gameConst.gameConst.availableSpecialWar)) {
specialList[specialWarID] = unwrap(gameConst.iActionInfo.specialWar[specialWarID]);
}
return specialList;
})();
availablePersonality.value = (() => {
const personalityList: typeof availablePersonality.value = {};
for (const personalityID of Object.values(gameConst.gameConst.availablePersonality)) {
personalityList[personalityID] = unwrap(gameConst.iActionInfo.personality[personalityID]);
}
personalityList["Random"] = {
value: "Random",
name: "???",
info: "무작위 성격을 선택합니다.",
};
return personalityList;
})();
stats.value = {
min: gameConst.gameConst.defaultStatMin,
max: gameConst.gameConst.defaultStatMax,
total: gameConst.gameConst.defaultStatTotal,
bonusMin: gameConst.gameConst.defaultStatMin,
bonusMax: gameConst.gameConst.defaultStatMax,
}
args.value = {
name: member.name,
leadership: stats.value.total - 2 * Math.floor(stats.value.total / 3),
strength: Math.floor(stats.value.total / 3),
intel: Math.floor(stats.value.total / 3),
pic: true,
character: "Random",
inheritCity: undefined,
inheritBonusStat: [0, 0, 0],
inheritSpecial: undefined,
inheritTurntime: undefined,
declare const nationList: {
nation: number;
name: string;
color: string;
scout: number;
scoutmsg?: string;
}[];
declare const availablePersonality: {
[key: string]: {
name: string;
info: string;
};
};
declare const availableInheritSpecial: {
[key: string]: {
name: string;
info: string;
};
};
});
declare const availableInheritCity: [number, string, string][];
onMounted(async () => {
gameConstStore.value = await getGameConstStore();
});
declare const turnterm: number;
function randStatRandom() {
if (args.value === undefined) throw "nyc";
[args.value.leadership, args.value.strength, args.value.intel] = abilityRand(stats.value);
}
function randStatLeadPow() {
if (args.value === undefined) throw "nyc";
[args.value.leadership, args.value.strength, args.value.intel] = abilityLeadpow(stats.value);
}
function randStatLeadInt() {
if (args.value === undefined) throw "nyc";
[args.value.leadership, args.value.strength, args.value.intel] = abilityLeadint(stats.value);
}
function randStatPowInt() {
if (args.value === undefined) throw "nyc";
[args.value.leadership, args.value.strength, args.value.intel] = abilityPowint(stats.value);
}
function resetArgs() {
if (!args.value) throw "nyc";
const defaultStatTotal = stats.value.total;
args.value.name = member.name;
args.value.pic = true;
args.value.character = "Random";
args.value.leadership = defaultStatTotal - 2 * Math.floor(defaultStatTotal / 3);
args.value.strength = Math.floor(defaultStatTotal / 3);
args.value.intel = Math.floor(defaultStatTotal / 3);
declare const member: {
name: string;
grade: number;
picture: string;
imgsvr: 0 | 1;
};
declare const stats: {
min: number;
max: number;
total: number;
bonusMin: number;
bonusMax: number;
};
declare const inheritPoints: {
special: number;
turnTime: number;
city: number;
stat: number;
};
declare const serverID: string;
declare const inheritTotalPoint: number;
declare module "@vue/runtime-core" {
interface ComponentCustomProperties {
member: typeof member;
}
}
async function submitForm() {
if (!args.value) throw "nyc";
//검증은 언제 되어야 하는가?
const subbmitArgs = args.value;
const totalStat = subbmitArgs.leadership + subbmitArgs.strength + subbmitArgs.intel;
const defaultStatTotal = stats.value.total;
type APIArgs = {
name: string;
leadership: number;
strength: number;
intel: number;
pic: boolean;
character: string;
inheritSpecial?: string;
inheritTurntime?: number;
inheritCity?: number;
inheritBonusStat?: [number, number, number];
};
if (totalStat < defaultStatTotal) {
if (
!confirm(
`설정한 능력치가 ${totalStat}으로, 실제 최대치인 ${defaultStatTotal}보다 적습니다.\r\n그래도 진행할까요?`
)
) {
return false;
}
}
try {
await SammoAPI.General.Join(subbmitArgs);
} catch (e) {
console.error(e);
alert(`실패했습니다: ${e}`);
return;
}
export default defineComponent({
name: "PageJoin",
components: {
TopBackBar,
NumberInputWithInfo,
},
data() {
const displayTable = JSON.parse(
localStorage.getItem(`conf.${serverID}.join.displayTable`) ?? "true"
);
const displayInherit = JSON.parse(
localStorage.getItem(`conf.${serverID}.join.displayInherit`) ?? "true"
);
const nationListShuffled = shuffle(nationList);
const args: APIArgs = {
name: member.name,
leadership: stats.total - 2 * Math.floor(stats.total / 3),
strength: Math.floor(stats.total / 3),
intel: Math.floor(stats.total / 3),
pic: true,
character: "Random",
alert("정상적으로 생성되었습니다. \n위키와 팁/강좌 게시판을 꼭 읽어보세요!");
location.href = "./";
}
inheritCity: undefined,
inheritBonusStat: [0, 0, 0],
inheritSpecial: undefined,
inheritTurntime: undefined,
};
availableInheritCity.sort((lhs, rhs) => {
const rC = lhs[1].localeCompare(rhs[1]);
if (rC != 0) return rC;
return lhs[2].localeCompare(rhs[2]);
});
return {
displayTable,
displayInherit,
availablePersonality,
availableInheritSpecial,
availableInheritCity,
member: member,
stats,
args,
nationList: nationListShuffled,
isBrightColor,
inheritTotalPoint,
inheritTurnTimeSet: false,
inheritTurnTimeMinute: 0,
inheritTurnTimeSecond: 0,
turnterm,
toggleZoom: true,
};
},
watch: {
displayTable(newValue: boolean) {
localStorage.setItem(
`conf.${serverID}.join.displayTable`,
JSON.stringify(newValue)
);
},
displayInherit(newValue: boolean) {
localStorage.setItem(
`conf.${serverID}.join.displayInherit`,
JSON.stringify(newValue)
);
},
inheritTurnTimeMinute(newValue: number) {
if (!this.inheritTurnTimeSet) {
this.args.inheritTurntime = undefined;
return;
}
this.args.inheritTurntime = newValue * 60 + this.inheritTurnTimeSecond;
},
inheritTurnTimeSecond(newValue: number) {
if (!this.inheritTurnTimeSet) {
this.args.inheritTurntime = undefined;
return;
}
this.args.inheritTurntime = this.inheritTurnTimeMinute * 60 + newValue;
},
inheritTurnTimeSet(newValue: boolean) {
if (!newValue) {
this.args.inheritTurntime = undefined;
return;
}
this.args.inheritTurntime =
this.inheritTurnTimeMinute * 60 + this.inheritTurnTimeSecond;
},
},
computed: {
iconPath() {
if (this.args.pic) {
return getIconPath(this.member.imgsvr, this.member.picture);
}
return getIconPath(0, "default.jpg");
},
inheritRequiredPoint() {
let inheritRequiredPoint = 0;
if (this.args.inheritCity !== undefined) {
inheritRequiredPoint += inheritPoints.city;
}
if (this.args.inheritSpecial !== undefined) {
inheritRequiredPoint += inheritPoints.special;
}
if (this.args.inheritTurntime !== undefined) {
inheritRequiredPoint += inheritPoints.turnTime;
}
if (
this.args.inheritBonusStat !== undefined &&
sum(this.args.inheritBonusStat) != 0
) {
inheritRequiredPoint += inheritPoints.stat;
}
return inheritRequiredPoint;
},
},
methods: {
randStatRandom() {
[this.args.leadership, this.args.strength, this.args.intel] =
abilityRand();
},
randStatLeadPow() {
[this.args.leadership, this.args.strength, this.args.intel] =
abilityLeadpow();
},
randStatLeadInt() {
[this.args.leadership, this.args.strength, this.args.intel] =
abilityLeadint();
},
randStatPowInt() {
[this.args.leadership, this.args.strength, this.args.intel] =
abilityPowint();
},
resetArgs() {
this.args.name = member.name;
this.args.pic = true;
this.args.character = "Random";
this.args.leadership = stats.total - 2 * Math.floor(stats.total / 3);
this.args.strength = Math.floor(stats.total / 3);
this.args.intel = Math.floor(stats.total / 3);
},
async submitForm() {
//검증은 언제 되어야 하는가?
const args = clone(this.args);
const totalStat = args.leadership + args.strength + args.intel;
const iconPath = computed(() => {
if (!args.value) throw "nyc";
if (totalStat < stats.total) {
if (!confirm(`설정한 능력치가 ${totalStat}으로, 실제 최대치인 ${stats.total}보다 적습니다.\r\n그래도 진행할까요?`)) {
return false;
}
}
try {
await SammoAPI.General.Join(args);
} catch (e) {
console.error(e);
alert(`실패했습니다: ${e}`);
return;
}
if (args.value.pic) {
return getIconPath(member.imgsvr, member.picture);
}
return getIconPath(0, "default.jpg");
});
const inheritRequiredPoint = computed(() => {
if (!args.value || !gameConstStore.value) throw "nyc";
let inheritRequiredPoint = 0;
const gameConst = gameConstStore.value.gameConst;
if (args.value.inheritCity !== undefined) {
inheritRequiredPoint += gameConst.inheritBornCityPoint;
}
if (args.value.inheritSpecial !== undefined) {
inheritRequiredPoint += gameConst.inheritBornSpecialPoint;
}
if (args.value.inheritTurntime !== undefined) {
inheritRequiredPoint += gameConst.inheritBornTurntimePoint;
}
if (args.value.inheritBonusStat !== undefined && sum(args.value.inheritBonusStat) != 0) {
inheritRequiredPoint += gameConst.inheritBornStatPoint;
}
return inheritRequiredPoint;
});
const toggleZoom = ref(true);
const displayTable = ref<boolean>(JSON.parse(localStorage.getItem(`conf.${serverID}.join.displayTable`) ?? "true"));
watch(displayTable, (newValue: boolean) => {
localStorage.setItem(`conf.${serverID}.join.displayTable`, JSON.stringify(newValue));
});
const displayInherit = ref<boolean>(JSON.parse(localStorage.getItem(`conf.${serverID}.join.displayInherit`) ?? "true"));
watch(displayInherit, (newValue: boolean) => {
localStorage.setItem(`conf.${serverID}.join.displayInherit`, JSON.stringify(newValue));
});
const inheritTurnTimeSet = ref(false);
watch(inheritTurnTimeSet, (newValue: boolean) => {
if (!args.value) throw "nyc";
if (!newValue) {
args.value.inheritTurntime = undefined;
return;
}
args.value.inheritTurntime = inheritTurnTimeMinute.value * 60 + inheritTurnTimeSecond.value;
});
const inheritTurnTimeMinute = ref(0);
watch(inheritTurnTimeMinute, (newValue: number) => {
if (!args.value) throw "nyc";
if (!inheritTurnTimeSet.value) {
args.value.inheritTurntime = undefined;
return;
}
args.value.inheritTurntime = newValue * 60 + inheritTurnTimeSecond.value;
});
const inheritTurnTimeSecond = ref(0);
watch(inheritTurnTimeSecond, (newValue: number) => {
if (!args.value) throw "nyc";
if (!inheritTurnTimeSet.value) {
args.value.inheritTurntime = undefined;
return;
}
args.value.inheritTurntime = inheritTurnTimeMinute.value * 60 + newValue;
alert(
"정상적으로 생성되었습니다. \n위키와 팁/강좌 게시판을 꼭 읽어보세요!"
);
location.href = "./";
},
},
});
</script>
<style lang="scss">
@@ -594,4 +612,4 @@ watch(inheritTurnTimeSecond, (newValue: number) => {
}
}
}
</style>
</style>
+198 -83
View File
@@ -3,7 +3,7 @@
<BContainer
id="container"
class="tb_layout bg0"
:toast="{ root: true }"
:toast="{root: true}"
:style="{ maxWidth: '1000px', margin: 'auto', border: 'solid 1px #888888', padding: '0' }"
>
<div class="bg1 section_bar">국가 정책</div>
@@ -17,54 +17,94 @@
<div class="form_list row row-cols-md-2 row-cols-1">
<div class="col">
<NumberInputWithInfo v-model="nationPolicy.reqNationGold" :step="100" title="국가 권장 금">
이보다 많으면 포상, 적으면 몰수/헌납합니다.(긴급포상 제외)
이보다 많으면 포상, 적으면 몰수/헌납합니다.(긴급포상
제외)
</NumberInputWithInfo>
</div>
<div class="col">
<NumberInputWithInfo v-model="nationPolicy.reqNationRice" :step="100" title="국가 권장 쌀">
이보다 많으면 포상, 적으면 몰수/헌납합니다.(긴급포상 제외)
이보다 많으면 포상, 적으면 몰수/헌납합니다.(긴급포상
제외)
</NumberInputWithInfo>
</div>
<div class="col">
<NumberInputWithInfo v-model="nationPolicy.reqHumanWarUrgentGold" :step="100" title="유저전투장 긴급포상 금">
<NumberInputWithInfo
v-model="nationPolicy.reqHumanWarUrgentGold"
:step="100"
title="유저전투장 긴급포상 금"
>
유저장긴급포상시 이보다 금이 적은 장수에게 포상합니다.
<br />
0이면 보병 6 징병({{ (defaultStatMax * 100).toLocaleString() }} * 6) 가능한 금을 기준으로 하며, 수치는
현재 {{ zeroPolicy.reqHumanWarUrgentGold.toLocaleString() }}입니다.
0이면
보병 6 징병({{ (defaultStatMax * 100).toLocaleString() }} * 6)
가능한 금을 기준으로 하며, 수치는 현재
{{
zeroPolicy.reqHumanWarUrgentGold.toLocaleString()
}}입니다.
</NumberInputWithInfo>
</div>
<div class="col">
<NumberInputWithInfo v-model="nationPolicy.reqHumanWarUrgentRice" :step="100" title="유저전투장 긴급포상 쌀">
<NumberInputWithInfo
v-model="nationPolicy.reqHumanWarUrgentRice"
:step="100"
title="유저전투장 긴급포상 쌀"
>
유저장긴급포상시 이보다 쌀이 적은 장수에게 포상합니다.
<br />
0이면 기본 병종으로 {{ (defaultStatMax * 100).toLocaleString() }} * 6 사살 가능한 쌀을 기준으로 하며,
수치는 현재 {{ zeroPolicy.reqHumanWarUrgentRice.toLocaleString() }}입니다.
0이면
기본 병종으로 {{ (defaultStatMax * 100).toLocaleString() }} * 6 사살
가능한 쌀을 기준으로 하며, 수치는 현재
{{
zeroPolicy.reqHumanWarUrgentRice.toLocaleString()
}}입니다.
</NumberInputWithInfo>
</div>
<div class="col">
<NumberInputWithInfo v-model="nationPolicy.reqHumanWarRecommandGold" :step="100" title="유저전투장 권장 금">
<NumberInputWithInfo
v-model="nationPolicy.reqHumanWarRecommandGold"
:step="100"
title="유저전투장 권장 금"
>
유저전투장에게 주는 금입니다. 이보다 적으면 포상합니다.
<br />
0이면 유저전투장 긴급포상 금의 2배를 기준으로 하며, 수치는 현재
{{ (calcPolicyValue("reqHumanWarUrgentGold") * 2).toLocaleString() }}입니다.
{{
(calcPolicyValue("reqHumanWarUrgentGold") * 2).toLocaleString()
}}입니다.
</NumberInputWithInfo>
</div>
<div class="col">
<NumberInputWithInfo v-model="nationPolicy.reqHumanWarRecommandRice" :step="100" title="유저전투장 권장 쌀">
<NumberInputWithInfo
v-model="nationPolicy.reqHumanWarRecommandRice"
:step="100"
title="유저전투장 권장 쌀"
>
유저전투장에게 주는 쌀입니다. 이보다 적으면 포상합니다.
<br />
0이면 유저전투장 긴급포상 쌀의 2배를 기준으로 하며, 수치는 현재
{{ (calcPolicyValue("reqHumanWarUrgentRice") * 2).toLocaleString() }}입니다.
{{
(calcPolicyValue("reqHumanWarUrgentRice") * 2).toLocaleString()
}}입니다.
</NumberInputWithInfo>
</div>
<div class="col">
<NumberInputWithInfo v-model="nationPolicy.reqHumanDevelGold" :step="100" title="유저내정장 권장 금">
유저내정장에게 주는 금입니다. 이보다 적으면 포상합니다.
<NumberInputWithInfo
v-model="nationPolicy.reqHumanDevelGold"
:step="100"
title="유저내정장 권장 금"
>
유저내정장에게 주는 금입니다. 이보다 적으면
포상합니다.
</NumberInputWithInfo>
</div>
<div class="col">
<NumberInputWithInfo v-model="nationPolicy.reqHumanDevelRice" :step="100" title="유저내정장 권장 쌀">
유저내정장에게 주는 쌀입니다. 이보다 적으면 포상합니다.
<NumberInputWithInfo
v-model="nationPolicy.reqHumanDevelRice"
:step="100"
title="유저내정장 권장 쌀"
>
유저내정장에게 주는 쌀입니다. 이보다 적으면
포상합니다.
</NumberInputWithInfo>
</div>
<div class="col">
@@ -73,7 +113,9 @@
<br />
0이면 기본 병종 4({{ (defaultStatNPCMax * 100).toLocaleString() }}
* 4) 징병비를 기준으로 하며, 수치는 현재
{{ zeroPolicy.reqNPCWarGold.toLocaleString() }}입니다.
{{
zeroPolicy.reqNPCWarGold.toLocaleString()
}}입니다.
</NumberInputWithInfo>
</div>
<div class="col">
@@ -81,21 +123,26 @@
NPC전투장에게 주는 쌀입니다. 이보다 적으면 포상합니다.
<br />
0이면 기본 병종으로
{{ (defaultStatNPCMax * 100).toLocaleString() }} * 4 사살 가능한 쌀을 기준으로 하며, 수치는 현재
{{ zeroPolicy.reqNPCWarRice.toLocaleString() }}입니다.
{{ (defaultStatNPCMax * 100).toLocaleString() }} * 4 사살 가능한
쌀을 기준으로 하며, 수치는 현재
{{
zeroPolicy.reqNPCWarRice.toLocaleString()
}}입니다.
</NumberInputWithInfo>
</div>
<div class="col">
<NumberInputWithInfo v-model="nationPolicy.reqNPCDevelGold" :step="100" title="NPC내정장 권장 금">
NPC내정장에게 주는 금입니다. 이보다 5배 많다면 헌납합니다.
<br />
0이면 30 내정 가능한 금을 기준으로 하며, 수치는 현재
0이면
30 내정 가능한 금을 기준으로 하며, 수치는 현재
{{ zeroPolicy.reqNPCDevelGold }}입니다.
</NumberInputWithInfo>
</div>
<div class="col">
<NumberInputWithInfo v-model="nationPolicy.reqNPCDevelRice" :step="100" title="NPC내정장 권장 쌀">
NPC내정장에게 주는 쌀입니다. 이보다 5배 많다면 헌납합니다.
NPC내정장에게 주는 쌀입니다. 이보다 5배 많다면
헌납합니다.
</NumberInputWithInfo>
</div>
<div class="col">
@@ -103,23 +150,21 @@
v-model="nationPolicy.minimumResourceActionAmount"
:step="100"
title="포상/몰수/헌납/삼/팜 최소 단위"
>
연산결과가 단위보다 적다면 수행하지 않습니다.
</NumberInputWithInfo>
>연산결과가 단위보다 적다면 수행하지 않습니다.</NumberInputWithInfo>
</div>
<div class="col">
<NumberInputWithInfo
v-model="nationPolicy.maximumResourceActionAmount"
:step="100"
title="포상/몰수/헌납/삼/팜 최대 단위"
>
연산결과가 단위보다 크다면, 값에 맞춥니다.
</NumberInputWithInfo>
>연산결과가 단위보다 크다면, 값에 맞춥니다.</NumberInputWithInfo>
</div>
<div class="col">
<NumberInputWithInfo v-model="nationPolicy.minWarCrew" :step="50" title="최소 전투 가능 병력 수">
이보다 적을 때에는 징병을 시도합니다.
</NumberInputWithInfo>
<NumberInputWithInfo
v-model="nationPolicy.minWarCrew"
:step="50"
title="최소 전투 가능 병력 수"
>이보다 적을 때에는 징병을 시도합니다.</NumberInputWithInfo>
</div>
<div class="col">
<NumberInputWithInfo
@@ -127,27 +172,38 @@
:step="100"
title="NPC 최소 징병 가능 인구 수"
>
도시의 인구가 이보다 낮으면 NPC는 도시에서 징병하지 않고 후방 워프합니다.
<br />NPC의 최대 병력수보다 낮게 설정하면 제자리에서 정착장려를 합니다.
도시의 인구가 이보다 낮으면 NPC는 도시에서 징병하지 않고 후방
워프합니다.
<br />NPC의 최대 병력수보다 낮게 설정하면 제자리에서
정착장려를 합니다.
</NumberInputWithInfo>
</div>
<div class="col">
<NumberInputWithInfo
:modelValue="nationPolicy.safeRecruitCityPopulationRatio * 100"
@update:modelValue="
nationPolicy.safeRecruitCityPopulationRatio = $event / 100
"
:step="0.5"
:int="false"
:min="0"
:max="100"
title="제자리 징병 허용 인구율(%)"
@update:modelValue="nationPolicy.safeRecruitCityPopulationRatio = $event / 100"
>
전쟁 후방 발령, 후방 워프의 기준 인구입니다. 이보다 많다면 '충분하다' 판단합니다.
<br />NPC의 최대 병력수보다 낮게 설정하면 제자리에서 정착장려를 합니다.
전쟁 후방 발령, 후방 워프의 기준 인구입니다. 이보다 많다면
'충분하다' 판단합니다.
<br />NPC의 최대 병력수보다 낮게 설정하면
제자리에서 정착장려를 합니다.
</NumberInputWithInfo>
</div>
<div class="col">
<NumberInputWithInfo v-model="nationPolicy.minNPCWarLeadership" :step="5" title="NPC 전투 참여 통솔 기준">
수치보다 같거나 높으면 NPC전투장으로 분류됩니다.
<NumberInputWithInfo
v-model="nationPolicy.minNPCWarLeadership"
:step="5"
title="NPC 전투 참여 통솔 기준"
>
수치보다 같거나 높으면 NPC전투장으로
분류됩니다.
</NumberInputWithInfo>
</div>
<div class="col">
@@ -158,27 +214,44 @@
:max="100"
title="훈련/사기진작 목표치"
>
훈련/사기진작 기준치입니다. 이보다 같거나 높으면 출병합니다.
훈련/사기진작 기준치입니다. 이보다 같거나 높으면
출병합니다.
</NumberInputWithInfo>
</div>
<!--allowNpcAttackCity는 현재 게임 비활성-->
</div>
<div style="padding: 0 8pt">
<div class="alert alert-secondary">
전투 부대는 작업중입니다(json양식: {부대번호:[시작도시번호(아국),도착도시번호(적군)],...})
<br />후방 징병 부대는 작업중입니다(json양식: [부대번호,...]) <br />내정 부대는 작업중입니다(json양식:
[부대번호,...])
<input id="CombatForce" type="hidden" :value="JSON.stringify(nationPolicy.CombatForce)" data-type="json" />
<input id="SupportForce" type="hidden" :value="JSON.stringify(nationPolicy.SupportForce)" data-type="json" />
<input id="DevelopForce" type="hidden" :value="JSON.stringify(nationPolicy.DevelopForce)" data-type="json" />
전투 부대는 작업중입니다(json양식:
{부대번호:[시작도시번호(아국),도착도시번호(적군)],...})
<br />후방 징병 부대는 작업중입니다(json양식: [부대번호,...])
<br />내정 부대는 작업중입니다(json양식: [부대번호,...])
<input
type="hidden"
:value="JSON.stringify(nationPolicy.CombatForce)"
data-type="json"
id="CombatForce"
/>
<input
type="hidden"
:value="JSON.stringify(nationPolicy.SupportForce)"
data-type="json"
id="SupportForce"
/>
<input
type="hidden"
:value="JSON.stringify(nationPolicy.DevelopForce)"
data-type="json"
id="DevelopForce"
/>
</div>
</div>
<div class="control_bar" data-type="nationPolicy">
<div class="btn-group" role="group">
<button type="button" class="btn btn-dark reset_btn" @click="resetPolicy">초기값으로</button>
<button type="button" class="btn btn-secondary revert_btn" @click="rollbackPolicy">이전값으로</button>
<button type="button" @click="resetPolicy" class="btn btn-dark reset_btn">초기값으로</button>
<button type="button" @click="rollbackPolicy" class="btn btn-secondary revert_btn">이전값으로</button>
</div>
<button type="button" class="btn btn-primary submit_btn" @click="submitPolicy">설정</button>
<button type="button" @click="submitPolicy" class="btn btn-primary submit_btn">설정</button>
</div>
<div class="row row-cols-md-2 row-cols-1 g-0">
<div class="col half_section_left">
@@ -193,7 +266,8 @@
<div class="text-left px-2">
<small class="text-muted">
예턴이 없거나, 지정되어 있더라도 실패하면
<br />아래 순위에 따라 사령턴을 시도합니다.
<br />아래 순위에 따라
사령턴을 시도합니다.
</small>
</div>
<div>
@@ -211,14 +285,16 @@
</template>
<template #item="{ element }">
<div class="list-group-item">
<i class="bi bi-list" />
&nbsp;&nbsp;{{ element.id }}
<i class="bi bi-list"></i>
&nbsp;&nbsp;{{
element.id
}}
<button
v-b-tooltip.hover
class="btn btn-sm float-right btn-secondary py-0 px-1"
v-b-tooltip.hover
:title="actionHelpText[element.id]"
>
<i class="bi bi-question-lg" />
<i class="bi bi-question-lg"></i>
</button>
</div>
</template>
@@ -234,14 +310,16 @@
>
<template #item="{ element }">
<div class="list-group-item">
<i class="bi bi-list" />
&nbsp;&nbsp;{{ element.id }}
<i class="bi bi-list"></i>
&nbsp;&nbsp;{{
element.id
}}
<button
v-b-tooltip.hover
class="btn btn-sm float-right btn-secondary py-0 px-1"
v-b-tooltip.hover
:title="actionHelpText[element.id]"
>
<i class="bi bi-question-lg" />
<i class="bi bi-question-lg"></i>
</button>
</div>
</template>
@@ -250,12 +328,22 @@
</div>
<div class="control_bar" data-type="nationPriority">
<div class="btn-group" role="group">
<button type="button" class="btn btn-dark reset_btn" @click="resetNationPriority">초기값으로</button>
<button type="button" class="btn btn-secondary revert_btn" @click="rollbackNationPriority">
이전값으로
</button>
<button
type="button"
class="btn btn-dark reset_btn"
@click="resetNationPriority"
>초기값으로</button>
<button
type="button"
class="btn btn-secondary revert_btn"
@click="rollbackNationPriority"
>이전값으로</button>
</div>
<button type="button" class="btn btn-primary submit_btn" @click="submitNationPriority">설정</button>
<button
type="button"
class="btn btn-primary submit_btn"
@click="submitNationPriority"
>설정</button>
</div>
</div>
</div>
@@ -271,7 +359,8 @@
<div class="text-left px-2">
<small class="text-muted">
순위가 높은 것부터 시도합니다.
<br />아무것도 실행할 없으면 물자조달이나 인재탐색을 합니다.
<br />아무것도 실행할 없으면
물자조달이나 인재탐색을 합니다.
</small>
</div>
<div>
@@ -289,14 +378,16 @@
</template>
<template #item="{ element }">
<div class="list-group-item">
<i class="bi bi-list" />
&nbsp;&nbsp;{{ element.id }}
<i class="bi bi-list"></i>
&nbsp;&nbsp;{{
element.id
}}
<button
v-b-tooltip.hover
class="btn btn-sm float-right btn-secondary py-0 px-1"
v-b-tooltip.hover
:title="actionHelpText[element.id]"
>
<i class="bi bi-question-lg" />
<i class="bi bi-question-lg"></i>
</button>
</div>
</template>
@@ -312,14 +403,16 @@
>
<template #item="{ element }">
<div class="list-group-item">
<i class="bi bi-list" />
&nbsp;&nbsp;{{ element.id }}
<i class="bi bi-list"></i>
&nbsp;&nbsp;{{
element.id
}}
<button
v-b-tooltip.hover
class="btn btn-sm float-right btn-secondary py-0 px-1"
v-b-tooltip.hover
:title="actionHelpText[element.id]"
>
<i class="bi bi-question-lg" />
<i class="bi bi-question-lg"></i>
</button>
</div>
</template>
@@ -328,12 +421,22 @@
</div>
<div class="control_bar" data-type="generalPriority">
<div class="btn-group" role="group">
<button type="button" class="btn btn-dark reset_btn" @click="resetGeneralPriority">초기값으로</button>
<button type="button" class="btn btn-secondary revert_btn" @click="rollbackGeneralPriority">
이전값으로
</button>
<button
type="button"
class="btn btn-dark reset_btn"
@click="resetGeneralPriority"
>초기값으로</button>
<button
type="button"
class="btn btn-secondary revert_btn"
@click="rollbackGeneralPriority"
>이전값으로</button>
</div>
<button type="button" class="btn btn-primary submit_btn" @click="submitGeneralPriority">설정</button>
<button
type="button"
class="btn btn-primary submit_btn"
@click="submitGeneralPriority"
>설정</button>
</div>
</div>
</div>
@@ -341,6 +444,7 @@
</BContainer>
</template>
<script lang="ts">
type SetterInfo = {
setter: string | null;
date: string | null;
@@ -376,7 +480,13 @@ import "@scss/common/bootstrap5.scss";
import "@scss/game_bg.scss";
import { ref } from "vue";
import type { IDItem, InvalidResponse, NationPolicy, NPCChiefActions, NPCGeneralActions } from "@/defs";
import {
IDItem,
InvalidResponse,
NationPolicy,
NPCChiefActions,
NPCGeneralActions,
} from "@/defs";
import NumberInputWithInfo from "@/components/NumberInputWithInfo.vue";
import { cloneDeep, isEqual, isNumber, last } from "lodash";
import { unwrap } from "@util/unwrap";
@@ -386,7 +496,8 @@ import { NPCPriorityBtnHelpMessage } from "@/helpTexts";
import draggable from "vuedraggable";
import TopBackBar from "@/components/TopBackBar.vue";
import { convertIDArray } from "@util/convertIDArray";
import { useToast, BContainer } from "bootstrap-vue-3";
import { useToast } from 'bootstrap-vue-3/src/components/BToast/plugin';
import BContainer from "bootstrap-vue-3/src/components/BContainer.vue";
const chiefActionPriority = ref<IDItem<NPCChiefActions>[]>([]);
const chiefActionKeys = ref(new Set(staticValues.availableNationPriorityItems));
@@ -423,8 +534,8 @@ function resetPolicy() {
}
nationPolicy.value = cloneDeep(staticValues.defaultNationPolicy);
toasts.info({
title: "초기화 완료",
body: "서버 초기값을 적용했습니다.설정 버튼을 누르면 반영됩니다.",
title: '초기화 완료',
body: "서버 초기값을 적용했습니다.설정 버튼을 누르면 반영됩니다."
});
}
@@ -486,7 +597,9 @@ async function submitPolicy() {
}
}
function calcPolicyValue(title: keyof NationPolicy): number {
function calcPolicyValue(
title: keyof NationPolicy
): number {
if (!(title in nationPolicy.value)) {
throw `${title}이 NationPolicy key가 아님`;
}
@@ -633,7 +746,9 @@ async function submitGeneralPriority() {
method: "post",
data: convertFormData({
type: "generalPriority",
data: JSON.stringify(generalActionPriority.value.map(({ id }) => id)),
data: JSON.stringify(
generalActionPriority.value.map(({ id }) => id)
),
}),
});
const result: InvalidResponse = response.data;
@@ -714,4 +829,4 @@ async function submitGeneralPriority() {
padding-right: 0;
padding-left: 0;
}
</style>
</style>
+33 -17
View File
@@ -1,21 +1,27 @@
<template>
<BContainer id="container" :toast="{ root: true }" class="pageNationBetting bg0">
<TopBackBar :title="title" />
<BettingDetail v-if="targetBettingID !== undefined" :bettingID="targetBettingID" @reqToast="addToast" />
<BettingDetail
v-if="targetBettingID !== undefined"
:bettingID="targetBettingID"
@reqToast="addToast"
/>
<div v-if="bettingList === undefined">로딩 중...</div>
<div v-else class="bettingList">
<div class="bettingList" v-else>
<div class="bg2">베팅 목록</div>
<div
class="bettingItem"
v-for="info of Object.values(bettingList).reverse()"
:key="info.id"
class="bettingItem"
@click="targetBettingID = info.id"
>
[{{ parseYearMonth(info.openYearMonth)[0] }} {{ parseYearMonth(info.openYearMonth)[1] }}] {{ info.name }}
<span v-if="info.finished">(종료)</span>
<span v-else-if="(yearMonth ?? 0) <= info.closeYearMonth"
>({{ parseYearMonth(info.closeYearMonth)[0] }} {{ parseYearMonth(info.closeYearMonth)[1] }}월까지)</span
>
<span
v-if="info.finished"
>(종료)</span>
<span
v-else-if="(yearMonth ?? 0) <= info.closeYearMonth"
>({{ parseYearMonth(info.closeYearMonth)[0] }} {{ parseYearMonth(info.closeYearMonth)[1] }}월까지)</span>
<span v-else>(베팅 마감)</span>
</div>
</div>
@@ -27,35 +33,42 @@
<script lang="ts" setup>
import TopBackBar from "@/components/TopBackBar.vue";
import BottomBar from "@/components/BottomBar.vue";
import type { ToastType } from "@/defs";
import { BettingInfo, ToastType } from "@/defs";
import { onMounted, ref } from "vue";
import { SammoAPI } from "./SammoAPI";
import { SammoAPI, ValidResponse } from "./SammoAPI";
import { isString } from "lodash";
import { parseYearMonth } from "@/util/parseYearMonth";
import { joinYearMonth } from "./util/joinYearMonth";
import BettingDetail from "@/components/BettingDetail.vue";
import { BContainer, useToast } from "bootstrap-vue-3";
import { useToast } from "bootstrap-vue-3/src/components/BToast/plugin";
import { unwrap } from "./util/unwrap";
import type { BettingListResponse } from "./defs/API/Betting";
import BContainer from "bootstrap-vue-3/src/components/BContainer.vue";
type BettingListResponse = ValidResponse & {
bettingList: Record<number, Omit<BettingInfo & { totalAmount: number }, 'candidates'>>,
year: number,
month: number,
};
const toasts = unwrap(useToast());
const year = ref<number>();
const month = ref<number>();
const yearMonth = ref<number>();
const bettingList = ref<BettingListResponse["bettingList"]>();
const bettingList = ref<BettingListResponse['bettingList']>();
const targetBettingID = ref<number>();
function addToast(msg: ToastType) {
toasts.show(msg.content, msg.options);
}
console.log("시작!");
console.log('시작!');
onMounted(async () => {
try {
const result = await SammoAPI.Betting.GetBettingList();
const result = await SammoAPI.Betting.GetBettingList<BettingListResponse>();
year.value = result.year;
month.value = result.month;
yearMonth.value = joinYearMonth(result.year, result.month);
@@ -72,5 +85,8 @@ onMounted(async () => {
}
});
const title = "국가 베팅장";
</script>
const title = '국가 베팅장';
</script>
-121
View File
@@ -1,121 +0,0 @@
<template>
<BContainer id="container" :toast="{ root: true }" class="pageNationGeneral bg0">
<TopBackBar :title="title" :reloadable="true" @reload="reload" :teleport-zone="toolbarID" />
<!-- eslint-disable-next-line vue/max-attributes-per-line -->
<GeneralList
v-if="asyncReady"
:list="generalList"
:troops="troopList"
:env="envVal"
:toolbarID="toolbarID"
role="pageNationGeneral"
:height="'fill'"
:availableGeneralClick="true"
@generalClick="openBattleCenter"
/>
<!--<BottomBar />-->
</BContainer>
</template>
<script lang="ts">
/*declare const staticValues: {
serverNick: string,
mapName: string,
unitSet: string,
};*/
</script>
<script lang="ts" setup>
import TopBackBar from "@/components/TopBackBar.vue";
//import BottomBar from "@/components/BottomBar.vue";
import { BContainer } from "bootstrap-vue-3";
import { onMounted, provide, ref } from "vue";
import { SammoAPI } from "./SammoAPI";
import { merge2DArrToObjectArr } from "./util/merge2DArrToObjectArr";
import type { GeneralListItem, GeneralListResponse } from "./defs/API/Nation";
import GeneralList from "./components/GeneralList.vue";
import { type GameConstStore, getGameConstStore } from "./GameConstStore";
const generalList = ref<GeneralListItem[]>([]);
const troopList = ref<Record<number, string>>({});
const envVal = ref<GeneralListResponse["env"]>({
year: 1,
month: 1,
turnterm: 1,
turntime: "2022-02-22 22:22:22.22222",
killturn: 80,
});
const toolbarID = "toolbar-id";
const gameConstStore = ref<GameConstStore>();
provide("gameConstStore", gameConstStore);
const asyncReady = ref(false);
const title = "세력 장수";
const storeP = getGameConstStore().then((store) => {
gameConstStore.value = store;
});
void Promise.all([storeP]).then(() => {
asyncReady.value = true;
});
async function reload() {
try {
const { column, list, permission, troops, env } = await SammoAPI.Nation.GeneralList();
troopList.value = {};
//XXX: 로직상 똑같은데....
if (permission == 0) {
const rawGeneralList = merge2DArrToObjectArr(column, list);
generalList.value = rawGeneralList.map((v) => {
return { permission, st0: true, st1: false, st2: false, ...v };
});
} else if (permission == 1) {
const rawGeneralList = merge2DArrToObjectArr(column, list);
generalList.value = rawGeneralList.map((v) => {
return { permission, st0: true, st1: true, st2: false, ...v };
});
} else if ([2, 3, 4].includes(permission)) {
const rawGeneralList = merge2DArrToObjectArr(column, list);
generalList.value = rawGeneralList.map((v) => {
return { permission, st0: true, st1: true, st2: true, ...v };
});
for (const [troopLeader, troopName] of troops) {
troopList.value[troopLeader] = troopName;
}
} else {
throw `?? ${permission}`;
}
envVal.value = env;
} catch (e) {
console.error(e);
throw e;
}
}
function openBattleCenter(generalID: number){
window.open(`b_battleCenter.php?gen=${generalID}`)
}
onMounted(async () => {
await reload();
});
</script>
<style lang="scss">
html,
body,
#app {
height: 100%;
}
.pageNationGeneral {
display: grid;
//grid-template-rows: auto 1fr auto;
grid-template-rows: auto 1fr;
height: 100%;
}
</style>
+120 -48
View File
@@ -1,5 +1,5 @@
<template>
<BContainer id="container" :toast="{ root: true }" class="pageNationStratFinan bg0">
<BContainer :toast="{root: true}" id="container" class="pageNationStratFinan bg0">
<TopBackBar title="내무부" />
<div class="diplomacyTitle">외교관계</div>
<div class="diplomacyTable">
@@ -12,7 +12,11 @@
<div>기간</div>
<div>종료 시점</div>
</div>
<div v-for="nation in nationsList" :key="nation.nation" :class="['diplomacyItem', 'tRow', 's-border-b']">
<div
:class="['diplomacyItem', 'tRow', 's-border-b']"
v-for="nation in nationsList"
:key="nation.nation"
>
<div :class="`sam-nation-bg-${nation.color.slice(1)}`">
{{ nation.name }}
</div>
@@ -25,21 +29,28 @@
<template v-else>
<div
:style="{
color: diplomacyStateInfo[nation.diplomacy.state].color ?? undefined,
color:
diplomacyStateInfo[nation.diplomacy.state].color ?? undefined,
}"
>
{{ diplomacyStateInfo[nation.diplomacy.state].name }}
</div>
<div>
{{ nation.diplomacy.term == 0 ? "-" : `${nation.diplomacy.term}개월` }}
{{
nation.diplomacy.term == 0 ? "-" : `${nation.diplomacy.term}개월`
}}
</div>
<div
v-for="([endYear, endMonth], _idx) in [
parseYearMonth(joinYearMonth(year, month) + (nation.diplomacy.term ?? 0)),
parseYearMonth(
joinYearMonth(year, month) + (nation.diplomacy.term??0)
),
]"
:key="_idx"
>
{{ nation.diplomacy.term == 0 ? "-" : `${endYear}년 ${endMonth}월` }}
{{
nation.diplomacy.term == 0 ? "-" : `${endYear}년 ${endMonth}월`
}}
</div>
</template>
</div>
@@ -49,9 +60,19 @@
<div class="bg1" style="display: flex; justify-content: space-around">
<div style="flex: 1 1 auto">국가 방침</div>
<div>
<b-button v-if="editable && !inEditNationMsg" @click="enableEditNationMsg"> 국가방침 수정 </b-button>
<b-button v-if="editable && inEditNationMsg" @click="saveNationMsg"> 저장 </b-button>
<b-button v-if="editable && inEditNationMsg" @click="rollbackNationMsg"> 취소 </b-button>
<b-button
@click="enableEditNationMsg"
v-if="editable && !inEditNationMsg"
>국가방침 수정</b-button
>
<b-button @click="saveNationMsg" v-if="editable && inEditNationMsg"
>저장</b-button
>
<b-button
v-if="editable && inEditNationMsg"
@click="rollbackNationMsg"
>취소</b-button
>
</div>
</div>
<TipTap
@@ -66,12 +87,22 @@
<div class="bg1" style="display: flex; justify-content: space-around">
<div style="flex: 1 1 auto">임관 권유</div>
<div>
<b-button v-if="editable && !inEditScoutMsg" @click="enableEditScoutMsg"> 임관 권유문 수정 </b-button>
<b-button v-if="editable && inEditScoutMsg" @click="saveScoutMsg"> 저장 </b-button>
<b-button v-if="editable && inEditScoutMsg" @click="rollbackScoutMsg"> 취소 </b-button>
<b-button
@click="enableEditScoutMsg"
v-if="editable && !inEditScoutMsg"
>임관 권유문 수정</b-button
>
<b-button @click="saveScoutMsg" v-if="editable && inEditScoutMsg"
>저장</b-button
>
<b-button v-if="editable && inEditScoutMsg" @click="rollbackScoutMsg"
>취소</b-button
>
</div>
</div>
<div style="border-bottom: solid gray 0.5px">870px x 200px를 넘어서는 내용은 표시되지 않습니다.</div>
<div style="border-bottom: solid gray 0.5px">
870px x 200px를 넘어서는 내용은 표시되지 않습니다.
</div>
<div style="width: 870px; margin-left: auto">
<TipTap
v-model="scoutMsg"
@@ -88,13 +119,9 @@
<div class="row gx-0">
<div class="col-12 bg2">자금 예산</div>
<div class="col-4 bg1">현 재</div>
<div class="col-8">
{{ gold.toLocaleString() }}
</div>
<div class="col-8">{{ gold.toLocaleString() }}</div>
<div class="col-4 bg1">단기수입</div>
<div class="col-8">
{{ income.gold.war.toLocaleString() }}
</div>
<div class="col-8">{{ income.gold.war.toLocaleString() }}</div>
<div class="col-4 bg1">세 금</div>
<div class="col-8">
{{ Math.floor(incomeGoldCity).toLocaleString() }}
@@ -107,7 +134,8 @@
<div class="col-4 bg1">국고 예산</div>
<div class="col-8">
{{ Math.floor(gold + incomeGold - outcomeByBill).toLocaleString() }}
({{ incomeGold >= outcomeByBill ? "+" : "" }}{{ Math.floor(incomeGold - outcomeByBill).toLocaleString() }})
({{ incomeGold >= outcomeByBill ? "+" : ""
}}{{ Math.floor(incomeGold - outcomeByBill).toLocaleString() }})
</div>
</div>
</div>
@@ -115,9 +143,7 @@
<div class="row gx-0">
<div class="col-12 bg2">군량 예산</div>
<div class="col-4 bg1">현 재</div>
<div class="col-8">
{{ rice.toLocaleString() }}
</div>
<div class="col-8">{{ rice.toLocaleString() }}</div>
<div class="col-4 bg1">둔전수입</div>
<div class="col-8">
{{ Math.floor(incomeRiceWall).toLocaleString() }}
@@ -134,27 +160,37 @@
<div class="col-4 bg1">국고 예산</div>
<div class="col-8">
{{ Math.floor(rice + incomeRice - outcomeByBill).toLocaleString() }}
({{ incomeRice >= outcomeByBill ? "+" : "" }}{{ Math.floor(incomeRice - outcomeByBill).toLocaleString() }})
({{ incomeRice >= outcomeByBill ? "+" : ""
}}{{ Math.floor(incomeRice - outcomeByBill).toLocaleString() }})
</div>
</div>
</div>
<div class="col-6">
<div class="row gx-0">
<div class="col-4 bg1 d-grid">
<div class="align-self-center">세율 <span class="avoid-wrap">(5 ~ 30%)</span></div>
<div class="align-self-center">
세율 <span class="avoid-wrap">(5 ~ 30%)</span>
</div>
</div>
<div class="col-8 row gx-0">
<div class="col-md-6 offset-md-3 align-self-center">
<div class="input-group my-0">
<input
v-model="policy.rate"
type="number"
class="form-control py-1 f_tnum px-0 text-end"
v-model="policy.rate"
min="5"
max="30"
/><span class="input-group-text py-1 f_tnum">%</span
><b-button v-if="editable" variant="primary" size="sm" @click="setRate"> 변경 </b-button
><b-button v-if="editable" size="sm" @click="rollbackRate"> 취소 </b-button>
><b-button
variant="primary"
size="sm"
@click="setRate"
v-if="editable"
>변경</b-button
><b-button size="sm" @click="rollbackRate" v-if="editable"
>취소</b-button
>
</div>
</div>
</div>
@@ -163,20 +199,29 @@
<div class="col-6">
<div class="row gx-0">
<div class="col-4 bg1 d-grid">
<div class="align-self-center">지급률 <span class="avoid-wrap">(20 ~ 200%)</span></div>
<div class="align-self-center">
지급률 <span class="avoid-wrap">(20 ~ 200%)</span>
</div>
</div>
<div class="col-8 row gx-0">
<div class="col-md-6 offset-md-3 align-self-center">
<div class="input-group my-0">
<input
v-model="policy.bill"
type="number"
class="form-control py-1 f_tnum px-0 text-end"
v-model="policy.bill"
min="20"
max="200"
/><span class="input-group-text py-1 f_tnum">%</span
><b-button v-if="editable" variant="primary" size="sm" @click="setBill"> 변경 </b-button
><b-button v-if="editable" size="sm" @click="rollbackBill"> 취소 </b-button>
><b-button
variant="primary"
size="sm"
@click="setBill"
v-if="editable"
>변경</b-button
><b-button size="sm" @click="rollbackBill" v-if="editable"
>취소</b-button
>
</div>
</div>
</div>
@@ -185,20 +230,32 @@
<div class="col-6">
<div class="row gx-0">
<div class="col-4 bg1 d-grid">
<div class="align-self-center">기밀 권한 <span class="avoid-wrap">(1 ~ 99년)</span></div>
<div class="align-self-center">
기밀 권한 <span class="avoid-wrap">(1 ~ 99년)</span>
</div>
</div>
<div class="col-8 row gx-0">
<div class="col-md-6 offset-md-3 align-self-center">
<div class="input-group my-0">
<input
v-model="policy.secretLimit"
type="number"
class="form-control py-1 f_tnum px-0 text-end"
v-model="policy.secretLimit"
min="1"
max="99"
/><span class="input-group-text py-1 f_tnum">년</span
><b-button v-if="editable" variant="primary" size="sm" @click="setSecretLimit"> 변경 </b-button
><b-button v-if="editable" size="sm" @click="rollbackSecretLimit"> 취소 </b-button>
><b-button
variant="primary"
size="sm"
@click="setSecretLimit"
v-if="editable"
>변경</b-button
><b-button
size="sm"
@click="rollbackSecretLimit"
v-if="editable"
>취소</b-button
>
</div>
</div>
</div>
@@ -210,23 +267,29 @@
<div class="align-self-center">전쟁 금지 설정</div>
</div>
<div class="col-8 d-grid">
<div class="align-self-center">
{{ warSettingCnt.remain }} 회(월 +{{ warSettingCnt.inc }}회, 최대{{ warSettingCnt.max }}회)
</div>
<div class="align-self-center">{{warSettingCnt.remain}} 회(월 +{{warSettingCnt.inc}}회, 최대{{warSettingCnt.max}}회)</div>
</div>
</div>
</div>
<div class="col-3 col-md-4" />
<div class="col-3 col-md-4"></div>
<div class="col-3 col-md-2 row gx-0">
<div class="col-9 col-md-8 text-end p-2">전쟁 금지</div>
<div class="col-3 col-md-4 py-2">
<b-form-checkbox v-model="policy.blockWar" switch @change="setBlockWar" />
<b-form-checkbox
v-model="policy.blockWar"
@change="setBlockWar"
switch
/>
</div>
</div>
<div class="col-3 col-md-2 row gx-0">
<div class="col-9 col-md-8 text-end p-2">임관 금지</div>
<div class="col-3 col-md-4 py-2">
<b-form-checkbox v-model="policy.blockScout" switch @change="setBlockScout" />
<b-form-checkbox
v-model="policy.blockScout"
@change="setBlockScout"
switch
/>
</div>
</div>
</div>
@@ -240,11 +303,17 @@ import TopBackBar from "@/components/TopBackBar.vue";
import BottomBar from "@/components/BottomBar.vue";
import { computed, defineComponent, reactive, ref, toRefs } from "vue";
import { isString } from "lodash";
import { type diplomacyState, diplomacyStateInfo, type NationStaticItem } from "./defs";
import {
diplomacyState,
diplomacyStateInfo,
NationStaticItem,
} from "./defs";
import { SammoAPI } from "./SammoAPI";
import { joinYearMonth } from "@/util/joinYearMonth";
import { parseYearMonth } from "@/util/parseYearMonth";
import { useToast, BContainer } from "bootstrap-vue-3";
import { ValidResponse } from "./util/callSammoAPI";
import BContainer from "bootstrap-vue-3/src/components/BContainer.vue";
import { useToast } from "bootstrap-vue-3/src/components/BToast/plugin";
import { unwrap } from "./util/unwrap";
type NationItem = NationStaticItem & {
@@ -255,6 +324,9 @@ type NationItem = NationStaticItem & {
};
};
type SetBlockWarResponse = ValidResponse & {
availableCnt: number;
}
declare const staticValues: {
editable: boolean;
nationMsg: string;
@@ -298,8 +370,8 @@ export default defineComponent({
TopBackBar,
BottomBar,
TipTap,
BContainer,
},
BContainer
},
setup() {
const toasts = unwrap(useToast());
const self = reactive(staticValues);
@@ -497,7 +569,7 @@ export default defineComponent({
async function setBlockWar() {
try {
const result = await SammoAPI.Nation.SetBlockWar({ value: self.policy.blockWar });
const result = await SammoAPI.Nation.SetBlockWar<SetBlockWarResponse>({ value: self.policy.blockWar });
self.warSettingCnt.remain = result.availableCnt;
toasts.info({
title: "변경",
@@ -573,4 +645,4 @@ export default defineComponent({
},
methods: {},
});
</script>
</script>
+489 -653
View File
@@ -3,193 +3,115 @@
<div class="col alert alert-dark m-0 p-1 center">
<h4 class="m-0">명령 목록</h4>
</div>
<div class="row gx-1">
<div class="col d-grid">
<BButton variant="secondary" @click="isEditMode = !isEditMode">
{{ isEditMode ? "일반 모드로" : "고급 모드로" }}
</BButton>
<b-dropdown left text="턴 선택">
<b-dropdown-item @click="selectTurn()">해제</b-dropdown-item>
<b-dropdown-item @click="selectAll(true)">모든턴</b-dropdown-item>
<b-dropdown-item @click="selectStep(0, 2)">홀수턴</b-dropdown-item>
<b-dropdown-item @click="selectStep(1, 2)">짝수턴</b-dropdown-item>
<b-dropdown-divider></b-dropdown-divider>
<b-dropdown-text v-for="spanIdx in [3, 4, 5, 6, 7]" :key="spanIdx">
{{ spanIdx }} 간격<br />
<b-button-group>
<b-button
class="ignoreMe"
v-for="beginIdx in spanIdx"
:key="beginIdx"
@click="selectStep(beginIdx - 1, spanIdx)"
>{{ beginIdx }}</b-button
>
</b-button-group>
</b-dropdown-text>
</b-dropdown>
</div>
<div
class="col alert alert-primary m-0 p-0"
style="text-align: center; display: flex; justify-content: center; align-items: center"
style="
text-align: center;
display: flex;
justify-content: center;
align-items: center;
"
>
<SimpleClock :serverTime="serverNow" />
{{ serverNow }}
</div>
<div class="col d-grid">
<BDropdown right text="반복">
<BDropdownItem v-for="turnIdx in maxPushTurn" :key="turnIdx" @click="repeatGeneralCommand(turnIdx)">
{{ turnIdx }}
</BDropdownItem>
</BDropdown>
<b-dropdown right text="반복">
<b-dropdown-item
v-for="turnIdx in maxPushTurn"
:key="turnIdx"
@click="repeatGeneralCommand(turnIdx)"
>{{ turnIdx }}
</b-dropdown-item>
</b-dropdown>
</div>
</div>
<div v-if="isEditMode" class="row gx-1">
<div class="col-4 d-grid">
<BDropdown left text="범위">
<BDropdownItem @click="queryActionHelper.selectTurn()"> 해제 </BDropdownItem>
<BDropdownItem @click="queryActionHelper.selectAll()"> 모든턴 </BDropdownItem>
<BDropdownItem @click="queryActionHelper.selectStep(0, 2)"> 홀수턴 </BDropdownItem>
<BDropdownItem @click="queryActionHelper.selectStep(1, 2)"> 짝수턴 </BDropdownItem>
<BDropdownDivider />
<BDropdownText v-for="spanIdx in [3, 4, 5, 6, 7]" :key="spanIdx">
{{ spanIdx }} 간격
<br />
<BButtonGroup>
<BButton
v-for="beginIdx in spanIdx"
:key="beginIdx"
class="ignoreMe"
@click="queryActionHelper.selectStep(beginIdx - 1, spanIdx)"
>
{{ beginIdx }}
</BButton>
</BButtonGroup>
</BDropdownText>
</BDropdown>
</div>
<div class="col-4 d-grid">
<BDropdown left text="보관함">
<BDropdownItem
v-for="[actionKey, actions] of storedActions"
:key="actionKey"
@click.self="useStoredAction(actions)"
>
{{ actionKey }}
<BButton size="sm" @click.prevent="deleteStoredActions(actionKey)"> 삭제 </BButton>
</BDropdownItem>
</BDropdown>
</div>
<div class="col-4 d-grid">
<BDropdown right text="최근 실행">
<BDropdownItem
v-for="(action, idx) of Array.from(recentActions.values()).reverse()"
:key="idx"
@click="void reserveCommandDirect([[queryActionHelper.getSelectedTurnList(), action]])"
>
{{ action.brief }}
</BDropdownItem>
</BDropdown>
</div>
<div class="col-5 d-grid">
<BDropdown left variant="info" text="선택한 턴을">
<BDropdownItem @click="clipboardCut"> <i class="bi bi-scissors" />&nbsp;잘라내기 </BDropdownItem>
<BDropdownItem @click="clipboardCopy"> <i class="bi bi-files" />&nbsp;복사하기 </BDropdownItem>
<BDropdownItem @click="clipboardPaste"> <i class="bi bi-clipboard-fill" />&nbsp;붙여넣기 </BDropdownItem>
<BDropdownDivider />
<BDropdownItem @click="setStoredActions">
<i class="bi bi-bookmark-plus-fill" />&nbsp;보관하기
</BDropdownItem>
<BDropdownItem @click="subRepeatCommand"> <i class="bi bi-arrow-repeat" />&nbsp;반복하기 </BDropdownItem>
<BDropdownDivider />
<BDropdownItem @click="eraseSelectedTurnList"> <i class="bi bi-eraser" />&nbsp;비우기 </BDropdownItem>
<BDropdownItem @click="eraseAndPullCommand">
<i class="bi bi-arrow-bar-up" />&nbsp;지우고 당기기
</BDropdownItem>
<BDropdownItem @click="pushEmptyCommand"> <i class="bi bi-arrow-bar-down" />&nbsp;뒤로 밀기 </BDropdownItem>
<!-- 최근에 실행한 10 -->
</BDropdown>
</div>
<div class="col-7 d-grid">
<BButton variant="light" :style="{ color: 'black' }" @click="toggleForm($event)"> 명령 선택 </BButton>
</div>
</div>
<CommandSelectForm
ref="commandSelectForm"
v-model:activatedCategory="activatedCategory"
:commandList="commandList"
@onClose="chooseCommand($event)"
/>
<div :style="{ position: 'relative' }">
<div
class="bg-dark"
:style="{
position: 'absolute',
top: `${basicModeRowHeight * currentQuickReserveTarget + 30}px`,
width: '100%',
zIndex: 9,
}"
>
<CommandSelectForm
ref="commandQuickReserveForm"
v-model:activatedCategory="activatedCategory"
:commandList="commandList"
:hideClose="false"
@onClose="chooseQuickReserveCommand($event)"
/>
</div>
</div>
<div
:class="{
commandTable: true,
isEditMode,
}"
>
<div class="commandTable">
<DragSelect
v-slot="{ selected }"
:style="rowGridStyle"
:disabled="!isEditMode"
attribute="turnIdx"
@dragStart="isDragToggle = true"
@dragDone="
isDragToggle = false;
queryActionHelper.toggleTurn(...$event);
toggleTurn(...$event);
"
v-slot="{ selected }"
>
<div
v-for="(turnObj, turnIdx) in reservedCommandList.slice(0, viewMaxTurn)"
:key="turnIdx"
v-for="(turnObj, turnIdx) in reservedCommandList.slice(
0,
viewMaxTurn
)"
:turnIdx="turnIdx"
:key="turnIdx"
class="idx_pad center d-grid"
>
<BButton
v-if="isEditMode"
<b-button
size="sm"
:variant="
isDragToggle && selected.has(`${turnIdx}`)
? 'light'
: selectedTurnList.has(turnIdx)
(isDragToggle && selected.has(`${turnIdx}`))?'light':
turnList.has(turnIdx)
? 'info'
: selectedTurnList.size == 0 && prevSelectedTurnList.has(turnIdx)
: turnList.size == 0 && prevTurnList.has(turnIdx)
? 'success'
: 'primary'
"
>{{ turnIdx + 1 }}</b-button
>
{{ turnIdx + 1 }}
</BButton>
<div v-else class="plain-center">
{{ turnIdx + 1 }}
</div>
</div>
</DragSelect>
<DragSelect
v-slot="{ selected }"
:style="rowGridStyle"
attribute="turnIdx"
:disabled="!isEditMode"
@dragStart="isDragSingle = true"
@dragDone="
isDragSingle = false;
queryActionHelper.selectTurn(...$event);
selectTurn(...$event);
"
v-slot="{ selected }"
>
<div
v-for="(turnObj, turnIdx) in reservedCommandList.slice(0, viewMaxTurn)"
v-for="(turnObj, turnIdx) in reservedCommandList.slice(
0,
viewMaxTurn
)"
:key="turnIdx"
height="24"
class="month_pad center"
:turnIdx="turnIdx"
:style="{
'white-space': 'nowrap',
'font-size': `${Math.min(14, (75 / (`${turnObj.year ?? 1}`.length + 8)) * 1.8)}px`,
'font-size': `${Math.min(
14,
(75 / (`${turnObj.year ?? 1}`.length + 8)) * 1.8
)}px`,
overflow: 'hidden',
color: isDragSingle && selected.has(`${turnIdx}`) ? 'cyan' : undefined,
color:
isDragSingle && selected.has(`${turnIdx}`) ? 'cyan' : undefined,
}"
>
{{ turnObj.year ? `${turnObj.year}年` : "" }}
@@ -198,7 +120,10 @@
</DragSelect>
<div :style="rowGridStyle">
<div
v-for="(turnObj, turnIdx) in reservedCommandList.slice(0, viewMaxTurn)"
v-for="(turnObj, turnIdx) in reservedCommandList.slice(
0,
viewMaxTurn
)"
:key="turnIdx"
class="time_pad center"
:style="{
@@ -212,98 +137,176 @@
</div>
<div :style="rowGridStyle">
<div
v-for="(turnObj, turnIdx) in reservedCommandList.slice(0, viewMaxTurn)"
v-for="(turnObj, turnIdx) in reservedCommandList.slice(
0,
viewMaxTurn
)"
:key="turnIdx"
class="turn_pad center"
@click="chooseCommand(turnObj.action)"
>
<span v-b-tooltip.hover class="turn_text" :style="turnObj.style" :title="turnObj.tooltip">
<!-- eslint-disable-next-line vue/no-v-html -->
<span v-html="turnObj.brief" />
</span>
</div>
</div>
<div v-if="!isEditMode" :style="rowGridStyle">
<div
v-for="(turnObj, turnIdx) in reservedCommandList.slice(0, viewMaxTurn)"
:key="turnIdx"
class="action_pad d-grid"
>
<BButton
:variant="turnIdx % 2 == 0 ? 'secondary' : 'dark'"
size="sm"
class="simple_action_btn bi bi-pencil"
@click="toggleQuickReserveForm(turnIdx)"
/>
<span
class="turn_text"
:style="turnObj.style"
v-b-tooltip.hover
:title="turnObj.tooltip"
v-html="turnObj.brief"
></span>
</div>
</div>
</div>
<div class="row gx-1">
<div class="col d-grid">
<BDropdown :split="isEditMode" text="당기기" @click="pullGeneralCommandSingle">
<BDropdownItem v-for="turnIdx in maxPushTurn" :key="turnIdx" @click="pushGeneralCommand(-turnIdx)">
{{ turnIdx }}
</BDropdownItem>
</BDropdown>
<b-dropdown right split text="당기기" @click="pullGeneralCommandSingle">
<b-dropdown-item
v-for="turnIdx in maxPushTurn"
:key="turnIdx"
@click="pushGeneralCommand(-turnIdx)"
>{{ turnIdx }}턴
</b-dropdown-item>
</b-dropdown>
</div>
<div class="col d-grid">
<BDropdown :split="isEditMode" text="미루기" @click="pushGeneralCommandSingle">
<BDropdownItem v-for="turnIdx in maxPushTurn" :key="turnIdx" @click="pushGeneralCommand(turnIdx)">
{{ turnIdx }}
</BDropdownItem>
</BDropdown>
<b-dropdown right split text="미루기" @click="pushGeneralCommandSingle">
<b-dropdown-item
v-for="turnIdx in maxPushTurn"
:key="turnIdx"
@click="pushGeneralCommand(turnIdx)"
>{{ turnIdx }}턴
</b-dropdown-item>
</b-dropdown>
</div>
<div class="col d-grid">
<BButton @click="toggleViewMaxTurn">
{{ flippedMaxTurn == viewMaxTurn ? "펼치기" : "접기" }}
</BButton>
<b-button @click="toggleViewMaxTurn">{{
flippedMaxTurn == viewMaxTurn ? "펼치기" : "접기"
}}</b-button>
</div>
</div>
<div class="row gx-0">
<div class="col-2 d-grid">
<b-button
:pressed="searchModeOn"
@click="toggleSearchCommand()"
:variant="searchModeOn ? 'info' : 'primary'"
v-b-tooltip.hover
title="검색 기능을 활성화합니다."
><i class="bi bi-search"></i
></b-button>
</div>
<div class="col-7">
<v-multiselect
v-model="selectedCommand"
:allow-empty="false"
:options="commandList"
:group-select="false"
group-values="values"
group-label="category"
label="searchText"
track-by="value"
open-direction="top"
:show-labels="false"
selectLabel="선택(엔터)"
selectGroupLabel=""
selectedLabel="선택됨"
deselectLabel="해제(엔터)"
deselectGroupLabel=""
placeholder="턴 선택"
:maxHeight="400"
:searchable="searchModeOn"
>
<template v-slot:noResult>검색 결과가 없습니다.</template>
<template v-slot:option="props"
><!--FIXME: 카테고리-->
<template v-if="props.option.title">
<span
class="compensatePositive"
v-if="props.option.compensation > 0"
>▲</span
>
<span
class="compensateNegative"
v-else-if="props.option.compensation < 0"
>▼</span
>
<span class="compensateNeutral" v-else></span>
<span :class="[props.option.possible ? '' : 'commandImpossible']">
{{ props.option.title }}
</span>
</template>
<template v-else-if="props.option.category">
{{ props.option.category }}
</template>
</template>
<template v-slot:singleLabel="props">
{{ props.option.simpleName }}
</template>
</v-multiselect>
</div>
<div class="col-3 d-grid">
<b-button @click="reserveCommand()" variant="primary">실행</b-button>
</div>
</div>
</div>
</template>
<script lang="ts">
declare const staticValues: {
maxTurn: number;
maxPushTurn: number;
commandList: {
category: string;
values: CommandItem[];
}[];
serverNow: string;
serverNick: string;
mapName: string;
unitSet: string;
};
</script>
<script lang="ts" setup>
import addMilliseconds from "date-fns/esm/addMilliseconds";
import addMinutes from "date-fns/esm/addMinutes";
import { range, trim } from "lodash";
import { isString, range } from "lodash";
import { stringifyUrl } from "query-string";
import { onMounted, ref, watch } from "vue";
import { defineComponent, ref, watch } from "vue";
import { formatTime } from "@util/formatTime";
import { joinYearMonth } from "@util/joinYearMonth";
import { mb_strwidth } from "@util/mb_strwidth";
import { parseTime } from "@util/parseTime";
import { parseYearMonth } from "@util/parseYearMonth";
import { convertSearch초성 } from "./util/convertSearch초성";
import DragSelect from "@/components/DragSelect.vue";
import { SammoAPI } from "./SammoAPI";
import type { CommandItem } from "@/defs";
import CommandSelectForm from "@/components/CommandSelectForm.vue";
import { BButton, BButtonGroup, BDropdownItem, BDropdown, BDropdownText, BDropdownDivider } from "bootstrap-vue-3";
import { StoredActionsHelper } from "./util/StoredActionsHelper";
import type { TurnObj } from "@/defs";
import type { Args } from "./processing/args";
import { QueryActionHelper } from "./util/QueryActionHelper";
import SimpleClock from "./components/SimpleClock.vue";
import type { ReservedCommandResponse } from "./defs/API/Command";
const { maxTurn, maxPushTurn, commandList } = staticValues;
type commandItem = {
value: string;
title: string;
compensation: number;
simpleName: string;
possible: boolean;
reqArg: boolean;
searchText?: string;
};
declare const maxTurn: number;
declare const maxPushTurn: number;
declare const commandList: {
category: string;
values: commandItem[];
}[];
declare const serverNow: string;
type TurnObj = {
action: string;
brief: string;
arg: null | [] | Record<string, number | string | number[] | string[]>;
};
type TurnObjWithTime = TurnObj & {
time: string;
year?: number;
month?: number;
tooltip?: string;
style?: Record<string, unknown>;
};
type ReservedCommandResponse = {
result: true;
turnTime: string;
turnTerm: number;
year: number;
month: number;
date: string;
turn: TurnObj[];
autorun_limit: null | number;
};
const listReqArgCommand = new Set<string>();
const selectedCommand = ref(staticValues.commandList[0].values[0]);
const commandSelectForm = ref<InstanceType<typeof CommandSelectForm> | null>(null);
for (const commandCategories of commandList) {
if (!commandCategories.values) {
continue;
@@ -316,16 +319,6 @@ for (const commandCategories of commandList) {
}
}
function toggleForm($event: Event): void {
$event.preventDefault();
const form = commandSelectForm.value;
if (!form) {
return;
}
form.toggle();
}
function isDropdownChildren(e?: Event): boolean {
if (!e) {
return false;
@@ -343,448 +336,306 @@ function isDropdownChildren(e?: Event): boolean {
return false;
}
const queryActionHelper = new QueryActionHelper(staticValues.maxTurn);
const storedActionsHelper = new StoredActionsHelper(
staticValues.serverNick,
"general",
staticValues.mapName,
staticValues.unitSet
);
const searchModeKey = `sammo_searchModeOn`;
const reservedCommandList = queryActionHelper.reservedCommandList;
const prevSelectedTurnList = queryActionHelper.prevSelectedTurnList;
const selectedTurnList = queryActionHelper.selectedTurnList;
const isEditMode = storedActionsHelper.isEditMode;
const flippedMaxTurn = 14;
const editModeRowHeight = 29.35;
const basicModeRowHeight = 34.4;
const viewMaxTurn = ref(flippedMaxTurn);
const rowGridStyle = ref({
display: "grid",
gridTemplateRows: `repeat(${viewMaxTurn.value}, ${isEditMode.value ? editModeRowHeight : basicModeRowHeight}px)`,
});
watch([isEditMode, viewMaxTurn], ([isEditMode, maxTurn]) => {
rowGridStyle.value.gridTemplateRows = `repeat(${maxTurn}, ${isEditMode ? editModeRowHeight : basicModeRowHeight}px)`;
});
const isDragSingle = ref(false);
const isDragToggle = ref(false);
const invCommandMap: Record<string, CommandItem> = {};
for (const category of commandList) {
for (const command of category.values) {
invCommandMap[command.value] = command;
}
}
function toggleViewMaxTurn() {
if (viewMaxTurn.value == flippedMaxTurn) {
viewMaxTurn.value = maxTurn;
} else {
viewMaxTurn.value = flippedMaxTurn;
}
}
async function repeatGeneralCommand(amount: number) {
try {
await SammoAPI.Command.RepeatCommand({ amount });
} catch (e) {
console.error(e);
alert(`실패했습니다: ${e}`);
return;
}
await reloadCommandList();
}
async function pushGeneralCommand(amount: number) {
try {
await SammoAPI.Command.PushCommand({ amount });
} catch (e) {
console.error(e);
alert(`실패했습니다: ${e}`);
return;
}
await reloadCommandList();
}
const serverNow = ref(new Date());
function pushGeneralCommandSingle(e: Event) {
//NOTE: split 구현에 버그가 있어서, 수동으로 구분해야함
if (isDropdownChildren(e)) {
return;
}
if (!isEditMode.value) {
return;
}
void pushGeneralCommand(1);
}
function pullGeneralCommandSingle(e: Event) {
//NOTE: split 구현에 버그가 있어서, 수동으로 구분해야함
if (isDropdownChildren(e)) {
return;
}
if (!isEditMode.value) {
return;
}
void pushGeneralCommand(-1);
}
async function reloadCommandList() {
let result: ReservedCommandResponse;
try {
result = await SammoAPI.Command.GetReservedCommand();
} catch (e) {
console.error(e);
alert(`실패했습니다: ${e}`);
return;
}
let yearMonth = joinYearMonth(result.year, result.month);
const turnTime = parseTime(result.turnTime);
let nextTurnTime = new Date(turnTime);
const autorunLimitYearMonth = result.autorun_limit ?? yearMonth - 1;
const [autorunLimitYear, autorunLimitMonth] = parseYearMonth(autorunLimitYearMonth);
reservedCommandList.value = [];
for (const obj of result.turn) {
const [year, month] = parseYearMonth(yearMonth);
let tooltip: string[] = [];
let style: Record<string, unknown> = {};
const brief = obj.brief;
if (yearMonth <= autorunLimitYearMonth) {
if (obj.brief == "휴식") {
obj.brief = "휴식<small>(자율 행동)</small>";
export default defineComponent({
name: "PartialReservedCommand",
components: {
DragSelect,
},
methods: {
updateNow() {
const serverNow = addMilliseconds(new Date(), this.timeDiff);
this.serverNow = formatTime(serverNow, "HH:mm:ss");
setTimeout(() => {
this.updateNow();
}, 1000 - serverNow.getMilliseconds());
},
toggleTurn(...turnList: number[] | string[]) {
for (let turnIdx of turnList) {
if (isString(turnIdx)) {
turnIdx = parseInt(turnIdx);
}
if (this.turnList.has(turnIdx)) {
this.turnList.delete(turnIdx);
} else {
this.turnList.add(turnIdx);
}
}
},
selectTurn(...turnList: number[] | string[]) {
this.turnList.clear();
for (const turnIdx of turnList) {
if (isString(turnIdx)) {
this.turnList.add(parseInt(turnIdx));
} else {
this.turnList.add(turnIdx);
}
}
},
selectAll(e: Event | true) {
//NOTE: split 구현에 버그가 있어서, 수동으로 구분해야함
if (e !== true && isDropdownChildren(e)) {
return;
}
style.color = "#aaffff";
tooltip.push(`자율 행동 기간: ${autorunLimitYear}${autorunLimitMonth}월까지`);
if (this.turnList.size * 3 > this.maxTurn) {
this.turnList.clear();
} else {
for (let i = 0; i < this.maxTurn; i++) {
this.turnList.add(i);
}
}
},
selectStep(begin: number, step: number) {
this.turnList.clear();
for (const idx of range(0, maxTurn)) {
if ((idx - begin) % step == 0) {
this.turnList.add(idx);
}
}
},
toggleViewMaxTurn() {
if (this.viewMaxTurn == this.flippedMaxTurn) {
this.viewMaxTurn = this.maxTurn;
} else {
this.viewMaxTurn = this.flippedMaxTurn;
}
},
async repeatGeneralCommand(amount: number) {
try {
await SammoAPI.Command.RepeatCommand({ amount });
} catch (e) {
console.error(e);
alert(`실패했습니다: ${e}`);
return;
}
await this.reloadCommandList();
},
async pushGeneralCommand(amount: number) {
try {
await SammoAPI.Command.PushCommand({ amount });
} catch (e) {
console.error(e);
alert(`실패했습니다: ${e}`);
return;
}
await this.reloadCommandList();
},
pushGeneralCommandSingle(e: Event) {
//NOTE: split 구현에 버그가 있어서, 수동으로 구분해야함
if (isDropdownChildren(e)) {
return;
}
void this.pushGeneralCommand(1);
},
pullGeneralCommandSingle(e: Event) {
//NOTE: split 구현에 버그가 있어서, 수동으로 구분해야함
if (isDropdownChildren(e)) {
return;
}
void this.pushGeneralCommand(-1);
},
async reloadCommandList() {
let result: ReservedCommandResponse;
try {
result = await SammoAPI.Command.GetReservedCommand();
} catch (e) {
console.error(e);
alert(`실패했습니다: ${e}`);
return;
}
const reservedCommandList: TurnObjWithTime[] = [];
let yearMonth = joinYearMonth(result.year, result.month);
const turnTime = parseTime(result.turnTime);
let nextTurnTime = new Date(turnTime);
const autorunLimitYearMonth = result.autorun_limit ?? yearMonth - 1;
const [autorunLimitYear, autorunLimitMonth] = parseYearMonth(
autorunLimitYearMonth
);
for (const obj of result.turn) {
const [year, month] = parseYearMonth(yearMonth);
let tooltip: string[] = [];
let style: Record<string, unknown> = {};
const brief = obj.brief;
if (yearMonth <= autorunLimitYearMonth) {
if (obj.brief == "휴식") {
obj.brief = "휴식<small>(자율 행동)</small>";
}
style.color = "#aaffff";
tooltip.push(
`자율 행동 기간: ${autorunLimitYear}년 ${autorunLimitMonth}월까지`
);
}
if (mb_strwidth(brief) > 22) {
tooltip.push(brief);
}
reservedCommandList.push({
...obj,
year,
month,
time: formatTime(nextTurnTime, "HH:mm"),
tooltip: tooltip.length == 0 ? undefined : tooltip.join("\n"),
style,
});
yearMonth += 1;
nextTurnTime = addMinutes(nextTurnTime, result.turnTerm);
}
this.reservedCommandList = reservedCommandList;
const serverNowObj = parseTime(result.date);
const clientNowObj = new Date();
const timeDiff = serverNowObj.getTime() - clientNowObj.getTime();
this.timeDiff = timeDiff;
},
async reserveCommand() {
let turnList: number[];
if (this.turnList.size == 0) {
turnList = Array.from(this.prevTurnList.values());
} else {
turnList = Array.from(this.turnList.values());
}
if (turnList.length == 0) {
turnList.push(0);
}
const commandName = this.selectedCommand.value;
if (listReqArgCommand.has(commandName)) {
document.location.href = stringifyUrl({
url: "v_processing.php",
query: {
command: commandName,
turnList: turnList.join("_"),
},
});
return;
}
try {
await SammoAPI.Command.ReserveCommand({
turnList,
action: commandName,
});
if (this.turnList.size > 0) {
this.prevTurnList.clear();
for (const v of this.turnList) {
this.prevTurnList.add(v);
}
this.turnList.clear();
}
} catch (e) {
console.error(e);
alert(`실패했습니다: ${e}`);
return;
}
await this.reloadCommandList();
},
toggleSearchCommand() {
const searchModeOn = !this.searchModeOn;
this.searchModeOn = searchModeOn;
localStorage.setItem(searchModeKey, searchModeOn ? "1" : "0");
},
chooseCommand(val: string){
this.selectedCommand = this.invCommandMap[val];
}
},
data() {
const serverNowObj = parseTime(serverNow);
const clientNowObj = new Date();
const timeDiff = serverNowObj.getTime() - clientNowObj.getTime();
setTimeout(() => {
this.updateNow();
}, 1000 - serverNowObj.getMilliseconds());
const selectedCommand = commandList[0].values[0];
for (const subCategory of commandList) {
for (const command of subCategory.values) {
if (command.searchText) {
continue;
}
command.searchText = convertSearch초성(command.simpleName).join("|");
}
}
if (mb_strwidth(brief) > 22) {
tooltip.push(brief);
}
const searchModeOn = (localStorage.getItem(searchModeKey) ?? "0") != "0";
reservedCommandList.value.push({
...obj,
year,
month,
time: formatTime(nextTurnTime, "HH:mm"),
tooltip: tooltip.length == 0 ? undefined : tooltip.join("\n"),
style,
const emptyTurn: TurnObjWithTime[] = Array.from<TurnObjWithTime>({
length: maxTurn,
}).fill({
arg: null,
brief: "",
action: "",
year: undefined,
month: undefined,
time: "",
});
yearMonth += 1;
nextTurnTime = addMinutes(nextTurnTime, result.turnTerm);
}
const prevTurnList = new Set([0]);
const turnList = new Set<number>();
serverNow.value = parseTime(result.date);
}
return {
maxTurn,
async function reserveCommandDirect(args: [number[], TurnObj][], reload = true): Promise<boolean> {
const query: {
turnList: number[];
action: string;
arg: Args;
}[] = [];
for (const [turnList, { action, arg }] of args) {
query.push({
maxPushTurn,
commandList,
serverNow: formatTime(serverNowObj, "HH:mm:ss"),
timeDiff,
prevTurnList,
turnList,
action,
arg,
});
}
try {
await SammoAPI.Command.ReserveBulkCommand(query);
queryActionHelper.releaseSelectedTurnList();
} catch (e) {
console.error(e);
alert(`실패했습니다: ${e}`);
return false;
}
if (reload) {
await reloadCommandList();
}
return true;
}
async function reserveCommand() {
let reqTurnList: number[] = queryActionHelper.getSelectedTurnList();
const commandName = selectedCommand.value.value;
if (listReqArgCommand.has(commandName)) {
document.location.href = stringifyUrl({
url: "v_processing.php",
query: {
command: commandName,
turnList: reqTurnList.join("_"),
},
});
return;
}
try {
const result = await SammoAPI.Command.ReserveCommand({
turnList: reqTurnList,
action: commandName,
selectedCommand,
reservedCommandList: emptyTurn,
autorun_limit: null as null | number,
searchModeOn,
};
},
setup() {
const flippedMaxTurn = 15;
const viewMaxTurn = ref(flippedMaxTurn);
const rowGridStyle = ref({
display: "grid",
gridTemplateRows: `repeat(${viewMaxTurn.value}, 29.4px)`,
});
storedActionsHelper.pushRecentActions({
action: commandName,
brief: result.brief,
arg: {},
watch(viewMaxTurn, (val) => {
rowGridStyle.value.gridTemplateRows = `repeat(${val}, 29.4px)`;
});
queryActionHelper.releaseSelectedTurnList();
} catch (e) {
console.error(e);
alert(`실패했습니다: ${e}`);
return;
}
await reloadCommandList();
}
const isDragSingle = ref(false);
const isDragToggle = ref(false);
function chooseCommand(val?: string) {
if (!val) {
return;
}
selectedCommand.value = invCommandMap[val];
void reserveCommand();
}
const commandQuickReserveForm = ref<InstanceType<typeof CommandSelectForm> | null>(null);
const currentQuickReserveTarget = ref(-1);
function chooseQuickReserveCommand(val?: string) {
if (!val) {
return;
}
selectedCommand.value = invCommandMap[val];
selectedTurnList.value.clear();
selectedTurnList.value.add(currentQuickReserveTarget.value);
void reserveCommand();
}
function toggleQuickReserveForm(turnIdx: number) {
if (turnIdx == currentQuickReserveTarget.value) {
commandQuickReserveForm.value?.toggle();
return;
}
currentQuickReserveTarget.value = turnIdx;
commandQuickReserveForm.value?.show();
}
watch(isEditMode, (newEditMode) => {
if (newEditMode) {
commandQuickReserveForm.value?.close();
currentQuickReserveTarget.value = -1;
} else {
commandSelectForm.value?.close();
}
});
const emptyTurnObj: TurnObj = { action: "휴식", brief: "휴식", arg: {} };
const recentActions = storedActionsHelper.recentActions;
const storedActions = storedActionsHelper.storedActions;
const activatedCategory = storedActionsHelper.activatedCategory;
async function eraseSelectedTurnList(releaseSelect = true): Promise<boolean> {
const result = await reserveCommandDirect([[queryActionHelper.getSelectedTurnList(), emptyTurnObj]]);
if (releaseSelect) {
queryActionHelper.releaseSelectedTurnList();
}
return result;
}
const clipboard = storedActionsHelper.clipboard;
async function clipboardCut(releaseSelect = true) {
clipboardCopy(false);
return eraseSelectedTurnList(releaseSelect);
}
function clipboardCopy(releaseSelect = true) {
clipboard.value = queryActionHelper.extractQueryActions();
if (releaseSelect) {
queryActionHelper.releaseSelectedTurnList();
}
}
async function clipboardPaste(releaseSelect = true) {
const rawActions = clipboard.value;
if (rawActions === undefined) {
return;
}
const actions = queryActionHelper.amplifyQueryActions(rawActions, queryActionHelper.getSelectedTurnList());
if (actions.length === 0) {
return;
}
const result = await reserveCommandDirect(actions);
if (releaseSelect) {
queryActionHelper.releaseSelectedTurnList();
}
return result;
}
async function subRepeatCommand(releaseSelect = true): Promise<boolean> {
const reqTurnList = queryActionHelper.getSelectedTurnList();
const selectedMinTurnIdx = reqTurnList[0];
const selectedMaxTurnIdx = reqTurnList[reqTurnList.length - 1];
const queryLength = selectedMaxTurnIdx - selectedMinTurnIdx + 1;
const rawActions = queryActionHelper.extractQueryActions();
const actions = queryActionHelper.amplifyQueryActions(rawActions, range(selectedMinTurnIdx, maxTurn, queryLength));
const result = await reserveCommandDirect(actions);
if (releaseSelect) {
queryActionHelper.releaseSelectedTurnList();
}
return result;
}
async function eraseAndPullCommand(releaseSelect = true): Promise<boolean> {
const reqTurnList = queryActionHelper.getSelectedTurnList();
const selectedMinTurnIdx = reqTurnList[0];
const selectedMaxTurnIdx = reqTurnList[reqTurnList.length - 1];
const queryLength = selectedMaxTurnIdx - selectedMinTurnIdx + 1;
if (selectedMinTurnIdx === 0) {
await pushGeneralCommand(-queryLength);
return true;
}
if (selectedMinTurnIdx + queryLength == maxTurn) {
return eraseSelectedTurnList(releaseSelect);
}
const actions: [number[], TurnObj][] = [];
const emptyTurnList: number[] = [];
for (const srcTurnIdx of range(selectedMinTurnIdx + queryLength, maxTurn)) {
const rawAction = reservedCommandList.value[srcTurnIdx];
if (rawAction.action == emptyTurnObj.action) {
emptyTurnList.push(srcTurnIdx - queryLength);
continue;
const invCommandMap: Record<string, commandItem> = {};
for(const category of commandList){
for(const command of category.values){
invCommandMap[command.value] = command;
}
}
actions.push([
[srcTurnIdx - queryLength],
{
action: rawAction.action,
arg: rawAction.arg,
brief: rawAction.brief,
},
]);
}
emptyTurnList.push(...range(maxTurn - queryLength, maxTurn));
actions.push([emptyTurnList, emptyTurnObj]);
const result = await reserveCommandDirect(actions);
if (releaseSelect) {
queryActionHelper.releaseSelectedTurnList();
}
return result;
}
async function pushEmptyCommand(releaseSelect = true): Promise<boolean> {
const reqTurnList = queryActionHelper.getSelectedTurnList();
const selectedMinTurnIdx = reqTurnList[0];
const selectedMaxTurnIdx = reqTurnList[reqTurnList.length - 1];
const queryLength = selectedMaxTurnIdx - selectedMinTurnIdx + 1;
if (selectedMinTurnIdx === 0) {
await pushGeneralCommand(queryLength);
return true;
}
if (selectedMaxTurnIdx == maxTurn) {
return eraseSelectedTurnList(releaseSelect);
}
const actions: [number[], TurnObj][] = [];
const emptyTurnList: number[] = [];
for (const srcTurnIdx of range(selectedMinTurnIdx, maxTurn - queryLength)) {
const rawAction = reservedCommandList.value[srcTurnIdx];
if (rawAction.action == emptyTurnObj.action) {
emptyTurnList.push(srcTurnIdx + queryLength);
continue;
}
actions.push([
[srcTurnIdx + queryLength],
{
action: rawAction.action,
arg: rawAction.arg,
brief: rawAction.brief,
},
]);
}
emptyTurnList.push(...range(selectedMinTurnIdx, selectedMinTurnIdx + queryLength));
actions.push([emptyTurnList, emptyTurnObj]);
const result = await reserveCommandDirect(actions);
if (releaseSelect) {
queryActionHelper.releaseSelectedTurnList();
}
return result;
}
function setStoredActions() {
const actions = queryActionHelper.extractQueryActions();
const turnBrief = new Map<number, string>();
for (const [subTurnList, action] of actions) {
const actionName = action.action.split("_");
const actionShortName = actionName.length == 1 ? actionName[0] : actionName[1];
for (const turnIdx of subTurnList) {
turnBrief.set(turnIdx, actionShortName[0]);
}
}
const turnBriefStr = Array.from(turnBrief.entries())
.sort(([turnA], [turnB]) => turnA - turnB)
.map(([, action]) => action)
.join("");
const nickName = trim(prompt("선택한 턴들의 별명을 지어주세요", turnBriefStr) ?? "");
if (nickName == "") {
return;
}
storedActionsHelper.setStoredActions(nickName, actions);
queryActionHelper.releaseSelectedTurnList();
}
function deleteStoredActions(actionKey: string) {
storedActionsHelper.deleteStoredActions(actionKey);
}
async function useStoredAction(rawActions: [number[], TurnObj][]) {
const reqTurnList = queryActionHelper.getSelectedTurnList();
const actions = queryActionHelper.amplifyQueryActions(rawActions, reqTurnList);
const result = await reserveCommandDirect(actions);
queryActionHelper.releaseSelectedTurnList();
return result;
}
onMounted(() => {
void reloadCommandList();
return {
isDragSingle,
isDragToggle,
flippedMaxTurn,
viewMaxTurn,
rowGridStyle,
invCommandMap,
};
},
mounted() {
void this.reloadCommandList();
},
});
</script>
<style lang="scss">
@@ -797,19 +648,9 @@ onMounted(() => {
.commandPad {
background-color: $gray-900;
position: relative;
}
.commandTable {
width: 100%;
display: grid;
grid-template-columns:
minmax(20px, 0.8fr) minmax(75px, 2.4fr) minmax(40px, 0.9fr)
4.8fr minmax(28px, 0.8fr);
//30, 70, 37.65, 160
}
.commandTable.isEditMode {
width: 100%;
display: grid;
grid-template-columns: minmax(30px, 1fr) minmax(75px, 2.5fr) minmax(40px, 1fr) 5fr;
@@ -859,16 +700,11 @@ onMounted(() => {
}
}
.isEditMode .month_pad:hover {
.month_pad:hover {
text-decoration: underline;
cursor: pointer;
}
.plain-center {
background-color: black;
}
.plain-center,
.month_pad,
.time_pad,
.turn_pad {
@@ -892,4 +728,4 @@ onMounted(() => {
text-overflow: ellipsis;
overflow: hidden;
}
</style>
</style>
+43 -112
View File
@@ -1,132 +1,63 @@
import type { Args } from "./processing/args";
import {
callSammoAPI, extractHttpMethod, GET, PATCH, POST, PUT,
type APITail, type APICallT, type RawArgType, type ValidResponse, type InvalidResponse
} from "./util/callSammoAPI";
import { InvalidResponse } from "./defs";
import { APIPathGen } from "./util/APIPathGen";
import { callSammoAPI, ValidResponse } from "./util/callSammoAPI";
export type { ValidResponse, InvalidResponse };
import { APIPathGen, NumVar } from "./util/APIPathGen.js";
import type { BettingDetailResponse, BettingListResponse } from "./defs/API/Betting";
import type { ReserveBulkCommandResponse, ReserveCommandResponse, ReservedCommandResponse } from "./defs/API/Command";
import type { ChiefResponse } from "./defs/API/NationCommand";
import type { inheritBuffType } from "./defs/API/InheritAction";
import type { SetBlockWarResponse, GeneralListResponse as NationGeneralListResponse } from "./defs/API/Nation";
import type { UploadImageResponse } from "./defs/API/Misc";
import type { JoinArgs } from "./defs/API/General";
import type { GetConstResponse } from "./defs/API/Global";
import type { GeneralListResponse } from "./defs";
async function done<ResultType extends ValidResponse>(args?: Record<string, unknown>): Promise<ResultType>;
async function done<ResultType extends ValidResponse>(args: Record<string, unknown> | undefined, returnError: false): Promise<ResultType>;
async function done<ResultType extends ValidResponse, ErrorType extends InvalidResponse>(args: Record<string, unknown> | undefined, returnError: true): Promise<ResultType | ErrorType>;
async function done<ResultType extends ValidResponse, ErrorType extends InvalidResponse>(args?: Record<string, unknown>, returnError = false): Promise<ResultType | ErrorType> {
console.error(`Can't directly call. ${args}, ${returnError}. Use auto-generated path API.`);
return callSammoAPI<ResultType, ErrorType>([], args, true);
}
const apiRealPath = {
Betting: {
Bet: PUT as APICallT<{
bettingID: number,
bettingType: number[],
amount: number,
}>,
GetBettingDetail: NumVar('betting_id',
GET as APICallT<undefined, BettingDetailResponse>
),
GetBettingList: GET as APICallT<undefined, BettingListResponse>,
Betting:{
Bet: done,
GetBettingDetail: done,
GetBettingList: done,
},
Command: {
GetReservedCommand: GET as APICallT<undefined, ReservedCommandResponse>,
PushCommand: PUT as APICallT<{
amount: number
}>,
RepeatCommand: PUT as APICallT<{
amount: number
}>,
ReserveCommand: PUT as APICallT<{
turnList: number[],
action: string,
arg?: Args
}, ReserveCommandResponse>,
ReserveBulkCommand: PUT as APICallT<{
turnList: number[],
action: string,
arg?: Args
}[], ReserveBulkCommandResponse>,
GetReservedCommand: done,
PushCommand: done,
RepeatCommand: done,
ReserveCommand: done,
},
General: {
Join: POST as APICallT<JoinArgs>,
},
Global: {
GeneralList: GET as APICallT<{
with_token?: boolean
}, GeneralListResponse>,
GetConst: GET as APICallT<undefined, GetConstResponse>,
Join: done,
},
InheritAction: {
BuyHiddenBuff: PUT as APICallT<{
type: inheritBuffType,
level: number
}>,
BuyRandomUnique: PUT as APICallT<undefined>,
BuySpecificUnique: PUT as APICallT<{
item: string,
amount: number,
}>,
ResetSpecialWar: PUT as APICallT<undefined>,
ResetTurnTime: PUT as APICallT<undefined>,
SetNextSpecialWar: PUT as APICallT<{
type: string,
}>,
},
Misc: {
UploadImage: POST as APICallT<{
imageData: string,
}, UploadImageResponse>
BuyHiddenBuff: done,
BuyRandomUnique: done,
BuySpecificUnique: done,
ResetSpecialWar: done,
ResetTurnTime: done,
SetNextSpecialWar: done,
},
Misc: { UploadImage: done },
NationCommand: {
GetReservedCommand: GET as APICallT<undefined, ChiefResponse>,
PushCommand: PUT as APICallT<{
amount: number
}>,
RepeatCommand: PUT as APICallT<{
amount: number
}>,
ReserveCommand: PUT as APICallT<{
turnList: number[],
action: string,
arg?: Args
}, ReserveCommandResponse>,
ReserveBulkCommand: PUT as APICallT<{
turnList: number[],
action: string,
arg?: Args
}[], ReserveBulkCommandResponse>,
GetReservedCommand: done,
PushCommand: done,
RepeatCommand: done,
ReserveCommand: done,
},
Nation: {
GeneralList: GET as APICallT<undefined, NationGeneralListResponse>,
SetNotice: PUT as APICallT<{
msg: string,
}>,
SetScoutMsg: PUT as APICallT<{
msg: string,
}>,
SetBill: PATCH as APICallT<{
amount: number,
}>,
SetRate: PATCH as APICallT<{
amount: number,
}>,
SetSecretLimit: PATCH as APICallT<{
amount: number,
}>,
SetBlockWar: PATCH as APICallT<{
value: boolean,
}, SetBlockWarResponse>,
SetBlockScout: PATCH as APICallT<{
value: boolean,
}>,
SetNotice: done,
SetScoutMsg: done,
SetBill: done,
SetRate: done,
SetSecretLimit: done,
SetBlockWar: done,
SetBlockScout: done,
},
} as const;
export const SammoAPI = APIPathGen(apiRealPath, (path: string[], tail: APITail, pathParam) => {
const method = extractHttpMethod(tail);
return (args?: RawArgType, returnError?: boolean) => {
export const SammoAPI = APIPathGen<typeof done, typeof apiRealPath>(apiRealPath, (path: string[]) => {
return (args?: Record<string, unknown>, returnError?: boolean) => {
if (returnError) {
return callSammoAPI(method, path.join('/'), args, pathParam, true);
return callSammoAPI(path.join('/'), args, true);
}
return callSammoAPI(method, path.join('/'), args, pathParam);
return callSammoAPI(path.join('/'), args);
};
});
+18 -16
View File
@@ -1,28 +1,30 @@
import type { AutoLoginFailed, AutoLoginNonceResponse, AutoLoginResponse, LoginFailed, LoginResponse } from "./defs/API/Login";
import { InvalidResponse } from "./defs";
import { APIPathGen } from "./util/APIPathGen";
import { callSammoAPI, extractHttpMethod, GET, POST, type APICallT, type APITail, type InvalidResponse, type RawArgType, type ValidResponse } from "./util/callSammoAPI";
import { callSammoAPI, ValidResponse } from "./util/callSammoAPI";
export type { ValidResponse, InvalidResponse };
async function done<ResultType extends ValidResponse>(args?: Record<string, unknown>): Promise<ResultType>;
async function done<ResultType extends ValidResponse>(args: Record<string, unknown> | undefined, returnError: false): Promise<ResultType>;
async function done<ResultType extends ValidResponse, ErrorType extends InvalidResponse>(args: Record<string, unknown> | undefined, returnError: true): Promise<ResultType | ErrorType>;
async function done<ResultType extends ValidResponse, ErrorType extends InvalidResponse>(args?: Record<string, unknown>, returnError = false): Promise<ResultType | ErrorType>{
console.error(`Can't directly call. ${args}, ${returnError}. Use auto-generated path API.`);
return callSammoAPI<ResultType, ErrorType>([], args, true);
}
const apiRealPath = {
Login: {
LoginByID: POST as APICallT<{
username: string,
password: string,
}, LoginResponse, LoginFailed>,
LoginByToken: POST as APICallT<{
hashedToken: string,
token_id: number,
}, AutoLoginResponse, AutoLoginFailed>,
ReqNonce: GET as APICallT<undefined, AutoLoginNonceResponse, AutoLoginFailed>
LoginByID: done,
LoginByToken: done,
ReqNonce: done,
},
} as const;
export const SammoRootAPI = APIPathGen(apiRealPath, (path: string[], tail: APITail, pathParam) => {
const method = extractHttpMethod(tail);
return (args?: RawArgType, returnError?: boolean) => {
export const SammoRootAPI = APIPathGen<typeof done, typeof apiRealPath>(apiRealPath, (path: string[]) => {
return (args?: Record<string, unknown>, returnError?: boolean) => {
if (returnError) {
return callSammoAPI(method, path.join('/'), args, pathParam, true);
return callSammoAPI(path.join('/'), args, true);
}
return callSammoAPI(method, path.join('/'), args, pathParam);
return callSammoAPI(path.join('/'), args);
};
});

Some files were not shown because too many files have changed in this diff Show More