Compare commits

..
189 Commits
Author SHA1 Message Date
Hide_D a1397e41aa 트래픽 버그 수정 2018-04-29 01:58:59 +09:00
Hide_D 13fccb998e 년도 계산 공식 재 수정. 시나리오 시작시 남은 개월 수를 계산. 반동탁연합 시나리오 외교 추가 2018-04-29 01:47:48 +09:00
Hide_D 1e54220230 연, 월 계산 방식 변경 2018-04-29 01:19:31 +09:00
Hide_D 6b2000bb39 올스타전 내특/전특 2018-04-29 00:53:49 +09:00
Hide_D 5f3fbdb089 KBO 올스타전 리뉴얼 2018-04-29 00:45:12 +09:00
Hide_D 63e888c9b1 특성에 '랜덤', '랜덤전특', '랜점내특' 가능. 0으로 지정 가능 2018-04-29 00:28:06 +09:00
Hide_D e97e702c2e 가상 모드 대응. 랜덤 특성 세팅 추가 2018-04-28 23:55:22 +09:00
Hide_D 657c35f876 git tree 지정이 안되는 업데이트 유저는 기존에 업데이트된 값을 이용하도록 변경 2018-04-28 23:36:35 +09:00
Hide_D bc79250f96 Merge branch 'master' of ssh://storage.hided.net:2525/devsam/core into devel 2018-04-28 22:42:01 +09:00
Hide_D dd7846e995 설정 저장용 key_value storage 추가. ROW_FORMAT=DYNAMIC 삭제 2018-04-28 22:01:58 +09:00
Hide_D 8a5483d508 연감 벌점 감소 2018-04-28 21:52:14 +09:00
Hide_D 805053e921 NPC 포상 잘 안주는 문제 우회 시도 2018-04-28 21:04:55 +09:00
Hide_D 170a32a1bd 등용장 메시지 송신이 이상한 문제 해결.
인사부 '공석' 지정 가능
2018-04-28 20:49:38 +09:00
Hide_D 5262d424b4 방랑의 제한 조건 추가 2018-04-28 20:38:19 +09:00
Hide_D 9c3c1045ac 줄간격 문제 해결(inline에 line-height 적용해제) 2018-04-28 20:29:33 +09:00
Hide_D 2d1a3f5da9 많은 버그 수정
커맨드 실행 중 로그아웃 된 경우 버그 수정
국기 변경에 에러 있던 점 수정
등용장 수락시 송신자 명성 안 늘어나는 버그 수정
2018-04-28 20:10:33 +09:00
Hide_D 088260bbc6 npc 재야일때 e_notice 에러 수정 2018-04-28 19:13:18 +09:00
Hide_D 18ebbbc555 oauth_kakao autoload 빼먹은거 수정 2018-04-28 19:10:03 +09:00
Hide_D 80b70a8765 국가 명 너비를 살짝 더 늘림 2018-04-28 18:48:58 +09:00
Hide_D d3d4cce8b5 서버 설명 2018-04-28 18:09:55 +09:00
Hide_D 76bfcd4fa8 베팅 버그 수정 2018-04-28 02:37:47 +09:00
Hide_D 7cbe383a8a 토너먼트 문자열 버그 수정 2018-04-28 02:36:59 +09:00
Hide_D 0488ebf071 무지장 유저장 포상 기준 변경 2018-04-28 02:25:08 +09:00
Hide_D 1cfab53472 문자열 자르기 버그 수정 2018-04-28 01:26:32 +09:00
Hide_D 084c7a2626 선포시 양국 모두 뜨도록 2018-04-28 01:16:00 +09:00
Hide_D 161836a233 상성 가상인 경우 상성이 리셋되지 않는 버그 해결 2018-04-28 01:08:54 +09:00
Hide_D c86ac7d20f 가입 일자 표기, 개인정보 제3자 제공 동의 버튼 추가. 철회 버튼도 추가 2018-04-28 00:23:51 +09:00
Hide_D 20cceec090 IE11에서 javascript 기본 argument 안되는 것 수정 2018-04-28 00:00:46 +09:00
Hide_D 62c6ba362d 개인정보처리방침 & 이용약관 링크 추가 2018-04-27 23:51:57 +09:00
Hide_D 5ed31881e6 PrintElapsedTime 제거 2018-04-27 23:40:50 +09:00
Hide_D 647c51fe0f 외교 서신, 등용장 수락시 올바르지 않을 경우 alert
건국 시 장수 이름과 같아도 건국 가능하도록 변경
2018-04-27 23:08:55 +09:00
Hide_D a2d3ac9e70 시나리오 생성시 장수의 NPC 메시지가 입력되지 않는 버그 해결 2018-04-27 22:51:39 +09:00
Hide_D 20f74f6645 각 페이지에 서버 이름 표기 2018-04-27 22:36:29 +09:00
Hide_D 0bb1ed6f18 서버 리셋 시 서버 이름을 받아오도록 설정 2018-04-27 22:28:16 +09:00
Hide_D 2102a852cb 가상, 사실 거꾸로 표기한 점 수정 2018-04-27 22:21:43 +09:00
Hide_D 0cfb80b7bf 카카오 로그인 버튼을 직관적으로 변경 2018-04-27 22:09:57 +09:00
Hide_D 4297ea9e40 로그인 & 가입 버튼 추가 2018-04-27 21:37:37 +09:00
Hide_D 0ce36e93bd 예약 오픈 테이블은 리셋에도 유지하도록 변경 2018-04-25 21:31:39 +09:00
Hide_D 18bd5f4246 NPC 대사 제대로 안하는 버그 수정 2018-04-25 21:25:04 +09:00
Hide_D 2e7bcd9038 Merge branch 'devel' of ssh://storage.hided.net:2525/devsam/core into devel 2018-04-25 21:04:50 +09:00
Hide_D bfef0c28bc 리셋 시 폐쇄를 외부에서 하면 예약 리셋이 안되던 버그 수정 2018-04-25 21:04:41 +09:00
Hide_D b447065651 scenario 30번 수정 2018-04-25 18:12:08 +09:00
Hide_D f540f87e77 KBO 올스타전 시나리오 추가 2018-04-25 18:04:01 +09:00
Hide_D 6ebe3454af 예약 안내 조건 버그 수정 2018-04-25 08:15:55 +09:00
Hide_D 7e00500870 예약 리셋시 초기화 에러 표기 가능하도록 변경 2018-04-25 03:10:09 +09:00
Hide_D bc37dd1df7 '폐쇄 여부'를 server_basic_info에서 판단하도록 설정 2018-04-25 03:07:02 +09:00
Hide_D 77aca09f53 상성 여부로 메시지 변경 2018-04-25 03:02:31 +09:00
Hide_D 23fb1194ee 서버 예약 오픈을 UI에 통합 2018-04-25 02:56:11 +09:00
Hide_D 6253b757ec 기본 예약 리셋 동작 2018-04-25 02:13:40 +09:00
Hide_D 9122342fb9 FIXME: 리셋 헬퍼 꼴보기 싫으니 분리할 것 2018-04-25 00:44:33 +09:00
Hide_D fb42a32089 리셋 코드를 별도 코드로 분리 2018-04-25 00:43:09 +09:00
Hide_D 5c7f4c43ae 리셋 시 토너먼트 개최 여부도 같이 설정 2018-04-25 00:28:26 +09:00
Hide_D 3da256cc29 토너먼트 타이틀 정보 약간 개선 2018-04-25 00:05:08 +09:00
Hide_D 717c576cba n장 끼리 포상 제대로 안하는 버그 수정 2018-04-24 02:16:50 +09:00
Hide_D ddb4011b5d 몰수 조건 강화 2018-04-24 02:12:04 +09:00
Hide_D 48207b9300 포상 조건 재 수정. 무지장이라도 금쌀이 너무 적으면 주긴 함 2018-04-24 01:58:07 +09:00
Hide_D 388afe6fb4 CityHelper에서 getAllNationCities가 올바르게 동작하지 않던 버그 해결 2018-04-24 01:15:05 +09:00
Hide_D 99b459766a 무지장 헌납 로직 추가
포상 로직에서 무지장. 사망 예정장은 제외
2018-04-24 00:53:26 +09:00
Hide_D 230fc5ba53 훼섭은 닫히던 문제 마저 수정 2018-04-23 23:51:47 +09:00
Hide_D 9c266b7b1c 불가침 수락 년도 제대로 안보이는 버그 수정 2018-04-23 23:51:02 +09:00
Hide_D 603599d666 업데이트 후 서버를 닫지 않도록 변경 2018-04-23 23:48:59 +09:00
Hide_D b3cd29ac95 명전 테이블에 unique index가 안걸려있던 버그 수정 2018-04-23 01:21:05 +09:00
Hide_D a4beab86c2 도시 정보 턴 시간값을 +1 2018-04-22 12:24:42 +09:00
Hide_D 3a84e0d064 run_daemon 고도화. 1분에 4번 부름 2018-04-22 02:35:21 +09:00
Hide_D 31f1eb2d28 턴 실행 데몬 2018-04-22 02:18:51 +09:00
Hide_D d73c0c6f0c 남귀병이 기술 1등급 병종이었다니! 2018-04-22 01:32:25 +09:00
Hide_D 36409cf066 game, nation, city, general을 myisam으로 변경 2018-04-21 23:47:02 +09:00
Hide_D 556e1059f9 인사부 버그 수정
메인 페이지에서 재야 인사 에러 안나게 수정
2018-04-21 23:19:29 +09:00
Hide_D 131a6cb6c3 건국 버그 수정 2018-04-21 23:08:51 +09:00
Hide_D 598943eb1b 방랑군 상태에서 세력 도시 클릭 불가. 인사부 가능.
설치시 운영자 삭턴
시나리오 29 재 디자인
지도에서 로그인 유저 검사
2018-04-21 22:43:46 +09:00
Hide_D bf746393b8 천인강림 시나리오 리 밸런싱 2018-04-21 21:52:17 +09:00
Hide_D 70b6997436 연감에서 장수 로그 컬럼 길이 연장 2018-04-21 21:10:03 +09:00
Hide_D b26c6a04c0 삭턴 버그로 생긴 버그 수정 2018-04-21 17:27:45 +09:00
Hide_D 4f262a03e4 command_Single 동작 변경 2018-04-21 16:18:07 +09:00
Hide_D a0ca3dc3f6 TODO 추가 2018-04-21 15:59:05 +09:00
Hide_D f58736277f 삭턴 버그 수정 2018-04-21 15:58:41 +09:00
Hide_D 473cae169e 퀘섭 빙의시 계정이름이 아니라 닉네임으로 기록하도록 변경 2018-04-21 14:14:41 +09:00
Hide_D 4b956385bd 메시지 전송을 위해 일괄 2018-04-21 13:16:50 +09:00
Hide_D 481494a885 전체 메시지 안 보내지던 것 수정
10초마다 메시지
2018-04-21 13:06:10 +09:00
Hide_D 243604d6c1 30초마다 메시지 폴링! 2018-04-21 12:28:32 +09:00
Hide_D dc97c71e0b 1월을 놓치면 태어나지 않으므로 Date 기준을 ==에서 >=로 변경 2018-04-21 12:20:55 +09:00
Hide_D e6b4832b5d index.php에 level 없는 버그 2018-04-21 11:49:55 +09:00
Hide_D 00ac67e8ac 시나리오 시작 년도 수정 2018-04-21 11:11:25 +09:00
Hide_D 953b609b32 임관, 장수 선택시 설명 색 변경 2018-04-21 10:54:07 +09:00
Hide_D a5875be39b 쿼리 인덱스 2018-04-21 10:48:55 +09:00
Hide_D 0f45de8384 부상 코드 2018-04-21 10:47:09 +09:00
Hide_D d119200287 서버 업데이트 순서 틀림 2018-04-21 10:43:21 +09:00
Hide_D b9fa0bea6e mkdir 권한 변경 2018-04-21 10:42:30 +09:00
Hide_D 3a28180700 도시 정보 주석 제거 2018-04-21 10:17:24 +09:00
Hide_D 5b6f456d5c 도시 정보 업데이트 2018-04-21 10:15:04 +09:00
Hide_D fb1ae6ea88 투표율 안보이는 버그 수정 2018-04-21 08:56:54 +09:00
Hide_D 50582a0e8b 내무부에 textarea 적용 2018-04-21 07:57:41 +09:00
Hide_D 8fe3d0258a 건국되지 않았을 때 버튼 처리 변경 2018-04-21 07:57:26 +09:00
Hide_D f2537b20de allButton 예제 2018-04-20 02:19:42 +09:00
Hide_D 31d6850e6e 게시판 리스트 변경 2018-04-20 02:17:38 +09:00
Hide_D 31468d5425 전력전 비율을 50% -> 40%로 내림 2018-04-19 22:55:11 +09:00
Hide_D 688b839315 지도 배경 그림이 올바르지 않은 버그 수정 2018-04-19 22:50:40 +09:00
Hide_D fa4c9046fc Merge branch 'devel' of ssh://storage.hided.net:2525/devsam/core into devel 2018-04-19 20:08:31 +09:00
Hide_D c7560f9113 체섭에서 세션 시간 가져옮 2018-04-19 20:08:05 +09:00
Hide_D f7e3966310 부운영자 계정 권한 지정 2018-04-19 10:35:49 +09:00
Hide_D 7359237da4 항복 권고시 divide 0 나올 수 있는 문제 우회 2018-04-19 02:56:55 +09:00
Hide_D d617203c05 reply 추가 2018-04-19 02:55:35 +09:00
Hide_D 910526ba44 oauth 버그 2018-04-19 02:50:00 +09:00
Hide_D c1842703d7 Session ID 변경 2018-04-19 02:43:10 +09:00
Hide_D 2f9d2e2bc2 추방시 color 필요하던 점 2018-04-19 02:36:11 +09:00
Hide_D 20d7e005a0 도움말 에러 2018-04-19 02:34:44 +09:00
Hide_D 0ce5a88e49 NPC 추방시 warning 2018-04-19 02:34:38 +09:00
Hide_D 4af10fb485 유니크 아이템 warning 2018-04-19 02:34:28 +09:00
Hide_D f872113e99 토너먼트 warning 제거 2018-04-19 01:55:31 +09:00
Hide_D f33fefd188 도시에서 턴이 4개만 보이는 버그 수정 2018-04-19 01:53:02 +09:00
Hide_D 8c2f4f9dc9 Message 마지막 인자가 없엇 ㅓ터지는 버그 수정 2018-04-19 01:51:27 +09:00
Hide_D 3b6e7c5c28 몰수 시 NPC 반항 에러 2018-04-19 01:50:01 +09:00
Hide_D 595c11a9a7 NPC 사령턴이 '미설정'일때 2018-04-19 01:45:35 +09:00
Hide_D 1ab7b57885 숙련 단련 로그 버그 수정 2018-04-19 01:40:20 +09:00
Hide_D 07130e6022 선포 옵션 변경 2018-04-19 01:38:28 +09:00
Hide_D 2cc2f7eb23 NPC 몰수를 더 잘하도록 설정 2018-04-19 01:30:31 +09:00
Hide_D c798ac49b9 선포 메시지 버그 2018-04-19 01:21:28 +09:00
Hide_D a8796edbd3 체크 방식 유형 변경 2018-04-19 01:16:38 +09:00
Hide_D a4ead74cb2 등용장 로그 이상하게 뜨는것 수정 2018-04-19 00:27:35 +09:00
Hide_D 0beb00c5e5 등용장 탈때 삭턴 NULL되는 버그 수정 2018-04-19 00:26:09 +09:00
Hide_D 3d43690303 훈사 80 못 고치는 버그 수정 2018-04-19 00:22:26 +09:00
Hide_D 938c819e9a 베팅장 INF 수정 2018-04-19 00:19:56 +09:00
Hide_D 889ced68ed 베팅장 warning 우회 2018-04-19 00:18:31 +09:00
Hide_D de97384424 베팅창 warning 수정 2018-04-19 00:17:30 +09:00
Hide_D f6ffc20a23 등용장 장수열전 기록 안되는 버그 수정 2018-04-19 00:10:19 +09:00
Hide_D c0ec82051f $cities 변수 없음 수정 2018-04-19 00:04:30 +09:00
Hide_D 91273522c0 오탈자 수정 2018-04-19 00:03:46 +09:00
Hide_D 20a475466d 등용장 '등용장 안 타지는' 버그 수정 2018-04-18 23:54:48 +09:00
Hide_D 10b6a4ff6e 등용장 버그 고침(송신자에게도 감) 2018-04-18 23:48:47 +09:00
Hide_D 2a4e59d6e2 등용장 버그 수정(임관 국가) 2018-04-18 23:44:49 +09:00
Hide_D c016ea7c52 등용장 버그 수정 2018-04-18 23:44:17 +09:00
Hide_D 00bece9c9c 임관금지 거꾸로된것 수정 2018-04-18 23:42:27 +09:00
Hide_D 44ed61c14e touchmode 삭제 다른 방안을 찾아보는걸로 2018-04-18 23:24:33 +09:00
Hide_D 002b7ae534 등용장 버그 수정 2018-04-18 23:20:47 +09:00
Hide_D 63000bdd22 등용장 버그 수정 2018-04-18 23:18:55 +09:00
Hide_D 20fd52b32d 등용장 버그 수정 2018-04-18 23:17:55 +09:00
Hide_D 7a3064d37b 첩보시 병종 메시지 수정 2018-04-18 23:16:05 +09:00
Hide_D 7fea0a41c6 지도 수준을 없앰 2018-04-18 22:57:38 +09:00
Hide_D e701540d7f 외교 서신 (이)가 2018-04-18 22:37:00 +09:00
Hide_D 5187ebbf52 추방 몰수 선포 등 상황에서 메시지 안 나타나는 버그 수정 2018-04-18 22:34:13 +09:00
Hide_D df26c511b5 금쌀 2500단위도 추가 2018-04-18 22:18:39 +09:00
Hide_D 0e650da34a 메시지창 정렬.
몰/포 1200, 1500 추가
2018-04-18 22:16:59 +09:00
Hide_D 2c382da773 부대가 없더라도 부대 가입 버튼이 뜨는 버그 해결 2018-04-18 22:05:58 +09:00
Hide_D e709ee5db8 불필요한 array_get 삭제. 모병 칸 버튼을 징병->모병 2018-04-18 22:03:01 +09:00
Hide_D d550415b65 세션 설정시 오타 수정 2018-04-18 22:00:11 +09:00
Hide_D 9ec144e8f6 사령부 인덱스 버그 2018-04-18 21:58:01 +09:00
Hide_D 9458307612 사령부 표기 수정 2018-04-18 21:55:22 +09:00
Hide_D 915c5fcd8e npc 몰포 버그 수정 2018-04-18 21:51:44 +09:00
Hide_D 0df1293139 체결 메시지에도 년도 뜨도록 수정 2018-04-18 21:46:26 +09:00
Hide_D 9bcd18c42e 모,징병시 특성 병종이 2000 만 넘어도 뜨는 문제 해결 2018-04-18 21:42:09 +09:00
Hide_D 1c853107b7 불가침 제의 서신 수정 2018-04-18 21:38:56 +09:00
Hide_D 3f21e28ef7 유저에게 포상량이 확실히 더 많아짐 2018-04-18 21:24:00 +09:00
Hide_D 61244fcef9 추가한 커밋에서 불필요한 npc 코드 제거 2018-04-18 21:17:39 +09:00
Hide_D 03c930ce7d npc가 유저에게 포상, 몰수하는 기준을 더 후하게 잡음 2018-04-18 21:16:49 +09:00
Hide_D f57c4967f2 NPC 삼/팜 버그 마저 수정 2018-04-18 13:56:36 +09:00
Hide_D 49f40d56b0 회피 잘못 적용되는 버그 수정 2018-04-18 10:13:32 +09:00
Hide_D 190fcabbac NPC 삼팜 버그 2018-04-18 09:43:58 +09:00
Hide_D 8bccf449ad NPC 감찰부에서 장수 행동 2018-04-18 09:38:32 +09:00
Hide_D f7dc1a588b 능력치 받아올 때 general이 NULL인 경우도 대응 2018-04-18 09:24:10 +09:00
Hide_D 0eb91c6301 버튼들 '뒤로 가기' 가능하도록 직접 링크로 변경 2018-04-18 00:08:12 +09:00
Hide_D 0fa4d88ea9 lock 파일 경로 체크 2018-04-18 00:01:40 +09:00
Hide_D 18e355b701 bool 변수 받는 문제 해결. 전콘 안 고를 수 있도록 선택 2018-04-17 23:39:36 +09:00
Hide_D 1cb877503d 불가침 합의 시 년 표기가 이상한 문제 2018-04-17 23:30:48 +09:00
Hide_D b65e691255 벌점 안 쌓이는 버그 수정 2018-04-17 23:17:16 +09:00
Hide_D a4ee43f12b 세력도 아래 안보이는 것 해결 2018-04-17 23:04:37 +09:00
Hide_D f71c61a55b 특수 권한 유저 추가 2018-04-17 22:57:10 +09:00
Hide_D 418130f4cd bool 변환에서 false 조건 하나 더 추가 2018-04-17 22:44:39 +09:00
Hide_D 1566aa0243 국가색 새로 2018-04-17 22:15:11 +09:00
Hide_D ab546f66f0 국가간 갠메 2018-04-17 22:13:36 +09:00
Hide_D fc021dae54 등용장 살림 2018-04-17 22:03:23 +09:00
Hide_D 58a7b3afe1 등용장 잠시 살림 2018-04-17 22:03:08 +09:00
Hide_D 72f41df5d2 사령부 warning 2018-04-17 21:59:48 +09:00
Hide_D 8fd6b91cf7 아이템 습득시 warning 해결 2018-04-17 21:57:03 +09:00
Hide_D cf2ace32d1 로그아웃 버튼 삭제 2018-04-17 21:39:08 +09:00
Hide_D 05c4f721f2 메시지창 모바일에서 안보이는 것 해결 2018-04-17 21:37:59 +09:00
Hide_D b2096cc274 불가침 서신 개월수 안보이는 문제 해결, 개월수 년으로 보이는 문제 해결 2018-04-17 21:35:13 +09:00
Hide_D 067df49914 29번 능력치 변경 2018-04-17 20:59:16 +09:00
Hide_D 6961298e53 이미지 못 불러오는 문제 해결 2018-04-17 20:48:49 +09:00
Hide_D 3e6523002c 이벤트 메시지 변경 2018-04-17 20:43:18 +09:00
Hide_D c26add7b04 29번 시나리오 급조 2018-04-17 20:40:56 +09:00
Hide_D 12d50fec03 장수 등록 시 scenario 값과 show_img_level 값 2018-04-17 20:16:04 +09:00
Hide_D a43bbc9f23 proc.php 2018-04-17 20:09:35 +09:00
Hide_D 2bec3b253c proc readonly 2018-04-17 20:09:11 +09:00
Hide_D a69f256168 약관 추가 2018-04-17 20:08:15 +09:00
Hide_D d7fb88eed6 TimeZone 세팅 2018-04-17 19:23:05 +09:00
Hide_D bfd79f479e 파일 경로를 절대 경로로 변경 2018-04-17 19:21:30 +09:00
Hide_D 7ec3fcc78e 대문자 GAME 수정 2018-04-17 19:11:09 +09:00
Hide_DandGogs 858a09b429 Merge branch 'devel' of devsam/core into master 2018-04-17 04:33:14 +09:00
Hide_DandGogs c2298efaf0 Merge branch 'devel' of devsam/core into master 2018-04-13 02:27:07 +09:00
142 changed files with 3319 additions and 1250 deletions
+1
View File
@@ -30,6 +30,7 @@ d_pic/*.png
d_setting/*.php
*/d_setting/*.php
*/d_setting/templates/*.php
**/old/*
test.php
+4 -16
View File
@@ -8,7 +8,7 @@ table {
font-size: 13px;
word-break: break-all;
text-align: center;
font-family: '맑은 고딕'; line-height: 110%;
font-family: '맑은 고딕';
}
th, td {
border: solid 1px; border-spacing: 0px; border-collapse: separate; border-top-color: gray; border-left-color: gray; border-right-color: black; border-bottom-color: black;
@@ -16,7 +16,7 @@ th, td {
font-size: 13px;
word-break: break-all;
text-align: center;
font-family: '맑은 고딕'; line-height: 110%;
font-family: '맑은 고딕';
}
a.just_link {
@@ -53,19 +53,10 @@ div {
font-size: 13px;
word-break: break-all;
text-align: center;
font-family: '맑은 고딕'; line-height: 110%;
font-family: '맑은 고딕';;
}
font { font-family: '맑은 고딕'; line-height: 110%; }
/*
input {
width: 100px; height: 18px;
background-color: black; color: white;
font-family: '맑은 고딕';
font-size: 13px;
line-height: 110%;
}
*/
font { font-family: '맑은 고딕';}
.obj_fill{
display:block;
@@ -77,14 +68,12 @@ button.with_skin {
background-color: black; color: white;
font-family: '맑은 고딕';
font-size: 13px;
line-height: 110%;
}
input.with_skin {
background-color: black; color: white;
font-family: '맑은 고딕';
font-size: 13px;
line-height: 110%;
}
select {
@@ -92,7 +81,6 @@ select {
background-color: black; color: white;
font-family: '맑은 고딕';
font-size: 13px;
line-height: 110%;
}
button {
width: 100px; height: 20px;
+42 -1
View File
@@ -62,8 +62,21 @@ input::-webkit-input-placeholder {
}
.col-form-label{
text-align:center;
}
.terms{
max-height: 200px; overflow: auto;
max-height: 200px; overflow-y: auto;
}
.terms pre{
width:100%;
white-space: pre-wrap; /* Since CSS 2.1 */
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* Internet Explorer 5.5+ */
}
.vertical-center {
@@ -72,4 +85,32 @@ input::-webkit-input-placeholder {
display: flex;
align-items: center;
}
#btn_kakao_login{
cursor: pointer;
height:46px;
width:116px;
background-color: transparent;
color:transparent;
border:0;
background-size: 100%; /* To fill the dimensions of container (button), or */
background-repeat: no-repeat;
background-position: bottom center;
margin-top:5px;
background-image:url('../oauth_kakao/kakao_login_join.png');
}
#btn_kakao_login:hover {
background-image:url('../oauth_kakao/kakao_login_join_ov.png');
}
#bottom_box{
position:fixed;
bottom:0;
width:100%;
left:0;
}
#bottom_box .container{
text-align:center;
}
+5 -165
View File
@@ -81,168 +81,8 @@
height:20px;
}
#EntranceManage_00 {
width: 500px; height: 409px;
z-index: 2;
}
#EntranceManage_0000 {
width: 498px; height: 50px;
}
#EntranceManage_0001 {
width: 100px; height: 30px;
}
#EntranceManage_0002 {
width: 498px; height: 25px;
}
#EntranceManage_0003 {
width: 98px; height: 84px;
line-height: 84px;
}
#EntranceManage_0004 {
width: 148px; height: 84px;
line-height: 84px;
}
#EntranceManage_0005 {
width: 98px; height: 84px;
line-height: 84px;
}
#EntranceManage_0006 {
width: 148px; height: 84px;
text-align: left;
}
#EntranceManage_000600 {
width: 80px; height: 17px;
}
#EntranceManage_000601 {
width: 80px; height: 17px;
}
#EntranceManage_000602 {
width: 80px; height: 17px;
}
#EntranceManage_000603 {
width: 144px; height: 20px;
}
#EntranceManage_0007 {
width: 98px; height: 64px;
line-height: 64px;
}
#EntranceManage_0008 {
width: 148px; height: 64px;
line-height: 64px;
}
#EntranceManage_0009 {
width: 98px; height: 64px;
line-height: 64px;
}
#EntranceManage_0010 {
width: 148px; height: 64px;
line-height: 64px;
}
#EntranceManage_0011 {
width: 98px; height: 20px;
}
#EntranceManage_0012 {
width: 148px; height: 20px;
}
#EntranceManage_0013 {
width: 248px; height: 20px;
}
#EntranceManage_0014 {
width: 98px; height: 64px;
line-height: 64px;
}
#EntranceManage_0015 {
width: 148px; height: 64px;
}
#EntranceManage_001500 {
width: 64px; height: 64px;
}
#EntranceManage_001501 {
width: 64px; height: 64px;
}
#EntranceManage_0016 {
width: 248px; height: 64px;
}
#EntranceManage_001600 {
width: 100px; height: 16px;
display: none;
}
#EntranceManage_001601 {
width: 70px; height: 20px;
}
#EntranceManage_001602 {
width: 85px; height: 20px;
}
#EntranceManage_001603 {
width: 85px; height: 20px;
}
#EntranceManage_0017 {
width: 98px; height: 100px;
line-height: 100px;
}
#EntranceManage_0018 {
width: 398px; height: 100px;
text-align: left;
}
#EntranceManage_0019 {
width: 149px; height: 20px;
}
#EntranceManage_0020 {
width: 500px; height: 20px;
border: none;
}
#EntranceManage_002000 {
width: 500px;
}
#EntranceManage_00200000 {
width: 498px; height: 20px;
}
.EntranceManage_Sequence {
width: 48px; height: 20px;
}
.EntranceManage_Date {
width: 148px; height: 20px;
}
.EntranceManage_Amount {
width: 148px; height: 20px;
}
.EntranceManage_Cumul {
width: 148px; height: 20px;
}
#third_use_disallow{
display:none;
margin-left:10px;
width:40px;
}
+4 -1
View File
@@ -2,11 +2,14 @@
namespace sammo;
define('ROOT', realpath(__dir__.'/..'));
date_default_timezone_set('Asia/Seoul');
mb_internal_encoding("UTF-8");
mb_http_output('UTF-8');
mb_regex_encoding('UTF-8');
ini_set("session.cache_expire", 10080); // minutes
ini_set("session.gc_maxlifetime", 604800); // seconds
function getFriendlyErrorType($type)
{
switch($type)
+11
View File
@@ -2,6 +2,7 @@
DROP TABLE IF EXISTS `system`;
DROP TABLE IF EXISTS `member`;
DROP TABLE IF EXISTS `member_log`;
DROP TABLE IF EXISTS `config`;
-- 시스템 테이블
-- TODO:장기적으로는 key-value(json) storage 형태로 바꾸는게 나을 듯.
@@ -25,6 +26,7 @@ CREATE TABLE `member` (
`EMAIL` VARCHAR(64) NULL DEFAULT NULL,
`PW` CHAR(128) NOT NULL,
`salt` CHAR(16) NOT NULL,
`third_use` INT(1) NOT NULL DEFAULT '0',
`NAME` VARCHAR(64) NOT NULL,
`PICTURE` VARCHAR(64) NULL DEFAULT 'default.jpg',
`IMGSVR` INT(1) NULL DEFAULT '0',
@@ -53,4 +55,13 @@ CREATE TABLE `member_log` (
INDEX `action` (`member_no`, `action_type`, `date`),
INDEX `member` (`member_no`, `date`)
)
ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
CREATE TABLE `config` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`key` VARCHAR(50) NOT NULL,
`value` VARCHAR(100) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `key` (`key`)
)
ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
+1 -1
View File
@@ -5,7 +5,7 @@ include "lib.php";
include "func.php";
$session = Session::requireGameLogin()->setReadOnly();
if($session->userGrade < 5) {
if($session->userGrade < 4) {
?><!DOCTYPE html>
<!DOCTYPE html>
<html>
+1 -1
View File
@@ -6,7 +6,7 @@ include "func.php";
$session = Session::requireGameLogin()->setReadOnly();
if($session->userGrade < 5){
if($session->userGrade < 4){
header('location:_119.php');
die();
}
+15 -19
View File
@@ -24,6 +24,8 @@ if(!$generalID){
$db = DB::db();
$connect=$db->get();
$src = MessageTarget::buildQuick($session->generalID);
switch($btn) {
case "전체 접속허용":
$db->update('general', [
@@ -96,12 +98,10 @@ switch($btn) {
break;
case "특기 부여":
list($year, $month) = $db->queryFirstList('select `year`, `month` from `game` where `no`=1');
$src = MessageTarget::buildQuick($session->generalID);
$text = "특기 부여!";
foreach($db->query("SELECT `no`,leader,power,intel,dex0,dex10,dex20,dex30,dex40 FROM general WHERE `no` IN %li", $genlist) as $general){
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($general['no']), $text, new DateTime(), new DateTime('9999-12-31'), []);
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($general['no']), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
$msg->send(true);
$specialWar = SpecialityConst::pickSpecialWar($general);
@@ -116,10 +116,9 @@ switch($btn) {
break;
case "경험치1000":
$src = MessageTarget::buildQuick($session->generalID);
$text = $btn." 지급!";
foreach($genlist as $generalID){
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new DateTime(), new DateTime('9999-12-31'), []);
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
$msg->send(true);
}
$db->update('general',[
@@ -128,10 +127,9 @@ switch($btn) {
break;
case "공헌치1000":
$src = MessageTarget::buildQuick($session->generalID);
$text = $btn." 지급!";
foreach($genlist as $generalID){
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new DateTime(), new DateTime('9999-12-31'), []);
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
$msg->send(true);
}
$db->update('general',[
@@ -140,10 +138,9 @@ switch($btn) {
break;
case "보숙10000":
$src = MessageTarget::buildQuick($session->generalID);
$text = "보병숙련도+10000 지급!";
foreach($genlist as $generalID){
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new DateTime(), new DateTime('9999-12-31'), []);
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
$msg->send(true);
}
$db->update('general',[
@@ -151,10 +148,9 @@ switch($btn) {
], '`no` IN %li', $genlist);
break;
case "궁숙10000":
$src = MessageTarget::buildQuick($session->generalID);
$text = "궁병숙련도+10000 지급!";
foreach($genlist as $generalID){
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new DateTime(), new DateTime('9999-12-31'), []);
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
$msg->send(true);
}
$db->update('general',[
@@ -165,7 +161,7 @@ switch($btn) {
$src = MessageTarget::buildQuick($session->generalID);
$text = "기병숙련도+10000 지급!";
foreach($genlist as $generalID){
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new DateTime(), new DateTime('9999-12-31'), []);
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
$msg->send(true);
}
$db->update('general',[
@@ -176,7 +172,7 @@ switch($btn) {
$src = MessageTarget::buildQuick($session->generalID);
$text = "귀병숙련도+10000 지급!";
foreach($genlist as $generalID){
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new DateTime(), new DateTime('9999-12-31'), []);
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
$msg->send(true);
}
$db->update('general',[
@@ -187,7 +183,7 @@ switch($btn) {
$src = MessageTarget::buildQuick($session->generalID);
$text = "차병숙련도+10000 지급!";
foreach($genlist as $generalID){
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new DateTime(), new DateTime('9999-12-31'), []);
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
$msg->send(true);
}
$db->update('general',[
@@ -207,7 +203,7 @@ switch($btn) {
case "메세지 전달":
$text = $msg;
foreach($genlist as $generalID){
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new DateTime(), new DateTime('9999-12-31'), []);
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
$msg->send(true);
}
break;
@@ -221,7 +217,7 @@ switch($btn) {
}
foreach($genlist as $generalID){
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new DateTime(), new DateTime('9999-12-31'), []);
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
$msg->send(true);
}
@@ -245,7 +241,7 @@ switch($btn) {
}
foreach($genlist as $generalID){
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new DateTime(), new DateTime('9999-12-31'), []);
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
$msg->send(true);
}
@@ -269,7 +265,7 @@ switch($btn) {
}
foreach($genlist as $generalID){
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new DateTime(), new DateTime('9999-12-31'), []);
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
$msg->send(true);
}
@@ -293,7 +289,7 @@ switch($btn) {
}
foreach($genlist as $generalID){
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new DateTime(), new DateTime('9999-12-31'), []);
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
$msg->send(true);
}
-1
View File
@@ -1630,7 +1630,6 @@ if($isgen == "장수공격" || $isgen == "성벽공격") {
</table>
</form>
</body>
<?php PrintElapsedTime(); ?>
</html>
<?php
+1 -2
View File
@@ -36,7 +36,7 @@ if ($con >= 2) {
<head>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<title>명장일람</title>
<title><?=UniqueConst::$serverName?>: 명장일람</title>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
@@ -344,7 +344,6 @@ for ($i=0; $i < 4; $i++) {
<tr><td><?=closeButton()?></td></tr>
<tr><td><?=banner()?> </td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+1 -2
View File
@@ -18,7 +18,7 @@ increaseRefresh("왕조일람", 2);
<head>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<title>왕조일람</title>
<title><?=UniqueConst::$serverName?>: 왕조일람</title>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
@@ -201,7 +201,6 @@ if ($select == 0) {
<tr><td><?=closeButton()?></td></tr>
<tr><td><?=banner()?></td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+1 -2
View File
@@ -18,7 +18,7 @@ increaseRefresh("왕조일람", 2);
<head>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<title>왕조일람</title>
<title><?=UniqueConst::$serverName?>: 왕조일람</title>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
@@ -202,7 +202,6 @@ if ($select == 0) {
<tr><td><?=closeButton()?></td></tr>
<tr><td><?=banner()?></td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+1 -2
View File
@@ -41,7 +41,7 @@ if ($type <= 0 || $type > 15) {
<head>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<title>장수일람</title>
<title><?=UniqueConst::$serverName?>: 장수일람</title>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
<script type="text/javascript" src="../e_lib/jquery-3.2.1.min.js"></script>
@@ -194,7 +194,6 @@ echo "
<tr><td><?=closeButton()?></td></tr>
<tr><td><?=banner()?></td></tr>
</table>
<?php PrintElapsedTime(); ?>
<script type="text/javascript">
$(document).ready(function() {
$("#viewType").val("<?=$type?>").attr("selected", "selected");
+1 -2
View File
@@ -14,7 +14,7 @@ increaseRefresh("명예의전당", 2);
<head>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<title>명예의 전당</title>
<title><?=UniqueConst::$serverName?>: 명예의 전당</title>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
@@ -118,7 +118,6 @@ for ($i=0; $i < 21; $i++) {
<tr><td><?=closeButton()?></td></tr>
<tr><td><?=banner()?> </td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+3 -4
View File
@@ -15,13 +15,13 @@ $userID = Session::getUserID();
$db = DB::db();
$connect=$db->get();
increaseRefresh("연감", 5);
increaseRefresh("연감", 2);
$query = "select startyear,year,month,conlimit from game limit 1";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
$admin = MYDB_fetch_array($result);
$query = "select map,con,turntime from general where owner='{$userID}'";
$query = "select con,turntime from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
$me = MYDB_fetch_array($result);
@@ -77,7 +77,7 @@ if ($month <= 0) {
<head>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<title>연감</title>
<title><?=UniqueConst::$serverName?>: 연감</title>
<script src="../e_lib/jquery-3.2.1.min.js"></script>
<script src="../d_shared/common_path.js"></script>
<script src="js/common.js"></script>
@@ -159,6 +159,5 @@ reloadWorldMap({
neutralView:true
});
</script>
<?php PrintElapsedTime(); ?>
</body>
</html>
+1 -2
View File
@@ -28,7 +28,7 @@ if($con >= 2) { printLimitMsg($me['turntime']); exit(); }
<head>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<title>세력일람</title>
<title><?=UniqueConst::$serverName?>: 세력일람</title>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
@@ -248,7 +248,6 @@ echo"
<tr><td><?=closeButton()?></td></tr>
<tr><td><?=banner()?></td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+1 -2
View File
@@ -26,7 +26,7 @@ $sel[$type] = "selected";
<head>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<title>빙의일람</title>
<title><?=UniqueConst::$serverName?>: 빙의일람</title>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
@@ -124,7 +124,6 @@ echo "
<tr><td><?=closeButton()?></td></tr>
<tr><td><?=banner()?></td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+3 -4
View File
@@ -17,7 +17,7 @@ $query = "select conlimit from game limit 1";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$admin = MYDB_fetch_array($result);
$query = "select map,con,turntime from general where owner='{$userID}'";
$query = "select con,turntime from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$me = MYDB_fetch_array($result);
@@ -29,7 +29,7 @@ if($con >= 2) { printLimitMsg($me['turntime']); exit(); }
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>세력도</title>
<title><?=UniqueConst::$serverName?>: 세력도</title>
<script src="../e_lib/jquery-3.2.1.min.js"></script>
<script src="../d_shared/common_path.js"></script>
<script src="js/common.js"></script>
@@ -67,7 +67,7 @@ $(function(){
</tr>
<tr>
<td colspan=2 valign=top>
<?php getWorldHistoryRecent(34); ?>
<?=getWorldHistoryRecent(34)?>
</td>
</tr>
</table>
@@ -75,7 +75,6 @@ $(function(){
<tr><td><?=closeButton()?></td></tr>
<tr><td><?=banner()?> </td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+11 -12
View File
@@ -22,15 +22,15 @@ $refresh = [];
$online = [];
$curonline = getOnlineNum();
$visibleLogs = min(11, count($log));
for ($i=0; $i < $visibleLogs; $i++) {
$parse = explode("|", $log[count($log)-$visibleLogs+$i]);
$date[$i] = trim($parse[0]);
$year[$i] = trim($parse[1]);
$month[$i] = trim($parse[2]);
$refresh[$i] = trim($parse[3]);
$online[$i] = trim($parse[4]);
foreach($log as $i=>$value){
$parse = Json::decode($value);
$date[$i] = $parse[0];
$year[$i] = $parse[1];
$month[$i] = $parse[2];
$refresh[$i] = $parse[3];
$online[$i] = $parse[4];
}
if ($game['maxrefresh'] == 0) {
$game['maxrefresh'] = 1;
}
@@ -47,7 +47,7 @@ if ($game['maxonline'] < $curonline) {
<!DOCTYPE html>
<html>
<head>
<title>트래픽정보</title>
<title><?=UniqueConst::$serverName?>: 트래픽정보</title>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
@@ -63,7 +63,7 @@ if ($game['maxonline'] < $curonline) {
<table align=center border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; id=bg0>
<tr><td colspan=4 align=center id=bg2><font size=5>접 속 량</font></td></tr>
<?php
for ($i=0; $i < $visibleLogs; $i++) {
foreach($log as $i=>$value){
$w = round($refresh[$i] / $game['maxrefresh'] * 100, 1);
if ($w >= 100) {
$w -= 0.1;
@@ -133,7 +133,7 @@ $dt = date('H:i');
<table align=center border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; id=bg0>
<tr><td colspan=4 align=center id=bg2><font size=5>접 속 자</font></td></tr>
<?php
for ($i=0; $i < $visibleLogs; $i++) {
foreach($log as $i=>$value){
$w = round($online[$i] / $game['maxonline'] * 100, 1);
if ($w >= 100) {
$w -= 0.1;
@@ -264,7 +264,6 @@ for ($i=0; $i < $count; $i++) {
<tr><td><?=closeButton()?></td></tr>
<tr><td><?=banner()?> </td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+22 -18
View File
@@ -28,7 +28,7 @@ if ($vote[0] == "") {
<!DOCTYPE html>
<html>
<head>
<title>설문조사</title>
<title><?=UniqueConst::$serverName?>: 설문조사</title>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
@@ -198,22 +198,19 @@ if ($admin['voteopen'] >= 1 || $session->userGrade >= 5) {
<tr>
";
$memCount = $db->queryFirstField('SELECT count(`no`) FROM general WHERE npc<2');
if ($memCount == 0) {
$memCount = 1;
}
$memCount = max(1, $db->queryFirstField('SELECT count(`no`) FROM general WHERE npc<2'));
$totalVote = [];
$nationVoteCount = [[0]];
$nationVote = [[]];
$nationVoteCount = [];
$nationVote = [];
foreach ($db->query("SELECT nation, vote, count(`no`) as cnt FROM general WHERE npc<2 GROUP BY nation, vote") as $row) {
$nation = $row['nation'];
$vote = $row['vote'];
$ownVote = $row['vote'];
$cnt = $row['cnt'];
if (!isset($totalVote[$vote])) {
$totalVote[$vote] = 0;
if (!isset($totalVote[$ownVote])) {
$totalVote[$ownVote] = 0;
}
if (!isset($nationVoteCount[$nation])) {
@@ -221,20 +218,20 @@ if ($admin['voteopen'] >= 1 || $session->userGrade >= 5) {
$nationVote[$nation] = [];
}
if (!isset($nationVote[$nation][$vote])) {
$nationVote[$nation][$vote] = 0;
if (!isset($nationVote[$nation][$ownVote])) {
$nationVote[$nation][$ownVote] = 0;
}
$totalVote[$vote] += $cnt;
$totalVote[$ownVote] += $cnt;
$nationVoteCount[$nation] += $cnt;
$nationVote[$nation][$vote] += $cnt;
$nationVote[$nation][$ownVote] += $cnt;
}
for ($i=0; $i < $voteTypeCount; $i++) {
$per = round(($totalVote[$i]??0) / $memCount * 100, 1);
$per = round(($totalVote[$i]??0) * 100 / $memCount, 1);
// if($per < 5) { $vote['cnt'] = "&nbsp;"; }
echo "
<td width={$per}% align=center style=color:".getNewColor($i)."; bgcolor=".getVoteColor($i).">{$totalVote[$i]}</td>
<td width={$per}% align=center style=color:".getNewColor($i)."; bgcolor=".getVoteColor($i).">{$totalVote[$i]}</td>
";
}
@@ -293,8 +290,16 @@ if ($admin['voteopen'] >= 2 || $session->userGrade >= 5) {
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
$memCount = MYDB_num_rows($result);
$voteCount = $nationVoteCount[$nation['nation']] ?? 0;
$percentage = round($voteCount / $memCount * 100, 1);
if($memCount == 0){
$percentage = 100;
}
else{
$percentage = round($voteCount / $memCount * 100, 1);
}
echo "
<tr>
@@ -328,7 +333,6 @@ if ($admin['voteopen'] >= 2 || $session->userGrade >= 5) {
<tr><td><?=closeButton()?></td></tr>
<tr><td><?=banner()?> </td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+1 -2
View File
@@ -58,7 +58,7 @@ if ($msg2 == "") {
<!DOCTYPE html>
<html>
<head>
<title>거래장</title>
<title><?=UniqueConst::$serverName?>: 거래장</title>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
@@ -299,6 +299,5 @@ for ($i=0; $i < $count; $i++) {
<tr><td><?=closeButton()?></td></tr>
<tr><td><?=banner()?> </td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+22 -7
View File
@@ -75,7 +75,7 @@ $sel[$type] = "selected";
<html>
<head>
<title>감찰부</title>
<title><?=UniqueConst::$serverName?>: 감찰부</title>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
@@ -100,20 +100,23 @@ $sel[$type] = "selected";
<?php
switch ($type) {
default:
case 0: $query = "select no,name from general where nation='{$me['nation']}' order by turntime desc"; break;
case 1: $query = "select no,name from general where nation='{$me['nation']}' order by recwar desc"; break;
case 2: $query = "select no,name from general where nation='{$me['nation']}' order by npc,binary(name)"; break;
case 3: $query = "select no,name from general where nation='{$me['nation']}' order by warnum desc"; break;
case 0: $query = "select no,name,npc from general where nation='{$me['nation']}' order by turntime desc"; break;
case 1: $query = "select no,name,npc from general where nation='{$me['nation']}' order by recwar desc"; break;
case 2: $query = "select no,name,npc from general where nation='{$me['nation']}' order by npc,binary(name)"; break;
case 3: $query = "select no,name,npc from general where nation='{$me['nation']}' order by warnum desc"; break;
}
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
$gencount = MYDB_num_rows($result);
$npc = 0;
for ($i=0; $i < $gencount; $i++) {
$general = MYDB_fetch_array($result);
// 선택 없으면 맨 처음 장수
if ($gen == 0) {
$gen = $general['no'];
}
if($gen == $general['no']){
$npc = $general['npc'];
}
if ($gen == $general['no']) {
echo "
<option selected value={$general['no']}>{$general['name']}</option>";
@@ -153,11 +156,23 @@ for ($i=0; $i < $gencount; $i++) {
<?=getBatResRecent($gen, 24)?>
</td>
</tr>
<?php if($npc > 1): ?>
<tr>
<td align=center id=bg1><font color=orange size=3>개인 기록</font></td>
<td align=center id=bg1><font color=orange size=3>&nbsp;</font></td>
</tr>
<tr>
<td valign=top>
<?=getGenLogRecent($gen, 24)?>
</td>
<td valign=top>
</td>
</tr>
<?php endif; ?>
</table>
<table align=center width=1000 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; id=bg0>
<tr><td><?=closeButton()?></td></tr>
<tr><td><?=banner()?> </td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+41 -14
View File
@@ -37,7 +37,13 @@ case 3: $tnmt_type = "<font color=cyan>설전</font>"; $tp = "itl"; $tp2 = "
$str1 = getTournament($admin['tournament']);
$str2 = getTournamentTime();
if($str2){
$str2 = ', '.$str2;
}
$str3 = getTournamentTerm();
if($str3){
$str3 = ', '.$str3;
}
?>
<!DOCTYPE html>
@@ -47,13 +53,13 @@ $str3 = getTournamentTerm();
} ?>
<head>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<title>베팅장</title>
<title><?=UniqueConst::$serverName?>: 베팅장</title>
<style>
body { color:white; background-color:black; border-width:1px; border-color:gray; }
table { font-family:'맑은 고딕'; line-height:110%; }
font { font-family:'맑은 고딕'; line-height:110%; }
input { font-family:'맑은 고딕'; line-height:110%; height:20px }
select { font-family:'굴림'; line-height:100%; }
table { font-family:'맑은 고딕';}
font { font-family:'맑은 고딕';}
input { font-family:'맑은 고딕';height:20px }
select { font-family:'굴림'; }
#bg0 { background-image:url(<?=ServConfig::$gameImagePath?>/back_walnut.jpg); }
#bg1 { background-image:url(<?=ServConfig::$gameImagePath?>/back_green.jpg); }
#bg2 { background-image:url(<?=ServConfig::$gameImagePath?>/back_blue.jpg); }
@@ -67,7 +73,7 @@ select { font-family:'굴림'; line-height:100%; }
</table>
<table align=center width=1120 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:10px;word-break:break-all; id=bg0>
<tr><td colspan=16><input type=button value='갱신' onclick='location.reload()'></td></tr>
<tr><td colspan=16 align=center><font color=white size=6><?=$tnmt_type?> (<?=$str1.", ".$str2.", ".$str3?>)</font></td></tr>
<tr><td colspan=16 align=center><font color=white size=6><?=$tnmt_type?> (<?=$str1.$str2.$str3?>)</font></td></tr>
<tr><td height=50 colspan=16 align=center id=bg2><font color=limegreen size=6>16강 상황</font><br><font color=orange size=3>(전체 금액 : <?=$admin['bet']?> / 내 투자 금액 : <?=$me['bet']?>)</font></td></tr>
</table>
<table align=center width=1120 border=0 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:10px;word-break:break-all; id=bg0>
@@ -77,7 +83,11 @@ select { font-family:'굴림'; line-height:100%; }
$query = "select npc,name,win from tournament where grp>=60 order by grp, grp_no";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
for ($i=0; $i < 1; $i++) {
$general = MYDB_fetch_array($result);
$general = MYDB_fetch_array($result)??[
'npc'=>0,
'name'=>'',
'win'=>0
];
if ($general['name'] == "") {
$general['name'] = "-";
}
@@ -102,7 +112,11 @@ for ($i=0; $i < 1; $i++) {
$cent[$i] = "<font color=white>";
}
for ($i=0; $i < 2; $i++) {
$general = MYDB_fetch_array($result);
$general = MYDB_fetch_array($result)??[
'npc'=>0,
'name'=>'',
'win'=>0
];
if ($general['name'] == "") {
$general['name'] = "-";
}
@@ -143,7 +157,11 @@ for ($i=0; $i < 2; $i++) {
$cent[$i] = "<font color=white>";
}
for ($i=0; $i < 4; $i++) {
$general = MYDB_fetch_array($result);
$general = MYDB_fetch_array($result)??[
'npc'=>0,
'name'=>'',
'win'=>0
];
if ($general['name'] == "") {
$general['name'] = "-";
}
@@ -184,7 +202,11 @@ for ($i=0; $i < 4; $i++) {
$cent[$i] = "<font color=white>";
}
for ($i=0; $i < 8; $i++) {
$general = MYDB_fetch_array($result);
$general = MYDB_fetch_array($result)??[
'npc'=>0,
'name'=>'',
'win'=>0
];
if ($general['name'] == "") {
$general['name'] = "-";
}
@@ -225,7 +247,11 @@ for ($i=0; $i < 8; $i++) {
$cent[$i] = "<font color=white>";
}
for ($i=0; $i < 16; $i++) {
$general = MYDB_fetch_array($result);
$general = MYDB_fetch_array($result)??[
'npc'=>0,
'name'=>'',
'win'=>0
];
if ($general['name'] == "") {
$general['name'] = "-";
}
@@ -268,10 +294,12 @@ for ($i=0; $i < 16; $i++) {
}
for ($i=0; $i < 16; $i++) {
$bet[$i] = @round($admin['bet'] / $admin["bet{$i}"], 2);
if ($bet[$i] == 0) {
if($admin["bet{$i}"] == 0){
$bet[$i] = "∞";
}
else{
$bet[$i] = round($admin['bet'] / $admin["bet{$i}"], 2);
}
}
for ($i=0; $i < 16; $i++) {
@@ -405,6 +433,5 @@ for ($i=0; $i < 4; $i++) {
<tr><td><?=closeButton()?></td></tr>
<tr><td><?=banner()?></td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+1 -2
View File
@@ -25,7 +25,7 @@ if($me['level'] < 5) {
<!DOCTYPE html>
<html>
<head>
<title>기밀실</title>
<title><?=UniqueConst::$serverName?>: 기밀실</title>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
@@ -69,7 +69,6 @@ for($i=0; $i < 20; $i++) {
<tr><td><?=backButton()?></td></tr>
<tr><td><?=banner()?></td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+14 -11
View File
@@ -58,13 +58,24 @@ $nation = MYDB_fetch_array($result);
$lv = getNationChiefLevel($nation['level']);
$turn = [];
$gen = [[],[],[],[],[],[],[],[],[],[],[],[]];
for($i=12; $i >= $lv; $i--) {
$turn[$i] = getCoreTurn($nation, $i);
$query = "select name,turntime,npc from general where level={$i} and nation='{$me['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gen[$i] = MYDB_fetch_array($result);
$gen[$i] = MYDB_fetch_array($result)??[
'npc'=>0,
'name'=>'',
'turntime'=>''
];
}
for($i= $lv - 1; $i>=5; $i--){
$gen[$i] = [
'npc'=>0,
'name'=>'',
'turntime'=>''
];
}
?>
@@ -72,7 +83,7 @@ for($i=12; $i >= $lv; $i--) {
<html>
<head>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<title>사령부</title>
<title><?=UniqueConst::$serverName?>: 사령부</title>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
<script type="text/javascript">
@@ -110,13 +121,6 @@ for($i=12; $i >= $lv; $i--) {
for($k=0; $k < 2; $k++) {
$l4 = 12 - $k; $l3 = 10 - $k; $l2 = 8 - $k; $l1 = 6 - $k;
if(!isset($gen[$l4])){
$gen[$l4] = [
'npc'=>0,
'name'=>0
];
}
if ($gen[$l4]['npc'] >= 2) { $gen[$l4]['name'] = "<font color=cyan>".($gen[$l4]['name']??'')."</font>"; }
elseif($gen[$l4]['npc'] == 1) { $gen[$l4]['name'] = "<font color=skyblue>".($gen[$l4]['name']??'')."</font>"; }
if ($gen[$l3]['npc'] >= 2) { $gen[$l3]['name'] = "<font color=cyan>".($gen[$l3]['name']??'')."</font>"; }
@@ -188,7 +192,6 @@ for($k=0; $k < 2; $k++) {
<tr><td><?=backButton()?></td></tr>
<tr><td><?=banner()?></td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+143 -119
View File
@@ -25,24 +25,39 @@ $query = "select nation,level,spy from nation where nation='{$me['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$myNation = MYDB_fetch_array($result);
$templates = new \League\Plates\Engine('templates');
?>
<!DOCTYPE html>
<html>
<head>
<title>도시정보</title>
<title><?=UniqueConst::$serverName?>: 도시정보</title>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<link href="../d_shared/common.css" rel="stylesheet">
<link href="css/common.css" rel="stylesheet">
<style>
#general_list tr td{
text-align:center;
}
#general_list tr td:last-child{
text-align:left;
padding-left:1em;
}
.general_turn_text{
font-size:x-small;
}
</style>
</head>
<body>
<table align=center width=1000 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; id=bg0>
<table align=center width=1000 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; class=bg0>
<tr><td>도 시 정 보<br><?=backButton()?></td></tr>
</table>
<table align=center width=1000 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; id=bg0>
<table align=center width=1000 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; class=bg0>
<tr>
<td width=998>
<form name=cityselect method=get>도시선택 :
@@ -160,44 +175,44 @@ if($city['trade'] == 0) {
}
?>
<table align=center width=1000 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; id=bg0>
<table align=center width=1000 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; class=bg0>
<tr><td><?=backButton()?></td></tr>
</table>
<table align=center width=1000 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; id=bg2>
<table align=center width=1000 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; class=bg2>
<tr>
<td colspan=12 align=center style=color:"<?=newColor($nation['color'])?>"; bgcolor=<?=$nation['color']?>>【 <?=CityConst::$regionMap[$city['region']]?> | <?=CityConst::$levelMap[$city['level']]?> 】 <?=$city['name']?></td>
</tr>
<tr>
<td align=center width=48 id=bg1>주민</td>
<td align=center width=48 class=bg1>주민</td>
<td align=center width=112><?=$city['pop']?>/<?=$city['pop2']?></td>
<td align=center width=48 id=bg1>농업</td>
<td align=center width=48 class=bg1>농업</td>
<td align=center width=108><?=$city['agri']?>/<?=$city['agri2']?></td>
<td align=center width=48 id=bg1>상업</td>
<td align=center width=48 class=bg1>상업</td>
<td align=center width=108><?=$city['comm']?>/<?=$city['comm2']?></td>
<td align=center width=48 id=bg1>치안</td>
<td align=center width=48 class=bg1>치안</td>
<td align=center width=108><?=$city['secu']?>/<?=$city['secu2']?></td>
<td align=center width=48 id=bg1>수비</td>
<td align=center width=48 class=bg1>수비</td>
<td align=center width=108><?=$city['def']?>/<?=$city['def2']?></td>
<td align=center width=48 id=bg1>성벽</td>
<td align=center width=48 class=bg1>성벽</td>
<td align=center width=108><?=$city['wall']?>/<?=$city['wall2']?></td>
</tr>
<tr>
<td align=center id=bg1>민심</td>
<td align=center class=bg1>민심</td>
<td align=center><?=$city['rate']?></td>
<td align=center id=bg1>시세</td>
<td align=center class=bg1>시세</td>
<td align=center><?=$city['trade']?>%</td>
<td align=center id=bg1>인구</td>
<td align=center class=bg1>인구</td>
<td align=center><?=round($city['pop']/$city['pop2']*100, 2)?>%</td>
<td align=center id=bg1>태수</td>
<td align=center class=bg1>태수</td>
<td align=center><?=$gen1['name']??'-'?></td>
<td align=center id=bg1>군사</td>
<td align=center class=bg1>군사</td>
<td align=center><?=$gen2['name']??'-'?></td>
<td align=center id=bg1>시중</td>
<td align=center class=bg1>시중</td>
<td align=center><?=$gen3['name']??'-'?></td>
</tr>
<tr>
<td align=center id=bg1>장수</td>
<td align=center class=bg1>장수</td>
<td colspan=11>
<?php
$query = "select name, npc from general where city='{$city['city']}' and nation='{$city['nation']}'"; // 장수 목록
@@ -212,6 +227,26 @@ if($city['trade'] == 0) {
</td>
</tr>
</table>
<br>
<table align=center border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; class=bg0>
<thead>
<tr>
<td width=64 align=center class=bg1>얼 굴</td>
<td width=98 align=center class=bg1>이 름</td>
<td width=48 align=center class=bg1>통솔</td>
<td width=48 align=center class=bg1>무력</td>
<td width=48 align=center class=bg1>지력</td>
<td width=78 align=center class=bg1>관 직</td>
<td width=28 align=center class=bg1>守</td>
<td width=78 align=center class=bg1>병 종</td>
<td width=78 align=center class=bg1>병 사</td>
<td width=48 align=center class=bg1>훈련</td>
<td width=48 align=center class=bg1>사기</td>
<td width=310 align=center class=bg1>명 령</td>
</tr></thead><tbody class='bg0' id='general_list'>
<?php
$query = "select npc,mode,no,picture,imgsvr,name,injury,leader,power,intel,level,nation,crewtype,crew,train,atmos,term,turn0,turn1,turn2,turn3,turn4,turn5 from general where city='{$city['city']}' order by dedication desc"; // 장수 목록
$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
@@ -224,127 +259,116 @@ foreach(getAllNationStaticInfo() as $nation){
$nationlevel[$nation['nation']] = $nation['level'];
}
if($gencount != 0) {
echo "
<br>
<table align=center border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; id=bg0>
<tr>
<td width=64 align=center id=bg1>얼 굴</td>
<td width=98 align=center id=bg1>이 름</td>
<td width=48 align=center id=bg1>통솔</td>
<td width=48 align=center id=bg1>무력</td>
<td width=48 align=center id=bg1>지력</td>
<td width=78 align=center id=bg1>관 직</td>
<td width=28 align=center id=bg1>守</td>
<td width=78 align=center id=bg1>병 종</td>
<td width=78 align=center id=bg1>병 사</td>
<td width=48 align=center id=bg1>훈련</td>
<td width=48 align=center id=bg1>사기</td>
<td width=310 align=center id=bg1>명 령</td>
</tr>";
}
for($j=0; $j < $gencount; $j++) {
$general = MYDB_fetch_array($genresult);
$nationInfo = getNationStaticInfo($general['nation']);
if($general['nation'] != 0 && $general['nation'] == $myNation['nation']){
$ourGeneral = true;
}
else{
$ourGeneral = false;
}
$isNPC = $general['npc']>1;
$wounded = $general['injury'];
$name = $general['name'];
$nameText = formatName($name, $general['npc']);
$leadership = $general['leader'];
$power = $general['power'];
$intel = $general['intel'];
$leadershipText = formatWounded($leadership, $general['injury']);
$powerText = formatWounded($power, $general['injury']);
$intelText = formatWounded($intel, $general['injury']);
$level = $general['level'];
$levelText = getLevel($general['level']);
if($general['level'] == 12) {
$lbonus = $nationlevel[$general['nation']] * 2;
$leadershipBonus = $nationInfo['level'] * 2;
} elseif($general['level'] >= 5) {
$lbonus = $nationlevel[$general['nation']];
$leadershipBonus = $nationInfo['level'];
} else {
$lbonus = 0;
$leadershipBonus = 0;
}
if($lbonus > 0) {
$lbonus = "<font color=cyan>+{$lbonus}</font>";
} else {
$lbonus = "";
$leadershipBonusText = formatLeadershipBonus($leadershipBonus);
if($ourGeneral){
$defenceMode = $general['mode'];
$defenceModeText = formatDefenceMode($defenceMode);
$crewType = $general['crewtype'];
$crewTypeText = GameUnitConst::byId($crewType)->name;
$crew = $general['crew'];
$train = $general['train'];
$atmos = $general['atmos'];
}
else{
$defenceMode = 0;
$defenceModeText = '';
$crewType = 0;
$crewTypeText = '';
$crew = $general['crew'];
$train = -1;
$atmos = -1;
}
if($general['injury'] > 0) {
$leader = intdiv($general['leader'] * (100 - $general['injury']), 100);
$power = intdiv($general['power'] * (100 - $general['injury']), 100);
$intel = intdiv($general['intel'] * (100 - $general['injury']), 100);
$leader = "<font color=red>{$leader}</font>{$lbonus}";
$power = "<font color=red>{$power}</font>";
$intel = "<font color=red>{$intel}</font>";
} else {
$leader = "{$general['leader']}{$lbonus}";
$power = "{$general['power']}";
$intel = "{$general['intel']}";
}
$nation = $general['nation'];
$nationName = $nationInfo['name'];
if($general['npc'] >= 2) { $general['name'] = "<font color=cyan>{$general['name']}</font>"; }
elseif($general['npc'] == 1) { $general['name'] = "<font color=skyblue>{$general['name']}</font>"; }
$imageTemp = GetImageURL($general['imgsvr']);
echo "
<tr>
<td align=center height=64></td>
<td align=center>{$general['name']}</td>
<td align=center>$leader</td>
<td align=center>$power</td>
<td align=center>$intel</td>
<td align=center>".getLevel($general['level'])."</td>";
//아국장수이거나 보는 사람이 운영자일때 보여줌
if(($general['nation'] != 0 && $general['nation'] == $myNation['nation']) || $session->userGrade >= 5) {
switch($general['mode']) {
case 0: $mode = "×"; break;
case 1: $mode = "○"; break;
case 2: $mode = "◎"; break;
if($ourGeneral && !$isNPC){
$turnText = [];
foreach(getTurn($general, 1) as $turnRawIdx=>$turn){
$turnIdx = $turnRawIdx+1;
$turnText[] = "{$turnIdx} : $turn";
}
echo "
<td align=center>$mode</td>
<td align=center>".GameUnitConst::byId($general['crewtype'])->name."</td>
<td align=center>{$general['crew']}</td>
<td align=center>{$general['train']}</td>
<td align=center>{$general['atmos']}</td>";
if($general['npc'] >= 2) {
echo "
<td>NPC 장수";
} else {
echo "
<td>
<font size=1>";
$turn = getTurn($general, 1);
for($i=0; $i < 4; $i++) {
$k = $i+1;
echo "
&nbsp;&nbsp;$k : $turn[$i]<br>";
}
echo "
</font>";
}
} elseif($general['nation'] != 0) {
echo "
<td align=center>?</td>
<td align=center>?</td>
<td align=center>{$general['crew']}</td>
<td align=center>?</td>
<td align=center>?</td>
<td>【{$nationname[$general['nation']]}】 장수";
} else {
echo "
<td align=center>?</td>
<td align=center>?</td>
<td align=center>{$general['crew']}</td>
<td align=center>?</td>
<td align=center>?</td>
<td>&nbsp; 재 야";
$turnText = join('<br>', $turnText);
}
echo "
</td>
</tr>";
else{
$turnText = '';
}
echo $templates->render('cityGeneral', [
'ourGeneral'=>$ourGeneral,
'isNPC'=>$isNPC,
'wounded'=>$wounded,
'name'=>$name,
'nameText'=>$nameText,
'leadership'=>$leadership,
'leadershipText'=>$leadershipText,
'leadershipBonus'=>$leadershipBonus,
'leadershipBonusText'=>$leadershipBonusText,
'level'=>$level,
'levelText'=>$levelText,
'power'=>$power,
'powerText'=>$powerText,
'intel'=>$intel,
'intelText'=>$intelText,
'defenceMode'=>$defenceMode,
'defenceModeText'=>$defenceModeText,
'crewType'=>$crewType,
'crewTypeText'=>$crewTypeText,
'crew'=>$crew,
'train'=>$train,
'atmos'=>$atmos,
'nation'=>$nation,
'nationName'=>$nationName,
'turnText'=>$turnText
]);
}
?>
</tbody>
</table>
<table align=center width=1000 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; id=bg0>
<table align=center width=1000 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; class=bg0>
<tr><td><?=backButton()?></td></tr>
<tr><td><?=banner()?> </td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+43 -47
View File
@@ -48,27 +48,27 @@ if ($me['level'] >= 5) {
<html>
<head>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<title>내무부</title>
<title><?=UniqueConst::$serverName?>: 내무부</title>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
</head>
<body>
<table align=center width=1000 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; id=bg0>
<table align=center width=1000 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; class=bg0>
<tr><td>내 무 부<br><?=backButton()?></td></tr>
</table>
<table align=center width=1000 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; id=bg0>
<table align=center width=1000 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; class=bg0>
<tr><td colspan=9 align=center bgcolor=blue>외 교 관 계</td></tr>
<tr>
<td width=100 align=center id=bg1>국 가 명</td>
<td width=50 align=center id=bg1>국력</td>
<td width=40 align=center id=bg1>장수</td>
<td width=40 align=center id=bg1>속령</td>
<td width=80 align=center id=bg1>상태</td>
<td width=60 align=center id=bg1>기간</td>
<td width=100 align=center id=bg1>종 료 시 점</td>
<td align=center id=bg1>비 고</td>
<td width=100 align=center class=bg1>국 가 명</td>
<td width=50 align=center class=bg1>국력</td>
<td width=40 align=center class=bg1>장수</td>
<td width=40 align=center class=bg1>속령</td>
<td width=80 align=center class=bg1>상태</td>
<td width=60 align=center class=bg1>기간</td>
<td width=100 align=center class=bg1>종 료 시 점</td>
<td align=center class=bg1>비 고</td>
</tr>
<?php
$query = "select year,month from game limit 1";
@@ -220,65 +220,62 @@ if ($budgetricediff > 0) {
}
?>
<table align=center width=1000 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; id=bg0>
<table align=center width=1000 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; class=bg0>
<form name=form1 method=post action=c_dipcenter.php>
<tr><td colspan=2 height=10></td></tr>
<tr><td colspan=2 align=center bgcolor=orange>국 가 방 침 &amp; 임관 권유 메세지</td></tr>
<tr><td colspan=2 id=bg1>국가 방침 <input type=text <?=$read?> maxlength=500 style=color:white;background-color:black;width:830px; name=msg value='<?=$nation['msg']?>'><input type=<?=$btn?> name=btn value=국가방침></td></tr>
<tr><td colspan=2 id=bg1>임관 권유 <input type=text <?=$read?> maxlength=500 style=color:white;background-color:black;width:830px; name=scoutmsg value='<?=$nation['scoutmsg']?>'><input type=<?=$btn?> name=btn value=임관권유></td></tr>
<tr><td colspan=2 class=bg1>국가 방침 <textarea <?=$read?> maxlength=1000 rows="5" style="color:white;background-color:black;width:830px;" name=msg><?=$nation['msg']?></textarea><input type=<?=$btn?> name=btn value=국가방침></td></tr>
<tr><td colspan=2 class=bg1>임관 권유 <input type=text <?=$read?> maxlength=500 style=color:white;background-color:black;width:830px; name=scoutmsg value='<?=$nation['scoutmsg']?>'><input type=<?=$btn?> name=btn value=임관권유></td></tr>
<tr><td colspan=2>900 x 200px 넘는 크기를 점유할 시 통보없이 제한될 수 있습니다.</td></tr>
<tr><td colspan=2 height=10></td></tr>
<tr><td colspan=2 align=center bgcolor=green>예 산 &amp; 정 책</td></tr>
<tr>
<td colspan=2>
<table width=998 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; id=bg0>
<?php
echo "
<table width=998 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; class=bg0>
<tr>
<td colspan=2 align=center id=bg1>자금 예산</td>
<td colspan=2 align=center id=bg1>병량 예산</td>
<td colspan=2 align=center class=bg1>자금 예산</td>
<td colspan=2 align=center class=bg1>병량 예산</td>
</tr>
<tr>
<td width=248 align=right id=bg1>현 재&nbsp;&nbsp;&nbsp;</td>
<td width=248 align=center>{$nation['gold']}</td>
<td width=248 align=right id=bg1>현 재&nbsp;&nbsp;&nbsp;</td>
<td width=248 align=center>{$nation['rice']}</td>
<td width=248 align=right class=bg1>현 재&nbsp;&nbsp;&nbsp;</td>
<td width=248 align=center><?=$nation['gold']?></td>
<td width=248 align=right class=bg1>현 재&nbsp;&nbsp;&nbsp;</td>
<td width=248 align=center><?=$nation['rice']?></td>
</tr>
<tr>
<td align=right id=bg1>단기수입&nbsp;&nbsp;&nbsp;</td>
<td align=center>+$deadIncome</td>
<td align=right id=bg1>둔전수입&nbsp;&nbsp;&nbsp;</td>
<td align=center>+$riceincomeList[1]</td>
<td align=right class=bg1>단기수입&nbsp;&nbsp;&nbsp;</td>
<td align=center>+<?=$deadIncome?></td>
<td align=right class=bg1>둔전수입&nbsp;&nbsp;&nbsp;</td>
<td align=center>+<?=$riceincomeList[1]?></td>
</tr>
<tr>
<td align=right id=bg1>세 금&nbsp;&nbsp;&nbsp;</td>
<td align=center>+$goldincomeList[0]</td>
<td align=right id=bg1>세 곡&nbsp;&nbsp;&nbsp;</td>
<td align=center>+$riceincomeList[0]</td>
<td align=right class=bg1>세 금&nbsp;&nbsp;&nbsp;</td>
<td align=center>+<?=$goldincomeList[0]?></td>
<td align=right class=bg1>세 곡&nbsp;&nbsp;&nbsp;</td>
<td align=center>+<?=$riceincomeList[0]?></td>
</tr>
<tr>
<td align=right id=bg1>수입 / 지출&nbsp;&nbsp;&nbsp;</td>
<td align=center>+$goldincome / -$goldoutcome</td>
<td align=right id=bg1>수입 / 지출&nbsp;&nbsp;&nbsp;</td>
<td align=center>+$riceincome / -$riceoutcome</td>
<td align=right class=bg1>수입 / 지출&nbsp;&nbsp;&nbsp;</td>
<td align=center>+<?=$goldincome?> / -<?=$goldoutcome?></td>
<td align=right class=bg1>수입 / 지출&nbsp;&nbsp;&nbsp;</td>
<td align=center>+<?=$riceincome?> / -<?=$riceoutcome?></td>
</tr>
<tr>
<td align=right id=bg1>국고 예산&nbsp;&nbsp;&nbsp;</td>
<td align=center>{$budgetgold} ({$budgetgolddiff})</td>
<td align=right id=bg1>병량 예산&nbsp;&nbsp;&nbsp;</td>
<td align=center>{$budgetrice} ({$budgetricediff})</td>
</tr>";
?>
<td align=right class=bg1>국고 예산&nbsp;&nbsp;&nbsp;</td>
<td align=center><?=$budgetgold?> (<?=$budgetgolddiff?>)</td>
<td align=right class=bg1>병량 예산&nbsp;&nbsp;&nbsp;</td>
<td align=center><?=$budgetrice?> (<?=$budgetricediff?>)</td>
</tr>
<tr>
<td align=right id=bg1>세율 (5 ~ 30%)&nbsp;&nbsp;&nbsp;</td>
<td align=right class=bg1>세율 (5 ~ 30%)&nbsp;&nbsp;&nbsp;</td>
<td align=center><input type=text <?=$read?> name=rate style=text-align:right;color:white;background-color:black; size=3 maxlength=3 value=<?=$nation['rate']?>>% <input type=<?=$btn?> name=btn value=세율></td>
<td align=right id=bg1>봉급 지급율 (20 ~ 200%)&nbsp;&nbsp;&nbsp;</td>
<td align=right class=bg1>봉급 지급율 (20 ~ 200%)&nbsp;&nbsp;&nbsp;</td>
<td align=center><input type=text <?=$read?> name=bill style=text-align:right;color:white;background-color:black; size=3 maxlength=3 value=<?=$nation['bill']?>>% <input type=<?=$btn?> name=btn value=지급율></td>
</tr>
<tr>
<td align=right id=bg1>기밀 권한 (1 ~ 99년)&nbsp;&nbsp;&nbsp;</td>
<td align=right class=bg1>기밀 권한 (1 ~ 99년)&nbsp;&nbsp;&nbsp;</td>
<td align=center><input type=text <?=$read?> name=secretlimit style=text-align:right;color:white;background-color:black; size=3 maxlength=3 value=<?=$nation['secretlimit']?>>년 <input type=<?=$btn?> name=btn value=기밀권한></td>
<td align=right id=bg1>임관&전쟁 변경 가능</td>
<td align=right class=bg1>임관&amp;전쟁 변경 가능</td>
<td align=center>무제한</td>
</tr>
<tr>
@@ -307,10 +304,9 @@ if ($nation['war'] == 0) {
<tr><td colspan=2 height=10></td></tr>
</form>
</table>
<table align=center width=1000 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; id=bg0>
<table align=center width=1000 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; class=bg0>
<tr><td><?=backButton()?></td></tr>
<tr><td><?=banner()?></td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+4 -5
View File
@@ -16,7 +16,7 @@ $query = "select turnterm from game limit 1";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$admin = MYDB_fetch_array($result);
$query = "select no,nation,map from general where owner='{$userID}'";
$query = "select no,nation from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$me = MYDB_fetch_array($result);
@@ -78,7 +78,7 @@ foreach ($db->queryAllLists('SELECT city, `name`, conflict FROM city WHERE confl
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>중원정보</title>
<title><?=UniqueConst::$serverName?>: 중원 정보</title>
<script src="../e_lib/jquery-3.2.1.min.js"></script>
<script src="../d_shared/common_path.js"></script>
<script src="js/common.js"></script>
@@ -236,10 +236,10 @@ for($i=0; $i < $nationcount; $i++) {
<td width=698 height=420>
<?=getMapHtml()?>
</td>
<td width=98 valign=top><?=$nationStr?></td>
<td width=101 valign=top><?=$nationStr?></td>
<td width=78 valign=top><?=$powerStr?></td>
<td width=58 valign=top><?=$genStr?></td>
<td width=58 valign=top><?=$cityStr?></td>
<td width=55 valign=top><?=$cityStr?></td>
</tr>
</table>
<br>
@@ -248,6 +248,5 @@ for($i=0; $i < $nationcount; $i++) {
<tr><td><?=backButton()?></td></tr>
<tr><td><?=banner()?></td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+1 -2
View File
@@ -54,7 +54,7 @@ $sel[$type] = "selected";
} ?>
<head>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<title>암행부</title>
<title><?=UniqueConst::$serverName?>: 암행부</title>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
@@ -210,6 +210,5 @@ echo "
<tr><td><?=closeButton()?></td></tr>
<tr><td><?=banner()?></td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+8 -4
View File
@@ -30,7 +30,7 @@ if($meLevel == 0) {
<head>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<title>인사부</title>
<title><?=UniqueConst::$serverName?>: 인사부</title>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
<script type="text/javascript">
@@ -205,7 +205,10 @@ if($meLevel >= 5 && $nation['l11set'] == 0) {
$query = "select name,city from general where nation='{$me['nation']}' and level='11'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
echo "{$general['name']} 【".CityConst::byID($general['city'])->name."】";
if($general){
echo "{$general['name']} 【".CityConst::byID($general['city'])->name."】";
}
}
echo "
</td>
@@ -257,7 +260,9 @@ for($i=10; $i >= $lv; $i--) {
$query = "select name,city from general where nation='{$me['nation']}' and level={$i}";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
echo "{$general['name']} 【".CityConst::byID($general['city'])->name."】";
if($general){
echo "{$general['name']} 【".CityConst::byID($general['city'])->name."】";
}
}
echo "</td></form>";
if($i % 2 == 1) { echo "</tr>"; }
@@ -504,6 +509,5 @@ for($j=0; $j < $citycount; $j++) {
<tr><td><?=backButton()?></td></tr>
<tr><td><?=banner()?></td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+1 -2
View File
@@ -37,7 +37,7 @@ $sel = [$type => "selected"];
<head>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<title>세력도시</title>
<title><?=UniqueConst::$serverName?>: 세력도시</title>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
@@ -192,7 +192,6 @@ for ($j=0; $j < $citycount; $j++) {
<tr><td><?=backButton()?></td></tr>
<tr><td><?=banner()?></td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+1 -2
View File
@@ -37,7 +37,7 @@ $sel = [$type => "selected"];
<head>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<title>세력장수</title>
<title><?=UniqueConst::$serverName?>: 세력장수</title>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
@@ -195,7 +195,6 @@ for($j=0; $j < $gencount; $j++) {
<tr><td><?=backButton()?></td></tr>
<tr><td><?=banner()?></td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+1 -2
View File
@@ -26,7 +26,7 @@ if($me['level'] == 0) {
<head>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<title>세력정보</title>
<title><?=UniqueConst::$serverName?>: 세력정보</title>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
@@ -160,7 +160,6 @@ echo"
<tr><td><?=backButton()?></td></tr>
<tr><td><?=banner()?></td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+2 -14
View File
@@ -5,16 +5,11 @@ include "lib.php";
include "func.php";
$btn = Util::getReq('btn');
$map = Util::getReq('map', 'int', 0);
$mode = Util::getReq('mode', 'int', 2);
$tnmt = Util::getReq('tnmt', 'int', 1);
extractMissingPostToGlobals();
if($map < 0 || $map > 2){
$map = 0;
}
if($mode < 0 || $mode > 2){
$mode = 2;
}
@@ -51,13 +46,12 @@ if ($btn == "설정저장" && $me['myset'] > 0) {
$db->update('general', [
'myset'=>$db->sqleval('myset-1'),
'map'=>$map,
'mode'=>$mode,
'tnmt'=>$tnmt
], 'owner=%i', $userID);
}
$query = "select no,map,mode,tnmt,myset from general where owner='{$userID}'";
$query = "select no,mode,tnmt,myset from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
$me = MYDB_fetch_array($result);
@@ -66,7 +60,7 @@ $me = MYDB_fetch_array($result);
<html>
<head>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<title>내정보</title>
<title><?=UniqueConst::$serverName?>: 내정보</title>
<link href="../d_shared/common.css" rel="stylesheet">
<link rel=stylesheet href="css/common.css">
<script type="text/javascript">
@@ -91,11 +85,6 @@ function go(type) {
</td>
<td width=50% valign=top>
<form name=form1 action=b_myPage.php method=post>
&nbsp;&nbsp;&nbsp;&nbsp;지도수준 【
<input type=radio name=map value=0 <?=$me['map']==0?"checked":""; ?>>상세
<input type=radio name=map value=1 <?=$me['map']==1?"checked":""; ?>>간단
<input type=radio name=map value=2 <?=$me['map']==2?"checked":""; ?>>생략
】<br><br>
&nbsp;&nbsp;&nbsp;&nbsp;토너먼트 【
<input type=radio name=tnmt value=0 <?=$me['tnmt']==0?"checked":""; ?>>수동참여
<input type=radio name=tnmt value=1 <?=$me['tnmt']==1?"checked":""; ?>>자동참여
@@ -142,7 +131,6 @@ function go(type) {
<tr><td><?=backButton()?></td></tr>
<tr><td><?=banner()?></td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+1 -2
View File
@@ -20,7 +20,7 @@ $me = MYDB_fetch_array($result);
<!DOCTYPE html>
<html>
<head>
<title>회의실</title>
<title><?=UniqueConst::$serverName?>: 회의실</title>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
@@ -64,7 +64,6 @@ for($i=0; $i < 20; $i++) {
<tr><td><?=backButton()?></td></tr>
<tr><td><?=banner()?> </td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+1 -2
View File
@@ -15,7 +15,7 @@ increaseRefresh("국법", 1);
<!DOCTYPE html>
<html>
<head>
<title>국법</title>
<title><?=UniqueConst::$serverName?>: 국법</title>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
@@ -52,7 +52,6 @@ if($me['level'] >= 5) {
<tr><td><?=backButton()?></td></tr>
<tr><td><?=banner()?> </td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+11 -6
View File
@@ -43,12 +43,12 @@ case 3: $tnmt_type = "<font color=cyan>설전</font>"; $tp = "itl"; $tp2 = "
} ?>
<head>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<title>토너먼트</title>
<title><?=UniqueConst::$serverName?>: 토너먼트</title>
<style>
body { color:white; background-color:black; border-width:1px; border-color:gray; }
table { font-family:'맑은 고딕'; line-height:110%; }
font { font-family:'맑은 고딕'; line-height:110%; }
input { font-family:'맑은 고딕'; line-height:110%; height:20px }
table { font-family:'맑은 고딕'; }
font { font-family:'맑은 고딕'; }
input { font-family:'맑은 고딕'; height:20px }
select { font-family:'굴림'; line-height:100%; }
#bg0 { background-image:url(<?=ServConfig::$gameImagePath?>/back_walnut.jpg); }
#bg1 { background-image:url(<?=ServConfig::$gameImagePath?>/back_green.jpg); }
@@ -176,10 +176,16 @@ if ($session->userGrade >= 5) {
$str1 = getTournament($admin['tournament']);
$str2 = getTournamentTime();
if($str2){
$str2 = ', '.$str2;
}
$str3 = getTournamentTerm();
if($str3){
$str3 = ', '.$str3;
}
?>
<tr><td colspan=8>운영자 메세지 : <font color=orange size=5><?=$admin['tnmt_msg']?></font></td></tr>
<tr><td colspan=8 align=center><font color=white size=6><?=$tnmt_type?> (<?=$str1.", ".$str2.", ".$str3?>)</font></td></tr>
<tr><td colspan=8 align=center><font color=white size=6><?=$tnmt_type?> (<?=$str1.$str2.$str3?>)</font></td></tr>
<tr><td colspan=8 align=center id=bg2><font color=magenta size=5>16강 승자전</font></td></tr>
<tr><td height=10 colspan=8 align=center></td></tr>
<?php
@@ -504,6 +510,5 @@ if ($admin['tournament'] == 2 || $admin['tournament'] == 3) {
<tr><td><?=closeButton()?></td></tr>
<tr><td><?=banner()?> </td></tr>
</table>
<?php PrintElapsedTime(); ?>
</body>
</html>
+4 -3
View File
@@ -25,7 +25,7 @@ $troopcount = MYDB_num_rows($result);
<html>
<head>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<title>부대편성</title>
<title><?=UniqueConst::$serverName?>: 부대편성</title>
<link rel='stylesheet' href='../d_shared/common.css' type='text/css'>
<link rel='stylesheet' href='css/common.css' type='text/css'>
@@ -123,7 +123,9 @@ for($i=0; $i < $troopcount; $i++) {
}
}
if($me['troop'] == 0) {
if ($troopcount == 0) {
}
else if($me['troop'] == 0) {
echo"
<input type=submit name=btn value='부 대 가 입'>";
} else {
@@ -158,7 +160,6 @@ echo "
<tr><td><?=banner()?> </td></tr>
</table>
</form>
<?php PrintElapsedTime(); ?>
</body>
</html>
+26 -20
View File
@@ -32,37 +32,43 @@ if($me['level'] < 5) {
}
if($btn == "국가방침") {
$msg = BadTag2Code(addslashes(SQ2DQ($msg)));
$query = "update nation set msg='$msg' where nation='{$me['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$msg == mb_substr($msg, 0, 1000);
//$msg = StringUtil::
$db->update('nation', [
'msg'=>BadTag2Code($msg)
], 'nation=%i',$me['nation']);
} elseif($btn == "임관권유") {
$scoutmsg = BadTag2Code(addslashes(SQ2DQ($scoutmsg)));
$query = "update nation set scoutmsg='$scoutmsg' where nation='{$me['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$scoutmsg == mb_substr($msg, 0, 500);
$db->update('nation', [
'scoutmsg'=>BadTag2Code($scoutmsg)
], 'nation=%i',$me['nation']);
} elseif($btn == "세율") {
if($rate < 5) { $rate = 5; }
if($rate > 30) { $rate = 30; }
$query = "update nation set rate='$rate' where nation='{$me['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} elseif($btn == "지급율") {
if($bill < 20) { $bill = 20; }
if($bill > 200) { $bill = 200; }
$query = "update nation set bill='$bill' where nation='{$me['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$bill = Util::valueFit($bill, 20, 200);
$db->update('nation', [
'bill'=>$bill
], 'nation=%i',$me['nation']);
} elseif($btn == "기밀권한") {
if($secretlimit < 1) { $secretlimit = 1; }
if($secretlimit > 99) { $secretlimit = 99; }
$query = "update nation set secretlimit='$secretlimit' where nation='{$me['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$secretlimit = Util::valueFit($secretlimit, 1, 99);
$db->update('nation', [
'secretlimit'=>$secretlimit
], 'nation=%i',$me['nation']);
} elseif($btn == "임관 금지") {
$query = "update nation set scout='1' where nation='{$me['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$db->update('nation', [
'scout'=>1
], 'nation=%i',$me['nation']);
} elseif($btn == "임관 허가") {
$query = "update nation set scout='0' where nation='{$me['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$db->update('nation', [
'scout'=>0
], 'nation=%i',$me['nation']);
} elseif($btn == "전쟁 금지") {
$query = "update nation set war='1' where nation='{$me['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$db->update('nation', [
'war'=>1
], 'nation=%i',$me['nation']);
} elseif($btn == "전쟁 허가") {
$query = "update nation set war='0' where nation='{$me['nation']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
+31 -11
View File
@@ -20,7 +20,7 @@ $userID = Session::getUserID();
$db = DB::db();
$connect=$db->get();
$query = "select startyear,year,month from game limit 1";
$query = "select startyear,year,month,scenario from game limit 1";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$admin = MYDB_fetch_array($result);
@@ -41,17 +41,20 @@ if($meLevel < 5){
if($btn == "임명") {
$query = "select no,nation,level,leader,power,intel from general where no='$genlist'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
if($genlist !== 0){
$query = "select no,nation,level,leader,power,intel from general where no='$genlist'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
if(!$general){
header('location:b_myBossInfo.php');
exit();
if(!$general){
header('location:b_myBossInfo.php');
exit();
}
}
//임명할사람이 군주이면 불가, 내가 수뇌부이어야함, 공석아닌때는 국가가 같아야함
if($general['level'] == 12 || $meLevel < 5 || ($general['nation'] != $me['nation'] && $genlist != 0)) {
if($meLevel < 5 || ($general['nation'] != $me['nation'] && $genlist != 0) || ($general['level'] == 12 && $genlist != 0)) {
header('location:b_myBossInfo.php');
exit();
@@ -74,13 +77,13 @@ if($btn == "임명") {
}
//나와 대상 장수는 국가가 같아야 함
if($me['nation'] != $general['nation']){
if($genlist != 0 && $me['nation'] != $general['nation']){
header('location:b_myBossInfo.php');
exit();
}
if($btn == "추방") {
$query = "select name,l{$meLevel}set,chemi from nation where nation='{$me['nation']}'";
$query = "select name,l{$meLevel}set,chemi,color from nation where nation='{$me['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
@@ -165,7 +168,24 @@ if($btn == "추방") {
case 4: $str = "날 추방했으니 그 복수로 적국에 정보를 팔아 넘겨야겠군요. 그럼 이만."; break;
}
PushMsg(1, 0, $general['picture'], $general['imgsvr'], "{$general['name']}:", $nation['color'], $nation['name'], $nation['color'], $str);
$src = new MessageTarget(
$general['no'],
$general['name'],
$general['nation'],
$nation['name'],
$nation['color'],
GetImageURL($general['imgsvr'], $general['picture'])
);
$msg = new Message(
Message::MSGTYPE_PUBLIC,
$src,
$src,
$str,
new \DateTime(),
new \DateTime('9999-12-31'),
[]
);
$msg->send();
}
//국가 기술력 그대로
+1
View File
@@ -7,6 +7,7 @@ include "func.php";
$title = Util::getReq('title');
$msg = Util::getReq('msg');
$num = Util::getReq('num', 'int');
$reply = Util::getReq('reply');
extractMissingPostToGlobals();
+1 -1
View File
@@ -60,7 +60,7 @@ if($btn == '참가') {
}
$map = [];
for($i=0; $i < 8; $i++) {
if($occupied[$i] == 0) {
if(!Util::array_get($occupied[$i])) {
$map[] = $i;
}
}
+4
View File
@@ -80,6 +80,10 @@ function myCommandList() {
$query = "select no,turntime,term,turn0,turn1,turn2,turn3,turn4,turn5,turn6,turn7,turn8,turn9,turn10,turn11,turn12,turn13,turn14,turn15,turn16,turn17,turn18,turn19,turn20,turn21,turn22,turn23 from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$me = MYDB_fetch_array($result);
if(!$me){
echo "로그인 되어있지 않습니다.";
return;
}
$turn = getTurn($me, 2);
echo "<table width=300 height=700 border=1 cellspacing=0 cellpadding=0 bordercolordark=gray bordercolorlight=black style=font-size:13px;word-break:break-all; id=bg2>
+3 -3
View File
@@ -5,9 +5,9 @@ html, body{
color:white;
}
table { font-family:'맑은 고딕'; line-height:110%; }
font { font-family:'맑은 고딕'; line-height:110%; }
input { font-family:'맑은 고딕'; line-height:110%; height:20px }
table { font-family:'맑은 고딕'; }
font { font-family:'맑은 고딕'; }
input { font-family:'맑은 고딕'; height:20px }
select { font-family:'굴림'; line-height:100%; }
/* */
+20 -2
View File
@@ -9,6 +9,11 @@
}
/*임시용 끝*/
#message_board{
height:1370px;
position:relative;
}
#message_board section{
overflow-y:auto;
overflow-x:hidden;
@@ -70,19 +75,32 @@
color:white;
}
.message_input_form{
position:relative;
}
#msg_input{
color:white;
background-color:black;
font-size:12px;
width:720px;
width:715px;
margin:0 2px;
height:15px;
}
#msg_submit{
position:absolute;
right:0;
margin-right:2px;
}
#mailbox_list{
float:left;
color:white;
background-color:black;
font-size:12px;
width:160px;
height:20px;
}
.board_header{
@@ -91,10 +109,10 @@
}
.board_side{
position:absolute;
height:1370px;
width:498px;
overflow-y: hidden;
display:inline-block;
border-left:groove 1px;
border-right:groove 1px;
border-bottom:groove 1px;
+1
View File
@@ -3,6 +3,7 @@ namespace sammo;
class UniqueConst{
public static $serverID = '_tK_serverID_';
public static $serverName = '_tK_serverName_';
private function __construct(){}
@@ -0,0 +1,22 @@
<div class="buttonPlate bg1">
<div>
<a href="a_status.php" target="_blank"><button class="toolbarButton">세력도</button></a>
<a href="a_kingdomList.php" target="_blank"><button class="toolbarButton">세력일람</button></a>
<a href="a_genList.php" target="_blank"><button class="toolbarButton">장수일람</button></a>
<a href="a_bestGeneral.php" target="_blank"><button class="toolbarButton">명장일람</button></a>
<a href="a_history.php" target="_blank"><button class="toolbarButton">연감</button></a>
<a href="a_hallOfFame.php" target="_blank"><button class="toolbarButton">명예의전당</button></a>
<a href="a_emperior.php" target="_blank"><button class="toolbarButton">왕조일람</button></a>
<a href="a_traffic.php" target="_blank"><button class="toolbarButton">접속량정보</button></a>
</div>
<div>
<a href="/bbs/board" target="_blank"><button class="toolbarButton2">삼모게시판</button></a>
<a href="/bbs/tip" target="_blank"><button class="toolbarButton">팁/강좌</button></a>
<a href="/bbs/news" target="_blank"><button class="toolbarButton">삼국 일보</button></a>
<a href="/bbs/history2" target="_blank"><button class="toolbarButton">개인 열전</button></a>
<a href="/bbs/history3" target="_blank"><button class="toolbarButton">국가 열전</button></a>
<a href="/bbs/patch" target="_blank"><button class="toolbarButton">패치 내역</button></a>
<a href="../i_other/help.php" target="_blank"><button class="toolbarButton">튜토리얼</button></a>
<a href="<?=$site?>" target="_blank"><button class="toolbarButton"><?=$call?></button></a>
</div>
</div>
+56 -64
View File
@@ -556,15 +556,13 @@ function commandTable() {
} else {
addCommand("인재탐색(랜덤경험, 자금$develcost)", 29, 0);
}
//TODO:등용장 재 디자인
//xxx:등용장 일단 끔
/*
if($me['level'] >= 1 && $city['supply'] != 0) {
addCommand("등용(자금{$develcost5}+장수가치)", 22);
} else {
addCommand("등용(자금{$develcost5}+장수가치)", 22, 0);
}
*/
if($me['no'] == $troop['no'] && $citycount > 0 && $city['supply'] != 0 && $city['nation'] == $me['nation']) {
addCommand("집합(통솔경험)", 26);
} else {
@@ -646,7 +644,13 @@ function commandTable() {
if($me['level'] == 12) {
addCommand("선양", 54);
if($citycount != 0) {
addCommand("방랑", 47);
if ($admin['year'] + 3 < $admin['startyear']) {
addCommand("방랑", 47, 0);
}
else{
addCommand("방랑", 47);
}
addCommand("해산", 56, 0);
} else {
addCommand("방랑", 47, 0);
@@ -1128,23 +1132,6 @@ function nationMsg() {
echo "<font color=orange>".$nation['msg']."</font>";
}
function PushMsg($type, $nation, $picture, $imgsvr, $from, $fromcolor, $to, $tocolor, $msg) {
if($nation == 0) { $nation = 0; }
if($fromcolor == "") { $fromcolor = "#FFFFFF"; }
if($to == "") { $to = "재야"; }
if($tocolor == "") { $tocolor = "#FFFFFF"; }
$date = date('Y-m-d H:i:s');
if($type == 1) { $file = "_all_msg.txt"; }
else { $file = "_nation_msg{$nation}.txt"; }
$fp = fopen("logs/{$file}", "a");
//로그 파일에 기록
$str = "{$type}|".StringUtil::padStringAlignRight($from,12," ")."|".StringUtil::padStringAlignRight($to,12," ")."|".$date."|".$msg."|".$fromcolor."|".$tocolor."|".$picture."|".$imgsvr;
fwrite($fp, "{$str}\n");
fclose($fp);
}
function msgprint($msg, $name, $picture, $imgsvr, $when, $num, $type) {
$db = DB::db();
$connect=$db->get();
@@ -1264,6 +1251,7 @@ function cutDay($date, int $turnterm) {
function increaseRefresh($type="", $cnt=1) {
//FIXME: 로그인, 비로그인 시 처리가 명확하지 않음
$session = Session::getInstance();
$userID = $session->userID;
$generalID = $session->generalID;
$date = date('Y-m-d H:i:s');
@@ -1280,14 +1268,14 @@ function increaseRefresh($type="", $cnt=1) {
'connect'=>$db->sqleval('connect + %i', $cnt),
'refcnt'=>$db->sqleval('refcnt + %i', $cnt),
'refresh'=>$db->sqleval('refresh + %i', $cnt)
], 'owner=%i', $generalID);
], 'owner=%i', $userID);
}
$date = date('Y_m_d H:i:s');
$date2 = substr($date, 0, 10);
$online = getOnlineNum();
file_put_contents(
"logs/_{$date2}_refresh.txt",
__dir__."/logs/_{$date2}_refresh.txt",
sprintf(
"%s, %s, %s, %s, %s, %d\n",
$date,
@@ -1324,7 +1312,7 @@ function increaseRefresh($type="", $cnt=1) {
}
if($str != "") {
file_put_contents(
"logs/_{$date2}_ipcheck.txt",
__dir__."/logs/_{$date2}_ipcheck.txt",
sprintf(
"%s, %s, %s%s\n",
$session->userName,
@@ -1361,19 +1349,21 @@ function updateTraffic() {
$date = date('Y-m-d H:i:s');
//일시|년|월|총갱신|접속자|최다갱신자
file_put_contents(__dir__."/logs/_traffic.txt",
StringUtil::padStringAlignRight($date,20," ")
."|".StringUtil::padStringAlignRight($game['year'],3," ")
."|".StringUtil::padStringAlignRight($game['month'],2," ")
."|".StringUtil::padStringAlignRight($game['refresh'],8," ")
."|".StringUtil::padStringAlignRight($online,5," ")
."|".StringUtil::padStringAlignRight($user['name']."(".$user['refresh'].")",20," ")
Json::encode([
$date,
$game['year'],
$game['month'],
$game['refresh'],
$online,
$user['name']."(".$user['refresh'].")"
])."\n"
, FILE_APPEND);
}
function CheckOverhead() {
//서버정보
$db = DB::db();
$admin = $db->queryFirstRow('SELECT turnterm, conlimit from GAME LIMIT 1');
$admin = $db->queryFirstRow('SELECT turnterm, conlimit from game LIMIT 1');
$con = Util::round(pow($admin['turnterm'], 0.6) * 3) * 10;
@@ -1523,7 +1513,7 @@ function checkTurn() {
// 파일락 획득
//FIXME:이미 DB 테이블로 lock을 시도하는데 이게 따로 필요한가?
$fp = fopen('lock.txt', 'r');
$fp = fopen(__dir__.'/lock.txt', 'r');
if(!flock($fp, LOCK_EX)) {
return;
}
@@ -1786,25 +1776,27 @@ function addAge() {
function turnDate($curtime) {
$db = DB::db();
$connect=$db->get();
$query = "select startyear,starttime,turnterm,year,month from game limit 1";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$admin = MYDB_fetch_array($result);
$admin = $db->queryFirstRow('SELECT startyear,starttime,turnterm,year,month from game limit 1');
$turn = $admin['starttime'];
$curturn = cutTurn($curtime, $admin['turnterm']);
$num = 0;
$term = $admin['turnterm']*60;
$num = intdiv((strtotime($curturn) - strtotime($turn)), $term);
$term = $admin['turnterm'];
$num = intdiv((strtotime($curturn) - strtotime($turn)), $term*60);
$year = $admin['startyear'] + intdiv($num, 12);
$month = 1 + (12+$num) % 12;
$date = $admin['startyear'] * 12;
$date += $num;
$year = intdiv($date, 12);
$month = 1 + $date % 12;
// 바뀐 경우만 업데이트
if($admin['month'] != $month || $admin['year'] != $year) {
$query = "update game set year='$year',month='$month'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$db->update('game', [
'year'=>$year,
'month'=>$month
], true);
}
return [$year, $month];
@@ -1821,8 +1813,8 @@ function triggerTournament() {
//현재 토너먼트 없고, 자동개시 걸려있을때, 40%확률
if($admin['tournament'] == 0 && $admin['tnmt_trig'] > 0 && rand() % 100 < 40) {
$type = rand() % 6; // 0 : 전력전, 1 : 통솔전, 2 : 일기토, 3 : 설전
//전력전 50%, 통, 일, 설 각 17%
$type = rand() % 5; // 0 : 전력전, 1 : 통솔전, 2 : 일기토, 3 : 설전
//전력전 40%, 통, 일, 설 각 20%
if($type > 3) { $type = 0; }
startTournament($admin['tnmt_trig'], $type);
}
@@ -2204,11 +2196,11 @@ function uniqueItem($general, $log, $vote=0) {
$occupied[$gen[$type]] = 1;
}
for($i=7; $i <= 26; $i++) {
if($occupied[$i] == 0) {
if(!Util::array_get($occupied[$i])) {
$item[] = $i;
}
}
$it = $item[rand() % count($item)];
$it = $item[rand() % count($item)]??0;
$query = "update general set {$type}='$it' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
@@ -2221,13 +2213,13 @@ function uniqueItem($general, $log, $vote=0) {
$alllog[0] = "<C>●</>{$game['month']}월:<Y>{$general['name']}</>(이)가 <C>".getWeapName($it)."</>(을)를 습득했습니다!";
pushGeneralHistory($general, "<C>●</>{$game['year']}{$game['month']}월:<C>".getWeapName($it)."</>(을)를 습득");
if($vote == 0) {
$history[0] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【아이템】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getWeapName($it)."</>(을)를 습득했습니다!";
$history[] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【아이템】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getWeapName($it)."</>(을)를 습득했습니다!";
} elseif($vote == 1) {
$history[0] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【설문상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getWeapName($it)."</>(을)를 습득했습니다!";
$history[] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【설문상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getWeapName($it)."</>(을)를 습득했습니다!";
} elseif($vote == 2) {
$history[0] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【랜덤임관상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getWeapName($it)."</>(을)를 습득했습니다!";
$history[] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【랜덤임관상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getWeapName($it)."</>(을)를 습득했습니다!";
} elseif($vote == 3) {
$history[0] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【건국상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getWeapName($it)."</>(을)를 습득했습니다!";
$history[] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【건국상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getWeapName($it)."</>(을)를 습득했습니다!";
}
break;
case 1:
@@ -2235,13 +2227,13 @@ function uniqueItem($general, $log, $vote=0) {
$alllog[0] = "<C>●</>{$game['month']}월:<Y>{$general['name']}</>(이)가 <C>".getBookName($it)."</>(을)를 습득했습니다!";
pushGeneralHistory($general, "<C>●</>{$game['year']}{$game['month']}월:<C>".getBookName($it)."</>(을)를 습득");
if($vote == 0) {
$history[0] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【아이템】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getBookName($it)."</>(을)를 습득했습니다!";
$history[] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【아이템】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getBookName($it)."</>(을)를 습득했습니다!";
} elseif($vote == 1) {
$history[0] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【설문상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getBookName($it)."</>(을)를 습득했습니다!";
$history[] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【설문상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getBookName($it)."</>(을)를 습득했습니다!";
} elseif($vote == 2) {
$history[0] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【랜덤임관상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getBookName($it)."</>(을)를 습득했습니다!";
$history[] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【랜덤임관상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getBookName($it)."</>(을)를 습득했습니다!";
} elseif($vote == 3) {
$history[0] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【건국상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getBookName($it)."</>(을)를 습득했습니다!";
$history[] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【건국상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getBookName($it)."</>(을)를 습득했습니다!";
}
break;
case 2:
@@ -2249,13 +2241,13 @@ function uniqueItem($general, $log, $vote=0) {
$alllog[0] = "<C>●</>{$game['month']}월:<Y>{$general['name']}</>(이)가 <C>".getHorseName($it)."</>(을)를 습득했습니다!";
pushGeneralHistory($general, "<C>●</>{$game['year']}{$game['month']}월:<C>".getHorseName($it)."</>(을)를 습득");
if($vote == 0) {
$history[0] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【아이템】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getHorseName($it)."</>(을)를 습득했습니다!";
$history[] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【아이템】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getHorseName($it)."</>(을)를 습득했습니다!";
} elseif($vote == 1) {
$history[0] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【설문상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getHorseName($it)."</>(을)를 습득했습니다!";
$history[] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【설문상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getHorseName($it)."</>(을)를 습득했습니다!";
} elseif($vote == 2) {
$history[0] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【랜덤임관상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getHorseName($it)."</>(을)를 습득했습니다!";
$history[] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【랜덤임관상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getHorseName($it)."</>(을)를 습득했습니다!";
} elseif($vote == 3) {
$history[0] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【건국상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getHorseName($it)."</>(을)를 습득했습니다!";
$history[] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【건국상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getHorseName($it)."</>(을)를 습득했습니다!";
}
break;
case 3:
@@ -2263,13 +2255,13 @@ function uniqueItem($general, $log, $vote=0) {
$alllog[0] = "<C>●</>{$game['month']}월:<Y>{$general['name']}</>(이)가 <C>".getItemName($it)."</>(을)를 습득했습니다!";
pushGeneralHistory($general, "<C>●</>{$game['year']}{$game['month']}월:<C>".getItemName($it)."</>(을)를 습득");
if($vote == 0) {
$history[0] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【아이템】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getItemName($it)."</>(을)를 습득했습니다!";
$history[] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【아이템】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getItemName($it)."</>(을)를 습득했습니다!";
} elseif($vote == 1) {
$history[0] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【설문상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getItemName($it)."</>(을)를 습득했습니다!";
$history[] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【설문상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getItemName($it)."</>(을)를 습득했습니다!";
} elseif($vote == 2) {
$history[0] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【랜덤임관상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getItemName($it)."</>(을)를 습득했습니다!";
$history[] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【랜덤임관상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getItemName($it)."</>(을)를 습득했습니다!";
} elseif($vote == 3) {
$history[0] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【건국상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getItemName($it)."</>(을)를 습득했습니다!";
$history[] = "<C>●</>{$game['year']}{$game['month']}월:<C><b>【건국상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>(이)가 <C>".getItemName($it)."</>(을)를 습득했습니다!";
}
break;
}
+15 -10
View File
@@ -1,7 +1,8 @@
<?php
namespace sammo;
function getTurn($general, $type, $font=1) {
function getTurn(array $general, $type, $font=1) {
//TODO: 왜 'Type' 인가. 그냥 count로 하자.
$str = [];
$db = DB::db();
$connect=$db->get();
@@ -532,13 +533,15 @@ function processCommand($no) {
if($general['npc'] >= 2 || $general['killturn'] > $admin['killturn']) {
$query = "update general set recturn=turn0,resturn='FAIL',myset=3,con=0,killturn=killturn-1 where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} elseif(intval($command[0]) == 0 && $session->userGrade < 5) {
} elseif($command[0] == 0) {
$query = "update general set recturn=turn0,resturn='FAIL',myset=3,con=0,killturn=killturn-1 where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
$query = "update general set recturn=turn0,resturn='FAIL',myset=3,con=0,killturn='{$admin['killturn']}' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
//FIXME: 운영자 같이 사망하면 안되는 인물에 대한 처리가 필요
//연속턴 아닌경우 텀 리셋
if($general['term']%100 != $command[0]) {
$query = "update general set term=0 where no='{$general['no']}'";
@@ -570,7 +573,7 @@ function processCommand($no) {
case 17: process_17($general); break; //소집해제
case 21: process_21($general); break; //이동
//case 22: process_22($general); break; //등용 //TODO:등용장 재 디자인
case 22: process_22($general); break; //등용 //TODO:등용장 재 디자인
case 25: process_25($general); break; //임관
case 26: process_26($general); break; //집합
case 28: process_28($general); break; //귀환
@@ -681,19 +684,21 @@ where nation='{$general['nation']}'
function command_Single($turn, $command) {
if(!$turn){
header('location:commandlist.php');
return;
}
$db = DB::db();
$connect=$db->get();
$userID = Session::getUserID();
$command = EncodeCommand(0, 0, 0, $command);
$count = count($turn);
$str = "con=con";
for($i=0; $i < $count; $i++) {
$str .= ",turn{$turn[$i]}='{$command}'";
$setValues = [];
foreach($turn as $turnIdx){
$setValues["turn{$turnIdx}"] = $command;
}
$query = "update general set {$str} where owner='{$userID}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$db->update('general', $setValues, 'owner=%i',$userID);
header('location:commandlist.php');
}
-3
View File
@@ -397,9 +397,6 @@ function getBill(int $dedication) : int{
}
function getCost(int $armtype) : int {
//FIXME: 정말로 side effect가 없으려면 query는 밖으로 이동해야함.
//TODO: 병종 값이 column으로 들어있는건 전혀 옳지 않음. key->value 형태로 바꿔야함
return GameUnitConst::byID($armtype)->cost;
}
+18 -18
View File
@@ -5,7 +5,7 @@ namespace sammo;
function delStepLog() {
$date = date('Y_m_d');
@unlink("logs/_{$date}_steplog.txt");
@unlink(__dir__."/logs/_{$date}_steplog.txt");
}
function pushRawFileLog($path, $lines){
@@ -50,81 +50,81 @@ function eraseTnmtFightLogAll(){
}
function eraseTnmtFightLog(int $group){
$filepath = "logs/fight{$group}.txt";
$filepath = __dir__."/logs/fight{$group}.txt";
if(file_exists($filepath)){
@unlink($filepath);
}
}
function pushTnmtFightLog(int $group, $log) {
pushRawFileLog("logs/fight{$group}.txt", $log);
pushRawFileLog(__dir__."/logs/fight{$group}.txt", $log);
}
function getTnmtFightLogAll(int $group) {
return join('<br>',getFormattedFileLogAll("logs/fight{$group}.txt"));
return join('<br>',getFormattedFileLogAll(__dir__."/logs/fight{$group}.txt"));
}
function pushSabotageLog($log) {
pushRawFileLog("logs/_sabotagelog.txt", $log);
pushRawFileLog(__dir__."/logs/_sabotagelog.txt", $log);
}
function getSabotageLogRecent($count) {
return join('<br>', getFormattedFileLogRecent("logs/_sabotagelog.txt", $count, 150));
return join('<br>', getFormattedFileLogRecent(__dir__."/logs/_sabotagelog.txt", $count, 150));
}
function pushProcessLog($log) {
$date = date('Y_m_d');
pushRawFileLog("logs/_{$date}_processlog.txt", $log);
pushRawFileLog(__dir__."/logs/_{$date}_processlog.txt", $log);
}
function pushStepLog($log) {
$date = date('Y_m_d');
pushRawFileLog("logs/_{$date}_steplog.txt", $log);
pushRawFileLog(__dir__."/logs/_{$date}_steplog.txt", $log);
}
function pushLockLog($log) {
$date = date('Y_m_d');
pushRawFileLog("logs/_{$date}_locklog.txt", $log);
pushRawFileLog(__dir__."/logs/_{$date}_locklog.txt", $log);
}
function pushAdminLog($log) {
pushRawFileLog("logs/_adminlog.txt", $log);
pushRawFileLog(__dir__."/logs/_adminlog.txt", $log);
}
function pushAuctionLog($log) {
pushRawFileLog("logs/_auctionlog.txt", $log);
pushRawFileLog(__dir__."/logs/_auctionlog.txt", $log);
}
function getAuctionLogRecent(int $count) {
return join('<br>', array_reverse(getFormattedFileLogRecent("logs/_auctionlog.txt", $count, 300)));
return join('<br>', array_reverse(getFormattedFileLogRecent(__dir__."/logs/_auctionlog.txt", $count, 300)));
}
function pushGenLog($general, $log) {
$no = Util::toInt($general['no']);
pushRawFileLog("logs/gen{$no}.txt", $log);
pushRawFileLog(__dir__."/logs/gen{$no}.txt", $log);
}
function getGenLogRecent(int $no, int $count) {
return join('<br>', array_reverse(getFormattedFileLogRecent("logs/gen{$no}.txt", $count, 300)));
return join('<br>', array_reverse(getFormattedFileLogRecent(__dir__."/logs/gen{$no}.txt", $count, 300)));
}
function pushBatRes($general, $log) {
$no = Util::toInt($general['no']);
pushRawFileLog("logs/batres{$no}.txt", $log);
pushRawFileLog(__dir__."/logs/batres{$no}.txt", $log);
}
function getBatResRecent(int $no, int $count) {
return join('<br>', array_reverse(getFormattedFileLogRecent("logs/batres{$no}.txt", $count, 300)));
return join('<br>', array_reverse(getFormattedFileLogRecent(__dir__."/logs/batres{$no}.txt", $count, 300)));
}
function pushBatLog($general, $log) {
$no = Util::toInt($general['no']);
pushRawFileLog("logs/batlog{$no}.txt", $log);
pushRawFileLog(__dir__."/logs/batlog{$no}.txt", $log);
}
function getBatLogRecent(int $no, int $count) {
return join('<br>', array_reverse(getFormattedFileLogRecent("logs/batlog{$no}.txt", $count, 300)));
return join('<br>', array_reverse(getFormattedFileLogRecent(__dir__."/logs/batlog{$no}.txt", $count, 300)));
}
//DB-based
+12 -7
View File
@@ -51,7 +51,7 @@ function getWorldMap($req){
}
$session = Session::getInstance();
$generalID = $session->generalID;
$userID = $session->userID;
$db = DB::db();
@@ -60,13 +60,18 @@ function getWorldMap($req){
$year = Util::toInt($game['year']);
$month = Util::toInt($game['month']);
if($generalID && ($req->showMe || !$req->neutralView)){
$city = $db->queryFirstRow(
'select `city`, `nation` from `general` where `no`=%i',
$generalID);
$general = $db->queryFirstRow(
'select `no`, `city`, `nation` from `general` where `owner`=%i',
$userID);
$myCity = Util::toInt($city['city']);
$myNation = Util::toInt($city['nation']);
if($general && ($req->showMe || !$req->neutralView)){
if($session->generalID !== $general['no']){
$session->logoutGame()->loginGame();
}
$myCity = Util::toInt($general['city']);
$myNation = Util::toInt($general['nation']);
if(!$req->showMe){
$myCity = null;
+154 -39
View File
@@ -192,7 +192,15 @@ function processAI($no) {
$query = "select nation,level,tech,gold,rice,rate,type,color,name,war from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error("processAI03 ".MYDB_error($connect),"");
$nation = MYDB_fetch_array($result);
$nation = MYDB_fetch_array($result)??[
'nation'=>0,
'color'=>'#000000',
'name'=>'재야',
'level'=>0,
'gold'=>0,
'rice'=>0,
'tech'=>0,
];
$coreCommand = array();
if($general['level'] >= 5) {
@@ -261,6 +269,7 @@ function processAI($no) {
}
$tech = getTechCost($nation['tech']);
$resrc = $tech * 700;//XXX: 왜 700이지?
if($general['atmos'] >= 90 && $general['train'] >= 90) {
if($general['mode'] == 0) {
@@ -276,20 +285,26 @@ function processAI($no) {
//운영자메시지 출력 하루 6번..?
//특별 메세지 있는 경우 출력 하루 4번
switch($admin['turnterm']) {
case 0: $term = 1; break;
case 1: $term = 1; break;
case 2: $term = 2; break;
case 3: $term = 3; break;
case 4: $term = 6; break;
case 5: $term = 12; break;
case 6: $term = 30; break;
case 7: $term = 60; break;
}
if($general['npcid'] == 2000 && rand()%(24*$term) < 6) {
PushMsg(1, 0, $general['picture'], $general['imgsvr'], "{$general['name']}:", $nation['color'], $nation['name'], $nation['color'], $general['npcmsg']);
} elseif($general['npcmsg'] != "" && rand()%(24*$term) < 3) {
PushMsg(1, 0, $general['picture'], $general['imgsvr'], "{$general['name']}:", $nation['color'], $nation['name'], $nation['color'], $general['npcmsg']);
$term = $admin['turnterm'];
if($general['npcmsg'] && Util::randBool($term / (6*60))) {
$src = new MessageTarget(
$general['no'],
$general['name'],
$general['nation'],
$nation['name'],
$nation['color'],
GetImageURL($general['imgsvr'], $general['picture'])
);
$msg = new Message(
Message::MSGTYPE_PUBLIC,
$src,
$src,
$general['npcmsg'],
new \DateTime(),
new \DateTime('9999-12-31'),
[]
);
$msg->send();
}
//재야인경우
@@ -571,33 +586,98 @@ function processAI($no) {
if(rand() % 2 == 0) { $type = "gold"; $type2 = 1; }
else { $type = "rice"; $type2 = 2; }
if($nation[$type] < 1000) { // 몰수
if($nation[$type] < $type2*3000) { // 몰수
// 몰수 대상
$query = "select no,{$type} from general where nation='{$general['nation']}' and no!='{$general['no']}' and {$type}>3000 order by {$type} desc limit 0,1";
$result = MYDB_query($query, $connect) or Error("processAI10 ".MYDB_error($connect),"");
$SelGen = MYDB_fetch_array($result);
if($SelGen['no'] != 0) {
$amount = intdiv($SelGen[$type], 5000)*10 + 10;
if($amount > 100) $amount = 100;
list($npcGenID, $npcGenValue) = $db->queryFirstList(
'SELECT `no`, %b FROM general WHERE nation=%i AND `no`!=%i AND %b>3000 AND npc >= 2 ORDER BY %b DESC LIMIT 1',
$type,
$general['nation'],
$general['no'],
$type,
$type
);
list($userGenID, $userGenValue) = $db->queryFirstList(
'SELECT `no`, %b FROM general WHERE nation=%i AND `no`!=%i AND %b>3000 AND npc < 2 ORDER BY %b DESC LIMIT 1',
$type,
$general['nation'],
$general['no'],
$type,
$type
);
if($npcGenID === null && $userGenID === null){
$genID = 0;
$genValue = 0;
}
else if($npcGenID === null || $userGenValue > $npcGenValue * 4){
$genID = $userGenID;
$genValue = $userGenValue;
}
else{
$genID = $npcGenID;
$genValue = $npcGenValue;
}
if($genID){
$amount = min(100, intdiv($genValue, 5000)*10 + 10);
// 몰수
$command = EncodeCommand($type2, $SelGen['no'], $amount, 24); // 금,쌀 1000단위 몰수
$command = EncodeCommand($type2, $genID, $amount, 24); // 금,쌀 1000단위 몰수
}
} else { // 포상
// 포상 대상
$query = "select no from general where nation='{$general['nation']}' and no!='{$general['no']}' and killturn>=5 order by {$type} limit 0,1";
$result = MYDB_query($query, $connect) or Error("processAI10 ".MYDB_error($connect),"");
$SelGen = MYDB_fetch_array($result);
if($SelGen['no'] != 0) {
$amount = intdiv(($nation[$type]-GameConst::$baserice), 5000)*10 + 10;
if($amount > 100) $amount = 100;
list($npcGenID, $npcGenValue, $npcLeadership) = $db->queryFirstList(
'SELECT `no`, %b, leader FROM general WHERE nation=%i AND `no`!=%i AND npc >= 2 AND killturn > 5 AND (leader >= 40 OR %b < %i) ORDER BY %b ASC LIMIT 1',
$type,
$general['nation'],
$general['no'],
$type,
$resrc,
$type
);
list($userGenID, $userGenValue) = $db->queryFirstList(
'SELECT `no`, %b FROM general WHERE nation=%i AND `no`!=%i AND npc < 2 AND killturn > 5 AND (leader >= 40 OR %b < %i) ORDER BY %b ASC LIMIT 1',
$type,
$general['nation'],
$general['no'],
$type,
($type=='gold')?21000:3000,
$type
);
if($npcGenID === null && $userGenID === null){
$genID = 0;
}
else if($npcGenID === null || ($userGenValue !== null && $userGenValue < $npcGenValue * 3)){
$genID = $userGenID;
}
else{
$genID = $npcGenID;
}
if ($genID) {
if($genID === $npcGenID){
$amount = min(100, intdiv(($nation[$type]-($type=='rice'?(GameConst::$baserice):(GameConst::$basegold))), 5000)*10 + 10);
if($npcLeadership < 40){
$amount = min($amount, intdiv($resrc, 1000)*10 + 10);
}
}
else{
$amount = min(100, intdiv(($nation[$type]-($type=='rice'?(GameConst::$baserice):(GameConst::$basegold))), 2000)*10 + 10);
}
// 포상
$command = EncodeCommand($type2, $SelGen['no'], $amount, 23); // 금 1000단위 포상
$command = EncodeCommand($type2, $genID, $amount, 23); // 금,쌀 1000단위 포상
}
}
}
}
$query = "update nation set l{$general['level']}turn0='$command' where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error("processAI09 ".MYDB_error($connect),"");
if(isset($command)){
$query = "update nation set l{$general['level']}turn0='$command' where nation='{$general['nation']}'";
MYDB_query($query, $connect) or Error("processAI09 ".MYDB_error($connect),"");
}
}
}
@@ -635,6 +715,41 @@ function processAI($no) {
MYDB_query($query, $connect) or Error("processAI23 ".MYDB_error($connect),"");
return;
}
if($general['leader'] < 40){
//무지장인데
if(
(($nation['rice'] - GameConst::$baserice) * 3 <= $general['rice'] && $general['rice'] >= $resrc + 2100) ||
($general['rice'] >= 11000)
){
//쌀을 많이 들고 있다면
$amount = $general['rice'] * 0.9;
$amount = intdiv(Util::valueFit($amount, $resrc + 700, 10000), 100);
$command = EncodeCommand(0, 2, $amount, 44); //헌납
$db->update('general', [
'turn0'=>$command
], 'no=%i',$general['no']);
return;
}
if(
(($nation['gold'] - GameConst::$basegold) * 3 <= $general['gold'] && $general['gold'] >= $resrc + 2100) ||
($general['gold'] >= 12000)
){
//금을 많이 들고 있다면
$amount = $general['gold'] * 0.9;
$amount = intdiv(Util::valueFit($amount, $resrc + 700, 10000), 100);
$command = EncodeCommand(0, 1, $amount, 44); //헌납
$db->update('general', [
'turn0'=>$command
], 'no=%i',$general['no']);
return;
}
}
//국가 병량이 없을때 바로 헌납
if($nation['rice'] < 2000 && $general['rice'] > 200) {
$amount = intdiv($general['rice'] - 200, 100) + 1;
@@ -653,7 +768,7 @@ function processAI($no) {
// ┃조┃ ┃쌀삼
// 0┗━┻━━━━┻━━━> G
// 100 700
$resrc = $tech * 700;
$target = array();
// 평시거나 초반아니면서 공격가능 없으면서 병사 있으면 해제(25%)
if($dipState == 0 && $isStart == 0 && $attackable == 0 && $general['crew'] > 0 && rand()% 100 < 25) {
@@ -663,11 +778,11 @@ function processAI($no) {
if($general['gold'] + $general['rice'] < 200) { $command = EncodeCommand(0, 0, 0, 9); } //금쌀없으면 조달9
elseif($general['rice'] > 100 && $city['rate'] < 95) { $command = EncodeCommand(0, 0, 0, 4); } //우선 선정
elseif($general['gold'] < 100) { //금없으면 쌀팜
$amount = intdiv(($general['rice'] - $general['gold']), 100 / 2); // 100단위
$amount = intdiv(($general['rice'] - $general['gold'])/2, 100); // 100단위
$command = EncodeCommand(0, 1, $amount, 49); //팜
} elseif($general['gold'] < 700 && $general['rice'] < 700) { $command = EncodeCommand(0, 0, 0, 1); } //금쌀되면 내정
elseif($general['rice'] < 100) { //쌀없으면 쌀삼
$amount = intdiv(($general['gold'] - $general['rice']), 100 / 2); // 100단위
$amount = intdiv(($general['gold'] - $general['rice'])/2, 100); // 100단위
$command = EncodeCommand(0, 2, $amount, 49); //삼
} elseif($genType >= 2) { $command = EncodeCommand(0, 0, 0, 1); } //내정장일때 내정
else {
@@ -743,12 +858,12 @@ function processAI($no) {
else { $command = EncodeCommand(0, 0, 0, 1); }
} elseif($general['rice'] < $resrc && $general['rice'] <= $general['gold']) {
//금이 더 많으면 매매
$amount = intdiv(($general['gold'] - $general['rice']), 100 / 2); // 100단위
$amount = intdiv(($general['gold'] - $general['rice']) / 2, 100); // 100단위
if($amount > 0) { $command = EncodeCommand(0, 2, $amount, 49); }//삼
else { $command = EncodeCommand(0, 0, 0, (rand()%2)*8 + 1); } // 내정, 조달
} elseif($general['gold'] < $resrc && $general['rice'] > $general['gold']) {
//쌀이 더 많으면 매매
$amount = intdiv(($general['rice'] - $general['gold']), 100 / 2); // 100단위
$amount = intdiv(($general['rice'] - $general['gold']) / 2, 100); // 100단위
if($amount > 0) { $command = EncodeCommand(0, 1, $amount, 49); }//팜
else { $command = EncodeCommand(0, 0, 0, (rand()%2)*8 + 1); } // 내정, 조달
//자원, 병사 모두 충족
@@ -777,11 +892,11 @@ function processAI($no) {
elseif($general['rice'] > $resrc && $city['rate'] < 95 && $city['front'] == 0) { $command = EncodeCommand(0, 0, 0, 4); } // 우선 선정
elseif($general['rice'] > $resrc && $city['rate'] < 50 && $city['front'] == 1) { $command = EncodeCommand(0, 0, 0, 4); } // 우선 선정
elseif($general['gold'] < $resrc) { // 금없으면 쌀팜
$amount = intdiv(($general['rice'] - $general['gold']), 100 / 2); // 100단위
$amount = intdiv(($general['rice'] - $general['gold'])/2, 100); // 100단위
if($amount > 0) { $command = EncodeCommand(0, 1, $amount, 49); }// 팜
else { $command = EncodeCommand(0, 0, 0, 9); } // 조달
} elseif($general['rice'] < $resrc) { // 쌀없으면 쌀삼
$amount = intdiv(($general['gold'] - $general['rice']), 100 / 2); // 100단위
$amount = intdiv(($general['gold'] - $general['rice'])/2, 100); // 100단위
if($amount > 0) { $command = EncodeCommand(0, 2, $amount, 49); }// 팜
else { $command = EncodeCommand(0, 0, 0, 9); } // 조달
} elseif($genType >= 2) { $command = EncodeCommand(0, 0, 0, 1); } //내정장일때 내정
+27 -9
View File
@@ -13,6 +13,9 @@ namespace sammo;
* @return int|float 계산된 능력치
*/
function getGeneralLeadership(&$general, $withInjury, $withItem, $withStatAdjust, $useFloor = true){
if($general === null){
return 0;
}
$leadership = $general['leader'];
if($withInjury){
$leadership *= (100 - $general['injury']) / 100;
@@ -47,6 +50,9 @@ function getGeneralLeadership(&$general, $withInjury, $withItem, $withStatAdjust
* @return int|float 계산된 능력치
*/
function getGeneralPower(&$general, $withInjury, $withItem, $withStatAdjust, $useFloor = true){
if($general === null){
return 0;
}
$power = $general['power'];
if($withInjury){
$power *= (100 - $general['injury']) / 100;
@@ -78,6 +84,10 @@ function getGeneralPower(&$general, $withInjury, $withItem, $withStatAdjust, $us
* @return int|float 계산된 능력치
*/
function getGeneralIntel(&$general, $withInjury, $withItem, $withStatAdjust, $useFloor = true){
if($general === null){
return 0;
}
$intel = $general['intel'];
if($withInjury){
$intel *= (100 - $general['injury']) / 100;
@@ -1673,7 +1683,16 @@ function process_31(&$general) {
$typecount = [];
for($i=0; $i < $gencount; $i++) {
$gen = MYDB_fetch_array($result);
if($gen['crew'] != 0) { $typecount[$gen['crewtype']]++; $crew += $gen['crew']; }
if($gen['crew'] != 0) {
if(!key_exists($gen['crewtype'], $typecount)){
$typecount[$gen['crewtype']] = 1;
}
else{
$typecount[$gen['crewtype']]+=1;
}
$crew += $gen['crew'];
}
}
if(!key_exists($destination, $dist)) {
$alllog[] = "<C>●</>{$admin['month']}월:누군가가 <G><b>{$city['name']}</b></>(을)를 살피는 것 같습니다.";
@@ -1689,13 +1708,9 @@ function process_31(&$general) {
$log[] = "<C>●</>{$admin['month']}월:<G><b>{$city['name']}</b></>의 많은 정보를 얻었습니다. <1>$date</>";
$msg[] = "【<S>병종</>】";
foreach(GameUnitConst::all() as $unit){
if($typecount[$unit->id] == 0){
continue;
}
$unitStr = mb_substr($unit->name, 0, 2);
$msg[] = "{$unitStr}:{$typecount[$unit->id]}";
foreach($typecount as $crewtype=>$cnt){
$crewtypeText = mb_substr(GameUnitConst::byID($crewtype)->name, 0, 2);
$msg[] = "{$crewtypeText}:{$cnt}";
}
$log[] = join(' ', $msg);
@@ -1743,6 +1758,9 @@ function process_31(&$general) {
{
$cities = array_map('intval', explode("|", $nation['spy']));
}
else{
$cities = [];
}
$exist = 0;
for($i=0; $i < count($cities); $i++) {
if(intdiv($cities[$i], 10) == $destination) {
@@ -1803,7 +1821,7 @@ function process_41(&$general) {
} elseif($crewexp == 0) {
$log[] = "<C>●</>{$admin['month']}월:병사가 모자랍니다. 단련 실패. <1>$date</>";
} else {
$type = intdiv($general['crewtype'], 10) * 10;
$type = intdiv($general['crewtype'], 10);
switch($type) {
case 0: $crewstr = '보병'; break;
case 1: $crewstr = '궁병'; break;
+45 -6
View File
@@ -173,7 +173,24 @@ function process_24(&$general) {
case 4: $str = "몰수로 인한 사기 저하는 몰수로 얻은 물자보다 더 손해란걸 모른단 말인가!"; break;
}
PushMsg(1, 0, $gen['picture'], $gen['imgsvr'], "{$gen['name']}:", $nation['color'], $nation['name'], $nation['color'], $str);
$src = new MessageTarget(
$gen['no'],
$gen['name'],
$gen['nation'],
$nation['name'],
$nation['color'],
GetImageURL($gen['imgsvr'], $gen['picture'])
);
$msg = new Message(
Message::MSGTYPE_PUBLIC,
$src,
$src,
$str,
new \DateTime(),
new \DateTime('9999-12-31'),
[]
);
$msg->send();
}
$genlog[] = "<C>●</>$dtype {$amount}을 몰수 당했습니다.";
@@ -644,7 +661,7 @@ function process_61(&$general) {
Message::MSGTYPE_DIPLOMACY,
$src,
$dest,
"{$srcNation['name']}의 불가침 제의 서신",
"{$srcNation['name']} {$when} 불가침 제의 서신",
$now,
$validUntil,
[
@@ -756,11 +773,33 @@ function process_62(&$general) {
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
//국메로 저장
$msg = "【외교】{$admin['year']}{$admin['month']}월:{$younation['name']}에 선전포고";
$youmsg = "【외교】{$admin['year']}{$admin['month']}월:{$nation['name']}에서 선전포고";
$text = "【외교】{$admin['year']}{$admin['month']}월:{$nation['name']}에서 {$younation['name']}에 선전포고";
PushMsg(2, $nation['nation'], $general['picture'], $general['imgsvr'], "{$general['name']}:{$nation['name']}", $nation['color'], $younation['name'], $younation['color'], $msg);
PushMsg(3, $younation['nation'], $general['picture'], $general['imgsvr'], "{$general['name']}:{$nation['name']}", $nation['color'], $younation['name'], $younation['color'], $youmsg);
$src = new MessageTarget(
$general['no'],
$general['name'],
$general['nation'],
$nation['name'],
$nation['color'],
GetImageURL($general['imgsvr'], $general['picture'])
);
$dest = new MessageTarget(
0,
'',
$younation['nation'],
$younation['name'],
$younation['color']
);
$msg = new Message(
Message::MSGTYPE_NATIONAL,
$src,
$dest,
$text,
new \DateTime($general['turntime']),
new \DateTime('9999-12-31'),
[]
);
$msg->send();
}
pushWorldHistory($history, $admin['year'], $admin['month']);
+2 -10
View File
@@ -47,16 +47,8 @@ function process_22(&$general) {
$ded = CharDedication($ded, $general['personal']);
$msg = ScoutMessage::buildScoutMessage($general['no'], $who, $reason);
$msg->send(true);
/*
sendScoutMsg([
'id' => $general['no'],
'nation_id' => Util::array_get($general['nation'], 0)
],[
'id' => $you['no'],
'nation_id' => Util::array_get($you['nation'], 0)
],$date);
*/
$general['intel2']++;
$query = "update general set resturn='SUCCESS',gold=gold-'$cost',intel2='{$general['intel2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
@@ -576,7 +568,7 @@ function process_46(&$general) {
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gencount = MYDB_num_rows($result);
$query = "select nation from nation where name='{$general['makenation']}'";
$query = "select nation from nation where nation!={$general['nation']} AND name='{$general['makenation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nationcount = MYDB_num_rows($result);
+1 -1
View File
@@ -27,7 +27,7 @@ function Tag2Code(string $str) {
function BadTag2Code(string $str) {
/* FIXME: 제대로된 tag 변환 코드 사용 */
$str = str_replace("<script", "<sorry", $str);
$str = str_replace("<embed", "<sorry", $str);
$str = str_replace("</script", "</sorry", $str);
return $str;
}
+46 -5
View File
@@ -75,7 +75,13 @@ function allButton() {
$call = "설문조사";
}
$templates = new \League\Plates\Engine('templates');
if(\file_exists("d_setting/templates/allButton.php")){
$templates = new \League\Plates\Engine('d_setting/templates');
}
else{
$templates = new \League\Plates\Engine('templates');
}
return $templates->render('allButton', [
'call' => $call,
@@ -95,10 +101,12 @@ function commandButton() {
$db = DB::db();
$me = $db->queryFirstRow("select no,nation,level,belong from general where owner=%i", $userID);
$nation = $db->queryFirstRow("select nation,color,secretlimit from nation where nation=%i",$me['nation']);
if($nation['color'] == "") { $nation['color'] = "#000000"; }
$nation = $db->queryFirstRow("select nation,level,color,secretlimit from nation where nation=%i",$me['nation'])??[
'nation'=>0,
'level'=>0,
'secretlimit'=>99,
'color'=>'#000000'
];
$bgColor = Util::array_get($nation['color'])?:'#000000';
$fgColor = newColor($bgColor);
@@ -119,11 +127,44 @@ function commandButton() {
'bgColor'=>$bgColor,
'fgColor'=>$fgColor,
'meLevel'=>$me['level'],
'nationLevel'=>$nation['level'],
'showSecret'=>$showSecret
]);
}
function formatWounded(int $value, int $wound): string{
if($wound == 0){
return "$value";
}
$woundedValue = intdiv($value * (100 - $wound), 100);
return "<font color=red>$woundedValue</font>";
}
function formatDefenceMode(int $value): string{
switch($value) {
case 0: return "×"; break;
case 1: return ""; break;
case 2: return ""; break;
}
return '??';
}
function formatLeadershipBonus(int $value): string{
if($value == 0){
return '';
}
return "<font color=cyan>+{$value}</font>";
}
function formatName(string $name, int $npc): string{
if($npc==1){
$name = "<font color='skyblue'>$name</font>";
}
else if($npc>1){
$name = "<font color='cyan'>$name</font>";
}
return $name;
}
function getMapHtml(){
//NOTE: 필요한가?
+1 -1
View File
@@ -117,7 +117,7 @@ function getTournamentTerm() {
$admin = MYDB_fetch_array($result);
switch($admin['tnmt_auto']) {
case 0: $str = '설정 안됨'; break;
case 0: $str = ''; break;
case 1: $str = "경기당 12분"; break;
case 2: $str = "경기당 7분"; break;
case 3: $str = "경기당 3분"; break;
+17 -6
View File
@@ -18,7 +18,7 @@ if (!$userID) {
}
$me = $db->queryFirstRow(
'SELECT no,con,turntime,newmsg,newvote,map from general where owner = %i',
'SELECT no,con,turntime,newmsg,newvote,`level` from general where owner = %i',
$userID
);
@@ -58,7 +58,7 @@ $scenario = $admin['scenario_text'];
<!DOCTYPE html>
<html>
<head>
<title>메인</title>
<title><?=UniqueConst::$serverName?>: 메인</title>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script src="../e_lib/jquery-3.2.1.min.js"></script>
@@ -74,6 +74,10 @@ $(function(){
reloadWorldMap({
hrefTemplate:'b_currentCity.php?citylist={0}'
});
setInterval(function(){
refreshMsg();
}, 10000);
});
</script>
<link href="css/normalize.css" rel="stylesheet">
@@ -211,6 +215,14 @@ if ($session->userGrade >= 5) {
</td></tr>
";
}
else if($session->userGrade == 4){
echo "
<tr><td colspan=5>
<input type=button value=시뮬 onclick=window.open('_simul.php')>
<input type=button value=119 onclick=window.open('_119.php')>
</td></tr>
";
}
?>
@@ -249,7 +261,7 @@ if ($session->userGrade >= 5) {
<tr>
<td width=646 align=right>
<?php commandTable(); ?>
<input id="mainBtnSubmit" type=button style=background-color:<?=GameConst::$basecolor2?>;color:white;width:110px;font-size:13px; value='실 행' onclick='refreshing(this, 3,form2)'><input type=button style=background-color:<?=GameConst::$basecolor2?>;color:white;width:110px;font-size:13px; value='갱 신' onclick='refreshing(this, 0,0)'><input type=button style=background-color:<?=GameConst::$basecolor2?>;color:white;width:160px;font-size:13px; value='로그아웃' onclick=location.replace('logout_process.php')><br>
<input id="mainBtnSubmit" type=button style=background-color:<?=GameConst::$basecolor2?>;color:white;width:110px;font-size:13px; value='실 행' onclick='refreshing(this, 3,form2)'><input type=button style=background-color:<?=GameConst::$basecolor2?>;color:white;width:110px;font-size:13px; value='갱 신' onclick='refreshing(this, 0,0)'><input type=button style=background-color:<?=GameConst::$basecolor2?>;color:white;width:160px;font-size:13px; value='로비로' onclick=location.replace('../')><br>
</td>
</tr>
</form>
@@ -286,12 +298,12 @@ if ($session->userGrade >= 5) {
내용 없이 '서신전달&amp;갱신' 누르면 메세지창이 갱신됩니다.
</div>
<div><?=allButton()?></div>
<div id="message_board"><div class="board_side bg0">
<div id="message_board"><div style="left:0;" class="board_side bg0">
<div class="board_header bg0">전체 메시지(최고99자)</div>
<section class="public_message"></section>
<div class="board_header bg0">개인 메시지(최고99자)</div>
<section class="private_message"></section>
</div><div class="board_side bg0">
</div><div style="right:0;" class="board_side bg0">
<section class="diplomacy_message">
</section>
@@ -299,7 +311,6 @@ if ($session->userGrade >= 5) {
<section class="national_message"></section>
</div></div>
<div style="clear:left;"><?=allButton()?><?=banner()?></div>
<?php PrintElapsedTime(); ?>
</div>
<?php
if ($con == 1) {
+41 -2
View File
@@ -155,15 +155,54 @@ if($session->userGrade < 5){
<input type="radio" name="show_img_level" value="1">전콘
</label>
<label class="btn btn-secondary active">
<input type="radio" name="show_img_level" value="2" checked>전콘, 병종
<input type="radio" name="show_img_level" value="2">전콘, 병종
</label>
<label class="btn btn-secondary">
<input type="radio" name="show_img_level" value="3">전콘, 병종, NPC
<input type="radio" name="show_img_level" value="3" checked>전콘, 병종, NPC
</label>
</div>
</div>
</div>
<div class="form-group row">
<label for="tournament_trig" class="col-sm-3 col-form-label">토너먼트 자동 시작<br>경기 단위</label>
<div class="col-sm-9" id="tournament_trig">
<div id="tournament_trig" class="btn-group-toggle btn-group flex-wrap" data-toggle="buttons">
<label class="btn btn-secondary w-25">
<input type="radio" name="tournament_trig" value="0">안함
</label>
<label class="btn btn-secondary w-25">
<input type="radio" name="tournament_trig" value="1">12( 5)
</label>
<label class="btn btn-secondary w-25">
<input type="radio" name="tournament_trig" value="2">7( 10시간)
</label>
<label class="btn btn-secondary w-25">
<input type="radio" name="tournament_trig" value="3">3( 4시간)
</label>
<label class="btn btn-secondary w-25 active">
<input type="radio" name="tournament_trig" value="4" checked>1( 82)
</label>
<label class="btn btn-secondary w-25">
<input type="radio" name="tournament_trig" value="5">30( 41)
</label>
<label class="btn btn-secondary w-25">
<input type="radio" name="tournament_trig" value="6">15( 21)
</label>
<label class="btn btn-secondary w-25">
<input type="radio" name="tournament_trig" value="7">5( 7)
</label>
</div>
</div>
</div>
<div class="form-group row">
<label for="reserve_open" class="col-sm-3 col-form-label">오픈 예약</label>
<div class="col-sm-9">
<input type="text" class="form-control" name="reserve_open" id="reserve_open" placeholder="YYYY-MM-DD hh:mm" value="" />
</div>
</div>
<div class="form-group row">
<div class="col-sm-3"></div>
<div class="col-sm-9">
+39
View File
@@ -0,0 +1,39 @@
<?php
namespace sammo;
include 'lib.php';
include "func.php";
$db = DB::db();
$reserved = $db->queryFirstRow(
'SELECT * FROM reserved_open WHERE `date` <= %s LIMIT 1',
(new \DateTime())->format('Y-m-d H:i:s')
);
if(!$reserved){
Json::die([
'result'=>true,
'affected'=>0
]);
}
$options = Json::decode($reserved['options']);
$result = ResetHelper::buildScenario(
$options['turnterm'],
$options['sync'],
$options['scenario'],
$options['fiction'],
$options['extend'],
$options['npcmode'],
$options['show_img_level'],
$options['tournament_trig']
);
$result['affected']=1;
$prefix = DB::prefix();
AppConf::getList()[$prefix]->openServer();
Json::die($result);
+1
View File
@@ -19,5 +19,6 @@ if(!$generalInfo){
$result['generalID'] = $generalInfo['no'];
$result['myNationID'] = $generalInfo['nation'];
$result['isChief'] = ($generalInfo['level'] == 12);
$result['generalLevel'] = $generalInfo['level'];
Json::die($result);
+41 -166
View File
@@ -28,7 +28,8 @@ $v->rule('required', [
'fiction',
'extend',
'npcmode',
'show_img_level'
'show_img_level',
'tournament_trig'
]);
if(!$v->validate()){
Json::die([
@@ -44,173 +45,47 @@ $fiction = (int)$_POST['fiction'];
$extend = (int)$_POST['extend'];
$npcmode = (int)$_POST['npcmode'];
$show_img_level = (int)$_POST['show_img_level'];
$tournament_trig = (int)$_POST['tournament_trig'];
if(120 % $turnterm != 0){
$reserve_open = Util::getReq('reserve_open');
if($reserve_open){
$reserve_open = new \DateTime($reserve_open);
$db = DB::db();
$clearResult = ResetHelper::clearDB();
if(!$clearResult['result']){
Json::die($clearResult);
}
$scenarioObj = new Scenario($scenario, true);
$db->delete('reserved_open', true);
$db->insert('reserved_open', [
'options'=>Json::encode([
'turnterm'=>$turnterm,
'sync'=>$sync,
'scenario'=>$scenario,
'scenarioName'=>$scenarioObj->getTitle(),
'fiction'=>$fiction,
'extend'=>$extend,
'npcmode'=>$npcmode,
'show_img_level'=>$show_img_level,
'tournament_trig'=>$tournament_trig
]),
'date'=>$reserve_open->format('Y-m-d H:i:s')
]);
Json::die([
'result'=>false,
'reason'=>'turnterm은 120의 약수여야 합니다.'
'result'=>true,
'reason'=>'예약'
]);
}
if(!file_exists(__dir__.'/logs') || !file_exists(__dir__.'/data')){
if(!is_writable(__dir__)){
Json::die([
'result'=>false,
'reason'=>'logs, data 디렉토리를 생성할 권한이 없습니다.'
]);
}
mkdir(__dir__.'/logs', 0644);
mkdir(__dir__.'/data', 0644);
}
if(!is_writable(__dir__.'/logs')){
Json::die([
'result'=>false,
'reason'=>'logs 디렉토리의 쓰기 권한이 없습니다'
]);
}
if(!is_writable(__dir__.'/data')){
Json::die([
'result'=>false,
'reason'=>'data 디렉토리의 쓰기 권한이 없습니다'
]);
}
if(!is_writable(__dir__.'/d_setting')){
Json::die([
'result'=>false,
'reason'=>'d_setting 디렉토리의 쓰기 권한이 없습니다'
]);
}
if(!file_exists(__dir__.'/logs/.htaccess')){
@file_put_contents(__dir__.'/logs/.htaccess', 'Deny from all');
}
if(!file_exists(__dir__.'/data/.htaccess')){
@file_put_contents(__dir__.'/data/.htaccess', 'Deny from all');
}
$db = DB::db();
$mysqli_obj = $db->get();
$scenarioObj = new Scenario($scenario, false);
$startyear = $scenarioObj->getYear()??GameConst::$defaultStartYear;
FileUtil::delInDir("logs");
FileUtil::delInDir("data");
$result = Util::generateFileUsingSimpleTemplate(
__DIR__.'/d_setting/UniqueConst.orig.php',
__DIR__.'/d_setting/UniqueConst.php',[
'serverID'=>DB::prefix().'_'.Util::randomStr(8)
], true
);
if($mysqli_obj->multi_query(file_get_contents(__dir__.'/sql/reset.sql'))){
while(true){
if (!$mysqli_obj->more_results()) {
break;
}
if(!$mysqli_obj->next_result()){
break;
}
}
}
if($mysqli_obj->multi_query(file_get_contents(__dir__.'/sql/schema.sql'))){
while(true){
if (!$mysqli_obj->more_results()) {
break;
}
if(!$mysqli_obj->next_result()){
break;
}
}
}
$db->insert('plock', [
'plock'=>1
]);
CityConst::build();
$turntime = date('Y-m-d H:i:s');
$time = substr($turntime, 11, 2);
if($sync == 0) {
// 현재 시간을 1월로 맞춤
$starttime = cutTurn($turntime, $turnterm);
$month = 1;
$year = $startyear;
} else {
// 현재 시간과 동기화
list($starttime, $yearPulled, $month) = cutDay($turntime, $turnterm);
if($yearPulled){
$year = $startyear-1;
}
else{
$year = $startyear;
}
}
$killturn = 4800 / $turnterm;
if($npcmode == 1) { $killturn = intdiv($killturn, 3); }
$env = [
'scenario'=>$scenario,
'scenario_text'=>$scenarioObj->getTitle(),
'startyear'=>$startyear,
'year'=> $year,
'month'=> $month,
'msg'=>'공지사항',//TODO:공지사항
'maxgeneral'=>GameConst::$defaultMaxGeneral,
'maxnation'=>GameConst::$defaultMaxNation,
'conlimit'=>300,
'gold_rate'=>100,
'rice_rate'=>100,
'turntime'=>$turntime,
'starttime'=>$starttime,
'turnterm'=>$turnterm,
'killturn'=>$killturn,
'genius'=>GameConst::$defaultMaxGenius,
'show_img_level'=>$show_img_level,
'npcmode'=>$npcmode,
'extended_general'=>$extend,
'fiction'=>$fiction
];
foreach(RootDB::db()->query('SELECT `no`, `name`, `picture`, `imgsvr` FROM member WHERE grade >= 5') as $admin){
$db->insert('general', [
'owner'=>$admin['no'],
'name'=>$admin['name'],
'picture'=>$admin['picture'],
'imgsvr'=>$admin['imgsvr'],
'turntime'=>$turntime,
'killturn'=>null
]);
}
$db->insert('game', $env);
$scenarioObj->build($env);
$db->update('plock', [
'plock'=>0
], true);
LogHistory(1);
$prefix = DB::prefix();
AppConf::getList()[$prefix]->closeServer();
Json::die([
'result'=>true
]);
Json::die(ResetHelper::buildScenario(
$turnterm,
$sync,
$scenario,
$fiction,
$extend,
$npcmode,
$show_img_level,
$tournament_trig
));
+2
View File
@@ -93,6 +93,8 @@ if($result !== true){
]);
}
ResetHelper::clearDB();
AppConf::getList()[$prefix]->closeServer();
Json::die([
+4 -4
View File
@@ -44,16 +44,16 @@ if($msg === null){
'reason'=>'올바르지 않은 메시지'
]);
}
$reason = 'success';
if($msgResponse){
$result = $msg->agreeMessage($general['no']);
$result = $msg->agreeMessage($general['no'], $reason);
}
else{
$result = $msg->declineMessage($general['no']);
$result = $msg->declineMessage($general['no'], $reason);
}
Json::die([
'result' => $result===DiplomaticMessage::ACCEPTED,
'reason' => 'result'
'reason' => $reason
]);
+36 -1
View File
@@ -4,13 +4,48 @@ namespace sammo;
include "lib.php";
$session = Session::requireLogin([
'game'=>'x',
'game'=>null,
'me'=>null
])->setReadOnly();
$userID = Session::getUserID();
if(!class_exists('\\sammo\\DB')){
Json::die([
'game'=>null,
'me'=>null
]);
}
$db = DB::db();
if(file_exists(__dir__.'/.htaccess')){
$reserved = $db->queryFirstRow(
'SELECT * FROM reserved_open ORDER BY `date` ASC LIMIT 1'
);
if(!$reserved){
Json::die([
'game'=>null,
'me'=>null
]);
}
$options = Json::decode($reserved['options']);
Json::die([
'reserved'=>[
'scenarioName'=>$options['scenarioName'],
'turnterm'=>$options['turnterm'],
'fictionMode'=>($options['fiction']?'가상':'사실'),
'npcMode'=>($options['npcmode']?'가능':'불가'),
'openDatetime'=>$reserved['date']
],
'game'=>null,
'me'=>null
]);
}
//TODO: 천통시에도 예약 오픈 알림이 필요..?
$game = $db->queryFirstRow('SELECT isUnited, npcMode, year, month, scenario, scenario_text, maxgeneral as maxUserCnt, turnTerm from game where `no`=1');
$nationCnt = $db->queryFirstField('SELECT count(`nation`) from nation where `level` > 0');
+3 -3
View File
@@ -29,7 +29,7 @@ $connect=$db->get();
<!DOCTYPE html>
<html>
<head>
<title>장수생성</title>
<title><?=UniqueConst::$serverName?>: 장수생성</title>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<link href="../d_shared/common.css" rel="stylesheet">
<link rel='stylesheet' href="css/common.css">
@@ -71,10 +71,10 @@ for ($i=0; $i < $nationcount; $i++) {
$nation = MYDB_fetch_array($nationresult);
if ($nation['scoutmsg'] == "") {
echo "
<tr><td align=center width=98 style=color:".newColor($nation['color']).";background-color:{$nation['color']}>{$nation['name']}</td><td width=898 style=color:{newColor({$nation['color']})};background-color:{$nation['color']}>-</td></tr>";
<tr><td align=center width=98 style=color:".newColor($nation['color']).";background-color:{$nation['color']}>{$nation['name']}</td><td width=898 style=color:".newColor($nation['color']).";background-color:{$nation['color']}>-</td></tr>";
} else {
echo "
<tr><td align=center width=98 style=color:".newColor($nation['color']).";background-color:{$nation['color']}>{$nation['name']}</td><td width=898 style=color:{newColor({$nation['color']})};background-color:{$nation['color']}>{$nation['scoutmsg']}</td></tr>";
<tr><td align=center width=98 style=color:".newColor($nation['color']).";background-color:{$nation['color']}>{$nation['name']}</td><td width=898 style=color:".newColor($nation['color']).";background-color:{$nation['color']}>{$nation['scoutmsg']}</td></tr>";
}
}
?>
+3 -5
View File
@@ -8,7 +8,6 @@ $v = new Validator($_POST + $_GET);
$v
->rule('required', [
'name',
'pic',
'leader',
'power',
'intel'
@@ -18,7 +17,6 @@ $v
'power',
'intel',
'character',
'pic'
])
->rule('lengthBetween', 'name', 1, 6)
->rule('min', [
@@ -46,7 +44,7 @@ $userID = Session::getUserID();
$name = Util::getReq('name');
$name = StringUtil::removeSpecialCharacter($name);
$pic = Util::getReq('pic', 'int', 0);
$pic = (int)Util::getReq('pic', 'bool', 0);
$character = Util::getReq('character', 'int', 0);
$leader = Util::getReq('leader', 'int', 50);
@@ -59,7 +57,7 @@ extractMissingPostToGlobals();
$rootDB = RootDB::db();
//회원 테이블에서 정보확인
$member = $rootDB->queryFirstRow('SELECT `no`, id, picture, grade, `name` FROM member WHERE no=%i', $userID);
$member = $rootDB->queryFirstRow('SELECT `no`, id, picture, grade, `name`, imgsvr FROM member WHERE no=%i', $userID);
if (!$member) {
MessageBox("잘못된 접근입니다!!!");
@@ -70,7 +68,7 @@ if (!$member) {
$db = DB::db();
########## 동일 정보 존재여부 확인. ##########
$admin = $db->queryFirstRow('SELECT year,month,maxgeneral,turnterm,genius,npcmode from game limit 1');
$admin = $db->queryFirstRow('SELECT year,month,maxgeneral,scenario,show_img_level,turnterm,genius,npcmode from game limit 1');
$gencount = $db->queryFirstField('SELECT count(`no`) FROM general WHERE npc<2');
$oldGeneral = $db->queryFirstField('SELECT `no` FROM general WHERE `owner`=%i', $userID);
$oldName = $db->queryFirstField('SELECT `no` FROM general WHERE `name`=%s', $name);
+4 -1
View File
@@ -113,6 +113,7 @@ function formSetup(){
extend:"required",
npcmode:"required",
show_img_level:"required",
tournament_trig:"required"
},
errorElement: "div",
errorPlacement: function ( error, element ) {
@@ -149,7 +150,9 @@ function formSetup(){
fiction:$('#fiction input:radio:checked').val(),
extend:$('#extend input:radio:checked').val(),
npcmode:$('#npcmode input:radio:checked').val(),
show_img_level:$('#show_img_level input:radio:checked').val()
show_img_level:$('#show_img_level input:radio:checked').val(),
tournament_trig:$('#tournament_trig input:radio:checked').val(),
reserve_open:$('#reserve_open').val()
}
}).then(function(result){
var deferred = $.Deferred();
+2 -71
View File
@@ -84,7 +84,7 @@ function reloadWorldMap(option){
else if(month <= 6){
$world_map.addClass('map_summer');
}
else if(month <= 6){
else if(month <= 9){
$world_map.addClass('map_fall');
}
else{
@@ -366,65 +366,8 @@ function reloadWorldMap(option){
var $map_body = $('.world_map .map_body');
//터치스크린 탭
$objs.on('touchstart', function(e){
var $this = $(this);
var touchMode = $this.data('touchMode');
if($tooltip_city.data('target') != $this.data('id')){
$this.data('touchMode', 1);
}
else if(touchMode === undefined){
$this.data('touchMode', 1);
}
else{
$this.data('touchMode', touchMode + 1);
}
$map_body.data('touchMode', 1);
$tooltip_city.data('target', $this.data('id'));
});
$objs.on('touchend', function(e){
var $this = $(this);
var position = $this.parent().position();
$tooltip_city.html($this.data('text'));
var nation_text = $this.data('nation');
if(nation_text){
$tooltip_nation.html(nation_text).show();
}
else{
$tooltip_nation.html('').hide();
}
$tooltip.css({'top': position.top + 25, 'left': position.left + 35}).show();
var touchMode = $this.data('touchMode');
if(touchMode <= 1){
return false;
}
//xxx: touchend 다음 click 이벤트가 갈 수도 있고, 안 갈 수도 있다.
$this.data('touchMode', 0);
});
$map_body.on('touchend',function(e){
//위의 touchend bind에 해당하지 않는 경우 -> 빈 지도 터치
$tooltip.hide();
});
//Mouse over 모드 작동
$map_body.on('mousemove', function(e){
if($(this).data('touchMode')){
return true;
}
var parentOffset = $map_body.offset();
var relX = e.pageX - parentOffset.left;
var relY = e.pageY - parentOffset.top;
@@ -433,10 +376,6 @@ function reloadWorldMap(option){
});
$objs.on('mouseenter', function(e){
if($map_body.data('touchMode')){
return true;
}
var $this = $(this);
$tooltip_city.data('target', $this.data('id'));
@@ -457,15 +396,7 @@ function reloadWorldMap(option){
});
$objs.on('click', function(e){
//xxx: touchend 다음 click 이벤트가 갈 수도 있고, 안 갈 수도 있다.
var touchMode = $(this).data('touchMode');
if(touchMode === undefined){
return;
}
if(touchMode === 1){
return false;
}
return;
});
+26 -4
View File
@@ -42,7 +42,10 @@ function responseMessage(msgID, response){
}).then(refreshMsg);
}
function refreshMsg(){
function refreshMsg(result){
if(result && !result.result){
alert(result.reason);
}
return redrawMsg(fetchMsg());
}
@@ -59,8 +62,6 @@ function fetchMsg(){
}
function redrawMsg(deferred){
console.log(deferred);
function registerSequence(obj){
if(!obj.result){
@@ -216,7 +217,8 @@ function refreshMailboxList(obj){
generalList = {};
//TODO:수뇌인 경우 각국에 대해 외교 국메를 넣을 수 있어야함.
$.each(obj.nation, function(){
var nation = this;
@@ -284,6 +286,25 @@ function refreshMailboxList(obj){
$favorite.append($lastContact);
//TODO:운영자를 추가하는 코드도 넣을 것.
if(myGeneralLevel >= 5){
$.each(obj.nation, function(){
var nation = this;
//console.log(nation);
var $nation = $('<option value="{0}">{1}</option>'.format(nation.mailbox,nation.name));
$nation.css('background-color', nation.color);
if(isBrightColor(nation.color)){
$nation.css('color', 'black');
}
else{
$nation.css('color', 'white');
}
$favorite.append($nation);
});
}
$mailboxList.prepend($favorite);
if(!oldSelected){
@@ -307,6 +328,7 @@ function registerGlobal(basicInfo){
};
myGeneralID = basicInfo.generalID;
isChief = basicInfo.isChief;
myGeneralLevel = basicInfo.generalLevel;
}
function activateMessageForm(){
-8
View File
@@ -26,7 +26,6 @@ include "MYDB.php";
// 각종 변수
define('STEP_LOG', true);
define('PROCESS_LOG', true);
$_startTime = microtime(true);
ob_start();
session_cache_limiter('nocache');//NOTE: 캐시가 가능하도록 설정해야 할 수도 있음. 주의!
@@ -55,13 +54,6 @@ function MessageBox($str)
echo "<script>alert('$str');</script>";
}
function PrintElapsedTime()
{
global $_startTime;
$_endTime = round(microtime(true) - $_startTime, 3);
echo "<table width=1000 align=center style=font-size:10px;><tr><td align=right>경과시간 : {$_endTime}초</td></tr></table>";
}
function LogText($prefix, $variable)
{
$text = sprintf('%s : %s'."\n", $prefix, var_export($variable, true));
+1 -15
View File
@@ -19,24 +19,10 @@ extractMissingPostToGlobals();
increaseRefresh("턴입력", 1);
if(!$turn || $commandtype === null){
header('location:./');
header('location:commandlist.php');
die();
}
$query = "select conlimit from game limit 1";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$admin = MYDB_fetch_array($result);
$query = "select no,name,nation,con from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$me = MYDB_fetch_array($result);
$con = checkLimit($me['con'], $admin['conlimit']);
if($con >= 2) {
header('location:./');
exit();
}
$count = count($turn);
for($i=0; $i < $count; $i++) {
if($turn[$i] == 100 || $turn[$i] == 99 || $turn[$i] == 98) {
+3 -1
View File
@@ -4,8 +4,10 @@ namespace sammo;
include "lib.php";
include "func.php";
$session = Session::getInstance()->setReadOnly();
$db = DB::db();
$connect=$db->get();
increaseRefresh("자동", 2);
//increaseRefresh("자동", 2);
checkTurn();
+1 -1
View File
@@ -1159,7 +1159,7 @@ function processWar($general, $city) {
}
//회피
$ratio = rand() % 100; // 0 ~ 99
$ratio2 = GameUnitConst::byID($oppose['crewtype'])->defence; //회피율
$ratio2 = GameUnitConst::byID($oppose['crewtype'])->avoid; //회피율
$ratio2 = Util::round($ratio2 * $oppose['train'] / 100); //훈련 반영
// 특기보정 : 돌격, 궁병
if($general['special2'] == 60) { $ratio2 -= 100; }
+23 -17
View File
@@ -58,7 +58,7 @@ switch($commandtype) {
case 17: command_Single($turn, 17); break; //소집해제
case 21: command_21( $turn, 21); break; //이동
//case 22: command_22( $turn, 22); break; //등용 //TODO:등용장 재 디자인
case 22: command_22( $turn, 22); break; //등용 //TODO:등용장 재 디자인
case 23: command_23( $turn, 23); break; //포상
case 24: command_24( $turn, 24); break; //몰수
case 25: command_25( $turn, 25); break; //임관
@@ -166,11 +166,7 @@ function ender($type=0) {
echo banner();
echo "
</td></tr>
</table>";
PrintElapsedTime();
echo "
</table>
</body>
</html>
";
@@ -594,7 +590,7 @@ function calc(cost, formnum) {
<form name=form{$i} action=c_double.php>
<td valign=center>
<input type=text name=double maxlength=3 size=3 value=$crew style=text-align:right;color:white;background-color:black>00<input type=button value=계산 onclick='calc($baseCost, $i)'><br>
<input type=text name=cost maxlength=5 size=5 readonly style=text-align:right;color:white;background-color:black> <input type=submit value=>
<input type=text name=cost maxlength=5 size=5 readonly style=text-align:right;color:white;background-color:black> <input type=submit value=>
<input type=hidden name=third value={$i}>
<input type=hidden name=command value=$command>";
@@ -860,7 +856,10 @@ function command_23($turn, $command) {
<option value=8>800</option>
<option value=9>900</option>
<option value=10>1000</option>
<option value=12>1200</option>
<option value=15>1500</option>
<option value=20>2000</option>
<option value=25>2500</option>
<option value=30>3000</option>
<option value=40>4000</option>
<option value=50>5000</option>
@@ -935,7 +934,10 @@ function command_24($turn, $command) {
<option value=8>800</option>
<option value=9>900</option>
<option value=10>1000</option>
<option value=12>1200</option>
<option value=15>1500</option>
<option value=20>2000</option>
<option value=25>2500</option>
<option value=30>3000</option>
<option value=40>4000</option>
<option value=50>5000</option>
@@ -1448,7 +1450,10 @@ function command_43($turn, $command) {
<option value=8>800</option>
<option value=9>900</option>
<option value=10>1000</option>
<option value=12>1200</option>
<option value=15>1500</option>
<option value=20>2000</option>
<option value=25>2500</option>
<option value=30>3000</option>
<option value=40>4000</option>
<option value=50>5000</option>
@@ -1496,7 +1501,10 @@ function command_44($turn, $command) {
<option value=8>800</option>
<option value=9>900</option>
<option value=10>1000</option>
<option value=12>1200</option>
<option value=15>1500</option>
<option value=20>2000</option>
<option value=25>2500</option>
<option value=30>3000</option>
<option value=40>4000</option>
<option value=50>5000</option>
@@ -1540,7 +1548,7 @@ function command_46($turn, $command) {
continue;
}
if(isset($nationcolor[$nation['color']])){
if(!isset($nationcolor[$nation['color']])){
$nationcolor[$nation['color']] = 1;
}
else{
@@ -1720,7 +1728,10 @@ function command_49($turn, $command) {
<option value=8>800</option>
<option value=9>900</option>
<option value=10>1000</option>
<option value=12>1200</option>
<option value=15>1500</option>
<option value=20>2000</option>
<option value=25>2500</option>
<option value=30>3000</option>
<option value=40>4000</option>
<option value=50>5000</option>
@@ -1774,7 +1785,7 @@ function command_51($turn, $command) {
for($i=1; $i <= $count; $i++) {
$nation = MYDB_fetch_array($result);
if($myNation['power'] / $nation['power'] <= 3 || !isClose($me['nation'], $nation['nation'])) {
if($myNation['power'] <= $nation['power'] * 3 || !isClose($me['nation'], $nation['nation'])) {
echo "<option style=color:{$nation['color']};background-color:red; value={$nation['nation']}>【 {$nation['name']} 】</option>";
} else {
echo "<option style=color:{$nation['color']} value={$nation['nation']}>【 {$nation['name']} 】</option>";
@@ -2758,13 +2769,8 @@ function command_81($turn, $command) {
if($nation['level'] <= 0){
continue;
}
if(isset($nationcolor[$nation['color']])){
$nationcolor[$nation['color']] = 1;
}
else{
$nationcolor[$nation['color']]++;
}
$colorUsed[$nation['color']]+=1;
}
$colorUsedCnt = 0;
@@ -2787,7 +2793,7 @@ function command_81($turn, $command) {
<form name=form1 action=c_double.php method=post>
색깔 : <select name=double size=1>";
foreach(GetNationColors() as $idx=>$color) {
if($colorUsed[$color] > 0){
if($colorUsed[$color]>0){
continue;
}
echo "<option value={$idx} style=background-color:{$color};color:".newColor($color).";>국가명</option>";
+4 -3
View File
@@ -29,13 +29,14 @@ class CityHelper{
foreach (DB::db()->query('SELECT `city` as `id`, `name`, `level`, `nation` from city') as $city) {
$id = $city['id'];
$name = $city['name'];
$nationID = $city['nation'];
$list[$id] = $city;
$listInv[$city['name']] = $city;
if(!key_exists($id, $listByNation)){
$listByNation[$id] = [];
if(!key_exists($nationID, $listByNation)){
$listByNation[$nationID] = [];
}
$listByNation[$id][] = $city;
$listByNation[$nationID][] = $city;
}
self::$list = $list;
+10 -7
View File
@@ -16,6 +16,7 @@ class DiplomaticMessage extends Message{
protected $diplomaticType = '';
protected $diplomacyName = '';
protected $diplomacyDetail = '';
protected $validDiplomacy = true;
public function __construct(
@@ -77,18 +78,20 @@ class DiplomaticMessage extends Message{
return [self::INVALID, '올바르지 않은 불가침 서신입니다.'];
}
$this->diplomacyDetail = "{$year}";
$helper = new Engine\Diplomacy($this->src->nationID, $this->dest->nationID);
$chk = $helper->noAggression($year, $option);
if($chk[0] !== self::ACCEPTED){
return $chk;
}
$youlog[] = "<C>●</><D><b>{$this->dest->nationName}</b></>(와)과 <C>$when</>년 불가침에 성공했습니다.";
$mylog[] = "<C>●</><D><b>{$this->src->nationName}</b></>(와)과 <C>$when</>년 불가침에 합의했습니다.";
$youlog[] = "<C>●</><D><b>{$this->dest->nationName}</b></>(와)과 <C>$year</>년 불가침에 성공했습니다.";
$mylog[] = "<C>●</><D><b>{$this->src->nationName}</b></>(와)과 <C>$year</>년 불가침에 합의했습니다.";
pushGenLog(['no'=>$this->dest->generalID], $mylog);
pushGenLog(['no'=>$this->src->generalID], $youlog);
pushGeneralHistory(['no'=>$this->src->generalID], "<C>●</>{$helper->year}{$helper->month}월:<D><b>{$this->dest->nationName}</b></>(와)과 {$when}년 불가침 성공");
pushGeneralHistory(['no'=>$this->dest->generalID], "<C>●</>{$helper->year}{$helper->month}월:<D><b>{$this->src->nationName}</b></>(와)과 {$when}년 불가침 수락");
pushGeneralHistory(['no'=>$this->src->generalID], "<C>●</>{$helper->year}{$helper->month}월:<D><b>{$this->dest->nationName}</b></>(와)과 {$year}년 불가침 성공");
pushGeneralHistory(['no'=>$this->dest->generalID], "<C>●</>{$helper->year}{$helper->month}월:<D><b>{$this->src->nationName}</b></>(와)과 {$year}년 불가침 수락");
return $chk;
}
@@ -212,7 +215,7 @@ class DiplomaticMessage extends Message{
/**
* @return int 수행 결과 반환, ACCEPTED(등용장 소모), DECLINED(등용장 소모), INVALID 반환
*/
public function agreeMessage(int $receiverID):int{
public function agreeMessage(int $receiverID, string &$reason):int{
//NOTE: 올바른 유저가 agreeMessage() 호출을 한건지는 외부에서 체크 필요(Session->userID 등)
if(!$this->id){
@@ -294,7 +297,7 @@ class DiplomaticMessage extends Message{
self::MSGTYPE_NATIONAL,
$this->dest,
$this->src,
"【외교】{$year}{$month}월: {$this->src->nationName} {$this->dest->nationName}에게 제안한 {$this->diplomacyName} 동의.",
"【외교】{$year}{$month}월: {$this->src->nationName}(이)가 {$this->dest->nationName}에게 제안한 {$this->diplomacyDetail}{$this->diplomacyName} 동의.",
new \DateTime(),
new \DateTime('9999-12-31'),
[
@@ -315,7 +318,7 @@ class DiplomaticMessage extends Message{
return self::DECLINED;
}
public function declineMessage(int $receiverID):int{
public function declineMessage(int $receiverID, string &$reason):int{
if(!$this->id){
throw \RuntimeException('전송되지 않은 메시지에 거절 진행 중');
}
+1 -1
View File
@@ -282,7 +282,7 @@ class Diplomacy{
$db = DB::db();
$db->update('diplomacy',[
'state'=>7,
'term'=>$when,
'term'=>$when*12,
'fixed'=>$option
],
'(me=%i AND you=%i) OR (you=%i AND me=%i)',
+10 -8
View File
@@ -11,6 +11,7 @@ use \sammo\ScoutMessage;
class Personnel{
protected $nation = null;//TODO: 상속체로 변경.
protected $senderID = null;
public $valid = false;
public $startYear = 0;
@@ -18,7 +19,7 @@ class Personnel{
public $month = 0;
public $killturn = 0;
public function __construct(int $nationID){
public function __construct(int $nationID, int $senderID){
$db = DB::db();
$nation = $db->queryFirstRow(
'SELECT nation, `name`, `level`, capital, scout FROM nation WHERE nation=%i',
@@ -29,6 +30,7 @@ class Personnel{
return;
}
$this->senderID = $senderID;
$this->nation = $nation;
$this->valid = true;
@@ -51,7 +53,7 @@ class Personnel{
return [ScoutMessage::INVALID, '초반제한 중입니다.'];
}
if(!$this->nation['scout']){
if($this->nation['scout']){
return [ScoutMessage::INVALID, '현재 임관금지 중인 국가입니다.'];
}
@@ -67,7 +69,7 @@ class Personnel{
return [ScoutMessage::DECLINED, '군주는 등용장을 수락할 수 없습니다.'];
}
if(strpos($general['nations'], ",{$this->nation['nation']},") >= 0){
if(strpos($general['nations'], ",{$this->nation['nation']},") !== false){
return [ScoutMessage::DECLINED, '이미 임관했었던 국가입니다.'];
}
@@ -100,7 +102,7 @@ class Personnel{
$isTroopLeader = false;
if($general['troop']){
$troopLeader = $db->queryFirstField('SELECT `no` FROM troop WHERE troop = %i', $general['troop']);
if($troopLeader == $receiverID){
if($troopLeader == $generalID){
$isTroopLeader = true;
}
}
@@ -179,12 +181,12 @@ class Personnel{
$setValues['dedication'] = $db->sqleval('experience + %i', 100);//XXX: 상수
}
if($me['npc'] < 2){
$setValues['killturn'] = $killturn;
if($general['npc'] < 2){
$setValues['killturn'] = $this->killturn;
}
$db->update('general', $setValues, 'no=%i', $receiverID);
$db->update('general', $setSenderValues, 'no=%i', $this->src->generalID);
$db->update('general', $setValues, 'no=%i', $generalID);
$db->update('general', $setSenderValues, 'no=%i', $this->senderID);
$db->update('nation', $setOriginalNationValues, 'nation=%i', $general['nation']);
$db->update('nation', $setScoutNationValues, 'nation=%i', $this->nation['nation']);
if($setOriginalCityValues){
+1 -1
View File
@@ -73,7 +73,7 @@ class GameUnitConst{
[32, '백귀병', 80, 130, 7, 5, 9, 11, 2, '오환', true, ['저렴하고 튼튼합니다.']],
[33, '흑귀병', 130, 80, 7, 5, 11, 9, 2, '왜', true, ['저렴하고 강력합니다.']],
[34, '악귀병', 130, 130, 7, 0, 12, 12, 2, '장안', true, ['백병전에도 능숙합니다.']],
[35, '남귀병', 60, 60, 7, 10, 8, 8, 0, 0, false, ['전투를 포기하고 계략에 몰두합니다.']],
[35, '남귀병', 60, 60, 7, 10, 8, 8, 0, 1000, false, ['전투를 포기하고 계략에 몰두합니다.']],
[36, '황귀병', 110, 110, 7, 0, 13, 10, 2, '낙양', true, ['고도로 훈련된 귀병입니다.']],
[37, '천귀병', 80, 130, 7, 15, 11, 12, 2, '성도', true, ['갑주를 두른 귀병입니다.']],
[38, '마귀병', 130, 80, 7, 15, 12, 11, 2, '업', true, ['날카로운 무기를 가진 귀병입니다.']],
+1 -1
View File
@@ -68,7 +68,7 @@ class GameUnitDetail{
if(!key_exists($this->recruitCondition, $ownCities)){
return false;
}
if($cityLevel == '특'){
if($cityLevel == CityConst::$levelMap['특']){
if ($tech < 3000) {
return false;
}
+214
View File
@@ -0,0 +1,214 @@
<?php
namespace sammo;
class ResetHelper{
private function __construct(){
}
static public function clearDB(){
$servRoot = realpath(__dir__.'/../');
if(!file_exists($servRoot.'/logs') || !file_exists($servRoot.'/data')){
if(!is_writable($servRoot)){
return [
'result'=>false,
'reason'=>'logs, data 디렉토리를 생성할 권한이 없습니다.'
];
}
mkdir($servRoot.'/logs', 0644);
mkdir($servRoot.'/data', 0644);
}
if(!is_writable($servRoot.'/logs')){
return [
'result'=>false,
'reason'=>'logs 디렉토리의 쓰기 권한이 없습니다'
];
}
if(!is_writable($servRoot.'/data')){
return [
'result'=>false,
'reason'=>'data 디렉토리의 쓰기 권한이 없습니다'
];
}
if(!is_writable($servRoot.'/d_setting')){
return [
'result'=>false,
'reason'=>'d_setting 디렉토리의 쓰기 권한이 없습니다'
];
}
if(!file_exists($servRoot.'/logs/.htaccess')){
@file_put_contents($servRoot.'/logs/.htaccess', 'Deny from all');
}
if(!file_exists($servRoot.'/data/.htaccess')){
@file_put_contents($servRoot.'/data/.htaccess', 'Deny from all');
}
$prefix = DB::prefix();
AppConf::getList()[$prefix]->closeServer();
$db = DB::db();
$mysqli_obj = $db->get();
FileUtil::delInDir($servRoot."/logs");
FileUtil::delInDir($servRoot."/data");
$result = Util::generateFileUsingSimpleTemplate(
$servRoot.'/d_setting/UniqueConst.orig.php',
$servRoot.'/d_setting/UniqueConst.php',[
'serverID'=>DB::prefix().'_'.Util::randomStr(8),
'serverName'=>AppConf::getList()[$prefix]->getKorName(),
], true
);
if($mysqli_obj->multi_query(file_get_contents($servRoot.'/sql/reset.sql'))){
while(true){
if (!$mysqli_obj->more_results()) {
break;
}
if(!$mysqli_obj->next_result()){
break;
}
}
}
if($mysqli_obj->multi_query(file_get_contents($servRoot.'/sql/schema.sql'))){
while(true){
if (!$mysqli_obj->more_results()) {
break;
}
if(!$mysqli_obj->next_result()){
break;
}
}
}
return [
'result'=>true
];
}
static public function buildScenario(
int $turnterm,
int $sync,
int $scenario,
int $fiction,
int $extend,
int $npcmode,
int $show_img_level,
int $tournament_trig
):array{
//FIXME: 분리할 것
if(120 % $turnterm != 0){
return [
'result'=>false,
'reason'=>'turnterm은 120의 약수여야 합니다.'
];
}
if($tournament_trig < 0 || $tournament_trig > 7){
return [
'result'=>false,
'reason'=>'올바르지 않은 토너먼트 주기입니다.'
];
}
$clearResult = self::clearDB();
if(!$clearResult['result']){
return $clearResult;
}
$scenarioObj = new Scenario($scenario, false);
$startyear = $scenarioObj->getYear()??GameConst::$defaultStartYear;
$db = DB::db();
$db->insert('plock', [
'plock'=>1
]);
CityConst::build();
$turntime = date('Y-m-d H:i:s');
$time = substr($turntime, 11, 2);
if($sync == 0) {
// 현재 시간을 1월로 맞춤
$starttime = cutTurn($turntime, $turnterm);
$month = 1;
$year = $startyear;
} else {
// 현재 시간과 동기화
list($starttime, $yearPulled, $month) = cutDay($turntime, $turnterm);
if($yearPulled){
$year = $startyear-1;
}
else{
$year = $startyear;
}
}
$killturn = 4800 / $turnterm;
if($npcmode == 1) { $killturn = intdiv($killturn, 3); }
$env = [
'scenario'=>$scenario,
'scenario_text'=>$scenarioObj->getTitle(),
'startyear'=>$startyear,
'year'=> $year,
'month'=> $month,
'msg'=>'공지사항',//TODO:공지사항
'maxgeneral'=>GameConst::$defaultMaxGeneral,
'maxnation'=>GameConst::$defaultMaxNation,
'conlimit'=>300,
'gold_rate'=>100,
'rice_rate'=>100,
'turntime'=>$turntime,
'starttime'=>$starttime,
'turnterm'=>$turnterm,
'killturn'=>$killturn,
'genius'=>GameConst::$defaultMaxGenius,
'show_img_level'=>$show_img_level,
'npcmode'=>$npcmode,
'extended_general'=>$extend,
'fiction'=>$fiction,
'tnmt_trig'=>$tournament_trig
];
foreach(RootDB::db()->query('SELECT `no`, `name`, `picture`, `imgsvr` FROM member WHERE grade >= 5') as $admin){
$db->insert('general', [
'owner'=>$admin['no'],
'name'=>$admin['name'],
'picture'=>$admin['picture'],
'imgsvr'=>$admin['imgsvr'],
'turntime'=>$turntime,
'killturn'=>9999
]);
}
$db->insert('game', $env);
$scenarioObj->build($env);
$db->update('plock', [
'plock'=>0
], true);
LogHistory(1);
$prefix = DB::prefix();
AppConf::getList()[$prefix]->closeServer();
return [
'result'=>true
];
}
}
+9 -4
View File
@@ -64,7 +64,7 @@ class Scenario{
list(
$affinity, $name, $pictureID, $nationID, $locatedCity,
$leadership, $power, $intel, $birth, $death, $ego,
$leadership, $power, $intel, $level, $birth, $death, $ego,
$char, $text
) = $rawGeneral;
@@ -83,6 +83,7 @@ class Scenario{
$leadership,
$power,
$intel,
$level,
$birth,
$death,
$ego,
@@ -117,7 +118,7 @@ class Scenario{
$leadership,
$power,
$intel,
$level,
$level,
$birth,
$death,
$ego,
@@ -279,12 +280,14 @@ class Scenario{
private function buildDiplomacy($env){
$this->initFull();
$monthDiff = ($env['year'] * 12) + ($env['month'] - 1) - ($env['startyear'] * 12);
$db = DB::db();
foreach($this->diplomacy as $diplomacy){
list($me, $you, $state, $remain) = $diplomacy;
$db->update('diplomacy', [
'state'=>$state,
'term'=>$remain
'term'=>$remain - $monthDiff
], '(me = %i AND you = %i) OR (me = %i AND you = %i)', $me, $you, $you, $me);
}
}
@@ -312,6 +315,8 @@ class Scenario{
$nation->build($env);
}
refreshNationStaticInfo();
CityHelper::flushCache();
$remainGenerals = $this->buildGenerals($env);
@@ -321,7 +326,7 @@ class Scenario{
$actions[] = ['DeleteEvent'];
$this->events[] = [
'cond'=>['Date', '==', $targetYear, '1'],
'cond'=>['Date', '>=', $targetYear, '1'],
'action'=>$actions
];
}
+47 -10
View File
@@ -53,16 +53,37 @@ class NPC{
$this->ego = $ego;
$this->text = $text;
$char = \sammo\SpecCall($char);
if($char < 40){
$this->charDomestic = $char;
$general = [
'leader'=>$leadership,
'power'=>$power,
'intel'=>$intel
];
if($char === '랜덤전특'){
$this->charWar = \sammo\SpecialityConst::pickSpecialWar($general);
}
else if($char === '랜덤내특'){
$this->charDomestic = \sammo\SpecialityConst::pickSpecialDomestic($general);
}
else if($char === '랜덤'){
if(Util::randBool(2/3)){
$this->charWar = \sammo\SpecialityConst::pickSpecialWar($general);
}
else{
$this->charDomestic = \sammo\SpecialityConst::pickSpecialDomestic($general);
}
}
else{
$this->charWar = $char;
}
$char = \sammo\SpecCall($char);
if($char < 40){
$this->charDomestic = $char;
}
else{
$this->charWar = $char;
}
}
}
public function build($env=[]){
//scenario에 life==1인 경우 수명 제한이 없어지는 모양.
$nationID = $this->nationID;
@@ -70,6 +91,8 @@ class NPC{
$nationID = 0;
};
$isFictionMode = (Util::array_get($env['fiction'], 0)!=0);
$year = $env['year'];
$month = $env['month'];
$age = $year - $this->birth;
@@ -88,13 +111,27 @@ class NPC{
\sammo\pushWorldHistory(["<C>●</>1월:<Y>$name</>(이)가 성인이 되어 <S>등장</>했습니다."], $year, $month);
}
if($this->ego == null){
if($this->ego == null || $isFictionMode){
$ego = mt_rand(0, 9);//TODO: 나중에 성격을 따로 분리할 경우 클래스를 참조.
}
else{
$ego = \sammo\CharCall($this->ego);
}
$affinity = $this->affinity;
$charWar = $this->charWar;
$charDomestic = $this->charDomestic;
if($affinity === 0 || $isFictionMode){
$affinity = mt_rand(1, 150);
}
if($isFictionMode){
$charWar = 0;
$charDomestic = 0;
}
$name = 'ⓝ'.$this->name;
$pictureID = $this->pictureID;
@@ -137,7 +174,7 @@ class NPC{
'npcid'=>$npcID,
'npc'=>2,
'npc_org'=>2,
'affinity'=>$this->affinity,
'affinity'=>$affinity,
'name'=>$name,
'picture'=>$picture,
'nation'=>$nationID,
@@ -162,9 +199,9 @@ class NPC{
'age'=>$age,
'belong'=>1,
'personal'=>$ego,
'special'=>$this->charDomestic,
'special'=>$charDomestic,
'specage'=>$specage,
'special2'=>$this->charWar,
'special2'=>$charWar,
'specage2'=>$specage2,
'npcmsg'=>$this->text,
'makelimit'=>0,
+19 -12
View File
@@ -32,7 +32,7 @@ class ScoutMessage extends Message{
$this->validScout = false;
}
if($this->validUntil <= new DateTime()){
if($this->validUntil <= new \DateTime()){
$this->validScout = false;
}
}
@@ -55,7 +55,7 @@ class ScoutMessage extends Message{
/**
* @return int 수행 결과 반환, ACCEPTED(등용장 소모), DECLINED(등용장 소모), INVALID 반환
*/
public function agreeMessage(int $receiverID):int{
public function agreeMessage(int $receiverID, string &$reason):int{
//NOTE: 올바른 유저가 agreeMessage() 호출을 한건지는 외부에서 체크 필요(Session->userID 등)
if(!$this->id){
@@ -72,7 +72,7 @@ class ScoutMessage extends Message{
return $result;
}
$helper = new Engine\Personnel($this->src->nationID);
$helper = new Engine\Personnel($this->src->nationID, $this->src->generalID);
list($result, $reason) = $helper->scoutGeneral($receiverID);
@@ -96,6 +96,13 @@ class ScoutMessage extends Message{
['no'=>$this->src->generalID],
["<C>●</><Y>{$this->dest->generalName}</> 등용에 성공했습니다."]
);
pushGeneralHistory(
['no'=>$this->src->generalID],
"<C>●</>{$helper->year}{$helper->month}월:<Y>{$this->dest->generalName}</> 등용에 성공");
pushGeneralHistory(
['no'=>$this->dest->generalID],
"<C>●</>{$helper->year}{$helper->month}월:<D>{$this->src->nationName}</>(으)로 망명"
);
pushGeneralPublicRecord(
["<C>●</>{$helper->month}월:<Y>{$this->dest->generalName}</>(이)가 <D><b>{$this->src->nationName}</b></>(으)로 <S>망명</>하였습니다."],
$helper->year,
@@ -106,12 +113,12 @@ class ScoutMessage extends Message{
self::MSGTYPE_PRIVATE,
$this->src,
$this->dest,
"{$scoutNation['name']}(으)로 등용 제의 수락",
"{$this->src->nationName}(으)로 등용 제의 수락",
new \DateTime(),
new \DateTime('9999-12-31'),
Json::encode([
[
'delete'=>$this->id
])
]
);
$newMsg->send(true);
@@ -127,19 +134,19 @@ class ScoutMessage extends Message{
self::MSGTYPE_PRIVATE,
$this->src,
$this->dest,
"{$scoutNation['name']}(으)로 등용 제의 거부",
"{$this->src->nationName}(으)로 등용 제의 거부",
new \DateTime(),
new \DateTime('9999-12-31'),
Json::encode([
[
'delete'=>$this->id
])
]
);
$newMsg->send(true);
return self::DECLINED;
}
public function declineMessage(int $receiverID):int{
public function declineMessage(int $receiverID, string &$reason):int{
if(!$this->id){
throw \RuntimeException('전송되지 않은 메시지에 거절 진행 중');
}
@@ -167,8 +174,8 @@ class ScoutMessage extends Message{
}
$db = DB::db();
$srcGeneral = $db->queryFirstRow('SELECT `name`, nation FROM nation WHERE `no`=%i', $srcGeneralID);
$destGeneral = $db->queryFirstRow('SELECT `name`, nation, `level` FROM nation WHERE `no`=%i', $destGeneralID);
$srcGeneral = $db->queryFirstRow('SELECT `name`, nation FROM general WHERE `no`=%i', $srcGeneralID);
$destGeneral = $db->queryFirstRow('SELECT `name`, nation, `level` FROM general WHERE `no`=%i', $destGeneralID);
if($date === null){
$date = new \DateTime();
}
+93 -46
View File
@@ -26,45 +26,58 @@ class SpecialityConst{
//음수 : 절대값 %, 양수 : 상대적 비중
const DOMESTIC = [
1 => ['경작', 1, self::STAT_INTEL],
2 => ['상재', 1, self::STAT_INTEL],
3 => ['발명', 1, self::STAT_INTEL],
1 => ['경작', 1, [self::STAT_INTEL]],
2 => ['상재', 1, [self::STAT_INTEL]],
3 => ['발명', 1, [self::STAT_INTEL]],
10 => ['축성', 1, self::STAT_POWER],
11 => ['수비', 1, self::STAT_POWER],
12 => ['통찰', 1, self::STAT_POWER],
10 => ['축성', 1, [self::STAT_POWER]],
11 => ['수비', 1, [self::STAT_POWER]],
12 => ['통찰', 1, [self::STAT_POWER]],
20 => ['인덕', 1, self::STAT_LEADERSHIP],
20 => ['인덕', 1, [self::STAT_LEADERSHIP]],
30 => ['거상', -2.5, self::DISABLED],
31 => ['귀모', -2.5, self::STAT_LEADERSHIP | self::STAT_POWER | self::STAT_INTEL],
30 => ['거상', -2.5, [self::DISABLED]],
31 => ['귀모', -2.5, [self::STAT_LEADERSHIP, self::STAT_POWER, self::STAT_INTEL]],
];
const WAR = [
40 => ['귀병', 1, self::STAT_INTEL | self::ARMY_WIZARD | self::REQ_DEXTERITY],
40 => ['귀병', 1, [self::STAT_INTEL | self::ARMY_WIZARD | self::REQ_DEXTERITY]],
41 => ['신산', 1, self::STAT_INTEL | self::ARMY_WIZARD],
42 => ['환술', -5, self::STAT_INTEL | self::ARMY_WIZARD],
43 => ['집중', 1, self::STAT_INTEL | self::ARMY_WIZARD],
44 => ['신중', 1, self::STAT_INTEL | self::ARMY_WIZARD],
45 => ['반계', 1, self::STAT_INTEL | self::ARMY_WIZARD],
41 => ['신산', 1, [self::STAT_INTEL]],
42 => ['환술', -5, [self::STAT_INTEL]],
43 => ['집중', 1, [self::STAT_INTEL]],
44 => ['신중', 1, [self::STAT_INTEL]],
45 => ['반계', 1, [self::STAT_INTEL]],
50 => ['보병', 1, self::STAT_LEADERSHIP | self::STAT_POWER | self::REQ_DEXTERITY | self::ARMY_FOOTMAN],
51 => ['궁병', 1, self::STAT_LEADERSHIP | self::STAT_POWER | self::REQ_DEXTERITY | self::ARMY_ARCHER],
52 => ['기병', 1, self::STAT_LEADERSHIP | self::STAT_POWER | self::REQ_DEXTERITY | self::ARMY_CAVALRY],
53 => ['공성', 1, self::STAT_LEADERSHIP | self::STAT_POWER | self::REQ_DEXTERITY | self::ARMY_SIEGE],
50 => ['보병', 1, [
self::STAT_LEADERSHIP | self::REQ_DEXTERITY | self::ARMY_FOOTMAN,
self::STAT_POWER | self::REQ_DEXTERITY | self::ARMY_FOOTMAN
]],
51 => ['궁병', 1, [
self::STAT_LEADERSHIP | self::REQ_DEXTERITY | self::ARMY_ARCHER,
self::STAT_POWER | self::REQ_DEXTERITY | self::ARMY_ARCHER
]],
52 => ['기병', 1, [
self::STAT_LEADERSHIP | self::REQ_DEXTERITY | self::ARMY_CAVALRY,
self::STAT_POWER | self::REQ_DEXTERITY | self::ARMY_CAVALRY
]],
53 => ['공성', 1, [
self::STAT_LEADERSHIP | self::REQ_DEXTERITY | self::ARMY_SIEGE,
self::STAT_POWER | self::REQ_DEXTERITY | self::ARMY_SIEGE,
self::STAT_INTEL | self::REQ_DEXTERITY | self::ARMY_SIEGE
]],
60 => ['돌격', 1, self::STAT_LEADERSHIP | self::STAT_POWER],
61 => ['무쌍', 1, self::STAT_LEADERSHIP | self::STAT_POWER],
62 => ['견고', 1, self::STAT_LEADERSHIP | self::STAT_POWER],
63 => ['위압', 1, self::STAT_LEADERSHIP | self::STAT_POWER],
60 => ['돌격', 1, [self::STAT_LEADERSHIP, self::STAT_POWER]],
61 => ['무쌍', 1, [self::STAT_LEADERSHIP, self::STAT_POWER]],
62 => ['견고', 1, [self::STAT_LEADERSHIP, self::STAT_POWER]],
63 => ['위압', 1, [self::STAT_LEADERSHIP, self::STAT_POWER]],
70 => ['저격', 1, self::STAT_LEADERSHIP | self::STAT_POWER | self::STAT_INTEL],
71 => ['필살', 1, self::STAT_LEADERSHIP | self::STAT_POWER | self::STAT_INTEL],
72 => ['징병', 1, self::STAT_LEADERSHIP | self::STAT_POWER | self::STAT_INTEL],
73 => ['의술', -2, self::STAT_LEADERSHIP | self::STAT_POWER | self::STAT_INTEL],
74 => ['격노', 1, self::STAT_LEADERSHIP | self::STAT_POWER | self::STAT_INTEL],
75 => ['척사', 1, self::STAT_LEADERSHIP | self::STAT_POWER | self::STAT_INTEL],
70 => ['저격', 1, [self::STAT_LEADERSHIP, self::STAT_POWER, self::STAT_INTEL]],
71 => ['필살', 1, [self::STAT_LEADERSHIP, self::STAT_POWER, self::STAT_INTEL]],
72 => ['징병', 1, [self::STAT_LEADERSHIP, self::STAT_POWER, self::STAT_INTEL]],
73 => ['의술', -2, [self::STAT_LEADERSHIP, self::STAT_POWER, self::STAT_INTEL]],
74 => ['격노', 1, [self::STAT_LEADERSHIP, self::STAT_POWER, self::STAT_INTEL]],
75 => ['척사', 1, [self::STAT_LEADERSHIP, self::STAT_POWER, self::STAT_INTEL]],
];
public static function getInvDomestic(string $name){
@@ -101,15 +114,19 @@ class SpecialityConst{
private static function calcCondGeneric(array $general) : int {
$myCond = 0;
$leader = $general['leader']??50;
$power = $general['power']??50;
$intel = $general['intel']??50;
if ($leader * 0.95 > $power && $leader * 0.95 > $intel) {
$myCond |= STAT_LEADERSHIP;
$myCond |= self::STAT_LEADERSHIP;
}
else if($power >= $intel){
$myCond |= STAT_POWER;
$myCond |= self::STAT_POWER;
}
else {
$myCond |= STAT_INTEL;
$myCond |= self::STAT_INTEL;
}
return $myCond;
@@ -117,11 +134,11 @@ class SpecialityConst{
private static function calcCondDexterity(array $general) : int {
$dex = [
static::ARMY_FOOTMAN => $general['dex0'],
static::ARMY_ARCHER => $general['dex10'],
static::ARMY_CAVALRY => $general['dex20'],
static::ARMY_WIZARD => $general['dex30'],
static::ARMY_SIEGE => $general['dex40'],
static::ARMY_FOOTMAN => $general['dex0']??0,
static::ARMY_ARCHER => $general['dex10']??0,
static::ARMY_CAVALRY => $general['dex20']??0,
static::ARMY_WIZARD => $general['dex30']??0,
static::ARMY_SIEGE => $general['dex40']??0,
];
$dexSum = array_sum($dex);
@@ -135,7 +152,7 @@ class SpecialityConst{
return 0;
}
if($dexSum){
if(!$dexSum){
return array_rand($dex);
}
@@ -148,10 +165,18 @@ class SpecialityConst{
$myCond = static::calcCondGeneric($general);
foreach(self::DOMESTIC as $id=>list($name, $weight, $cond)){
if(!($cond & $myCond)){
foreach(self::DOMESTIC as $id=>list($name, $weight, $conds)){
$valid = false;
foreach($conds as $cond){
if($cond === ($cond & $myCond)){
$valid = true;
break;
}
}
if(!$valid){
continue;
}
if($weight < 0){
$pAbs[$id] = -$weight;
@@ -162,14 +187,21 @@ class SpecialityConst{
}
if($pAbs){
$pAbs[0] = max(0, 100 - array_sum($pAbs));
if($pRel){
$pAbs[0] = max(0, 100 - array_sum($pAbs));
}
$id = Util::choiceRandomUsingWeight($pAbs);
if($id){
return $id;
}
}
return Util::choiceRandomUsingWeight($pRel);
$id = Util::choiceRandomUsingWeight($pRel);
if($id){
return $id;
}
return static::pickStatickWar($general);
}
public static function pickSpecialWar(array $general) : int{
@@ -180,8 +212,15 @@ class SpecialityConst{
$myCond = static::calcCondGeneric($general);
$myCond |= static::calcCondDexterity($general);
foreach(self::WAR as $id=>list($name, $weight, $cond)){
if(!($cond & $myCond)){
foreach(self::WAR as $id=>list($name, $weight, $conds)){
$valid = false;
foreach($conds as $cond){
if($cond === ($cond & $myCond)){
$valid = true;
break;
}
}
if(!$valid){
continue;
}
@@ -201,13 +240,21 @@ class SpecialityConst{
}
if($pAbs){
$pAbs[0] = max(0, 100 - array_sum($pAbs));
if($pRel){
$pAbs[0] = max(0, 100 - array_sum($pAbs));
}
$id = Util::choiceRandomUsingWeight($pAbs);
if($id){
return $id;
}
}
return Util::choiceRandomUsingWeight($pRel);
$id = Util::choiceRandomUsingWeight($pRel);
if($id){
return $id;
}
return static::pickStatickWar($general);
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
{
"title":"【역사모드1】 황건적의 난",
"startYear":184,
"startYear":181,
"life":1,
"fiction":0,
"nation":[
+1 -1
View File
@@ -1,6 +1,6 @@
{
"title":"【역사모드10】 칠종칠금",
"startYear":225,
"startYear":222,
"life":1,
"fiction":0,
"nation":[
+1 -1
View File
@@ -1,6 +1,6 @@
{
"title":"【역사모드11】 출사표",
"startYear":228,
"startYear":225,
"life":1,
"fiction":0,
"nation":[
+1 -1
View File
@@ -1,6 +1,6 @@
{
"title":"【IF모드1】 백마장군의 위세",
"startYear":191,
"startYear":188,
"life":1,
"fiction":0,
"nation":[
+79 -1
View File
@@ -1,6 +1,6 @@
{
"title":"【역사모드2】 반동탁연합 결성",
"startYear":190,
"startYear":187,
"life":1,
"fiction":0,
"nation":[
@@ -67,6 +67,84 @@
],
"diplomacy":[
[1, 2, 1, 36],
[1, 4, 1, 36],
[1, 6, 1, 36],
[1, 7, 1, 36],
[1, 8, 1, 36],
[1, 9, 1, 36],
[1, 10, 1, 36],
[1, 11, 1, 36],
[1, 13, 1, 36],
[1, 14, 1, 36],
[1, 16, 1, 36],
[1, 17, 1, 36],
[1, 20, 1, 36],
[2, 4, 7, 48],
[2, 6, 7, 48],
[2, 8, 7, 48],
[2, 9, 7, 48],
[2, 11, 7, 48],
[2, 13, 7, 48],
[2, 14, 7, 48],
[2, 16, 7, 48],
[2, 17, 7, 48],
[2, 20, 7, 48],
[4, 6, 7, 48],
[4, 8, 7, 48],
[4, 9, 7, 48],
[4, 11, 7, 48],
[4, 13, 7, 48],
[4, 14, 7, 48],
[4, 16, 7, 48],
[4, 17, 7, 48],
[4, 20, 7, 48],
[6, 8, 7, 48],
[6, 9, 7, 48],
[6, 11, 7, 48],
[6, 13, 7, 48],
[6, 14, 7, 48],
[6, 16, 7, 48],
[6, 17, 7, 48],
[6, 20, 7, 48],
[8, 9, 7, 48],
[8, 11, 7, 48],
[8, 13, 7, 48],
[8, 14, 7, 48],
[8, 16, 7, 48],
[8, 17, 7, 48],
[8, 20, 7, 48],
[9, 11, 7, 48],
[9, 13, 7, 48],
[9, 14, 7, 48],
[9, 16, 7, 48],
[9, 17, 7, 48],
[9, 20, 7, 48],
[11, 13, 7, 48],
[11, 14, 7, 48],
[11, 16, 7, 48],
[11, 17, 7, 48],
[11, 20, 7, 48],
[13, 14, 7, 48],
[13, 16, 7, 48],
[13, 17, 7, 48],
[13, 20, 7, 48],
[14, 16, 7, 48],
[14, 17, 7, 48],
[14, 20, 7, 48],
[16, 17, 7, 48],
[16, 20, 7, 48],
[17, 20, 7, 48]
],
"general":[
[ 1, "소제1",1001, 0, null, 20, 11, 48, 0, 168, 190, "유지", null],
+2 -2
View File
@@ -102,8 +102,8 @@
],
"history":[
"<C>●</>179년 1월:<L><b>【가상모드2】</b>훼신 집결</>",
"<C>●</>179년 1월:<L><b>【이벤트】</b></>삼모전 역대 훼신들이 등장합니다."
"<C>●</>180년 1월:<L><b>【가상모드2】</b>훼신 집결</>",
"<C>●</>180년 1월:<L><b>【이벤트】</b></>삼모전 역대 훼신들이 등장합니다."
],
"initialEvents":[
+703
View File
@@ -0,0 +1,703 @@
{
"title":"【가상모드9】 천인 강림",
"life":1,
"fiction":1,
"nation":[
],
"diplomacy":[
],
"general":[
[ 1, "소제1", 1001, 0, null, 18, 7, 48, 0, 160, 300, "유지", null],
[ 1, "헌제", 1002, 0, null, 15, 7, 61, 0, 160, 300, "안전", null],
[999, "사마휘", 1003, 0, null, 47, 7, 69, 0, 160, 300, "은둔", "신산", "좋지, 좋아~"],
[999, "우길", 1004, 0, null, 15, 7, 69, 0, 160, 300, "은둔", "신산"],
[999, "화타", 1005, 0, null, 41, 11, 54, 0, 160, 300, "은둔", "의술", "아픈 사람들은 모두 내게 오시오. 껄껄껄."],
[999, "길평", 1006, 0, null, 26, 8, 67, 0, 160, 300, "은둔", "의술"],
[ 29, "가규", 1007, 0, null, 41, 21, 56, 0, 160, 300, "재간", null],
[136, "가범", 1008, 0, null, 42, 19, 55, 0, 160, 300, "유지", null],
[ 49, "가비능", 1009, 0, null, 42, 61, 14, 0, 160, 300, "정복", null],
[ 31, "가충", 1010, 0, null, 40, 11, 64, 0, 160, 300, "출세", null],
[ 20, "가후", 1011, 0, null, 46, 13, 68, 0, 160, 300, "할거", "귀병"],
[ 73, "간옹", 1012, 0, null, 30, 14, 67, 0, 160, 300, "안전", "경작"],
[129, "감녕", 1013, 0, null, 49, 69, 27, 0, 160, 300, "출세", "무쌍"],
[127, "감택", 1014, 0, null, 44, 18, 59, 0, 160, 300, "유지", null],
[ 60, "강단", 1015, 0, null, 37, 67, 17, 0, 160, 300, "재간", null],
[ 73, "강유", 1016, 0, null, 55, 33, 68, 0, 160, 300, "왕좌", "집중", "갈고 닦은 무예와 승상께 배운 책략을 발휘해 보이겠다!"],
[102, "고간", 1017, 0, null, 43, 46, 20, 0, 160, 300, "유지", null],
[ 27, "고람", 1018, 0, null, 47, 52, 23, 0, 160, 300, "출세", "기병"],
[ 69, "고상", 1019, 0, null, 37, 40, 16, 0, 160, 300, "재간", null],
[144, "고순", 1020, 0, null, 49, 61, 25, 0, 160, 300, "의협", "기병"],
[ 7, "고승", 1021, 0, null, 37, 67, 11, 0, 160, 300, "출세", null],
[120, "고옹", 1022, 0, null, 42, 10, 59, 0, 160, 300, "출세", null],
[ 63, "고정", 1023, 0, null, 45, 51, 21, 0, 160, 300, "정복", null],
[ 53, "고패", 1024, 0, null, 41, 45, 12, 0, 160, 300, "유지", null],
[ 74, "공도", 1025, 0, null, 25, 67, 9, 0, 160, 300, "재간", null],
[142, "공손강", 1026, 0, null, 44, 55, 23, 0, 160, 300, "정복", null],
[142, "공손공", 1027, 0, null, 46, 17, 57, 0, 160, 300, "정복", null],
[142, "공손도", 1028, 0, null, 44, 55, 17, 0, 160, 300, "정복", "기병"],
[ 65, "공손범", 1029, 0, null, 43, 52, 23, 0, 160, 300, "출세", null],
[ 65, "공손속", 1030, 0, null, 43, 57, 17, 0, 160, 300, "정복", null],
[ 10, "공손연", 1031, 0, null, 48, 59, 24, 0, 160, 300, "패권", "돌격"],
[ 65, "공손월", 1032, 0, null, 39, 63, 18, 0, 160, 300, "정복", null],
[ 65, "공손찬", 1033, 0, null, 43, 64, 25, 0, 160, 300, "패권", "기병"],
[ 43, "공융", 1034, 0, null, 44, 19, 63, 0, 160, 300, "왕좌", "경작"],
[ 35, "공주", 1035, 0, null, 44, 15, 58, 0, 160, 300, "재간", null],
[ 83, "공지", 1036, 0, null, 42, 21, 50, 0, 160, 300, "대의", null],
[ 26, "곽가", 1037, 0, null, 39, 11, 70, 0, 160, 300, "패권", "귀모"],
[111, "곽도", 1038, 0, null, 44, 25, 60, 0, 160, 300, "재간", null],
[ 2, "곽사", 1039, 0, null, 42, 52, 13, 0, 160, 300, "패권", null],
[ 80, "곽유지", 1040, 0, null, 35, 10, 67, 0, 160, 300, "재간", "상재"],
[ 67, "곽익", 1041, 0, null, 45, 23, 52, 0, 160, 300, "재간", null],
[ 67, "곽준", 1042, 0, null, 48, 26, 55, 0, 160, 300, "출세", null],
[ 27, "곽혁", 1043, 0, null, 36, 13, 68, 0, 160, 300, "안전", null],
[ 20, "곽회", 1044, 0, null, 49, 57, 27, 0, 160, 300, "정복", null],
[ 39, "관구검", 1045, 0, null, 47, 26, 58, 0, 160, 300, "대의", null],
[ 76, "관색", 1046, 0, null, 46, 63, 25, 0, 160, 300, "의협", "징병"],
[ 76, "관우", 1047, 0, null, 55, 70, 30, 0, 160, 300, "의협", "위압", "나의 청룡 언월도를 과연 막아낼 수 있겠소?"],
[ 76, "관이", 1048, 0, null, 39, 60, 22, 0, 160, 300, "안전", null],
[ 76, "관통", 1049, 0, null, 39, 63, 23, 0, 160, 300, "대의", null],
[ 76, "관평", 1050, 0, null, 49, 60, 26, 0, 160, 300, "의협", "보병"],
[ 7, "관해", 1051, 0, null, 45, 66, 15, 0, 160, 300, "출세", null],
[ 76, "관흥", 1052, 0, null, 46, 62, 27, 0, 160, 300, "의협", "돌격"],
[ 40, "괴량", 1053, 0, null, 37, 12, 69, 0, 160, 300, "안전", "신중"],
[ 40, "괴월", 1054, 0, null, 25, 13, 69, 0, 160, 300, "유지", "귀병"],
[ 98, "교모", 1055, 0, null, 43, 22, 48, 0, 160, 300, "안전", null],
[ 98, "교현", 1056, 0, null, 40, 9, 48, 0, 160, 300, "재간", null],
[ 6, "구역거", 1057, 0, null, 40, 55, 19, 0, 160, 300, "안전", null],
[ 80, "극정", 1058, 0, null, 36, 11, 68, 0, 160, 300, "유지", null],
[ 46, "금선", 1059, 0, null, 41, 41, 15, 0, 160, 300, "할거", null],
[ 62, "금환삼결", 1060, 0, null, 38, 68, 9, 0, 160, 300, "출세", null],
[141, "기령", 1061, 0, null, 48, 60, 14, 0, 160, 300, "대의", "무쌍"],
[122, "낙통", 1062, 0, null, 42, 18, 53, 0, 160, 300, "유지", null],
[124, "노숙1", 1063, 0, null, 53, 17, 68, 0, 160, 300, "왕좌", "상재"],
[ 75, "노식", 1064, 0, null, 53, 21, 60, 0, 160, 300, "왕좌", "징병"],
[ 59, "뇌동", 1065, 0, null, 46, 58, 18, 0, 160, 300, "출세", "궁병"],
[142, "뇌박", 1066, 0, null, 41, 44, 14, 0, 160, 300, "유지", null],
[127, "능조", 1067, 0, null, 45, 60, 18, 0, 160, 300, "재간", "공성"],
[127, "능통", 1068, 0, null, 47, 58, 22, 0, 160, 300, "의협", "궁병"],
[ 64, "단경", 1069, 0, null, 46, 23, 52, 0, 160, 300, "정복", null],
[132, "담웅", 1070, 0, null, 40, 58, 9, 0, 160, 300, "출세", null],
[ 99, "답둔", 1071, 0, null, 43, 54, 13, 0, 160, 300, "유지", null],
[132, "당자", 1072, 0, null, 43, 45, 18, 0, 160, 300, "안전", null],
[ 60, "대래동주", 1073, 0, null, 36, 65, 11, 0, 160, 300, "안전", null],
[ 82, "도겸", 1074, 0, null, 40, 14, 48, 0, 160, 300, "할거", "인덕"],
[120, "도준", 1075, 0, null, 44, 46, 20, 0, 160, 300, "안전", null],
[ 73, "동궐", 1076, 0, null, 45, 20, 57, 0, 160, 300, "대의", null],
[ 62, "동다나", 1077, 0, null, 40, 54, 12, 0, 160, 300, "유지", null],
[ 2, "동민", 1078, 0, null, 40, 51, 19, 0, 160, 300, "안전", null],
[ 21, "동소", 1079, 0, null, 38, 18, 62, 0, 160, 300, "패권", null],
[127, "동습", 1080, 0, null, 41, 50, 14, 0, 160, 300, "출세", null],
[ 89, "동승", 1081, 0, null, 48, 51, 25, 0, 160, 300, "왕좌", null],
[ 78, "동윤", 1082, 0, null, 44, 12, 58, 0, 160, 300, "왕좌", null],
[ 2, "동탁", 1083, 0, null, 52, 66, 21, 0, 160, 300, "패권", "기병"],
[ 66, "동화", 1084, 0, null, 39, 64, 21, 0, 160, 300, "대의", null],
[ 32, "두예", 1085, 0, null, 52, 30, 62, 0, 160, 300, "정복", null],
[ 7, "등무", 1086, 0, null, 37, 68, 9, 0, 160, 300, "정복", null],
[ 41, "등애", 1087, 0, null, 54, 30, 67, 0, 160, 300, "패권", "신산"],
[116, "등윤", 1088, 0, null, 34, 17, 66, 0, 160, 300, "안전", null],
[ 73, "등지", 1089, 0, null, 48, 20, 60, 0, 160, 300, "할거", "경작"],
[ 41, "등충", 1090, 0, null, 43, 61, 21, 0, 160, 300, "출세", null],
[ 54, "등현", 1091, 0, null, 45, 23, 48, 0, 160, 300, "출세", null],
[ 29, "마균", 1092, 0, null, 33, 16, 68, 0, 160, 300, "안전", null],
[ 71, "마대", 1093, 0, null, 49, 59, 19, 0, 160, 300, "대의", "기병"],
[ 70, "마등", 1094, 0, null, 50, 64, 22, 0, 160, 300, "왕좌", "기병"],
[ 80, "마속", 1095, 0, null, 47, 24, 61, 0, 160, 300, "패권", "집중"],
[ 77, "마량", 1096, 0, null, 42, 11, 64, 0, 160, 300, "왕좌", null],
[ 48, "마완", 1097, 0, null, 39, 64, 12, 0, 160, 300, "안전", "기병"],
[ 19, "마준", 1098, 0, null, 38, 63, 24, 0, 160, 300, "안전", null],
[ 71, "마철", 1099, 0, null, 47, 48, 13, 0, 160, 300, "대의", "기병"],
[ 70, "마초", 1100, 0, null, 49, 70, 16, 0, 160, 300, "대의", "기병", "금마초 나가신닷!"],
[131, "마충1", 1101, 0, null, 45, 49, 20, 0, 160, 300, "재간", null],
[ 69, "마충2", 1102, 0, null, 43, 52, 20, 0, 160, 300, "출세", null],
[ 71, "마휴", 1103, 0, null, 47, 48, 14, 0, 160, 300, "대의", "기병"],
[116, "만총", 1104, 0, null, 49, 16, 58, 0, 160, 300, "할거", "신중"],
[ 51, "망아장", 1105, 0, null, 28, 64, 10, 0, 160, 300, "출세", null],
[ 44, "맹달", 1106, 0, null, 46, 25, 55, 0, 160, 300, "할거", "귀병"],
[ 60, "맹우", 1107, 0, null, 44, 59, 12, 0, 160, 300, "정복", null],
[ 60, "맹획", 1108, 0, null, 49, 67, 20, 0, 160, 300, "왕좌", "격노"],
[ 29, "모개", 1109, 0, null, 38, 56, 22, 0, 160, 300, "대의", null],
[ 51, "목록대왕", 1110, 0, null, 42, 54, 25, 0, 160, 300, "재간", "척사"],
[ 96, "목순", 1111, 0, null, 15, 10, 66, 0, 160, 300, "왕좌", null],
[ 43, "무안국", 1112, 0, null, 40, 55, 9, 0, 160, 300, "재간", null],
[ 28, "문빙", 1113, 0, null, 46, 58, 17, 0, 160, 300, "유지", null],
[ 38, "문앙", 1114, 0, null, 47, 66, 18, 0, 160, 300, "대의", null],
[102, "문추", 1115, 0, null, 47, 68, 11, 0, 160, 300, "출세", "무쌍"],
[ 38, "문흠", 1116, 0, null, 48, 58, 17, 0, 160, 300, "대의", null],
[ 49, "미당대왕", 1117, 0, null, 44, 57, 14, 0, 160, 300, "유지", null],
[108, "미방", 1118, 0, null, 42, 51, 15, 0, 160, 300, "패권", "징병"],
[ 77, "미축", 1119, 0, null, 25, 13, 65, 0, 160, 300, "왕좌", "상재"],
[ 94, "반봉", 1120, 0, null, 43, 57, 9, 0, 160, 300, "출세", null],
[ 44, "반준", 1121, 0, null, 37, 10, 66, 0, 160, 300, "안전", null],
[ 65, "방덕", 1122, 0, null, 48, 66, 25, 0, 160, 300, "의협", "기병"],
[ 73, "방통", 1123, 0, null, 52, 17, 70, 0, 160, 300, "패권", "반계"],
[ 65, "방회", 1124, 0, null, 24, 14, 59, 0, 160, 300, "안전", null],
[ 68, "배원소", 1125, 0, null, 38, 67, 14, 0, 160, 300, "재간", null],
[ 78, "번건", 1126, 0, null, 27, 13, 66, 0, 160, 300, "대의", null],
[149, "번주", 1127, 0, null, 45, 58, 10, 0, 160, 300, "할거", null],
[ 72, "법정", 1128, 0, null, 50, 13, 67, 0, 160, 300, "패권", "신산"],
[ 8, "변희", 1129, 0, null, 45, 51, 12, 0, 160, 300, "안전", null],
[121, "보질", 1130, 0, null, 42, 12, 58, 0, 160, 300, "유지", null],
[113, "복양흥", 1131, 0, null, 42, 20, 54, 0, 160, 300, "유지", null],
[110, "봉기", 1132, 0, null, 46, 20, 60, 0, 160, 300, "패권", "집중"],
[ 74, "부동", 1133, 0, null, 42, 26, 26, 0, 160, 300, "대의", null],
[108, "부사인", 1134, 0, null, 41, 47, 20, 0, 160, 300, "출세", null],
[ 38, "부손", 1135, 0, null, 23, 17, 66, 0, 160, 300, "안전", null],
[ 74, "부첨", 1136, 0, null, 43, 56, 18, 0, 160, 300, "대의", null],
[ 66, "비시", 1137, 0, null, 16, 15, 61, 0, 160, 300, "재간", null],
[141, "비연", 1138, 0, null, 45, 51, 21, 0, 160, 300, "출세", null],
[ 77, "비위", 1139, 0, null, 47, 12, 55, 0, 160, 300, "대의", null],
[144, "사광", 1140, 0, null, 42, 19, 51, 0, 160, 300, "안전", null],
[ 71, "사마가", 1141, 0, null, 43, 63, 9, 0, 160, 300, "정복", "돌격"],
[ 20, "사마랑", 1142, 0, null, 24, 14, 63, 0, 160, 300, "대의", null],
[ 24, "사마망", 1143, 0, null, 47, 23, 51, 0, 160, 300, "정복", null],
[ 24, "사마부", 1144, 0, null, 41, 13, 55, 0, 160, 300, "대의", null],
[ 31, "사마사", 1145, 0, null, 52, 24, 66, 0, 160, 300, "정복", null],
[ 31, "사마소", 1146, 0, null, 54, 24, 62, 0, 160, 300, "정복", null],
[ 31, "사마염", 1147, 0, null, 54, 58, 27, 0, 160, 300, "패권", null],
[ 30, "사마유", 1148, 0, null, 44, 18, 59, 0, 160, 300, "왕좌", null],
[ 31, "사마의", 1149, 0, null, 56, 25, 70, 0, 160, 300, "패권", "반계"],
[139, "사섭", 1150, 0, null, 44, 23, 54, 0, 160, 300, "안전", null],
[139, "사일", 1151, 0, null, 43, 18, 52, 0, 160, 300, "유지", null],
[132, "사정", 1152, 0, null, 45, 54, 10, 0, 160, 300, "안전", null],
[146, "사지", 1153, 0, null, 43, 19, 54, 0, 160, 300, "안전", null],
[144, "사휘", 1154, 0, null, 45, 54, 23, 0, 160, 300, "유지", null],
[ 35, "서막", 1155, 0, null, 42, 17, 55, 0, 160, 300, "유지", null],
[ 76, "서서", 1156, 0, null, 53, 26, 69, 0, 160, 300, "의협", "귀병"],
[124, "서성", 1157, 0, null, 51, 28, 61, 0, 160, 300, "대의", null],
[142, "서영", 1158, 0, null, 39, 63, 14, 0, 160, 300, "안전", null],
[ 23, "서질", 1159, 0, null, 41, 55, 14, 0, 160, 300, "재간", null],
[ 23, "서황", 1160, 0, null, 49, 65, 26, 0, 160, 300, "의협", "필살"],
[ 32, "석포", 1161, 0, null, 47, 49, 23, 0, 160, 300, "정복", null],
[131, "설영", 1162, 0, null, 38, 11, 64, 0, 160, 300, "유지", null],
[128, "설종", 1163, 0, null, 26, 14, 66, 0, 160, 300, "유지", null],
[ 69, "성의", 1164, 0, null, 38, 64, 10, 0, 160, 300, "재간", null],
[129, "소비", 1165, 0, null, 45, 49, 19, 0, 160, 300, "대의", null],
[ 76, "손건", 1166, 0, null, 37, 14, 67, 0, 160, 300, "대의", "거상"],
[125, "손견", 1167, 0, null, 55, 69, 28, 0, 160, 300, "왕좌", "무쌍"],
[126, "손광", 1168, 0, null, 44, 21, 46, 0, 160, 300, "유지", null],
[125, "손권", 1169, 0, null, 53, 29, 61, 0, 160, 300, "할거", "수비"],
[126, "손랑", 1170, 0, null, 26, 54, 12, 0, 160, 300, "안전", null],
[126, "손등", 1171, 0, null, 40, 16, 58, 0, 160, 300, "할거", null],
[125, "손량", 1172, 0, null, 23, 11, 68, 0, 160, 300, "할거", null],
[ 20, "손례", 1173, 0, null, 44, 24, 53, 0, 160, 300, "안전", null],
[124, "손소", 1174, 0, null, 48, 60, 26, 0, 160, 300, "정복", null],
[130, "손수", 1175, 0, null, 45, 22, 47, 0, 160, 300, "안전", null],
[126, "손유", 1176, 0, null, 49, 23, 52, 0, 160, 300, "정복", null],
[122, "손이", 1177, 0, null, 42, 49, 22, 0, 160, 300, "안전", null],
[126, "손정", 1178, 0, null, 43, 22, 49, 0, 160, 300, "유지", null],
[115, "손준", 1179, 0, null, 43, 53, 20, 0, 160, 300, "정복", null],
[ 7, "손중", 1180, 0, null, 41, 49, 11, 0, 160, 300, "안전", null],
[125, "손책", 1181, 0, null, 55, 69, 29, 0, 160, 300, "패권", "필살", "소패왕 손책이 나가신다! 길을 비켜라!"],
[115, "손침", 1182, 0, null, 39, 67, 16, 0, 160, 300, "패권", null],
[114, "손호", 1183, 0, null, 18, 68, 25, 0, 160, 300, "패권", null],
[126, "손화", 1184, 0, null, 35, 11, 67, 0, 160, 300, "왕좌", null],
[127, "손환", 1185, 0, null, 49, 25, 54, 0, 160, 300, "정복", null],
[126, "손휴", 1186, 0, null, 44, 17, 50, 0, 160, 300, "정복", null],
[117, "손흠", 1187, 0, null, 45, 49, 14, 0, 160, 300, "정복", null],
[147, "송헌", 1188, 0, null, 37, 63, 17, 0, 160, 300, "안전", null],
[ 95, "순우경", 1189, 0, null, 47, 52, 23, 0, 160, 300, "할거", null],
[ 22, "순욱1", 1190, 0, null, 41, 13, 70, 0, 160, 300, "왕좌", "집중"],
[ 22, "순유", 1191, 0, null, 47, 17, 66, 0, 160, 300, "대의", "신중"],
[ 29, "신비", 1192, 0, null, 39, 12, 68, 0, 160, 300, "재간", null],
[ 37, "신의", 1193, 0, null, 41, 48, 20, 0, 160, 300, "출세", null],
[ 37, "신탐", 1194, 0, null, 42, 46, 22, 0, 160, 300, "출세", null],
[ 85, "신평", 1195, 0, null, 46, 20, 57, 0, 160, 300, "왕좌", null],
[102, "심배", 1196, 0, null, 48, 25, 52, 0, 160, 300, "패권", "귀병"],
[126, "심영", 1197, 0, null, 41, 55, 20, 0, 160, 300, "재간", null],
[ 47, "아하소과", 1198, 0, null, 41, 57, 8, 0, 160, 300, "안전", "척사"],
[ 62, "아회남", 1199, 0, null, 40, 56, 13, 0, 160, 300, "출세", "척사"],
[ 23, "악진", 1200, 0, null, 47, 52, 22, 0, 160, 300, "대의", "돌격"],
[ 23, "악침", 1201, 0, null, 38, 52, 14, 0, 160, 300, "대의", null],
[ 63, "악환", 1202, 0, null, 41, 61, 21, 0, 160, 300, "재간", null],
[102, "안량", 1203, 0, null, 47, 67, 15, 0, 160, 300, "출세", "위압"],
[ 14, "양백", 1204, 0, null, 41, 44, 21, 0, 160, 300, "안전", null],
[ 92, "양봉1", 1205, 0, null, 42, 50, 15, 0, 160, 300, "유지", null],
[ 91, "양봉2", 1206, 0, null, 44, 58, 23, 0, 160, 300, "정복", null],
[ 13, "양송", 1207, 0, null, 13, 35, 14, 0, 160, 300, "안전", null],
[ 43, "양수", 1208, 0, null, 16, 13, 70, 0, 160, 300, "재간", "귀병"],
[ 61, "양의", 1209, 0, null, 45, 22, 54, 0, 160, 300, "유지", null],
[141, "양조1", 1210, 0, null, 46, 21, 48, 0, 160, 300, "출세", null],
[ 9, "양추1", 1211, 0, null, 40, 52, 8, 0, 160, 300, "정복", null],
[ 31, "양호", 1212, 0, null, 53, 26, 60, 0, 160, 300, "패권", null],
[ 53, "양회", 1213, 0, null, 43, 52, 16, 0, 160, 300, "출세", null],
[141, "양흥", 1214, 0, null, 40, 52, 9, 0, 160, 300, "안전", null],
[ 6, "어부라", 1215, 0, null, 49, 60, 23, 0, 160, 300, "정복", null],
[ 64, "엄강", 1216, 0, null, 42, 51, 18, 0, 160, 300, "재간", null],
[ 10, "엄백호", 1217, 0, null, 39, 66, 13, 0, 160, 300, "할거", null],
[ 10, "엄여", 1218, 0, null, 35, 66, 11, 0, 160, 300, "할거", null],
[ 69, "엄안", 1219, 0, null, 47, 62, 25, 0, 160, 300, "왕좌", null],
[ 7, "엄정", 1220, 0, null, 30, 66, 19, 0, 160, 300, "출세", null],
[121, "엄준", 1221, 0, null, 38, 11, 67, 0, 160, 300, "재간", null],
[ 71, "여개", 1222, 0, null, 40, 17, 52, 0, 160, 300, "유지", null],
[ 29, "여건", 1223, 0, null, 38, 66, 13, 0, 160, 300, "출세", null],
[107, "여광", 1224, 0, null, 43, 52, 12, 0, 160, 300, "유지", null],
[124, "여몽", 1225, 0, null, 54, 29, 67, 0, 160, 300, "패권", "궁병"],
[123, "여범", 1226, 0, null, 37, 14, 67, 0, 160, 300, "할거", null],
[107, "여상", 1227, 0, null, 44, 52, 12, 0, 160, 300, "유지", null],
[105, "여위황", 1228, 0, null, 37, 62, 16, 0, 160, 300, "정복", null],
[145, "여포", 1229, 0, null, 48, 72, 13, 0, 160, 300, "패권", "돌격", "다 죽여버리겠다! 으하하."],
[ 50, "염우", 1230, 0, null, 42, 42, 9, 0, 160, 300, "출세", null],
[ 40, "염유", 1231, 0, null, 43, 57, 20, 0, 160, 300, "출세", null],
[ 18, "염포", 1232, 0, null, 33, 15, 68, 0, 160, 300, "유지", null],
[ 40, "예형", 1233, 0, null, 49, 13, 69, 0, 160, 300, "은둔", "통찰"],
[133, "오강", 1234, 0, null, 39, 15, 61, 0, 160, 300, "안전", null],
[ 59, "오란", 1235, 0, null, 45, 57, 17, 0, 160, 300, "재간", null],
[ 72, "오반", 1236, 0, null, 46, 51, 18, 0, 160, 300, "재간", null],
[128, "오언", 1237, 0, null, 47, 48, 20, 0, 160, 300, "재간", null],
[126, "오연", 1238, 0, null, 35, 67, 13, 0, 160, 300, "정복", null],
[ 69, "오의", 1239, 0, null, 48, 27, 56, 0, 160, 300, "유지", null],
[ 19, "오질", 1240, 0, null, 37, 15, 67, 0, 160, 300, "출세", null],
[ 51, "올돌골", 1241, 0, null, 49, 67, 8, 0, 160, 300, "출세", "척사"],
[ 52, "옹개", 1242, 0, null, 42, 52, 20, 0, 160, 300, "안전", null],
[ 20, "왕경", 1243, 0, null, 41, 19, 51, 0, 160, 300, "재간", null],
[ 97, "왕광", 1244, 0, null, 47, 52, 21, 0, 160, 300, "유지", null],
[ 30, "왕기1", 1245, 0, null, 48, 24, 54, 0, 160, 300, "유지", null],
[ 34, "왕랑", 1246, 0, null, 39, 13, 51, 0, 160, 300, "할거", null],
[ 57, "왕루", 1247, 0, null, 36, 12, 68, 0, 160, 300, "유지", null],
[ 76, "왕보", 1248, 0, null, 39, 14, 68, 0, 160, 300, "대의", null],
[ 86, "왕수", 1249, 0, null, 34, 14, 66, 0, 160, 300, "재간", null],
[ 26, "왕쌍", 1250, 0, null, 42, 65, 8, 0, 160, 300, "정복", "보병"],
[ 46, "왕위", 1251, 0, null, 43, 23, 52, 0, 160, 300, "안전", null],
[ 92, "왕윤", 1252, 0, null, 14, 9, 68, 0, 160, 300, "왕좌", null],
[ 40, "왕융", 1253, 0, null, 44, 17, 58, 0, 160, 300, "재간", null],
[ 32, "왕준", 1254, 0, null, 50, 61, 28, 0, 160, 300, "대의", null],
[ 30, "왕찬", 1255, 0, null, 27, 12, 68, 0, 160, 300, "안전", null],
[ 33, "왕창", 1256, 0, null, 48, 46, 20, 0, 160, 300, "정복", null],
[ 69, "왕평", 1257, 0, null, 49, 57, 27, 0, 160, 300, "재간", null],
[ 71, "왕항", 1258, 0, null, 40, 17, 48, 0, 160, 300, "대의", null],
[ 33, "왕혼", 1259, 0, null, 46, 14, 47, 0, 160, 300, "정복", null],
[ 71, "요립", 1260, 0, null, 45, 17, 62, 0, 160, 300, "출세", null],
[ 74, "요화", 1261, 0, null, 45, 22, 48, 0, 160, 300, "의협", null],
[ 22, "우금1", 1262, 0, null, 50, 56, 27, 0, 160, 300, "정복", null],
[ 27, "우금2", 1263, 0, null, 44, 58, 15, 0, 160, 300, "대의", null],
[122, "우번", 1264, 0, null, 22, 17, 67, 0, 160, 300, "유지", null],
[126, "우전", 1265, 0, null, 44, 45, 17, 0, 160, 300, "안전", null],
[ 86, "원담", 1266, 0, null, 45, 47, 21, 0, 160, 300, "왕좌", null],
[101, "원상", 1267, 0, null, 41, 55, 26, 0, 160, 300, "패권", null],
[101, "원소", 1268, 0, null, 51, 25, 57, 0, 160, 300, "패권", "위압"],
[140, "원술", 1269, 0, null, 49, 23, 54, 0, 160, 300, "패권", "축성"],
[140, "원윤", 1270, 0, null, 37, 14, 60, 0, 160, 300, "패권", null],
[101, "원희", 1271, 0, null, 46, 22, 55, 0, 160, 300, "할거", null],
[131, "위소", 1272, 0, null, 36, 11, 69, 0, 160, 300, "재간", null],
[147, "위속", 1273, 0, null, 42, 47, 17, 0, 160, 300, "안전", null],
[ 81, "위연", 1274, 0, null, 49, 68, 24, 0, 160, 300, "패권", "보병"],
[ 96, "위유", 1275, 0, null, 41, 26, 54, 0, 160, 300, "재간", null],
[ 76, "유기", 1276, 0, null, 42, 9, 55, 0, 160, 300, "왕좌", null],
[ 36, "유대", 1277, 0, null, 43, 22, 49, 0, 160, 300, "재간", null],
[134, "유도", 1278, 0, null, 35, 14, 66, 0, 160, 300, "재간", null],
[ 46, "유벽", 1279, 0, null, 44, 54, 11, 0, 160, 300, "출세", null],
[ 75, "유봉", 1280, 0, null, 43, 51, 24, 0, 160, 300, "출세", null],
[ 75, "유비", 1281, 0, null, 51, 57, 26, 0, 160, 300, "왕좌", "인덕"],
[ 75, "유선1", 1282, 0, null, 23, 17, 24, 0, 160, 300, "대의", null],
[ 55, "유순", 1283, 0, null, 45, 48, 21, 0, 160, 300, "출세", null],
[ 75, "유심", 1284, 0, null, 44, 18, 54, 0, 160, 300, "왕좌", null],
[129, "유약", 1285, 0, null, 45, 49, 23, 0, 160, 300, "유지", null],
[ 55, "유언", 1286, 0, null, 43, 16, 56, 0, 160, 300, "할거", null],
[ 27, "유엽", 1287, 0, null, 36, 13, 68, 0, 160, 300, "유지", null],
[ 11, "유요", 1288, 0, null, 22, 10, 48, 0, 160, 300, "안전", "발명"],
[ 96, "유우", 1289, 0, null, 46, 14, 55, 0, 160, 300, "왕좌", null],
[ 55, "유장", 1290, 0, null, 36, 13, 63, 0, 160, 300, "할거", "수비"],
[ 45, "유종", 1291, 0, null, 20, 12, 61, 0, 160, 300, "할거", null],
[ 56, "유파", 1292, 0, null, 39, 14, 67, 0, 160, 300, "대의", null],
[ 45, "유표1", 1293, 0, null, 47, 22, 54, 0, 160, 300, "할거", null],
[ 27, "유표2", 1294, 0, null, 48, 21, 54, 0, 160, 300, "안전", null],
[134, "유현", 1295, 0, null, 31, 56, 21, 0, 160, 300, "안전", null],
[122, "육개", 1296, 0, null, 45, 13, 55, 0, 160, 300, "재간", null],
[122, "육손", 1297, 0, null, 56, 26, 70, 0, 160, 300, "왕좌", "귀병"],
[121, "육적", 1298, 0, null, 38, 13, 67, 0, 160, 300, "안전", null],
[122, "육항", 1299, 0, null, 55, 26, 68, 0, 160, 300, "왕좌", null],
[ 38, "윤대목", 1300, 0, null, 44, 19, 53, 0, 160, 300, "재간", null],
[ 80, "윤묵", 1301, 0, null, 17, 12, 67, 0, 160, 300, "대의", null],
[ 72, "윤상", 1302, 0, null, 29, 14, 42, 0, 160, 300, "대의", null],
[136, "윤직", 1303, 0, null, 38, 58, 49, 0, 160, 300, "재간", null],
[ 2, "이각", 1304, 0, null, 42, 58, 17, 0, 160, 300, "패권", null],
[146, "이숙", 1305, 0, null, 26, 18, 66, 0, 160, 300, "재간", null],
[ 71, "이엄", 1306, 0, null, 50, 62, 30, 0, 160, 300, "패권", null],
[ 2, "이유", 1307, 0, null, 44, 10, 66, 0, 160, 300, "패권", "귀모"],
[132, "이이", 1308, 0, null, 41, 57, 10, 0, 160, 300, "정복", null],
[ 77, "이적", 1309, 0, null, 41, 12, 58, 0, 160, 300, "할거", null],
[ 22, "이전", 1310, 0, null, 48, 26, 61, 0, 160, 300, "왕좌", null],
[ 71, "이풍1", 1311, 0, null, 43, 22, 49, 0, 160, 300, "재간", null],
[ 66, "이회", 1312, 0, null, 45, 20, 59, 0, 160, 300, "유지", null],
[114, "잠혼", 1313, 0, null, 13, 8, 44, 0, 160, 300, "할거", null],
[ 7, "장각", 1314, 0, null, 54, 11, 67, 0, 160, 300, "패권", "환술"],
[ 34, "장간", 1315, 0, null, 17, 10, 67, 0, 160, 300, "재간", null],
[ 7, "장개", 1316, 0, null, 39, 67, 9, 0, 160, 300, "안전", null],
[122, "장굉", 1317, 0, null, 24, 10, 69, 0, 160, 300, "왕좌", null],
[ 7, "장량", 1318, 0, null, 46, 60, 26, 0, 160, 300, "정복", "환술"],
[ 15, "장로", 1319, 0, null, 48, 18, 60, 0, 160, 300, "유지", "축성"],
[ 23, "장료", 1320, 0, null, 53, 67, 31, 0, 160, 300, "의협", "견고"],
[ 7, "장보", 1321, 0, null, 49, 60, 28, 0, 160, 300, "패권", "환술"],
[ 76, "장비", 1322, 0, null, 49, 71, 19, 0, 160, 300, "의협", "무쌍", "어쭈. 해보자 이거냐?"],
[ 62, "장서", 1323, 0, null, 38, 48, 15, 0, 160, 300, "출세", null],
[120, "장소1", 1324, 0, null, 37, 11, 70, 0, 160, 300, "안전", null],
[ 78, "장소2", 1325, 0, null, 40, 18, 54, 0, 160, 300, "재간", null],
[ 72, "장송", 1326, 0, null, 39, 12, 70, 0, 160, 300, "할거", "통찰"],
[148, "장수", 1327, 0, null, 47, 55, 26, 0, 160, 300, "할거", null],
[145, "장양1", 1328, 0, null, 44, 51, 25, 0, 160, 300, "출세", null],
[ 8, "장연", 1329, 0, null, 49, 51, 19, 0, 160, 300, "안전", null],
[ 11, "장영", 1330, 0, null, 41, 51, 16, 0, 160, 300, "재간", null],
[118, "장온", 1331, 0, null, 19, 13, 67, 0, 160, 300, "할거", null],
[ 78, "장완", 1332, 0, null, 46, 21, 63, 0, 160, 300, "할거", "상재"],
[ 15, "장위", 1333, 0, null, 45, 54, 13, 0, 160, 300, "대의", null],
[ 36, "장윤", 1334, 0, null, 45, 23, 48, 0, 160, 300, "정복", null],
[104, "장의거", 1335, 0, null, 46, 47, 14, 0, 160, 300, "대의", null],
[ 68, "장익", 1336, 0, null, 48, 52, 24, 0, 160, 300, "유지", null],
[ 56, "장임", 1337, 0, null, 51, 61, 28, 0, 160, 300, "대의", "견고"],
[148, "장제1", 1338, 0, null, 46, 51, 23, 0, 160, 300, "할거", null],
[ 32, "장제2", 1339, 0, null, 29, 14, 69, 0, 160, 300, "유지", null],
[126, "장제3", 1340, 0, null, 48, 19, 48, 0, 160, 300, "할거", null],
[ 17, "장패", 1341, 0, null, 38, 68, 17, 0, 160, 300, "할거", null],
[ 76, "장포1", 1342, 0, null, 46, 63, 19, 0, 160, 300, "재간", "징병"],
[113, "장포2", 1343, 0, null, 44, 51, 20, 0, 160, 300, "유지", null],
[ 27, "장합", 1344, 0, null, 51, 66, 24, 0, 160, 300, "출세", "궁병"],
[ 23, "장호", 1345, 0, null, 42, 49, 21, 0, 160, 300, "정복", null],
[ 31, "장화", 1346, 0, null, 39, 11, 69, 0, 160, 300, "유지", null],
[ 48, "장횡", 1347, 0, null, 41, 52, 11, 0, 160, 300, "재간", null],
[141, "장훈", 1348, 0, null, 45, 48, 23, 0, 160, 300, "안전", null],
[120, "장휴", 1349, 0, null, 37, 15, 67, 0, 160, 300, "재간", null],
[126, "장흠", 1350, 0, null, 44, 25, 52, 0, 160, 300, "대의", "저격"],
[ 96, "저수", 1351, 0, null, 50, 21, 64, 0, 160, 300, "할거", "반계"],
[130, "전단", 1352, 0, null, 44, 55, 23, 0, 160, 300, "출세", null],
[ 42, "전속", 1353, 0, null, 45, 46, 19, 0, 160, 300, "안전", null],
[ 26, "전위1", 1354, 0, null, 43, 69, 14, 0, 160, 300, "의협", "필살"],
[130, "전위2", 1355, 0, null, 48, 53, 24, 0, 160, 300, "출세", null],
[128, "전종", 1356, 0, null, 49, 58, 28, 0, 160, 300, "패권", null],
[ 42, "전주", 1357, 0, null, 46, 52, 20, 0, 160, 300, "의협", null],
[ 96, "전풍", 1358, 0, null, 50, 17, 69, 0, 160, 300, "왕좌", null],
[ 24, "정무", 1359, 0, null, 41, 16, 56, 0, 160, 300, "출세", null],
[119, "정병", 1360, 0, null, 20, 11, 66, 0, 160, 300, "유지", null],
[126, "정보", 1361, 0, null, 50, 24, 57, 0, 160, 300, "패권", null],
[123, "정봉1", 1362, 0, null, 46, 58, 24, 0, 160, 300, "패권", null],
[ 24, "정욱", 1363, 0, null, 50, 16, 66, 0, 160, 300, "패권", "신중"],
[ 88, "정원", 1364, 0, null, 44, 58, 22, 0, 160, 300, "왕좌", "기병"],
[ 7, "정원지", 1365, 0, null, 37, 68, 16, 0, 160, 300, "출세", null],
[ 69, "정은", 1366, 0, null, 41, 49, 12, 0, 160, 300, "재간", null],
[121, "제갈각", 1367, 0, null, 43, 21, 67, 0, 160, 300, "왕좌", null],
[ 76, "제갈균", 1368, 0, null, 43, 18, 56, 0, 160, 300, "안전", "상재"],
[121, "제갈근", 1369, 0, null, 43, 17, 64, 0, 160, 300, "왕좌", "경작"],
[ 76, "제갈량", 1370, 0, null, 55, 21, 72, 0, 160, 300, "왕좌", "집중", "슬슬 나의 지모를 발휘해 보겠습니다..."],
[ 76, "제갈상", 1371, 0, null, 40, 57, 27, 0, 160, 300, "대의", null],
[135, "제갈정", 1372, 0, null, 42, 46, 21, 0, 160, 300, "안전", null],
[ 76, "제갈첨", 1373, 0, null, 47, 20, 57, 0, 160, 300, "대의", null],
[135, "제갈탄", 1374, 0, null, 49, 59, 27, 0, 160, 300, "패권", null],
[ 76, "조광", 1375, 0, null, 45, 52, 21, 0, 160, 300, "재간", null],
[ 74, "조루", 1376, 0, null, 39, 15, 60, 0, 160, 300, "대의", null],
[ 24, "조모", 1377, 0, null, 41, 31, 13, 0, 160, 300, "할거", null],
[127, "조무", 1378, 0, null, 47, 26, 54, 0, 160, 300, "의협", null],
[ 26, "조방", 1379, 0, null, 40, 10, 30, 0, 160, 300, "정복", null],
[ 83, "조범", 1380, 0, null, 42, 16, 49, 0, 160, 300, "유지", null],
[ 26, "조비", 1381, 0, null, 47, 26, 57, 0, 160, 300, "패권", "징병"],
[ 19, "조상", 1382, 0, null, 46, 49, 13, 0, 160, 300, "패권", null],
[147, "조성", 1383, 0, null, 38, 67, 20, 0, 160, 300, "안전", null],
[ 26, "조순", 1384, 0, null, 45, 22, 55, 0, 160, 300, "정복", null],
[ 25, "조식", 1385, 0, null, 17, 9, 70, 0, 160, 300, "왕좌", "귀모"],
[ 25, "조앙", 1386, 0, null, 38, 65, 24, 0, 160, 300, "왕좌", null],
[ 25, "조예", 1387, 0, null, 42, 21, 61, 0, 160, 300, "정복", null],
[ 26, "조우", 1388, 0, null, 45, 21, 52, 0, 160, 300, "대의", null],
[ 76, "조운", 1389, 0, null, 55, 70, 32, 0, 160, 300, "왕좌", "무쌍", "창술의 달인 상산 조자룡 여기 있소!"],
[ 25, "조웅", 1390, 0, null, 43, 12, 38, 0, 160, 300, "안전", null],
[ 26, "조인", 1391, 0, null, 48, 59, 24, 0, 160, 300, "패권", "보병"],
[ 25, "조조", 1392, 0, null, 56, 30, 69, 0, 160, 300, "패권", "반계"],
[ 26, "조진", 1393, 0, null, 50, 52, 25, 0, 160, 300, "정복", null],
[ 25, "조창", 1394, 0, null, 48, 64, 15, 0, 160, 300, "정복", "돌격"],
[ 76, "조통", 1395, 0, null, 45, 50, 21, 0, 160, 300, "재간", null],
[ 84, "조표", 1396, 0, null, 34, 67, 8, 0, 160, 300, "안전", null],
[ 7, "조홍1", 1397, 0, null, 40, 51, 17, 0, 160, 300, "유지", null],
[ 24, "조홍2", 1398, 0, null, 47, 53, 18, 0, 160, 300, "패권", null],
[ 26, "조환", 1399, 0, null, 34, 11, 42, 0, 160, 300, "정복", null],
[ 19, "조훈", 1400, 0, null, 45, 49, 13, 0, 160, 300, "출세", null],
[ 26, "조휴", 1401, 0, null, 48, 54, 26, 0, 160, 300, "패권", null],
[ 19, "조희", 1402, 0, null, 44, 22, 54, 0, 160, 300, "대의", null],
[ 22, "종요", 1403, 0, null, 14, 10, 68, 0, 160, 300, "유지", null],
[ 20, "종회", 1404, 0, null, 51, 22, 67, 0, 160, 300, "패권", null],
[128, "주거", 1405, 0, null, 47, 27, 55, 0, 160, 300, "유지", null],
[118, "주방", 1406, 0, null, 42, 15, 57, 0, 160, 300, "할거", null],
[126, "주연", 1407, 0, null, 47, 55, 20, 0, 160, 300, "할거", null],
[126, "주유", 1408, 0, null, 55, 27, 70, 0, 160, 300, "패권", "신산"],
[128, "주이", 1409, 0, null, 43, 21, 48, 0, 160, 300, "안전", null],
[ 88, "주준", 1410, 0, null, 50, 57, 25, 0, 160, 300, "왕좌", null],
[ 32, "주지", 1411, 0, null, 40, 58, 19, 0, 160, 300, "안전", null],
[ 76, "주창", 1412, 0, null, 37, 68, 13, 0, 160, 300, "의협", "궁병"],
[126, "주치", 1413, 0, null, 42, 21, 45, 0, 160, 300, "안전", null],
[ 41, "주태1", 1414, 0, null, 44, 21, 48, 0, 160, 300, "안전", null],
[126, "주태2", 1415, 0, null, 48, 64, 23, 0, 160, 300, "정복", "필살"],
[128, "주환", 1416, 0, null, 51, 63, 28, 0, 160, 300, "정복", null],
[ 29, "진건", 1417, 0, null, 44, 54, 24, 0, 160, 300, "정복", null],
[ 29, "진교", 1418, 0, null, 19, 11, 66, 0, 160, 300, "유지", null],
[ 28, "진군", 1419, 0, null, 43, 16, 64, 0, 160, 300, "대의", null],
[143, "진궁", 1420, 0, null, 49, 20, 66, 0, 160, 300, "할거", "신중"],
[ 79, "진규", 1421, 0, null, 20, 9, 67, 0, 160, 300, "할거", null],
[ 72, "진도", 1422, 0, null, 47, 63, 26, 0, 160, 300, "대의", null],
[ 79, "진등", 1423, 0, null, 44, 24, 54, 0, 160, 300, "할거", null],
[ 37, "진림", 1424, 0, null, 40, 12, 61, 0, 160, 300, "재간", null],
[124, "진무", 1425, 0, null, 44, 56, 23, 0, 160, 300, "재간", null],
[ 66, "진복", 1426, 0, null, 35, 12, 68, 0, 160, 300, "재간", null],
[ 50, "진수", 1427, 0, null, 24, 13, 69, 0, 160, 300, "대의", null],
[ 81, "진식", 1428, 0, null, 39, 66, 20, 0, 160, 300, "출세", null],
[ 79, "진진", 1429, 0, null, 42, 16, 50, 0, 160, 300, "재간", null],
[ 28, "진태", 1430, 0, null, 49, 57, 26, 0, 160, 300, "대의", null],
[ 11, "진횡", 1431, 0, null, 36, 58, 19, 0, 160, 300, "출세", null],
[ 21, "차주", 1432, 0, null, 41, 51, 24, 0, 160, 300, "안전", null],
[ 11, "착융", 1433, 0, null, 44, 47, 10, 0, 160, 300, "출세", null],
[ 36, "채모", 1434, 0, null, 49, 53, 26, 0, 160, 300, "정복", "궁병"],
[ 36, "채중", 1435, 0, null, 42, 17, 45, 0, 160, 300, "출세", null],
[ 36, "채화", 1436, 0, null, 42, 19, 41, 0, 160, 300, "안전", null],
[ 66, "초주", 1437, 0, null, 20, 12, 69, 0, 160, 300, "대의", null],
[ 20, "최염", 1438, 0, null, 37, 54, 52, 0, 160, 300, "대의", null],
[ 60, "축융", 1439, 0, null, 43, 64, 11, 0, 160, 300, "정복", "척사"],
[ 60, "타사대왕", 1440, 0, null, 43, 55, 25, 0, 160, 300, "출세", "척사"],
[124, "태사자", 1441, 0, null, 47, 70, 25, 0, 160, 300, "대의", "무쌍"],
[124, "태사향", 1442, 0, null, 40, 53, 20, 0, 160, 300, "재간", null],
[ 12, "포륭", 1443, 0, null, 41, 56, 10, 0, 160, 300, "안전", null],
[ 74, "풍습", 1444, 0, null, 35, 64, 18, 0, 160, 300, "재간", null],
[ 7, "하의", 1445, 0, null, 39, 66, 11, 0, 160, 300, "출세", null],
[121, "하제", 1446, 0, null, 48, 55, 24, 0, 160, 300, "재간", null],
[ 90, "하진", 1447, 0, null, 39, 67, 15, 0, 160, 300, "왕좌", null],
[ 24, "하후덕", 1448, 0, null, 45, 50, 16, 0, 160, 300, "출세", null],
[ 26, "하후돈", 1449, 0, null, 52, 67, 27, 0, 160, 300, "의협", "돌격", "다 나오거라! 상대해 주마!"],
[ 19, "하후무", 1450, 0, null, 36, 33, 34, 0, 160, 300, "안전", null],
[ 24, "하후상", 1451, 0, null, 45, 24, 54, 0, 160, 300, "출세", null],
[ 26, "하후연", 1452, 0, null, 49, 66, 22, 0, 160, 300, "패권", "궁병", "궁술로 날 당해낼 자가 있을까? 후후."],
[ 26, "하후위", 1453, 0, null, 47, 57, 27, 0, 160, 300, "정복", null],
[ 26, "하후은", 1454, 0, null, 39, 51, 16, 0, 160, 300, "안전", null],
[ 23, "하후패", 1455, 0, null, 49, 64, 26, 0, 160, 300, "대의", null],
[ 20, "하후현", 1456, 0, null, 42, 11, 57, 0, 160, 300, "유지", null],
[ 26, "하후혜", 1457, 0, null, 48, 25, 58, 0, 160, 300, "정복", null],
[ 26, "하후화", 1458, 0, null, 49, 23, 60, 0, 160, 300, "정복", null],
[ 22, "학소", 1459, 0, null, 53, 30, 63, 0, 160, 300, "대의", "견고"],
[126, "한당", 1460, 0, null, 46, 52, 24, 0, 160, 300, "할거", null],
[ 93, "한복", 1461, 0, null, 45, 47, 17, 0, 160, 300, "안전", null],
[ 8, "한섬", 1462, 0, null, 36, 62, 15, 0, 160, 300, "출세", null],
[ 48, "한수", 1463, 0, null, 45, 28, 58, 0, 160, 300, "대의", "기병"],
[ 40, "한숭", 1464, 0, null, 19, 11, 67, 0, 160, 300, "재간", null],
[ 7, "한충", 1465, 0, null, 37, 66, 13, 0, 160, 300, "안전", null],
[ 9, "한현", 1466, 0, null, 37, 61, 10, 0, 160, 300, "유지", null],
[ 27, "한호", 1467, 0, null, 43, 55, 18, 0, 160, 300, "유지", null],
[ 79, "향랑", 1468, 0, null, 40, 10, 58, 0, 160, 300, "대의", null],
[ 79, "향총", 1469, 0, null, 48, 17, 55, 0, 160, 300, "왕좌", null],
[139, "허공", 1470, 0, null, 45, 49, 23, 0, 160, 300, "유지", null],
[ 21, "허유", 1471, 0, null, 39, 47, 46, 0, 160, 300, "재간", null],
[ 23, "허의", 1472, 0, null, 30, 68, 19, 0, 160, 300, "출세", null],
[ 26, "허저", 1473, 0, null, 42, 70, 12, 0, 160, 300, "정복", "무쌍"],
[ 87, "허정", 1474, 0, null, 16, 13, 68, 0, 160, 300, "재간", null],
[ 12, "형도영", 1475, 0, null, 39, 68, 11, 0, 160, 300, "출세", null],
[148, "호거아", 1476, 0, null, 35, 68, 23, 0, 160, 300, "안전", null],
[ 76, "호반", 1477, 0, null, 43, 46, 18, 0, 160, 300, "재간", null],
[ 20, "호분", 1478, 0, null, 47, 23, 48, 0, 160, 300, "할거", null],
[ 27, "호주천", 1479, 0, null, 49, 57, 25, 0, 160, 300, "정복", null],
[ 20, "호준", 1480, 0, null, 45, 48, 18, 0, 160, 300, "재간", null],
[ 2, "화웅", 1481, 0, null, 46, 64, 11, 0, 160, 300, "출세", "돌격"],
[131, "화핵", 1482, 0, null, 35, 12, 68, 0, 160, 300, "안전", null],
[ 10, "화흠", 1483, 0, null, 16, 17, 68, 0, 160, 300, "출세", null],
[ 21, "환범", 1484, 0, null, 18, 11, 69, 0, 160, 300, "유지", null],
[127, "황개", 1485, 0, null, 49, 63, 26, 0, 160, 300, "왕좌", "징병"],
[ 56, "황권", 1486, 0, null, 48, 18, 58, 0, 160, 300, "대의", null],
[ 41, "황란", 1487, 0, null, 28, 67, 11, 0, 160, 300, "재간", null],
[ 88, "황보숭", 1488, 0, null, 51, 24, 55, 0, 160, 300, "왕좌", null],
[ 72, "황충", 1489, 0, null, 51, 68, 25, 0, 160, 300, "왕좌", "궁병"],
[ 50, "황호", 1490, 0, null, 13, 9, 48, 0, 160, 300, "안전", null],
[147, "후성", 1491, 0, null, 42, 49, 14, 0, 160, 300, "정복", null]
],
"general_ex":[
[123, "가화", 1492, 0, null, 40, 51, 16, 0, 160, 300, null, null],
[999, "건석", 1493, 0, null, 19, 7, 61, 0, 160, 300, null, null],
[999, "견씨", 1494, 0, null, 35, 11, 58, 0, 160, 300, null, null],
[ 40, "견홍", 1495, 0, null, 48, 55, 25, 0, 160, 300, null, null],
[120, "고담", 1496, 0, null, 33, 10, 67, 0, 160, 300, null, null],
[101, "고유", 1497, 0, null, 42, 18, 55, 0, 160, 300, null, null],
[132, "곽마", 1498, 0, null, 46, 54, 19, 0, 160, 300, null, null],
[ 39, "관구수", 1499, 0, null, 42, 49, 15, 0, 160, 300, null, null],
[ 39, "관구전", 1500, 0, null, 44, 22, 52, 0, 160, 300, null, null],
[999, "관로", 1501, 0, null, 44, 10, 57, 0, 160, 300, null, null],
[ 65, "관정", 1502, 0, null, 35, 20, 67, 0, 160, 300, null, null],
[137, "교수", 1503, 0, null, 45, 53, 16, 0, 160, 300, null, null],
[ 33, "구건", 1504, 0, null, 37, 56, 53, 0, 160, 300, null, null],
[ 41, "구본", 1505, 0, null, 40, 17, 54, 0, 160, 300, null, null],
[ 12, "구성", 1506, 0, null, 42, 54, 13, 0, 160, 300, null, null],
[ 21, "국연", 1507, 0, null, 40, 10, 54, 0, 160, 300, null, null],
[ 99, "국의", 1508, 0, null, 51, 59, 20, 0, 160, 300, null, null],
[ 34, "금의", 1509, 0, null, 16, 16, 63, 0, 160, 300, null, null],
[ 76, "나헌", 1510, 0, null, 52, 25, 57, 0, 160, 300, null, null],
[999, "남두", 1511, 0, null, 35, 11, 54, 0, 160, 300, null, null],
[ 54, "냉포", 1512, 0, null, 46, 61, 26, 0, 160, 300, null, null],
[124, "노숙2", 1513, 0, null, 46, 21, 57, 0, 160, 300, null, null],
[ 42, "누규", 1514, 0, null, 41, 9, 64, 0, 160, 300, null, null],
[ 6, "누반", 1515, 0, null, 45, 57, 16, 0, 160, 300, null, null],
[130, "누현", 1516, 0, null, 22, 10, 66, 0, 160, 300, null, null],
[ 40, "당균", 1517, 0, null, 33, 9, 69, 0, 160, 300, null, null],
[ 32, "당빈", 1518, 0, null, 46, 56, 24, 0, 160, 300, null, null],
[999, "대교", 1519, 0, null, 37, 6, 54, 0, 160, 300, null, null],
[ 28, "대릉", 1520, 0, null, 44, 57, 18, 0, 160, 300, null, null],
[129, "동조", 1521, 0, null, 14, 8, 51, 0, 160, 300, null, null],
[114, "등수", 1522, 0, null, 35, 10, 44, 0, 160, 300, null, null],
[ 50, "마막", 1523, 0, null, 20, 17, 5, 0, 160, 300, null, null],
[116, "만욱", 1524, 0, null, 18, 9, 66, 0, 160, 300, null, null],
[120, "맹종", 1525, 0, null, 39, 19, 66, 0, 160, 300, null, null],
[ 38, "문호", 1526, 0, null, 45, 56, 18, 0, 160, 300, null, null],
[999, "미씨", 1527, 0, null, 43, 8, 52, 0, 160, 300, null, null],
[ 39, "반림", 1528, 0, null, 45, 59, 6, 0, 160, 300, null, null],
[129, "반장", 1529, 0, null, 49, 58, 26, 0, 160, 300, null, null],
[ 94, "방열", 1530, 0, null, 42, 61, 12, 0, 160, 300, null, null],
[ 55, "방희", 1531, 0, null, 43, 16, 53, 0, 160, 300, null, null],
[ 30, "배수", 1532, 0, null, 7, 7, 68, 0, 160, 300, null, null],
[ 8, "번능", 1533, 0, null, 46, 48, 19, 0, 160, 300, null, null],
[999, "번씨", 1534, 0, null, 31, 9, 45, 0, 160, 300, null, null],
[ 49, "보도근", 1535, 0, null, 44, 55, 20, 0, 160, 300, null, null],
[129, "보천", 1536, 0, null, 46, 23, 55, 0, 160, 300, null, null],
[121, "보협", 1537, 0, null, 47, 21, 57, 0, 160, 300, null, null],
[ 28, "부하", 1538, 0, null, 38, 15, 69, 0, 160, 300, null, null],
[ 26, "비요", 1539, 0, null, 46, 25, 55, 0, 160, 300, null, null],
[ 31, "사마주", 1540, 0, null, 44, 21, 49, 0, 160, 300, null, null],
[ 41, "사찬", 1541, 0, null, 43, 54, 21, 0, 160, 300, null, null],
[128, "설후", 1542, 0, null, 14, 8, 67, 0, 160, 300, null, null],
[ 36, "성공영", 1543, 0, null, 47, 22, 60, 0, 160, 300, null, null],
[126, "성만", 1544, 0, null, 43, 53, 25, 0, 160, 300, null, null],
[999, "소교", 1545, 0, null, 42, 11, 51, 0, 160, 300, null, null],
[ 46, "소유", 1546, 0, null, 40, 48, 19, 0, 160, 300, null, null],
[ 31, "소제2", 1547, 0, null, 20, 8, 68, 0, 160, 300, null, null],
[126, "손교", 1548, 0, null, 49, 23, 53, 0, 160, 300, null, null],
[116, "손기", 1549, 0, null, 44, 51, 20, 0, 160, 300, null, null],
[999, "손상향", 1550, 0, null, 47, 49, 17, 0, 160, 300, null, null],
[125, "손익", 1551, 0, null, 46, 57, 12, 0, 160, 300, null, null],
[125, "손진", 1552, 0, null, 44, 54, 19, 0, 160, 300, null, null],
[123, "송겸", 1553, 0, null, 43, 40, 18, 0, 160, 300, null, null],
[ 85, "순심", 1554, 0, null, 18, 10, 68, 0, 160, 300, null, null],
[ 31, "순욱2", 1555, 0, null, 7, 8, 68, 0, 160, 300, null, null],
[ 31, "순의", 1556, 0, null, 14, 7, 67, 0, 160, 300, null, null],
[129, "시삭", 1557, 0, null, 35, 66, 18, 0, 160, 300, null, null],
[ 29, "신창", 1558, 0, null, 40, 13, 39, 0, 160, 300, null, null],
[999, "악신", 1559, 0, null, 41, 7, 39, 0, 160, 300, null, null],
[138, "악취", 1560, 0, null, 42, 52, 22, 0, 160, 300, null, null],
[138, "양강", 1561, 0, null, 44, 54, 17, 0, 160, 300, null, null],
[ 21, "양부", 1562, 0, null, 46, 21, 63, 0, 160, 300, null, null],
[ 72, "양서", 1563, 0, null, 42, 24, 51, 0, 160, 300, null, null],
[ 34, "양습", 1564, 0, null, 45, 19, 55, 0, 160, 300, null, null],
[ 16, "양앙", 1565, 0, null, 45, 54, 16, 0, 160, 300, null, null],
[ 17, "양임", 1566, 0, null, 47, 58, 22, 0, 160, 300, null, null],
[ 32, "양제", 1567, 0, null, 46, 24, 54, 0, 160, 300, null, null],
[ 33, "양조2", 1568, 0, null, 45, 23, 52, 0, 160, 300, null, null],
[ 48, "양추2", 1569, 0, null, 45, 52, 23, 0, 160, 300, null, null],
[140, "양홍", 1570, 0, null, 17, 9, 68, 0, 160, 300, null, null],
[ 31, "양혼", 1571, 0, null, 43, 52, 24, 0, 160, 300, null, null],
[123, "여거", 1572, 0, null, 47, 22, 53, 0, 160, 300, null, null],
[130, "여대", 1573, 0, null, 51, 55, 26, 0, 160, 300, null, null],
[136, "염상", 1574, 0, null, 28, 12, 67, 0, 160, 300, null, null],
[ 36, "염행", 1575, 0, null, 46, 63, 16, 0, 160, 300, null, null],
[ 73, "영수", 1576, 0, null, 46, 26, 56, 0, 160, 300, null, null],
[ 39, "오거", 1577, 0, null, 39, 63, 14, 0, 160, 300, null, null],
[126, "오경", 1578, 0, null, 47, 48, 22, 0, 160, 300, null, null],
[999, "오국태", 1579, 0, null, 30, 7, 60, 0, 160, 300, null, null],
[126, "오찬", 1580, 0, null, 46, 17, 58, 0, 160, 300, null, null],
[ 23, "온회", 1581, 0, null, 37, 16, 68, 0, 160, 300, null, null],
[ 21, "왕기2", 1582, 0, null, 46, 51, 24, 0, 160, 300, null, null],
[ 32, "왕도", 1583, 0, null, 39, 18, 67, 0, 160, 300, null, null],
[123, "왕돈", 1584, 0, null, 43, 51, 17, 0, 160, 300, null, null],
[ 34, "왕릉", 1585, 0, null, 47, 23, 54, 0, 160, 300, null, null],
[ 63, "왕문", 1586, 0, null, 44, 52, 14, 0, 160, 300, null, null],
[ 32, "왕상", 1587, 0, null, 24, 9, 65, 0, 160, 300, null, null],
[ 34, "왕숙", 1588, 0, null, 35, 10, 68, 0, 160, 300, null, null],
[ 33, "왕업", 1589, 0, null, 31, 5, 46, 0, 160, 300, null, null],
[ 35, "왕충", 1590, 0, null, 37, 58, 10, 0, 160, 300, null, null],
[ 1, "우보", 1591, 0, null, 37, 63, 7, 0, 160, 300, null, null],
[122, "우사", 1592, 0, null, 46, 14, 59, 0, 160, 300, null, null],
[138, "원요", 1593, 0, null, 38, 42, 39, 0, 160, 300, null, null],
[ 95, "원유", 1594, 0, null, 42, 16, 55, 0, 160, 300, null, null],
[ 31, "위관", 1595, 0, null, 46, 18, 60, 0, 160, 300, null, null],
[129, "위막", 1596, 0, null, 42, 49, 23, 0, 160, 300, null, null],
[ 55, "유괴", 1597, 0, null, 48, 55, 25, 0, 160, 300, null, null],
[129, "유략", 1598, 0, null, 47, 52, 23, 0, 160, 300, null, null],
[ 45, "유반", 1599, 0, null, 48, 59, 19, 0, 160, 300, null, null],
[ 29, "유복", 1600, 0, null, 41, 20, 55, 0, 160, 300, null, null],
[ 78, "유선2", 1601, 0, null, 6, 10, 39, 0, 160, 300, null, null],
[139, "유섭", 1602, 0, null, 44, 59, 12, 0, 160, 300, null, null],
[ 28, "유소", 1603, 0, null, 45, 20, 55, 0, 160, 300, null, null],
[128, "유승", 1604, 0, null, 38, 67, 13, 0, 160, 300, null, null],
[129, "유찬", 1605, 0, null, 48, 57, 25, 0, 160, 300, null, null],
[129, "유평", 1606, 0, null, 45, 54, 25, 0, 160, 300, null, null],
[138, "유훈", 1607, 0, null, 40, 50, 20, 0, 160, 300, null, null],
[ 48, "이감", 1608, 0, null, 43, 52, 14, 0, 160, 300, null, null],
[ 19, "이승", 1609, 0, null, 11, 26, 31, 0, 160, 300, null, null],
[ 22, "이통", 1610, 0, null, 48, 62, 20, 0, 160, 300, null, null],
[138, "이풍2", 1611, 0, null, 47, 58, 20, 0, 160, 300, null, null],
[ 20, "이풍3", 1612, 0, null, 22, 11, 67, 0, 160, 300, null, null],
[ 29, "장구", 1613, 0, null, 46, 54, 19, 0, 160, 300, null, null],
[ 21, "장기", 1614, 0, null, 49, 15, 59, 0, 160, 300, null, null],
[ 74, "장남", 1615, 0, null, 47, 50, 16, 0, 160, 300, null, null],
[100, "장막", 1616, 0, null, 41, 20, 54, 0, 160, 300, null, null],
[ 7, "장만성", 1617, 0, null, 47, 61, 19, 0, 160, 300, null, null],
[135, "장반", 1618, 0, null, 42, 55, 25, 0, 160, 300, null, null],
[ 78, "장빈", 1619, 0, null, 29, 12, 66, 0, 160, 300, null, null],
[124, "장승", 1620, 0, null, 48, 26, 57, 0, 160, 300, null, null],
[999, "장양2", 1621, 0, null, 42, 42, 19, 0, 160, 300, null, null],
[ 68, "장억", 1622, 0, null, 50, 60, 21, 0, 160, 300, null, null],
[ 75, "장준", 1623, 0, null, 45, 52, 25, 0, 160, 300, null, null],
[ 20, "장집", 1624, 0, null, 30, 12, 68, 0, 160, 300, null, null],
[ 39, "장특", 1625, 0, null, 47, 21, 56, 0, 160, 300, null, null],
[ 96, "저곡", 1626, 0, null, 42, 21, 52, 0, 160, 300, null, null],
[128, "전기", 1627, 0, null, 40, 53, 21, 0, 160, 300, null, null],
[ 23, "전만", 1628, 0, null, 40, 56, 16, 0, 160, 300, null, null],
[128, "전상", 1629, 0, null, 2, 5, 11, 0, 160, 300, null, null],
[130, "전역", 1630, 0, null, 43, 49, 15, 0, 160, 300, null, null],
[ 75, "전예", 1631, 0, null, 50, 24, 61, 0, 160, 300, null, null],
[ 64, "전해", 1632, 0, null, 47, 49, 22, 0, 160, 300, null, null],
[123, "정봉2", 1633, 0, null, 45, 52, 20, 0, 160, 300, null, null],
[ 22, "정의", 1634, 0, null, 15, 4, 66, 0, 160, 300, null, null],
[ 81, "제갈교", 1635, 0, null, 41, 9, 58, 0, 160, 300, null, null],
[ 40, "제갈서", 1636, 0, null, 38, 43, 12, 0, 160, 300, null, null],
[ 25, "조충", 1637, 0, null, 12, 5, 68, 0, 160, 300, null, null],
[121, "종리목", 1638, 0, null, 51, 26, 57, 0, 160, 300, null, null],
[ 22, "종육", 1639, 0, null, 26, 7, 67, 0, 160, 300, null, null],
[122, "좌혁", 1640, 0, null, 43, 51, 20, 0, 160, 300, null, null],
[ 36, "주령", 1641, 0, null, 49, 54, 26, 0, 160, 300, null, null],
[115, "주앙", 1642, 0, null, 48, 24, 24, 0, 160, 300, null, null],
[ 52, "주포", 1643, 0, null, 43, 55, 7, 0, 160, 300, null, null],
[ 11, "주흔", 1644, 0, null, 45, 21, 58, 0, 160, 300, null, null],
[140, "진기", 1645, 0, null, 42, 52, 18, 0, 160, 300, null, null],
[142, "진란", 1646, 0, null, 45, 54, 17, 0, 160, 300, null, null],
[ 25, "진랑", 1647, 0, null, 42, 54, 16, 0, 160, 300, null, null],
[ 12, "진응", 1648, 0, null, 44, 53, 19, 0, 160, 300, null, null],
[124, "진표", 1649, 0, null, 44, 19, 56, 0, 160, 300, null, null],
[999, "채염", 1650, 0, null, 36, 10, 64, 0, 160, 300, null, null],
[999, "초선", 1651, 0, null, 45, 8, 55, 0, 160, 300, null, null],
[135, "초이", 1652, 0, null, 41, 51, 21, 0, 160, 300, null, null],
[ 65, "추단", 1653, 0, null, 44, 54, 15, 0, 160, 300, null, null],
[999, "추씨", 1654, 0, null, 35, 7, 54, 0, 160, 300, null, null],
[ 71, "추정", 1655, 0, null, 45, 25, 51, 0, 160, 300, null, null],
[145, "파재", 1656, 0, null, 46, 57, 20, 0, 160, 300, null, null],
[ 22, "포신", 1657, 0, null, 49, 23, 61, 0, 160, 300, null, null],
[114, "하식", 1658, 0, null, 16, 38, 13, 0, 160, 300, null, null],
[ 36, "하안", 1659, 0, null, 3, 12, 67, 0, 160, 300, null, null],
[999, "하후씨", 1660, 0, null, 28, 8, 47, 0, 160, 300, null, null],
[ 5, "학맹", 1661, 0, null, 42, 51, 17, 0, 160, 300, null, null],
[ 98, "한거자", 1662, 0, null, 41, 47, 13, 0, 160, 300, null, null],
[ 19, "한덕", 1663, 0, null, 44, 59, 11, 0, 160, 300, null, null],
[140, "한윤", 1664, 0, null, 26, 11, 66, 0, 160, 300, null, null],
[999, "허소", 1665, 0, null, 41, 12, 48, 0, 160, 300, null, null],
[ 30, "호열", 1666, 0, null, 49, 26, 57, 0, 160, 300, null, null],
[ 76, "호제", 1667, 0, null, 42, 17, 52, 0, 160, 300, null, null],
[149, "호진", 1668, 0, null, 45, 58, 7, 0, 160, 300, null, null],
[ 29, "호질", 1669, 0, null, 47, 20, 57, 0, 160, 300, null, null],
[ 7, "환계", 1670, 0, null, 9, 11, 66, 0, 160, 300, null, null],
[ 56, "황숭", 1671, 0, null, 46, 24, 56, 0, 160, 300, null, null],
[999, "황승언", 1672, 0, null, 46, 9, 60, 0, 160, 300, null, null],
[999, "황월영", 1673, 0, null, 42, 8, 57, 0, 160, 300, null, null],
[ 45, "황조", 1674, 0, null, 48, 51, 22, 0, 160, 300, null, null],
[ 48, "후선", 1675, 0, null, 42, 51, 15, 0, 160, 300, null, null],
[ 8, "휴고", 1676, 0, null, 43, 55, 16, 0, 160, 300, null, null],
[ 98, "휴원진", 1677, 0, null, 41, 49, 16, 0, 160, 300, null, null],
[ 22, "희지재", 1678, 0, null, 23, 5, 69, 0, 160, 300, null, null]
],
"cities":[
],
"history":[
"<C>●</>180년 1월:<L><b>【이벤트】</b></>차원이 다른 존재들이 나타납니다."
],
"initialEvents":[
],
"events":[
]
}
+1 -1
View File
@@ -1,6 +1,6 @@
{
"title":"【역사모드3】 군웅할거",
"startYear":194,
"startYear":191,
"life":1,
"fiction":0,
"nation":[
+377
View File
@@ -0,0 +1,377 @@
{
"title":"【가상모드10】 KBO 올스타전",
"life":1,
"fiction":1,
"nation":[
],
"diplomacy":[
],
"general":[
[0, "김일융", -1, 0, null, 88, 83, 79, 0, 160, 300, null, null],
[0, "이승엽", -1, 0, null, 90, 108, 37, 0, 160, 300, null, "위압", "안녕하세요 국민타자 이승엽입니다."],
[0, "마해영", -1, 0, null, 84, 84, 22, 0, 160, 300, null, null],
[0, "채태인", -1, 0, null, 86, 54, 15, 0, 160, 300, null, null, "신대륙은 어디에…"],
[0, "김성래", -1, 0, null, 75, 86, 19, 0, 160, 300, null, null],
[0, "강기웅", -1, 0, null, 82, 61, 83, 0, 160, 300, null, null],
[0, "나바로", -1, 0, null, 82, 85, 79, 0, 160, 300, null, null],
[0, "김한수", -1, 0, null, 80, 82, 48, 0, 160, 300, null, null],
[0, "조동찬", -1, 0, null, 55, 68, 75, 0, 160, 300, null, null],
[0, "류중일", -1, 0, null, 68, 34, 78, 0, 160, 300, null, null, "내 아들 상수야…"],
[0, "김상수", -1, 0, null, 68, 21, 80, 0, 160, 300, null, null, "예 아부지…"],
[0, "박진만", -1, 0, null, 72, 78, 69, 0, 160, 300, null, null],
[0, "양준혁", -1, 0, null, 97, 98, 91, 0, 160, 300, null, "무쌍", "내보다 강미노가 머리 더 큰데?"],
[0, "박한이", -1, 0, null, 83, 77, 79, 0, 160, 300, null, null, "킁킁"],
[0, "최형우", -1, 0, null, 87, 86, 20, 0, 160, 300, null, null],
[0, "장효조", -1, 0, null, 95, 39, 68, 0, 160, 300, null, null],
[0, "동봉철", -1, 0, null, 65, 41, 74, 0, 160, 300, null, null],
[0, "강동우", -1, 0, null, 67, 53, 79, 0, 160, 300, null, null],
[0, "신동주", -1, 0, null, 68, 71, 76, 0, 160, 300, null, null],
[0, "이만수", -1, 0, null, 89, 97, 49, 0, 160, 300, null, "필살"],
[0, "진갑용", -1, 0, null, 74, 80, 15, 0, 160, 300, null, null],
[0, "김시진", -1, 0, null, 84, 88, 75, 0, 160, 300, null, null],
[0, "배영수", -1, 0, null, 79, 86, 87, 0, 160, 300, null, null],
[0, "윤성환", -1, 0, null, 74, 86, 87, 0, 160, 300, null, null],
[0, "안지만", -1, 0, null, 69, 79, 75, 0, 160, 300, null, null],
[0, "김현욱", -1, 0, null, 82, 85, 84, 0, 160, 300, null, null],
[0, "정현욱", -1, 0, null, 74, 83, 77, 0, 160, 300, null, null],
[0, "권혁", -1, 0, null, 75, 86, 62, 0, 160, 300, null, null],
[0, "임창용", -1, 0, null, 83, 86, 80, 0, 160, 300, null, null],
[0, "오승환", -1, 0, null, 97, 92, 89, 0, 160, 300, null, "위압"],
[0, "권영호", -1, 0, null, 83, 53, 76, 0, 160, 300, null, null],
[0, "이선희", -1, 0, null, 83, 49, 74, 0, 160, 300, null, null],
[0, "공필성", -1, 0, null, 46, 47, 77, 0, 160, 300, null, null],
[0, "양상문", -1, 0, null, 76, 54, 76, 0, 160, 300, null, null],
[0, "윤형배", -1, 0, null, 77, 69, 73, 0, 160, 300, null, null],
[0, "박정태", -1, 0, null, 84, 74, 39, 0, 160, 300, null, null],
[0, "주형광", -1, 0, null, 79, 86, 84, 0, 160, 300, null, null],
[0, "강영식", -1, 0, null, 63, 69, 60, 0, 160, 300, null, null],
[0, "김사율", -1, 0, null, 74, 66, 67, 0, 160, 300, null, null],
[0, "배장호", -1, 0, null, 62, 48, 60, 0, 160, 300, null, null],
[0, "손민한", -1, 0, null, 85, 84, 94, 0, 160, 300, null, null, "팝콘이 먹고싶다"],
[0, "송승준", -1, 0, null, 65, 84, 67, 0, 160, 300, null, null],
[0, "이용훈", -1, 0, null, 48, 58, 63, 0, 160, 300, null, null],
[0, "임경완", -1, 0, null, 68, 57, 39, 0, 160, 300, null, null],
[0, "장원준", -1, 0, null, 75, 83, 74, 0, 160, 300, null, null],
[0, "조정훈", -1, 0, null, 67, 59, 79, 0, 160, 300, null, null],
[0, "최대성", -1, 0, null, 69, 63, 38, 0, 160, 300, null, null],
[0, "허준혁", -1, 0, null, 58, 51, 48, 0, 160, 300, null, null],
[0, "강민호", -1, 0, null, 75, 86, 48, 0, 160, 300, null, null, "모텔에 간민호"],
[0, "최기문", -1, 0, null, 65, 37, 64, 0, 160, 300, null, null],
[0, "임수혁", -1, 0, null, 67, 44, 56, 0, 160, 300, null, null],
[0, "김주찬", -1, 0, null, 75, 53, 88, 0, 160, 300, null, null],
[0, "문규현", -1, 0, null, 46, 22, 49, 0, 160, 300, null, null],
[0, "박기혁", -1, 0, null, 48, 25, 70, 0, 160, 300, null, null],
[0, "이대호", -1, 0, null, 95, 98, 10, 0, 160, 300, null, "무쌍", "마 니 일로 내리와 "],
[0, "전준우", -1, 0, null, 80, 72, 75, 0, 160, 300, null, null, "홈런! 홈런!....아냐?"],
[0, "손아섭", -1, 0, null, 89, 75, 82, 0, 160, 300, null, null],
[0, "홍성흔", -1, 0, null, 86, 77, 53, 0, 160, 300, null, null],
[0, "조성환", -1, 0, null, 79, 42, 77, 0, 160, 300, null, null],
[0, "가르시아", -1, 0, null, 70, 85, 12, 0, 160, 300, null, null],
[0, "정보명", -1, 0, null, 69, 31, 39, 0, 160, 300, null, null],
[0, "이재곤", -1, 0, null, 40, 41, 39, 0, 160, 300, null, null],
[0, "염종석", -1, 0, null, 83, 90, 93, 0, 160, 300, null, null],
[0, "황재균", -1, 0, null, 79, 77, 83, 0, 160, 300, null, null, "안녕하세요 섹머입니다"],
[0, "윤학길", -1, 0, null, 81, 76, 82, 0, 160, 300, null, null],
[0, "가득염", -1, 0, null, 60, 67, 61, 0, 160, 300, null, null],
[0, "조경환", -1, 0, null, 57, 78, 20, 0, 160, 300, null, null],
[0, "강상수", -1, 0, null, 65, 66, 58, 0, 160, 300, null, null],
[0, "최준석", -1, 0, null, 79, 86, 10, 0, 160, 300, null, null],
[0, "최동원", -1, 0, null, 98, 94, 96, 0, 160, 300, null, "환술", "무쇠팔 최동원"],
[0, "김용철", -1, 0, null, 77, 79, 67, 0, 160, 300, null, null],
[0, "김용희", -1, 0, null, 67, 64, 21, 0, 160, 300, null, null],
[0, "호세", -1, 0, null, 88, 86, 39, 0, 160, 300, null, null, "헤이 영쑤! 돈 두 댓!"],
[0, "감사용", -1, 0, null, 37, 18, 65, 0, 160, 300, null, null],
[0, "금광옥", -1, 0, null, 31, 30, 39, 0, 160, 300, null, null],
[0, "김무관", -1, 0, null, 20, 7, 43, 0, 160, 300, null, null],
[0, "양승관", -1, 0, null, 46, 44, 22, 0, 160, 300, null, null],
[0, "박철순", -1, 0, null, 89, 82, 80, 0, 160, 300, null, "무쌍"],
[0, "하기룡", -1, 0, null, 82, 58, 64, 0, 160, 300, null, null],
[0, "황규봉", -1, 0, null, 83, 48, 72, 0, 160, 300, null, null],
[0, "계형철", -1, 0, null, 74, 75, 70, 0, 160, 300, null, null],
[0, "김경문", -1, 0, null, 48, 9, 34, 0, 160, 300, null, null],
[0, "조범현", -1, 0, null, 29, 25, 83, 0, 160, 300, null, null],
[0, "백인천", -1, 0, null, 95, 77, 66, 0, 160, 300, null, null],
[0, "김인식", -1, 0, null, 58, 15, 75, 0, 160, 300, null, null],
[0, "김재박", -1, 0, null, 73, 29, 91, 0, 160, 300, null, null],
[0, "박정현", -1, 0, null, 82, 78, 80, 0, 160, 300, null, null],
[0, "전준호", -1, 0, null, 79, 42, 101, 0, 160, 300, null, null, "전설의 대도"],
[0, "심정수", -1, 0, null, 80, 92, 41, 0, 160, 300, null, null],
[0, "박재홍", -1, 0, null, 87, 95, 94, 0, 160, 300, null, "무쌍"],
[0, "박경완", -1, 0, null, 48, 89, 79, 0, 160, 300, null, null],
[0, "박종호", -1, 0, null, 76, 76, 81, 0, 160, 300, null, null],
[0, "이숭용", -1, 0, null, 81, 83, 67, 0, 160, 300, null, null],
[0, "송지만", -1, 0, null, 78, 89, 86, 0, 160, 300, null, null],
[0, "나이트", -1, 0, null, 75, 79, 82, 0, 160, 300, null, null],
[0, "송신영", -1, 0, null, 67, 69, 69, 0, 160, 300, null, null],
[0, "이택근", -1, 0, null, 86, 80, 83, 0, 160, 300, null, null],
[0, "위재영", -1, 0, null, 80, 69, 67, 0, 160, 300, null, null],
[0, "김성래", -1, 0, null, 77, 81, 23, 0, 160, 300, null, null],
[0, "데이비스", -1, 0, null, 89, 83, 77, 0, 160, 300, null, null],
[0, "임선동", -1, 0, null, 67, 72, 76, 0, 160, 300, null, null],
[0, "우즈", -1, 0, null, 89, 90, 36, 0, 160, 300, null, "필살"],
[0, "성준", -1, 0, null, 78, 58, 67, 0, 160, 300, null, null],
[0, "장명부", -1, 0, null, 84, 82, 76, 0, 160, 300, null, null],
[0, "정명원", -1, 0, null, 89, 84, 76, 0, 160, 300, null, null],
[0, "김응국", -1, 0, null, 82, 79, 86, 0, 160, 300, null, null],
[0, "강정호", -1, 0, null, 81, 81, 48, 0, 160, 300, null, null],
[0, "박병호", -1, 0, null, 80, 95, 56, 0, 160, 300, null, "위압"],
[0, "김민성", -1, 0, null, 79, 80, 38, 0, 160, 300, null, null],
[0, "서건창", -1, 0, null, 94, 26, 91, 0, 160, 300, null, "환술"],
[0, "김하성", -1, 0, null, 80, 63, 69, 0, 160, 300, null, null],
[0, "이정후", -1, 0, null, 86, 8, 15, 0, 160, 300, null, null],
[0, "정민태", -1, 0, null, 77, 78, 82, 0, 160, 300, null, null],
[0, "정경배", -1, 0, null, 64, 76, 67, 0, 160, 300, null, null],
[0, "김기태", -1, 0, null, 86, 90, 76, 0, 160, 300, null, null],
[0, "이승호", -1, 0, null, 71, 80, 53, 0, 160, 300, null, null],
[0, "김광현", -1, 0, null, 84, 90, 86, 0, 160, 300, null, "무쌍", "제가 현진이형보단 낫죠"],
[0, "박정배", -1, 0, null, 62, 63, 67, 0, 160, 300, null, null],
[0, "채병용", -1, 0, null, 68, 77, 79, 0, 160, 300, null, null],
[0, "윤희상", -1, 0, null, 56, 58, 67, 0, 160, 300, null, null],
[0, "이재원", -1, 0, null, 83, 67, 10, 0, 160, 300, null, null],
[0, "박정권", -1, 0, null, 78, 83, 53, 0, 160, 300, null, null],
[0, "나주환", -1, 0, null, 68, 67, 72, 0, 160, 300, null, null],
[0, "최정", -1, 0, null, 89, 91, 88, 0, 160, 300, null, "무쌍"],
[0, "조동화", -1, 0, null, 48, 11, 83, 0, 160, 300, null, null],
[0, "김강민", -1, 0, null, 77, 77, 82, 0, 160, 300, null, null],
[0, "박용택", -1, 0, null, 92, 90, 92, 0, 160, 300, null, "신중", "팬 여러분 올해는 유광잠바 준비하셔야 될 겁니다"],
[0, "이병규", -1, 0, null, 93, 90, 89, 0, 160, 300, null, "필살"],
[0, "조인성", -1, 0, null, 49, 86, 25, 0, 160, 300, null, null],
[0, "김동수", -1, 0, null, 65, 86, 65, 0, 160, 300, null, null],
[0, "유지현", -1, 0, null, 76, 57, 87, 0, 160, 300, null, null],
[0, "김재현", -1, 0, null, 85, 86, 77, 0, 160, 300, null, null],
[0, "이상훈", -1, 0, null, 95, 90, 87, 0, 160, 300, null, "무쌍"],
[0, "서용빈", -1, 0, null, 81, 22, 87, 0, 160, 300, null, null],
[0, "봉중근", -1, 0, null, 77, 68, 44, 0, 160, 300, null, null],
[0, "차우찬", -1, 0, null, 67, 82, 49, 0, 160, 300, null, null],
[0, "오지환", -1, 0, null, 57, 68, 80, 0, 160, 300, null, null, "경기를 지배하는 오지배입니다"],
[0, "금민철", -1, 0, null, 61, 50, 42, 0, 160, 300, null, null],
[0, "김동주", -1, 0, null, 92, 92, 48, 0, 160, 300, null, "위압"],
[0, "김선우", -1, 0, null, 65, 67, 74, 0, 160, 300, null, null],
[0, "김재호", -1, 0, null, 68, 21, 58, 0, 160, 300, null, null],
[0, "노경은", -1, 0, null, 48, 59, 61, 0, 160, 300, null, null],
[0, "니퍼트", -1, 0, null, 76, 88, 67, 0, 160, 300, null, null],
[0, "류택현", -1, 0, null, 65, 79, 63, 0, 160, 300, null, null],
[0, "민병헌", -1, 0, null, 84, 53, 81, 0, 160, 300, null, null],
[0, "박명환", -1, 0, null, 72, 80, 41, 0, 160, 300, null, null, "배추 좀 주세요"],
[0, "안경현", -1, 0, null, 67, 78, 34, 0, 160, 300, null, null],
[0, "양의지", -1, 0, null, 83, 77, 39, 0, 160, 300, null, null],
[0, "오재원", -1, 0, null, 67, 30, 87, 0, 160, 300, null, null, "식빵!"],
[0, "유희관", -1, 0, null, 65, 76, 69, 0, 160, 300, null, null, "싸인해드릴까요?"],
[0, "이용찬", -1, 0, null, 68, 72, 74, 0, 160, 300, null, null],
[0, "이성열", -1, 0, null, 48, 77, 41, 0, 160, 300, null, null],
[0, "이재영", -1, 0, null, 63, 64, 39, 0, 160, 300, null, null],
[0, "이종욱", -1, 0, null, 83, 35, 91, 0, 160, 300, null, null],
[0, "이현승", -1, 0, null, 63, 65, 67, 0, 160, 300, null, null],
[0, "이혜천", -1, 0, null, 62, 50, 48, 0, 160, 300, null, null],
[0, "전병두", -1, 0, null, 71, 78, 29, 0, 160, 300, null, null],
[0, "정대현", -1, 0, null, 88, 58, 70, 0, 160, 300, null, null],
[0, "정수빈", -1, 0, null, 72, 19, 83, 0, 160, 300, null, null],
[0, "정수근", -1, 0, null, 76, 26, 89, 0, 160, 300, null, null],
[0, "홍상삼", -1, 0, null, 59, 49, 51, 0, 160, 300, null, null],
[0, "손시헌", -1, 0, null, 68, 57, 31, 0, 160, 300, null, null],
[0, "박민우", -1, 0, null, 86, 8, 76, 0, 160, 300, null, null],
[0, "모창민", -1, 0, null, 68, 57, 60, 0, 160, 300, null, null],
[0, "지석훈", -1, 0, null, 39, 38, 12, 0, 160, 300, null, null],
[0, "박석민", -1, 0, null, 79, 84, 23, 0, 160, 300, null, null, "브로콜리 돼지 나가신다"],
[0, "이민호", -1, 0, null, 57, 78, 53, 0, 160, 300, null, null],
[0, "김진성", -1, 0, null, 63, 67, 69, 0, 160, 300, null, null],
[0, "권희동", -1, 0, null, 49, 41, 21, 0, 160, 300, null, null],
[0, "임창민", -1, 0, null, 71, 67, 63, 0, 160, 300, null, null],
[0, "원종현", -1, 0, null, 62, 67, 71, 0, 160, 300, null, null],
[0, "이재학", -1, 0, null, 62, 53, 58, 0, 160, 300, null, null],
[0, "최금강", -1, 0, null, 44, 48, 53, 0, 160, 300, null, null],
[0, "김상엽", -1, 0, null, 68, 60, 39, 0, 160, 300, null, null],
[0, "김수경", -1, 0, null, 67, 82, 58, 0, 160, 300, null, null],
[0, "테임즈", -1, 0, null, 94, 96, 76, 0, 160, 300, null, "무쌍", "황재균은 섹x머신이다"],
[0, "나성범", -1, 0, null, 90, 83, 70, 0, 160, 300, null, "필살"],
[0, "김성한", -1, 0, null, 80, 86, 79, 0, 160, 300, null, null],
[0, "방수원", -1, 0, null, 74, 53, 76, 0, 160, 300, null, null],
[0, "김봉연", -1, 0, null, 74, 79, 40, 0, 160, 300, null, null],
[0, "김일권", -1, 0, null, 53, 29, 95, 0, 160, 300, null, null],
[0, "김종모", -1, 0, null, 85, 70, 31, 0, 160, 300, null, null],
[0, "선동열", -1, 0, null, 104, 96, 99, 0, 160, 300, null, "집중", "무등산 폭격기"],
[0, "이종범", -1, 0, null, 91, 93, 103, 0, 160, 300, null, "환술", "내겐 보이지 않는 무언가가 있다"],
[0, "문희수", -1, 0, null, 72, 61, 63, 0, 160, 300, null, null],
[0, "유승안", -1, 0, null, 65, 73, 34, 0, 160, 300, null, null],
[0, "이순철", -1, 0, null, 63, 80, 87, 0, 160, 300, null, null, "LG는 내 덕에 강팀이 되었지"],
[0, "차동철", -1, 0, null, 73, 23, 67, 0, 160, 300, null, null],
[0, "한대화", -1, 0, null, 79, 82, 71, 0, 160, 300, null, null],
[0, "이강철", -1, 0, null, 83, 81, 62, 0, 160, 300, null, null],
[0, "조계현", -1, 0, null, 86, 71, 73, 0, 160, 300, null, "무쌍"],
[0, "최향남", -1, 0, null, 63, 64, 34, 0, 160, 300, null, null],
[0, "홍현우", -1, 0, null, 71, 84, 81, 0, 160, 300, null, null],
[0, "이대진", -1, 0, null, 73, 74, 58, 0, 160, 300, null, null],
[0, "장채근", -1, 0, null, 30, 72, 31, 0, 160, 300, null, null],
[0, "김종국", -1, 0, null, 46, 62, 86, 0, 160, 300, null, null],
[0, "곽채진", -1, 0, null, 61, 67, 59, 0, 160, 300, null, null],
[0, "황두성", -1, 0, null, 73, 79, 51, 0, 160, 300, null, null],
[0, "이호준", -1, 0, null, 82, 86, 51, 0, 160, 300, null, null, "인생은 이호준처럼"],
[0, "장성호", -1, 0, null, 84, 83, 74, 0, 160, 300, null, null],
[0, "정성훈", -1, 0, null, 84, 80, 77, 0, 160, 300, null, null],
[0, "최상덕", -1, 0, null, 61, 67, 73, 0, 160, 300, null, null],
[0, "홍세완", -1, 0, null, 67, 72, 39, 0, 160, 300, null, null],
[0, "리오스", -1, 0, null, 81, 76, 71, 0, 160, 300, null, null],
[0, "차일목", -1, 0, null, 38, 31, 34, 0, 160, 300, null, null],
[0, "진필중", -1, 0, null, 79, 83, 75, 0, 160, 300, null, null],
[0, "유동훈", -1, 0, null, 74, 51, 64, 0, 160, 300, null, null],
[0, "이재주", -1, 0, null, 48, 77, 6, 0, 160, 300, null, null],
[0, "심재학", -1, 0, null, 66, 75, 26, 0, 160, 300, null, null],
[0, "이용규", -1, 0, null, 86, 20, 86, 0, 160, 300, null, null],
[0, "윤석민", -1, 0, null, 86, 79, 81, 0, 160, 300, null, null, "죄송합니다 제가 공황장애가 와서.."],
[0, "조규제", -1, 0, null, 83, 76, 58, 0, 160, 300, null, null],
[0, "한기주", -1, 0, null, 72, 57, 58, 0, 160, 300, null, null, "속이 꽉찬 남자 99.9"],
[0, "이동현", -1, 0, null, 71, 63, 50, 0, 160, 300, null, null],
[0, "김원섭", -1, 0, null, 67, 29, 77, 0, 160, 300, null, null],
[0, "신동주", -1, 0, null, 68, 76, 79, 0, 160, 300, null, null],
[0, "김진우", -1, 0, null, 70, 72, 59, 0, 160, 300, null, null],
[0, "최희섭", -1, 0, null, 82, 79, 29, 0, 160, 300, null, null, "형 저 메이저리거에요"],
[0, "서재응", -1, 0, null, 67, 69, 80, 0, 160, 300, null, null],
[0, "나지완", -1, 0, null, 76, 81, 33, 0, 160, 300, null, null],
[0, "채종범", -1, 0, null, 60, 48, 31, 0, 160, 300, null, null],
[0, "로페즈", -1, 0, null, 73, 67, 80, 0, 160, 300, null, null],
[0, "안치홍", -1, 0, null, 83, 67, 73, 0, 160, 300, null, null],
[0, "양현종", -1, 0, null, 75, 78, 72, 0, 160, 300, null, null],
[0, "김선빈", -1, 0, null, 86, 16, 76, 0, 160, 300, null, null],
[0, "이범호", -1, 0, null, 67, 88, 48, 0, 160, 300, null, null, "꽃보다 아름다운 남자"],
[0, "김상현", -1, 0, null, 53, 82, 50, 0, 160, 300, null, null],
[0, "이대형", -1, 0, null, 74, 12, 94, 0, 160, 300, null, null, "누구보다 빠르게 난 남들과는 다르게"],
[0, "김병현", -1, 0, null, 97, 92, 73, 0, 160, 300, null, "필살"],
[0, "박찬호", -1, 0, null, 102, 103, 96, 0, 160, 300, null, "위압", "안녕하세요 제가 LA에 있을 시절부터 놀란 라이언같은 투수가 되고 싶었는데요. 그래서 런닝도 하고 웨이트도 하다보니 어느덧 강속구 투수가 되어서…"],
[0, "송은범", -1, 0, null, 60, 57, 63, 0, 160, 300, null, null],
[0, "심수창", -1, 0, null, 40, 53, 39, 0, 160, 300, null, null],
[0, "윤규진", -1, 0, null, 53, 60, 38, 0, 160, 300, null, null],
[0, "정우람", -1, 0, null, 81, 76, 79, 0, 160, 300, null, null],
[0, "김태균", -1, 0, null, 91, 91, 36, 0, 160, 300, null, "필살"],
[0, "송광민", -1, 0, null, 80, 72, 19, 0, 160, 300, null, null],
[0, "정근우", -1, 0, null, 86, 74, 87, 0, 160, 300, null, null],
[0, "최진행", -1, 0, null, 57, 76, 12, 0, 160, 300, null, null, "약 좀 주세요"],
[0, "한용덕", -1, 0, null, 75, 76, 79, 0, 160, 300, null, null],
[0, "구대성", -1, 0, null, 88, 86, 72, 0, 160, 300, null, null],
[0, "유승안", -1, 0, null, 72, 73, 22, 0, 160, 300, null, null],
[0, "정민철", -1, 0, null, 72, 79, 85, 0, 160, 300, null, null],
[0, "장종훈", -1, 0, null, 81, 94, 83, 0, 160, 300, null, "무쌍", "신고선수의 전설"],
[0, "송진우", -1, 0, null, 80, 83, 86, 0, 160, 300, null, "환술"],
[0, "이강돈", -1, 0, null, 77, 72, 76, 0, 160, 300, null, null],
[0, "이상목", -1, 0, null, 67, 73, 79, 0, 160, 300, null, null],
[0, "한희민", -1, 0, null, 80, 58, 74, 0, 160, 300, null, null],
[0, "류현진", -1, 0, null, 97, 98, 92, 0, 160, 300, null, "위압", "야구는 수비를 믿지 말고 내가 잘해야 이긴다"],
[0, "이정훈", -1, 0, null, 83, 60, 81, 0, 160, 300, null, null],
[0, "이영우", -1, 0, null, 82, 79, 77, 0, 160, 300, null, null],
[0, "동봉철", -1, 0, null, 63, 32, 77, 0, 160, 300, null, null],
[0, "김현수", -1, 0, null, 88, 81, 48, 0, 160, 300, null, null, "사서 쓰라고"],
[0, "추신수", -1, 0, null, 99, 99, 96, 0, 160, 300, null, "무쌍", "Go! Choo! Go! Choo!"],
[0, "최원호", -1, 0, null, 55, 53, 53, 0, 160, 300, null, null],
[0, "신명철", -1, 0, null, 41, 53, 76, 0, 160, 300, null, null],
[0, "백재호", -1, 0, null, 44, 63, 22, 0, 160, 300, null, null],
[0, "노장진", -1, 0, null, 64, 82, 48, 0, 160, 300, null, null],
[0, "조용준", -1, 0, null, 86, 61, 69, 0, 160, 300, null, null],
[0, "이진영", -1, 0, null, 86, 82, 79, 0, 160, 300, null, null, "어디로 던져도 난 머리에 맞는다"],
[0, "장원삼", -1, 0, null, 70, 80, 83, 0, 160, 300, null, null],
[0, "고영민", -1, 0, null, 50, 45, 76, 0, 160, 300, null, null],
[0, "옥스프링", -1, 0, null, 74, 68, 72, 0, 160, 300, null, null],
[0, "사도스키", -1, 0, null, 68, 68, 76, 0, 160, 300, null, null],
[0, "해커", -1, 0, null, 85, 88, 89, 0, 160, 300, null, "집중", "x까! x빨놈아!"],
[0, "브룸바", -1, 0, null, 84, 77, 22, 0, 160, 300, null, null],
[0, "밴헤켄", -1, 0, null, 80, 82, 86, 0, 160, 300, null, "환술"],
[0, "레일리", -1, 0, null, 67, 74, 77, 0, 160, 300, null, null],
[0, "그레이싱어", -1, 0, null, 75, 74, 67, 0, 160, 300, null, null],
[0, "글로버", -1, 0, null, 72, 84, 50, 0, 160, 300, null, null],
[0, "소사", -1, 0, null, 69, 80, 72, 0, 160, 300, null, null],
[0, "레스", -1, 0, null, 76, 74, 51, 0, 160, 300, null, null],
[0, "켈리", -1, 0, null, 73, 77, 70, 0, 160, 300, null, null],
[0, "피어밴드", -1, 0, null, 70, 73, 77, 0, 160, 300, null, null],
[0, "김종훈", -1, 0, null, 67, 54, 71, 0, 160, 300, null, null],
[0, "김태한", -1, 0, null, 52, 41, 41, 0, 160, 300, null, null],
[0, "류명선", -1, 0, null, 60, 54, 34, 0, 160, 300, null, null],
[0, "박충식", -1, 0, null, 78, 61, 77, 0, 160, 300, null, null],
[0, "전병호", -1, 0, null, 66, 41, 57, 0, 160, 300, null, null],
[0, "김대익", -1, 0, null, 70, 34, 70, 0, 160, 300, null, null],
[0, "김상진", -1, 0, null, 54, 41, 66, 0, 160, 300, null, null],
[0, "김실", -1, 0, null, 55, 46, 57, 0, 160, 300, null, null],
[0, "김종호", -1, 0, null, 76, 18, 78, 0, 160, 300, null, null],
[0, "나광남", -1, 0, null, 18, 18, 18, 0, 160, 300, null, null, "오심도 경기의 일부입니다."],
[0, "박석진", -1, 0, null, 71, 49, 63, 0, 160, 300, null, null],
[0, "손인호", -1, 0, null, 55, 32, 51, 0, 160, 300, null, null],
[0, "김일경", -1, 0, null, 49, 12, 56, 0, 160, 300, null, null],
[0, "최동수", -1, 0, null, 61, 33, 45, 0, 160, 300, null, null],
[0, "송구홍", -1, 0, null, 57, 29, 48, 0, 160, 300, null, null],
[0, "김광삼", -1, 0, null, 49, 23, 68, 0, 160, 300, null, null],
[0, "류제국", -1, 0, null, 70, 46, 81, 0, 160, 300, null, null],
[0, "임찬규", -1, 0, null, 59, 55, 60, 0, 160, 300, null, null],
[0, "진해수", -1, 0, null, 49, 63, 50, 0, 160, 300, null, null],
[0, "백승현", -1, 0, null, 40, 54, 55, 0, 160, 300, null, null],
[0, "김용의", -1, 0, null, 60, 41, 35, 0, 160, 300, null, null],
[0, "박지철", -1, 0, null, 70, 51, 62, 0, 160, 300, null, null],
[0, "강성우", -1, 0, null, 77, 21, 61, 0, 160, 300, null, null],
[0, "한문연", -1, 0, null, 70, 51, 36, 0, 160, 300, null, null],
[0, "김민호", -1, 0, null, 82, 73, 31, 0, 160, 300, null, null],
[0, "유두열", -1, 0, null, 73, 54, 67, 0, 160, 300, null, null],
[0, "이종운", -1, 0, null, 76, 12, 81, 0, 160, 300, null, null],
[0, "박현승", -1, 0, null, 49, 46, 23, 0, 160, 300, null, null],
[0, "고원준", -1, 0, null, 47, 41, 43, 0, 160, 300, null, null],
[0, "문동환", -1, 0, null, 79, 69, 45, 0, 160, 300, null, null],
[0, "박동수", -1, 0, null, 73, 64, 52, 0, 160, 300, null, null],
[0, "이현곤", -1, 0, null, 66, 42, 36, 0, 160, 300, null, null, "광고니! 제가 타석에 서면 다음은 광고입니다."],
[0, "신용운", -1, 0, null, 60, 66, 67, 0, 160, 300, null, null],
[0, "장문석", -1, 0, null, 68, 41, 78, 0, 160, 300, null, null],
[0, "이병훈", -1, 0, null, 71, 24, 70, 0, 160, 300, null, null],
[0, "이상화", -1, 0, null, 51, 48, 44, 0, 160, 300, null, null],
[0, "손영민", -1, 0, null, 55, 41, 49, 0, 160, 300, null, null],
[0, "곽정철", -1, 0, null, 57, 55, 54, 0, 160, 300, null, null],
[0, "이범석", -1, 0, null, 67, 41, 54, 0, 160, 300, null, null],
[0, "조도연", -1, 0, null, 70, 66, 54, 0, 160, 300, null, null],
[0, "김무종", -1, 0, null, 66, 55, 41, 0, 160, 300, null, null],
[0, "강봉규", -1, 0, null, 70, 67, 44, 0, 160, 300, null, null],
[0, "김진욱", -1, 0, null, 51, 55, 41, 0, 160, 300, null, null],
[0, "변진수", -1, 0, null, 40, 51, 48, 0, 160, 300, null, null],
[0, "손혁", -1, 0, null, 59, 58, 61, 0, 160, 300, null, null],
[0, "오재일", -1, 0, null, 58, 71, 41, 0, 160, 300, null, null],
[0, "이도형", -1, 0, null, 43, 61, 40, 0, 160, 300, null, null],
[0, "이원석", -1, 0, null, 50, 60, 34, 0, 160, 300, null, null],
[0, "진야곱", -1, 0, null, 48, 51, 47, 0, 160, 300, null, null],
[0, "채상병", -1, 0, null, 41, 43, 61, 0, 160, 300, null, null],
[0, "추성건", -1, 0, null, 40, 50, 61, 0, 160, 300, null, null],
[0, "홍원기", -1, 0, null, 51, 43, 66, 0, 160, 300, null, null],
[0, "가내영", -1, 0, null, 46, 42, 51, 0, 160, 300, null, null],
[0, "김신부", -1, 0, null, 51, 36, 41, 0, 160, 300, null, null],
[0, "김홍집", -1, 0, null, 61, 51, 66, 0, 160, 300, null, null],
[0, "안병원", -1, 0, null, 59, 41, 71, 0, 160, 300, null, null],
[0, "임호균", -1, 0, null, 66, 46, 73, 0, 160, 300, null, null],
[0, "조웅천", -1, 0, null, 82, 67, 84, 0, 160, 300, null, null],
[0, "최창호", -1, 0, null, 83, 71, 79, 0, 160, 300, null, null],
[0, "김동기", -1, 0, null, 62, 81, 22, 0, 160, 300, null, null],
[0, "김바위", -1, 0, null, 44, 70, 23, 0, 160, 300, null, null],
[0, "김성갑", -1, 0, null, 50, 44, 61, 0, 160, 300, null, null],
[0, "김기덕", -1, 0, null, 60, 23, 66, 0, 160, 300, null, null],
[0, "김호", -1, 0, null, 53, 32, 71, 0, 160, 300, null, null],
[0, "김광림", -1, 0, null, 61, 60, 60, 0, 160, 300, null, null],
[0, "조원우", -1, 0, null, 59, 41, 63, 0, 160, 300, null, null],
[0, "심성보", -1, 0, null, 54, 56, 41, 0, 160, 300, null, null],
[0, "오봉옥", -1, 0, null, 43, 41, 61, 0, 160, 300, null, null],
[0, "구대진", -1, 0, null, 40, 32, 36, 0, 160, 300, null, null],
[0, "최해식", -1, 0, null, 57, 41, 60, 0, 160, 300, null, null],
[0, "이종두", -1, 0, null, 70, 31, 70, 0, 160, 300, null, null],
[0, "노진혁", -1, 0, null, 51, 43, 45, 0, 160, 300, null, null],
[0, "김건우", -1, 0, null, 78, 61, 60, 0, 160, 300, null, null],
[0, "이용철", -1, 0, null, 71, 77, 42, 0, 160, 300, null, null],
[0, "오재영", -1, 0, null, 69, 68, 71, 0, 160, 300, null, null],
[0, "배영섭", -1, 0, null, 70, 16, 81, 0, 160, 300, null, null],
[0, "구자욱", -1, 0, null, 73, 59, 72, 0, 160, 300, null, null],
[0, "신재영", -1, 0, null, 64, 66, 62, 0, 160, 300, null, null]
],
"general_ex":[
],
"cities":[
],
"history":[
"<C>●</>180년 1월:<L><b>【이벤트】</b></>제작자: 세정.",
"<C>●</>180년 1월:<L><b>【이벤트】</b></>KBO 올스타가 삼모전과 함께합니다."
],
"initialEvents":[
],
"events":[
]
}
+1 -1
View File
@@ -1,6 +1,6 @@
{
"title":"【역사모드4】 황제는 허도로",
"startYear":196,
"startYear":193,
"life":1,
"fiction":0,
"nation":[
+1 -1
View File
@@ -1,6 +1,6 @@
{
"title":"【역사모드5】 관도대전",
"startYear":200,
"startYear":197,
"life":1,
"fiction":0,
"nation":[

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