Compare commits
73
Commits
9d25d5cc73
...
v0.7.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
69b0a80684 | ||
|
|
48f0c56a9e | ||
|
|
83833a3693 | ||
|
|
18429d52d4 | ||
|
|
58cc90083b | ||
|
|
2772161144 | ||
|
|
0e95259b14 | ||
|
|
3d9f38f1e3 | ||
|
|
ba3accd834 | ||
|
|
0786e40ebd | ||
|
|
8a56393159 | ||
|
|
5ca8a6ecfa | ||
|
|
5c82edc4be | ||
|
|
093c04bc24 | ||
|
|
131dd46a38 | ||
|
|
6b1b4fdfbb | ||
|
|
e4ad779b37 | ||
|
|
65d817624e | ||
|
|
66501189c4 | ||
|
|
4303898bb8 | ||
|
|
7d76a9d3ed | ||
|
|
1cc42f341b | ||
|
|
0b41ee0a29 | ||
|
|
66b6c4d04f | ||
|
|
6502843d6c | ||
|
|
5ecfe72e19 | ||
|
|
f28cdefffe | ||
|
|
40494f2cf1 | ||
|
|
f2664c112b | ||
|
|
41d91df355 | ||
|
|
965671dd93 | ||
|
|
c8d08e4b2c | ||
|
|
2897a9b484 | ||
|
|
d190e59d83 | ||
|
|
0bb25e8773 | ||
|
|
37e1903cb1 | ||
|
|
b402846d43 | ||
|
|
c1a6dd385a | ||
|
|
ccbef236d3 | ||
|
|
d7b9e8b2e0 | ||
|
|
deaf77d3d0 | ||
|
|
5c738f97ed | ||
|
|
c9f7f7ab08 | ||
|
|
746977d5d0 | ||
|
|
acb09bfe71 | ||
|
|
e2a1203b43 | ||
|
|
124036cea6 | ||
|
|
2ac1d82826 | ||
|
|
fa4e0c1948 | ||
|
|
735427ead0 | ||
|
|
4fa99a7e1b | ||
|
|
2f963a205a | ||
|
|
1f03f7e7c3 | ||
|
|
31689fb6ba | ||
|
|
cf7ebbd314 | ||
|
|
40a953aed5 | ||
|
|
c4d999ada7 | ||
|
|
fff6b4e155 | ||
|
|
380e08d89f | ||
|
|
96c8199092 | ||
|
|
54870cf067 | ||
|
|
8654447aac | ||
|
|
28a690cbba | ||
|
|
52d1a48c0b | ||
|
|
f45333db5e | ||
|
|
c920e45934 | ||
|
|
dd86ef4591 | ||
|
|
b9fb00f042 | ||
|
|
355d9fd995 | ||
|
|
b68c13c4f2 | ||
|
|
f2803291ab | ||
|
|
54df034c77 | ||
|
|
7317b8bc18 |
@@ -15,6 +15,7 @@ d_log/*.txt
|
||||
d_log/*.zip
|
||||
sess_*
|
||||
*/logs/*.txt
|
||||
*/logs/*/*.txt
|
||||
err.txt
|
||||
che/.htaccess
|
||||
kwe/.htaccess
|
||||
@@ -43,3 +44,4 @@ test.php
|
||||
/twe
|
||||
|
||||
phpinfo.php
|
||||
vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/*
|
||||
|
||||
Vendored
+1
-1
@@ -5,7 +5,7 @@
|
||||
"**/.hg": true,
|
||||
"**/CVS": true,
|
||||
"**/.DS_Store": true,
|
||||
"**/logs/*.txt": true,
|
||||
"**/logs/**/*.txt": true,
|
||||
"**/session/sess*":true,
|
||||
"/che":true,
|
||||
"/kwe":true,
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
* Apache2
|
||||
* <code>mpm_event</code> 권장
|
||||
* PHP 7.0 이상
|
||||
* PHP 7.2 이상
|
||||
* <code>php-fpm</code> 권장
|
||||
* php에서 curl을 실행가능해야 합니다.
|
||||
* MySQL 5.6 이상, 또는 MariaDB 10.0 이상
|
||||
@@ -32,13 +32,13 @@ sudo -u www-data git clone ssh://git@storage.hided.net:2525/devsam/core.git
|
||||
git clone ssh://git@storage.hided.net:2525/devsam/image.git
|
||||
```
|
||||
|
||||
> 이미지는 별도의 업데이트 기능을 제공하지 않습니다. 수동으로 <code>git pull</code>을 해야합니다.
|
||||
> 이미지는 git hook을 이용한 업데이트 기능을 제공하지만 아직 범용성 있는 설계가 되어있진 않습니다.
|
||||
|
||||
### 설치
|
||||
|
||||
이후 해당 경로를 웹 브라우저를 통해 접근하여 설치를 진행할 수 있습니다.
|
||||
|
||||
Database 수는 로그인 관리 서버 1개, 내부 서버 5개로, 총 6개의 Database가 필요합니다. 내부 설정을 고쳐서 서버 수를 늘리거나 줄일 경우 그에 맞는 Database 수가 필요합니다. 또한 Database마다 관리할 별도의 계정을 만드는 것을 추천합니다.
|
||||
Database 수는 로그인 관리 서버 1개, 내부 서버 7개로, 총 8개의 Database가 필요합니다. 내부 설정을 고쳐서 서버 수를 늘리거나 줄일 경우 그에 맞는 Database 수가 필요합니다. 또한 Database마다 관리할 별도의 계정을 만드는 것을 추천합니다.
|
||||
|
||||
설치 이후에는 서버관리 페이지에서 **업데이트** 명령을 통해 원 클릭 업데이트가 가능합니다.
|
||||
|
||||
|
||||
+3
-1
@@ -17,7 +17,9 @@
|
||||
"vlucas/valitron": "^1.4",
|
||||
"php-extended/php-tail": "^2.1",
|
||||
"pguardiario/phpuri": "^1.0",
|
||||
"symfony/lock": "^3.4"
|
||||
"symfony/lock": "^4.1",
|
||||
"ezyang/htmlpurifier": "^4.10",
|
||||
"xemlock/htmlpurifier-html5": "^0.1.7"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
||||
Generated
+135
-153
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "a329d39be5161c87438d41f9adf4417b",
|
||||
"content-hash": "43da7d5e9d8441faa4311f32b16ee1c0",
|
||||
"packages": [
|
||||
{
|
||||
"name": "brandonwamboldt/utilphp",
|
||||
@@ -52,6 +52,53 @@
|
||||
],
|
||||
"time": "2015-02-02T17:56:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "ezyang/htmlpurifier",
|
||||
"version": "v4.10.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/ezyang/htmlpurifier.git",
|
||||
"reference": "d85d39da4576a6934b72480be6978fb10c860021"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/d85d39da4576a6934b72480be6978fb10c860021",
|
||||
"reference": "d85d39da4576a6934b72480be6978fb10c860021",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"simpletest/simpletest": "^1.1"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"HTMLPurifier": "library/"
|
||||
},
|
||||
"files": [
|
||||
"library/HTMLPurifier.composer.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"LGPL"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Edward Z. Yang",
|
||||
"email": "admin@htmlpurifier.org",
|
||||
"homepage": "http://ezyang.com"
|
||||
}
|
||||
],
|
||||
"description": "Standards compliant HTML filter written in PHP",
|
||||
"homepage": "http://htmlpurifier.org/",
|
||||
"keywords": [
|
||||
"html"
|
||||
],
|
||||
"time": "2018-02-23T01:58:20+00:00"
|
||||
},
|
||||
{
|
||||
"name": "firephp/firephp-core",
|
||||
"version": "v0.4.0",
|
||||
@@ -90,16 +137,16 @@
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/guzzle",
|
||||
"version": "6.3.2",
|
||||
"version": "6.3.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/guzzle.git",
|
||||
"reference": "68d0ea14d5a3f42a20e87632a5f84931e2709c90"
|
||||
"reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/68d0ea14d5a3f42a20e87632a5f84931e2709c90",
|
||||
"reference": "68d0ea14d5a3f42a20e87632a5f84931e2709c90",
|
||||
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba",
|
||||
"reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -109,7 +156,7 @@
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-curl": "*",
|
||||
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4",
|
||||
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
|
||||
"psr/log": "^1.0"
|
||||
},
|
||||
"suggest": {
|
||||
@@ -151,7 +198,7 @@
|
||||
"rest",
|
||||
"web service"
|
||||
],
|
||||
"time": "2018-03-26T16:33:04+00:00"
|
||||
"time": "2018-04-22T15:46:56+00:00"
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/promises",
|
||||
@@ -271,16 +318,16 @@
|
||||
},
|
||||
{
|
||||
"name": "leafo/scssphp",
|
||||
"version": "v0.7.5",
|
||||
"version": "v0.7.6",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/leafo/scssphp.git",
|
||||
"reference": "8b538d828bbb75276974605c4a1a435e939da74e"
|
||||
"reference": "585f6ae84de62ffecf69c23805f25d78d7e4b794"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/leafo/scssphp/zipball/8b538d828bbb75276974605c4a1a435e939da74e",
|
||||
"reference": "8b538d828bbb75276974605c4a1a435e939da74e",
|
||||
"url": "https://api.github.com/repos/leafo/scssphp/zipball/585f6ae84de62ffecf69c23805f25d78d7e4b794",
|
||||
"reference": "585f6ae84de62ffecf69c23805f25d78d7e4b794",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -319,7 +366,7 @@
|
||||
"scss",
|
||||
"stylesheet"
|
||||
],
|
||||
"time": "2018-02-09T02:04:21+00:00"
|
||||
"time": "2018-05-24T02:18:53+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/plates",
|
||||
@@ -454,54 +501,6 @@
|
||||
],
|
||||
"time": "2017-06-19T01:22:40+00:00"
|
||||
},
|
||||
{
|
||||
"name": "paragonie/random_compat",
|
||||
"version": "v2.0.12",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/paragonie/random_compat.git",
|
||||
"reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/258c89a6b97de7dfaf5b8c7607d0478e236b04fb",
|
||||
"reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "4.*|5.*"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"lib/random.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Paragon Initiative Enterprises",
|
||||
"email": "security@paragonie.com",
|
||||
"homepage": "https://paragonie.com"
|
||||
}
|
||||
],
|
||||
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
|
||||
"keywords": [
|
||||
"csprng",
|
||||
"pseudorandom",
|
||||
"random"
|
||||
],
|
||||
"time": "2018-04-04T21:24:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "pguardiario/phpuri",
|
||||
"version": "1.0",
|
||||
@@ -528,16 +527,16 @@
|
||||
},
|
||||
{
|
||||
"name": "php-extended/php-system",
|
||||
"version": "1.3.0",
|
||||
"version": "1.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-extended/php-system.git",
|
||||
"reference": "66727d5dc0a665916bd7e08bcfb9820e7be1d20c"
|
||||
"url": "https://gitlab.com/php-extended/php-system.git",
|
||||
"reference": "9e6b3c2009ef56dc123efc43900e40cdf217ace0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-extended/php-system/zipball/66727d5dc0a665916bd7e08bcfb9820e7be1d20c",
|
||||
"reference": "66727d5dc0a665916bd7e08bcfb9820e7be1d20c",
|
||||
"url": "https://gitlab.com/api/v4/projects/php-extended%2Fphp-system/repository/archive.zip?sha=9e6b3c2009ef56dc123efc43900e40cdf217ace0",
|
||||
"reference": "9e6b3c2009ef56dc123efc43900e40cdf217ace0",
|
||||
"shasum": ""
|
||||
},
|
||||
"type": "library",
|
||||
@@ -553,31 +552,31 @@
|
||||
"authors": [
|
||||
{
|
||||
"name": "Anastaszor",
|
||||
"role": "developer"
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "A generic way to find informations about the running system",
|
||||
"homepage": "https://github.com/php-extended/php-system",
|
||||
"homepage": "https://gitlab.com/php-extended/php-system",
|
||||
"keywords": [
|
||||
"operating system",
|
||||
"os",
|
||||
"php",
|
||||
"system"
|
||||
],
|
||||
"time": "2017-01-14T11:56:24+00:00"
|
||||
"time": "2018-06-07T06:03:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "php-extended/php-tail",
|
||||
"version": "2.1.1",
|
||||
"version": "2.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-extended/php-tail.git",
|
||||
"reference": "eabf7bee64f8c30fe9b9e1176562fdb903c54ae7"
|
||||
"url": "https://gitlab.com/php-extended/php-tail.git",
|
||||
"reference": "19fbd3a79ccc071954f28296b2c44754335304a0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-extended/php-tail/zipball/eabf7bee64f8c30fe9b9e1176562fdb903c54ae7",
|
||||
"reference": "eabf7bee64f8c30fe9b9e1176562fdb903c54ae7",
|
||||
"url": "https://gitlab.com/api/v4/projects/php-extended%2Fphp-tail/repository/archive.zip?sha=19fbd3a79ccc071954f28296b2c44754335304a0",
|
||||
"reference": "19fbd3a79ccc071954f28296b2c44754335304a0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -596,11 +595,11 @@
|
||||
"authors": [
|
||||
{
|
||||
"name": "Anastaszor",
|
||||
"role": "developer"
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "A smart way to tail files depending of the environment",
|
||||
"homepage": "https://github.com/php-extended/php-tail",
|
||||
"homepage": "https://gitlab.com/php-extended/php-tail",
|
||||
"keywords": [
|
||||
"cheat",
|
||||
"mighty",
|
||||
@@ -608,7 +607,7 @@
|
||||
"php",
|
||||
"tail"
|
||||
],
|
||||
"time": "2017-07-25T13:52:42+00:00"
|
||||
"time": "2018-06-07T06:04:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/http-message",
|
||||
@@ -752,22 +751,21 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/lock",
|
||||
"version": "v3.4.9",
|
||||
"version": "v4.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/lock.git",
|
||||
"reference": "3a707193326d31603824706e34a95af899a59788"
|
||||
"reference": "a1df50492e927ad00ca271f29adb2949a14f2a5a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/lock/zipball/3a707193326d31603824706e34a95af899a59788",
|
||||
"reference": "3a707193326d31603824706e34a95af899a59788",
|
||||
"url": "https://api.github.com/repos/symfony/lock/zipball/a1df50492e927ad00ca271f29adb2949a14f2a5a",
|
||||
"reference": "a1df50492e927ad00ca271f29adb2949a14f2a5a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^5.5.9|>=7.0.8",
|
||||
"psr/log": "~1.0",
|
||||
"symfony/polyfill-php70": "~1.0"
|
||||
"php": "^7.1.3",
|
||||
"psr/log": "~1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"predis/predis": "~1.0"
|
||||
@@ -775,7 +773,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.4-dev"
|
||||
"dev-master": "4.1-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -810,96 +808,40 @@
|
||||
"redlock",
|
||||
"semaphore"
|
||||
],
|
||||
"time": "2018-04-29T14:44:26+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php70",
|
||||
"version": "v1.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php70.git",
|
||||
"reference": "77454693d8f10dd23bb24955cffd2d82db1007a6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/77454693d8f10dd23bb24955cffd2d82db1007a6",
|
||||
"reference": "77454693d8f10dd23bb24955cffd2d82db1007a6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"paragonie/random_compat": "~1.0|~2.0",
|
||||
"php": ">=5.3.3"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.8-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\Polyfill\\Php70\\": ""
|
||||
},
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
],
|
||||
"classmap": [
|
||||
"Resources/stubs"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nicolas Grekas",
|
||||
"email": "p@tchwork.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"compatibility",
|
||||
"polyfill",
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"time": "2018-04-26T10:06:28+00:00"
|
||||
"time": "2018-05-30T07:26:09+00:00"
|
||||
},
|
||||
{
|
||||
"name": "vlucas/valitron",
|
||||
"version": "v1.4.2",
|
||||
"version": "v1.4.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/vlucas/valitron.git",
|
||||
"reference": "87775d76268beda2afa085bdd6e44b17e98907c6"
|
||||
"reference": "3c5463315bfa23b17f8949b100a960d035234e43"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/vlucas/valitron/zipball/87775d76268beda2afa085bdd6e44b17e98907c6",
|
||||
"reference": "87775d76268beda2afa085bdd6e44b17e98907c6",
|
||||
"url": "https://api.github.com/repos/vlucas/valitron/zipball/3c5463315bfa23b17f8949b100a960d035234e43",
|
||||
"reference": "3c5463315bfa23b17f8949b100a960d035234e43",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~4.0"
|
||||
"phpunit/phpunit": "^4.8.35 || ^5.5 || ^6.5"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-mbstring": "It can support the multiple bytes string length."
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Valitron": "src/"
|
||||
"psr-4": {
|
||||
"Valitron\\": "src/Valitron"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"BSD"
|
||||
"BSD-3-Clause"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
@@ -915,7 +857,47 @@
|
||||
"validation",
|
||||
"validator"
|
||||
],
|
||||
"time": "2017-10-30T23:15:06+00:00"
|
||||
"time": "2018-05-06T10:45:26+00:00"
|
||||
},
|
||||
{
|
||||
"name": "xemlock/htmlpurifier-html5",
|
||||
"version": "v0.1.7",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/xemlock/htmlpurifier-html5.git",
|
||||
"reference": "b4b35e51ec75e0207c23035f7d9a354bdcdac359"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/xemlock/htmlpurifier-html5/zipball/b4b35e51ec75e0207c23035f7d9a354bdcdac359",
|
||||
"reference": "b4b35e51ec75e0207c23035f7d9a354bdcdac359",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ezyang/htmlpurifier": "^4.7",
|
||||
"php": ">=5.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "4.7.*|5.7.*"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"library/HTMLPurifier/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "xemlock",
|
||||
"email": "xemlock@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "HTML Purifier definitions for HTML5 elements",
|
||||
"time": "2018-06-07T14:30:17+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
|
||||
Binary file not shown.
Vendored
+1
File diff suppressed because one or more lines are too long
Vendored
+1
File diff suppressed because one or more lines are too long
@@ -2,6 +2,7 @@
|
||||
namespace sammo;
|
||||
|
||||
define('ROOT', realpath(__dir__.'/..'));
|
||||
setlocale(LC_ALL, 'ko_KR.UTF-8');
|
||||
date_default_timezone_set('Asia/Seoul');
|
||||
mb_internal_encoding("UTF-8");
|
||||
mb_http_output('UTF-8');
|
||||
|
||||
@@ -29,7 +29,7 @@ CREATE TABLE `member` (
|
||||
`NAME` VARCHAR(64) NOT NULL,
|
||||
`PICTURE` VARCHAR(64) NULL DEFAULT 'default.jpg',
|
||||
`IMGSVR` INT(1) NULL DEFAULT '0',
|
||||
`acl` TEXT NOT NULL COMMENT 'json',
|
||||
`acl` text NOT NULL DEFAULT '{}' COMMENT 'json',
|
||||
`GRADE` INT(1) NULL DEFAULT '1',
|
||||
`REG_NUM` INT(3) NULL DEFAULT '0',
|
||||
`REG_DATE` DATETIME NOT NULL,
|
||||
|
||||
+14
-1
@@ -13,11 +13,11 @@ if($session->userGrade < 5) {
|
||||
|
||||
$btn = Util::getReq('btn');
|
||||
$genlist = Util::getReq('genlist', 'array_int');
|
||||
$msg = Util::getReq('msg','string', '메시지');
|
||||
|
||||
extractMissingPostToGlobals();
|
||||
|
||||
$db = DB::db();
|
||||
$connect=$db->get();
|
||||
|
||||
//NOTE: 왜 기능이 admin2와 admin4가 같이 있는가?
|
||||
//NOTE: 왜 블럭 시 admin4에선 금쌀을 없애지 않는가?
|
||||
@@ -57,7 +57,20 @@ switch($btn) {
|
||||
case "메세지 전달":
|
||||
//TODO:새 갠메 시스템으로 변경
|
||||
$date = date('Y-m-d H:i:s');
|
||||
$src = MessageTarget::buildQuick($session->generalID);
|
||||
for($i=0; $i < count($genlist); $i++) {
|
||||
$msgObj = new Message(
|
||||
Message::MSGTYPE_PRIVATE,
|
||||
$src,
|
||||
MessageTarget::buildQuick($genlist[$i]),
|
||||
$msg,
|
||||
new DateTime(),
|
||||
new \DateTime('9999-12-31'),
|
||||
[]
|
||||
);
|
||||
if($msgObj){
|
||||
$msgObj->send(true);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
+135
-283
@@ -14,19 +14,9 @@ $userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
$connect=$db->get();
|
||||
|
||||
increaseRefresh("명장일람", 2);
|
||||
increaseRefresh("명장일람", 1);
|
||||
|
||||
$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);
|
||||
|
||||
$con = checkLimit($me['con']);
|
||||
if ($con >= 2) {
|
||||
printLimitMsg($me['turntime']);
|
||||
exit();
|
||||
}
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
@@ -36,14 +26,14 @@ if ($con >= 2) {
|
||||
<title><?=UniqueConst::$serverName?>: 명장일람</title>
|
||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
||||
<?=WebUtil::printCSS('css/common.css')?>
|
||||
|
||||
<?=WebUtil::printCSS('css/hallOfFame.css')?>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<table align=center width=1000 class='tb_layout bg0'>
|
||||
<table align=center width=1100 class='tb_layout bg0'>
|
||||
<tr><td>명 장 일 람<br><?=closeButton()?></td></tr>
|
||||
</table>
|
||||
<table align=center width=1000 class='tb_layout bg0'>
|
||||
<table align=center width=1100 class='tb_layout bg0'>
|
||||
<form name=form1 action=a_bestGeneral.php method=post>
|
||||
<tr><td align=center>
|
||||
<input type=submit name=btn value='유저 보기'>
|
||||
@@ -51,294 +41,156 @@ if ($con >= 2) {
|
||||
</td></tr>
|
||||
</form>
|
||||
</table>
|
||||
<table align=center width=1000 class='tb_layout bg0'>
|
||||
<div style="margin:auto;width=1000px;">
|
||||
<?php
|
||||
if (isset($btn) && $btn == "NPC 보기") {
|
||||
//FIXME: query가 너무 적나라.
|
||||
$sel = "npc>=2";
|
||||
} else {
|
||||
$sel = "npc<2";
|
||||
}
|
||||
|
||||
$nationName = ['재야'];
|
||||
$nationColor = ['#000000'];
|
||||
|
||||
$nationName = [0=>'재야'];
|
||||
$nationColor = [0=>'#000000'];
|
||||
foreach (getAllNationStaticInfo() as $nation) {
|
||||
$nationName[$nation['nation']] = $nation['name'];
|
||||
$nationColor[$nation['nation']] = $nation['color'];
|
||||
}
|
||||
|
||||
$type = array(
|
||||
"명 성",
|
||||
"계 급",
|
||||
"계 략 성 공",
|
||||
"전 투 횟 수",
|
||||
"승 리",
|
||||
"승 률",
|
||||
"사 살",
|
||||
"살 상 률",
|
||||
"보 병 숙 련 도",
|
||||
"궁 병 숙 련 도",
|
||||
"기 병 숙 련 도",
|
||||
"귀 병 숙 련 도",
|
||||
"차 병 숙 련 도",
|
||||
"전 력 전 승 률",
|
||||
"통 솔 전 승 률",
|
||||
"일 기 토 승 률",
|
||||
"설 전 승 률",
|
||||
"베 팅 투 자 액",
|
||||
"베 팅 당 첨",
|
||||
"베 팅 수 익 금",
|
||||
"베 팅 수 익 률"
|
||||
);
|
||||
$types = [
|
||||
["명 성", "int", function($v){$v['value'] = $v['experience']; return $v; }],
|
||||
["계 급", "int", function($v){$v['value'] = $v['dedication']; return $v; }],
|
||||
["계 략 성 공", "int", function($v){
|
||||
$v['value'] = $v['firenum'];
|
||||
$v['nationName'] = '???';
|
||||
$v['pictureFullPath'] = GetImageURL(0)."/default.jpg";
|
||||
$v['name'] = '???';
|
||||
$v['owner_name'] = null;
|
||||
$v['bgColor'] = GameConst::$basecolor4;
|
||||
$v['fgColor'] = newColor($v['bgColor']);
|
||||
return $v;
|
||||
}],
|
||||
["전 투 횟 수", "int", function($v){$v['value'] = $v['warnum']; return $v; }],
|
||||
["승 리", "int", function($v){$v['value'] = $v['killnum']; return $v; }],
|
||||
["승 률", "percent", function($v){$v['value'] = $v['killnum'] / max(1, $v['warnum']); return $v; }],
|
||||
["사 살", "int", function($v){$v['value'] = $v['killcrew']; return $v; }],
|
||||
["살 상 률", "percent", function($v){$v['value'] = $v['killcrew'] / max(1, $v['deathcrew']); return $v; }],
|
||||
["보 병 숙 련 도", "int", function($v){$v['value'] = $v['dex0']; return $v; }],
|
||||
["궁 병 숙 련 도", "int", function($v){$v['value'] = $v['dex10']; return $v; }],
|
||||
["기 병 숙 련 도", "int", function($v){$v['value'] = $v['dex20']; return $v; }],
|
||||
["귀 병 숙 련 도", "int", function($v){$v['value'] = $v['dex30']; return $v; }],
|
||||
["차 병 숙 련 도", "int", function($v){$v['value'] = $v['dex40']; return $v; }],
|
||||
["전 력 전 승 률", "percent", function($v){$v['value'] = $v['ttw']/max(1, $v['ttw']+$v['ttd']+$v['ttl']); return $v; }],
|
||||
["통 솔 전 승 률", "percent", function($v){$v['value'] = $v['tlw']/max(1, $v['tlw']+$v['tld']+$v['tll']); return $v; }],
|
||||
["일 기 토 승 률", "percent", function($v){$v['value'] = $v['tpw']/max(1, $v['tpw']+$v['tpd']+$v['tpl']); return $v; }],
|
||||
["설 전 승 률", "percent", function($v){$v['value'] = $v['ttw']/max(1, $v['tiw']+$v['tid']+$v['til']); return $v; }],
|
||||
["베 팅 투 자 액", "int", function($v){$v['value'] = $v['betgold']; return $v; }],
|
||||
["베 팅 당 첨", "int", function($v){$v['value'] = $v['betwin']; return $v; }],
|
||||
["베 팅 수 익 금", "int", function($v){$v['value'] = $v['betwingold']; return $v; }],
|
||||
["베 팅 수 익 률", "percent", function($v){$v['value'] = $v['betwingold']/max(1, $v['betgold']); return $v; }],
|
||||
];
|
||||
|
||||
|
||||
for ($i=0; $i < 21; $i++) {
|
||||
$name = [];
|
||||
$data = [];
|
||||
$color = [];
|
||||
$pic = [];
|
||||
|
||||
//FIXME: 쿼리에 index를 사용할 수 없는 녀석들이 있다. 그냥 모두 받아서 일괄 처리하는게 더 나을 수도 있음.
|
||||
switch ($i) {
|
||||
case 0: $query = "select nation,no,name,picture,imgsvr,experience as data from general where $sel order by data desc limit 0,10"; break;
|
||||
case 1: $query = "select nation,no,name,picture,imgsvr,dedication as data from general where $sel order by data desc limit 0,10"; break;
|
||||
case 2: $query = "select nation,no,name,picture,imgsvr,firenum as data from general where $sel order by data desc limit 0,10"; break;
|
||||
case 3: $query = "select nation,no,name,picture,imgsvr,warnum as data from general where $sel order by data desc limit 0,10"; break;
|
||||
case 4: $query = "select nation,no,name,picture,imgsvr,killnum as data from general where $sel order by data desc limit 0,10"; break;
|
||||
case 5: $query = "select nation,no,name,picture,imgsvr,killnum/warnum*10000 as data from general where warnum>=10 and $sel order by data desc limit 0,10"; break;
|
||||
case 6: $query = "select nation,no,name,picture,imgsvr,killcrew as data from general where $sel order by data desc limit 0,10"; break;
|
||||
case 7: $query = "select nation,no,name,picture,imgsvr,killcrew/deathcrew*10000 as data from general where warnum>=10 and $sel order by data desc limit 0,10"; break;
|
||||
case 8: $query = "select nation,no,name,picture,imgsvr,dex0 as data from general where $sel order by data desc limit 0,10"; break;
|
||||
case 9: $query = "select nation,no,name,picture,imgsvr,dex10 as data from general where $sel order by data desc limit 0,10"; break;
|
||||
case 10: $query = "select nation,no,name,picture,imgsvr,dex20 as data from general where $sel order by data desc limit 0,10"; break;
|
||||
case 11: $query = "select nation,no,name,picture,imgsvr,dex30 as data from general where $sel order by data desc limit 0,10"; break;
|
||||
case 12: $query = "select nation,no,name,picture,imgsvr,dex40 as data from general where $sel order by data desc limit 0,10"; break;
|
||||
case 13: $query = "select nation,no,name,picture,imgsvr,ttw/(ttw+ttd+ttl)*10000 as data from general where $sel and (ttw+ttd+ttl)>=50 order by data desc limit 0,10"; break;
|
||||
case 14: $query = "select nation,no,name,picture,imgsvr,tlw/(tlw+tld+tll)*10000 as data from general where $sel and (tlw+tld+tll)>=50 order by data desc limit 0,10"; break;
|
||||
case 15: $query = "select nation,no,name,picture,imgsvr,tpw/(tpw+tpd+tpl)*10000 as data from general where $sel and (tpw+tpd+tpl)>=50 order by data desc limit 0,10"; break;
|
||||
case 16: $query = "select nation,no,name,picture,imgsvr,tiw/(tiw+tid+til)*10000 as data from general where $sel and (tiw+tid+til)>=50 order by data desc limit 0,10"; break;
|
||||
case 17: $query = "select nation,no,name,picture,imgsvr,betgold as data from general where $sel order by data desc limit 0,10"; break;
|
||||
case 18: $query = "select nation,no,name,picture,imgsvr,betwin as data from general where $sel order by data desc limit 0,10"; break;
|
||||
case 19: $query = "select nation,no,name,picture,imgsvr,betwingold as data from general where $sel order by data desc limit 0,10"; break;
|
||||
case 20: $query = "select nation,no,name,picture,imgsvr,betwingold/betgold*10000 as data from general where $sel and betgold >= 1000 order by data desc limit 0,10"; break;
|
||||
$generals = array_map(function($general) use($nationColor, $nationName) {
|
||||
$general['bgColor'] = $nationColor[$general['nation']]??GameConst::$basecolor4;
|
||||
$general['fgColor'] = newColor($general['bgColor']);
|
||||
$general['nationName'] = $nationName[$general['nation']];
|
||||
|
||||
if(key_exists('picture', $general)){
|
||||
$imageTemp = GetImageURL($general['imgsvr']);
|
||||
$general['pictureFullPath'] = "$imageTemp/{$general['picture']}";
|
||||
}
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
|
||||
echo "
|
||||
<tr><td align=center colspan=10 id=bg1><font size=4>$type[$i]</font></td></tr>
|
||||
<tr align=center id=bg2><td>1위</td><td>2위</td><td>3위</td><td>4위</td><td>5위</td><td>6위</td><td>7위</td><td>8위</td><td>9위</td><td>10위</td></tr>
|
||||
<tr>";
|
||||
|
||||
for ($k=0; $k < 10; $k++) {
|
||||
$gen = MYDB_fetch_array($result);
|
||||
|
||||
if ($i != 2) {
|
||||
if (isset($gen)) {
|
||||
$name[$k] = $gen['name'];
|
||||
$nation[$k] = $nationName[$gen['nation']];
|
||||
$data[$k] = $gen['data'];
|
||||
$color[$k] = $nationColor[$gen['nation']];
|
||||
$pic[$k] = $gen['picture'];
|
||||
} else {
|
||||
$name[$k] = "-";
|
||||
$nation[$k] = "-";
|
||||
$data[$k] = "-";
|
||||
$color[$k] = GameConst::$basecolor4;
|
||||
$pic[$k] = "";
|
||||
}
|
||||
} else {
|
||||
$name[$k] = "???";
|
||||
$nation[$k] = "???";
|
||||
$data[$k] = $gen['data'];
|
||||
$color[$k] = GameConst::$basecolor4;
|
||||
$gen['imgsvr'] = 0;
|
||||
$pic[$k] = "9999.jpg";
|
||||
}
|
||||
if ($color[$k] == "") {
|
||||
$color[$k] = GameConst::$basecolor4;
|
||||
}
|
||||
if ($nation[$k] == "") {
|
||||
$nation[$k] = " ";
|
||||
}
|
||||
if ($pic[$k] == "") {
|
||||
echo "<td align=center> </td>";
|
||||
} else {
|
||||
$imageTemp = GetImageURL($gen['imgsvr']);
|
||||
echo "<td align=center><img width='64' height='64' src={$imageTemp}/{$pic[$k]}></td>";
|
||||
}
|
||||
else{
|
||||
$general['pictureFullPath'] = GetImageURL(0)."/default.jpg";
|
||||
}
|
||||
|
||||
echo "</tr><tr>";
|
||||
return $general;
|
||||
}, $db->query(
|
||||
"SELECT nation,no,name,name2 as owner_name, picture, imgsvr,
|
||||
experience, dedication, firenum, warnum, killnum, killcrew, deathcrew,
|
||||
dex0, dex10, dex20, dex30, dex40,
|
||||
ttw, ttd, ttl, tlw, tld, tll, tpw, tpd, tpl, tiw, tid, til,
|
||||
betgold, betwin, betwingold,
|
||||
horse, weap, book, item
|
||||
FROM general WHERE %l", $btn == "NPC 보기"?"npc>=2":"npc<2"));
|
||||
|
||||
for ($k=0; $k < 10; $k++) {
|
||||
echo "<td align=center style=background-color:{$color[$k]};font-size:80%;color:".newColor($color[$k]).">{$nation[$k]}</td>";
|
||||
}
|
||||
|
||||
echo "</tr><tr>";
|
||||
$templates = new \League\Plates\Engine('templates');
|
||||
|
||||
for ($k=0; $k < 10; $k++) {
|
||||
echo "<td align=center style=background-color:{$color[$k]};font-size:80%;color:".newColor($color[$k]).">{$name[$k]}</td>";
|
||||
}
|
||||
foreach($types as $idx=>[$typeName, $typeValue, $typeFunc]){
|
||||
$typeGenerals = array_map(function($general) use($typeValue, $typeFunc){
|
||||
$general = ($typeFunc)($general);
|
||||
$value = $general['value'];
|
||||
|
||||
echo "</tr><tr>";
|
||||
|
||||
for ($k=0; $k < 10; $k++) {
|
||||
if($data[$k] === '-'){
|
||||
//do Nothing
|
||||
if($typeValue == 'percent'){
|
||||
$general['printValue'] = number_format($value*100, 2).'%';
|
||||
}
|
||||
else if ($i == 5 || $i == 7 || $i == 20) {
|
||||
$data[$k] = intdiv($data[$k], 100).".".($data[$k]%100)." %";
|
||||
else {
|
||||
$general['printValue'] = number_format($value);
|
||||
}
|
||||
else if ($i >= 13 && $i <= 16) {
|
||||
$data[$k] = intdiv($data[$k], 100).".".($data[$k]%100)." %";
|
||||
}
|
||||
echo "<td align=center>{$data[$k]}</td>";
|
||||
}
|
||||
echo "</tr><tr><td colspan=10 height=5 id=bg1></td></tr>";
|
||||
return $general;
|
||||
}, $generals);
|
||||
|
||||
usort($typeGenerals, function($lhs, $rhs){
|
||||
//내림차순
|
||||
return -($lhs['value'] - $rhs['value']);
|
||||
});
|
||||
|
||||
echo $templates->render('hallOfFrame', [
|
||||
'typeName'=>$typeName,
|
||||
'generals'=>array_slice($typeGenerals, 0, 10, true)
|
||||
]);
|
||||
}
|
||||
|
||||
echo "
|
||||
</table>
|
||||
<br>
|
||||
<table align=center width=1000 class='tb_layout bg0'>
|
||||
";
|
||||
|
||||
$type = array(
|
||||
"명 마",
|
||||
"명 검",
|
||||
"명 서",
|
||||
"도 구"
|
||||
);
|
||||
|
||||
$call = array(
|
||||
"horse",
|
||||
"weap",
|
||||
"book",
|
||||
"item"
|
||||
);
|
||||
|
||||
$func = array(
|
||||
"\\sammo\\getHorseName",
|
||||
"\\sammo\\getWeapName",
|
||||
"\\sammo\\getBookName",
|
||||
"\\sammo\\getItemName"
|
||||
);
|
||||
|
||||
for ($i=0; $i < 4; $i++) {
|
||||
$name = [];
|
||||
$data = [];
|
||||
$color = [];
|
||||
$pic = [];
|
||||
|
||||
echo "
|
||||
<tr><td align=center colspan=10 id=bg1><font size=4>$type[$i]</font></td></tr>
|
||||
<tr align=center id=bg2>";
|
||||
for ($k=26; $k > 16; $k--) {
|
||||
$str = $func[$i]($k);
|
||||
echo "<td>".$str."</td>";
|
||||
}
|
||||
|
||||
echo "</tr><tr>";
|
||||
|
||||
for ($k=26; $k > 16; $k--) {
|
||||
$query = "select nation,no,name,picture,imgsvr from general where {$call[$i]}={$k}";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
$gen = MYDB_fetch_array($result);
|
||||
if (isset($gen)) {
|
||||
$name[$k] = $gen['name'];
|
||||
$nation[$k] = $nationName[$gen['nation']];
|
||||
$color[$k] = $nationColor[$gen['nation']];
|
||||
$pic[$k] = $gen['picture'];
|
||||
} else {
|
||||
$name[$k] = "미발견";
|
||||
$nation[$k] = "-";
|
||||
$color[$k] = "";
|
||||
$pic[$k] = "";
|
||||
}
|
||||
if ($color[$k] == "") {
|
||||
$color[$k] = GameConst::$basecolor4;
|
||||
}
|
||||
if ($nation[$k] == "") {
|
||||
$nation[$k] = " ";
|
||||
}
|
||||
if ($pic[$k] == "") {
|
||||
echo "<td align=center> </td>";
|
||||
} else {
|
||||
$imageTemp = GetImageURL($gen['imgsvr']??0);
|
||||
echo "<td align=center><img width='64' height='64' src={$imageTemp}/{$pic[$k]}></img></td>";
|
||||
}
|
||||
}
|
||||
|
||||
echo "</tr><tr>";
|
||||
|
||||
for ($k=26; $k > 16; $k--) {
|
||||
echo "<td align=center style=background-color:{$color[$k]};font-size:80%;color:".newColor($color[$k]).">{$nation[$k]}</td>";
|
||||
}
|
||||
|
||||
echo "</tr><tr>";
|
||||
|
||||
for ($k=26; $k > 16; $k--) {
|
||||
echo "<td align=center style=background-color:{$color[$k]};font-size:80%;color:".newColor($color[$k]).">{$name[$k]}</td>";
|
||||
}
|
||||
|
||||
echo "</tr><tr><td colspan=10 height=5 id=bg1></td></tr>";
|
||||
|
||||
echo "
|
||||
<tr align=center id=bg2>";
|
||||
for ($k=16; $k > 6; $k--) {
|
||||
$str = $func[$i]($k);
|
||||
echo "<td>".$str."</td>";
|
||||
}
|
||||
|
||||
echo "</tr><tr>";
|
||||
|
||||
for ($k=16; $k > 6; $k--) {
|
||||
$query = "select nation,no,name,picture,imgsvr from general where {$call[$i]}={$k}";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
$gen = MYDB_fetch_array($result);
|
||||
if (isset($gen)) {
|
||||
$name[$k] = $gen['name'];
|
||||
$nation[$k] = $nationName[$gen['nation']];
|
||||
$color[$k] = $nationColor[$gen['nation']];
|
||||
$pic[$k] = $gen['picture'];
|
||||
} else {
|
||||
$name[$k] = "미발견";
|
||||
$nation[$k] = "-";
|
||||
$color[$k] = "";
|
||||
$pic[$k] = "";
|
||||
}
|
||||
if ($color[$k] == "") {
|
||||
$color[$k] = GameConst::$basecolor4;
|
||||
}
|
||||
if ($nation[$k] == "") {
|
||||
$nation[$k] = " ";
|
||||
}
|
||||
if ($pic[$k] == "") {
|
||||
echo "<td align=center> </td>";
|
||||
} else {
|
||||
$imageTemp = GetImageURL($gen['imgsvr']??0);
|
||||
echo "<td align=center><img width='64' height='64' src={$imageTemp}/{$pic[$k]}></img></td>";
|
||||
}
|
||||
}
|
||||
|
||||
echo "</tr><tr>";
|
||||
|
||||
for ($k=16; $k > 6; $k--) {
|
||||
echo "<td align=center style=background-color:{$color[$k]};font-size:80%;color:".newColor($color[$k]).">{$nation[$k]}</td>";
|
||||
}
|
||||
|
||||
echo "</tr><tr>";
|
||||
|
||||
for ($k=16; $k > 6; $k--) {
|
||||
echo "<td align=center style=background-color:{$color[$k]};font-size:80%;color:".newColor($color[$k]).">{$name[$k]}</td>";
|
||||
}
|
||||
|
||||
echo "</tr><tr><td colspan=10 height=5 id=bg1></td></tr>";
|
||||
}
|
||||
|
||||
?>
|
||||
</table>
|
||||
<table align=center width=1000 class='tb_layout bg0'>
|
||||
</div>
|
||||
<div style="margin:auto;width=1000px;margin-top:5px;">
|
||||
<?php
|
||||
//유니크 아이템 소유자
|
||||
$itemTypes = [
|
||||
["명 마", 'horse', function($v){return getHorseName($v);}, 7, 26, []],
|
||||
["명 검", 'weap', function($v){return getWeapName($v);}, 7, 26, []],
|
||||
["명 서", 'book', function($v){return getBookName($v);}, 7, 26, []],
|
||||
["도 구", 'item', function($v){return getItemName($v);}, 7, 26, []],
|
||||
];
|
||||
|
||||
$simpleItemTypes = array_map(function($itemType){return $itemType[1];}, $itemTypes);
|
||||
|
||||
foreach($generals as $general){
|
||||
foreach($itemTypes as $itemIdx=>[,$itemType, $itemFunc,,,]){
|
||||
$itemCode = $general[$itemType];
|
||||
if($itemCode <= 6){
|
||||
continue;
|
||||
}
|
||||
|
||||
$itemName = ($itemFunc)($itemCode);
|
||||
$general['rankName'] = $itemName;
|
||||
$general['value'] = $itemCode;
|
||||
$itemTypes[$itemIdx][5][$itemCode] = $general;
|
||||
}
|
||||
}
|
||||
|
||||
foreach($itemTypes as [$itemNameType, $itemType, $itemFunc, $itemMinCode, $itemMaxCode, $itemOwners]){
|
||||
$itemRanker = [];
|
||||
for($itemCode = $itemMaxCode; $itemCode >= $itemMinCode; $itemCode--){
|
||||
if(!key_exists($itemCode, $itemOwners)){
|
||||
$emptyCard = [
|
||||
'rankName' => ($itemFunc)($itemCode),
|
||||
'pictureFullPath' => GetImageURL(0)."/default.jpg",
|
||||
'value'=>$itemCode,
|
||||
'name'=>'미발견',
|
||||
'bgColor'=>GameConst::$basecolor4,
|
||||
'fgColor'=>newColor(GameConst::$basecolor4),
|
||||
];
|
||||
$itemRanker[$itemCode] = $emptyCard;
|
||||
continue;
|
||||
}
|
||||
|
||||
$general = $itemOwners[$itemCode];
|
||||
$itemRanker[$itemCode] = $general;
|
||||
}
|
||||
|
||||
echo $templates->render('hallOfFrame', [
|
||||
'typeName'=>$itemNameType,
|
||||
'generals'=>$itemRanker
|
||||
]);
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<table align=center width=1100 class='tb_layout bg0'>
|
||||
<tr><td><?=closeButton()?></td></tr>
|
||||
<tr><td><?=banner()?> </td></tr>
|
||||
</table>
|
||||
|
||||
+99
-85
@@ -4,10 +4,29 @@ namespace sammo;
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
|
||||
$session = Session::getInstance()->setReadOnly();
|
||||
$scenarioIdx = Util::getReq('scenarioIdx', 'int', null);
|
||||
|
||||
$db = DB::db();
|
||||
$connect=$db->get();
|
||||
|
||||
increaseRefresh("명예의전당", 1);
|
||||
|
||||
$scenarioList= [];
|
||||
foreach($db->query('SELECT distinct(scenario_name) as name, count(scenario) as cnt, scenario from ng_games order by scenario asc') as $scenarioInfo){
|
||||
$scenarioList[$scenarioInfo['scenario']] = $scenarioInfo;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if($scenarioIdx !== null || key_exists($scenarioIdx, $scenarioList)){
|
||||
$searchScenarioName = $scenarioList[$scenarioIdx]['name'];
|
||||
$searchFilter = $db->sqleval('scenario = %i', $scenarioIdx);
|
||||
}
|
||||
else{
|
||||
$searchScenarioName = '* 모두 *';
|
||||
$searchFilter = $db->sqleval(true);
|
||||
}
|
||||
|
||||
increaseRefresh("명예의전당", 2);
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
@@ -17,104 +36,99 @@ increaseRefresh("명예의전당", 2);
|
||||
<title><?=UniqueConst::$serverName?>: 명예의 전당</title>
|
||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
||||
<?=WebUtil::printCSS('css/common.css')?>
|
||||
|
||||
<?=WebUtil::printCSS('css/hallOfFame.css')?>
|
||||
<?=WebUtil::printJS('../e_lib/jquery-3.2.1.min.js')?>
|
||||
<?=WebUtil::printJS('../e_lib/jquery.redirect.js')?>
|
||||
<?=WebUtil::printJs('js/hallOfFame.js')?>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<table align=center width=1000 class='tb_layout bg0'>
|
||||
<table align=center width=1100 class='tb_layout bg0'>
|
||||
<tr><td>명 예 의 전 당<br><?=closeButton()?></td></tr>
|
||||
<tr><td>
|
||||
시나리오 검색 : <select id="by_scenario" name="by_scenario">
|
||||
<option value="" <?=$scenarioIdx?"selected='selected'":''?>>* 종합 *</option>
|
||||
<?php foreach($scenarioList as $info): ?>
|
||||
<option
|
||||
value="<?=$info['scenario']?>"
|
||||
<?=($info['scenario']===$scenarioIdx)?"selected='selected'":''?>
|
||||
><?=$info['name']?>(<?=$info['cnt']?>회)</option>
|
||||
<?php endforeach; ?>
|
||||
?>
|
||||
</select>
|
||||
</td></tr>
|
||||
</table>
|
||||
<table align=center width=1000 class='tb_layout bg0'>
|
||||
<div style="margin:auto;width=1100px;">
|
||||
<?php
|
||||
$type = array(
|
||||
"명 성",
|
||||
"계 급",
|
||||
"계 략 성 공",
|
||||
"전 투 횟 수",
|
||||
"승 리",
|
||||
"승 률",
|
||||
"사 살",
|
||||
"살 상 률",
|
||||
"보 병 숙 련 도",
|
||||
"궁 병 숙 련 도",
|
||||
"기 병 숙 련 도",
|
||||
"귀 병 숙 련 도",
|
||||
"차 병 숙 련 도",
|
||||
"전 력 전 승 률",
|
||||
"통 솔 전 승 률",
|
||||
"일 기 토 승 률",
|
||||
"설 전 승 률",
|
||||
"베 팅 투 자 액",
|
||||
"베 팅 당 첨",
|
||||
"베 팅 수 익 금",
|
||||
"베 팅 수 익 률"
|
||||
);
|
||||
for ($i=0; $i < 21; $i++) {
|
||||
$name = [];
|
||||
$nation = [];
|
||||
$data = [];
|
||||
$color = [];
|
||||
$pic = [];
|
||||
|
||||
$query = "select * from hall where type={$i} order by rank";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
$types = [
|
||||
["명 성", 'int'],
|
||||
["계 급", 'int'],
|
||||
["계 략 성 공", 'int'],
|
||||
["전 투 횟 수", 'int'],
|
||||
["승 리", 'int'],
|
||||
["승 률", 'percent'],
|
||||
["사 살", 'int'],
|
||||
["살 상 률", 'percent'],
|
||||
["보 병 숙 련 도", 'int'],
|
||||
["궁 병 숙 련 도", 'int'],
|
||||
["기 병 숙 련 도", 'int'],
|
||||
["귀 병 숙 련 도", 'int'],
|
||||
["차 병 숙 련 도", 'int'],
|
||||
["전 력 전 승 률", 'percent'],
|
||||
["통 솔 전 승 률", 'percent'],
|
||||
["일 기 토 승 률", 'percent'],
|
||||
["설 전 승 률", 'percent'],
|
||||
["베 팅 투 자 액", 'int'],
|
||||
["베 팅 당 첨", 'int'],
|
||||
["베 팅 수 익 금", 'int'],
|
||||
["베 팅 수 익 률", 'percent'],
|
||||
];
|
||||
|
||||
echo "
|
||||
<tr><td align=center colspan=10 id=bg1><font size=4>$type[$i]</font></td></tr>
|
||||
<tr align=center id=bg2><td>1위</td><td>2위</td><td>3위</td><td>4위</td><td>5위</td><td>6위</td><td>7위</td><td>8위</td><td>9위</td><td>10위</td></tr>
|
||||
<tr>";
|
||||
$templates = new \League\Plates\Engine('templates');
|
||||
|
||||
for ($k=0; $k < 10; $k++) {
|
||||
$gen = MYDB_fetch_array($result);
|
||||
$name[$k] = $gen['name'];
|
||||
$nation[$k] = $gen['nation'];
|
||||
$data[$k] = $gen['data'];
|
||||
$color[$k] = $gen['color'];
|
||||
$pic[$k] = $gen['picture'];
|
||||
if ($color[$k] == "") {
|
||||
$color[$k] = GameConst::$basecolor4;
|
||||
foreach($types as $idx=>[$typeName, $typeValue]) {
|
||||
$hallResult = $db->query('SELECT * FROM ng_hall WHERE `type`=%i AND %? ORDER BY `value` DESC LIMIT 10', $idx, $searchFilter);
|
||||
|
||||
$hallResult = array_map(function($general)use($typeValue){
|
||||
$aux = Json::decode($general['aux']);
|
||||
$general += $aux;
|
||||
if(!key_exists('color', $general)){
|
||||
$general['bgColor'] = GameConst::$basecolor4;
|
||||
|
||||
}
|
||||
if ($nation[$k] == "") {
|
||||
$nation[$k] = " ";
|
||||
if(!key_exists('fgColor', $general)){
|
||||
$general['fgColor'] = newColor($general['bgColor']);
|
||||
}
|
||||
/*
|
||||
if($pic[$k] == "") {
|
||||
echo "<td align=center> </td>";
|
||||
} else {
|
||||
$imageTemp = GetImageURL($gen['imgsvr']);
|
||||
echo "<td align=center><img width='64' height='64' src={$imageTemp}/{$pic[$k]}></img></td>";
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
// echo "</tr><tr>";
|
||||
|
||||
for ($k=0; $k < 10; $k++) {
|
||||
echo "<td align=center style=background-color:{$color[$k]};font-size:80%;color:".newColor($color[$k]).">{$nation[$k]}</td>";
|
||||
}
|
||||
|
||||
echo "</tr><tr>";
|
||||
|
||||
for ($k=0; $k < 10; $k++) {
|
||||
echo "<td align=center style=background-color:{$color[$k]};font-size:80%;color:".newColor($color[$k]).">{$name[$k]}</td>";
|
||||
}
|
||||
|
||||
echo "</tr><tr>";
|
||||
|
||||
for ($k=0; $k < 10; $k++) {
|
||||
if ($i == 5 || $i == 7 || $i == 20) {
|
||||
$data[$k] = intdiv($data[$k], 100).".".($data[$k]%100)." %";
|
||||
if(key_exists('picture', $general)){
|
||||
$imageTemp = GetImageURL($general['imgsvr']);
|
||||
$general['pictureFullPath'] = "$imageTemp/{$general['picture']}";
|
||||
}
|
||||
if ($i >= 13 && $i <= 16) {
|
||||
$data[$k] = intdiv($data[$k], 100).".".($data[$k]%100)." %";
|
||||
else{
|
||||
$general['pictureFullPath'] = GetImageURL(0)."/default.jpg";
|
||||
}
|
||||
echo "<td align=center>{$data[$k]}</td>";
|
||||
}
|
||||
echo "</tr><tr><td colspan=10 height=5 id=bg1></td></tr>";
|
||||
|
||||
if(!key_exists('printValue', $general)){
|
||||
$value = $general['value'];
|
||||
if($typeValue == 'percent'){
|
||||
$general['printValue'] = number_format($value*100, 2).'%';
|
||||
}
|
||||
else {
|
||||
$general['printValue'] = number_format($value);
|
||||
}
|
||||
}
|
||||
|
||||
return $general;
|
||||
}, $hallResult);
|
||||
|
||||
echo $templates->render('hallOfFrame', [
|
||||
'typeName'=>$typeName,
|
||||
'generals'=>$hallResult
|
||||
]);
|
||||
}
|
||||
?>
|
||||
</table>
|
||||
<table align=center width=1000 class='tb_layout bg0'>
|
||||
</div>
|
||||
<table align=center width=1100 class='tb_layout bg0'>
|
||||
<tr><td><?=closeButton()?></td></tr>
|
||||
<tr><td><?=banner()?> </td></tr>
|
||||
</table>
|
||||
|
||||
+11
-20
@@ -30,15 +30,11 @@ if ($con >= 2) {
|
||||
exit();
|
||||
}
|
||||
|
||||
$query = "select year,month from history order by no limit 1";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
$history = MYDB_fetch_array($result);
|
||||
$s = ($history['year']*12) + $history['month'];
|
||||
[$s_year, $s_month] = $db->queryFirstList('SELECT year, month FROM history WHERE server_id = %s ORDER BY year ASC, month ASC LIMIT 1', UniqueConst::$serverID);
|
||||
$s = $s_year * 12 + $s_month;
|
||||
|
||||
$query = "select year,month from history order by no desc limit 1";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
$history = MYDB_fetch_array($result);
|
||||
$e = ($history['year']*12) + $history['month'];
|
||||
[$e_year, $e_month] = $db->queryFirstList('SELECT year, month FROM history WHERE server_id = %s ORDER BY year DESC, month DESC LIMIT 1', UniqueConst::$serverID);
|
||||
$e = $e_year * 12 + $e_month;
|
||||
|
||||
//FIXME: $yearmonth가 올바르지 않을 경우에 처리가 필요.
|
||||
if (!$yearmonth) {
|
||||
@@ -98,24 +94,19 @@ if ($month <= 0) {
|
||||
<input type=submit name=btn value="◀◀ 이전달">
|
||||
<select name=yearmonth size=1>
|
||||
<?php
|
||||
$query = "select year,month from history";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
$histCount = MYDB_num_rows($result);
|
||||
for ($i=0; $i < $histCount; $i++) {
|
||||
$history = MYDB_fetch_array($result);
|
||||
$value = "".$history['year'].StringUtil::padStringAlignRight($history['month'], 2, "0");
|
||||
if ($history['year'] == $year && $history['month'] == $month) {
|
||||
$dates = $db->queryAllLists('SELECT year, month FROM history WHERE server_id = %s ORDER BY year ASC, month DESC', UniqueConst::$serverID);
|
||||
foreach($dates as [$hYear, $hMonth]){
|
||||
$value = "".$hYear.StringUtil::padStringAlignRight($hMonth, 2, "0");
|
||||
if ($hYear == $year && $hMonth == $month) {
|
||||
echo "
|
||||
<option selected value={$value}>{$history['year']}년 {$history['month']}월</option>";
|
||||
<option selected value={$value}>{$hYear}년 {$hMonth}월</option>";
|
||||
} else {
|
||||
echo "
|
||||
<option value={$value}>{$history['year']}년 {$history['month']}월</option>";
|
||||
<option value={$value}>{$hYear}년 {$hMonth}월</option>";
|
||||
}
|
||||
}
|
||||
|
||||
$query = "select log,genlog,nation,power,gen,city from history where year='$year' and month='$month'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
$history = MYDB_fetch_array($result);
|
||||
$history = $db->queryFirstRow('SELECT log,genlog,nation,power,gen,city FROM history WHERE server_id = %s AND year = %i AND month = %i', UniqueConst::$serverID, $year, $month);
|
||||
?>
|
||||
</select>
|
||||
<input type=submit name=btn value='조회하기'>
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ increaseRefresh("갱신정보", 2);
|
||||
|
||||
$admin = $gameStor->getValues(['year','month','refresh','maxrefresh','maxonline']);
|
||||
|
||||
$log = getRawFileLogRecent(__dir__.'/logs/_traffic.txt', 11, 100);
|
||||
$log = getRawFileLogRecent(__dir__.'/logs/'.UniqueConst::$serverID.'/_traffic.txt', 11, 100);
|
||||
|
||||
$date = [];
|
||||
$year = [];
|
||||
|
||||
+13
-10
@@ -12,12 +12,15 @@ $connect=$db->get();
|
||||
|
||||
increaseRefresh("설문조사", 1);
|
||||
|
||||
$isVoteAdmin = in_array('vote', $session->acl[DB::prefix()]??[]);
|
||||
$isVoteAdmin |= $session->userGrade >= 5;
|
||||
|
||||
$query = "select no,vote from general where owner='{$userID}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
$me = MYDB_fetch_array($result);
|
||||
|
||||
$admin = $gameStor->getValues(['develcost','voteopen','vote','votecomment']);
|
||||
|
||||
$admin = $gameStor->getValues(['develcost','voteopen','vote_title','vote','votecomment']);
|
||||
$vote_title = $admin['vote_title']??'-';
|
||||
$vote = $admin['vote']?:['-'];
|
||||
|
||||
?>
|
||||
@@ -57,7 +60,7 @@ function captureKey(e) {
|
||||
<tr><td colspan=3 align=center id=bg2><font size=5>설 문 조 사 (<?=$admin['develcost']*5?>금과 추첨으로 유니크템 증정!)</font></td></tr>
|
||||
<?php
|
||||
|
||||
if ($session->userGrade >= 5) {
|
||||
if ($isVoteAdmin) {
|
||||
echo "
|
||||
<tr>
|
||||
<td width=48 align=center><input type=submit name=btn value='알림'></td>
|
||||
@@ -67,11 +70,11 @@ if ($session->userGrade >= 5) {
|
||||
";
|
||||
}
|
||||
|
||||
$vote[0] = Tag2Code($vote[0]);
|
||||
$vote_title = Tag2Code($vote_title);
|
||||
echo "
|
||||
<tr>
|
||||
<td colspan=2 width=148 align=center id=bg1>제 목</td>
|
||||
<td width=848 align=left> {$vote[0]}</td>
|
||||
<td width=848 align=left> {$vote_title}</td>
|
||||
</tr>
|
||||
";
|
||||
|
||||
@@ -96,7 +99,7 @@ for ($i=1; $i < $voteTypeCount; $i++) {
|
||||
echo "
|
||||
<input type=radio name=sel value={$i}>
|
||||
";
|
||||
} elseif ($admin['voteopen'] >= 1 || $session->userGrade >= 5) {
|
||||
} elseif ($admin['voteopen'] >= 1 || $isVoteAdmin) {
|
||||
$query = "select no from general where vote='{$i}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
$vCount = MYDB_num_rows($result);
|
||||
@@ -132,7 +135,7 @@ echo "
|
||||
</tr>
|
||||
";
|
||||
|
||||
if ($session->userGrade >= 5) {
|
||||
if ($isVoteAdmin) {
|
||||
echo "
|
||||
<tr>
|
||||
<td align=center><input type=submit name=btn value='리셋'></td>
|
||||
@@ -184,7 +187,7 @@ if ($me['no'] > 0) {
|
||||
<tr><td colspan=3 align=center id=bg2><font size=5>
|
||||
전 체 통 계
|
||||
<?php
|
||||
if ($session->userGrade >= 5) {
|
||||
if ($isVoteAdmin) {
|
||||
echo "
|
||||
<input type=submit name=btn value='숨김'>
|
||||
<input type=submit name=btn value='전체통계만'>
|
||||
@@ -193,7 +196,7 @@ if ($session->userGrade >= 5) {
|
||||
echo "
|
||||
</font></td></tr>";
|
||||
|
||||
if ($admin['voteopen'] >= 1 || $session->userGrade >= 5) {
|
||||
if ($admin['voteopen'] >= 1 || $isVoteAdmin) {
|
||||
echo "
|
||||
<tr>
|
||||
<td width=130 align=center>전 체</td>
|
||||
@@ -258,7 +261,7 @@ if ($admin['voteopen'] >= 1 || $session->userGrade >= 5) {
|
||||
";
|
||||
}
|
||||
|
||||
if ($admin['voteopen'] >= 2 || $session->userGrade >= 5) {
|
||||
if ($admin['voteopen'] >= 2 || $isVoteAdmin) {
|
||||
$query = "select no from general where nation=0 and npc<2";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
$memCount = MYDB_num_rows($result);
|
||||
|
||||
+1
-1
@@ -280,7 +280,7 @@ for ($i=0; $i < $count; $i++) {
|
||||
ㆍ악용 방지를 위해 50% ~ 200%의 가격에서 거래시작이 가능합니다.<br>
|
||||
ㆍ악용 방지를 위해 즉시판매가는 110% 이상, 즉시구매가는 90% 이하의 시세로 가능합니다.<br>
|
||||
ㆍ악용 방지를 위해 즉시판매가는 시작판매가의 110% 이상, 즉시구매가는 시작구매가의 90% 이하로 가능합니다.<br>
|
||||
ㆍ1인당 도합 1건의 거래와 입찰이 가능합니다. 거상 특기 소유자는 1인당 도합 3건입니다.<br>
|
||||
ㆍ1인당 도합 1건의 거래와 입찰이 가능합니다.<br>
|
||||
ㆍ기본금쌀 1000은 거래에 사용되지 못합니다.<br>
|
||||
ㆍ유찰될 때는 거래 과실자에게 거래금의 1%가 벌금으로 부과됩니다.<br>
|
||||
ㆍ<font color=magenta>10단위로 거래가 가능합니다. 1자리는 반올림 처리 됩니다.</font><br>
|
||||
|
||||
+7
-1
@@ -297,7 +297,13 @@ for ($i=0; $i < 16; $i++) {
|
||||
}
|
||||
|
||||
for ($i=0; $i < 16; $i++) {
|
||||
$gold[$i] = Util::round($myBet[$i] * $bet[$i]);
|
||||
if(!is_numeric($bet[$i])){
|
||||
$gold[$i] = 0;
|
||||
}
|
||||
else{
|
||||
$gold[$i] = Util::round($myBet[$i] * $bet[$i]);
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
</tr>
|
||||
|
||||
+3
-3
@@ -216,9 +216,9 @@ if ($budgetricediff > 0) {
|
||||
<table align=center width=1000 class='tb_layout 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>국 가 방 침 & 임관 권유 메세지</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 align=center bgcolor=orange>국 가 방 침 & 임관 권유 메시지</td></tr>
|
||||
<tr><td colspan=2 class=bg1>국가 방침 <textarea <?=$read?> maxlength=16000 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=1000 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>870 x 200px 넘는 크기를 점유할 시 통보없이 제한될 수 있습니다.</td></tr>
|
||||
<tr><td colspan=2 height=10></td></tr>
|
||||
<tr><td colspan=2 align=center bgcolor=green>예 산 & 정 책</td></tr>
|
||||
|
||||
+2
-2
@@ -91,11 +91,11 @@ if ($btn == "판매") {
|
||||
$msg = "ㆍ<span class='ev_warning'>시작판매가는 50% ~ 200% 이어야 합니다.</span>";
|
||||
$valid = 0;
|
||||
}
|
||||
if ($topv < $amount*1.1 || $topv > $amount * 2) {
|
||||
if ($topv * 10 < $amount * 11 || $topv > $amount * 2) {
|
||||
$msg = "ㆍ<span class='ev_warning'>즉시판매가는 110% ~ 200% 이어야 합니다.</span>";
|
||||
$valid = 0;
|
||||
}
|
||||
if ($topv < $cost*1.1) {
|
||||
if ($topv * 10 < $cost * 11) {
|
||||
$msg = "ㆍ<span class='ev_warning'>즉시판매가는 시작판매가의 110% 이상이어야 합니다.</span>";
|
||||
$valid = 0;
|
||||
}
|
||||
|
||||
+12
-14
@@ -19,11 +19,8 @@ $session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
$connect=$db->get();
|
||||
|
||||
$query = "select no,nation,level from general where owner='{$userID}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$me = MYDB_fetch_array($result);
|
||||
$me = $db->queryFirstRow('SELECT `no`,nation,`level` FROM general WHERE `owner`=%i', $userID);
|
||||
|
||||
//내가 수뇌부이어야함
|
||||
if($me['level'] < 5) {
|
||||
@@ -32,21 +29,21 @@ if($me['level'] < 5) {
|
||||
}
|
||||
|
||||
if($btn == "국가방침") {
|
||||
$msg == mb_substr($msg, 0, 1000);
|
||||
$msg = mb_substr($msg, 0, 16384);
|
||||
//$msg = StringUtil::
|
||||
$db->update('nation', [
|
||||
'msg'=>BadTag2Code($msg)
|
||||
'msg'=>WebUtil::htmlPurify($msg)
|
||||
], 'nation=%i',$me['nation']);
|
||||
} elseif($btn == "임관권유") {
|
||||
$scoutmsg == mb_substr($msg, 0, 500);
|
||||
$scoutmsg = mb_substr($scoutmsg, 0, 1000);
|
||||
$db->update('nation', [
|
||||
'scoutmsg'=>BadTag2Code($scoutmsg)
|
||||
'scoutmsg'=>WebUtil::htmlPurify($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),"");
|
||||
$rate = Util::valueFit($rate, 5, 30);
|
||||
$db->update('nation', [
|
||||
'rate'=>$rate,
|
||||
], 'nation=%i', $me['nation']);
|
||||
} elseif($btn == "지급율") {
|
||||
$bill = Util::valueFit($bill, 20, 200);
|
||||
$db->update('nation', [
|
||||
@@ -70,8 +67,9 @@ if($btn == "국가방침") {
|
||||
'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),"");
|
||||
$db->update('nation', [
|
||||
'war'=>0
|
||||
], 'nation=%i',$me['nation']);
|
||||
}
|
||||
|
||||
header('location:b_dipcenter.php');
|
||||
|
||||
+7
-18
@@ -44,12 +44,8 @@ $comStr = EncodeCommand($fourth, $third, $double, $command);
|
||||
|
||||
// 건국
|
||||
if($command == 46) {
|
||||
$name = addslashes(SQ2DQ($name));
|
||||
$name = str_replace("|", "", $name);
|
||||
$name = str_replace(" ", "", $name);
|
||||
$name = str_replace(" ", "뷁", $name);
|
||||
$name = StringUtil::neutralize($name);
|
||||
if($name == "") { $name = "무명"; }
|
||||
$name = StringUtil::subStringForWidth($name, 0, 18);
|
||||
|
||||
$db->update('general', [
|
||||
'makenation'=>$name
|
||||
@@ -72,15 +68,12 @@ if($command == 53) {
|
||||
$me = MYDB_fetch_array($result);
|
||||
|
||||
if($me['level'] >= 5) {
|
||||
$nationname = addslashes(SQ2DQ($nationname));
|
||||
$nationname = str_replace("|", "", $nationname);
|
||||
$nationname = str_replace(" ", "", $nationname);
|
||||
$nationname = str_replace(" ", "뷁", $nationname);
|
||||
$nationname = StringUtil::neutralize($nationname, 18);
|
||||
if($nationname == "") { $nationname = "무명"; }
|
||||
$nationname = StringUtil::subStringForWidth($nationname, 0, 18);
|
||||
|
||||
$query = "update general set makenation='{$nationname}' where level>=5 and nation='{$me['nation']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
|
||||
$db->update('general', [
|
||||
'makenation'=>$nationname
|
||||
], 'level>=5 and nation=%i', $me['nation']);
|
||||
|
||||
$count = count($turn);
|
||||
$str = "type=type";
|
||||
@@ -101,11 +94,7 @@ if($command == 61) {
|
||||
$me = MYDB_fetch_array($result);
|
||||
|
||||
if($me['level'] >= 5) {
|
||||
$note = addslashes(SQ2DQ($note));
|
||||
$note = str_replace("|", "", $note);
|
||||
$note = str_replace(" ", "", $note);
|
||||
$note = str_replace(" ", "뷁", $note);
|
||||
$note = StringUtil::subStringForWidth($note, 0, 90);
|
||||
$note = StringUtil::neutralize($note, 90);
|
||||
|
||||
$query = "update diplomacy set reserved='{$note}' where me='{$me['nation']}' and you='$double'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
|
||||
+8
-11
@@ -39,23 +39,20 @@ if($meLevel < 5){
|
||||
}
|
||||
|
||||
if($btn == "임명") {
|
||||
if(!$genlist){
|
||||
header('location:b_myBossInfo.php');
|
||||
exit();
|
||||
if($genlist==0){
|
||||
$general = [];
|
||||
}
|
||||
else{
|
||||
$general = $db->queryFirstRow('SELECT `no`,nation,`level`,leader,`power`,intel FROM general WHERE no = %i', $genlist);
|
||||
}
|
||||
|
||||
$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){
|
||||
if($genlist != 0 && !$general){
|
||||
header('location:b_myBossInfo.php');
|
||||
exit();
|
||||
}
|
||||
|
||||
//임명할사람이 군주이면 불가, 내가 수뇌부이어야함, 공석아닌때는 국가가 같아야함
|
||||
if($meLevel < 5 || ($general['nation'] != $me['nation'] && $genlist != 0) || ($general['level'] == 12 && $genlist != 0)) {
|
||||
|
||||
if($meLevel < 5 || ($genlist != 0 && $general['nation'] != $me['nation']) || ($genlist != 0 && $general['level'] == 12)) {
|
||||
header('location:b_myBossInfo.php');
|
||||
exit();
|
||||
}
|
||||
@@ -241,7 +238,7 @@ if($btn == "임명" && $level >= 5 && $level <= 11) {
|
||||
$nation['chemi'] -= 1;
|
||||
if($nation['chemi'] < 0) { $nation['chemi'] = 0; }
|
||||
|
||||
$query = "update nation set chemi='{$nation['chemi']}' where nation='{$general['nation']}'";
|
||||
$query = "update nation set chemi='{$nation['chemi']}' where nation='{$me['nation']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
|
||||
//기존 장수 일반으로
|
||||
|
||||
+13
-8
@@ -16,11 +16,14 @@ extractMissingPostToGlobals();
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$isVoteAdmin = in_array('vote', $session->acl[DB::prefix()]??[]);
|
||||
$isVoteAdmin |= $session->userGrade >= 5;
|
||||
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
$connect=$db->get();
|
||||
|
||||
$admin = $gameStor->getValues(['develcost', 'cost', 'vote', 'votecomment']);
|
||||
$admin = $gameStor->getValues(['develcost', 'cost', 'vote_title', 'vote', 'votecomment']);
|
||||
|
||||
$query = "select no,vote,name,nation,horse,weap,book,item,npc from general where owner='{$userID}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
@@ -47,7 +50,7 @@ else if($btn == "댓글" && trim($comment) != "") {
|
||||
$gameStor->votecomment = $admin['votecomment'];
|
||||
}
|
||||
|
||||
if($session->userGrade < 5){
|
||||
if(!$isVoteAdmin){
|
||||
header('location:a_vote.php');
|
||||
die();
|
||||
}
|
||||
@@ -55,19 +58,21 @@ if($session->userGrade < 5){
|
||||
|
||||
if($btn == "수정") {
|
||||
if($title != "") {
|
||||
$vote = $admin['vote']?:[];
|
||||
$vote[0] = $title;
|
||||
$gameStor->vote = $vote;
|
||||
$gameStor->vote_title = WebUtil::htmlPurify($title);
|
||||
}
|
||||
} elseif($btn == "추가") {
|
||||
if($str != "") {
|
||||
$admin['vote'][] = $str;
|
||||
if(!$admin['vote']){
|
||||
$admin['vote'] = [];
|
||||
}
|
||||
$admin['vote'][] = WebUtil::htmlPurify($str);
|
||||
$gameStor->vote=$admin['vote'];
|
||||
}
|
||||
} elseif($btn == "리셋") {
|
||||
$gameStor->voteopen=1;
|
||||
$gameStor->vote='';
|
||||
$gameStor->votecomment='';
|
||||
$gameStor->vote=['-'];
|
||||
$gameStor->vote_title = '-';
|
||||
$gameStor->votecomment=[];
|
||||
|
||||
$query = "update general set vote='0'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
|
||||
+2
-2
@@ -104,8 +104,8 @@ function myCommandList() {
|
||||
$turndate = substr($totaldate,11, 5);
|
||||
echo "
|
||||
<tr height=28>
|
||||
<td width=25 align=center height=24 id=bg0><b>$j</b></td>
|
||||
<td width=70 align=center height=24 id=bg1><b>{$year}年 {$month}月</b></td>
|
||||
<td width=24 align=center height=24 id=bg0><b>$j</b></td>
|
||||
<td width=71 align=center height=24 id=bg1><b>{$year}年 {$month}月</b></td>
|
||||
<td width=42 align=center bgcolor=black><b>$turndate</b></td>
|
||||
<td width=150 align=center height=24 style=table-layout:fixed;>$turn[$i]</td>
|
||||
</tr>";
|
||||
|
||||
@@ -181,3 +181,39 @@ div.bar_out div.bar_in{
|
||||
float:left;
|
||||
}
|
||||
|
||||
.tooltip{
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.tooltip .tooltiptext {
|
||||
visibility: hidden;
|
||||
width: 120px;
|
||||
background-color: #555;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
border-radius: 6px;
|
||||
padding: 5px 0;
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
bottom: 125%;
|
||||
left: 50%;
|
||||
margin-left: -60px;
|
||||
opacity: 0;
|
||||
transition: opacity 0.3s;
|
||||
}
|
||||
|
||||
.tooltip .tooltiptext::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 50%;
|
||||
margin-left: -5px;
|
||||
border-width: 5px;
|
||||
border-style: solid;
|
||||
border-color: #555 transparent transparent transparent;
|
||||
}
|
||||
|
||||
.tooltip:hover .tooltiptext {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
|
||||
.rankView {
|
||||
width:1100px;
|
||||
margin:auto;
|
||||
position:relative;
|
||||
font-size:13px;
|
||||
}
|
||||
|
||||
.rankView h3{
|
||||
text-align:center;
|
||||
margin:0;
|
||||
padding:2px;
|
||||
border-bottom:1px solid gray;
|
||||
}
|
||||
|
||||
.rankView ul{
|
||||
list-style:none;
|
||||
margin:0;
|
||||
padding:0;
|
||||
box-sizing: border-box;
|
||||
margin-top:-1px;
|
||||
margin-bottom:-1px;
|
||||
}
|
||||
|
||||
.rankView li{
|
||||
display:inline-block;
|
||||
vertical-align: top;
|
||||
width:110px;
|
||||
height:149px;
|
||||
text-align:center;
|
||||
border-right:1px solid gray;
|
||||
border-top:1px solid gray;
|
||||
margin:0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.rankView li.no_value{
|
||||
height:128px;
|
||||
}
|
||||
|
||||
.rankView li.has_server {
|
||||
height:168px;
|
||||
}
|
||||
|
||||
.rankView li.no_value.has_server {
|
||||
height:146px;
|
||||
}
|
||||
|
||||
.rankView .hall_server{
|
||||
border-top:1px solid gray;
|
||||
}
|
||||
|
||||
.rankView .tooltip .tooltiptext{
|
||||
width:220px;
|
||||
margin-left: -110px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.rankView .no_value .hall_value{
|
||||
display:none;
|
||||
}
|
||||
|
||||
.rankView .hall_nation{
|
||||
font-size:11px;
|
||||
border-top:1px solid gray;
|
||||
border-bottom:1px solid gray;
|
||||
}
|
||||
|
||||
.rankView .hall_name{
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
resize: vertical;
|
||||
font-size:11px;
|
||||
height:28px;
|
||||
}
|
||||
|
||||
.rankView .hall_name p{
|
||||
padding:0;
|
||||
margin:0;
|
||||
}
|
||||
|
||||
.rankView .hall_owner{
|
||||
font-size:95%;
|
||||
}
|
||||
|
||||
.rankView .hall_value{
|
||||
line-height:13px;
|
||||
box-sizing: border-box;
|
||||
border-top:1px solid gray;
|
||||
padding-top:3px;
|
||||
padding-bottom:3px;
|
||||
}
|
||||
@@ -7,7 +7,7 @@
|
||||
text-align:center;
|
||||
}
|
||||
.general_card{
|
||||
width:100px;
|
||||
width:125px;
|
||||
display:inline-block;
|
||||
}
|
||||
|
||||
|
||||
+68
-61
@@ -1116,15 +1116,12 @@ function nationMsg() {
|
||||
$connect=$db->get();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$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);
|
||||
$msg = $db->queryFirstField(
|
||||
'SELECT msg FROM nation WHERE nation = (SELECT nation FROM general WHERE `owner` = %i)',
|
||||
$userID
|
||||
);
|
||||
|
||||
$query = "select msg from nation where nation='{$me['nation']}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$nation = MYDB_fetch_array($result);
|
||||
|
||||
echo "<font color=orange>".$nation['msg']."</font>";
|
||||
return $msg?:'';
|
||||
}
|
||||
|
||||
function msgprint($msg, $name, $picture, $imgsvr, $when, $num, $type) {
|
||||
@@ -1269,7 +1266,7 @@ function increaseRefresh($type="", $cnt=1) {
|
||||
$date2 = substr($date, 0, 10);
|
||||
$online = getOnlineNum();
|
||||
file_put_contents(
|
||||
__dir__."/logs/_{$date2}_refresh.txt",
|
||||
__dir__."/logs/".UniqueConst::$serverID."/_{$date2}_refresh.txt",
|
||||
sprintf(
|
||||
"%s, %s, %s, %s, %s, %d\n",
|
||||
$date,
|
||||
@@ -1306,7 +1303,7 @@ function increaseRefresh($type="", $cnt=1) {
|
||||
}
|
||||
if($str != "") {
|
||||
file_put_contents(
|
||||
__dir__."/logs/_{$date2}_ipcheck.txt",
|
||||
__dir__."/logs/".UniqueConst::$serverID."/_{$date2}_ipcheck.txt",
|
||||
sprintf(
|
||||
"%s, %s, %s%s\n",
|
||||
$session->userName,
|
||||
@@ -1341,7 +1338,7 @@ function updateTraffic() {
|
||||
|
||||
$date = date('Y-m-d H:i:s');
|
||||
//일시|년|월|총갱신|접속자|최다갱신자
|
||||
file_put_contents(__dir__."/logs/_traffic.txt",
|
||||
file_put_contents(__dir__."/logs/".UniqueConst::$serverID."/_traffic.txt",
|
||||
Json::encode([
|
||||
$date,
|
||||
$admin['year'],
|
||||
@@ -1540,7 +1537,7 @@ function checkTurn() {
|
||||
//if(STEP_LOG) pushStepLog(date('Y-m-d H:i:s').', 진입');
|
||||
|
||||
//천통시에는 동결
|
||||
if($gameStor->isUnited == 2) {
|
||||
if($gameStor->isunited == 2) {
|
||||
$db->update('plock', ['plock'=>1], true);
|
||||
return;
|
||||
}
|
||||
@@ -1901,7 +1898,7 @@ function updateTurntime($no) {
|
||||
$alllog = [];
|
||||
$log = [];
|
||||
|
||||
$admin = $gameStor->getValues(['year', 'month', 'isUnited', 'turnterm']);
|
||||
$admin = $gameStor->getValues(['year', 'month', 'isunited', 'turnterm']);
|
||||
|
||||
$query = "select no,name,name2,nation,troop,age,turntime,killturn,level,deadyear,npc,npc_org,affinity,npcid from general where no='$no'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
@@ -1919,10 +1916,6 @@ function updateTurntime($no) {
|
||||
$josaYi = JosaUtil::pick($general['name2'], '이');
|
||||
$alllog[0] = "<C>●</>{$admin['month']}월:<Y>{$general['name2']}</>{$josaYi} <Y>{$general['name']}</>의 육체에서 <S>유체이탈</>합니다!";
|
||||
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
|
||||
|
||||
if($admin['isUnited'] == 0) {
|
||||
CheckHall($no);
|
||||
}
|
||||
} else {
|
||||
// 군주였으면 유지 이음
|
||||
if($general['level'] == 12) {
|
||||
@@ -2039,7 +2032,7 @@ function updateTurntime($no) {
|
||||
}
|
||||
|
||||
if($general['age'] >= 80 && $general['npc'] == 0) {
|
||||
if($admin['isUnited'] == 0) {
|
||||
if($admin['isunited'] == 0) {
|
||||
CheckHall($no);
|
||||
}
|
||||
|
||||
@@ -2063,9 +2056,9 @@ function updateTurntime($no) {
|
||||
|
||||
function CheckHall($no) {
|
||||
$db = DB::db();
|
||||
$connect=$db->get();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
|
||||
$type = array(
|
||||
$types = array(
|
||||
"experience",
|
||||
"dedication",
|
||||
"firenum",
|
||||
@@ -2089,59 +2082,73 @@ function CheckHall($no) {
|
||||
"betrate"
|
||||
);
|
||||
|
||||
$query = "select name,nation,picture,
|
||||
experience,dedication,warnum,firenum,killnum,
|
||||
killnum/warnum*10000 as winrate,killcrew,killcrew/deathcrew*10000 as killrate,
|
||||
dex0,dex10,dex20,dex30,dex40,
|
||||
ttw/(ttw+ttd+ttl)*10000 as ttrate, ttw+ttd+ttl as tt,
|
||||
tlw/(tlw+tld+tll)*10000 as tlrate, tlw+tld+tll as tl,
|
||||
tpw/(tpw+tpd+tpl)*10000 as tprate, tpw+tpd+tpl as tp,
|
||||
tiw/(tiw+tid+til)*10000 as tirate, tiw+tid+til as ti,
|
||||
betgold, betwin, betwingold, betwingold/betgold*10000 as betrate
|
||||
from general where no='$no'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$general = MYDB_fetch_array($result);
|
||||
$general = $db->queryFirstRow('SELECT name,name2,owner,nation,picture,imgsvr,
|
||||
experience,dedication,warnum,firenum,killnum,
|
||||
killnum/warnum as winrate,killcrew,killcrew/deathcrew as killrate,
|
||||
dex0,dex10,dex20,dex30,dex40,
|
||||
ttw/(ttw+ttd+ttl) as ttrate, ttw+ttd+ttl as tt,
|
||||
tlw/(tlw+tld+tll) as tlrate, tlw+tld+tll as tl,
|
||||
tpw/(tpw+tpd+tpl) as tprate, tpw+tpd+tpl as tp,
|
||||
tiw/(tiw+tid+til) as tirate, tiw+tid+til as ti,
|
||||
betgold, betwin, betwingold, betwingold/betgold as betrate
|
||||
from general where no=%i', $no);
|
||||
|
||||
if(!$general){
|
||||
return;
|
||||
}
|
||||
|
||||
$unitedDate = date('Y-m-d H:i:s');
|
||||
$nation = getNationStaticInfo($general['nation']);
|
||||
|
||||
for($k=0; $k < 21; $k++) {
|
||||
$query = "select * from hall where type='$k' order by data desc";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$count = MYDB_num_rows($result);
|
||||
$serverCnt = $db->queryFirstField('SELECT count(*) FROM ng_games');
|
||||
|
||||
[$scenarioIdx, $scenarioName, $startTime] = $gameStor->getValuesAsArray(['scenario', 'scenario_text', 'starttime']);
|
||||
|
||||
foreach($types as $idx=>$typeName) {
|
||||
|
||||
|
||||
//승률,살상률인데 10회 미만 전투시 스킵
|
||||
if(($k == 5 || $k == 7) && $general['warnum']<10) { continue; }
|
||||
if(($typeName === 'winrate' || $typeName === 'killrate') && $general['warnum']<10) { continue; }
|
||||
//토너승률인데 50회 미만시 스킵
|
||||
if($k == 13 && $general['tt'] < 50) { continue; }
|
||||
if($typeName === 'ttrate' && $general['tt'] < 50) { continue; }
|
||||
//토너승률인데 50회 미만시 스킵
|
||||
if($k == 14 && $general['tl'] < 50) { continue; }
|
||||
if($typeName === 'tlrate' && $general['tl'] < 50) { continue; }
|
||||
//토너승률인데 50회 미만시 스킵
|
||||
if($k == 15 && $general['tp'] < 50) { continue; }
|
||||
if($typeName === 'tprate' && $general['tp'] < 50) { continue; }
|
||||
//토너승률인데 50회 미만시 스킵
|
||||
if($k == 16 && $general['ti'] < 50) { continue; }
|
||||
if($typeName === 'tirate' && $general['ti'] < 50) { continue; }
|
||||
//수익률인데 1000미만시 스킵
|
||||
if($k == 20 && $general['betgold'] < 1000) { continue; }
|
||||
if($typeName === 'betrate' && $general['betgold'] < 1000) { continue; }
|
||||
|
||||
$rank = 10;
|
||||
for($i=0; $i < $count; $i++) {
|
||||
$ranker = MYDB_fetch_array($result);
|
||||
$aux = [
|
||||
'name'=>$general['name'],
|
||||
'nationName'=>$nation['name'],
|
||||
'bgColor'=>$nation['color'],
|
||||
'fgColor'=>newColor($nation['color']),
|
||||
'picture'=>$general['picture'],
|
||||
'imgsvr'=>$general['imgsvr'],
|
||||
'startTime'=>$startTime,
|
||||
'unitedTime'=>$unitedDate,
|
||||
'owner_name'=>$general['name2'],
|
||||
'serverID'=>UniqueConst::$serverID,
|
||||
'serverIdx'=>$serverCnt,
|
||||
'serverName'=>UniqueConst::$serverName,
|
||||
'scenarioName'=>$scenarioName,
|
||||
];
|
||||
$jsonAux = Json::encode($aux);
|
||||
|
||||
if($general[$type[$k]] >= $ranker['data']) {
|
||||
$rank = $i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for($i=8; $i >= $rank; $i--) {
|
||||
$j = $i + 1;
|
||||
$query = "select * from hall where type='$k' and rank='$i'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$ranker = MYDB_fetch_array($result);
|
||||
|
||||
$query = "update hall set name='{$ranker['name']}', nation='{$ranker['nation']}', data='{$ranker['data']}', color='{$ranker['color']}', picture='{$ranker['picture']}' where type='$k' and rank='$j'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
}
|
||||
$query = "update hall set name='{$general['name']}', nation='{$nation['name']}', data='{$general[$type[$k]]}', color='{$nation['color']}', picture='{$general['picture']}' where type='$k' and rank='$rank'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$db->insertUpdate('ng_hall', [
|
||||
'server_id'=>UniqueConst::$serverID,
|
||||
'scenario'=>$scenarioIdx,
|
||||
'general_no'=>$no,
|
||||
'type'=>$idx,
|
||||
'value'=>$general[$typeName]??0,
|
||||
'owner'=>$general['owner']??null,
|
||||
'aux'=>$jsonAux
|
||||
],[
|
||||
'value'=>$general[$typeName]??0,
|
||||
'aux'=>$jsonAux
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -471,7 +471,7 @@ function processCommand($no) {
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
$connect=$db->get();
|
||||
|
||||
$query = "select npc,no,name,picture,imgsvr,nation,nations,city,troop,injury,leader,leader2,power,power2,intel,intel2,experience,dedication,level,gold,rice,crew,crewtype,train,atmos,weap,book,horse,item,turntime,makenation,makelimit,killturn,block,dedlevel,explevel,age,belong,personal,special,special2,term,turn0,dex0,dex10,dex20,dex30,dex40 from general where no='$no'";
|
||||
$query = "select npc,no,name,picture,imgsvr,nation,nations,city,troop,injury,affinity,leader,leader2,power,power2,intel,intel2,experience,dedication,level,gold,rice,crew,crewtype,train,atmos,weap,book,horse,item,turntime,makenation,makelimit,killturn,block,dedlevel,explevel,age,belong,personal,special,special2,term,turn0,dex0,dex10,dex20,dex30,dex40 from general where no='$no'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$general = MYDB_fetch_array($result);
|
||||
|
||||
@@ -533,7 +533,7 @@ function processCommand($no) {
|
||||
}
|
||||
|
||||
//장수정보 재로드
|
||||
$query = "select npc,no,name,picture,imgsvr,nation,nations,city,troop,injury,leader,leader2,power,power2,intel,intel2,experience,dedication,level,gold,rice,crew,crewtype,train,atmos,weap,book,horse,item,turntime,makenation,makelimit,killturn,block,dedlevel,explevel,age,belong,personal,special,special2,term,turn0,dex0,dex10,dex20,dex30,dex40 from general where no='$no'";
|
||||
$query = "select npc,no,name,picture,imgsvr,nation,nations,city,troop,injury,affinity,leader,leader2,power,power2,intel,intel2,experience,dedication,level,gold,rice,crew,crewtype,train,atmos,weap,book,horse,item,turntime,makenation,makelimit,killturn,block,dedlevel,explevel,age,belong,personal,special,special2,term,turn0,dex0,dex10,dex20,dex30,dex40 from general where no='$no'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$general = MYDB_fetch_array($result);
|
||||
}
|
||||
@@ -583,7 +583,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; //등용
|
||||
case 25: process_25($general); break; //임관
|
||||
case 26: process_26($general); break; //집합
|
||||
case 28: process_28($general); break; //귀환
|
||||
|
||||
@@ -144,7 +144,7 @@ function SetNationFront($nationNo) {
|
||||
$db = DB::db();
|
||||
$enemyCities = $db->queryFirstColumn(
|
||||
'SELECT city from city where nation IN
|
||||
(SELECT you from diplomacy where me = %i and (state=0 or (state=1 and term<=3)))'
|
||||
(SELECT you from diplomacy where me = %i and (state=0 or (state=1 and term<=5)))'
|
||||
, $nationNo
|
||||
);
|
||||
if($enemyCities) {
|
||||
@@ -514,7 +514,7 @@ group by A.nation
|
||||
|
||||
$josaYi = JosaUtil::pick($name2, '이');
|
||||
$josaWa = JosaUtil::pick($name1, '와');
|
||||
$history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<R><b>【개전】</b></><D><b>$name1</b></>{$josaWa}과 <D><b>$name2</b></>{$josaYi} <R>전쟁</>을 시작합니다.";
|
||||
$history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<R><b>【개전】</b></><D><b>$name1</b></>{$josaWa} <D><b>$name2</b></>{$josaYi} <R>전쟁</>을 시작합니다.";
|
||||
}
|
||||
//휴전국 로그
|
||||
$query = "select A.me as me,A.you as you,A.term as term1,B.term as term2 from diplomacy A, diplomacy B where A.me=B.you and A.you=B.me and A.state='0' and A.me<A.you";
|
||||
@@ -1100,13 +1100,13 @@ function checkEmperior() {
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
$connect=$db->get();
|
||||
|
||||
$admin = $gameStor->getValues(['year', 'month', 'isUnited']);
|
||||
$admin = $gameStor->getValues(['year', 'month', 'isunited']);
|
||||
|
||||
$query = "select nation,name from nation where level>0";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$count = MYDB_num_rows($result);
|
||||
|
||||
if($count == 1 && $admin['isUnited'] == 0) {
|
||||
if($count == 1 && $admin['isunited'] == 0) {
|
||||
$nation = MYDB_fetch_array($result);
|
||||
|
||||
$query = "select city from city where nation='{$nation['nation']}'";
|
||||
@@ -1123,10 +1123,10 @@ function checkEmperior() {
|
||||
|
||||
pushNationHistory($nation, "<C>●</>{$admin['year']}년 {$admin['month']}월:<D><b>{$nation['name']}</b></>{$josaYi} 전토를 통일");
|
||||
|
||||
$gameStor->isUnited = 2;
|
||||
$gameStor->isunited = 2;
|
||||
$gameStor->conlimit = $gameStor->conlimit*100;
|
||||
|
||||
$query = "select no from general where npc<2 and age>=45";
|
||||
$query = "select no from general where npc<2 and age>=40";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$count = MYDB_num_rows($result);
|
||||
|
||||
|
||||
+47
-18
@@ -5,7 +5,7 @@ namespace sammo;
|
||||
|
||||
function delStepLog() {
|
||||
$date = date('Y_m_d');
|
||||
@unlink(__dir__."/logs/_{$date}_steplog.txt");
|
||||
@unlink(__dir__."/logs/".UniqueConst::$serverID."/_{$date}_steplog.txt");
|
||||
}
|
||||
|
||||
function pushRawFileLog($path, $lines){
|
||||
@@ -50,81 +50,109 @@ function eraseTnmtFightLogAll(){
|
||||
}
|
||||
|
||||
function eraseTnmtFightLog(int $group){
|
||||
$filepath = __dir__."/logs/fight{$group}.txt";
|
||||
$filepath = __dir__."/logs/".UniqueConst::$serverID."/fight{$group}.txt";
|
||||
if(file_exists($filepath)){
|
||||
@unlink($filepath);
|
||||
}
|
||||
}
|
||||
|
||||
function pushTnmtFightLog(int $group, $log) {
|
||||
pushRawFileLog(__dir__."/logs/fight{$group}.txt", $log);
|
||||
pushRawFileLog(__dir__."/logs/".UniqueConst::$serverID."/fight{$group}.txt", $log);
|
||||
}
|
||||
|
||||
function getTnmtFightLogAll(int $group) {
|
||||
return join('<br>',getFormattedFileLogAll(__dir__."/logs/fight{$group}.txt"));
|
||||
return join('<br>',getFormattedFileLogAll(__dir__."/logs/".UniqueConst::$serverID."/fight{$group}.txt"));
|
||||
}
|
||||
|
||||
function pushSabotageLog($log) {
|
||||
pushRawFileLog(__dir__."/logs/_sabotagelog.txt", $log);
|
||||
pushRawFileLog(__dir__."/logs/".UniqueConst::$serverID."/_sabotagelog.txt", $log);
|
||||
}
|
||||
|
||||
function getSabotageLogRecent($count) {
|
||||
return join('<br>', getFormattedFileLogRecent(__dir__."/logs/_sabotagelog.txt", $count, 150));
|
||||
return join('<br>', getFormattedFileLogRecent(__dir__."/logs/".UniqueConst::$serverID."/_sabotagelog.txt", $count, 150));
|
||||
}
|
||||
|
||||
function pushProcessLog($log) {
|
||||
$date = date('Y_m_d');
|
||||
pushRawFileLog(__dir__."/logs/_{$date}_processlog.txt", $log);
|
||||
pushRawFileLog(__dir__."/logs/".UniqueConst::$serverID."/_{$date}_processlog.txt", $log);
|
||||
}
|
||||
|
||||
|
||||
function pushStepLog($log) {
|
||||
$date = date('Y_m_d');
|
||||
pushRawFileLog(__dir__."/logs/_{$date}_steplog.txt", $log);
|
||||
pushRawFileLog(__dir__."/logs/".UniqueConst::$serverID."/_{$date}_steplog.txt", $log);
|
||||
}
|
||||
|
||||
function pushLockLog($log) {
|
||||
$date = date('Y_m_d');
|
||||
pushRawFileLog(__dir__."/logs/_{$date}_locklog.txt", $log);
|
||||
pushRawFileLog(__dir__."/logs/".UniqueConst::$serverID."/_{$date}_locklog.txt", $log);
|
||||
}
|
||||
|
||||
function pushAdminLog($log) {
|
||||
pushRawFileLog(__dir__."/logs/_adminlog.txt", $log);
|
||||
pushRawFileLog(__dir__."/logs/".UniqueConst::$serverID."/_adminlog.txt", $log);
|
||||
}
|
||||
|
||||
function pushAuctionLog($log) {
|
||||
pushRawFileLog(__dir__."/logs/_auctionlog.txt", $log);
|
||||
pushRawFileLog(__dir__."/logs/".UniqueConst::$serverID."/_auctionlog.txt", $log);
|
||||
}
|
||||
|
||||
function getAuctionLogRecent(int $count) {
|
||||
return join('<br>', array_reverse(getFormattedFileLogRecent(__dir__."/logs/_auctionlog.txt", $count, 300)));
|
||||
return join('<br>', array_reverse(getFormattedFileLogRecent(__dir__."/logs/".UniqueConst::$serverID."/_auctionlog.txt", $count, 300)));
|
||||
}
|
||||
|
||||
function pushGenLog($general, $log) {
|
||||
$no = Util::toInt($general['no']);
|
||||
pushRawFileLog(__dir__."/logs/gen{$no}.txt", $log);
|
||||
pushRawFileLog(__dir__."/logs/".UniqueConst::$serverID."/gen{$no}.txt", $log);
|
||||
}
|
||||
|
||||
function getGenLogRecent(int $no, int $count) {
|
||||
return join('<br>', array_reverse(getFormattedFileLogRecent(__dir__."/logs/gen{$no}.txt", $count, 300)));
|
||||
return join('<br>', array_reverse(getFormattedFileLogRecent(__dir__."/logs/".UniqueConst::$serverID."/gen{$no}.txt", $count, 300)));
|
||||
}
|
||||
|
||||
function pushBatRes($general, $log) {
|
||||
$no = Util::toInt($general['no']);
|
||||
pushRawFileLog(__dir__."/logs/batres{$no}.txt", $log);
|
||||
pushRawFileLog(__dir__."/logs/".UniqueConst::$serverID."/batres{$no}.txt", $log);
|
||||
}
|
||||
|
||||
function getBatResRecent(int $no, int $count) {
|
||||
return join('<br>', array_reverse(getFormattedFileLogRecent(__dir__."/logs/batres{$no}.txt", $count, 300)));
|
||||
return join('<br>', array_reverse(getFormattedFileLogRecent(__dir__."/logs/".UniqueConst::$serverID."/batres{$no}.txt", $count, 300)));
|
||||
}
|
||||
|
||||
function pushBatLog($general, $log) {
|
||||
$no = Util::toInt($general['no']);
|
||||
pushRawFileLog(__dir__."/logs/batlog{$no}.txt", $log);
|
||||
pushRawFileLog(__dir__."/logs/".UniqueConst::$serverID."/batlog{$no}.txt", $log);
|
||||
}
|
||||
|
||||
function getBatLogRecent(int $no, int $count) {
|
||||
return join('<br>', array_reverse(getFormattedFileLogRecent(__dir__."/logs/batlog{$no}.txt", $count, 300)));
|
||||
return join('<br>', array_reverse(getFormattedFileLogRecent(__dir__."/logs/".UniqueConst::$serverID."/batlog{$no}.txt", $count, 300)));
|
||||
}
|
||||
|
||||
function pushOldNationStop(int $no, int $nationNo){
|
||||
$logPrefixList = ['batres', 'gen', 'batlog'];
|
||||
|
||||
$result = [];
|
||||
foreach($logPrefixList as $logPrefix){
|
||||
$path = __dir__."/logs/".UniqueConst::$serverID."/{$logPrefix}{$no}.txt";
|
||||
if(file_exists($path)){
|
||||
$fileLen = @filesize($path);
|
||||
}
|
||||
else{
|
||||
$fileLen = 0;
|
||||
}
|
||||
$result[$logPrefix] = $fileLen;
|
||||
}
|
||||
|
||||
$baseStopPath = __dir__."/logs/".UniqueConst::$serverID."/stop{$no}.txt";
|
||||
if(file_exists($baseStopPath)){
|
||||
$oldValues = Json::decode(file_get_contents($baseStopPath));
|
||||
}
|
||||
else{
|
||||
$oldValues = [];
|
||||
}
|
||||
|
||||
$oldValues[$nationNo] = $result;
|
||||
|
||||
file_put_contents($baseStopPath, Json::encode($oldValues, Json::PRETTY));
|
||||
}
|
||||
|
||||
//DB-based
|
||||
@@ -298,6 +326,7 @@ function LogHistory($isFirst=0) {
|
||||
if(STEP_LOG) pushStepLog(date('Y-m-d H:i:s').', contents collected');
|
||||
|
||||
$db->insert('history', [
|
||||
'server_id' => UniqueConst::$serverID,
|
||||
'year' => $year,
|
||||
'month' => $month,
|
||||
'map' => $map_json,
|
||||
|
||||
+11
-3
@@ -1,12 +1,14 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
class MapRequest{
|
||||
public $serverID;
|
||||
public $year;
|
||||
public $month;
|
||||
public $aux;
|
||||
public $neutralView;
|
||||
public $showMe;
|
||||
function __construct($obj){
|
||||
$this->serverID = Util::array_get($obj['serverID'], null);
|
||||
$this->year = Util::array_get($obj['year']);
|
||||
$this->month = Util::array_get($obj['month']);
|
||||
$this->aux = Util::array_get($obj['aux'],[]);
|
||||
@@ -19,14 +21,20 @@ class MapRequest{
|
||||
/**
|
||||
* @param int $year
|
||||
* @param int $month
|
||||
* @param string|null $serverID
|
||||
* @return mixed
|
||||
*/
|
||||
function getHistoryMap($year, $month){
|
||||
function getHistoryMap($year, $month, ?string $serverID=null){
|
||||
if(!$year || !$month){
|
||||
return ['result'=>false, 'reason'=>'연 월이 지정되지 않음'];
|
||||
}
|
||||
|
||||
$map = DB::db()->queryFirstField('select map from history where year=%i and month=%i',
|
||||
if($serverID === null){
|
||||
$serverID = UniqueConst::$serverID;
|
||||
}
|
||||
|
||||
$map = DB::db()->queryFirstField('SELECT map FROM history WHERE server_id = %s AND year=%i and month=%i',
|
||||
$serverID,
|
||||
$year,
|
||||
$month);
|
||||
|
||||
@@ -47,7 +55,7 @@ function getWorldMap($req){
|
||||
}
|
||||
|
||||
if($req->year && $req->month){
|
||||
return getHistoryMap($req->year, $req->month);
|
||||
return getHistoryMap($req->year, $req->month, $req->serverID??null);
|
||||
}
|
||||
|
||||
$session = Session::getInstance();
|
||||
|
||||
@@ -44,15 +44,3 @@ function getMailboxList(){
|
||||
return $result;
|
||||
|
||||
}
|
||||
|
||||
|
||||
//Legacy
|
||||
|
||||
function moveMsg($table, $msgtype, $msgnum, $msg, $type, $who, $when, $column, $value) {
|
||||
$db = DB::db();
|
||||
$connect=$db->get();
|
||||
|
||||
//TODO: moveMsg 쓰는 곳 모두 고쳐!!!
|
||||
$query = "update {$table} set {$msgtype}{$msgnum}='$msg',{$msgtype}{$msgnum}_type='$type',{$msgtype}{$msgnum}_who='$who',{$msgtype}{$msgnum}_when='$when' where {$column}='$value'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
}
|
||||
|
||||
+482
-211
@@ -228,7 +228,7 @@ function processAI($no) {
|
||||
// 전쟁준비 선포중이면 2상태
|
||||
if($dipCount > 0) { $dipState = 2; }
|
||||
|
||||
$query = "select no from diplomacy where me='{$general['nation']}' and state=1 and term<=3";
|
||||
$query = "select no from diplomacy where me='{$general['nation']}' and state=1 and term<=5";
|
||||
$result = MYDB_query($query, $connect) or Error("processAI04 ".MYDB_error($connect),"");
|
||||
$dipCount = MYDB_num_rows($result);
|
||||
// 교전 직전이면 3상태
|
||||
@@ -309,12 +309,11 @@ function processAI($no) {
|
||||
//재야인경우
|
||||
if($general['npc'] == 5 && $general['level'] == 0) {
|
||||
// 오랑캐는 바로 임관
|
||||
$query = "select nation from general where level=12 and npc=5 and nation not in (0{$general['nations']}0) order by rand() limit 0,1";
|
||||
$result = MYDB_query($query, $connect) or Error("processAI06 ".MYDB_error($connect),"");
|
||||
$rulerCount = MYDB_num_rows($result);
|
||||
if($rulerCount > 0) {
|
||||
$ruler = MYDB_fetch_array($result);
|
||||
$command = EncodeCommand(0, 0, $ruler['nation'], 25); //임관
|
||||
|
||||
$rulerNation = $db->queryFirstField('SELECT nation FROM general WHERE `level`=12 AND npc=5 and nation not in %li ORDER BY RAND() limit 1', Json::decode($general['nations']));
|
||||
|
||||
if($ruler) {
|
||||
$command = EncodeCommand(0, 0, $rulerNation, 25); //임관
|
||||
} else {
|
||||
$command = EncodeCommand(0, 0, 0, 42); //견문
|
||||
}
|
||||
@@ -322,16 +321,20 @@ function processAI($no) {
|
||||
MYDB_query($query, $connect) or Error("processAI07 ".MYDB_error($connect),"");
|
||||
return;
|
||||
} elseif($general['npc'] < 5 && $general['level'] == 0) {
|
||||
switch(rand()%5) {
|
||||
//임관 40%
|
||||
case 0: case 1:
|
||||
switch(Util::choiceRandomUsingWeight([11.4, 40, 20, 28.6])) {
|
||||
//임관 10%
|
||||
case 0:
|
||||
|
||||
$available = true;
|
||||
|
||||
if($admin['startyear']+3 > $admin['year']){
|
||||
//초기 임관 기간에서는 국가가 적을수록 임관 시도가 적음
|
||||
$nationCnt = $db->queryFirstField('SELECT count(nation) FROM nation');
|
||||
if(Util::randBool(1/$nationCnt)){
|
||||
$notFullNationCnt = $db->queryFirstField('SELECT count(nation) FROM nation WHERE gennum < %i', GameConst::$initialNationGenLimit);
|
||||
if($nationCnt == 0 || $notFullNationCnt == 0){
|
||||
$available = false;
|
||||
}
|
||||
else if(Util::randBool(pow(1 / $nationCnt / pow($notFullNationCnt, 3), 1/4))){
|
||||
//국가가 1개일 경우에는 '임관하지 않음'
|
||||
$available = false;
|
||||
}
|
||||
@@ -345,11 +348,11 @@ function processAI($no) {
|
||||
$command = EncodeCommand(0, 0, 99, 25); //임관
|
||||
}
|
||||
break;
|
||||
case 2: case 3: //거병이나 견문 40%
|
||||
// 초반이면서 능력이 좋은놈 위주로 1.5%확률로 거병 (300명 재야시 2년간 약 15개 거병 예상)
|
||||
$prop = rand() % 100;
|
||||
$ratio = Util::round(($general['leader'] + $general['power'] + $general['intel']) / 3);
|
||||
if($admin['startyear']+2 > $admin['year'] && $prop < $ratio && rand()%200 < 3 && $general['makelimit'] == 0) {
|
||||
case 1: //거병이나 견문 40%
|
||||
// 초반이면서 능력이 좋은놈 위주로 1.4%확률로 거병
|
||||
$prop = Util::randF() * (GameConst::$defaultStatNPCMax + GameConst::$chiefStatMin) / 2;
|
||||
$ratio = ($general['leader'] + $general['power'] + $general['intel']) / 3;
|
||||
if($admin['startyear']+2 > $admin['year'] && $prop < $ratio && Util::randBool(0.014) && $general['makelimit'] == 0) {
|
||||
//거병
|
||||
$command = EncodeCommand(0, 0, 0, 55);
|
||||
} else {
|
||||
@@ -357,10 +360,13 @@ function processAI($no) {
|
||||
$command = EncodeCommand(0, 0, 0, 42);
|
||||
}
|
||||
break;
|
||||
case 4: //이동 20%
|
||||
case 2: //이동 20%
|
||||
$paths = explode("|", $city['path']);
|
||||
$command = EncodeCommand(0, 0, $paths[rand()%count($paths)], 21);
|
||||
break;
|
||||
default:
|
||||
$command = EncodeCommand(0, 0, 0, 42);
|
||||
break;
|
||||
}
|
||||
$query = "update general set turn0='$command' where no='{$general['no']}'";
|
||||
MYDB_query($query, $connect) or Error("processAI07 ".MYDB_error($connect),"");
|
||||
@@ -478,184 +484,11 @@ function processAI($no) {
|
||||
|
||||
//방랑군 아니고, 입력된 턴이 없을때 수뇌부가 할일
|
||||
if($nation['level'] != 0 && $general['level'] >= 5 && $rulerCommand == 0) {
|
||||
$query = "select A.no,A.name,A.nation,B.nation from general A, city B where A.city=B.city and A.nation='{$general['nation']}' and B.nation!='{$general['nation']}' and A.no!='{$general['no']}' order by rand() limit 0,1";
|
||||
$result = MYDB_query($query, $connect) or Error("processAI11 ".MYDB_error($connect),"");
|
||||
$curGen = MYDB_fetch_array($result);
|
||||
|
||||
if($curGen['no'] != 0) { // 타도시에 있는 경우 국내로 발령
|
||||
if($dipState >= 3) {
|
||||
$query = "select city from city where nation='{$general['nation']}' and front=1 and supply=1 order by rand() limit 0,1";
|
||||
$result = MYDB_query($query, $connect) or Error("processAI10 ".MYDB_error($connect),"");
|
||||
$selCity = MYDB_fetch_array($result);
|
||||
if($selCity['city'] > 0) {
|
||||
// 발령
|
||||
$command = EncodeCommand(0, $curGen['no'], $selCity['city'], 27);
|
||||
} else {
|
||||
// 발령
|
||||
$command = EncodeCommand(0, $curGen['no'], $city['city'], 27);
|
||||
}
|
||||
} else {
|
||||
// 발령
|
||||
$command = EncodeCommand(0, $curGen['no'], $city['city'], 27);
|
||||
}
|
||||
$query = "update nation set l{$general['level']}turn0='$command' where nation='{$general['nation']}'";
|
||||
MYDB_query($query, $connect) or Error("processAI09 ".MYDB_error($connect),"");
|
||||
} elseif($dipState <= 1) { // 평시엔 균등 발령만
|
||||
//발령, 최소장수 도시 선택, 최다장수도시의 장수 선택
|
||||
$query = "select B.city,count(*) as cnt,((B.agri+B.comm+B.secu+B.def+B.wall)/(B.agri2+B.comm2+B.secu2+B.def2+B.wall2)+(B.pop/B.pop2))/2*100 as dev from general A, city B where A.city=B.city and A.nation='{$general['nation']}' and B.nation='{$general['nation']}' and B.supply=1 group by A.city";
|
||||
$result = MYDB_query($query, $connect) or Error("processAI10 ".MYDB_error($connect),"");
|
||||
$cityCount = MYDB_num_rows($result);
|
||||
//도시 2개 이상일때만
|
||||
if($cityCount > 1) {
|
||||
$min = 500; $minCity = 0;
|
||||
$max = 0; $maxCity = 0;
|
||||
$devCity = 0;
|
||||
for($i=0; $i < $cityCount; $i++) {
|
||||
$curCity = MYDB_fetch_array($result);
|
||||
if($curCity['cnt'] >= $max) { $max = $curCity['cnt']; $maxCity = $curCity['city']; }
|
||||
if($curCity['cnt'] <= $min) { $min = $curCity['cnt']; $minCity = $curCity['city']; }
|
||||
if($curCity['dev'] < 70) { $devCity = $curCity['city']; } // 개발이 안된 곳 우선
|
||||
}
|
||||
if($devCity != 0) { $minCity = $devCity; }
|
||||
if($maxCity != $minCity) {
|
||||
$query = "select no from general where city='$maxCity' and nation='{$general['nation']}' and no!='{$general['no']}' and npc>=2 limit 0,1";
|
||||
$result = MYDB_query($query, $connect) or Error("processAI11 ".MYDB_error($connect),"");
|
||||
$curGen = MYDB_fetch_array($result);
|
||||
|
||||
if($curGen['no'] != 0) {
|
||||
// 발령
|
||||
$command = EncodeCommand(0, $curGen['no'], $minCity, 27);
|
||||
$query = "update nation set l{$general['level']}turn0='$command' where nation='{$general['nation']}'";
|
||||
MYDB_query($query, $connect) or Error("processAI09 ".MYDB_error($connect),"");
|
||||
}
|
||||
//계속 진행
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 병사있고 쌀있고 후방에 있는 장수
|
||||
$query = "select A.no from general A, city B where A.city=B.city and A.nation='{$general['nation']}' and B.nation='{$general['nation']}' and B.front=0 and A.crew>700 and A.rice>700*{$tech} order by A.npc,A.crew desc limit 0,1";
|
||||
$result = MYDB_query($query, $connect) or Error("processAI10 ".MYDB_error($connect),"");
|
||||
$selGen = MYDB_fetch_array($result);
|
||||
// 전방 도시, 30% 확률로 태수 있는 전방으로 발령
|
||||
if(rand()%100 < 30) {
|
||||
$query = "select city from city where nation='{$general['nation']}' and front=1 and supply=1 order by gen1 desc,rand() limit 0,1";
|
||||
} else {
|
||||
$query = "select city from city where nation='{$general['nation']}' and front=1 and supply=1 order by rand() limit 0,1";
|
||||
}
|
||||
$result = MYDB_query($query, $connect) or Error("processAI10 ".MYDB_error($connect),"");
|
||||
$selCity = MYDB_fetch_array($result);
|
||||
if($selGen['no'] > 0 && $selCity['city'] > 0 && rand() % 100 < 80) { // 80% 확률
|
||||
// 발령
|
||||
$command = EncodeCommand(0, $selGen['no'], $selCity['city'], 27);
|
||||
} else {
|
||||
//병사 없고 인구없는 전방에 있는 장수
|
||||
$query = "select A.no from general A, city B where A.city=B.city and A.nation='{$general['nation']}' and B.nation='{$general['nation']}' and B.pop<40000 and B.front=1 and A.crew<700 order by A.npc,A.crew limit 0,1";
|
||||
$result = MYDB_query($query, $connect) or Error("processAI10 ".MYDB_error($connect),"");
|
||||
$selGen = MYDB_fetch_array($result);
|
||||
// 인구많은도시
|
||||
$query = "select city from city where nation='{$general['nation']}' and supply=1 order by pop desc limit 0,1";
|
||||
$result = MYDB_query($query, $connect) or Error("processAI10 ".MYDB_error($connect),"");
|
||||
$selCity = MYDB_fetch_array($result);
|
||||
if($selGen['no'] > 0 && $selCity['city'] > 0 && rand() % 100 < 80) { // 80% 확률
|
||||
// 발령
|
||||
$command = EncodeCommand(0, $selGen['no'], $selCity['city'], 27);
|
||||
} else {
|
||||
// 발령할 장수 없으면 몰포
|
||||
if(rand() % 2 == 0) { $type = "gold"; $type2 = 1; }
|
||||
else { $type = "rice"; $type2 = 2; }
|
||||
|
||||
if($nation[$type] < $type2*3000) { // 몰수
|
||||
// 몰수 대상
|
||||
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, $genID, $amount, 24); // 금,쌀 1000단위 몰수
|
||||
}
|
||||
} else { // 포상
|
||||
// 포상 대상
|
||||
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, $genID, $amount, 23); // 금,쌀 1000단위 포상
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
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),"");
|
||||
}
|
||||
$command = NPCStaffWork($general, $nation, $dipState);
|
||||
if($command){
|
||||
$db->update('nation', [
|
||||
"l{$general['level']}turn0"=>$command
|
||||
], 'nation=%i', $general['nation']);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -703,7 +536,7 @@ function processAI($no) {
|
||||
){
|
||||
//쌀을 많이 들고 있다면
|
||||
$amount = $general['rice'] * 0.9;
|
||||
$amount = intdiv(Util::valueFit($amount, $resrc + 700, 10000), 100);
|
||||
$amount = intdiv(Util::valueFit($amount, $resrc + 1000, 10000), 100);
|
||||
|
||||
$command = EncodeCommand(0, 2, $amount, 44); //헌납
|
||||
$db->update('general', [
|
||||
@@ -718,7 +551,7 @@ function processAI($no) {
|
||||
){
|
||||
//금을 많이 들고 있다면
|
||||
$amount = $general['gold'] * 0.9;
|
||||
$amount = intdiv(Util::valueFit($amount, $resrc + 700, 10000), 100);
|
||||
$amount = intdiv(Util::valueFit($amount, $resrc + 1000, 10000), 100);
|
||||
|
||||
$command = EncodeCommand(0, 1, $amount, 44); //헌납
|
||||
$db->update('general', [
|
||||
@@ -740,12 +573,12 @@ function processAI($no) {
|
||||
|
||||
// R
|
||||
// ┃ ┃ 공격/내정
|
||||
// 700┃쌀┣━━━━┓
|
||||
// 500┃쌀┣━━━━┓
|
||||
// ┃팜┃ ┃
|
||||
// 100┣━┫ 내정 ┣━━━
|
||||
// 100┣━┫ 내정 ┣━━━
|
||||
// ┃조┃ ┃쌀삼
|
||||
// 0┗━┻━━━━┻━━━> G
|
||||
// 100 700
|
||||
// 100 500
|
||||
|
||||
$target = array();
|
||||
// 평시거나 초반아니면서 공격가능 없으면서 병사 있으면 해제(25%)
|
||||
@@ -758,7 +591,7 @@ function processAI($no) {
|
||||
elseif($general['gold'] < 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['gold'] < 500 && $general['rice'] < 500) { $command = EncodeCommand(0, 0, 0, 1); } //금쌀되면 내정
|
||||
elseif($general['rice'] < 100) { //쌀없으면 쌀삼
|
||||
$amount = intdiv(($general['gold'] - $general['rice'])/2, 100); // 100단위
|
||||
$command = EncodeCommand(0, 2, $amount, 49); //삼
|
||||
@@ -831,7 +664,7 @@ function processAI($no) {
|
||||
// 700t
|
||||
|
||||
} else { // 공격인 경우
|
||||
if($general['crew'] < 700 && $general['gold'] >= $resrc && $general['rice'] >= $resrc) { //자원되고, 병사없을때
|
||||
if($general['crew'] < 1000 && $general['gold'] >= $resrc && $general['rice'] >= $resrc) { //자원되고, 병사없을때
|
||||
if($city['pop'] > 40000) { $command = EncodeCommand(0, 0, 0, 11); }
|
||||
else { $command = EncodeCommand(0, 0, 0, 1); }
|
||||
} elseif($general['rice'] < $resrc && $general['rice'] <= $general['gold']) {
|
||||
@@ -845,9 +678,9 @@ function processAI($no) {
|
||||
if($amount > 0) { $command = EncodeCommand(0, 1, $amount, 49); }//팜
|
||||
else { $command = EncodeCommand(0, 0, 0, (rand()%2)*8 + 1); } // 내정, 조달
|
||||
//자원, 병사 모두 충족
|
||||
} elseif($general['crew'] >= 700 && $general['train'] < 90) {
|
||||
} elseif($general['crew'] >= 1000 && $general['train'] < 90) {
|
||||
$command = EncodeCommand(0, 0, 0, 13); //훈련
|
||||
} elseif($general['crew'] >= 700 && $general['atmos'] < 90) {
|
||||
} elseif($general['crew'] >= 1000 && $general['atmos'] < 90) {
|
||||
$command = EncodeCommand(0, 0, 0, 14); //사기진작
|
||||
} else {
|
||||
//공격
|
||||
@@ -860,25 +693,25 @@ function processAI($no) {
|
||||
// ┃ ┃
|
||||
// ┃쌀┃
|
||||
// ┃팜┃ 공격
|
||||
// 700t┣━╋━━━━━
|
||||
//1000t┣━╋━━━━━
|
||||
// ┃조┃ 쌀삼
|
||||
// 0┗━┻━━━━━> G
|
||||
// 700t
|
||||
// 1000t
|
||||
|
||||
//전시일때
|
||||
if($general['gold'] + $general['rice'] < $resrc*2) { $command = EncodeCommand(0, 0, 0, 9); } //금쌀없으면 조달
|
||||
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) { // 금없으면 쌀팜
|
||||
elseif($general['gold'] < $resrc || ($general['gold'] < $resrc *2 && $general['rice'] > $resrc * 6)) { // 금없으면 쌀팜
|
||||
$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) { // 쌀없으면 쌀삼
|
||||
} elseif($general['rice'] < $resrc || ($general['rice'] < $resrc *2 && $general['gold'] > $resrc * 6)) { // 쌀없으면 쌀삼
|
||||
$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); } //내정장일때 내정
|
||||
elseif($general['crew'] < 700 && $general['gold'] >= $resrc && $general['rice'] >= $resrc) {
|
||||
elseif($general['crew'] < 1000 && $general['gold'] >= $resrc && $general['rice'] >= $resrc) {
|
||||
$query = "select no from general where nation='{$general['nation']}'";
|
||||
$result = MYDB_query($query, $connect) or Error("processAI16 ".MYDB_error($connect),"");
|
||||
$genCount = MYDB_num_rows($result);
|
||||
@@ -917,13 +750,13 @@ function processAI($no) {
|
||||
$command = EncodeCommand(0, 0, 0, 7); //인구 안되면 정장
|
||||
}
|
||||
}
|
||||
} elseif($general['crew'] >= 700 && $general['train'] < 90) {
|
||||
} elseif($general['crew'] >= 1000 && $general['train'] < 90) {
|
||||
if($general['atmos'] >= 90 && $general['train'] >= 60 && $general['mode'] == 0) {
|
||||
$query = "update general set mode=1 where no='{$general['no']}'";
|
||||
MYDB_query($query, $connect) or Error("processAI05 ".MYDB_error($connect),"");
|
||||
}
|
||||
$command = EncodeCommand(0, 0, 0, 13); //훈련
|
||||
} elseif($general['crew'] >= 700 && $general['atmos'] < 90) {
|
||||
} elseif($general['crew'] >= 1000 && $general['atmos'] < 90) {
|
||||
if($general['atmos'] >= 60 && $general['train'] >= 90 && $general['mode'] == 0) {
|
||||
$query = "update general set mode=1 where no='{$general['no']}'";
|
||||
MYDB_query($query, $connect) or Error("processAI05 ".MYDB_error($connect),"");
|
||||
@@ -1018,6 +851,444 @@ function processAI($no) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function NPCStaffWork($general, $nation, $dipState){
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
$connect=$db->get();
|
||||
|
||||
$admin = $gameStor->getValues(['startyear','year','month','turnterm','scenario','gold_rate','rice_rate', 'develcost']);
|
||||
|
||||
$nationCities = [];
|
||||
$frontCitiesID = [];
|
||||
$frontImportantCitiesID = [];
|
||||
$supplyCitiesID = [];
|
||||
$backupCitiesID = [];
|
||||
|
||||
$tech = getTechCost($nation['tech']);
|
||||
|
||||
foreach ($db->query('SELECT * FROM city WHERE nation = %i', $general['nation']) as $nationCity) {
|
||||
$nationCity['generals'] = [];
|
||||
$cityID = $nationCity['city'];
|
||||
$dev =
|
||||
($nationCity['agri'] + $nationCity['comm'] + $nationCity['secu'] + $nationCity['def'] + $nationCity['wall'])/
|
||||
($nationCity['agri'] + $nationCity['comm'] + $nationCity['secu'] + $nationCity['def'] + $nationCity['wall']);
|
||||
$dev += $nationCity['pop'] / $nationCity['pop2'];
|
||||
$dev /= 50;
|
||||
|
||||
$nationCity['dev'] = $dev;
|
||||
|
||||
$nationCities[$cityID] = $nationCity;
|
||||
|
||||
if($nationCity['supply']){
|
||||
$supplyCitiesID[] = $cityID;
|
||||
if($nationCity['front']){
|
||||
$frontCitiesID[] = $cityID;
|
||||
if($nationCity['gen1']){
|
||||
$frontImportantCitiesID[] = $cityID;
|
||||
}
|
||||
}
|
||||
else{
|
||||
$backupCitiesID[] = $cityID;
|
||||
}
|
||||
}
|
||||
}
|
||||
Util::shuffle_assoc($nationCities);
|
||||
shuffle($frontCitiesID);
|
||||
shuffle($supplyCitiesID);
|
||||
|
||||
$nationGenerals = [];
|
||||
$lostGeneralsID = [];
|
||||
|
||||
$userGeneralsID = [];
|
||||
$npcWarGeneralsID = [];
|
||||
$npcCivilGeneralsID = [];
|
||||
|
||||
|
||||
$commandList = [];
|
||||
|
||||
foreach($db->query('SELECT `no`, nation, city, npc, `gold`, `rice`, leader, `power`, intel, killturn, crew, train, atmos, `level` FROM general WHERE nation = %i', $general['nation']) as $nationGeneral) {
|
||||
$cityID = $nationGeneral['city'];
|
||||
$generalID = $nationGeneral['no'];
|
||||
|
||||
if($generalID == $general['no']){
|
||||
continue;
|
||||
}
|
||||
|
||||
if(key_exists($cityID, $nationCities)){
|
||||
$nationCities[$cityID]['generals'][] = $generalID;
|
||||
if(!$nationCities[$cityID]['supply']){
|
||||
$lostGeneralsID[] = $generalID;
|
||||
}
|
||||
}
|
||||
else{
|
||||
$lostGeneralsID[] = $generalID;
|
||||
}
|
||||
|
||||
if($nationGeneral['npc']<2 && $nationGeneral['killturn'] >= 5){
|
||||
$userGeneralsID[] = $generalID;
|
||||
}
|
||||
else if($nationGeneral['leader']>=40 && $nationGeneral['killturn'] >= 5){
|
||||
$npcWarGeneralsID[] = $generalID;
|
||||
}
|
||||
else{
|
||||
//삭턴이 몇 안남은 장수는 '내정장 npc'로 처리
|
||||
$npcCivilGeneralsID[] = $generalID;
|
||||
}
|
||||
|
||||
$nationGenerals[$generalID] = $nationGeneral;
|
||||
}
|
||||
Util::shuffle_assoc($nationGenerals);
|
||||
shuffle($lostGeneralsID);
|
||||
|
||||
uasort($nationCities, function($lhs, $rhs){
|
||||
//키 순서를 지키지 않지만, 원래부터 random order를 목표로 하므로 크게 신경쓰지 않는다.
|
||||
return count($lhs['generals']) - count($rhs['generals']);
|
||||
});
|
||||
|
||||
|
||||
//타 도시에 있는 '유저장' 발령
|
||||
foreach($lostGeneralsID as $lostGeneralID){
|
||||
$lostGeneral = $nationGenerals[$lostGeneralID];
|
||||
if($lostGeneral['npc'] < 2){
|
||||
if($dipState >= 3 && $frontCitiesID){
|
||||
$selCityID = Util::choiceRandom($frontCitiesID);
|
||||
}
|
||||
else{
|
||||
$selCityID = Util::choiceRandom($supplyCitiesID);
|
||||
}
|
||||
$commandList[EncodeCommand(0, $lostGeneralID, $selCityID, 27)] = 200;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$resBaseType = [['gold', 1], ['rice', 2]];
|
||||
[$resName, $resType] = Util::choiceRandom($resBaseType);
|
||||
|
||||
usort($userGeneralsID, function($lhs, $rhs) use ($nationGenerals, $resName){
|
||||
return $nationGenerals[$lhs][$resName] - $nationGenerals[$rhs][$resName];
|
||||
});
|
||||
|
||||
usort($npcWarGeneralsID, function($lhs, $rhs) use ($nationGenerals, $resName){
|
||||
return $nationGenerals[$lhs][$resName] - $nationGenerals[$rhs][$resName];
|
||||
});
|
||||
|
||||
usort($npcCivilGeneralsID, function($lhs, $rhs) use ($nationGenerals, $resName){
|
||||
return $nationGenerals[$lhs][$resName] - $nationGenerals[$rhs][$resName];
|
||||
});
|
||||
|
||||
$avgUserRes = 0;
|
||||
foreach ($userGeneralsID as $id){
|
||||
$avgUserRes += $nationGenerals[$id][$resName];
|
||||
}
|
||||
$avgUserRes /= max(1, count($userGeneralsID));
|
||||
|
||||
$avgNpcWarRes = 0;
|
||||
foreach ($npcWarGeneralsID as $id){
|
||||
$avgNpcWarRes += $nationGenerals[$id][$resName];
|
||||
}
|
||||
$avgNpcWarRes /= max(1, count($npcWarGeneralsID));
|
||||
|
||||
$avgNpcCivilRes = 0;
|
||||
foreach ($npcCivilGeneralsID as $id){
|
||||
$avgNpcCivilRes += $nationGenerals[$id][$resName];
|
||||
}
|
||||
$avgNpcCivilRes /= max(1, count($npcCivilGeneralsID));
|
||||
|
||||
|
||||
|
||||
//금쌀이 부족한 '유저장' 먼저 포상
|
||||
while ($nation[$resName] > ($resName=='gold'?1:2)*3000 && $userGeneralsID) {
|
||||
$isWarUser = null;
|
||||
|
||||
foreach($userGeneralsID as $userGeneralID){
|
||||
$compUser = $nationGenerals[$userGeneralID];
|
||||
if($compUser['leader'] >= 50){
|
||||
$isWarUser = true;
|
||||
break;
|
||||
}
|
||||
if(Util::randF(0.2)){
|
||||
$isWarUser = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if($isWarUser === null){
|
||||
break;
|
||||
}
|
||||
|
||||
$compRes = $compUser[$resName];
|
||||
|
||||
$work = false;
|
||||
if(!$isWarUser){
|
||||
$work = false;
|
||||
} else if ($compRes < $avgNpcWarRes*3) {
|
||||
$work = true;
|
||||
} elseif ($compRes < $avgNpcCivilRes * 4) {
|
||||
$work = true;
|
||||
}
|
||||
|
||||
if((($isWarUser || $resName == 'gold') && $compUser[$resName] < 21000) || ($compUser[$resName] < 5000)){
|
||||
if($work){
|
||||
$amount = min(100, intdiv(($nation[$resName]-($resName=='rice'?(GameConst::$baserice):(GameConst::$basegold))), 3000)*10 + 10);
|
||||
$commandList[EncodeCommand($resType, $userGeneralsID[0], $amount, 23)] = 10; // 금,쌀 1000단위 포상
|
||||
}
|
||||
else{
|
||||
$amount = min(100, intdiv(($nation[$resName]-($resName=='rice'?(GameConst::$baserice):(GameConst::$basegold))), 5000)*10 + 10);
|
||||
$commandList[EncodeCommand($resType, $userGeneralsID[0], $amount, 23)] = 1; // 금,쌀 1000단위 포상
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
$minRes = $admin['develcost'] * 24 * $tech;
|
||||
|
||||
if($nation[$resName] < ($resName=='gold'?1:2)*3000) { // 몰수
|
||||
// 몰수 대상
|
||||
$compUser = $userGeneralsID?$nationGenerals[end($userGeneralsID)]:null;
|
||||
$compNpcWar = $npcWarGeneralsID?$nationGenerals[end($npcWarGeneralsID)]:null;
|
||||
$compNpcCivil = $npcCivilGeneralsID?$nationGenerals[end($npcCivilGeneralsID)]:null;
|
||||
|
||||
$compUserRes = $compUser[$resName]??0;
|
||||
$compNpcWarRes = $compNpcWar[$resName]*5??0;
|
||||
$compNpcCivilRes = $compNpcCivil[$resName]*10??0;
|
||||
|
||||
[$compRes, $compGenID] = max(
|
||||
[$compNpcCivilRes, $compNpcCivil['no']??null],
|
||||
[$compNpcWarRes, $compNpcWar['no']??null],
|
||||
[$compUserRes, $compUser['no']??null]
|
||||
);
|
||||
|
||||
if($compGenID){
|
||||
$targetGeneral = $nationGenerals[$compGenID];
|
||||
if($compGenID === ($compNpcCivil['no']??null)){
|
||||
$amount = intdiv($targetGeneral[$resName] - $minRes * 3, 100);
|
||||
}
|
||||
else{
|
||||
$amount = min(100, intdiv($targetGeneral[$resName], 5000)*10 + 10);
|
||||
}
|
||||
|
||||
if($amount > 0){
|
||||
$commandList[EncodeCommand($resType, $compGenID, $amount, 24)] = 3;
|
||||
}
|
||||
|
||||
}
|
||||
} else{ // 포상
|
||||
$compNpcWar = $npcWarGeneralsID?$nationGenerals[$npcWarGeneralsID[0]]:null;
|
||||
$compNpcCivil = $npcCivilGeneralsID?$nationGenerals[$npcCivilGeneralsID[0]]:null;
|
||||
|
||||
if($compNpcWar && $compNpcWar[$resName] < 21000){
|
||||
$amount = min(100, intdiv(($nation[$resName]-($resName=='rice'?(GameConst::$baserice):(GameConst::$basegold))), 5000)*10 + 10);
|
||||
$commandList[EncodeCommand($resType, $compNpcWar['no'], $amount, 23)] = 3;
|
||||
}
|
||||
if($compNpcCivil && $compNpcCivil[$resName] < $minRes){
|
||||
$amount = intdiv($minRes+99, 100);
|
||||
$commandList[EncodeCommand($resType, $compNpcCivil['no'], $amount, 23)] = 2;
|
||||
}
|
||||
}
|
||||
|
||||
//고립 도시 장수 발령
|
||||
foreach($lostGeneralsID as $lostGeneralID){
|
||||
$lostGeneral = $nationGenerals[$lostGeneralID];
|
||||
if($lostGeneral['npc']<2){
|
||||
//고립 유저 장수는 이미 세팅했음
|
||||
continue;
|
||||
}
|
||||
if($dipState >= 3 && $frontCitiesID){
|
||||
$selCityID = Util::choiceRandom($frontCitiesID);
|
||||
}
|
||||
else{
|
||||
$selCityID = Util::choiceRandom($supplyCitiesID);
|
||||
}
|
||||
//고립된 장수가 많을 수록 발령 확률 증가
|
||||
$commandList[EncodeCommand(0, $lostGeneralID, $selCityID, 27)] = sqrt(count($lostGeneralsID)) * 10;
|
||||
}
|
||||
|
||||
// 평시엔 균등 발령만
|
||||
if($dipState <= 1 && count($supplyCitiesID) > 1) {
|
||||
$targetCity = null;
|
||||
$minCity = null;
|
||||
$maxCity = null;
|
||||
$maxDevCity = null;
|
||||
foreach($nationCities as $nationCity){
|
||||
if($nationCity['dev']>=95){
|
||||
continue;
|
||||
}
|
||||
if($nationCity['supply']){
|
||||
$minCity = $nationCity;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//reverse_order T_T
|
||||
$maxCity = end($nationCities);
|
||||
if(!$minCity){
|
||||
$minCity = $maxCity;
|
||||
}
|
||||
while($maxCity['city'] !== $minCity['city']){
|
||||
if($nationCity['supply']){
|
||||
break;
|
||||
}
|
||||
$maxCity = prev($nationCities);
|
||||
}
|
||||
|
||||
foreach($nationCities as $nationCity){
|
||||
if($nationCity['city'] == $maxCity['city']){
|
||||
break;
|
||||
}
|
||||
if(!$nationCity['supply']){
|
||||
continue;
|
||||
}
|
||||
if($nationCity['dev'] < 70){
|
||||
$targetCity = $nationCity;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($nationCities as $nationCity) {
|
||||
if(!$nationCity['supply']){
|
||||
continue;
|
||||
}
|
||||
if(count($nationCity['generals']) == 0){
|
||||
continue;
|
||||
}
|
||||
if($maxDevCity === null || $maxDevCity['dev'] < $nationCity['dev']){
|
||||
$maxDevCity = $nationCity;
|
||||
}
|
||||
}
|
||||
|
||||
if($targetCity === null || (count($targetCity['generals']) >= count($maxCity['generals']) - 1)){
|
||||
$targetCity = $minCity;
|
||||
}
|
||||
|
||||
if($maxDevCity['dev'] >= 95 && $targetCity['city'] != $maxDevCity['city'] && $targetCity['dev'] <= 70){
|
||||
$targetGeneral = $nationGenerals[Util::choiceRandom($maxDevCity['generals'])];
|
||||
$commandList[EncodeCommand(0, $targetGeneral['no'], $targetCity['city'], 27)] = 2;
|
||||
}
|
||||
|
||||
if(count($targetCity['generals']) < count($maxCity['generals']) - 2){
|
||||
//세명 이상 차이나야 함
|
||||
$targetGeneral = $nationGenerals[Util::choiceRandom($maxCity['generals'])];
|
||||
if($targetGeneral['npc']>=2 || $maxCity['dev'] >= 95){
|
||||
//유저장은 의도가 있을 것이므로 삽나지 않는 이상 발령 안함!
|
||||
$commandList[EncodeCommand(0, $targetGeneral['no'], $targetCity['city'], 27)] = 5;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// 병사있고 쌀있고 후방에 있는 장수
|
||||
if($frontCitiesID){
|
||||
$workRemain = 3;
|
||||
foreach($nationGenerals as $nationGeneral){
|
||||
$generalCity = $nationCities[$nationGeneral['city']]??null;
|
||||
if(!$generalCity){
|
||||
continue;
|
||||
}
|
||||
if($nationGeneral['crew'] < 2000){
|
||||
continue;
|
||||
}
|
||||
if($nationGeneral['rice'] < 700 * $tech){
|
||||
continue;
|
||||
}
|
||||
if($generalCity['front']){
|
||||
continue;
|
||||
}
|
||||
if($nationGeneral['train'] * $nationGeneral['atmos'] < 75 * 75){
|
||||
continue;
|
||||
}
|
||||
|
||||
$score = 5;
|
||||
if($nationGeneral['npc']<2){
|
||||
$score *= 4;
|
||||
}
|
||||
|
||||
if(Util::randF(0.3) && $frontImportantCitiesID){
|
||||
$targetCityID = Util::choiceRandom($frontImportantCitiesID);
|
||||
}
|
||||
else{
|
||||
$targetCityID = Util::choiceRandom($frontCitiesID);
|
||||
}
|
||||
|
||||
$command = EncodeCommand(0, $nationGeneral['no'], $targetCityID, 27);
|
||||
|
||||
if($nationGeneral['npc']<2 && ($workRemain&2)){
|
||||
$workRemain ^= 2;
|
||||
$commandList[$command] = $score;
|
||||
}
|
||||
else if($nationGeneral['npc']>=2 && ($workRemain&1)){
|
||||
$workRemain ^= 1;
|
||||
$commandList[$command] = $score;
|
||||
}
|
||||
|
||||
if($workRemain <= 0){
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//병사 없고 인구없는 전방에 있는 장수
|
||||
if($frontCitiesID && $backupCitiesID){
|
||||
$workRemain = 3;
|
||||
foreach($nationGenerals as $nationGeneral){
|
||||
$generalCity = $nationCities[$nationGeneral['city']]??null;
|
||||
if(!$generalCity){
|
||||
continue;
|
||||
}
|
||||
if($nationGeneral['crew'] >= 1000){
|
||||
continue;
|
||||
}
|
||||
if($nationGeneral['rice'] < 700 * $tech){
|
||||
continue;
|
||||
}
|
||||
if(!$generalCity['front']){
|
||||
continue;
|
||||
}
|
||||
if($generalCity['pop'] - 33000 > $nationGeneral['leader']){
|
||||
continue;
|
||||
}
|
||||
|
||||
$score = 5;
|
||||
if($nationGeneral['npc']<2){
|
||||
$score *= 4;
|
||||
}
|
||||
|
||||
$popTrial = 5;
|
||||
for($popTrial = 0; $popTrial < 5; $popTrial++){
|
||||
$targetCity = $nationCities[Util::choiceRandom($backupCitiesID)];
|
||||
if($targetCity['pop'] < 33000 + $nationGeneral['leader']){
|
||||
continue;
|
||||
}
|
||||
if (Util::randF($targetCity['pop'] / $targetCity['pop2'])) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$command = EncodeCommand(0, $nationGeneral['no'], $targetCity['city'], 27);
|
||||
|
||||
if($nationGeneral['npc']<2 && ($workRemain&2)){
|
||||
$workRemain ^= 2;
|
||||
$commandList[$command] = $score;
|
||||
}
|
||||
else if($nationGeneral['npc']>=2 && ($workRemain&1)){
|
||||
$workRemain ^= 1;
|
||||
$commandList[$command] = $score;
|
||||
}
|
||||
|
||||
if($workRemain <= 0){
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!$commandList)return 0;
|
||||
return Util::choiceRandomUsingWeight($commandList);
|
||||
}
|
||||
|
||||
//종전하기, 지급율
|
||||
//$command = $fourth * 100000000 + $type * 100000 + $crew * 100 + 11;
|
||||
|
||||
|
||||
@@ -46,7 +46,10 @@ function process_22(&$general) {
|
||||
$ded = CharDedication($ded, $general['personal']);
|
||||
|
||||
$msg = ScoutMessage::buildScoutMessage($general['no'], $who, $reason);
|
||||
$msg->send(true);
|
||||
if($msg){
|
||||
$msg->send(true);
|
||||
}
|
||||
|
||||
|
||||
$general['intel2']++;
|
||||
$query = "update general set resturn='SUCCESS',gold=gold-'$cost',intel2='{$general['intel2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
|
||||
@@ -78,12 +81,14 @@ function process_25(&$general) {
|
||||
|
||||
$nation = null;
|
||||
|
||||
$joinedNations = Json::decode($general['nations']);
|
||||
|
||||
// 랜덤임관인 경우
|
||||
if($general['npc'] > 2 && $where >= 98 && ($admin['scenario'] == 0 || $admin['scenario'] >= 20 || !$admin['fiction'])){
|
||||
//'사실' 모드에서는 '성향'에 우선을 두되, 장수수, 랜덤에 비중을 둠
|
||||
$nations = $db->query(
|
||||
'SELECT nation.`name` as `name`,nation.nation as nation,scout,nation.`level` as `level`,gennum,`affinity` FROM nation join general on general.nation = nation.nation and general.level = 12 WHERE nation.nation not in %s and gennum < %i and scout = 0',
|
||||
'0'.$general['nations'].'0',
|
||||
'SELECT nation.`name` as `name`,nation.nation as nation,scout,nation.`level` as `level`,gennum,`affinity` FROM nation join general on general.nation = nation.nation and general.level = 12 WHERE nation.nation not in %li and gennum < %i and scout = 0',
|
||||
$joinedNations,
|
||||
($admin['year'] < $admin['startyear']+3)?GameConst::$initialNationGenLimit:GameConst::$defaultMaxGeneral
|
||||
);
|
||||
shuffle($nations);
|
||||
@@ -114,17 +119,20 @@ function process_25(&$general) {
|
||||
}
|
||||
else if($where >= 98) {
|
||||
//랜임
|
||||
$generals = [];
|
||||
foreach($db->queryAllLists('SELECT count(no), nation FROM general WHERE npc <= 2 AND nation > 0 GROUP BY nation') as list($cnt, $nation)){
|
||||
$generals[$nation] = $cnt;
|
||||
}
|
||||
|
||||
$allGen = array_sum($generals);
|
||||
|
||||
$nations = $db->query(
|
||||
'SELECT nation.`name` as `name`,nation.nation as nation,scout,nation.`level` as `level`,gennum,`injury` FROM nation join general on general.nation = nation.nation and general.level = 12 WHERE nation.nation not in %s and gennum < %i and scout = 0',
|
||||
'0'.$general['nations'].'0',
|
||||
'SELECT nation.`name` as `name`,nation.nation as nation,scout,nation.`level` as `level`,gennum,`injury` FROM nation join general on general.nation = nation.nation and general.level = 12 WHERE nation.nation not in %li and gennum < %i and scout = 0',
|
||||
$joinedNations,
|
||||
($admin['year'] < $admin['startyear']+3)?GameConst::$initialNationGenLimit:GameConst::$defaultMaxGeneral
|
||||
);
|
||||
shuffle($nations);
|
||||
|
||||
$allGen = array_sum(array_map(function($item) {
|
||||
return $item['gennum'];
|
||||
}, $nations));
|
||||
|
||||
$randVals = [];
|
||||
foreach($nations as $idx=>$testNation){
|
||||
// 임관금지없음 국가, 방랑군 제외
|
||||
@@ -133,11 +141,11 @@ function process_25(&$general) {
|
||||
}
|
||||
|
||||
$score = 1;
|
||||
if($admin['startyear']+3 > $admin['year']){
|
||||
$score *= sqrt((100-$testNation['injury'])/100);
|
||||
if($admin['startyear']+3 > $admin['year'] && $general['npc'] > 2){
|
||||
$score *= sqrt((100-max(30, $testNation['injury']))/100);
|
||||
}
|
||||
|
||||
$score *= sqrt($allGen/$testNation['gennum']);
|
||||
$score *= sqrt($allGen/$generals[$testNation['nation']]);
|
||||
$randVals[$idx] = $score;
|
||||
}
|
||||
|
||||
@@ -168,7 +176,7 @@ function process_25(&$general) {
|
||||
$log[] = "<C>●</>{$admin['month']}월:현재 <D>{$nation['name']}</>{$josaUn} 임관이 금지되어 있습니다. 임관 실패.";
|
||||
} elseif($general['makelimit'] > 0 && $general['npc'] < 5) {
|
||||
$log[] = "<C>●</>{$admin['month']}월:재야가 된지 12턴이 지나야 합니다. 임관 실패. <1>$date</>";
|
||||
} elseif(strpos($general['nations'], ",{$nation['nation']},") > 0) {
|
||||
} elseif(in_array($nation['nation'], $joinedNations)) {
|
||||
$log[] = "<C>●</>{$admin['month']}월:이미 임관했었던 국가입니다. 임관 실패. <1>$date</>";
|
||||
} else {
|
||||
$josaYi = JosaUtil::pick($general['name'], '이');
|
||||
@@ -195,15 +203,23 @@ function process_25(&$general) {
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$king = MYDB_fetch_array($result);
|
||||
|
||||
|
||||
// NPC초반시 임관기록 추가 안함
|
||||
if($general['npc'] > 1 && $admin['year'] < $admin['startyear']+3) {
|
||||
} else {
|
||||
$general['nations'] .= "{$nation['nation']},";
|
||||
$joinedNations[] = $nation['nation'];
|
||||
}
|
||||
|
||||
// 국적 바꾸고 등급 일반으로 // 명성 상승
|
||||
$query = "update general set resturn='SUCCESS',nation='{$nation['nation']}',nations='{$general['nations']}',level='1',experience=experience+'$exp',city='{$king['city']}',belong=1 where no='{$general['no']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$db->update('general', [
|
||||
'resturn'=>'SUCCESS',
|
||||
'nation'=>$nation['nation'],
|
||||
'nations'=>Json::encode($joinedNations),
|
||||
'level'=>1,
|
||||
'experience'=>$db->sqleval('experience + %i', $exp),
|
||||
'city'=>$king['city'],
|
||||
'belong'=>1
|
||||
], 'no=%i', $general['no']);
|
||||
|
||||
//국가 기술력 그대로
|
||||
$query = "select no from general where nation='{$nation['nation']}'";
|
||||
@@ -647,8 +663,13 @@ function process_46(&$general) {
|
||||
} elseif($city['level'] != 5 && $city['level'] != 6) {
|
||||
$log[] = "<C>●</>{$admin['month']}월:중, 소 도시에서만 가능합니다. 건국 실패. <1>$date</>";
|
||||
} else {
|
||||
$query = "update nation set name='{$general['makenation']}',color='$color',level=1,type='$type',capital='{$general['city']}' where nation='{$general['nation']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$db->update('nation', [
|
||||
'name'=>$general['makenation'],
|
||||
'color'=>$color,
|
||||
'level'=>1,
|
||||
'type'=>$type,
|
||||
'capital'=>$general['city'],
|
||||
], 'nation=%i', $general['nation']);
|
||||
|
||||
refreshNationStaticInfo();
|
||||
$nation = getNationStaticInfo($general['nation']);
|
||||
|
||||
@@ -24,13 +24,6 @@ function Tag2Code(string $str) {
|
||||
return nl2br($str);
|
||||
}
|
||||
|
||||
function BadTag2Code(string $str) {
|
||||
/* FIXME: 제대로된 tag 변환 코드 사용 */
|
||||
$str = str_replace("<script", "<sorry", $str);
|
||||
$str = str_replace("</script", "</sorry", $str);
|
||||
return $str;
|
||||
}
|
||||
|
||||
function tab(string $str, $maxsize, $ch) {
|
||||
$size = strlen($str);
|
||||
|
||||
|
||||
@@ -172,4 +172,15 @@ function getMapHtml(){
|
||||
$templates = new \League\Plates\Engine(__dir__.'/templates');
|
||||
|
||||
return $templates->render('map');
|
||||
}
|
||||
|
||||
function getInvitationList(array $nationList){
|
||||
$templates = new \League\Plates\Engine(__dir__.'/templates');
|
||||
|
||||
foreach($nationList as &$nation){
|
||||
$nation['textColor'] = newColor($nation['color']);
|
||||
}
|
||||
return $templates->render('invitationList', [
|
||||
'nationList'=>$nationList
|
||||
]);
|
||||
}
|
||||
+4
-4
@@ -44,7 +44,7 @@ if ($me['newmsg'] == 1 || $me['newvote'] == 1) {
|
||||
], 'owner=%i', $userID);
|
||||
}
|
||||
|
||||
$admin = $gameStor->getValues(['develcost','online','conlimit','tournament','tnmt_type','turnterm','scenario','scenario_text','extended_general','fiction','npcmode','vote']);
|
||||
$admin = $gameStor->getValues(['develcost','online','conlimit','tournament','tnmt_type','turnterm','scenario','scenario_text','extended_general','fiction','npcmode','vote','vote_title']);
|
||||
|
||||
$plock = $db->queryFirstField('SELECT plock FROM plock LIMIT 1');
|
||||
|
||||
@@ -181,11 +181,11 @@ echo "
|
||||
";
|
||||
|
||||
$vote = $admin['vote']?:[''];
|
||||
$vote[0] = Tag2Code($vote[0]);
|
||||
$vote_title = Tag2Code($admin['vote_title']??'-');
|
||||
if ($vote[0] == "") {
|
||||
echo "<font color=magenta>진행중 설문 없음</font>";
|
||||
} else {
|
||||
echo "<marquee scrollamount=3><font color=cyan>설문 진행중</font> : $vote[0]</marquee>";
|
||||
echo "<marquee scrollamount=3><font color=cyan>설문 진행중</font> : $vote_title</marquee>";
|
||||
}
|
||||
|
||||
|
||||
@@ -195,7 +195,7 @@ echo "
|
||||
?>
|
||||
<tr><td colspan=5 style="text-align:left;">접속중인 국가: <?=onlinenation()?></td></tr>
|
||||
<tr><td colspan=5 style="text-align:left;"><?=adminMsg()?></td></tr>
|
||||
<tr><td colspan=5 style="text-align:left;">【 국가방침 】<?php nationMsg(); ?></td></tr>
|
||||
<tr><td colspan=5 style="text-align:left;"><div>【 국가방침 】</div><div style="color:orange;"><?=nationMsg()?></div></td></tr>
|
||||
<tr><td colspan=5 style="text-align:left;">【 접속자 】<?=onlinegen()?></td></tr>
|
||||
<?php
|
||||
if ($session->userGrade >= 5) {
|
||||
|
||||
+8
-1
@@ -9,7 +9,14 @@ if(!class_exists('\sammo\DB')){
|
||||
}
|
||||
|
||||
$session = Session::requireLogin();
|
||||
if($session->userGrade < 5){
|
||||
|
||||
$serverName = DB::prefix();
|
||||
$serverAcl = $session->acl[$serverName]??[];
|
||||
$allowReset = in_array('reset', $serverAcl);
|
||||
$allowFullReset = in_array('fullReset',$serverAcl);
|
||||
$allowReset |= $allowFullReset;
|
||||
|
||||
if($session->userGrade < 5 && !$allowReset){
|
||||
die('관리자 아님');
|
||||
}
|
||||
|
||||
|
||||
+40
-1
@@ -5,7 +5,21 @@ include "lib.php";
|
||||
include "func.php";
|
||||
|
||||
$session = Session::requireLogin([])->setReadOnly();
|
||||
if($session->userGrade < 5){
|
||||
|
||||
if(!class_exists('\\sammo\\DB')){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'DB리셋 필요'
|
||||
]);
|
||||
}
|
||||
|
||||
$serverName = DB::prefix();
|
||||
$serverAcl = $session->acl[$serverName]??[];
|
||||
$allowReset = in_array('reset', $serverAcl);
|
||||
$allowFullReset = in_array('fullReset',$serverAcl);
|
||||
$allowReset |= $allowFullReset;
|
||||
|
||||
if($session->userGrade < 5 && !$allowReset){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'관리자 아님'
|
||||
@@ -38,6 +52,30 @@ if(!$v->validate()){
|
||||
]);
|
||||
}
|
||||
|
||||
$allowReset = true;
|
||||
if($session->userGrade < 5 && !$allowFullReset){
|
||||
//리셋 가능한 조건인지 테스트
|
||||
$allowReset = false;
|
||||
|
||||
if(file_exists(__dir__.'/.htaccess')){
|
||||
$allowReset = true;
|
||||
}
|
||||
else{
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
if($gameStor->isunited){
|
||||
$allowReset = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!$allowReset){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'부족한 권한: 서버가 닫혀있거나, 천통되어 있을 경우에만 리셋 가능합니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$turnterm = (int)$_POST['turnterm'];
|
||||
$sync = (int)$_POST['sync'];
|
||||
$scenario = (int)$_POST['scenario'];
|
||||
@@ -83,6 +121,7 @@ if($reserve_open){
|
||||
]),
|
||||
'date'=>$reserve_open->format('Y-m-d H:i:s')
|
||||
]);
|
||||
AppConf::getList()[DB::prefix()]->closeServer();
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'reason'=>'예약'
|
||||
|
||||
@@ -4,7 +4,14 @@ namespace sammo;
|
||||
require "lib.php";
|
||||
require "func.php";
|
||||
$session = Session::requireLogin([])->setReadOnly();
|
||||
if($session->userGrade < 5){
|
||||
|
||||
$serverName = DB::prefix();
|
||||
$serverAcl = $session->acl[$serverName]??[];
|
||||
$allowReset = in_array('reset', $serverAcl);
|
||||
$allowFullReset = in_array('fullReset',$serverAcl);
|
||||
$allowReset |= $allowFullReset;
|
||||
|
||||
if($session->userGrade < 5 && !$allowReset){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'관리자가 아닙니다.'
|
||||
|
||||
@@ -6,6 +6,7 @@ include "func.php";
|
||||
|
||||
$year = Util::getReq('year', 'int');
|
||||
$month = Util::getReq('month', 'int');
|
||||
$serverID = Util::getReq('server_id', 'string', null);
|
||||
|
||||
extractMissingPostToGlobals();
|
||||
|
||||
@@ -26,13 +27,17 @@ if(!$year || !$month) {
|
||||
}
|
||||
|
||||
|
||||
if(!$serverID){
|
||||
$serverID = UniqueConst::$serverID;
|
||||
}
|
||||
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin([])->setReadOnly();
|
||||
|
||||
$db = DB::db();
|
||||
$connect=$db->get();
|
||||
|
||||
$map = $db->queryFirstField('SELECT map FROM history WHERE year=%i AND month=%i', $year, $month);
|
||||
$map = $db->queryFirstField('SELECT map FROM history WHERE server_id=%s AND year=%i AND month=%i', $serverID, $year, $month);
|
||||
|
||||
if(!$map){
|
||||
Json::die([
|
||||
|
||||
+3
-19
@@ -63,27 +63,11 @@ if ($gencount >= $admin['maxgeneral']) {
|
||||
echo "<script>history.go(-1);</script>";
|
||||
exit();
|
||||
}
|
||||
?>
|
||||
|
||||
<table align=center width=1000 class='tb_layout bg0'>
|
||||
<tr><td align=center colspan=2 id=bg1>임관 권유 메세지</td></tr>
|
||||
<?php
|
||||
$query = "select name,scoutmsg,color from nation";
|
||||
$nationresult = MYDB_query($query, $connect) or Error("join ".MYDB_error($connect), "");
|
||||
$nationcount = MYDB_num_rows($nationresult);
|
||||
$nationList = $db->query('SELECT nation,`name`,color,scout,scoutmsg FROM nation ORDER BY rand()');
|
||||
|
||||
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>";
|
||||
} 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>";
|
||||
}
|
||||
}
|
||||
echo getInvitationList($nationList);
|
||||
?>
|
||||
</table>
|
||||
|
||||
<form name=form1 method=post action=join_post.php>
|
||||
<table align=center width=1000 class='tb_layout bg0'>
|
||||
@@ -161,7 +145,7 @@ if ($admin['show_img_level'] >= 1 && $member['grade'] >= 1 && $member['picture']
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center colspan=3>
|
||||
<font color=orange>모든 능력치는 ( 10 <= 능력치 <= <?=GameConst::$defaultStatMax?> ) 사이로 잡으셔야 합니다.<br>
|
||||
<font color=orange>모든 능력치는 ( <?=GameConst::$defaultStatMin?> <= 능력치 <= <?=GameConst::$defaultStatMax?> ) 사이로 잡으셔야 합니다.<br>
|
||||
그 외의 능력치는 가입되지 않습니다.</font>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -43,7 +43,10 @@ $userID = Session::getUserID();
|
||||
//NOTE: 이 페이지에서는 세션에 데이터를 등록하지 않음. 로그인은 이후에.
|
||||
|
||||
$name = Util::getReq('name');
|
||||
$name = htmlspecialchars($name);
|
||||
$name = StringUtil::removeSpecialCharacter($name);
|
||||
$name = WebUtil::htmlPurify($name);
|
||||
$name = StringUtil::textStrip($name);
|
||||
$pic = (int)Util::getReq('pic', 'bool', 0);
|
||||
$character = Util::getReq('character', 'int', 0);
|
||||
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
jQuery(function($){
|
||||
$('#by_scenario').change(function(){
|
||||
var scenarioIdx = $(this).val();
|
||||
$.redirect('a_hallOfFame.php', {scenarioIdx:scenarioIdx}, 'get');
|
||||
})
|
||||
//$.redirect("processing.php",{ commandtype: commandtype, turn: turn}, 'post');
|
||||
});
|
||||
+1
-1
@@ -35,7 +35,7 @@ function Error($message='', $url="")
|
||||
if (!$url) {
|
||||
$url = $_SERVER['REQUEST_URI'];
|
||||
}
|
||||
file_put_contents(__dir__."/logs/_db_bug.txt", "{\"url\":\"$url\",\"msg\":\"$message\"}\n", FILE_APPEND);
|
||||
file_put_contents(__dir__."/logs/".UniqueConst::$serverID."/_db_bug.txt", "{\"url\":\"$url\",\"msg\":\"$message\"}\n", FILE_APPEND);
|
||||
|
||||
$templates = new \League\Plates\Engine(__dir__.'/templates');
|
||||
|
||||
|
||||
+66
-37
@@ -599,19 +599,30 @@ function processWar($general, $city) {
|
||||
$query = "update general set recwar='{$general['turntime']}',train='{$oppose['train']}',warnum=warnum+1 where no='{$oppose['no']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
|
||||
$ratio = rand() % 100;
|
||||
//특기보정 : 저격(수극), 활무기저격
|
||||
if(($general['special2'] == 70 && $ratio <= 33) || ($general['item'] == 2 && $ratio <= 20) || (($general['weap'] == 10 || $general['weap'] == 14 || $general['weap'] == 18 || $general['weap'] == 22) && $ratio <= 20)) {
|
||||
$snipe = false;
|
||||
$snipeItem = false;
|
||||
if(!$snipe && $general['special2'] == 70 && Util::randF(1/3)){
|
||||
$snipe = true;
|
||||
}
|
||||
if(!$snipe && in_array($general['weap'], [10, 14, 18, 22]) && Util::randF(1/5)){
|
||||
$snipe = true;
|
||||
}
|
||||
if(!$snipe && $general['item'] == 2){
|
||||
if(Util::randF(1/5)){
|
||||
$snipe = true;
|
||||
$snipeItem = true;
|
||||
}
|
||||
//수극을 사용했지만 저격 실패한 케이스도 '필요하면' 넣을 것.(밸런스)
|
||||
|
||||
}
|
||||
if($snipe) {
|
||||
//수극 사용
|
||||
if($general['item'] == 2) {
|
||||
$query = "update general set item=0 where no='{$general['no']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
if($snipeItem) {
|
||||
$josaUl = JosaUtil::pick($general['item'], '을');
|
||||
$log[] = "<C>●</><C>".getItemName($general['item'])."</>{$josaUl} 사용!";
|
||||
$general['item'] = 0;
|
||||
} elseif($general['weap'] == 10 || $general['weap'] == 14 || $general['weap'] == 18 || $general['weap'] == 22) {
|
||||
// $josaUl = JosaUtil::pick($general['weap'], '을');
|
||||
// $log[] = "<C>●</><C>".getWeapName($general['weap'])."</>{$josaUl} 사용!";
|
||||
$db->update('general', ['item'=>0], 'no=%i', $general['no']);
|
||||
}
|
||||
$log[] = "<C>●</>상대를 <C>저격</>했다!";
|
||||
$batlog[] = "<C>●</>상대를 <C>저격</>했다!";
|
||||
@@ -620,26 +631,37 @@ function processWar($general, $city) {
|
||||
// 부상
|
||||
$oppose['injury'] += rand() % 41 + 20; // 20 ~ 60
|
||||
if($oppose['injury'] > 80) { $oppose['injury'] = 80; }
|
||||
} else if($general['item'] == 2 && $ratio <= 40) {
|
||||
$query = "update general set item=0 where no='{$general['no']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
}
|
||||
else if($snipeItem) {
|
||||
$db->update('general', ['item'=>0], 'no=%i', $general['no']);
|
||||
$josaYi = JosaUtil::pick($general['item'], '이');
|
||||
$batlog[] = "<C>●</><C>".getItemName($general['item'])."</>{$josaYi} 빗나갑니다!";
|
||||
$general['item'] = 0;
|
||||
}
|
||||
$ratio = rand() % 100;
|
||||
|
||||
//특기보정 : 저격(수극), 활무기저격
|
||||
if(($oppose['special2'] == 70 && $ratio <= 33) || ($oppose['item'] == 2 && $ratio <= 20) || (($oppose['weap'] == 10 || $oppose['weap'] == 14 || $oppose['weap'] == 18 || $oppose['weap'] == 22) && $ratio <= 20)) {
|
||||
$snipe = false;
|
||||
$snipeItem = false;
|
||||
if(!$snipe && $oppose['special2'] == 70 && Util::randF(1/3)){
|
||||
$snipe = true;
|
||||
}
|
||||
if(!$snipe && in_array($oppose['weap'], [10, 14, 18, 22]) && Util::randF(1/5)){
|
||||
$snipe = true;
|
||||
}
|
||||
if(!$snipe && $oppose['item'] == 2){
|
||||
if(Util::randF(1/5)){
|
||||
$snipe = true;
|
||||
$snipeItem = true;
|
||||
}
|
||||
//수극을 사용했지만 저격 실패한 케이스도 '필요하면' 넣을 것.(밸런스)
|
||||
}
|
||||
if($snipe) {
|
||||
//수극 사용
|
||||
if($oppose['item'] == 2) {
|
||||
$query = "update general set item=0 where no='{$oppose['no']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
if($snipeItem) {
|
||||
$josaUl = JosaUtil::pick($oppose['item'], '을');
|
||||
$opplog[] = "<C>●</><C>".getItemName($oppose['item'])."</>{$josaUl} 사용!";
|
||||
$log[] = "<C>●</><C>".getItemName($oppose['item'])."</>{$josaUl} 사용!";
|
||||
$oppose['item'] = 0;
|
||||
} elseif($oppose['weap'] == 10 || $oppose['weap'] == 14 || $oppose['weap'] == 18 || $oppose['weap'] == 22) {
|
||||
// $josaUl = JosaUtil::pick($oppose['weap'], '을');
|
||||
// $opplog[] = "<C>●</><C>".getWeapName($oppose['weap'])."</>{$josaUl} 사용!";
|
||||
$db->update('general', ['item'=>0], 'no=%i', $oppose['no']);
|
||||
}
|
||||
$oppbatlog[] = "<C>●</>상대를 <C>저격</>했다!";
|
||||
$opplog[] = "<C>●</>상대를 <C>저격</>했다!";
|
||||
@@ -648,11 +670,11 @@ function processWar($general, $city) {
|
||||
// 부상
|
||||
$general['injury'] += rand() % 41 + 20; // 20 ~ 60
|
||||
if($general['injury'] > 80) { $general['injury'] = 80; }
|
||||
} else if($oppose['item'] == 2 && $ratio <= 40) {
|
||||
$query = "update general set item=0 where no='{$oppose['no']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
}
|
||||
else if($snipeItem) {
|
||||
$db->update('general', ['item'=>0], 'no=%i', $oppose['no']);
|
||||
$josaYi = JosaUtil::pick($oppose['item'], '이');
|
||||
$oppbatlog[] = "<C>●</><C>".getItemName($oppose['item'])."</>{$josaYi} 빗나갑니다!";
|
||||
$batlog[] = "<C>●</><C>".getItemName($oppose['item'])."</>{$josaYi} 빗나갑니다!";
|
||||
$oppose['item'] = 0;
|
||||
}
|
||||
|
||||
@@ -1783,13 +1805,16 @@ function ConquerCity($admin, $general, $city, $nation, $destnation) {
|
||||
$loseGeneralGold = 0;
|
||||
$loseGeneralRice = 0;
|
||||
//멸망국 장수들 역사 기록 및 로그 전달
|
||||
$query = "select no,name,nation,npc,gold,rice from general where nation='{$city['nation']}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$gencount = MYDB_num_rows($result);
|
||||
$josaYi = JosaUtil::pick($losenation['name'], '이');
|
||||
$genlog = ["<C>●</><D><b>{$losenation['name']}</b></>{$josaYi} <R>멸망</>했습니다."];
|
||||
for($i=0; $i < $gencount; $i++) {
|
||||
$gen = MYDB_fetch_array($result);
|
||||
|
||||
|
||||
// 국가 백업
|
||||
$oldNation = $db->queryFirstRow('SELECT * FROM nation WHERE nation=%i', $city['nation']);
|
||||
$oldNationGenerals = $db->query('SELECT * FROM general WHERE nation=%i', $city['nation']);
|
||||
$oldNation['generals'] = $oldNationGenerals;
|
||||
|
||||
foreach($oldNationGenerals as $gen){
|
||||
|
||||
$loseGold = intdiv($gen['gold'] * (rand()%30+20), 100);
|
||||
$loseRice = intdiv($gen['rice'] * (rand()%30+20), 100);
|
||||
@@ -1801,6 +1826,7 @@ function ConquerCity($admin, $general, $city, $nation, $destnation) {
|
||||
pushGenLog($gen, $genlog);
|
||||
|
||||
pushGeneralHistory($gen, "<C>●</>{$year}년 {$month}월:<D><b>{$losenation['name']}</b></>{$josaYi} <R>멸망</>");
|
||||
pushOldNationStop($gen['no'], $city['nation']);
|
||||
|
||||
$loseGeneralGold += $loseGold;
|
||||
$loseGeneralRice += $loseRice;
|
||||
@@ -1811,14 +1837,10 @@ function ConquerCity($admin, $general, $city, $nation, $destnation) {
|
||||
|| $nation['name'] == "왜족") {
|
||||
//등용장 미발부
|
||||
} elseif(Util::randBool(0.5)) {
|
||||
//TODO:등용장 보낼것
|
||||
/*sendScoutMsg([
|
||||
'id' => $ruler['no'],
|
||||
'nation_id' => $ruler['nation']
|
||||
],[
|
||||
'id' => $gen['no'],
|
||||
'nation_id' => $gen['nation']
|
||||
],$general['turntime']);*/
|
||||
$msg = ScoutMessage::buildScoutMessage($general['no'], $gen['no']);
|
||||
if($msg){
|
||||
$msg->send(true);
|
||||
}
|
||||
}
|
||||
|
||||
//NPC인 경우 10% 확률로 임관(엔장, 인재, 의병)
|
||||
@@ -1856,6 +1878,7 @@ function ConquerCity($admin, $general, $city, $nation, $destnation) {
|
||||
pushGenLog($gen, $genlog);
|
||||
}
|
||||
|
||||
|
||||
//분쟁기록 모두 지움
|
||||
DeleteConflict($city['nation']);
|
||||
// 전 장수 공헌 명성치 깎음
|
||||
@@ -1873,6 +1896,12 @@ function ConquerCity($admin, $general, $city, $nation, $destnation) {
|
||||
// 외교 삭제
|
||||
$query = "delete from diplomacy where me='{$city['nation']}' or you='{$city['nation']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
|
||||
$db->insert('ng_old_nations', [
|
||||
'server_id'=>UniqueConst::$serverID,
|
||||
'nation'=>$city['nation'],
|
||||
'data'=>Json::encode($oldNation)
|
||||
]);
|
||||
// 국가 삭제
|
||||
$query = "delete from nation where nation='{$city['nation']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
|
||||
+8
-15
@@ -967,9 +967,13 @@ function command_25($turn, $command) {
|
||||
$result = MYDB_query($query, $connect) or Error("command_27 ".MYDB_error($connect),"");
|
||||
$me = MYDB_fetch_array($result);
|
||||
|
||||
$joinedNations = Json::decode($me['nations']);
|
||||
|
||||
$query = "select nation,name,color,scout,scoutmsg,sabotagelimit,gennum from nation order by gennum";
|
||||
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
|
||||
$count = MYDB_num_rows($result);
|
||||
|
||||
$nationList = $db->query('SELECT nation,`name`,color,scout,scoutmsg FROM nation ORDER BY rand()');
|
||||
|
||||
echo "
|
||||
국가에 임관합니다.<br>
|
||||
@@ -986,22 +990,14 @@ function command_25($turn, $command) {
|
||||
<option value=98 style=color:white;background-color:black;>???</option>";
|
||||
|
||||
$scoutStr = "";
|
||||
for($i=1; $i <= $count; $i++) {
|
||||
$nation = MYDB_fetch_array($result);
|
||||
|
||||
if($nation['scoutmsg'] == "") {
|
||||
$scoutStr .= "<tr><td align=center width=130 style=color:".newColor($nation['color']).";background-color:{$nation['color']};>{$nation['name']}</td><td width=870 style=color:".newColor($nation['color']).";background-color:{$nation['color']}>-</td></tr>";
|
||||
} else {
|
||||
$scoutStr .= "<tr><td align=center width=130 style=color:".newColor($nation['color']).";background-color:{$nation['color']};>{$nation['name']}</td><td width=870 style=color:".newColor($nation['color']).";background-color:{$nation['color']}>".$nation['scoutmsg']."</td></tr>";
|
||||
}
|
||||
|
||||
foreach($nationList as $nation){
|
||||
if($gameStor->year < $gameStor->startyear+3 && $nation['gennum'] >= GameConst::$initialNationGenLimit) {
|
||||
echo "
|
||||
<option value={$nation['nation']} style=color:{$nation['color']};background-color:red;>【 {$nation['name']} 】</option>";
|
||||
} elseif($nation['scout'] == 1) {
|
||||
echo "
|
||||
<option value={$nation['nation']} style=color:{$nation['color']};background-color:red;>【 {$nation['name']} 】</option>";
|
||||
} elseif(strpos($me['nations'], ",{$nation['nation']},") > 0) {
|
||||
} elseif(in_array($nation['nation'], $joinedNations)) {
|
||||
/*
|
||||
echo "
|
||||
<option value={$nation['nation']} style=color:{$nation['color']};background-color:red; disabled>【 {$nation['name']} 】</option>";
|
||||
@@ -1021,11 +1017,8 @@ function command_25($turn, $command) {
|
||||
}
|
||||
|
||||
echo "
|
||||
</form>
|
||||
<table align=center width=1000 class='tb_layout bg0'>
|
||||
<tr><td align=center colspan=2 id=bg1>임관 권유 메세지</td></tr>
|
||||
{$scoutStr}
|
||||
</table>";
|
||||
</form>";
|
||||
echo getInvitationList($nationList);
|
||||
|
||||
ender();
|
||||
}
|
||||
|
||||
@@ -76,7 +76,11 @@ class CityHelper{
|
||||
self::generateCache();
|
||||
}
|
||||
|
||||
return self::$listInv[$cityName];
|
||||
$city = self::$listInv[$cityName]??null;
|
||||
if($city === null){
|
||||
trigger_error("$cityName 에 해당하는 도시가 없습니다.");
|
||||
}
|
||||
return $city;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@ namespace sammo\Engine;
|
||||
use \sammo\DB;
|
||||
use \sammo\DiplomaticMessage;
|
||||
use \sammo\KVStorage;
|
||||
use \sammo\Json;
|
||||
use \sammo\GameConst;
|
||||
|
||||
//NOTE: A가 B에게 항복, 통합 서신을 보냈을 때 통합 후 대상이 A이므로 A가 주체임.
|
||||
class Diplomacy{
|
||||
|
||||
@@ -4,7 +4,8 @@ namespace sammo\Engine;
|
||||
use \sammo\DB;
|
||||
use \sammo\ScoutMessage;
|
||||
use \sammo\KVStorage;
|
||||
|
||||
use \sammo\Json;
|
||||
use \sammo\GameConst;
|
||||
/**
|
||||
* 인사(등용, 추방, 임명, 망명) 헬퍼 클래스?
|
||||
* Nation 클래스가 있고 그걸 상속한 구조가 더 나을지도?
|
||||
@@ -71,7 +72,7 @@ class Personnel{
|
||||
return [ScoutMessage::DECLINED, '군주는 등용장을 수락할 수 없습니다.'];
|
||||
}
|
||||
|
||||
if(strpos($general['nations'], ",{$this->nation['nation']},") !== false){
|
||||
if(in_array($this->nation['nation'], Json::decode($general['nations']))){
|
||||
return [ScoutMessage::DECLINED, '이미 임관했었던 국가입니다.'];
|
||||
}
|
||||
|
||||
@@ -119,13 +120,16 @@ class Personnel{
|
||||
$originalNationGeneralCnt = GameConst::$initialNationGenLimit;
|
||||
}
|
||||
|
||||
$joinedNations = Json::decode($general['nations']);
|
||||
$joinedNations[] = $this->nation['nation'];
|
||||
|
||||
// 국가 변경, 도시 변경, 일반으로, 수도로
|
||||
$setValues = [
|
||||
'belong'=>1,
|
||||
'level'=>1,
|
||||
'nation'=>$this->nation['nation'],
|
||||
'city'=>$this->nation['capital'],
|
||||
'nations'=>$db->sqleval('CONCAT(nations, %s)', "{$this->nation['nation']},"),
|
||||
'nations'=>Json::encode($joinedNations),
|
||||
'troop'=>0,
|
||||
];
|
||||
|
||||
|
||||
@@ -55,13 +55,15 @@ class ResetHelper{
|
||||
$db = DB::db();
|
||||
$mysqli_obj = $db->get();
|
||||
|
||||
FileUtil::delInDir($servRoot."/logs");
|
||||
FileUtil::delInDir($servRoot."/data");
|
||||
$serverID = DB::prefix().'_'.date("ymd").'_'.Util::randomStr(4);
|
||||
|
||||
mkdir($servRoot.'/logs/'.$serverID, 0644);
|
||||
mkdir($servRoot.'/data/'.$serverID, 0644);
|
||||
|
||||
$result = Util::generateFileUsingSimpleTemplate(
|
||||
$servRoot.'/d_setting/UniqueConst.orig.php',
|
||||
$servRoot.'/d_setting/UniqueConst.php',[
|
||||
'serverID'=>DB::prefix().'_'.Util::randomStr(8),
|
||||
'serverID'=>$serverID,
|
||||
'serverName'=>AppConf::getList()[$prefix]->getKorName(),
|
||||
], true
|
||||
);
|
||||
@@ -92,7 +94,8 @@ class ResetHelper{
|
||||
(KVStorage::getStorage($db, 'game_env'))->resetValues();
|
||||
|
||||
return [
|
||||
'result'=>true
|
||||
'result'=>true,
|
||||
'serverID'=>$serverID
|
||||
];
|
||||
}
|
||||
|
||||
@@ -126,6 +129,8 @@ class ResetHelper{
|
||||
return $clearResult;
|
||||
}
|
||||
|
||||
$serverID = $clearResult['serverID'];
|
||||
|
||||
$scenarioObj = new Scenario($scenario, false);
|
||||
$scenarioObj->buildConf();
|
||||
|
||||
@@ -166,6 +171,7 @@ class ResetHelper{
|
||||
$env = [
|
||||
'scenario'=>$scenario,
|
||||
'scenario_text'=>$scenarioObj->getTitle(),
|
||||
'icon_path'=>$scenarioObj->getIconPath(),
|
||||
'startyear'=>$startyear,
|
||||
'year'=> $year,
|
||||
'month'=> $month,
|
||||
@@ -202,6 +208,14 @@ class ResetHelper{
|
||||
$gameStor->$key = $value;
|
||||
}
|
||||
|
||||
$db->insert('ng_games', [
|
||||
'server_id'=>$serverID,
|
||||
'date'=>$turntime,
|
||||
'winner_nation'=>null,
|
||||
'scenario'=>$scenario,
|
||||
'env'=>Json::encode($env)
|
||||
]);
|
||||
|
||||
$scenarioObj->build($env);
|
||||
|
||||
$db->update('plock', [
|
||||
|
||||
@@ -7,6 +7,7 @@ class Scenario{
|
||||
private $scenarioIdx;
|
||||
private $scenarioPath;
|
||||
|
||||
private $iconPath = '.';
|
||||
private $data;
|
||||
|
||||
private $year;
|
||||
@@ -189,6 +190,7 @@ class Scenario{
|
||||
];
|
||||
|
||||
$this->gameConf = array_merge($stat);
|
||||
$this->iconPath = $this->data['iconPath']??$default['iconPath'];
|
||||
return $this->gameConf;
|
||||
}
|
||||
|
||||
@@ -226,6 +228,10 @@ class Scenario{
|
||||
return $this->title;
|
||||
}
|
||||
|
||||
public function getIconPath(){
|
||||
return $this->iconPath;
|
||||
}
|
||||
|
||||
public function getNPC(){
|
||||
$this->initFull();
|
||||
return $this->generals;
|
||||
@@ -286,6 +292,17 @@ class Scenario{
|
||||
private function buildGenerals($env){
|
||||
$this->initFull();
|
||||
|
||||
|
||||
try{
|
||||
$text = \file_get_contents(ServConfig::getSharedIconPath('../hook/list.json?1'));
|
||||
$storedIcons = Json::decode($text);
|
||||
}
|
||||
catch(\Exception $e){
|
||||
$storedIcons = [];
|
||||
}
|
||||
|
||||
$env['stored_icons'] = $storedIcons;
|
||||
|
||||
$remainGenerals = [];
|
||||
foreach($this->generals as $general){
|
||||
if($general->build($env)){
|
||||
|
||||
@@ -145,19 +145,41 @@ class NPC{
|
||||
$name = 'ⓝ'.$this->name;
|
||||
|
||||
$picturePath = $this->picturePath;
|
||||
if($env['show_img_level'] < 3 || $picturePath === null){
|
||||
if($env['show_img_level'] < 3){
|
||||
$picturePath = 'default.jpg';
|
||||
}
|
||||
else if(is_numeric($picturePath)){
|
||||
if($picturePath < 0){
|
||||
$picturePath = 'default.jpg';
|
||||
$picturePath = null;
|
||||
}
|
||||
else if(\key_exists($picturePath, $env['stored_icons']['.']??[])){
|
||||
$picturePath = $env['stored_icons']['.'][$picturePath];
|
||||
}
|
||||
else{
|
||||
$picturePath = "{$picturePath}.jpg";
|
||||
$picturePath = null;
|
||||
}
|
||||
}
|
||||
else if($picturePath !== null && in_array($picturePath, $env['stored_icons'][$env['icon_path']??'.']??[])){
|
||||
$picturePath = ($env['icon_path']??'.').'/'.$picturePath;
|
||||
}
|
||||
else if($picturePath === null && \key_exists('stored_icons', $env)){
|
||||
$target = $env['stored_icons']??[];
|
||||
$target = $target[$env['icon_path']??'.']??[];
|
||||
$picturePath = $target[$this->name]??null;
|
||||
if($picturePath){
|
||||
$picturePath = ($env['icon_path']??'.').'/'.$picturePath;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if($picturePath === null){
|
||||
$picturePath = 'default.jpg';
|
||||
}
|
||||
|
||||
$city = $this->locatedCity;
|
||||
if($city !== null){
|
||||
$city = CityHelper::getCityByName($city)['id']??null;
|
||||
}
|
||||
if($city === null){
|
||||
if($nationID == 0 || !CityHelper::getAllNationCities($nationID)){
|
||||
$cityObj = Util::choiceRandom(CityHelper::getAllCities());
|
||||
@@ -168,9 +190,7 @@ class NPC{
|
||||
'@phan-var array<string,string|int> $cityObj';
|
||||
$city = $cityObj['id'];
|
||||
}
|
||||
else{
|
||||
$city = CityHelper::getCityByName($city)['id'];
|
||||
}
|
||||
|
||||
|
||||
$experience = $age * 100;
|
||||
$dedication = $age * 100;
|
||||
|
||||
@@ -170,7 +170,7 @@ class ScoutMessage extends Message{
|
||||
return self::DECLINED;
|
||||
}
|
||||
|
||||
public static function buildScoutMessage(int $srcGeneralID, int $destGeneralID, &$reason = null, \DateTime $date = null): Message{
|
||||
public static function buildScoutMessage(int $srcGeneralID, int $destGeneralID, &$reason = null, \DateTime $date = null):?self{
|
||||
if($srcGeneralID == $destGeneralID){
|
||||
if($reason !== null){
|
||||
$reason = '같은 장수에게 등용장을 보낼 수 없습니다';
|
||||
|
||||
@@ -5,5 +5,6 @@
|
||||
"max":75,
|
||||
"npcMax":95,
|
||||
"chiefMin":65
|
||||
}
|
||||
},
|
||||
"iconPath":"."
|
||||
}
|
||||
@@ -1,11 +1,15 @@
|
||||
{
|
||||
"title":"【가상모드9】 천인 강림",
|
||||
"title":"【가상모드9-a】 천인 강림",
|
||||
"life":1,
|
||||
"fiction":1,
|
||||
"nation":[
|
||||
],
|
||||
"diplomacy":[
|
||||
],
|
||||
"stat":{
|
||||
"npcMax":65,
|
||||
"chiefMin":55
|
||||
},
|
||||
"general":[
|
||||
[ 1, "소제1", 1001, 0, null, 18, 7, 48, 0, 160, 300, "유지", null],
|
||||
[ 1, "헌제", 1002, 0, null, 15, 7, 61, 0, 160, 300, "안전", null],
|
||||
@@ -0,0 +1,710 @@
|
||||
{
|
||||
"title":"【가상모드9-b】 천인 강림·극",
|
||||
"life":1,
|
||||
"fiction":1,
|
||||
"nation":[
|
||||
],
|
||||
"diplomacy":[
|
||||
],
|
||||
"stat":{
|
||||
"total":260,
|
||||
"min":40,
|
||||
"max":120,
|
||||
"npcMax":65,
|
||||
"chiefMin":55
|
||||
},
|
||||
"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":[
|
||||
|
||||
]
|
||||
}
|
||||
+244
-243
@@ -8,254 +8,255 @@
|
||||
"max":110,
|
||||
"npcMax":100
|
||||
},
|
||||
"iconPath":"환상향",
|
||||
"nation":[
|
||||
|
||||
],
|
||||
"diplomacy":[],
|
||||
"general":[
|
||||
[0, "히카리코", null, 0, null, 56, 66, 21, 0, 160, 300, null, null],
|
||||
[0, "히메미코", null, 0, null, 68, 78, 65, 0, 160, 300, null, null],
|
||||
[0, "히나", "환상향/히나.jpg", 0, null, 66, 63, 83, 0, 160, 300, null, null, "온갖 재액이 닥쳐올 거야. 인간을 지키기 위해서라도 절대 보내주지 않겠어!"],
|
||||
[0, "후토", "환상향/후토.png", 0, null, 84, 69, 93, 0, 160, 300, null, null, "불이라도 지를까."],
|
||||
[0, "홍미령", "환상향/홍미령.jpg", 0, null, 85, 79, 63, 0, 160, 300, null, null, "젠장, 배수진이다!"],
|
||||
[0, "호쥬누에", "환상향/호쥬누에.jpg", 0, null, 85, 95, 72, 0, 160, 300, null, null, "자아, 나의 정체를 알아버린 당신을 죽여버리고, 정체불명으로 돌아가야겠어."],
|
||||
[0, "호라이인형", null, 0, null, 66, 71, 73, 0, 160, 300, null, null],
|
||||
[0, "헤카티아", "환상향/헤카티아.jpg", 0, null, 85, 84, 94, 0, 160, 300, null, null, "꿈의 세계에선 무방비하니까 간단한 일이었지."],
|
||||
[0, "하타테", "환상향/하타테.jpg", 0, null, 30, 88, 70, 0, 160, 300, null, null, "둘이서 더블스포일러가 되어서, 최강을 노리는 거야!"],
|
||||
[0, "하츠나", null, 0, null, 63, 61, 65, 0, 160, 300, null, null],
|
||||
[0, "하니에", null, 0, null, 57, 66, 63, 0, 160, 300, null, null],
|
||||
[0, "플랑드르", "환상향/플랑드르.jpg", 0, null, 76, 101, 71, 0, 160, 300, null, null, "쿠욱하고 콰광~이네"],
|
||||
[0, "프랑스인형", null, 0, null, 68, 68, 75, 0, 160, 300, null, null],
|
||||
[0, "파츄리", "환상향/파츄리.jpg", 0, null, 81, 52, 103, 0, 160, 300, null, null, "무큐-"],
|
||||
[0, "파스칼", null, 0, null, 73, 70, 60, 0, 160, 300, null, null],
|
||||
[0, "파브리티스", null, 0, null, 61, 61, 62, 0, 160, 300, null, null],
|
||||
[0, "파르시", "환상향/파르시.jpg", 0, null, 67, 49, 89, 0, 160, 300, null, null, "너한테 원한은 없다만, 내가 널 공격하는 이유는 얼마든지 만들 수 있어."],
|
||||
[0, "토키코", null, 0, null, 60, 59, 88, 0, 160, 300, null, null],
|
||||
[0, "토쿠비", null, 0, null, 77, 77, 72, 0, 160, 300, null, null],
|
||||
[0, "토지코", "환상향/토지코.png", 0, null, 76, 62, 86, 0, 160, 300, null, null, "아이고 이런. 또 하나요?"],
|
||||
[0, "토요히메", "환상향/토요히메.jpg", 0, null, 96, 69, 95, 0, 160, 300, null, null],
|
||||
[0, "토비코", null, 0, null, 72, 58, 56, 0, 160, 300, null, null],
|
||||
[0, "텐시", "환상향/텐시.jpg", 0, null, 81, 89, 71, 0, 160, 300, null, null, "약해! 약해 빠졌어! 그따위로 하늘에 오를 수 있을 거라 꿈도 꾸지 마!"],
|
||||
[0, "텐무", null, 0, null, 68, 73, 56, 0, 160, 300, null, null],
|
||||
[0, "텐구5", null, 0, null, 51, 51, 50, 0, 160, 300, null, null],
|
||||
[0, "텐구4", null, 0, null, 51, 51, 50, 0, 160, 300, null, null],
|
||||
[0, "텐구3", null, 0, null, 51, 51, 50, 0, 160, 300, null, null],
|
||||
[0, "텐구2", null, 0, null, 51, 51, 50, 0, 160, 300, null, null],
|
||||
[0, "텐구1", null, 0, null, 51, 51, 50, 0, 160, 300, null, null],
|
||||
[0, "테이레이다", "환상향/테이레이다.png", 0, null, 78, 75, 53, 0, 160, 300, null, null, "갑작스럽겠지만, 테스트를 시작하겠어!]"],
|
||||
[0, "테위", "환상향/테위.jpg", 0, null, 82, 32, 79, 0, 160, 300, null, null, "대숲은 사람을 헤매게 하는 대나무의 미로. 헤매는 것은 산사람다운 행위인 거야."],
|
||||
[0, "키쿠리", "환상향/키쿠리.jpg", 0, null, 56, 72, 76, 0, 160, 300, null, null],
|
||||
[0, "키요히메", null, 0, null, 66, 76, 76, 0, 160, 300, null, null],
|
||||
[0, "키스메", "환상향/키스메.jpg", 0, null, 73, 58, 59, 0, 160, 300, null, null, "너희가 떨어뜨린 시체는 이거냐?"],
|
||||
[0, "키나코", null, 0, null, 63, 68, 67, 0, 160, 300, null, null],
|
||||
[0, "클라운피스", "환상향/클라운피스.jpg", 0, null, 89, 80, 77, 0, 160, 300, null, null, "잇츠, 루나틱 타임! 광기의 세계로 어서오세요!"],
|
||||
[0, "쿠스코", null, 0, null, 70, 57, 53, 0, 160, 300, null, null],
|
||||
[0, "쿠루미", "환상향/쿠루미.jpg", 0, null, 70, 65, 68, 0, 160, 300, null, null, "나는 쿠루미. 이 호수의 문지기야."],
|
||||
[0, "쿄코", "환상향/쿄코.jpg", 0, null, 37, 57, 80, 0, 160, 300, null, null, "목소리가 작다!"],
|
||||
[0, "콘가라", "환상향/콘가라.jpg", 0, null, 91, 96, 60, 0, 160, 300, null, null],
|
||||
[0, "코토히메", "환상향/코토히메.jpg", 0, null, 54, 36, 90, 0, 160, 300, null, null, "충격의 새로운 사실! 고대인은 전기를 쓰고 있었다!"],
|
||||
[0, "코코로", "환상향/코코로.jpg", 0, null, 80, 91, 60, 0, 160, 300, null, null, "나와 최강의 칭호를 걸고 싸우자!"],
|
||||
[0, "코카이", null, 0, null, 67, 78, 61, 0, 160, 300, null, null],
|
||||
[0, "코이시", "환상향/코이시.jpg", 0, null, 88, 71, 93, 0, 160, 300, null, null, "네 시체는 지령전 입구에 장식해줄게!"],
|
||||
[0, "코스즈", "환상향/코스즈.jpg", 0, null, 61, 63, 70, 0, 160, 300, null, null, "요괴가 하는 말을 믿으시는 거예요?!"],
|
||||
[0, "코마치", "환상향/코마치.jpg", 0, null, 80, 97, 75, 0, 160, 300, null, null, "더는 어찌할 도리가 없어. 나는 그런 인간은 버릴 거야."],
|
||||
[0, "코노하", null, 0, null, 62, 58, 67, 0, 160, 300, null, null],
|
||||
[0, "코가사", "환상향/코가사.jpg", 0, null, 79, 76, 56, 0, 160, 300, null, null, "됐어. 어차피 요괴는 이렇게 쓸쓸하게 사라져나가는 거니까."],
|
||||
[0, "케이네", "환상향/케이네.jpg", 0, null, 77, 71, 104, 0, 160, 300, null, null, "여기엔 원래부터 아무것도 없었어, 인간도 인간의 마을도 말이야."],
|
||||
[0, "캇파5", null, 0, null, 40, 40, 65, 0, 160, 300, null, null],
|
||||
[0, "캇파4", null, 0, null, 40, 40, 64, 0, 160, 300, null, null],
|
||||
[0, "캇파3", null, 0, null, 40, 40, 63, 0, 160, 300, null, null],
|
||||
[0, "캇파2", null, 0, null, 40, 40, 62, 0, 160, 300, null, null],
|
||||
[0, "캇파1", null, 0, null, 40, 40, 61, 0, 160, 300, null, null],
|
||||
[0, "카스미", null, 0, null, 67, 63, 82, 0, 160, 300, null, null],
|
||||
[0, "카센", "환상향/카센.jpg", 0, null, 72, 103, 71, 0, 160, 300, null, null, "이런 곳에서 전력을 다할 이유가없지."],
|
||||
[0, "카나코", "환상향/카나코.jpg", 0, null, 84, 97, 77, 0, 160, 300, null, null, "나를 부른 이는 누구인가?"],
|
||||
[0, "카나", "환상향/카나.jpg", 0, null, 64, 72, 57, 0, 160, 300, null, null, "아, 아니, 그러니까, 우주인?]"],
|
||||
[0, "카구야", "환상향/카구야.jpg", 0, null, 98, 71, 82, 0, 160, 300, null, null, "내 영원을 다루는 술법으로 모두 깨뜨려 보이겠어."],
|
||||
[0, "카게로", "환상향/카게로.png", 0, null, 78, 88, 68, 0, 160, 300, null, null, "무서워~ 인간 무서워~"],
|
||||
[0, "치유리", "환상향/치유리.jpg", 0, null, 45, 77, 78, 0, 160, 300, null, null, "싸워서 강한 쪽이 이 세계의 치유리라구."],
|
||||
[0, "치르노", "환상향/치르노.jpg", 0, null, 79, 89, 49, 0, 160, 300, null, null, "눈앞에 강적이 있잖아?"],
|
||||
[0, "츠바메", null, 0, null, 71, 80, 58, 0, 160, 300, null, null],
|
||||
[0, "첸", "환상향/첸.jpg", 0, null, 48, 70, 70, 0, 160, 300, null, null, "그건 그렇고, 마요이가에 어서와"],
|
||||
[0, "지벤", null, 0, null, 85, 67, 66, 0, 160, 300, null, null],
|
||||
[0, "지귀", null, 0, null, 79, 67, 69, 0, 160, 300, null, null],
|
||||
[0, "조온", null, 0, null, 83, 74, 96, 0, 160, 300, null, null, "우리가 왜 최흉최악의 자매인지 그 몸으로 이해해라!"],
|
||||
[0, "자넷", null, 0, null, 60, 59, 62, 0, 160, 300, null, null],
|
||||
[0, "이포니아", null, 0, null, 61, 62, 61, 0, 160, 300, null, null],
|
||||
[0, "이쿠", "환상향/이쿠.jpg", 0, null, 72, 72, 94, 0, 160, 300, null, null, "조금 벌을 받으실 필요가 있을지도 모르겠군요."],
|
||||
[0, "이치요우", null, 0, null, 70, 73, 58, 0, 160, 300, null, null],
|
||||
[0, "이치린", "환상향/이치린.jpg", 0, null, 86, 55, 88, 0, 160, 300, null, null, "평화롭게 살고있으니까 괜찮잖아. 너, 요괴를 죽여도 아무렇지 않아?"],
|
||||
[0, "이슈아", null, 0, null, 67, 76, 78, 0, 160, 300, null, null],
|
||||
[0, "이나코", null, 0, null, 56, 35, 63, 0, 160, 300, null, null],
|
||||
[0, "유키", "환상향/유키.jpg", 0, null, 72, 77, 61, 0, 160, 300, null, null, "우리 둘을 쓰러뜨릴 수 있을 거라고 생각해?"],
|
||||
[0, "유카리", "환상향/유카리.jpg", 0, null, 87, 76, 96, 0, 160, 300, null, null, "아름답고 잔혹하게 이 대지에서 사라져라!"],
|
||||
[0, "유카", "환상향/유카.jpg", 0, null, 94, 88, 70, 0, 160, 300, null, null, "아 그래, 마침 60년 전이었네. 아아...... 그래, 벌써 그런 시기구나...... 60년인가. 회귀할 때구나."],
|
||||
[0, "유유코", "환상향/유유코.jpg", 0, null, 97, 80, 81, 0, 160, 300, null, null, "새는 잔뼈가 많아서 싫어."],
|
||||
[0, "유메코", "환상향/유메코.jpg", 0, null, 72, 103, 73, 0, 160, 300, null, null, "우리들을 모욕한 죄는 죽음으로 밖에 갚을 수 없다!!"],
|
||||
[0, "유메미", "환상향/유메미.jpg", 0, null, 93, 72, 91, 0, 160, 300, null, null, "기합 넣어! 죽어 버렸다간 데리고 돌아갈 수 없으니까."],
|
||||
[0, "유기", "환상향/유기.jpg", 0, null, 71, 104, 72, 0, 160, 300, null, null, "네가 강하기만 하다면 나야 아무 군소리도 안해. 어떤 목적으로 여기에 왔건 간에."],
|
||||
[0, "유겐마간", "환상향/유겐마간.jpg", 0, null, 80, 80, 50, 0, 160, 300, null, null],
|
||||
[0, "우카", null, 0, null, 60, 73, 82, 0, 160, 300, null, null],
|
||||
[0, "우츠호", "환상향/우츠호.jpg", 0, null, 73, 105, 68, 0, 160, 300, null, null, "이물질 발견! 핵융합로의 이물질 혼입은 일단 반응을 정지하고, 즉각 이물질을 제거하라."],
|
||||
[0, "요정5", null, 0, null, 55, 60, 35, 0, 160, 300, null, null],
|
||||
[0, "요정4", null, 0, null, 55, 59, 34, 0, 160, 300, null, null],
|
||||
[0, "요정3", null, 0, null, 55, 58, 33, 0, 160, 300, null, null],
|
||||
[0, "요정2", null, 0, null, 55, 57, 32, 0, 160, 300, null, null],
|
||||
[0, "요정1", null, 0, null, 55, 56, 31, 0, 160, 300, null, null],
|
||||
[0, "요우무", "환상향/요우무.jpg", 0, null, 81, 89, 71, 0, 160, 300, null, null, "...요괴가 담금질한 이 누관검에, 벨 수 없는 것 따위, 별로 없어!"],
|
||||
[0, "요시카", "환상향/요시카.jpg", 0, null, 84, 78, 61, 0, 160, 300, null, null, "오~지~마~!"],
|
||||
[0, "요리히메", "환상향/요리히메.jpg", 0, null, 90, 98, 74, 0, 160, 300, null, null],
|
||||
[0, "와카챠나두", null, 0, null, 62, 61, 68, 0, 160, 300, null, null],
|
||||
[0, "와카사기", "환상향/와카사기.png", 0, null, 68, 57, 79, 0, 160, 300, null, null, "슬슬 우리요괴가 활약할 차례야!"],
|
||||
[0, "오토히메", null, 0, null, 80, 60, 76, 0, 160, 300, null, null],
|
||||
[0, "오키나", "환상향/오키나.png", 0, null, 87, 87, 86, 0, 160, 300, null, null, "요괴가 아니라 신이에요~"],
|
||||
[0, "오모이카네", null, 0, null, 66, 52, 86, 0, 160, 300, null, null],
|
||||
[0, "오린", "환상향/오린.jpg", 0, null, 87, 84, 77, 0, 160, 300, null, null, "시체가 갖고 싶으니까, 역시 내가 언니를 처리해야겠네!"],
|
||||
[0, "오렌지", "환상향/오렌지.jpg", 0, null, 72, 52, 68, 0, 160, 300, null, null, "아하하, 1면 보스니까라고 얕보지 말라구!"],
|
||||
[0, "오니5", null, 0, null, 55, 65, 40, 0, 160, 300, null, null],
|
||||
[0, "오니4", null, 0, null, 54, 64, 40, 0, 160, 300, null, null],
|
||||
[0, "오니3", null, 0, null, 53, 63, 40, 0, 160, 300, null, null],
|
||||
[0, "오니2", null, 0, null, 52, 62, 40, 0, 160, 300, null, null],
|
||||
[0, "오니1", null, 0, null, 51, 61, 40, 0, 160, 300, null, null],
|
||||
[0, "엘핀민트", null, 0, null, 71, 71, 61, 0, 160, 300, null, null],
|
||||
[0, "엘리스", "환상향/엘리스.jpg", 0, null, 55, 69, 88, 0, 160, 300, null, null],
|
||||
[0, "엘리", "환상향/엘리.jpg", 0, null, 86, 83, 66, 0, 160, 300, null, null, "싸운 거 오랜만인걸 뭐."],
|
||||
[0, "엘렌", "환상향/엘렌.jpg", 0, null, 67, 62, 71, 0, 160, 300, null, null, "나는, 엘렌. 폭신폭신 엘렌이야."],
|
||||
[0, "에이린", "환상향/에이린.jpg", 0, null, 72, 76, 105, 0, 160, 300, null, null, "아하하. 너희는 어리석구나."],
|
||||
[0, "야토", null, 0, null, 72, 83, 66, 0, 160, 300, null, null],
|
||||
[0, "야츠하시", "환상향/야츠하시.png", 0, null, 69, 58, 73, 0, 160, 300, null, null, "훗훗후, 반역자에겐 어떤 수단이든 써도 된다면서?"],
|
||||
[0, "야마메", "환상향/야마메.jpg", 0, null, 75, 65, 77, 0, 160, 300, null, null, "지저에 떨어진 요괴의 힘을 보고 싶은 모양이구나."],
|
||||
[0, "앨리스", "환상향/앨리스.jpg", 0, null, 81, 63, 99, 0, 160, 300, null, null, "그런 소리 하니까 바보 취급당하는 거야. 탄막은 브레인. 상식이야."],
|
||||
[0, "안자", null, 0, null, 67, 61, 83, 0, 160, 300, null, null],
|
||||
[0, "안", null, 0, null, 68, 51, 67, 0, 160, 300, null, null],
|
||||
[0, "아큐", "환상향/아큐.jpg", 0, null, 72, 30, 82, 0, 160, 300, null, null, "나는 이래뵈도 히에다가의 당주로써 환상향의 서기라는 역할을 지닌 유서깊은 집안의 사람이야."],
|
||||
[0, "아즈마", null, 0, null, 78, 81, 64, 0, 160, 300, null, null],
|
||||
[0, "아운", "환상향/아운.png", 0, null, 78, 87, 65, 0, 160, 300, null, null, "신사를 지키는 수호신으로서 말이야!"],
|
||||
[0, "아야", "환상향/아야.jpg", 0, null, 73, 93, 71, 0, 160, 300, null, null, "깨끗하고 올바른 샤메이마루입니다."],
|
||||
[0, "아리오슈", null, 0, null, 56, 70, 67, 0, 160, 300, null, null],
|
||||
[0, "써니", "환상향/써니.jpg", 0, null, 75, 75, 60, 0, 160, 300, null, null, "어라, 혼자서도 최강이라며?"],
|
||||
[0, "쌍자", null, 0, null, 63, 82, 71, 0, 160, 300, null, null],
|
||||
[0, "쌍사", null, 0, null, 62, 73, 81, 0, 160, 300, null, null],
|
||||
[0, "신키", "환상향/신키.jpg", 0, null, 96, 92, 73, 0, 160, 300, null, null, "나의 세계에서 저지른 죄값은 크지. 용서할 리가 없잖아."],
|
||||
[0, "신묘마루", "환상향/신묘마루.png", 0, null, 85, 68, 88, 0, 160, 300, null, null, "누─구?"],
|
||||
[0, "시키에이키", "환상향/시키에이키.jpg", 0, null, 84, 77, 98, 0, 160, 300, null, null, "보랏빛 벚꽃은 죄 깊은 인간의 영혼이 깃드는 꽃. 너는 그 보랏빛 벚꽃이 떨어져내리는 밑에서, 단죄하거라!"],
|
||||
[0, "시키에이카", null, 0, null, 71, 60, 77, 0, 160, 300, null, null],
|
||||
[0, "시즈하", "환상향/시즈하.jpg", 0, null, 79, 55, 62, 0, 160, 300, null, null],
|
||||
[0, "시온", null, 0, null, 80, 97, 76, 0, 160, 300, null, null, "나도 좋아서 가난하게 살고 있는 게 아닌데~"],
|
||||
[0, "스타", "환상향/스타.jpg", 0, null, 70, 60, 75, 0, 160, 300, null, null, "그래, 이 비겁한 녀석아!"],
|
||||
[0, "스이카", "환상향/스이카.jpg", 0, null, 74, 102, 66, 0, 160, 300, null, null, "거짓말은 인간만 하는 거야!"],
|
||||
[0, "스와코", "환상향/스와코.jpg", 0, null, 95, 81, 81, 0, 160, 300, null, null, "아~우~~"],
|
||||
[0, "스씨", null, 0, null, 66, 63, 66, 0, 160, 300, null, null],
|
||||
[0, "스미레코", "환상향/스미레코.jpg", 0, null, 81, 63, 88, 0, 160, 300, null, null, "히가시후카미 고등학교 1학년, 우사미 스미레코. 우는 아이도 뚝 그치는 진짜 초능력자야."],
|
||||
[0, "순호", "환상향/순호.jpg", 0, null, 77, 102, 79, 0, 160, 300, null, null, "지금의 너로썬 내 힘 앞에선 무력, 절대적으로 무력하도다!"],
|
||||
[0, "쇼", "환상향/쇼.jpg", 0, null, 75, 75, 95, 0, 160, 300, null, null, "그것이 당신의 정의라는 거라면, 그것도 좋지요."],
|
||||
[0, "소악마", "환상향/소악마.jpg", 0, null, 50, 72, 67, 0, 160, 300, null, null],
|
||||
[0, "셰퍼드", null, 0, null, 61, 58, 56, 0, 160, 300, null, null],
|
||||
[0, "센고", null, 0, null, 83, 56, 79, 0, 160, 300, null, null],
|
||||
[0, "센", null, 0, null, 67, 66, 28, 0, 160, 300, null, null],
|
||||
[0, "세키반키", "환상향/세키반키.png", 0, null, 68, 75, 71, 0, 160, 300, null, null, "인간은 누구든지 나를 무서워하지!"],
|
||||
[0, "세츠조", null, 0, null, 58, 80, 58, 0, 160, 300, null, null],
|
||||
[0, "세이자", "환상향/세이자.png", 0, null, 82, 94, 69, 0, 160, 300, null, null, "내 이름은 세이자. 뼛속까지 아마노자쿠다!"],
|
||||
[0, "세이란", "환상향/세이란.jpg", 0, null, 71, 77, 51, 0, 160, 300, null, null, "뭐, 이것도 일이야, 알지? 그러니 내게 여기서 얌전히 당해 줘. 응?"],
|
||||
[0, "샤리트", null, 0, null, 68, 62, 62, 0, 160, 300, null, null],
|
||||
[0, "상해인형", null, 0, null, 74, 69, 69, 0, 160, 300, null, null],
|
||||
[0, "상아", null, 0, null, 84, 84, 84, 0, 160, 300, null, null],
|
||||
[0, "사토리", "환상향/사토리.jpg", 0, null, 81, 57, 84, 0, 160, 300, null, null, "제게는 보여요. 당신이 마음속에 그리고 있는 탄막이!"],
|
||||
[0, "사토노", "환상향/사토노.png", 0, null, 71, 76, 77, 0, 160, 300, null, null, "봐 주진 않겠지만 죽으면 죽일꺼니까 말야―!"],
|
||||
[0, "사쿠야", "환상향/사쿠야.jpg", 0, null, 87, 89, 78, 0, 160, 300, null, null, "당신의 시간 또한 나의 것"],
|
||||
[0, "사샤", null, 0, null, 74, 48, 78, 0, 160, 300, null, null],
|
||||
[0, "사리엘", "환상향/사리엘.jpg", 0, null, 85, 68, 102, 0, 160, 300, null, null, "죽는다면 모두 함께"],
|
||||
[0, "사라카", null, 0, null, 60, 74, 63, 0, 160, 300, null, null],
|
||||
[0, "사라", "환상향/사라.jpg", 0, null, 76, 78, 36, 0, 160, 300, null, null, "싸우는 건 재미있지만, 지는 건 재미없어."],
|
||||
[0, "사나에", "환상향/사나에.jpg", 0, null, 87, 71, 85, 0, 160, 300, null, null, "지금은, 바깥 세계는 환경을 지키라든가 경기 대책이 어떻다든가, 바보 같이 뭘 위해 태어난 건지 생각할 수 없는 사람 뿐."],
|
||||
[0, "사구메", "환상향/사구메.jpg", 0, null, 84, 97, 71, 0, 160, 300, null, null, "......그런건 아냐."],
|
||||
[0, "벤벤", "환상향/벤벤.png", 0, null, 69, 59, 75, 0, 160, 300, null, null, "어딜 봐도 츠쿠모가미잖아."],
|
||||
[0, "뱌쿠렌", "환상향/뱌쿠렌.jpg", 0, null, 83, 90, 82, 0, 160, 300, null, null, "아아, 법의 세계에 빛이 가득해."],
|
||||
[0, "미호", null, 0, null, 85, 86, 62, 0, 160, 300, null, null],
|
||||
[0, "미하나", null, 0, null, 76, 67, 84, 0, 160, 300, null, null],
|
||||
[0, "미토리", null, 0, null, 57, 56, 62, 0, 160, 300, null, null],
|
||||
[0, "미코토", null, 0, null, 73, 82, 82, 0, 160, 300, null, null],
|
||||
[0, "미코", "환상향/미코.png", 0, null, 87, 72, 97, 0, 160, 300, null, null, "장난은 끝이다!"],
|
||||
[0, "미요", null, 0, null, 73, 66, 58, 0, 160, 300, null, null],
|
||||
[0, "미스티아", "환상향/미스티아.jpg", 0, null, 65, 82, 12, 0, 160, 300, null, null, "자, 잠깐 기다려~!"],
|
||||
[0, "미셸", null, 0, null, 70, 69, 72, 0, 160, 300, null, null],
|
||||
[0, "미샨드라", null, 0, null, 80, 63, 82, 0, 160, 300, null, null],
|
||||
[0, "미샤구지", null, 0, null, 48, 99, 59, 0, 160, 300, null, null],
|
||||
[0, "미마", "환상향/미마.jpg", 0, null, 75, 90, 93, 0, 160, 300, null, null, "나도 인간계의 신이야. (거짓말)"],
|
||||
[0, "미노리코", "환상향/미노리코.jpg", 0, null, 71, 58, 74, 0, 160, 300, null, null, "갓 수확한 고구마는 나의 향수. 무녀가 먹게 놔둘 줄 알고!"],
|
||||
[0, "미나유", null, 0, null, 72, 49, 84, 0, 160, 300, null, null],
|
||||
[0, "무무무", null, 0, null, 70, 77, 57, 0, 160, 300, null, null],
|
||||
[0, "무라사", "환상향/무라사.jpg", 0, null, 76, 82, 65, 0, 160, 300, null, null, "이 세상에 미련이 남으신 분은 승선할 수 없습니다만 당신은 어떠신가요?"],
|
||||
[0, "무게츠", "환상향/무게츠.jpg", 0, null, 76, 95, 68, 0, 160, 300, null, null, "난 무게츠. 그리고, 여긴 나의 세계."],
|
||||
[0, "묘렌", null, 0, null, 77, 78, 79, 0, 160, 300, null, null],
|
||||
[0, "모코우", "환상향/모코우.jpg", 0, null, 83, 99, 69, 0, 160, 300, null, null, "너희들도 한번 영원의 고륜을 고민해 보는 게 좋아!"],
|
||||
[0, "모미지", "환상향/모미지.jpg", 0, null, 83, 68, 66, 0, 160, 300, null, null, "높은 분들은 저희 일반 텐구보다 훨씬 강하니까, 경비 같은 건 전혀 필요하지 않을 것 같은데."],
|
||||
[0, "모모히메", null, 0, null, 75, 68, 72, 0, 160, 300, null, null],
|
||||
[0, "모모", null, 0, null, 62, 62, 71, 0, 160, 300, null, null],
|
||||
[0, "메이즈", null, 0, null, 70, 40, 76, 0, 160, 300, null, null],
|
||||
[0, "메이벨", null, 0, null, 71, 74, 56, 0, 160, 300, null, null],
|
||||
[0, "메이라", "환상향/메이라.jpg", 0, null, 65, 82, 36, 0, 160, 300, null, null, "내가 이기면 하쿠레이의 힘은 내가 가져가겠어!"],
|
||||
[0, "메를린", "환상향/메를린.jpg", 0, null, 73, 67, 70, 0, 160, 300, null, null, "내 연주를 듣고서, 무사했던 식량은 없지."],
|
||||
[0, "메디슨", "환상향/메디슨.jpg", 0, null, 73, 58, 71, 0, 160, 300, null, null, "콘파로, 콘파로, 독이여 모여라~"],
|
||||
[0, "메구미", null, 0, null, 83, 77, 74, 0, 160, 300, null, null],
|
||||
[0, "마이", "환상향/마이.jpg", 0, null, 72, 60, 75, 0, 160, 300, null, null, "내가 안내할게..."],
|
||||
[0, "마을사람5", null, 0, null, 65, 35, 50, 0, 160, 300, null, null],
|
||||
[0, "마을사람4", null, 0, null, 64, 34, 50, 0, 160, 300, null, null],
|
||||
[0, "마을사람3", null, 0, null, 63, 33, 50, 0, 160, 300, null, null],
|
||||
[0, "마을사람2", null, 0, null, 62, 32, 50, 0, 160, 300, null, null],
|
||||
[0, "마을사람1", null, 0, null, 61, 31, 50, 0, 160, 300, null, null],
|
||||
[0, "마미조", "환상향/마미조.png", 0, null, 77, 77, 97, 0, 160, 300, null, null, "뭔가 고민이 있는 모양이구먼. 야그나 함 들어 보자."],
|
||||
[0, "마리우스", null, 0, null, 67, 87, 66, 0, 160, 300, null, null],
|
||||
[0, "마리사", "환상향/마리사.jpg", 0, null, 83, 91, 78, 0, 160, 300, null, null, "아~? 탄막에 두뇌? 바보 아냐? 탄막은 파워야."],
|
||||
[0, "마나", null, 0, null, 73, 75, 72, 0, 160, 300, null, null],
|
||||
[0, "링고", "환상향/링고.jpg", 0, null, 54, 76, 71, 0, 160, 300, null, null, "옛날의 극락정토는 이제 보이는 그림자도 없다고 생각해."],
|
||||
[0, "릴리", "환상향/릴리.jpg", 0, null, 37, 63, 68, 0, 160, 300, null, null, "봄이에요~"],
|
||||
[0, "린네", null, 0, null, 83, 66, 83, 0, 160, 300, null, null],
|
||||
[0, "리코", null, 0, null, 68, 60, 76, 0, 160, 300, null, null],
|
||||
[0, "리카코", "환상향/리카코.jpg", 0, null, 76, 71, 100, 0, 160, 300, null, null, "왜 마법 따위에 흥미를 가지기나 하지?"],
|
||||
[0, "리카", "환상향/리카.jpg", 0, null, 61, 63, 75, 0, 160, 300, null, null, "가는 거예요!!"],
|
||||
[0, "리리카", "환상향/리리카.jpg", 0, null, 57, 66, 83, 0, 160, 300, null, null, "당신은 노래를 부르지. 난 손을 쓰지 않고 연주를 해. 장기전으로 가면 내 쪽이 세다고?"],
|
||||
[0, "리락", null, 0, null, 74, 54, 62, 0, 160, 300, null, null],
|
||||
[0, "리글", "환상향/리글.jpg", 0, null, 85, 64, 51, 0, 160, 300, null, null, "달이 보이는 밤에는, 즐기지 않아선 안 되는 거 아닐까."],
|
||||
[0, "루이즈", "환상향/루이즈.jpg", 0, null, 59, 57, 72, 0, 160, 300, null, null, "뭐, 마계는 좋은 곳이니, 느긋하게 관광이라도 하도록 해☆"],
|
||||
[0, "루미아", "환상향/루미아.jpg", 0, null, 79, 70, 56, 0, 160, 300, null, null, "그런 건가~"],
|
||||
[0, "루리", null, 0, null, 66, 66, 62, 0, 160, 300, null, null],
|
||||
[0, "루나사", "환상향/루나사.jpg", 0, null, 76, 77, 50, 0, 160, 300, null, null, "넌 슬픈 처지에서 태어난 경우야. 들떠있을 때가 아니지."],
|
||||
[0, "루나", "환상향/루나.jpg", 0, null, 67, 74, 74, 0, 160, 300, null, null, "빨라고? 네녀석이 빨아라!"],
|
||||
[0, "레티", "환상향/레티.jpg", 0, null, 60, 79, 49, 0, 160, 300, null, null, "흑막~"],
|
||||
[0, "레이센", "환상향/레이센.jpg", 0, null, 79, 78, 89, 0, 160, 300, null, null, "이 앞에 기다리고 있는 게 악몽이라 해도, 그래도 나는 가야만 해."],
|
||||
[0, "레이무", "환상향/레이무.jpg", 0, null, 90, 83, 82, 0, 160, 300, null, null, "인간을 쉽사리 죽게 내버려 둘까 보냐!"],
|
||||
[0, "레이라", null, 0, null, 66, 67, 51, 0, 160, 300, null, null],
|
||||
[0, "레밀리아", "환상향/레밀리아.jpg", 0, null, 93, 94, 70, 0, 160, 300, null, null, "당신은 이제껏 먹어 온 빵이 몇 개인지 알고 있어?"],
|
||||
[0, "런던인형", null, 0, null, 64, 78, 62, 0, 160, 300, null, null],
|
||||
[0, "란", "환상향/란.jpg", 0, null, 71, 79, 101, 0, 160, 300, null, null, "흠. 첸을 괴롭힌건 너지?"],
|
||||
[0, "라쿠", null, 0, null, 71, 52, 69, 0, 160, 300, null, null],
|
||||
[0, "라이코", "환상향/라이코.png", 0, null, 80, 66, 91, 0, 160, 300, null, null, "누구라도 자기 목숨을 부지하고 싶으면 노력을 아끼지 않잖아?"],
|
||||
[0, "라바", "환상향/라바.png", 0, null, 69, 74, 54, 0, 160, 300, null, null, "지금이라면 신세계의 신이라도 될 것 같은 기분이야!"],
|
||||
[0, "도레미", "환상향/도레미.jpg", 0, null, 67, 63, 88, 0, 160, 300, null, null, "맨몸!? 혹시 맨몸!?"],
|
||||
[0, "대요정", "환상향/대요정.jpg", 0, null, 60, 56, 79, 0, 160, 300, null, null],
|
||||
[0, "달토끼5", null, 0, null, 35, 55, 55, 0, 160, 300, null, null],
|
||||
[0, "달토끼4", null, 0, null, 34, 54, 55, 0, 160, 300, null, null],
|
||||
[0, "달토끼3", null, 0, null, 33, 53, 55, 0, 160, 300, null, null],
|
||||
[0, "달토끼2", null, 0, null, 32, 52, 55, 0, 160, 300, null, null],
|
||||
[0, "달토끼1", null, 0, null, 31, 51, 55, 0, 160, 300, null, null],
|
||||
[0, "니토리", "환상향/니토리.jpg", 0, null, 68, 68, 76, 0, 160, 300, null, null, "축제 땐 생선이 잘 팔리지. 인간에게 어업권을 뺏어서 독점하면 떼돈 벌겠네!"],
|
||||
[0, "노바", null, 0, null, 74, 56, 82, 0, 160, 300, null, null],
|
||||
[0, "노로이코", "환상향/노로이코.jpg", 0, null, 56, 61, 65, 0, 160, 300, null, null],
|
||||
[0, "네즈", null, 0, null, 76, 71, 40, 0, 160, 300, null, null],
|
||||
[0, "네무노", "환상향/네무노.png", 0, null, 78, 40, 67, 0, 160, 300, null, null, "자자, 차라도 마시고 가라."],
|
||||
[0, "나즈린", "환상향/나즈린.jpg", 0, null, 76, 63, 64, 0, 160, 300, null, null, "미안한데, 쥐를 얕보다간 죽어."],
|
||||
[0, "나루코", null, 0, null, 68, 40, 70, 0, 160, 300, null, null],
|
||||
[0, "나루미", "환상향/나루미.png", 0, null, 84, 72, 78, 0, 160, 300, null, null, "에? 뭐야 그거 무서워"],
|
||||
[0, "구유카", "환상향/구유카.jpg", 0, null, 84, 85, 85, 0, 160, 300, null, null, "신이라 해도, 힘이야말로 전부야!"],
|
||||
[0, "구앨리스", "환상향/구앨리스.jpg", 0, null, 80, 80, 90, 0, 160, 300, null, null, "궁극의 마법으로 널 해치워 주겠어!!"],
|
||||
[0, "구마리사", "환상향/구마리사.jpg", 0, null, 80, 90, 80, 0, 160, 300, null, null, "오케이~, 여기는 마리사에게 맡겨줘."],
|
||||
[0, "구레이무", "환상향/구레이무.jpg", 0, null, 90, 80, 80, 0, 160, 300, null, null, "문답무용이야!!"],
|
||||
[0, "곽청아", "환상향/곽청아.png", 0, null, 72, 77, 87, 0, 160, 300, null, null, "네~ 썩어서 귀엽죠?"],
|
||||
[0, "골리앗", null, 0, null, 72, 78, 58, 0, 160, 300, null, null],
|
||||
[0, "겐지", null, 0, null, 70, 70, 70, 0, 160, 300, null, null],
|
||||
[0, "겐게츠", "환상향/겐게츠.jpg", 0, null, 83, 70, 94, 0, 160, 300, null, null, "얕보지 마. 우린, 둘이서 한 사람 몫이니까.…"],
|
||||
[0, "강림", null, 0, null, 84, 76, 57, 0, 160, 300, null, null]
|
||||
[0,"히카리코",null,0,null,56,66,21,0,160,300,null,null],
|
||||
[0,"히메미코",null,0,null,68,78,65,0,160,300,null,null],
|
||||
[0,"히나",null,0,null,66,63,83,0,160,300,null,null,"온갖 재액이 닥쳐올 거야. 인간을 지키기 위해서라도 절대 보내주지 않겠어!"],
|
||||
[0,"후토",null,0,null,84,69,93,0,160,300,null,null,"불이라도 지를까."],
|
||||
[0,"홍미령",null,0,null,85,79,63,0,160,300,null,null,"젠장, 배수진이다!"],
|
||||
[0,"호쥬누에",null,0,null,85,95,72,0,160,300,null,null,"자아, 나의 정체를 알아버린 당신을 죽여버리고, 정체불명으로 돌아가야겠어."],
|
||||
[0,"호라이인형",null,0,null,66,71,73,0,160,300,null,null],
|
||||
[0,"헤카티아",null,0,null,85,84,94,0,160,300,null,null,"꿈의 세계에선 무방비하니까 간단한 일이었지."],
|
||||
[0,"하타테",null,0,null,30,88,70,0,160,300,null,null,"둘이서 더블스포일러가 되어서, 최강을 노리는 거야!"],
|
||||
[0,"하츠나",null,0,null,63,61,65,0,160,300,null,null],
|
||||
[0,"하니에",null,0,null,57,66,63,0,160,300,null,null],
|
||||
[0,"플랑드르",null,0,null,76,101,71,0,160,300,null,null,"쿠욱하고 콰광~이네"],
|
||||
[0,"프랑스인형",null,0,null,68,68,75,0,160,300,null,null],
|
||||
[0,"파츄리",null,0,null,81,52,103,0,160,300,null,null,"무큐-"],
|
||||
[0,"파스칼",null,0,null,73,70,60,0,160,300,null,null],
|
||||
[0,"파브리티스",null,0,null,61,61,62,0,160,300,null,null],
|
||||
[0,"파르시",null,0,null,67,49,89,0,160,300,null,null,"너한테 원한은 없다만, 내가 널 공격하는 이유는 얼마든지 만들 수 있어."],
|
||||
[0,"토키코",null,0,null,60,59,88,0,160,300,null,null],
|
||||
[0,"토쿠비",null,0,null,77,77,72,0,160,300,null,null],
|
||||
[0,"토지코",null,0,null,76,62,86,0,160,300,null,null,"아이고 이런. 또 하나요?"],
|
||||
[0,"토요히메",null,0,null,96,69,95,0,160,300,null,null],
|
||||
[0,"토비코",null,0,null,72,58,56,0,160,300,null,null],
|
||||
[0,"텐시",null,0,null,81,89,71,0,160,300,null,null,"약해! 약해 빠졌어! 그따위로 하늘에 오를 수 있을 거라 꿈도 꾸지 마!"],
|
||||
[0,"텐무",null,0,null,68,73,56,0,160,300,null,null],
|
||||
[0,"텐구5",null,0,null,51,51,50,0,160,300,null,null],
|
||||
[0,"텐구4",null,0,null,51,51,50,0,160,300,null,null],
|
||||
[0,"텐구3",null,0,null,51,51,50,0,160,300,null,null],
|
||||
[0,"텐구2",null,0,null,51,51,50,0,160,300,null,null],
|
||||
[0,"텐구1",null,0,null,51,51,50,0,160,300,null,null],
|
||||
[0,"테이레이다",null,0,null,78,75,53,0,160,300,null,null,"갑작스럽겠지만, 테스트를 시작하겠어!]"],
|
||||
[0,"테위",null,0,null,82,32,79,0,160,300,null,null,"대숲은 사람을 헤매게 하는 대나무의 미로. 헤매는 것은 산사람다운 행위인 거야."],
|
||||
[0,"키쿠리",null,0,null,56,72,76,0,160,300,null,null],
|
||||
[0,"키요히메",null,0,null,66,76,76,0,160,300,null,null],
|
||||
[0,"키스메",null,0,null,73,58,59,0,160,300,null,null,"너희가 떨어뜨린 시체는 이거냐?"],
|
||||
[0,"키나코",null,0,null,63,68,67,0,160,300,null,null],
|
||||
[0,"클라운피스",null,0,null,89,80,77,0,160,300,null,null,"잇츠, 루나틱 타임! 광기의 세계로 어서오세요!"],
|
||||
[0,"쿠스코",null,0,null,70,57,53,0,160,300,null,null],
|
||||
[0,"쿠루미",null,0,null,70,65,68,0,160,300,null,null,"나는 쿠루미. 이 호수의 문지기야."],
|
||||
[0,"쿄코",null,0,null,37,57,80,0,160,300,null,null,"목소리가 작다!"],
|
||||
[0,"콘가라",null,0,null,91,96,60,0,160,300,null,null],
|
||||
[0,"코토히메",null,0,null,54,36,90,0,160,300,null,null,"충격의 새로운 사실! 고대인은 전기를 쓰고 있었다!"],
|
||||
[0,"코코로",null,0,null,80,91,60,0,160,300,null,null,"나와 최강의 칭호를 걸고 싸우자!"],
|
||||
[0,"코카이",null,0,null,67,78,61,0,160,300,null,null],
|
||||
[0,"코이시",null,0,null,88,71,93,0,160,300,null,null,"네 시체는 지령전 입구에 장식해줄게!"],
|
||||
[0,"코스즈",null,0,null,61,63,70,0,160,300,null,null,"요괴가 하는 말을 믿으시는 거예요?!"],
|
||||
[0,"코마치",null,0,null,80,97,75,0,160,300,null,null,"더는 어찌할 도리가 없어. 나는 그런 인간은 버릴 거야."],
|
||||
[0,"코노하",null,0,null,62,58,67,0,160,300,null,null],
|
||||
[0,"코가사",null,0,null,79,76,56,0,160,300,null,null,"됐어. 어차피 요괴는 이렇게 쓸쓸하게 사라져나가는 거니까."],
|
||||
[0,"케이네",null,0,null,77,71,104,0,160,300,null,null,"여기엔 원래부터 아무것도 없었어, 인간도 인간의 마을도 말이야."],
|
||||
[0,"캇파5",null,0,null,40,40,65,0,160,300,null,null],
|
||||
[0,"캇파4",null,0,null,40,40,64,0,160,300,null,null],
|
||||
[0,"캇파3",null,0,null,40,40,63,0,160,300,null,null],
|
||||
[0,"캇파2",null,0,null,40,40,62,0,160,300,null,null],
|
||||
[0,"캇파1",null,0,null,40,40,61,0,160,300,null,null],
|
||||
[0,"카스미",null,0,null,67,63,82,0,160,300,null,null],
|
||||
[0,"카센",null,0,null,72,103,71,0,160,300,null,null,"이런 곳에서 전력을 다할 이유가없지."],
|
||||
[0,"카나코",null,0,null,84,97,77,0,160,300,null,null,"나를 부른 이는 누구인가?"],
|
||||
[0,"카나",null,0,null,64,72,57,0,160,300,null,null,"아, 아니, 그러니까, 우주인?]"],
|
||||
[0,"카구야",null,0,null,98,71,82,0,160,300,null,null,"내 영원을 다루는 술법으로 모두 깨뜨려 보이겠어."],
|
||||
[0,"카게로",null,0,null,78,88,68,0,160,300,null,null,"무서워~ 인간 무서워~"],
|
||||
[0,"치유리",null,0,null,45,77,78,0,160,300,null,null,"싸워서 강한 쪽이 이 세계의 치유리라구."],
|
||||
[0,"치르노",null,0,null,79,89,49,0,160,300,null,null,"눈앞에 강적이 있잖아?"],
|
||||
[0,"츠바메",null,0,null,71,80,58,0,160,300,null,null],
|
||||
[0,"첸",null,0,null,48,70,70,0,160,300,null,null,"그건 그렇고, 마요이가에 어서와"],
|
||||
[0,"지벤",null,0,null,85,67,66,0,160,300,null,null],
|
||||
[0,"지귀",null,0,null,79,67,69,0,160,300,null,null],
|
||||
[0,"조온",null,0,null,83,74,96,0,160,300,null,null,"우리가 왜 최흉최악의 자매인지 그 몸으로 이해해라!"],
|
||||
[0,"자넷",null,0,null,60,59,62,0,160,300,null,null],
|
||||
[0,"이포니아",null,0,null,61,62,61,0,160,300,null,null],
|
||||
[0,"이쿠",null,0,null,72,72,94,0,160,300,null,null,"조금 벌을 받으실 필요가 있을지도 모르겠군요."],
|
||||
[0,"이치요우",null,0,null,70,73,58,0,160,300,null,null],
|
||||
[0,"이치린",null,0,null,86,55,88,0,160,300,null,null,"평화롭게 살고있으니까 괜찮잖아. 너, 요괴를 죽여도 아무렇지 않아?"],
|
||||
[0,"이슈아",null,0,null,67,76,78,0,160,300,null,null],
|
||||
[0,"이나코",null,0,null,56,35,63,0,160,300,null,null],
|
||||
[0,"유키",null,0,null,72,77,61,0,160,300,null,null,"우리 둘을 쓰러뜨릴 수 있을 거라고 생각해?"],
|
||||
[0,"유카리",null,0,null,87,76,96,0,160,300,null,null,"아름답고 잔혹하게 이 대지에서 사라져라!"],
|
||||
[0,"유카",null,0,null,94,88,70,0,160,300,null,null,"아 그래, 마침 60년 전이었네. 아아...... 그래, 벌써 그런 시기구나...... 60년인가. 회귀할 때구나."],
|
||||
[0,"유유코",null,0,null,97,80,81,0,160,300,null,null,"새는 잔뼈가 많아서 싫어."],
|
||||
[0,"유메코",null,0,null,72,103,73,0,160,300,null,null,"우리들을 모욕한 죄는 죽음으로 밖에 갚을 수 없다!!"],
|
||||
[0,"유메미",null,0,null,93,72,91,0,160,300,null,null,"기합 넣어! 죽어 버렸다간 데리고 돌아갈 수 없으니까."],
|
||||
[0,"유기",null,0,null,71,104,72,0,160,300,null,null,"네가 강하기만 하다면 나야 아무 군소리도 안해. 어떤 목적으로 여기에 왔건 간에."],
|
||||
[0,"유겐마간",null,0,null,80,80,50,0,160,300,null,null],
|
||||
[0,"우카",null,0,null,60,73,82,0,160,300,null,null],
|
||||
[0,"우츠호",null,0,null,73,105,68,0,160,300,null,null,"이물질 발견! 핵융합로의 이물질 혼입은 일단 반응을 정지하고, 즉각 이물질을 제거하라."],
|
||||
[0,"요정5",null,0,null,55,60,35,0,160,300,null,null],
|
||||
[0,"요정4",null,0,null,55,59,34,0,160,300,null,null],
|
||||
[0,"요정3",null,0,null,55,58,33,0,160,300,null,null],
|
||||
[0,"요정2",null,0,null,55,57,32,0,160,300,null,null],
|
||||
[0,"요정1",null,0,null,55,56,31,0,160,300,null,null],
|
||||
[0,"요우무",null,0,null,81,89,71,0,160,300,null,null,"...요괴가 담금질한 이 누관검에, 벨 수 없는 것 따위, 별로 없어!"],
|
||||
[0,"요시카",null,0,null,84,78,61,0,160,300,null,null,"오~지~마~!"],
|
||||
[0,"요리히메",null,0,null,90,98,74,0,160,300,null,null],
|
||||
[0,"와카챠나두",null,0,null,62,61,68,0,160,300,null,null],
|
||||
[0,"와카사기",null,0,null,68,57,79,0,160,300,null,null,"슬슬 우리요괴가 활약할 차례야!"],
|
||||
[0,"오토히메",null,0,null,80,60,76,0,160,300,null,null],
|
||||
[0,"오키나",null,0,null,87,87,86,0,160,300,null,null,"요괴가 아니라 신이에요~"],
|
||||
[0,"오모이카네",null,0,null,66,52,86,0,160,300,null,null],
|
||||
[0,"오린",null,0,null,87,84,77,0,160,300,null,null,"시체가 갖고 싶으니까, 역시 내가 언니를 처리해야겠네!"],
|
||||
[0,"오렌지",null,0,null,72,52,68,0,160,300,null,null,"아하하, 1면 보스니까라고 얕보지 말라구!"],
|
||||
[0,"오니5",null,0,null,55,65,40,0,160,300,null,null],
|
||||
[0,"오니4",null,0,null,54,64,40,0,160,300,null,null],
|
||||
[0,"오니3",null,0,null,53,63,40,0,160,300,null,null],
|
||||
[0,"오니2",null,0,null,52,62,40,0,160,300,null,null],
|
||||
[0,"오니1",null,0,null,51,61,40,0,160,300,null,null],
|
||||
[0,"엘핀민트",null,0,null,71,71,61,0,160,300,null,null],
|
||||
[0,"엘리스",null,0,null,55,69,88,0,160,300,null,null],
|
||||
[0,"엘리",null,0,null,86,83,66,0,160,300,null,null,"싸운 거 오랜만인걸 뭐."],
|
||||
[0,"엘렌",null,0,null,67,62,71,0,160,300,null,null,"나는, 엘렌. 폭신폭신 엘렌이야."],
|
||||
[0,"에이린",null,0,null,72,76,105,0,160,300,null,null,"아하하. 너희는 어리석구나."],
|
||||
[0,"야토",null,0,null,72,83,66,0,160,300,null,null],
|
||||
[0,"야츠하시",null,0,null,69,58,73,0,160,300,null,null,"훗훗후, 반역자에겐 어떤 수단이든 써도 된다면서?"],
|
||||
[0,"야마메",null,0,null,75,65,77,0,160,300,null,null,"지저에 떨어진 요괴의 힘을 보고 싶은 모양이구나."],
|
||||
[0,"앨리스",null,0,null,81,63,99,0,160,300,null,null,"그런 소리 하니까 바보 취급당하는 거야. 탄막은 브레인. 상식이야."],
|
||||
[0,"안자",null,0,null,67,61,83,0,160,300,null,null],
|
||||
[0,"안",null,0,null,68,51,67,0,160,300,null,null],
|
||||
[0,"아큐",null,0,null,72,30,82,0,160,300,null,null,"나는 이래뵈도 히에다가의 당주로써 환상향의 서기라는 역할을 지닌 유서깊은 집안의 사람이야."],
|
||||
[0,"아즈마",null,0,null,78,81,64,0,160,300,null,null],
|
||||
[0,"아운",null,0,null,78,87,65,0,160,300,null,null,"신사를 지키는 수호신으로서 말이야!"],
|
||||
[0,"아야",null,0,null,73,93,71,0,160,300,null,null,"깨끗하고 올바른 샤메이마루입니다."],
|
||||
[0,"아리오슈",null,0,null,56,70,67,0,160,300,null,null],
|
||||
[0,"써니",null,0,null,75,75,60,0,160,300,null,null,"어라, 혼자서도 최강이라며?"],
|
||||
[0,"쌍자",null,0,null,63,82,71,0,160,300,null,null],
|
||||
[0,"쌍사",null,0,null,62,73,81,0,160,300,null,null],
|
||||
[0,"신키",null,0,null,96,92,73,0,160,300,null,null,"나의 세계에서 저지른 죄값은 크지. 용서할 리가 없잖아."],
|
||||
[0,"신묘마루",null,0,null,85,68,88,0,160,300,null,null,"누─구?"],
|
||||
[0,"시키에이키",null,0,null,84,77,98,0,160,300,null,null,"보랏빛 벚꽃은 죄 깊은 인간의 영혼이 깃드는 꽃. 너는 그 보랏빛 벚꽃이 떨어져내리는 밑에서, 단죄하거라!"],
|
||||
[0,"시키에이카",null,0,null,71,60,77,0,160,300,null,null],
|
||||
[0,"시즈하",null,0,null,79,55,62,0,160,300,null,null],
|
||||
[0,"시온",null,0,null,80,97,76,0,160,300,null,null,"나도 좋아서 가난하게 살고 있는 게 아닌데~"],
|
||||
[0,"스타",null,0,null,70,60,75,0,160,300,null,null,"그래, 이 비겁한 녀석아!"],
|
||||
[0,"스이카",null,0,null,74,102,66,0,160,300,null,null,"거짓말은 인간만 하는 거야!"],
|
||||
[0,"스와코",null,0,null,95,81,81,0,160,300,null,null,"아~우~~"],
|
||||
[0,"스씨",null,0,null,66,63,66,0,160,300,null,null],
|
||||
[0,"스미레코",null,0,null,81,63,88,0,160,300,null,null,"히가시후카미 고등학교 1학년, 우사미 스미레코. 우는 아이도 뚝 그치는 진짜 초능력자야."],
|
||||
[0,"순호",null,0,null,77,102,79,0,160,300,null,null,"지금의 너로썬 내 힘 앞에선 무력, 절대적으로 무력하도다!"],
|
||||
[0,"쇼",null,0,null,75,75,95,0,160,300,null,null,"그것이 당신의 정의라는 거라면, 그것도 좋지요."],
|
||||
[0,"소악마",null,0,null,50,72,67,0,160,300,null,null],
|
||||
[0,"셰퍼드",null,0,null,61,58,56,0,160,300,null,null],
|
||||
[0,"센고",null,0,null,83,56,79,0,160,300,null,null],
|
||||
[0,"센",null,0,null,67,66,28,0,160,300,null,null],
|
||||
[0,"세키반키",null,0,null,68,75,71,0,160,300,null,null,"인간은 누구든지 나를 무서워하지!"],
|
||||
[0,"세츠조",null,0,null,58,80,58,0,160,300,null,null],
|
||||
[0,"세이자",null,0,null,82,94,69,0,160,300,null,null,"내 이름은 세이자. 뼛속까지 아마노자쿠다!"],
|
||||
[0,"세이란",null,0,null,71,77,51,0,160,300,null,null,"뭐, 이것도 일이야, 알지? 그러니 내게 여기서 얌전히 당해 줘. 응?"],
|
||||
[0,"샤리트",null,0,null,68,62,62,0,160,300,null,null],
|
||||
[0,"상해인형",null,0,null,74,69,69,0,160,300,null,null],
|
||||
[0,"상아",null,0,null,84,84,84,0,160,300,null,null],
|
||||
[0,"사토리",null,0,null,81,57,84,0,160,300,null,null,"제게는 보여요. 당신이 마음속에 그리고 있는 탄막이!"],
|
||||
[0,"사토노",null,0,null,71,76,77,0,160,300,null,null,"봐 주진 않겠지만 죽으면 죽일꺼니까 말야―!"],
|
||||
[0,"사쿠야",null,0,null,87,89,78,0,160,300,null,null,"당신의 시간 또한 나의 것"],
|
||||
[0,"사샤",null,0,null,74,48,78,0,160,300,null,null],
|
||||
[0,"사리엘",null,0,null,85,68,102,0,160,300,null,null,"죽는다면 모두 함께"],
|
||||
[0,"사라카",null,0,null,60,74,63,0,160,300,null,null],
|
||||
[0,"사라",null,0,null,76,78,36,0,160,300,null,null,"싸우는 건 재미있지만, 지는 건 재미없어."],
|
||||
[0,"사나에",null,0,null,87,71,85,0,160,300,null,null,"지금은, 바깥 세계는 환경을 지키라든가 경기 대책이 어떻다든가, 바보 같이 뭘 위해 태어난 건지 생각할 수 없는 사람 뿐."],
|
||||
[0,"사구메",null,0,null,84,97,71,0,160,300,null,null,"......그런건 아냐."],
|
||||
[0,"벤벤",null,0,null,69,59,75,0,160,300,null,null,"어딜 봐도 츠쿠모가미잖아."],
|
||||
[0,"뱌쿠렌",null,0,null,83,90,82,0,160,300,null,null,"아아, 법의 세계에 빛이 가득해."],
|
||||
[0,"미호",null,0,null,85,86,62,0,160,300,null,null],
|
||||
[0,"미하나",null,0,null,76,67,84,0,160,300,null,null],
|
||||
[0,"미토리",null,0,null,57,56,62,0,160,300,null,null],
|
||||
[0,"미코토",null,0,null,73,82,82,0,160,300,null,null],
|
||||
[0,"미코",null,0,null,87,72,97,0,160,300,null,null,"장난은 끝이다!"],
|
||||
[0,"미요",null,0,null,73,66,58,0,160,300,null,null],
|
||||
[0,"미스티아",null,0,null,65,82,12,0,160,300,null,null,"자, 잠깐 기다려~!"],
|
||||
[0,"미셸",null,0,null,70,69,72,0,160,300,null,null],
|
||||
[0,"미샨드라",null,0,null,80,63,82,0,160,300,null,null],
|
||||
[0,"미샤구지",null,0,null,48,99,59,0,160,300,null,null],
|
||||
[0,"미마",null,0,null,75,90,93,0,160,300,null,null,"나도 인간계의 신이야. (거짓말)"],
|
||||
[0,"미노리코",null,0,null,71,58,74,0,160,300,null,null,"갓 수확한 고구마는 나의 향수. 무녀가 먹게 놔둘 줄 알고!"],
|
||||
[0,"미나유",null,0,null,72,49,84,0,160,300,null,null],
|
||||
[0,"무무무",null,0,null,70,77,57,0,160,300,null,null],
|
||||
[0,"무라사",null,0,null,76,82,65,0,160,300,null,null,"이 세상에 미련이 남으신 분은 승선할 수 없습니다만 당신은 어떠신가요?"],
|
||||
[0,"무게츠",null,0,null,76,95,68,0,160,300,null,null,"난 무게츠. 그리고, 여긴 나의 세계."],
|
||||
[0,"묘렌",null,0,null,77,78,79,0,160,300,null,null],
|
||||
[0,"모코우",null,0,null,83,99,69,0,160,300,null,null,"너희들도 한번 영원의 고륜을 고민해 보는 게 좋아!"],
|
||||
[0,"모미지",null,0,null,83,68,66,0,160,300,null,null,"높은 분들은 저희 일반 텐구보다 훨씬 강하니까, 경비 같은 건 전혀 필요하지 않을 것 같은데."],
|
||||
[0,"모모히메",null,0,null,75,68,72,0,160,300,null,null],
|
||||
[0,"모모",null,0,null,62,62,71,0,160,300,null,null],
|
||||
[0,"메이즈",null,0,null,70,40,76,0,160,300,null,null],
|
||||
[0,"메이벨",null,0,null,71,74,56,0,160,300,null,null],
|
||||
[0,"메이라",null,0,null,65,82,36,0,160,300,null,null,"내가 이기면 하쿠레이의 힘은 내가 가져가겠어!"],
|
||||
[0,"메를린",null,0,null,73,67,70,0,160,300,null,null,"내 연주를 듣고서, 무사했던 식량은 없지."],
|
||||
[0,"메디슨",null,0,null,73,58,71,0,160,300,null,null,"콘파로, 콘파로, 독이여 모여라~"],
|
||||
[0,"메구미",null,0,null,83,77,74,0,160,300,null,null],
|
||||
[0,"마이",null,0,null,72,60,75,0,160,300,null,null,"내가 안내할게..."],
|
||||
[0,"마을사람5",null,0,null,65,35,50,0,160,300,null,null],
|
||||
[0,"마을사람4",null,0,null,64,34,50,0,160,300,null,null],
|
||||
[0,"마을사람3",null,0,null,63,33,50,0,160,300,null,null],
|
||||
[0,"마을사람2",null,0,null,62,32,50,0,160,300,null,null],
|
||||
[0,"마을사람1",null,0,null,61,31,50,0,160,300,null,null],
|
||||
[0,"마미조",null,0,null,77,77,97,0,160,300,null,null,"뭔가 고민이 있는 모양이구먼. 야그나 함 들어 보자."],
|
||||
[0,"마리우스",null,0,null,67,87,66,0,160,300,null,null],
|
||||
[0,"마리사",null,0,null,83,91,78,0,160,300,null,null,"아~? 탄막에 두뇌? 바보 아냐? 탄막은 파워야."],
|
||||
[0,"마나",null,0,null,73,75,72,0,160,300,null,null],
|
||||
[0,"링고",null,0,null,54,76,71,0,160,300,null,null,"옛날의 극락정토는 이제 보이는 그림자도 없다고 생각해."],
|
||||
[0,"릴리",null,0,null,37,63,68,0,160,300,null,null,"봄이에요~"],
|
||||
[0,"린네",null,0,null,83,66,83,0,160,300,null,null],
|
||||
[0,"리코",null,0,null,68,60,76,0,160,300,null,null],
|
||||
[0,"리카코",null,0,null,76,71,100,0,160,300,null,null,"왜 마법 따위에 흥미를 가지기나 하지?"],
|
||||
[0,"리카",null,0,null,61,63,75,0,160,300,null,null,"가는 거예요!!"],
|
||||
[0,"리리카",null,0,null,57,66,83,0,160,300,null,null,"당신은 노래를 부르지. 난 손을 쓰지 않고 연주를 해. 장기전으로 가면 내 쪽이 세다고?"],
|
||||
[0,"리락",null,0,null,74,54,62,0,160,300,null,null],
|
||||
[0,"리글",null,0,null,85,64,51,0,160,300,null,null,"달이 보이는 밤에는, 즐기지 않아선 안 되는 거 아닐까."],
|
||||
[0,"루이즈",null,0,null,59,57,72,0,160,300,null,null,"뭐, 마계는 좋은 곳이니, 느긋하게 관광이라도 하도록 해☆"],
|
||||
[0,"루미아",null,0,null,79,70,56,0,160,300,null,null,"그런 건가~"],
|
||||
[0,"루리",null,0,null,66,66,62,0,160,300,null,null],
|
||||
[0,"루나사",null,0,null,76,77,50,0,160,300,null,null,"넌 슬픈 처지에서 태어난 경우야. 들떠있을 때가 아니지."],
|
||||
[0,"루나",null,0,null,67,74,74,0,160,300,null,null,"빨라고? 네녀석이 빨아라!"],
|
||||
[0,"레티",null,0,null,60,79,49,0,160,300,null,null,"흑막~"],
|
||||
[0,"레이센",null,0,null,79,78,89,0,160,300,null,null,"이 앞에 기다리고 있는 게 악몽이라 해도, 그래도 나는 가야만 해."],
|
||||
[0,"레이무",null,0,null,90,83,82,0,160,300,null,null,"인간을 쉽사리 죽게 내버려 둘까 보냐!"],
|
||||
[0,"레이라",null,0,null,66,67,51,0,160,300,null,null],
|
||||
[0,"레밀리아",null,0,null,93,94,70,0,160,300,null,null,"당신은 이제껏 먹어 온 빵이 몇 개인지 알고 있어?"],
|
||||
[0,"런던인형",null,0,null,64,78,62,0,160,300,null,null],
|
||||
[0,"란",null,0,null,71,79,101,0,160,300,null,null,"흠. 첸을 괴롭힌건 너지?"],
|
||||
[0,"라쿠",null,0,null,71,52,69,0,160,300,null,null],
|
||||
[0,"라이코",null,0,null,80,66,91,0,160,300,null,null,"누구라도 자기 목숨을 부지하고 싶으면 노력을 아끼지 않잖아?"],
|
||||
[0,"라바",null,0,null,69,74,54,0,160,300,null,null,"지금이라면 신세계의 신이라도 될 것 같은 기분이야!"],
|
||||
[0,"도레미",null,0,null,67,63,88,0,160,300,null,null,"맨몸!? 혹시 맨몸!?"],
|
||||
[0,"대요정",null,0,null,60,56,79,0,160,300,null,null],
|
||||
[0,"달토끼5",null,0,null,35,55,55,0,160,300,null,null],
|
||||
[0,"달토끼4",null,0,null,34,54,55,0,160,300,null,null],
|
||||
[0,"달토끼3",null,0,null,33,53,55,0,160,300,null,null],
|
||||
[0,"달토끼2",null,0,null,32,52,55,0,160,300,null,null],
|
||||
[0,"달토끼1",null,0,null,31,51,55,0,160,300,null,null],
|
||||
[0,"니토리",null,0,null,68,68,76,0,160,300,null,null,"축제 땐 생선이 잘 팔리지. 인간에게 어업권을 뺏어서 독점하면 떼돈 벌겠네!"],
|
||||
[0,"노바",null,0,null,74,56,82,0,160,300,null,null],
|
||||
[0,"노로이코",null,0,null,56,61,65,0,160,300,null,null],
|
||||
[0,"네즈",null,0,null,76,71,40,0,160,300,null,null],
|
||||
[0,"네무노",null,0,null,78,40,67,0,160,300,null,null,"자자, 차라도 마시고 가라."],
|
||||
[0,"나즈린",null,0,null,76,63,64,0,160,300,null,null,"미안한데, 쥐를 얕보다간 죽어."],
|
||||
[0,"나루코",null,0,null,68,40,70,0,160,300,null,null],
|
||||
[0,"나루미",null,0,null,84,72,78,0,160,300,null,null,"에? 뭐야 그거 무서워"],
|
||||
[0,"구유카",null,0,null,84,85,85,0,160,300,null,null,"신이라 해도, 힘이야말로 전부야!"],
|
||||
[0,"구앨리스",null,0,null,80,80,90,0,160,300,null,null,"궁극의 마법으로 널 해치워 주겠어!!"],
|
||||
[0,"구마리사",null,0,null,80,90,80,0,160,300,null,null,"오케이~, 여기는 마리사에게 맡겨줘."],
|
||||
[0,"구레이무",null,0,null,90,80,80,0,160,300,null,null,"문답무용이야!!"],
|
||||
[0,"곽청아",null,0,null,72,77,87,0,160,300,null,null,"네~ 썩어서 귀엽죠?"],
|
||||
[0,"골리앗",null,0,null,72,78,58,0,160,300,null,null],
|
||||
[0,"겐지",null,0,null,70,70,70,0,160,300,null,null],
|
||||
[0,"겐게츠",null,0,null,83,70,94,0,160,300,null,null,"얕보지 마. 우린, 둘이서 한 사람 몫이니까.…"],
|
||||
[0,"강림",null,0,null,84,76,57,0,160,300,null,null]
|
||||
],
|
||||
"cities":[
|
||||
|
||||
|
||||
+244
-243
@@ -8,6 +8,7 @@
|
||||
"max":110,
|
||||
"npcMax":100
|
||||
},
|
||||
"iconPath":"환상향",
|
||||
"nation":[
|
||||
["영이", "#A9A9A9", 3000, 3000, "The Highly Responsive to Prayers.", 0, "묵가", 1, ["상용"]],
|
||||
["봉마", "#483D8B", 3000, 3000, "The Story of Eastern Wonderland.", 0, "종횡가", 1, ["이도"]],
|
||||
@@ -30,249 +31,249 @@
|
||||
],
|
||||
"diplomacy":[],
|
||||
"general":[
|
||||
[0, "히카리코", null, "환상", null, 56, 66, 21, 0, 160, 300, null, null],
|
||||
[0, "히메미코", null, 0, null, 68, 78, 65, 0, 160, 300, null, null],
|
||||
[0, "히나", "환상향/히나.jpg", "풍신", null, 66, 63, 83, 0, 160, 300, null, null, "온갖 재액이 닥쳐올 거야. 인간을 지키기 위해서라도 절대 보내주지 않겠어!"],
|
||||
[0, "후토", "환상향/후토.png", "신령", null, 84, 69, 93, 0, 160, 300, null, null, "불이라도 지를까."],
|
||||
[0, "홍미령", "환상향/홍미령.jpg", "홍마", null, 85, 79, 63, 0, 160, 300, null, null, "젠장, 배수진이다!"],
|
||||
[0, "호쥬누에", "환상향/호쥬누에.jpg", "성령", null, 85, 95, 72, 0, 160, 300, null, null, "자아, 나의 정체를 알아버린 당신을 죽여버리고, 정체불명으로 돌아가야겠어."],
|
||||
[0, "호라이인형", null, 0, null, 66, 71, 73, 0, 160, 300, null, null],
|
||||
[0, "헤카티아", "환상향/헤카티아.jpg", "감주", null, 85, 84, 94, 0, 160, 300, null, null, "꿈의 세계에선 무방비하니까 간단한 일이었지."],
|
||||
[0, "하타테", "환상향/하타테.jpg", "외전", null, 30, 88, 70, 0, 160, 300, null, null, "둘이서 더블스포일러가 되어서, 최강을 노리는 거야!"],
|
||||
[0, "하츠나", null, 0, null, 63, 61, 65, 0, 160, 300, null, null],
|
||||
[0, "하니에", null, 0, null, 57, 66, 63, 0, 160, 300, null, null],
|
||||
[0, "플랑드르", "환상향/플랑드르.jpg", "홍마", null, 76, 101, 71, 0, 160, 300, null, null, "쿠욱하고 콰광~이네"],
|
||||
[0, "프랑스인형", null, 0, null, 68, 68, 75, 0, 160, 300, null, null],
|
||||
[0, "파츄리", "환상향/파츄리.jpg", "홍마", null, 81, 52, 103, 0, 160, 300, null, null, "무큐-"],
|
||||
[0, "파스칼", null, 0, null, 73, 70, 60, 0, 160, 300, null, null],
|
||||
[0, "파브리티스", null, 0, null, 61, 61, 62, 0, 160, 300, null, null],
|
||||
[0, "파르시", "환상향/파르시.jpg", "지령", null, 67, 49, 89, 0, 160, 300, null, null, "너한테 원한은 없다만, 내가 널 공격하는 이유는 얼마든지 만들 수 있어."],
|
||||
[0, "토키코", null, "구문", null, 60, 59, 88, 0, 160, 300, null, null],
|
||||
[0, "토쿠비", null, 0, null, 77, 77, 72, 0, 160, 300, null, null],
|
||||
[0, "토지코", "환상향/토지코.png", "신령", null, 76, 62, 86, 0, 160, 300, null, null, "아이고 이런. 또 하나요?"],
|
||||
[0, "토요히메", "환상향/토요히메.jpg", "구문", null, 96, 69, 95, 0, 160, 300, null, null],
|
||||
[0, "토비코", null, 0, null, 72, 58, 56, 0, 160, 300, null, null],
|
||||
[0, "텐시", "환상향/텐시.jpg", "외전", null, 81, 89, 71, 0, 160, 300, null, null, "약해! 약해 빠졌어! 그따위로 하늘에 오를 수 있을 거라 꿈도 꾸지 마!"],
|
||||
[0, "텐무", null, 0, null, 68, 73, 56, 0, 160, 300, null, null],
|
||||
[0, "텐구5", null, 0, null, 51, 51, 50, 0, 160, 300, null, null],
|
||||
[0, "텐구4", null, 0, null, 51, 51, 50, 0, 160, 300, null, null],
|
||||
[0, "텐구3", null, 0, null, 51, 51, 50, 0, 160, 300, null, null],
|
||||
[0, "텐구2", null, 0, null, 51, 51, 50, 0, 160, 300, null, null],
|
||||
[0, "텐구1", null, 0, null, 51, 51, 50, 0, 160, 300, null, null],
|
||||
[0, "테이레이다", "환상향/테이레이다.png", "천공", null, 78, 75, 53, 0, 160, 300, null, null, "갑작스럽겠지만, 테스트를 시작하겠어!]"],
|
||||
[0, "테위", "환상향/테위.jpg", "영야", null, 82, 32, 79, 0, 160, 300, null, null, "대숲은 사람을 헤매게 하는 대나무의 미로. 헤매는 것은 산사람다운 행위인 거야."],
|
||||
[0, "키쿠리", "환상향/키쿠리.jpg", "영이", null, 56, 72, 76, 0, 160, 300, null, null],
|
||||
[0, "키요히메", null, 0, null, 66, 76, 76, 0, 160, 300, null, null],
|
||||
[0, "키스메", "환상향/키스메.jpg", "지령", null, 73, 58, 59, 0, 160, 300, null, null, "너희가 떨어뜨린 시체는 이거냐?"],
|
||||
[0, "키나코", null, 0, null, 63, 68, 67, 0, 160, 300, null, null],
|
||||
[0, "클라운피스", "환상향/클라운피스.jpg", "감주", null, 89, 80, 77, 0, 160, 300, null, null, "잇츠, 루나틱 타임! 광기의 세계로 어서오세요!"],
|
||||
[0, "쿠스코", null, 0, null, 70, 57, 53, 0, 160, 300, null, null],
|
||||
[0, "쿠루미", "환상향/쿠루미.jpg", "환상", null, 70, 65, 68, 0, 160, 300, null, null, "나는 쿠루미. 이 호수의 문지기야."],
|
||||
[0, "쿄코", "환상향/쿄코.jpg", "신령", null, 37, 57, 80, 0, 160, 300, null, null, "목소리가 작다!"],
|
||||
[0, "콘가라", "환상향/콘가라.jpg", "영이", null, 91, 96, 60, 0, 160, 300, null, null],
|
||||
[0, "코토히메", "환상향/코토히메.jpg", "몽시", null, 54, 36, 90, 0, 160, 300, null, null, "충격의 새로운 사실! 고대인은 전기를 쓰고 있었다!"],
|
||||
[0, "코코로", "환상향/코코로.jpg", "외전", null, 80, 91, 60, 0, 160, 300, null, null, "나와 최강의 칭호를 걸고 싸우자!"],
|
||||
[0, "코카이", null, 0, null, 67, 78, 61, 0, 160, 300, null, null],
|
||||
[0, "코이시", "환상향/코이시.jpg", "지령", null, 88, 71, 93, 0, 160, 300, null, null, "네 시체는 지령전 입구에 장식해줄게!"],
|
||||
[0, "코스즈", "환상향/코스즈.jpg", "구문", null, 61, 63, 70, 0, 160, 300, null, null, "요괴가 하는 말을 믿으시는 거예요?!"],
|
||||
[0, "코마치", "환상향/코마치.jpg", "화영", null, 80, 97, 75, 0, 160, 300, null, null, "더는 어찌할 도리가 없어. 나는 그런 인간은 버릴 거야."],
|
||||
[0, "코노하", null, 0, null, 62, 58, 67, 0, 160, 300, null, null],
|
||||
[0, "코가사", "환상향/코가사.jpg", "성령", null, 79, 76, 56, 0, 160, 300, null, null, "됐어. 어차피 요괴는 이렇게 쓸쓸하게 사라져나가는 거니까."],
|
||||
[0, "케이네", "환상향/케이네.jpg", "영야", null, 77, 71, 104, 0, 160, 300, null, null, "여기엔 원래부터 아무것도 없었어, 인간도 인간의 마을도 말이야."],
|
||||
[0, "캇파5", null, 0, null, 40, 40, 65, 0, 160, 300, null, null],
|
||||
[0, "캇파4", null, 0, null, 40, 40, 64, 0, 160, 300, null, null],
|
||||
[0, "캇파3", null, 0, null, 40, 40, 63, 0, 160, 300, null, null],
|
||||
[0, "캇파2", null, 0, null, 40, 40, 62, 0, 160, 300, null, null],
|
||||
[0, "캇파1", null, 0, null, 40, 40, 61, 0, 160, 300, null, null],
|
||||
[0, "카스미", null, 0, null, 67, 63, 82, 0, 160, 300, null, null],
|
||||
[0, "카센", "환상향/카센.jpg", "외전", null, 72, 103, 71, 0, 160, 300, null, null, "이런 곳에서 전력을 다할 이유가없지."],
|
||||
[0, "카나코", "환상향/카나코.jpg", "풍신", null, 84, 97, 77, 0, 160, 300, null, null, "나를 부른 이는 누구인가?"],
|
||||
[0, "카나", "환상향/카나.jpg", "몽시", null, 64, 72, 57, 0, 160, 300, null, null, "아, 아니, 그러니까, 우주인?]"],
|
||||
[0, "카구야", "환상향/카구야.jpg", "영야", null, 98, 71, 82, 0, 160, 300, null, null, "내 영원을 다루는 술법으로 모두 깨뜨려 보이겠어."],
|
||||
[0, "카게로", "환상향/카게로.png", "휘침", null, 78, 88, 68, 0, 160, 300, null, null, "무서워~ 인간 무서워~"],
|
||||
[0, "치유리", "환상향/치유리.jpg", "몽시", null, 45, 77, 78, 0, 160, 300, null, null, "싸워서 강한 쪽이 이 세계의 치유리라구."],
|
||||
[0, "치르노", "환상향/치르노.jpg", 0, null, 79, 89, 49, 0, 160, 300, null, null, "눈앞에 강적이 있잖아?"],
|
||||
[0, "츠바메", null, 0, null, 71, 80, 58, 0, 160, 300, null, null],
|
||||
[0, "첸", "환상향/첸.jpg", "요요", null, 48, 70, 70, 0, 160, 300, null, null, "그건 그렇고, 마요이가에 어서와"],
|
||||
[0, "지벤", null, 0, null, 85, 67, 66, 0, 160, 300, null, null],
|
||||
[0, "지귀", null, 0, null, 79, 67, 69, 0, 160, 300, null, null],
|
||||
[0, "조온", null, "외전", null, 83, 74, 96, 0, 160, 300, null, null, "우리가 왜 최흉최악의 자매인지 그 몸으로 이해해라!"],
|
||||
[0, "자넷", null, 0, null, 60, 59, 62, 0, 160, 300, null, null],
|
||||
[0, "이포니아", null, 0, null, 61, 62, 61, 0, 160, 300, null, null],
|
||||
[0, "이쿠", "환상향/이쿠.jpg", "외전", null, 72, 72, 94, 0, 160, 300, null, null, "조금 벌을 받으실 필요가 있을지도 모르겠군요."],
|
||||
[0, "이치요우", null, 0, null, 70, 73, 58, 0, 160, 300, null, null],
|
||||
[0, "이치린", "환상향/이치린.jpg", "성령", null, 86, 55, 88, 0, 160, 300, null, null, "평화롭게 살고있으니까 괜찮잖아. 너, 요괴를 죽여도 아무렇지 않아?"],
|
||||
[0, "이슈아", null, 0, null, 67, 76, 78, 0, 160, 300, null, null],
|
||||
[0, "이나코", null, 0, null, 56, 35, 63, 0, 160, 300, null, null],
|
||||
[0, "유키", "환상향/유키.jpg", "괴기", null, 72, 77, 61, 0, 160, 300, null, null, "우리 둘을 쓰러뜨릴 수 있을 거라고 생각해?"],
|
||||
[0, "유카리", "환상향/유카리.jpg", "요요", null, 87, 76, 96, 0, 160, 300, null, null, "아름답고 잔혹하게 이 대지에서 사라져라!"],
|
||||
[0, "유카", "환상향/유카.jpg", "화영", null, 94, 88, 70, 0, 160, 300, null, null, "아 그래, 마침 60년 전이었네. 아아...... 그래, 벌써 그런 시기구나...... 60년인가. 회귀할 때구나."],
|
||||
[0, "유유코", "환상향/유유코.jpg", "요요", null, 97, 80, 81, 0, 160, 300, null, null, "새는 잔뼈가 많아서 싫어."],
|
||||
[0, "유메코", "환상향/유메코.jpg", "괴기", null, 72, 103, 73, 0, 160, 300, null, null, "우리들을 모욕한 죄는 죽음으로 밖에 갚을 수 없다!!"],
|
||||
[0, "유메미", "환상향/유메미.jpg", "몽시", null, 93, 72, 91, 0, 160, 300, null, null, "기합 넣어! 죽어 버렸다간 데리고 돌아갈 수 없으니까."],
|
||||
[0, "유기", "환상향/유기.jpg", "지령", null, 71, 104, 72, 0, 160, 300, null, null, "네가 강하기만 하다면 나야 아무 군소리도 안해. 어떤 목적으로 여기에 왔건 간에."],
|
||||
[0, "유겐마간", "환상향/유겐마간.jpg", "영이", null, 80, 80, 50, 0, 160, 300, null, null],
|
||||
[0, "우카", null, 0, null, 60, 73, 82, 0, 160, 300, null, null],
|
||||
[0, "우츠호", "환상향/우츠호.jpg", "지령", null, 73, 105, 68, 0, 160, 300, null, null, "이물질 발견! 핵융합로의 이물질 혼입은 일단 반응을 정지하고, 즉각 이물질을 제거하라."],
|
||||
[0, "요정5", null, 0, null, 55, 60, 35, 0, 160, 300, null, null],
|
||||
[0, "요정4", null, 0, null, 55, 59, 34, 0, 160, 300, null, null],
|
||||
[0, "요정3", null, 0, null, 55, 58, 33, 0, 160, 300, null, null],
|
||||
[0, "요정2", null, 0, null, 55, 57, 32, 0, 160, 300, null, null],
|
||||
[0, "요정1", null, 0, null, 55, 56, 31, 0, 160, 300, null, null],
|
||||
[0, "요우무", "환상향/요우무.jpg", "요요", null, 81, 89, 71, 0, 160, 300, null, null, "...요괴가 담금질한 이 누관검에, 벨 수 없는 것 따위, 별로 없어!"],
|
||||
[0, "요시카", "환상향/요시카.jpg", "신령", null, 84, 78, 61, 0, 160, 300, null, null, "오~지~마~!"],
|
||||
[0, "요리히메", "환상향/요리히메.jpg", "구문", null, 90, 98, 74, 0, 160, 300, null, null],
|
||||
[0, "와카챠나두", null, 0, null, 62, 61, 68, 0, 160, 300, null, null],
|
||||
[0, "와카사기", "환상향/와카사기.png", "휘침", null, 68, 57, 79, 0, 160, 300, null, null, "슬슬 우리요괴가 활약할 차례야!"],
|
||||
[0, "오토히메", null, 0, null, 80, 60, 76, 0, 160, 300, null, null],
|
||||
[0, "오키나", "환상향/오키나.png", "천공", null, 87, 87, 86, 0, 160, 300, null, null, "요괴가 아니라 신이에요~"],
|
||||
[0, "오모이카네", null, 0, null, 66, 52, 86, 0, 160, 300, null, null],
|
||||
[0, "오린", "환상향/오린.jpg", "지령", null, 87, 84, 77, 0, 160, 300, null, null, "시체가 갖고 싶으니까, 역시 내가 언니를 처리해야겠네!"],
|
||||
[0, "오렌지", "환상향/오렌지.jpg", "환상", null, 72, 52, 68, 0, 160, 300, null, null, "아하하, 1면 보스니까라고 얕보지 말라구!"],
|
||||
[0, "오니5", null, 0, null, 55, 65, 40, 0, 160, 300, null, null],
|
||||
[0, "오니4", null, 0, null, 54, 64, 40, 0, 160, 300, null, null],
|
||||
[0, "오니3", null, 0, null, 53, 63, 40, 0, 160, 300, null, null],
|
||||
[0, "오니2", null, 0, null, 52, 62, 40, 0, 160, 300, null, null],
|
||||
[0, "오니1", null, 0, null, 51, 61, 40, 0, 160, 300, null, null],
|
||||
[0, "엘핀민트", null, 0, null, 71, 71, 61, 0, 160, 300, null, null],
|
||||
[0, "엘리스", "환상향/엘리스.jpg", "영이", null, 55, 69, 88, 0, 160, 300, null, null],
|
||||
[0, "엘리", "환상향/엘리.jpg", "환상", null, 86, 83, 66, 0, 160, 300, null, null, "싸운 거 오랜만인걸 뭐."],
|
||||
[0, "엘렌", "환상향/엘렌.jpg", "몽시", null, 67, 62, 71, 0, 160, 300, null, null, "나는, 엘렌. 폭신폭신 엘렌이야."],
|
||||
[0, "에이린", "환상향/에이린.jpg", "영야", null, 72, 76, 105, 0, 160, 300, null, null, "아하하. 너희는 어리석구나."],
|
||||
[0, "야토", null, 0, null, 72, 83, 66, 0, 160, 300, null, null],
|
||||
[0, "야츠하시", "환상향/야츠하시.png", "휘침", null, 69, 58, 73, 0, 160, 300, null, null, "훗훗후, 반역자에겐 어떤 수단이든 써도 된다면서?"],
|
||||
[0, "야마메", "환상향/야마메.jpg", "지령", null, 75, 65, 77, 0, 160, 300, null, null, "지저에 떨어진 요괴의 힘을 보고 싶은 모양이구나."],
|
||||
[0, "앨리스", "환상향/앨리스.jpg", "요요", null, 81, 63, 99, 0, 160, 300, null, null, "그런 소리 하니까 바보 취급당하는 거야. 탄막은 브레인. 상식이야."],
|
||||
[0, "안자", null, 0, null, 67, 61, 83, 0, 160, 300, null, null],
|
||||
[0, "안", null, 0, null, 68, 51, 67, 0, 160, 300, null, null],
|
||||
[0, "아큐", "환상향/아큐.jpg", "구문", null, 72, 30, 82, 0, 160, 300, null, null, "나는 이래뵈도 히에다가의 당주로써 환상향의 서기라는 역할을 지닌 유서깊은 집안의 사람이야."],
|
||||
[0, "아즈마", null, 0, null, 78, 81, 64, 0, 160, 300, null, null],
|
||||
[0, "아운", "환상향/아운.png", "천공", null, 78, 87, 65, 0, 160, 300, null, null, "신사를 지키는 수호신으로서 말이야!"],
|
||||
[0, "아야", "환상향/아야.jpg", "화영", null, 73, 93, 71, 0, 160, 300, null, null, "깨끗하고 올바른 샤메이마루입니다."],
|
||||
[0, "아리오슈", null, 0, null, 56, 70, 67, 0, 160, 300, null, null],
|
||||
[0, "써니", "환상향/써니.jpg", "구문", null, 75, 75, 60, 0, 160, 300, null, null, "어라, 혼자서도 최강이라며?"],
|
||||
[0, "쌍자", null, 0, null, 63, 82, 71, 0, 160, 300, null, null],
|
||||
[0, "쌍사", null, 0, null, 62, 73, 81, 0, 160, 300, null, null],
|
||||
[0, "신키", "환상향/신키.jpg", "괴기", null, 96, 92, 73, 0, 160, 300, null, null, "나의 세계에서 저지른 죄값은 크지. 용서할 리가 없잖아."],
|
||||
[0, "신묘마루", "환상향/신묘마루.png", "휘침", null, 85, 68, 88, 0, 160, 300, null, null, "누─구?"],
|
||||
[0, "시키에이키", "환상향/시키에이키.jpg", "화영", null, 84, 77, 98, 0, 160, 300, null, null, "보랏빛 벚꽃은 죄 깊은 인간의 영혼이 깃드는 꽃. 너는 그 보랏빛 벚꽃이 떨어져내리는 밑에서, 단죄하거라!"],
|
||||
[0, "시키에이카", null, 0, null, 71, 60, 77, 0, 160, 300, null, null],
|
||||
[0, "시즈하", "환상향/시즈하.jpg", "풍신", null, 79, 55, 62, 0, 160, 300, null, null],
|
||||
[0, "시온", null, "외전", null, 80, 97, 76, 0, 160, 300, null, null, "나도 좋아서 가난하게 살고 있는 게 아닌데~"],
|
||||
[0, "스타", "환상향/스타.jpg", "구문", null, 70, 60, 75, 0, 160, 300, null, null, "그래, 이 비겁한 녀석아!"],
|
||||
[0, "스이카", "환상향/스이카.jpg", "외전", null, 74, 102, 66, 0, 160, 300, null, null, "거짓말은 인간만 하는 거야!"],
|
||||
[0, "스와코", "환상향/스와코.jpg", "풍신", null, 95, 81, 81, 0, 160, 300, null, null, "아~우~~"],
|
||||
[0, "스씨", null, 0, null, 66, 63, 66, 0, 160, 300, null, null],
|
||||
[0, "스미레코", "환상향/스미레코.jpg", "외전", null, 81, 63, 88, 0, 160, 300, null, null, "히가시후카미 고등학교 1학년, 우사미 스미레코. 우는 아이도 뚝 그치는 진짜 초능력자야."],
|
||||
[0, "순호", "환상향/순호.jpg", "감주", null, 77, 102, 79, 0, 160, 300, null, null, "지금의 너로썬 내 힘 앞에선 무력, 절대적으로 무력하도다!"],
|
||||
[0, "쇼", "환상향/쇼.jpg", "성령", null, 75, 75, 95, 0, 160, 300, null, null, "그것이 당신의 정의라는 거라면, 그것도 좋지요."],
|
||||
[0, "소악마", "환상향/소악마.jpg", "홍마", null, 50, 72, 67, 0, 160, 300, null, null],
|
||||
[0, "셰퍼드", null, 0, null, 61, 58, 56, 0, 160, 300, null, null],
|
||||
[0, "센고", null, 0, null, 83, 56, 79, 0, 160, 300, null, null],
|
||||
[0, "센", null, 0, null, 67, 66, 28, 0, 160, 300, null, null],
|
||||
[0, "세키반키", "환상향/세키반키.png", "휘침", null, 68, 75, 71, 0, 160, 300, null, null, "인간은 누구든지 나를 무서워하지!"],
|
||||
[0, "세츠조", null, 0, null, 58, 80, 58, 0, 160, 300, null, null],
|
||||
[0, "세이자", "환상향/세이자.png", "휘침", null, 82, 94, 69, 0, 160, 300, null, null, "내 이름은 세이자. 뼛속까지 아마노자쿠다!"],
|
||||
[0, "세이란", "환상향/세이란.jpg", "감주", null, 71, 77, 51, 0, 160, 300, null, null, "뭐, 이것도 일이야, 알지? 그러니 내게 여기서 얌전히 당해 줘. 응?"],
|
||||
[0, "샤리트", null, 0, null, 68, 62, 62, 0, 160, 300, null, null],
|
||||
[0, "상해인형", null, 0, null, 74, 69, 69, 0, 160, 300, null, null],
|
||||
[0, "상아", null, 0, null, 84, 84, 84, 0, 160, 300, null, null],
|
||||
[0, "사토리", "환상향/사토리.jpg", "지령", null, 81, 57, 84, 0, 160, 300, null, null, "제게는 보여요. 당신이 마음속에 그리고 있는 탄막이!"],
|
||||
[0, "사토노", "환상향/사토노.png", "천공", null, 71, 76, 77, 0, 160, 300, null, null, "봐 주진 않겠지만 죽으면 죽일꺼니까 말야―!"],
|
||||
[0, "사쿠야", "환상향/사쿠야.jpg", "홍마", null, 87, 89, 78, 0, 160, 300, null, null, "당신의 시간 또한 나의 것"],
|
||||
[0, "사샤", null, 0, null, 74, 48, 78, 0, 160, 300, null, null],
|
||||
[0, "사리엘", "환상향/사리엘.jpg", "영이", null, 85, 68, 102, 0, 160, 300, null, null, "죽는다면 모두 함께"],
|
||||
[0, "사라카", null, 0, null, 60, 74, 63, 0, 160, 300, null, null],
|
||||
[0, "사라", "환상향/사라.jpg", "괴기", null, 76, 78, 36, 0, 160, 300, null, null, "싸우는 건 재미있지만, 지는 건 재미없어."],
|
||||
[0, "사나에", "환상향/사나에.jpg", "풍신", null, 87, 71, 85, 0, 160, 300, null, null, "지금은, 바깥 세계는 환경을 지키라든가 경기 대책이 어떻다든가, 바보 같이 뭘 위해 태어난 건지 생각할 수 없는 사람 뿐."],
|
||||
[0, "사구메", "환상향/사구메.jpg", "감주", null, 84, 97, 71, 0, 160, 300, null, null, "......그런건 아냐."],
|
||||
[0, "벤벤", "환상향/벤벤.png", "휘침", null, 69, 59, 75, 0, 160, 300, null, null, "어딜 봐도 츠쿠모가미잖아."],
|
||||
[0, "뱌쿠렌", "환상향/뱌쿠렌.jpg", "성령", null, 83, 90, 82, 0, 160, 300, null, null, "아아, 법의 세계에 빛이 가득해."],
|
||||
[0, "미호", null, 0, null, 85, 86, 62, 0, 160, 300, null, null],
|
||||
[0, "미하나", null, 0, null, 76, 67, 84, 0, 160, 300, null, null],
|
||||
[0, "미토리", null, 0, null, 57, 56, 62, 0, 160, 300, null, null],
|
||||
[0, "미코토", null, 0, null, 73, 82, 82, 0, 160, 300, null, null],
|
||||
[0, "미코", "환상향/미코.png", "신령", null, 87, 72, 97, 0, 160, 300, null, null, "장난은 끝이다!"],
|
||||
[0, "미요", null, 0, null, 73, 66, 58, 0, 160, 300, null, null],
|
||||
[0, "미스티아", "환상향/미스티아.jpg", "영야", null, 65, 82, 12, 0, 160, 300, null, null, "자, 잠깐 기다려~!"],
|
||||
[0, "미셸", null, 0, null, 70, 69, 72, 0, 160, 300, null, null],
|
||||
[0, "미샨드라", null, 0, null, 80, 63, 82, 0, 160, 300, null, null],
|
||||
[0, "미샤구지", null, "풍신", null, 48, 99, 59, 0, 160, 300, null, null],
|
||||
[0, "미마", "환상향/미마.jpg", "봉마", null, 75, 90, 93, 0, 160, 300, null, null, "나도 인간계의 신이야. (거짓말)"],
|
||||
[0, "미노리코", "환상향/미노리코.jpg", "풍신", null, 71, 58, 74, 0, 160, 300, null, null, "갓 수확한 고구마는 나의 향수. 무녀가 먹게 놔둘 줄 알고!"],
|
||||
[0, "미나유", null, 0, null, 72, 49, 84, 0, 160, 300, null, null],
|
||||
[0, "무무무", null, 0, null, 70, 77, 57, 0, 160, 300, null, null],
|
||||
[0, "무라사", "환상향/무라사.jpg", "성령", null, 76, 82, 65, 0, 160, 300, null, null, "이 세상에 미련이 남으신 분은 승선할 수 없습니다만 당신은 어떠신가요?"],
|
||||
[0, "무게츠", "환상향/무게츠.jpg", "환상", null, 76, 95, 68, 0, 160, 300, null, null, "난 무게츠. 그리고, 여긴 나의 세계."],
|
||||
[0, "묘렌", null, 0, null, 77, 78, 79, 0, 160, 300, null, null],
|
||||
[0, "모코우", "환상향/모코우.jpg", "영야", null, 83, 99, 69, 0, 160, 300, null, null, "너희들도 한번 영원의 고륜을 고민해 보는 게 좋아!"],
|
||||
[0, "모미지", "환상향/모미지.jpg", "풍신", null, 83, 68, 66, 0, 160, 300, null, null, "높은 분들은 저희 일반 텐구보다 훨씬 강하니까, 경비 같은 건 전혀 필요하지 않을 것 같은데."],
|
||||
[0, "모모히메", null, 0, null, 75, 68, 72, 0, 160, 300, null, null],
|
||||
[0, "모모", null, 0, null, 62, 62, 71, 0, 160, 300, null, null],
|
||||
[0, "메이즈", null, 0, null, 70, 40, 76, 0, 160, 300, null, null],
|
||||
[0, "메이벨", null, 0, null, 71, 74, 56, 0, 160, 300, null, null],
|
||||
[0, "메이라", "환상향/메이라.jpg", "봉마", null, 65, 82, 36, 0, 160, 300, null, null, "내가 이기면 하쿠레이의 힘은 내가 가져가겠어!"],
|
||||
[0, "메를린", "환상향/메를린.jpg", "화영", null, 73, 67, 70, 0, 160, 300, null, null, "내 연주를 듣고서, 무사했던 식량은 없지."],
|
||||
[0, "메디슨", "환상향/메디슨.jpg", "화영", null, 73, 58, 71, 0, 160, 300, null, null, "콘파로, 콘파로, 독이여 모여라~"],
|
||||
[0, "메구미", null, 0, null, 83, 77, 74, 0, 160, 300, null, null],
|
||||
[0, "마이", "환상향/마이.jpg", "괴기", null, 72, 60, 75, 0, 160, 300, null, null, "내가 안내할게..."],
|
||||
[0, "마을사람5", null, 0, null, 65, 35, 50, 0, 160, 300, null, null],
|
||||
[0, "마을사람4", null, 0, null, 64, 34, 50, 0, 160, 300, null, null],
|
||||
[0, "마을사람3", null, 0, null, 63, 33, 50, 0, 160, 300, null, null],
|
||||
[0, "마을사람2", null, 0, null, 62, 32, 50, 0, 160, 300, null, null],
|
||||
[0, "마을사람1", null, 0, null, 61, 31, 50, 0, 160, 300, null, null],
|
||||
[0, "마미조", "환상향/마미조.png", "신령", null, 77, 77, 97, 0, 160, 300, null, null, "뭔가 고민이 있는 모양이구먼. 야그나 함 들어 보자."],
|
||||
[0, "마리우스", null, 0, null, 67, 87, 66, 0, 160, 300, null, null],
|
||||
[0, "마리사", "환상향/마리사.jpg", 0, null, 83, 91, 78, 0, 160, 300, null, null, "아~? 탄막에 두뇌? 바보 아냐? 탄막은 파워야."],
|
||||
[0, "마나", null, 0, null, 73, 75, 72, 0, 160, 300, null, null],
|
||||
[0, "링고", "환상향/링고.jpg", "감주", null, 54, 76, 71, 0, 160, 300, null, null, "옛날의 극락정토는 이제 보이는 그림자도 없다고 생각해."],
|
||||
[0, "릴리", "환상향/릴리.jpg", "요요", null, 37, 63, 68, 0, 160, 300, null, null, "봄이에요~"],
|
||||
[0, "린네", null, 0, null, 83, 66, 83, 0, 160, 300, null, null],
|
||||
[0, "리코", null, 0, null, 68, 60, 76, 0, 160, 300, null, null],
|
||||
[0, "리카코", "환상향/리카코.jpg", "몽시", null, 76, 71, 100, 0, 160, 300, null, null, "왜 마법 따위에 흥미를 가지기나 하지?"],
|
||||
[0, "리카", "환상향/리카.jpg", "봉마", null, 61, 63, 75, 0, 160, 300, null, null, "가는 거예요!!"],
|
||||
[0, "리리카", "환상향/리리카.jpg", "화영", null, 57, 66, 83, 0, 160, 300, null, null, "당신은 노래를 부르지. 난 손을 쓰지 않고 연주를 해. 장기전으로 가면 내 쪽이 세다고?"],
|
||||
[0, "리락", null, 0, null, 74, 54, 62, 0, 160, 300, null, null],
|
||||
[0, "리글", "환상향/리글.jpg", "영야", null, 85, 64, 51, 0, 160, 300, null, null, "달이 보이는 밤에는, 즐기지 않아선 안 되는 거 아닐까."],
|
||||
[0, "루이즈", "환상향/루이즈.jpg", "괴기", null, 59, 57, 72, 0, 160, 300, null, null, "뭐, 마계는 좋은 곳이니, 느긋하게 관광이라도 하도록 해☆"],
|
||||
[0, "루미아", "환상향/루미아.jpg", "홍마", null, 79, 70, 56, 0, 160, 300, null, null, "그런 건가~"],
|
||||
[0, "루리", null, 0, null, 66, 66, 62, 0, 160, 300, null, null],
|
||||
[0, "루나사", "환상향/루나사.jpg", "화영", null, 76, 77, 50, 0, 160, 300, null, null, "넌 슬픈 처지에서 태어난 경우야. 들떠있을 때가 아니지."],
|
||||
[0, "루나", "환상향/루나.jpg", "구문", null, 67, 74, 74, 0, 160, 300, null, null, "빨라고? 네녀석이 빨아라!"],
|
||||
[0, "레티", "환상향/레티.jpg", "요요", null, 60, 79, 49, 0, 160, 300, null, null, "흑막~"],
|
||||
[0, "레이센", "환상향/레이센.jpg", "영야", null, 79, 78, 89, 0, 160, 300, null, null, "이 앞에 기다리고 있는 게 악몽이라 해도, 그래도 나는 가야만 해."],
|
||||
[0, "레이무", "환상향/레이무.jpg", 0, null, 90, 83, 82, 0, 160, 300, null, null, "인간을 쉽사리 죽게 내버려 둘까 보냐!"],
|
||||
[0, "레이라", null, 0, null, 66, 67, 51, 0, 160, 300, null, null],
|
||||
[0, "레밀리아", "환상향/레밀리아.jpg", "홍마", null, 93, 94, 70, 0, 160, 300, null, null, "당신은 이제껏 먹어 온 빵이 몇 개인지 알고 있어?"],
|
||||
[0, "런던인형", null, 0, null, 64, 78, 62, 0, 160, 300, null, null],
|
||||
[0, "란", "환상향/란.jpg", "요요", null, 71, 79, 101, 0, 160, 300, null, null, "흠. 첸을 괴롭힌건 너지?"],
|
||||
[0, "라쿠", null, 0, null, 71, 52, 69, 0, 160, 300, null, null],
|
||||
[0, "라이코", "환상향/라이코.png", "휘침", null, 80, 66, 91, 0, 160, 300, null, null, "누구라도 자기 목숨을 부지하고 싶으면 노력을 아끼지 않잖아?"],
|
||||
[0, "라바", "환상향/라바.png", "천공", null, 69, 74, 54, 0, 160, 300, null, null, "지금이라면 신세계의 신이라도 될 것 같은 기분이야!"],
|
||||
[0, "도레미", "환상향/도레미.jpg", "감주", null, 67, 63, 88, 0, 160, 300, null, null, "맨몸!? 혹시 맨몸!?"],
|
||||
[0, "대요정", "환상향/대요정.jpg", "홍마", null, 60, 56, 79, 0, 160, 300, null, null],
|
||||
[0, "달토끼5", null, 0, null, 35, 55, 55, 0, 160, 300, null, null],
|
||||
[0, "달토끼4", null, 0, null, 34, 54, 55, 0, 160, 300, null, null],
|
||||
[0, "달토끼3", null, 0, null, 33, 53, 55, 0, 160, 300, null, null],
|
||||
[0, "달토끼2", null, 0, null, 32, 52, 55, 0, 160, 300, null, null],
|
||||
[0, "달토끼1", null, 0, null, 31, 51, 55, 0, 160, 300, null, null],
|
||||
[0, "니토리", "환상향/니토리.jpg", "풍신", null, 68, 68, 76, 0, 160, 300, null, null, "축제 땐 생선이 잘 팔리지. 인간에게 어업권을 뺏어서 독점하면 떼돈 벌겠네!"],
|
||||
[0, "노바", null, 0, null, 74, 56, 82, 0, 160, 300, null, null],
|
||||
[0, "노로이코", "환상향/노로이코.jpg", "봉마", null, 56, 61, 65, 0, 160, 300, null, null],
|
||||
[0, "네즈", null, 0, null, 76, 71, 40, 0, 160, 300, null, null],
|
||||
[0, "네무노", "환상향/네무노.png", "천공", null, 78, 40, 67, 0, 160, 300, null, null, "자자, 차라도 마시고 가라."],
|
||||
[0, "나즈린", "환상향/나즈린.jpg", "성령", null, 76, 63, 64, 0, 160, 300, null, null, "미안한데, 쥐를 얕보다간 죽어."],
|
||||
[0, "나루코", null, 0, null, 68, 40, 70, 0, 160, 300, null, null],
|
||||
[0, "나루미", "환상향/나루미.png", "천공", null, 84, 72, 78, 0, 160, 300, null, null, "에? 뭐야 그거 무서워"],
|
||||
[0, "구유카", "환상향/구유카.jpg", "환상", null, 84, 85, 85, 0, 160, 300, null, null, "신이라 해도, 힘이야말로 전부야!"],
|
||||
[0, "구앨리스", "환상향/구앨리스.jpg", "괴기", null, 80, 80, 90, 0, 160, 300, null, null, "궁극의 마법으로 널 해치워 주겠어!!"],
|
||||
[0, "구마리사", "환상향/구마리사.jpg", "봉마", null, 80, 90, 80, 0, 160, 300, null, null, "오케이~, 여기는 마리사에게 맡겨줘."],
|
||||
[0, "구레이무", "환상향/구레이무.jpg", "영이", null, 90, 80, 80, 0, 160, 300, null, null, "문답무용이야!!"],
|
||||
[0, "곽청아", "환상향/곽청아.png", "신령", null, 72, 77, 87, 0, 160, 300, null, null, "네~ 썩어서 귀엽죠?"],
|
||||
[0, "골리앗", null, 0, null, 72, 78, 58, 0, 160, 300, null, null],
|
||||
[0, "겐지", null, "봉마", null, 70, 70, 70, 0, 160, 300, null, null],
|
||||
[0, "겐게츠", "환상향/겐게츠.jpg", "환상", null, 83, 70, 94, 0, 160, 300, null, null, "얕보지 마. 우린, 둘이서 한 사람 몫이니까.…"],
|
||||
[0, "강림", null, 0, null, 84, 76, 57, 0, 160, 300, null, null]
|
||||
[0,"히카리코",null,"환상",null,56,66,21,0,160,300,null,null],
|
||||
[0,"히메미코",null,0,null,68,78,65,0,160,300,null,null],
|
||||
[0,"히나",null,"풍신",null,66,63,83,0,160,300,null,null,"온갖 재액이 닥쳐올 거야. 인간을 지키기 위해서라도 절대 보내주지 않겠어!"],
|
||||
[0,"후토",null,"신령",null,84,69,93,0,160,300,null,null,"불이라도 지를까."],
|
||||
[0,"홍미령",null,"홍마",null,85,79,63,0,160,300,null,null,"젠장, 배수진이다!"],
|
||||
[0,"호쥬누에",null,"성령",null,85,95,72,0,160,300,null,null,"자아, 나의 정체를 알아버린 당신을 죽여버리고, 정체불명으로 돌아가야겠어."],
|
||||
[0,"호라이인형",null,0,null,66,71,73,0,160,300,null,null],
|
||||
[0,"헤카티아",null,"감주",null,85,84,94,0,160,300,null,null,"꿈의 세계에선 무방비하니까 간단한 일이었지."],
|
||||
[0,"하타테",null,"외전",null,30,88,70,0,160,300,null,null,"둘이서 더블스포일러가 되어서, 최강을 노리는 거야!"],
|
||||
[0,"하츠나",null,0,null,63,61,65,0,160,300,null,null],
|
||||
[0,"하니에",null,0,null,57,66,63,0,160,300,null,null],
|
||||
[0,"플랑드르",null,"홍마",null,76,101,71,0,160,300,null,null,"쿠욱하고 콰광~이네"],
|
||||
[0,"프랑스인형",null,0,null,68,68,75,0,160,300,null,null],
|
||||
[0,"파츄리",null,"홍마",null,81,52,103,0,160,300,null,null,"무큐-"],
|
||||
[0,"파스칼",null,0,null,73,70,60,0,160,300,null,null],
|
||||
[0,"파브리티스",null,0,null,61,61,62,0,160,300,null,null],
|
||||
[0,"파르시",null,"지령",null,67,49,89,0,160,300,null,null,"너한테 원한은 없다만, 내가 널 공격하는 이유는 얼마든지 만들 수 있어."],
|
||||
[0,"토키코",null,"구문",null,60,59,88,0,160,300,null,null],
|
||||
[0,"토쿠비",null,0,null,77,77,72,0,160,300,null,null],
|
||||
[0,"토지코",null,"신령",null,76,62,86,0,160,300,null,null,"아이고 이런. 또 하나요?"],
|
||||
[0,"토요히메",null,"구문",null,96,69,95,0,160,300,null,null],
|
||||
[0,"토비코",null,0,null,72,58,56,0,160,300,null,null],
|
||||
[0,"텐시",null,"외전",null,81,89,71,0,160,300,null,null,"약해! 약해 빠졌어! 그따위로 하늘에 오를 수 있을 거라 꿈도 꾸지 마!"],
|
||||
[0,"텐무",null,0,null,68,73,56,0,160,300,null,null],
|
||||
[0,"텐구5",null,0,null,51,51,50,0,160,300,null,null],
|
||||
[0,"텐구4",null,0,null,51,51,50,0,160,300,null,null],
|
||||
[0,"텐구3",null,0,null,51,51,50,0,160,300,null,null],
|
||||
[0,"텐구2",null,0,null,51,51,50,0,160,300,null,null],
|
||||
[0,"텐구1",null,0,null,51,51,50,0,160,300,null,null],
|
||||
[0,"테이레이다",null,"천공",null,78,75,53,0,160,300,null,null,"갑작스럽겠지만, 테스트를 시작하겠어!]"],
|
||||
[0,"테위",null,"영야",null,82,32,79,0,160,300,null,null,"대숲은 사람을 헤매게 하는 대나무의 미로. 헤매는 것은 산사람다운 행위인 거야."],
|
||||
[0,"키쿠리",null,"영이",null,56,72,76,0,160,300,null,null],
|
||||
[0,"키요히메",null,0,null,66,76,76,0,160,300,null,null],
|
||||
[0,"키스메",null,"지령",null,73,58,59,0,160,300,null,null,"너희가 떨어뜨린 시체는 이거냐?"],
|
||||
[0,"키나코",null,0,null,63,68,67,0,160,300,null,null],
|
||||
[0,"클라운피스",null,"감주",null,89,80,77,0,160,300,null,null,"잇츠, 루나틱 타임! 광기의 세계로 어서오세요!"],
|
||||
[0,"쿠스코",null,0,null,70,57,53,0,160,300,null,null],
|
||||
[0,"쿠루미",null,"환상",null,70,65,68,0,160,300,null,null,"나는 쿠루미. 이 호수의 문지기야."],
|
||||
[0,"쿄코",null,"신령",null,37,57,80,0,160,300,null,null,"목소리가 작다!"],
|
||||
[0,"콘가라",null,"영이",null,91,96,60,0,160,300,null,null],
|
||||
[0,"코토히메",null,"몽시",null,54,36,90,0,160,300,null,null,"충격의 새로운 사실! 고대인은 전기를 쓰고 있었다!"],
|
||||
[0,"코코로",null,"외전",null,80,91,60,0,160,300,null,null,"나와 최강의 칭호를 걸고 싸우자!"],
|
||||
[0,"코카이",null,0,null,67,78,61,0,160,300,null,null],
|
||||
[0,"코이시",null,"지령",null,88,71,93,0,160,300,null,null,"네 시체는 지령전 입구에 장식해줄게!"],
|
||||
[0,"코스즈",null,"구문",null,61,63,70,0,160,300,null,null,"요괴가 하는 말을 믿으시는 거예요?!"],
|
||||
[0,"코마치",null,"화영",null,80,97,75,0,160,300,null,null,"더는 어찌할 도리가 없어. 나는 그런 인간은 버릴 거야."],
|
||||
[0,"코노하",null,0,null,62,58,67,0,160,300,null,null],
|
||||
[0,"코가사",null,"성령",null,79,76,56,0,160,300,null,null,"됐어. 어차피 요괴는 이렇게 쓸쓸하게 사라져나가는 거니까."],
|
||||
[0,"케이네",null,"영야",null,77,71,104,0,160,300,null,null,"여기엔 원래부터 아무것도 없었어, 인간도 인간의 마을도 말이야."],
|
||||
[0,"캇파5",null,0,null,40,40,65,0,160,300,null,null],
|
||||
[0,"캇파4",null,0,null,40,40,64,0,160,300,null,null],
|
||||
[0,"캇파3",null,0,null,40,40,63,0,160,300,null,null],
|
||||
[0,"캇파2",null,0,null,40,40,62,0,160,300,null,null],
|
||||
[0,"캇파1",null,0,null,40,40,61,0,160,300,null,null],
|
||||
[0,"카스미",null,0,null,67,63,82,0,160,300,null,null],
|
||||
[0,"카센",null,"외전",null,72,103,71,0,160,300,null,null,"이런 곳에서 전력을 다할 이유가없지."],
|
||||
[0,"카나코",null,"풍신",null,84,97,77,0,160,300,null,null,"나를 부른 이는 누구인가?"],
|
||||
[0,"카나",null,"몽시",null,64,72,57,0,160,300,null,null,"아, 아니, 그러니까, 우주인?]"],
|
||||
[0,"카구야",null,"영야",null,98,71,82,0,160,300,null,null,"내 영원을 다루는 술법으로 모두 깨뜨려 보이겠어."],
|
||||
[0,"카게로",null,"휘침",null,78,88,68,0,160,300,null,null,"무서워~ 인간 무서워~"],
|
||||
[0,"치유리",null,"몽시",null,45,77,78,0,160,300,null,null,"싸워서 강한 쪽이 이 세계의 치유리라구."],
|
||||
[0,"치르노",null,0,null,79,89,49,0,160,300,null,null,"눈앞에 강적이 있잖아?"],
|
||||
[0,"츠바메",null,0,null,71,80,58,0,160,300,null,null],
|
||||
[0,"첸",null,"요요",null,48,70,70,0,160,300,null,null,"그건 그렇고, 마요이가에 어서와"],
|
||||
[0,"지벤",null,0,null,85,67,66,0,160,300,null,null],
|
||||
[0,"지귀",null,0,null,79,67,69,0,160,300,null,null],
|
||||
[0,"조온",null,"외전",null,83,74,96,0,160,300,null,null,"우리가 왜 최흉최악의 자매인지 그 몸으로 이해해라!"],
|
||||
[0,"자넷",null,0,null,60,59,62,0,160,300,null,null],
|
||||
[0,"이포니아",null,0,null,61,62,61,0,160,300,null,null],
|
||||
[0,"이쿠",null,"외전",null,72,72,94,0,160,300,null,null,"조금 벌을 받으실 필요가 있을지도 모르겠군요."],
|
||||
[0,"이치요우",null,0,null,70,73,58,0,160,300,null,null],
|
||||
[0,"이치린",null,"성령",null,86,55,88,0,160,300,null,null,"평화롭게 살고있으니까 괜찮잖아. 너, 요괴를 죽여도 아무렇지 않아?"],
|
||||
[0,"이슈아",null,0,null,67,76,78,0,160,300,null,null],
|
||||
[0,"이나코",null,0,null,56,35,63,0,160,300,null,null],
|
||||
[0,"유키",null,"괴기",null,72,77,61,0,160,300,null,null,"우리 둘을 쓰러뜨릴 수 있을 거라고 생각해?"],
|
||||
[0,"유카리",null,"요요",null,87,76,96,0,160,300,null,null,"아름답고 잔혹하게 이 대지에서 사라져라!"],
|
||||
[0,"유카",null,"화영",null,94,88,70,0,160,300,null,null,"아 그래, 마침 60년 전이었네. 아아...... 그래, 벌써 그런 시기구나...... 60년인가. 회귀할 때구나."],
|
||||
[0,"유유코",null,"요요",null,97,80,81,0,160,300,null,null,"새는 잔뼈가 많아서 싫어."],
|
||||
[0,"유메코",null,"괴기",null,72,103,73,0,160,300,null,null,"우리들을 모욕한 죄는 죽음으로 밖에 갚을 수 없다!!"],
|
||||
[0,"유메미",null,"몽시",null,93,72,91,0,160,300,null,null,"기합 넣어! 죽어 버렸다간 데리고 돌아갈 수 없으니까."],
|
||||
[0,"유기",null,"지령",null,71,104,72,0,160,300,null,null,"네가 강하기만 하다면 나야 아무 군소리도 안해. 어떤 목적으로 여기에 왔건 간에."],
|
||||
[0,"유겐마간",null,"영이",null,80,80,50,0,160,300,null,null],
|
||||
[0,"우카",null,0,null,60,73,82,0,160,300,null,null],
|
||||
[0,"우츠호",null,"지령",null,73,105,68,0,160,300,null,null,"이물질 발견! 핵융합로의 이물질 혼입은 일단 반응을 정지하고, 즉각 이물질을 제거하라."],
|
||||
[0,"요정5",null,0,null,55,60,35,0,160,300,null,null],
|
||||
[0,"요정4",null,0,null,55,59,34,0,160,300,null,null],
|
||||
[0,"요정3",null,0,null,55,58,33,0,160,300,null,null],
|
||||
[0,"요정2",null,0,null,55,57,32,0,160,300,null,null],
|
||||
[0,"요정1",null,0,null,55,56,31,0,160,300,null,null],
|
||||
[0,"요우무",null,"요요",null,81,89,71,0,160,300,null,null,"...요괴가 담금질한 이 누관검에, 벨 수 없는 것 따위, 별로 없어!"],
|
||||
[0,"요시카",null,"신령",null,84,78,61,0,160,300,null,null,"오~지~마~!"],
|
||||
[0,"요리히메",null,"구문",null,90,98,74,0,160,300,null,null],
|
||||
[0,"와카챠나두",null,0,null,62,61,68,0,160,300,null,null],
|
||||
[0,"와카사기",null,"휘침",null,68,57,79,0,160,300,null,null,"슬슬 우리요괴가 활약할 차례야!"],
|
||||
[0,"오토히메",null,0,null,80,60,76,0,160,300,null,null],
|
||||
[0,"오키나",null,"천공",null,87,87,86,0,160,300,null,null,"요괴가 아니라 신이에요~"],
|
||||
[0,"오모이카네",null,0,null,66,52,86,0,160,300,null,null],
|
||||
[0,"오린",null,"지령",null,87,84,77,0,160,300,null,null,"시체가 갖고 싶으니까, 역시 내가 언니를 처리해야겠네!"],
|
||||
[0,"오렌지",null,"환상",null,72,52,68,0,160,300,null,null,"아하하, 1면 보스니까라고 얕보지 말라구!"],
|
||||
[0,"오니5",null,0,null,55,65,40,0,160,300,null,null],
|
||||
[0,"오니4",null,0,null,54,64,40,0,160,300,null,null],
|
||||
[0,"오니3",null,0,null,53,63,40,0,160,300,null,null],
|
||||
[0,"오니2",null,0,null,52,62,40,0,160,300,null,null],
|
||||
[0,"오니1",null,0,null,51,61,40,0,160,300,null,null],
|
||||
[0,"엘핀민트",null,0,null,71,71,61,0,160,300,null,null],
|
||||
[0,"엘리스",null,"영이",null,55,69,88,0,160,300,null,null],
|
||||
[0,"엘리",null,"환상",null,86,83,66,0,160,300,null,null,"싸운 거 오랜만인걸 뭐."],
|
||||
[0,"엘렌",null,"몽시",null,67,62,71,0,160,300,null,null,"나는, 엘렌. 폭신폭신 엘렌이야."],
|
||||
[0,"에이린",null,"영야",null,72,76,105,0,160,300,null,null,"아하하. 너희는 어리석구나."],
|
||||
[0,"야토",null,0,null,72,83,66,0,160,300,null,null],
|
||||
[0,"야츠하시",null,"휘침",null,69,58,73,0,160,300,null,null,"훗훗후, 반역자에겐 어떤 수단이든 써도 된다면서?"],
|
||||
[0,"야마메",null,"지령",null,75,65,77,0,160,300,null,null,"지저에 떨어진 요괴의 힘을 보고 싶은 모양이구나."],
|
||||
[0,"앨리스",null,"요요",null,81,63,99,0,160,300,null,null,"그런 소리 하니까 바보 취급당하는 거야. 탄막은 브레인. 상식이야."],
|
||||
[0,"안자",null,0,null,67,61,83,0,160,300,null,null],
|
||||
[0,"안",null,0,null,68,51,67,0,160,300,null,null],
|
||||
[0,"아큐",null,"구문",null,72,30,82,0,160,300,null,null,"나는 이래뵈도 히에다가의 당주로써 환상향의 서기라는 역할을 지닌 유서깊은 집안의 사람이야."],
|
||||
[0,"아즈마",null,0,null,78,81,64,0,160,300,null,null],
|
||||
[0,"아운",null,"천공",null,78,87,65,0,160,300,null,null,"신사를 지키는 수호신으로서 말이야!"],
|
||||
[0,"아야",null,"화영",null,73,93,71,0,160,300,null,null,"깨끗하고 올바른 샤메이마루입니다."],
|
||||
[0,"아리오슈",null,0,null,56,70,67,0,160,300,null,null],
|
||||
[0,"써니",null,"구문",null,75,75,60,0,160,300,null,null,"어라, 혼자서도 최강이라며?"],
|
||||
[0,"쌍자",null,0,null,63,82,71,0,160,300,null,null],
|
||||
[0,"쌍사",null,0,null,62,73,81,0,160,300,null,null],
|
||||
[0,"신키",null,"괴기",null,96,92,73,0,160,300,null,null,"나의 세계에서 저지른 죄값은 크지. 용서할 리가 없잖아."],
|
||||
[0,"신묘마루",null,"휘침",null,85,68,88,0,160,300,null,null,"누─구?"],
|
||||
[0,"시키에이키",null,"화영",null,84,77,98,0,160,300,null,null,"보랏빛 벚꽃은 죄 깊은 인간의 영혼이 깃드는 꽃. 너는 그 보랏빛 벚꽃이 떨어져내리는 밑에서, 단죄하거라!"],
|
||||
[0,"시키에이카",null,0,null,71,60,77,0,160,300,null,null],
|
||||
[0,"시즈하",null,"풍신",null,79,55,62,0,160,300,null,null],
|
||||
[0,"시온",null,"외전",null,80,97,76,0,160,300,null,null,"나도 좋아서 가난하게 살고 있는 게 아닌데~"],
|
||||
[0,"스타",null,"구문",null,70,60,75,0,160,300,null,null,"그래, 이 비겁한 녀석아!"],
|
||||
[0,"스이카",null,"외전",null,74,102,66,0,160,300,null,null,"거짓말은 인간만 하는 거야!"],
|
||||
[0,"스와코",null,"풍신",null,95,81,81,0,160,300,null,null,"아~우~~"],
|
||||
[0,"스씨",null,0,null,66,63,66,0,160,300,null,null],
|
||||
[0,"스미레코",null,"외전",null,81,63,88,0,160,300,null,null,"히가시후카미 고등학교 1학년, 우사미 스미레코. 우는 아이도 뚝 그치는 진짜 초능력자야."],
|
||||
[0,"순호",null,"감주",null,77,102,79,0,160,300,null,null,"지금의 너로썬 내 힘 앞에선 무력, 절대적으로 무력하도다!"],
|
||||
[0,"쇼",null,"성령",null,75,75,95,0,160,300,null,null,"그것이 당신의 정의라는 거라면, 그것도 좋지요."],
|
||||
[0,"소악마",null,"홍마",null,50,72,67,0,160,300,null,null],
|
||||
[0,"셰퍼드",null,0,null,61,58,56,0,160,300,null,null],
|
||||
[0,"센고",null,0,null,83,56,79,0,160,300,null,null],
|
||||
[0,"센",null,0,null,67,66,28,0,160,300,null,null],
|
||||
[0,"세키반키",null,"휘침",null,68,75,71,0,160,300,null,null,"인간은 누구든지 나를 무서워하지!"],
|
||||
[0,"세츠조",null,0,null,58,80,58,0,160,300,null,null],
|
||||
[0,"세이자",null,"휘침",null,82,94,69,0,160,300,null,null,"내 이름은 세이자. 뼛속까지 아마노자쿠다!"],
|
||||
[0,"세이란",null,"감주",null,71,77,51,0,160,300,null,null,"뭐, 이것도 일이야, 알지? 그러니 내게 여기서 얌전히 당해 줘. 응?"],
|
||||
[0,"샤리트",null,0,null,68,62,62,0,160,300,null,null],
|
||||
[0,"상해인형",null,0,null,74,69,69,0,160,300,null,null],
|
||||
[0,"상아",null,0,null,84,84,84,0,160,300,null,null],
|
||||
[0,"사토리",null,"지령",null,81,57,84,0,160,300,null,null,"제게는 보여요. 당신이 마음속에 그리고 있는 탄막이!"],
|
||||
[0,"사토노",null,"천공",null,71,76,77,0,160,300,null,null,"봐 주진 않겠지만 죽으면 죽일꺼니까 말야―!"],
|
||||
[0,"사쿠야",null,"홍마",null,87,89,78,0,160,300,null,null,"당신의 시간 또한 나의 것"],
|
||||
[0,"사샤",null,0,null,74,48,78,0,160,300,null,null],
|
||||
[0,"사리엘",null,"영이",null,85,68,102,0,160,300,null,null,"죽는다면 모두 함께"],
|
||||
[0,"사라카",null,0,null,60,74,63,0,160,300,null,null],
|
||||
[0,"사라",null,"괴기",null,76,78,36,0,160,300,null,null,"싸우는 건 재미있지만, 지는 건 재미없어."],
|
||||
[0,"사나에",null,"풍신",null,87,71,85,0,160,300,null,null,"지금은, 바깥 세계는 환경을 지키라든가 경기 대책이 어떻다든가, 바보 같이 뭘 위해 태어난 건지 생각할 수 없는 사람 뿐."],
|
||||
[0,"사구메",null,"감주",null,84,97,71,0,160,300,null,null,"......그런건 아냐."],
|
||||
[0,"벤벤",null,"휘침",null,69,59,75,0,160,300,null,null,"어딜 봐도 츠쿠모가미잖아."],
|
||||
[0,"뱌쿠렌",null,"성령",null,83,90,82,0,160,300,null,null,"아아, 법의 세계에 빛이 가득해."],
|
||||
[0,"미호",null,0,null,85,86,62,0,160,300,null,null],
|
||||
[0,"미하나",null,0,null,76,67,84,0,160,300,null,null],
|
||||
[0,"미토리",null,0,null,57,56,62,0,160,300,null,null],
|
||||
[0,"미코토",null,0,null,73,82,82,0,160,300,null,null],
|
||||
[0,"미코",null,"신령",null,87,72,97,0,160,300,null,null,"장난은 끝이다!"],
|
||||
[0,"미요",null,0,null,73,66,58,0,160,300,null,null],
|
||||
[0,"미스티아",null,"영야",null,65,82,12,0,160,300,null,null,"자, 잠깐 기다려~!"],
|
||||
[0,"미셸",null,0,null,70,69,72,0,160,300,null,null],
|
||||
[0,"미샨드라",null,0,null,80,63,82,0,160,300,null,null],
|
||||
[0,"미샤구지",null,"풍신",null,48,99,59,0,160,300,null,null],
|
||||
[0,"미마",null,"봉마",null,75,90,93,0,160,300,null,null,"나도 인간계의 신이야. (거짓말)"],
|
||||
[0,"미노리코",null,"풍신",null,71,58,74,0,160,300,null,null,"갓 수확한 고구마는 나의 향수. 무녀가 먹게 놔둘 줄 알고!"],
|
||||
[0,"미나유",null,0,null,72,49,84,0,160,300,null,null],
|
||||
[0,"무무무",null,0,null,70,77,57,0,160,300,null,null],
|
||||
[0,"무라사",null,"성령",null,76,82,65,0,160,300,null,null,"이 세상에 미련이 남으신 분은 승선할 수 없습니다만 당신은 어떠신가요?"],
|
||||
[0,"무게츠",null,"환상",null,76,95,68,0,160,300,null,null,"난 무게츠. 그리고, 여긴 나의 세계."],
|
||||
[0,"묘렌",null,0,null,77,78,79,0,160,300,null,null],
|
||||
[0,"모코우",null,"영야",null,83,99,69,0,160,300,null,null,"너희들도 한번 영원의 고륜을 고민해 보는 게 좋아!"],
|
||||
[0,"모미지",null,"풍신",null,83,68,66,0,160,300,null,null,"높은 분들은 저희 일반 텐구보다 훨씬 강하니까, 경비 같은 건 전혀 필요하지 않을 것 같은데."],
|
||||
[0,"모모히메",null,0,null,75,68,72,0,160,300,null,null],
|
||||
[0,"모모",null,0,null,62,62,71,0,160,300,null,null],
|
||||
[0,"메이즈",null,0,null,70,40,76,0,160,300,null,null],
|
||||
[0,"메이벨",null,0,null,71,74,56,0,160,300,null,null],
|
||||
[0,"메이라",null,"봉마",null,65,82,36,0,160,300,null,null,"내가 이기면 하쿠레이의 힘은 내가 가져가겠어!"],
|
||||
[0,"메를린",null,"화영",null,73,67,70,0,160,300,null,null,"내 연주를 듣고서, 무사했던 식량은 없지."],
|
||||
[0,"메디슨",null,"화영",null,73,58,71,0,160,300,null,null,"콘파로, 콘파로, 독이여 모여라~"],
|
||||
[0,"메구미",null,0,null,83,77,74,0,160,300,null,null],
|
||||
[0,"마이",null,"괴기",null,72,60,75,0,160,300,null,null,"내가 안내할게..."],
|
||||
[0,"마을사람5",null,0,null,65,35,50,0,160,300,null,null],
|
||||
[0,"마을사람4",null,0,null,64,34,50,0,160,300,null,null],
|
||||
[0,"마을사람3",null,0,null,63,33,50,0,160,300,null,null],
|
||||
[0,"마을사람2",null,0,null,62,32,50,0,160,300,null,null],
|
||||
[0,"마을사람1",null,0,null,61,31,50,0,160,300,null,null],
|
||||
[0,"마미조",null,"신령",null,77,77,97,0,160,300,null,null,"뭔가 고민이 있는 모양이구먼. 야그나 함 들어 보자."],
|
||||
[0,"마리우스",null,0,null,67,87,66,0,160,300,null,null],
|
||||
[0,"마리사",null,0,null,83,91,78,0,160,300,null,null,"아~? 탄막에 두뇌? 바보 아냐? 탄막은 파워야."],
|
||||
[0,"마나",null,0,null,73,75,72,0,160,300,null,null],
|
||||
[0,"링고",null,"감주",null,54,76,71,0,160,300,null,null,"옛날의 극락정토는 이제 보이는 그림자도 없다고 생각해."],
|
||||
[0,"릴리",null,"요요",null,37,63,68,0,160,300,null,null,"봄이에요~"],
|
||||
[0,"린네",null,0,null,83,66,83,0,160,300,null,null],
|
||||
[0,"리코",null,0,null,68,60,76,0,160,300,null,null],
|
||||
[0,"리카코",null,"몽시",null,76,71,100,0,160,300,null,null,"왜 마법 따위에 흥미를 가지기나 하지?"],
|
||||
[0,"리카",null,"봉마",null,61,63,75,0,160,300,null,null,"가는 거예요!!"],
|
||||
[0,"리리카",null,"화영",null,57,66,83,0,160,300,null,null,"당신은 노래를 부르지. 난 손을 쓰지 않고 연주를 해. 장기전으로 가면 내 쪽이 세다고?"],
|
||||
[0,"리락",null,0,null,74,54,62,0,160,300,null,null],
|
||||
[0,"리글",null,"영야",null,85,64,51,0,160,300,null,null,"달이 보이는 밤에는, 즐기지 않아선 안 되는 거 아닐까."],
|
||||
[0,"루이즈",null,"괴기",null,59,57,72,0,160,300,null,null,"뭐, 마계는 좋은 곳이니, 느긋하게 관광이라도 하도록 해☆"],
|
||||
[0,"루미아",null,"홍마",null,79,70,56,0,160,300,null,null,"그런 건가~"],
|
||||
[0,"루리",null,0,null,66,66,62,0,160,300,null,null],
|
||||
[0,"루나사",null,"화영",null,76,77,50,0,160,300,null,null,"넌 슬픈 처지에서 태어난 경우야. 들떠있을 때가 아니지."],
|
||||
[0,"루나",null,"구문",null,67,74,74,0,160,300,null,null,"빨라고? 네녀석이 빨아라!"],
|
||||
[0,"레티",null,"요요",null,60,79,49,0,160,300,null,null,"흑막~"],
|
||||
[0,"레이센",null,"영야",null,79,78,89,0,160,300,null,null,"이 앞에 기다리고 있는 게 악몽이라 해도, 그래도 나는 가야만 해."],
|
||||
[0,"레이무",null,0,null,90,83,82,0,160,300,null,null,"인간을 쉽사리 죽게 내버려 둘까 보냐!"],
|
||||
[0,"레이라",null,0,null,66,67,51,0,160,300,null,null],
|
||||
[0,"레밀리아",null,"홍마",null,93,94,70,0,160,300,null,null,"당신은 이제껏 먹어 온 빵이 몇 개인지 알고 있어?"],
|
||||
[0,"런던인형",null,0,null,64,78,62,0,160,300,null,null],
|
||||
[0,"란",null,"요요",null,71,79,101,0,160,300,null,null,"흠. 첸을 괴롭힌건 너지?"],
|
||||
[0,"라쿠",null,0,null,71,52,69,0,160,300,null,null],
|
||||
[0,"라이코",null,"휘침",null,80,66,91,0,160,300,null,null,"누구라도 자기 목숨을 부지하고 싶으면 노력을 아끼지 않잖아?"],
|
||||
[0,"라바",null,"천공",null,69,74,54,0,160,300,null,null,"지금이라면 신세계의 신이라도 될 것 같은 기분이야!"],
|
||||
[0,"도레미",null,"감주",null,67,63,88,0,160,300,null,null,"맨몸!? 혹시 맨몸!?"],
|
||||
[0,"대요정",null,"홍마",null,60,56,79,0,160,300,null,null],
|
||||
[0,"달토끼5",null,0,null,35,55,55,0,160,300,null,null],
|
||||
[0,"달토끼4",null,0,null,34,54,55,0,160,300,null,null],
|
||||
[0,"달토끼3",null,0,null,33,53,55,0,160,300,null,null],
|
||||
[0,"달토끼2",null,0,null,32,52,55,0,160,300,null,null],
|
||||
[0,"달토끼1",null,0,null,31,51,55,0,160,300,null,null],
|
||||
[0,"니토리",null,"풍신",null,68,68,76,0,160,300,null,null,"축제 땐 생선이 잘 팔리지. 인간에게 어업권을 뺏어서 독점하면 떼돈 벌겠네!"],
|
||||
[0,"노바",null,0,null,74,56,82,0,160,300,null,null],
|
||||
[0,"노로이코",null,"봉마",null,56,61,65,0,160,300,null,null],
|
||||
[0,"네즈",null,0,null,76,71,40,0,160,300,null,null],
|
||||
[0,"네무노",null,"천공",null,78,40,67,0,160,300,null,null,"자자, 차라도 마시고 가라."],
|
||||
[0,"나즈린",null,"성령",null,76,63,64,0,160,300,null,null,"미안한데, 쥐를 얕보다간 죽어."],
|
||||
[0,"나루코",null,0,null,68,40,70,0,160,300,null,null],
|
||||
[0,"나루미",null,"천공",null,84,72,78,0,160,300,null,null,"에? 뭐야 그거 무서워"],
|
||||
[0,"구유카",null,"환상",null,84,85,85,0,160,300,null,null,"신이라 해도, 힘이야말로 전부야!"],
|
||||
[0,"구앨리스",null,"괴기",null,80,80,90,0,160,300,null,null,"궁극의 마법으로 널 해치워 주겠어!!"],
|
||||
[0,"구마리사",null,"봉마",null,80,90,80,0,160,300,null,null,"오케이~, 여기는 마리사에게 맡겨줘."],
|
||||
[0,"구레이무",null,"영이",null,90,80,80,0,160,300,null,null,"문답무용이야!!"],
|
||||
[0,"곽청아",null,"신령",null,72,77,87,0,160,300,null,null,"네~ 썩어서 귀엽죠?"],
|
||||
[0,"골리앗",null,0,null,72,78,58,0,160,300,null,null],
|
||||
[0,"겐지",null,"봉마",null,70,70,70,0,160,300,null,null],
|
||||
[0,"겐게츠",null,"환상",null,83,70,94,0,160,300,null,null,"얕보지 마. 우린, 둘이서 한 사람 몫이니까.…"],
|
||||
[0,"강림",null,0,null,84,76,57,0,160,300,null,null]
|
||||
],
|
||||
"cities":[
|
||||
|
||||
|
||||
+346
-345
@@ -6,6 +6,7 @@
|
||||
],
|
||||
"diplomacy":[
|
||||
],
|
||||
"iconPath": "걸그룹",
|
||||
"stat":{
|
||||
"total":220,
|
||||
"min":40,
|
||||
@@ -13,351 +14,351 @@
|
||||
"npcMax":95
|
||||
},
|
||||
"general":[
|
||||
[0, "아이유", -1, 0, null, 85, 61, 100, 0, 160, 250, null, null],
|
||||
[0, "걸스데이민아", -1, 0, null, 91, 62, 90, 0, 160, 250, null, null],
|
||||
[0, "구하라", -1, 0, null, 95, 81, 67, 0, 160, 250, null, null],
|
||||
[0, "손나은", -1, 0, null, 92, 64, 82, 0, 160, 250, null, null],
|
||||
[0, "윤아", -1, 0, null, 94, 84, 72, 0, 160, 250, null, null],
|
||||
[0, "걸스데이소진", -1, 0, null, 86, 84, 80, 0, 160, 250, null, null],
|
||||
[0, "수지", -1, 0, null, 100, 73, 80, 0, 160, 250, null, null],
|
||||
[0, "정예인", -1, 0, null, 90, 85, 70, 0, 160, 250, null, null],
|
||||
[0, "혜리", -1, 0, null, 90, 78, 80, 0, 160, 250, null, null],
|
||||
[0, "은하", -1, 0, null, 83, 79, 82, 0, 160, 250, null, null],
|
||||
[0, "슈", -1, 0, null, 92, 64, 70, 0, 160, 250, null, null],
|
||||
[0, "소원", -1, 0, null, 85, 80, 70, 0, 160, 250, null, null],
|
||||
[0, "보아", -1, 0, null, 95, 99, 96, 0, 160, 250, null, null],
|
||||
[0, "김세정", -1, 0, null, 98, 96, 98, 0, 160, 250, null, null],
|
||||
[0, "나라", -1, 0, null, 94, 92, 70, 0, 160, 250, null, null],
|
||||
[0, "서지수", -1, 0, null, 88, 81, 73, 0, 160, 250, null, null],
|
||||
[0, "양파", -1, 0, null, 75, 64, 92, 0, 160, 250, null, null],
|
||||
[0, "앨리스", -1, 0, null, 86, 83, 78, 0, 160, 250, null, null],
|
||||
[0, "효린", -1, 0, null, 40, 72, 97, 0, 160, 250, null, null],
|
||||
[0, "보라", -1, 0, null, 82, 81, 68, 0, 160, 250, null, null],
|
||||
[0, "소유", -1, 0, null, 70, 68, 81, 0, 160, 250, null, null],
|
||||
[0, "다솜", -1, 0, null, 82, 77, 69, 0, 160, 250, null, null],
|
||||
[0, "지연", -1, 0, null, 88, 70, 62, 0, 160, 250, null, null],
|
||||
[0, "효민", -1, 0, null, 83, 74, 66, 0, 160, 250, null, null],
|
||||
[0, "은정", -1, 0, null, 70, 60, 72, 0, 160, 250, null, null],
|
||||
[0, "큐리", -1, 0, null, 70, 61, 58, 0, 160, 250, null, null],
|
||||
[0, "보람", -1, 0, null, 72, 60, 60, 0, 160, 250, null, null],
|
||||
[0, "티아라소연", -1, 0, null, 71, 58, 77, 0, 160, 250, null, null],
|
||||
[0, "라임", -1, 0, null, 78, 70, 74, 0, 160, 250, null, null],
|
||||
[0, "유영", -1, 0, null, 70, 53, 64, 0, 160, 250, null, null],
|
||||
[0, "서영", -1, 0, null, 65, 67, 62, 0, 160, 250, null, null],
|
||||
[0, "헬비여름", -1, 0, null, 63, 62, 63, 0, 160, 250, null, null],
|
||||
[0, "남지현", -1, 0, null, 77, 62, 74, 0, 160, 250, null, null],
|
||||
[0, "허가윤", -1, 0, null, 70, 64, 82, 0, 160, 250, null, null],
|
||||
[0, "전지윤", -1, 0, null, 69, 61, 69, 0, 160, 250, null, null],
|
||||
[0, "김현아", -1, 0, null, 92, 92, 72, 0, 160, 250, null, null],
|
||||
[0, "권소현", -1, 0, null, 75, 59, 70, 0, 160, 250, null, null],
|
||||
[0, "이해리", -1, 0, null, 61, 45, 93, 0, 160, 250, null, null],
|
||||
[0, "강민경", -1, 0, null, 88, 48, 84, 0, 160, 250, null, null],
|
||||
[0, "비키", -1, 0, null, 54, 74, 69, 0, 160, 250, null, null],
|
||||
[0, "김진", -1, 0, null, 51, 73, 66, 0, 160, 250, null, null],
|
||||
[0, "이민경", -1, 0, null, 56, 71, 70, 0, 160, 250, null, null],
|
||||
[0, "한나", -1, 0, null, 40, 43, 41, 0, 160, 250, null, null],
|
||||
[0, "김한별", -1, 0, null, 60, 41, 57, 0, 160, 250, null, null],
|
||||
[0, "김한샘", -1, 0, null, 31, 41, 40, 0, 160, 250, null, null],
|
||||
[0, "블랙핑크지수", -1, 0, null, 83, 70, 78, 0, 160, 250, null, null],
|
||||
[0, "블랙핑크제니", -1, 0, null, 84, 68, 80, 0, 160, 250, null, null],
|
||||
[0, "로제", -1, 0, null, 80, 70, 87, 0, 160, 250, null, null],
|
||||
[0, "리사", -1, 0, null, 80, 74, 79, 0, 160, 250, null, null],
|
||||
[0, "수민", -1, 0, null, 66, 62, 72, 0, 160, 250, null, null],
|
||||
[0, "소나무민재", -1, 0, null, 60, 61, 80, 0, 160, 250, null, null],
|
||||
[0, "디애나", -1, 0, null, 68, 73, 64, 0, 160, 250, null, null],
|
||||
[0, "나현", -1, 0, null, 71, 79, 57, 0, 160, 250, null, null],
|
||||
[0, "의진", -1, 0, null, 76, 80, 61, 0, 160, 250, null, null],
|
||||
[0, "하이디", -1, 0, null, 71, 60, 80, 0, 160, 250, null, null],
|
||||
[0, "뉴썬", -1, 0, null, 60, 61, 59, 0, 160, 250, null, null],
|
||||
[0, "유라", -1, 0, null, 80, 70, 61, 0, 160, 250, null, null],
|
||||
[0, "지민", -1, 0, null, 69, 66, 72, 0, 160, 250, null, null],
|
||||
[0, "AOA유나", -1, 0, null, 70, 54, 68, 0, 160, 250, null, null],
|
||||
[0, "혜정", -1, 0, null, 74, 57, 65, 0, 160, 250, null, null],
|
||||
[0, "AOA민아", -1, 0, null, 71, 62, 58, 0, 160, 250, null, null],
|
||||
[0, "설현", -1, 0, null, 90, 78, 59, 0, 160, 250, null, null],
|
||||
[0, "찬미", -1, 0, null, 68, 62, 60, 0, 160, 250, null, null],
|
||||
[0, "AOA초아", -1, 0, null, 76, 58, 66, 0, 160, 250, null, null],
|
||||
[0, "솔빈", -1, 0, null, 80, 66, 62, 0, 160, 250, null, null],
|
||||
[0, "해인", -1, 0, null, 67, 63, 60, 0, 160, 250, null, null],
|
||||
[0, "라붐유정", -1, 0, null, 66, 61, 61, 0, 160, 250, null, null],
|
||||
[0, "라붐소연", -1, 0, null, 80, 58, 60, 0, 160, 250, null, null],
|
||||
[0, "지엔", -1, 0, null, 61, 60, 62, 0, 160, 250, null, null],
|
||||
[0, "율희", -1, 0, null, 60, 54, 60, 0, 160, 250, null, null],
|
||||
[0, "효정", -1, 0, null, 78, 54, 59, 0, 160, 250, null, null],
|
||||
[0, "오마이걸미미", -1, 0, null, 51, 57, 55, 0, 160, 250, null, null],
|
||||
[0, "유아", -1, 0, null, 73, 81, 70, 0, 160, 250, null, null],
|
||||
[0, "승희", -1, 0, null, 69, 76, 78, 0, 160, 250, null, null],
|
||||
[0, "지호", -1, 0, null, 69, 67, 62, 0, 160, 250, null, null],
|
||||
[0, "비니", -1, 0, null, 60, 56, 61, 0, 160, 250, null, null],
|
||||
[0, "아린", -1, 0, null, 69, 57, 58, 0, 160, 250, null, null],
|
||||
[0, "박초롱", -1, 0, null, 76, 60, 63, 0, 160, 250, null, null],
|
||||
[0, "윤보미", -1, 0, null, 80, 61, 62, 0, 160, 250, null, null],
|
||||
[0, "정은지", -1, 0, null, 78, 60, 86, 0, 160, 250, null, null],
|
||||
[0, "김남주", -1, 0, null, 69, 59, 68, 0, 160, 250, null, null],
|
||||
[0, "오하영", -1, 0, null, 78, 60, 66, 0, 160, 250, null, null],
|
||||
[0, "김재경", -1, 0, null, 82, 71, 68, 0, 160, 250, null, null],
|
||||
[0, "고나은", -1, 0, null, 75, 62, 60, 0, 160, 250, null, null],
|
||||
[0, "지숙", -1, 0, null, 77, 57, 69, 0, 160, 250, null, null],
|
||||
[0, "노을", -1, 0, null, 73, 60, 63, 0, 160, 250, null, null],
|
||||
[0, "오승아", -1, 0, null, 78, 56, 66, 0, 160, 250, null, null],
|
||||
[0, "정윤혜", -1, 0, null, 75, 59, 60, 0, 160, 250, null, null],
|
||||
[0, "조현영", -1, 0, null, 79, 60, 63, 0, 160, 250, null, null],
|
||||
[0, "경리", -1, 0, null, 80, 82, 64, 0, 160, 250, null, null],
|
||||
[0, "나뮤혜미", -1, 0, null, 72, 67, 60, 0, 160, 250, null, null],
|
||||
[0, "나뮤소진", -1, 0, null, 73, 63, 59, 0, 160, 250, null, null],
|
||||
[0, "금조", -1, 0, null, 70, 60, 54, 0, 160, 250, null, null],
|
||||
[0, "손성아", -1, 0, null, 69, 63, 60, 0, 160, 250, null, null],
|
||||
[0, "박민하", -1, 0, null, 90, 73, 57, 0, 160, 250, null, null],
|
||||
[0, "웬디", -1, 0, null, 80, 70, 92, 0, 160, 250, null, null],
|
||||
[0, "아이린", -1, 0, null, 100, 72, 70, 0, 160, 250, null, null],
|
||||
[0, "슬기", -1, 0, null, 93, 87, 76, 0, 160, 250, null, null],
|
||||
[0, "조이", -1, 0, null, 89, 70, 84, 0, 160, 250, null, null],
|
||||
[0, "예리", -1, 0, null, 83, 70, 77, 0, 160, 250, null, null],
|
||||
[0, "솔라", -1, 0, null, 83, 62, 90, 0, 160, 250, null, null],
|
||||
[0, "문별", -1, 0, null, 70, 63, 85, 0, 160, 250, null, null],
|
||||
[0, "휘인", -1, 0, null, 67, 61, 84, 0, 160, 250, null, null],
|
||||
[0, "화사", -1, 0, null, 51, 64, 83, 0, 160, 250, null, null],
|
||||
[0, "나연", -1, 0, null, 78, 63, 70, 0, 160, 250, null, null],
|
||||
[0, "정연", -1, 0, null, 78, 66, 68, 0, 160, 250, null, null],
|
||||
[0, "모모", -1, 0, null, 80, 88, 63, 0, 160, 250, null, null],
|
||||
[0, "사나", -1, 0, null, 83, 83, 64, 0, 160, 250, null, null],
|
||||
[0, "지효", -1, 0, null, 73, 63, 86, 0, 160, 250, null, null],
|
||||
[0, "트와이스미나", -1, 0, null, 79, 87, 66, 0, 160, 250, null, null],
|
||||
[0, "다현", -1, 0, null, 78, 66, 68, 0, 160, 250, null, null],
|
||||
[0, "채영", -1, 0, null, 70, 68, 67, 0, 160, 250, null, null],
|
||||
[0, "쯔위", -1, 0, null, 100, 72, 61, 0, 160, 250, null, null],
|
||||
[0, "제아", -1, 0, null, 64, 57, 89, 0, 160, 250, null, null],
|
||||
[0, "나르샤", -1, 0, null, 63, 60, 80, 0, 160, 250, null, null],
|
||||
[0, "미료", -1, 0, null, 60, 57, 82, 0, 160, 250, null, null],
|
||||
[0, "가인", -1, 0, null, 67, 77, 80, 0, 160, 250, null, null],
|
||||
[0, "하나", -1, 0, null, 66, 62, 64, 0, 160, 250, null, null],
|
||||
[0, "구구단미미", -1, 0, null, 69, 60, 63, 0, 160, 250, null, null],
|
||||
[0, "구구단나영", -1, 0, null, 78, 62, 83, 0, 160, 250, null, null],
|
||||
[0, "해빈", -1, 0, null, 70, 60, 86, 0, 160, 250, null, null],
|
||||
[0, "소이", -1, 0, null, 66, 61, 64, 0, 160, 250, null, null],
|
||||
[0, "샐리", -1, 0, null, 68, 66, 67, 0, 160, 250, null, null],
|
||||
[0, "구구단미나", -1, 0, null, 80, 70, 63, 0, 160, 250, null, null],
|
||||
[0, "구구단혜연", -1, 0, null, 63, 64, 66, 0, 160, 250, null, null],
|
||||
[0, "최유정", -1, 0, null, 70, 77, 67, 0, 160, 250, null, null],
|
||||
[0, "김도연", -1, 0, null, 81, 78, 68, 0, 160, 250, null, null],
|
||||
[0, "지수연", -1, 0, null, 64, 62, 74, 0, 160, 250, null, null],
|
||||
[0, "엘리", -1, 0, null, 64, 60, 63, 0, 160, 250, null, null],
|
||||
[0, "세이", -1, 0, null, 61, 61, 66, 0, 160, 250, null, null],
|
||||
[0, "루아", -1, 0, null, 53, 59, 60, 0, 160, 250, null, null],
|
||||
[0, "리나", -1, 0, null, 57, 60, 61, 0, 160, 250, null, null],
|
||||
[0, "루시", -1, 0, null, 83, 68, 64, 0, 160, 250, null, null],
|
||||
[0, "이효리", -1, 0, null, 90, 91, 83, 0, 160, 250, null, null],
|
||||
[0, "성유리", -1, 0, null, 92, 62, 53, 0, 160, 250, null, null],
|
||||
[0, "이진", -1, 0, null, 64, 54, 52, 0, 160, 250, null, null],
|
||||
[0, "옥주현", -1, 0, null, 43, 61, 91, 0, 160, 250, null, null],
|
||||
[0, "유진", -1, 0, null, 94, 63, 73, 0, 160, 250, null, null],
|
||||
[0, "바다", -1, 0, null, 58, 66, 96, 0, 160, 250, null, null],
|
||||
[0, "설아", -1, 0, null, 70, 61, 64, 0, 160, 250, null, null],
|
||||
[0, "엑시", -1, 0, null, 73, 72, 70, 0, 160, 250, null, null],
|
||||
[0, "보나", -1, 0, null, 76, 68, 60, 0, 160, 250, null, null],
|
||||
[0, "성소", -1, 0, null, 77, 94, 63, 0, 160, 250, null, null],
|
||||
[0, "은서", -1, 0, null, 68, 63, 60, 0, 160, 250, null, null],
|
||||
[0, "다영", -1, 0, null, 71, 60, 62, 0, 160, 250, null, null],
|
||||
[0, "다원", -1, 0, null, 65, 60, 60, 0, 160, 250, null, null],
|
||||
[0, "우주소녀수빈", -1, 0, null, 66, 61, 61, 0, 160, 250, null, null],
|
||||
[0, "선의", -1, 0, null, 70, 62, 59, 0, 160, 250, null, null],
|
||||
[0, "우주소녀여름", -1, 0, null, 58, 60, 60, 0, 160, 250, null, null],
|
||||
[0, "미기", -1, 0, null, 63, 63, 61, 0, 160, 250, null, null],
|
||||
[0, "루다", -1, 0, null, 81, 67, 66, 0, 160, 250, null, null],
|
||||
[0, "연정", -1, 0, null, 68, 58, 83, 0, 160, 250, null, null],
|
||||
[0, "윤채경", -1, 0, null, 80, 64, 70, 0, 160, 250, null, null],
|
||||
[0, "김채원", -1, 0, null, 67, 60, 63, 0, 160, 250, null, null],
|
||||
[0, "양예나", -1, 0, null, 70, 61, 68, 0, 160, 250, null, null],
|
||||
[0, "레이첼", -1, 0, null, 68, 62, 62, 0, 160, 250, null, null],
|
||||
[0, "이진솔", -1, 0, null, 69, 56, 70, 0, 160, 250, null, null],
|
||||
[0, "박규리", -1, 0, null, 80, 83, 76, 0, 160, 250, null, null],
|
||||
[0, "한승연", -1, 0, null, 77, 70, 69, 0, 160, 250, null, null],
|
||||
[0, "허영지", -1, 0, null, 70, 66, 66, 0, 160, 250, null, null],
|
||||
[0, "니콜", -1, 0, null, 69, 74, 73, 0, 160, 250, null, null],
|
||||
[0, "강지영", -1, 0, null, 63, 63, 57, 0, 160, 250, null, null],
|
||||
[0, "레이나", -1, 0, null, 76, 66, 74, 0, 160, 250, null, null],
|
||||
[0, "나나", -1, 0, null, 90, 72, 64, 0, 160, 250, null, null],
|
||||
[0, "이영", -1, 0, null, 69, 61, 67, 0, 160, 250, null, null],
|
||||
[0, "리지", -1, 0, null, 68, 62, 77, 0, 160, 250, null, null],
|
||||
[0, "가은", -1, 0, null, 60, 59, 63, 0, 160, 250, null, null],
|
||||
[0, "가희", -1, 0, null, 67, 90, 62, 0, 160, 250, null, null],
|
||||
[0, "전효성", -1, 0, null, 88, 87, 84, 0, 160, 250, null, null],
|
||||
[0, "송가은", -1, 0, null, 80, 68, 77, 0, 160, 250, null, null],
|
||||
[0, "정하나", -1, 0, null, 68, 63, 70, 0, 160, 250, null, null],
|
||||
[0, "한선화", -1, 0, null, 79, 59, 71, 0, 160, 250, null, null],
|
||||
[0, "베이비소울", -1, 0, null, 71, 60, 70, 0, 160, 250, null, null],
|
||||
[0, "유지애", -1, 0, null, 70, 59, 71, 0, 160, 250, null, null],
|
||||
[0, "이미주", -1, 0, null, 81, 57, 76, 0, 160, 250, null, null],
|
||||
[0, "Kei", -1, 0, null, 87, 70, 83, 0, 160, 250, null, null],
|
||||
[0, "JIN", -1, 0, null, 68, 63, 78, 0, 160, 250, null, null],
|
||||
[0, "류수정", -1, 0, null, 69, 62, 67, 0, 160, 250, null, null],
|
||||
[0, "태연", -1, 0, null, 87, 64, 90, 0, 160, 250, null, null],
|
||||
[0, "써니", -1, 0, null, 79, 68, 78, 0, 160, 250, null, null],
|
||||
[0, "티파니", -1, 0, null, 84, 66, 81, 0, 160, 250, null, null],
|
||||
[0, "효연", -1, 0, null, 40, 100, 42, 0, 160, 250, null, null],
|
||||
[0, "유리", -1, 0, null, 82, 84, 67, 0, 160, 250, null, null],
|
||||
[0, "수영", -1, 0, null, 69, 68, 73, 0, 160, 250, null, null],
|
||||
[0, "서현", -1, 0, null, 77, 64, 79, 0, 160, 250, null, null],
|
||||
[0, "제시카", -1, 0, null, 81, 67, 86, 0, 160, 250, null, null],
|
||||
[0, "LE", -1, 0, null, 63, 63, 80, 0, 160, 250, null, null],
|
||||
[0, "정화", -1, 0, null, 80, 61, 61, 0, 160, 250, null, null],
|
||||
[0, "하니", -1, 0, null, 87, 83, 69, 0, 160, 250, null, null],
|
||||
[0, "솔지", -1, 0, null, 76, 63, 93, 0, 160, 250, null, null],
|
||||
[0, "혜린", -1, 0, null, 86, 60, 86, 0, 160, 250, null, null],
|
||||
[0, "유니스", -1, 0, null, 75, 58, 73, 0, 160, 250, null, null],
|
||||
[0, "기희현", -1, 0, null, 86, 66, 70, 0, 160, 250, null, null],
|
||||
[0, "다이아제니", -1, 0, null, 71, 66, 68, 0, 160, 250, null, null],
|
||||
[0, "정채연", -1, 0, null, 79, 63, 66, 0, 160, 250, null, null],
|
||||
[0, "은진", -1, 0, null, 66, 67, 63, 0, 160, 250, null, null],
|
||||
[0, "예빈", -1, 0, null, 68, 65, 67, 0, 160, 250, null, null],
|
||||
[0, "은채", -1, 0, null, 61, 58, 60, 0, 160, 250, null, null],
|
||||
[0, "주은", -1, 0, null, 70, 59, 65, 0, 160, 250, null, null],
|
||||
[0, "솜이", -1, 0, null, 70, 66, 61, 0, 160, 250, null, null],
|
||||
[0, "예린", -1, 0, null, 74, 73, 70, 0, 160, 250, null, null],
|
||||
[0, "유주", -1, 0, null, 65, 71, 85, 0, 160, 250, null, null],
|
||||
[0, "신비", -1, 0, null, 77, 80, 74, 0, 160, 250, null, null],
|
||||
[0, "엄지", -1, 0, null, 59, 69, 67, 0, 160, 250, null, null],
|
||||
[0, "세리", -1, 0, null, 74, 73, 80, 0, 160, 250, null, null],
|
||||
[0, "아영", -1, 0, null, 78, 76, 64, 0, 160, 250, null, null],
|
||||
[0, "우희", -1, 0, null, 77, 77, 63, 0, 160, 250, null, null],
|
||||
[0, "달샤벳수빈", -1, 0, null, 79, 74, 67, 0, 160, 250, null, null],
|
||||
[0, "효은", -1, 0, null, 72, 71, 69, 0, 160, 250, null, null],
|
||||
[0, "민희", -1, 0, null, 69, 73, 66, 0, 160, 250, null, null],
|
||||
[0, "소영", -1, 0, null, 64, 70, 65, 0, 160, 250, null, null],
|
||||
[0, "혜빈", -1, 0, null, 62, 59, 66, 0, 160, 250, null, null],
|
||||
[0, "연우", -1, 0, null, 76, 61, 63, 0, 160, 250, null, null],
|
||||
[0, "제인", -1, 0, null, 72, 67, 61, 0, 160, 250, null, null],
|
||||
[0, "모모랜드태하", -1, 0, null, 60, 60, 60, 0, 160, 250, null, null],
|
||||
[0, "나윤", -1, 0, null, 62, 61, 63, 0, 160, 250, null, null],
|
||||
[0, "데이지", -1, 0, null, 68, 63, 59, 0, 160, 250, null, null],
|
||||
[0, "아인", -1, 0, null, 72, 57, 69, 0, 160, 250, null, null],
|
||||
[0, "주이", -1, 0, null, 40, 74, 56, 0, 160, 250, null, null],
|
||||
[0, "낸시", -1, 0, null, 80, 69, 67, 0, 160, 250, null, null],
|
||||
[0, "선예", -1, 0, null, 80, 61, 78, 0, 160, 250, null, null],
|
||||
[0, "선미", -1, 0, null, 80, 82, 70, 0, 160, 250, null, null],
|
||||
[0, "유빈", -1, 0, null, 76, 69, 77, 0, 160, 250, null, null],
|
||||
[0, "혜림", -1, 0, null, 69, 63, 67, 0, 160, 250, null, null],
|
||||
[0, "예은", -1, 0, null, 70, 61, 80, 0, 160, 250, null, null],
|
||||
[0, "설리", -1, 0, null, 85, 41, 43, 0, 160, 250, null, null],
|
||||
[0, "빅토리아", -1, 0, null, 89, 88, 80, 0, 160, 250, null, null],
|
||||
[0, "크리스탈", -1, 0, null, 93, 72, 71, 0, 160, 250, null, null],
|
||||
[0, "엠버", -1, 0, null, 65, 69, 74, 0, 160, 250, null, null],
|
||||
[0, "루나", -1, 0, null, 76, 70, 92, 0, 160, 250, null, null],
|
||||
[0, "재이", -1, 0, null, 80, 70, 70, 0, 160, 250, null, null],
|
||||
[0, "린지", -1, 0, null, 69, 68, 71, 0, 160, 250, null, null],
|
||||
[0, "예지", -1, 0, null, 58, 63, 78, 0, 160, 250, null, null],
|
||||
[0, "피에스타혜미", -1, 0, null, 66, 54, 59, 0, 160, 250, null, null],
|
||||
[0, "차오루", -1, 0, null, 78, 73, 67, 0, 160, 250, null, null],
|
||||
[0, "민영", -1, 0, null, 76, 72, 81, 0, 160, 250, null, null],
|
||||
[0, "브브걸유정", -1, 0, null, 64, 73, 67, 0, 160, 250, null, null],
|
||||
[0, "은지", -1, 0, null, 70, 73, 68, 0, 160, 250, null, null],
|
||||
[0, "브브걸유나", -1, 0, null, 66, 76, 66, 0, 160, 250, null, null],
|
||||
[0, "하윤", -1, 0, null, 71, 78, 69, 0, 160, 250, null, null],
|
||||
[0, "베리굿태하", -1, 0, null, 78, 75, 78, 0, 160, 250, null, null],
|
||||
[0, "조현", -1, 0, null, 79, 78, 72, 0, 160, 250, null, null],
|
||||
[0, "서율", -1, 0, null, 68, 63, 62, 0, 160, 250, null, null],
|
||||
[0, "다예", -1, 0, null, 70, 62, 64, 0, 160, 250, null, null],
|
||||
[0, "세형", -1, 0, null, 72, 70, 59, 0, 160, 250, null, null],
|
||||
[0, "고운", -1, 0, null, 77, 71, 68, 0, 160, 250, null, null],
|
||||
[0, "간미연", -1, 0, null, 77, 56, 73, 0, 160, 250, null, null],
|
||||
[0, "김이지", -1, 0, null, 70, 63, 61, 0, 160, 250, null, null],
|
||||
[0, "윤은혜", -1, 0, null, 72, 61, 63, 0, 160, 250, null, null],
|
||||
[0, "심은진", -1, 0, null, 75, 60, 70, 0, 160, 250, null, null],
|
||||
[0, "이희진", -1, 0, null, 63, 54, 78, 0, 160, 250, null, null],
|
||||
[0, "유지", -1, 0, null, 72, 59, 73, 0, 160, 250, null, null],
|
||||
[0, "다혜", -1, 0, null, 70, 67, 63, 0, 160, 250, null, null],
|
||||
[0, "베스티혜연", -1, 0, null, 64, 63, 70, 0, 160, 250, null, null],
|
||||
[0, "해령", -1, 0, null, 81, 70, 76, 0, 160, 250, null, null],
|
||||
[0, "김보아", -1, 0, null, 69, 63, 86, 0, 160, 250, null, null],
|
||||
[0, "박시현", -1, 0, null, 73, 62, 66, 0, 160, 250, null, null],
|
||||
[0, "양지원", -1, 0, null, 84, 70, 69, 0, 160, 250, null, null],
|
||||
[0, "나래", -1, 0, null, 69, 65, 79, 0, 160, 250, null, null],
|
||||
[0, "김보형", -1, 0, null, 67, 61, 83, 0, 160, 250, null, null],
|
||||
[0, "주비", -1, 0, null, 62, 73, 82, 0, 160, 250, null, null],
|
||||
[0, "미성", -1, 0, null, 68, 71, 84, 0, 160, 250, null, null],
|
||||
[0, "코타", -1, 0, null, 57, 73, 80, 0, 160, 250, null, null],
|
||||
[0, "금비라", -1, 0, null, 63, 65, 87, 0, 160, 250, null, null],
|
||||
[0, "김연지", -1, 0, null, 40, 54, 90, 0, 160, 250, null, null],
|
||||
[0, "이보람", -1, 0, null, 61, 56, 87, 0, 160, 250, null, null],
|
||||
[0, "남규리", -1, 0, null, 87, 55, 72, 0, 160, 250, null, null],
|
||||
[0, "다나", -1, 0, null, 80, 70, 86, 0, 160, 250, null, null],
|
||||
[0, "린아", -1, 0, null, 86, 68, 70, 0, 160, 250, null, null],
|
||||
[0, "선데이", -1, 0, null, 72, 77, 66, 0, 160, 250, null, null],
|
||||
[0, "스테파니", -1, 0, null, 76, 92, 63, 0, 160, 250, null, null],
|
||||
[0, "박정아", -1, 0, null, 70, 63, 81, 0, 160, 250, null, null],
|
||||
[0, "하주연", -1, 0, null, 52, 62, 63, 0, 160, 250, null, null],
|
||||
[0, "박세미", -1, 0, null, 60, 59, 57, 0, 160, 250, null, null],
|
||||
[0, "김예원", -1, 0, null, 62, 57, 58, 0, 160, 250, null, null],
|
||||
[0, "서인영", -1, 0, null, 73, 78, 68, 0, 160, 250, null, null],
|
||||
[0, "차희", -1, 0, null, 71, 59, 80, 0, 160, 250, null, null],
|
||||
[0, "멜로디유민", -1, 0, null, 79, 55, 78, 0, 160, 250, null, null],
|
||||
[0, "예인", -1, 0, null, 78, 63, 78, 0, 160, 250, null, null],
|
||||
[0, "여은", -1, 0, null, 70, 57, 80, 0, 160, 250, null, null],
|
||||
[0, "오승희", -1, 0, null, 73, 60, 69, 0, 160, 250, null, null],
|
||||
[0, "최유진", -1, 0, null, 76, 63, 67, 0, 160, 250, null, null],
|
||||
[0, "장승연", -1, 0, null, 68, 72, 61, 0, 160, 250, null, null],
|
||||
[0, "SORN", -1, 0, null, 64, 73, 62, 0, 160, 250, null, null],
|
||||
[0, "장예은", -1, 0, null, 70, 76, 66, 0, 160, 250, null, null],
|
||||
[0, "엘키", -1, 0, null, 78, 71, 60, 0, 160, 250, null, null],
|
||||
[0, "권은빈", -1, 0, null, 76, 73, 68, 0, 160, 250, null, null],
|
||||
[0, "프리스틴나영", -1, 0, null, 73, 75, 70, 0, 160, 250, null, null],
|
||||
[0, "로아", -1, 0, null, 68, 71, 61, 0, 160, 250, null, null],
|
||||
[0, "유하", -1, 0, null, 70, 68, 65, 0, 160, 250, null, null],
|
||||
[0, "은우", -1, 0, null, 72, 67, 63, 0, 160, 250, null, null],
|
||||
[0, "레나", -1, 0, null, 73, 66, 73, 0, 160, 250, null, null],
|
||||
[0, "결경", -1, 0, null, 88, 77, 59, 0, 160, 250, null, null],
|
||||
[0, "예하나", -1, 0, null, 63, 65, 65, 0, 160, 250, null, null],
|
||||
[0, "성연", -1, 0, null, 69, 71, 60, 0, 160, 250, null, null],
|
||||
[0, "시연", -1, 0, null, 66, 62, 66, 0, 160, 250, null, null],
|
||||
[0, "카일라", -1, 0, null, 60, 69, 60, 0, 160, 250, null, null],
|
||||
[0, "지유", -1, 0, null, 72, 63, 66, 0, 160, 250, null, null],
|
||||
[0, "라니아혜미", -1, 0, null, 66, 63, 61, 0, 160, 250, null, null],
|
||||
[0, "지은", -1, 0, null, 61, 60, 56, 0, 160, 250, null, null],
|
||||
[0, "라니아유민", -1, 0, null, 68, 63, 66, 0, 160, 250, null, null],
|
||||
[0, "따보", -1, 0, null, 58, 60, 57, 0, 160, 250, null, null],
|
||||
[0, "제니", -1, 0, null, 62, 51, 81, 0, 160, 250, null, null],
|
||||
[0, "건지", -1, 0, null, 72, 53, 84, 0, 160, 250, null, null],
|
||||
[0, "서린", -1, 0, null, 66, 50, 83, 0, 160, 250, null, null],
|
||||
[0, "나리", -1, 0, null, 84, 86, 80, 0, 160, 250, null, null],
|
||||
[0, "지애", -1, 0, null, 63, 81, 72, 0, 160, 250, null, null],
|
||||
[0, "우주", -1, 0, null, 67, 86, 69, 0, 160, 250, null, null],
|
||||
[0, "와썹수진", -1, 0, null, 64, 80, 73, 0, 160, 250, null, null],
|
||||
[0, "타히티민재", -1, 0, null, 62, 63, 66, 0, 160, 250, null, null],
|
||||
[0, "미소", -1, 0, null, 63, 60, 61, 0, 160, 250, null, null],
|
||||
[0, "타히티지수", -1, 0, null, 61, 57, 67, 0, 160, 250, null, null],
|
||||
[0, "아리", -1, 0, null, 72, 69, 64, 0, 160, 250, null, null],
|
||||
[0, "제리", -1, 0, null, 66, 61, 68, 0, 160, 250, null, null],
|
||||
[0, "아유미", -1, 0, null, 80, 68, 69, 0, 160, 250, null, null],
|
||||
[0, "혜승", -1, 0, null, 68, 57, 71, 0, 160, 250, null, null],
|
||||
[0, "하린", -1, 0, null, 70, 60, 66, 0, 160, 250, null, null],
|
||||
[0, "황정음", -1, 0, null, 79, 55, 72, 0, 160, 250, null, null],
|
||||
[0, "슈가수진", -1, 0, null, 83, 54, 63, 0, 160, 250, null, null],
|
||||
[0, "산다라박", -1, 0, null, 80, 66, 64, 0, 160, 250, null, null],
|
||||
[0, "씨엘", -1, 0, null, 40, 88, 77, 0, 160, 250, null, null],
|
||||
[0, "박봄", -1, 0, null, 55, 60, 73, 0, 160, 250, null, null],
|
||||
[0, "공민지", -1, 0, null, 40, 87, 70, 0, 160, 250, null, null],
|
||||
[0, "지아", -1, 0, null, 68, 83, 70, 0, 160, 250, null, null],
|
||||
[0, "민", -1, 0, null, 62, 82, 73, 0, 160, 250, null, null],
|
||||
[0, "페이", -1, 0, null, 74, 87, 70, 0, 160, 250, null, null],
|
||||
[0, "앤씨아", -1, 0, null, 74, 62, 70, 0, 160, 250, null, null],
|
||||
[0, "윤하", -1, 0, null, 78, 53, 86, 0, 160, 250, null, null],
|
||||
[0, "아이비", -1, 0, null, 87, 82, 87, 0, 160, 250, null, null],
|
||||
[0, "코코", -1, 0, null, 80, 60, 78, 0, 160, 250, null, null],
|
||||
[0, "소리", -1, 0, null, 78, 60, 78, 0, 160, 250, null, null],
|
||||
[0, "밴", -1, 0, null, 79, 53, 90, 0, 160, 250, null, null],
|
||||
[0, "김청하", -1, 0, null, 68, 94, 72, 0, 160, 250, null, null],
|
||||
[0, "장나라", -1, 0, null, 84, 62, 80, 0, 160, 250, null, null],
|
||||
[0, "엘린", -1, 0, null, 71, 61, 63, 0, 160, 250, null, null],
|
||||
[0, "소율", -1, 0, null, 70, 66, 64, 0, 160, 250, null, null],
|
||||
[0, "금미", -1, 0, null, 73, 63, 61, 0, 160, 250, null, null],
|
||||
[0, "크레용팝초아", -1, 0, null, 72, 67, 65, 0, 160, 250, null, null],
|
||||
[0, "웨이", -1, 0, null, 70, 65, 60, 0, 160, 250, null, null],
|
||||
[0, "쥬니엘", -1, 0, null, 80, 46, 81, 0, 160, 250, null, null],
|
||||
[0, "이민", -1, 0, null, 64, 50, 83, 0, 160, 250, null, null],
|
||||
[0, "크리스탈채", -1, 0, null, 72, 51, 84, 0, 160, 250, null, null],
|
||||
[0, "윤미래", -1, 0, null, 57, 80, 102, 0, 160, 250, null, null],
|
||||
[0, "애니", -1, 0, null, 58, 92, 88, 0, 160, 250, null, null],
|
||||
[0, "NS윤지", -1, 0, null, 86, 84, 78, 0, 160, 250, null, null]
|
||||
[0, "아이유", null, 0, null, 90, 56, 100, 0, 160, 250, null, null],
|
||||
[0, "걸스데이민아", null, 0, null, 96, 52, 95, 0, 160, 250, null, null],
|
||||
[0, "구하라", null, 0, null, 95, 91, 57, 0, 160, 250, null, null],
|
||||
[0, "손나은", null, 0, null, 92, 54, 92, 0, 160, 250, null, null],
|
||||
[0, "윤아", null, 0, null, 94, 94, 62, 0, 160, 250, null, null],
|
||||
[0, "걸스데이소진", null, 0, null, 86, 94, 70, 0, 160, 250, null, null],
|
||||
[0, "수지", null, 0, null, 100, 58, 95, 0, 160, 250, null, null],
|
||||
[0, "정예인", null, 0, null, 90, 90, 65, 0, 160, 250, null, null],
|
||||
[0, "혜리", null, 0, null, 90, 68, 90, 0, 160, 250, null, null],
|
||||
[0, "은하", null, 0, null, 88, 69, 87, 0, 160, 250, null, null],
|
||||
[0, "슈", null, 0, null, 92, 54, 80, 0, 160, 250, null, null],
|
||||
[0, "소원", null, 0, null, 90, 85, 60, 0, 160, 250, null, null],
|
||||
[0, "보아", null, 0, null, 95, 99, 96, 0, 160, 250, null, null],
|
||||
[0, "김세정", null, 0, null, 100, 92, 100, 0, 160, 250, null, null],
|
||||
[0, "나라", null, 0, null, 94, 97, 65, 0, 160, 250, null, null],
|
||||
[0, "서지수", null, 0, null, 90, 89, 63, 0, 160, 250, null, null],
|
||||
[0, "양파", null, 0, null, 85, 54, 92, 0, 160, 250, null, null],
|
||||
[0, "앨리스", null, 0, null, 90, 90, 67, 0, 160, 250, null, null],
|
||||
[0, "효린", null, 0, null, 40, 72, 97, 0, 160, 250, null, null],
|
||||
[0, "보라", null, 0, null, 82, 81, 68, 0, 160, 250, null, null],
|
||||
[0, "소유", null, 0, null, 70, 68, 81, 0, 160, 250, null, null],
|
||||
[0, "다솜", null, 0, null, 82, 77, 69, 0, 160, 250, null, null],
|
||||
[0, "지연", null, 0, null, 88, 75, 65, 0, 160, 250, null, null],
|
||||
[0, "효민", null, 0, null, 83, 74, 66, 0, 160, 250, null, null],
|
||||
[0, "은정", null, 0, null, 70, 60, 72, 0, 160, 250, null, null],
|
||||
[0, "큐리", null, 0, null, 70, 61, 58, 0, 160, 250, null, null],
|
||||
[0, "보람", null, 0, null, 72, 60, 60, 0, 160, 250, null, null],
|
||||
[0, "티아라소연", null, 0, null, 71, 58, 77, 0, 160, 250, null, null],
|
||||
[0, "라임", null, 0, null, 78, 70, 74, 0, 160, 250, null, null],
|
||||
[0, "유영", null, 0, null, 70, 53, 64, 0, 160, 250, null, null],
|
||||
[0, "서영", null, 0, null, 65, 67, 62, 0, 160, 250, null, null],
|
||||
[0, "헬비여름", null, 0, null, 63, 62, 63, 0, 160, 250, null, null],
|
||||
[0, "남지현", null, 0, null, 80, 62, 74, 0, 160, 250, null, null],
|
||||
[0, "허가윤", null, 0, null, 70, 64, 82, 0, 160, 250, null, null],
|
||||
[0, "전지윤", null, 0, null, 69, 61, 69, 0, 160, 250, null, null],
|
||||
[0, "김현아", null, 0, null, 92, 92, 72, 0, 160, 250, null, null],
|
||||
[0, "권소현", null, 0, null, 75, 59, 70, 0, 160, 250, null, null],
|
||||
[0, "이해리", null, 0, null, 61, 45, 93, 0, 160, 250, null, null],
|
||||
[0, "강민경", null, 0, null, 88, 48, 84, 0, 160, 250, null, null],
|
||||
[0, "비키", null, 0, null, 54, 74, 69, 0, 160, 250, null, null],
|
||||
[0, "김진", null, 0, null, 51, 73, 66, 0, 160, 250, null, null],
|
||||
[0, "이민경", null, 0, null, 56, 71, 70, 0, 160, 250, null, null],
|
||||
[0, "한나", null, 0, null, 40, 43, 41, 0, 160, 250, null, null],
|
||||
[0, "김한별", null, 0, null, 60, 41, 57, 0, 160, 250, null, null],
|
||||
[0, "김한샘", null, 0, null, 31, 41, 40, 0, 160, 250, null, null],
|
||||
[0, "블랙핑크지수", null, 0, null, 83, 73, 80, 0, 160, 250, null, null],
|
||||
[0, "블랙핑크제니", null, 0, null, 84, 70, 82, 0, 160, 250, null, null],
|
||||
[0, "로제", null, 0, null, 80, 70, 87, 0, 160, 250, null, null],
|
||||
[0, "리사", null, 0, null, 80, 74, 84, 0, 160, 250, null, null],
|
||||
[0, "수민", null, 0, null, 66, 62, 72, 0, 160, 250, null, null],
|
||||
[0, "소나무민재", null, 0, null, 60, 61, 80, 0, 160, 250, null, null],
|
||||
[0, "디애나", null, 0, null, 68, 73, 64, 0, 160, 250, null, null],
|
||||
[0, "나현", null, 0, null, 71, 79, 57, 0, 160, 250, null, null],
|
||||
[0, "의진", null, 0, null, 76, 80, 61, 0, 160, 250, null, null],
|
||||
[0, "하이디", null, 0, null, 71, 60, 80, 0, 160, 250, null, null],
|
||||
[0, "뉴썬", null, 0, null, 60, 61, 59, 0, 160, 250, null, null],
|
||||
[0, "유라", null, 0, null, 80, 70, 61, 0, 160, 250, null, null],
|
||||
[0, "지민", null, 0, null, 69, 66, 72, 0, 160, 250, null, null],
|
||||
[0, "AOA유나", null, 0, null, 74, 54, 68, 0, 160, 250, null, null],
|
||||
[0, "혜정", null, 0, null, 74, 57, 65, 0, 160, 250, null, null],
|
||||
[0, "AOA민아", null, 0, null, 75, 62, 58, 0, 160, 250, null, null],
|
||||
[0, "설현", null, 0, null, 90, 78, 59, 0, 160, 250, null, null],
|
||||
[0, "찬미", null, 0, null, 68, 62, 60, 0, 160, 250, null, null],
|
||||
[0, "AOA초아", null, 0, null, 80, 58, 74, 0, 160, 250, null, null],
|
||||
[0, "솔빈", null, 0, null, 80, 66, 62, 0, 160, 250, null, null],
|
||||
[0, "해인", null, 0, null, 67, 63, 60, 0, 160, 250, null, null],
|
||||
[0, "라붐유정", null, 0, null, 66, 61, 71, 0, 160, 250, null, null],
|
||||
[0, "라붐소연", null, 0, null, 80, 58, 70, 0, 160, 250, null, null],
|
||||
[0, "지엔", null, 0, null, 61, 60, 62, 0, 160, 250, null, null],
|
||||
[0, "율희", null, 0, null, 60, 54, 60, 0, 160, 250, null, null],
|
||||
[0, "효정", null, 0, null, 78, 54, 59, 0, 160, 250, null, null],
|
||||
[0, "오마이걸미미", null, 0, null, 51, 57, 55, 0, 160, 250, null, null],
|
||||
[0, "유아", null, 0, null, 73, 81, 70, 0, 160, 250, null, null],
|
||||
[0, "승희", null, 0, null, 69, 76, 78, 0, 160, 250, null, null],
|
||||
[0, "지호", null, 0, null, 69, 67, 62, 0, 160, 250, null, null],
|
||||
[0, "비니", null, 0, null, 60, 56, 61, 0, 160, 250, null, null],
|
||||
[0, "아린", null, 0, null, 69, 57, 58, 0, 160, 250, null, null],
|
||||
[0, "박초롱", null, 0, null, 76, 60, 63, 0, 160, 250, null, null],
|
||||
[0, "윤보미", null, 0, null, 80, 61, 62, 0, 160, 250, null, null],
|
||||
[0, "정은지", null, 0, null, 78, 60, 86, 0, 160, 250, null, null],
|
||||
[0, "김남주", null, 0, null, 69, 59, 68, 0, 160, 250, null, null],
|
||||
[0, "오하영", null, 0, null, 78, 60, 66, 0, 160, 250, null, null],
|
||||
[0, "김재경", null, 0, null, 82, 71, 68, 0, 160, 250, null, null],
|
||||
[0, "고나은", null, 0, null, 75, 62, 60, 0, 160, 250, null, null],
|
||||
[0, "지숙", null, 0, null, 77, 57, 69, 0, 160, 250, null, null],
|
||||
[0, "노을", null, 0, null, 73, 60, 63, 0, 160, 250, null, null],
|
||||
[0, "오승아", null, 0, null, 78, 56, 66, 0, 160, 250, null, null],
|
||||
[0, "정윤혜", null, 0, null, 75, 59, 60, 0, 160, 250, null, null],
|
||||
[0, "조현영", null, 0, null, 79, 60, 63, 0, 160, 250, null, null],
|
||||
[0, "경리", null, 0, null, 80, 82, 64, 0, 160, 250, null, null],
|
||||
[0, "나뮤혜미", null, 0, null, 72, 67, 60, 0, 160, 250, null, null],
|
||||
[0, "나뮤소진", null, 0, null, 73, 63, 59, 0, 160, 250, null, null],
|
||||
[0, "금조", null, 0, null, 70, 60, 54, 0, 160, 250, null, null],
|
||||
[0, "손성아", null, 0, null, 69, 63, 60, 0, 160, 250, null, null],
|
||||
[0, "박민하", null, 0, null, 90, 73, 57, 0, 160, 250, null, null],
|
||||
[0, "웬디", null, 0, null, 84, 70, 95, 0, 160, 250, null, null],
|
||||
[0, "아이린", null, 0, null, 100, 75, 70, 0, 160, 250, null, null],
|
||||
[0, "슬기", null, 0, null, 93, 90, 76, 0, 160, 250, null, null],
|
||||
[0, "조이", null, 0, null, 89, 70, 84, 0, 160, 250, null, null],
|
||||
[0, "예리", null, 0, null, 86, 70, 77, 0, 160, 250, null, null],
|
||||
[0, "솔라", null, 0, null, 83, 62, 90, 0, 160, 250, null, null],
|
||||
[0, "문별", null, 0, null, 70, 63, 85, 0, 160, 250, null, null],
|
||||
[0, "휘인", null, 0, null, 67, 61, 84, 0, 160, 250, null, null],
|
||||
[0, "화사", null, 0, null, 51, 64, 83, 0, 160, 250, null, null],
|
||||
[0, "나연", null, 0, null, 78, 63, 70, 0, 160, 250, null, null],
|
||||
[0, "정연", null, 0, null, 78, 66, 68, 0, 160, 250, null, null],
|
||||
[0, "모모", null, 0, null, 80, 88, 63, 0, 160, 250, null, null],
|
||||
[0, "사나", null, 0, null, 83, 83, 64, 0, 160, 250, null, null],
|
||||
[0, "지효", null, 0, null, 73, 63, 86, 0, 160, 250, null, null],
|
||||
[0, "트와이스미나", null, 0, null, 79, 87, 66, 0, 160, 250, null, null],
|
||||
[0, "다현", null, 0, null, 78, 66, 68, 0, 160, 250, null, null],
|
||||
[0, "채영", null, 0, null, 70, 68, 67, 0, 160, 250, null, null],
|
||||
[0, "쯔위", null, 0, null, 100, 72, 61, 0, 160, 250, null, null],
|
||||
[0, "제아", null, 0, null, 64, 57, 89, 0, 160, 250, null, null],
|
||||
[0, "나르샤", null, 0, null, 63, 60, 80, 0, 160, 250, null, null],
|
||||
[0, "미료", null, 0, null, 60, 57, 82, 0, 160, 250, null, null],
|
||||
[0, "가인", null, 0, null, 67, 77, 80, 0, 160, 250, null, null],
|
||||
[0, "하나", null, 0, null, 66, 62, 64, 0, 160, 250, null, null],
|
||||
[0, "구구단미미", null, 0, null, 69, 60, 63, 0, 160, 250, null, null],
|
||||
[0, "구구단나영", null, 0, null, 80, 62, 83, 0, 160, 250, null, null],
|
||||
[0, "해빈", null, 0, null, 70, 60, 86, 0, 160, 250, null, null],
|
||||
[0, "소이", null, 0, null, 66, 61, 64, 0, 160, 250, null, null],
|
||||
[0, "샐리", null, 0, null, 68, 66, 67, 0, 160, 250, null, null],
|
||||
[0, "구구단미나", null, 0, null, 80, 70, 63, 0, 160, 250, null, null],
|
||||
[0, "구구단혜연", null, 0, null, 63, 64, 66, 0, 160, 250, null, null],
|
||||
[0, "최유정", null, 0, null, 70, 80, 67, 0, 160, 250, null, null],
|
||||
[0, "김도연", null, 0, null, 81, 81, 68, 0, 160, 250, null, null],
|
||||
[0, "지수연", null, 0, null, 64, 62, 74, 0, 160, 250, null, null],
|
||||
[0, "엘리", null, 0, null, 64, 60, 63, 0, 160, 250, null, null],
|
||||
[0, "세이", null, 0, null, 61, 61, 66, 0, 160, 250, null, null],
|
||||
[0, "루아", null, 0, null, 53, 59, 60, 0, 160, 250, null, null],
|
||||
[0, "리나", null, 0, null, 57, 60, 61, 0, 160, 250, null, null],
|
||||
[0, "루시", null, 0, null, 83, 68, 64, 0, 160, 250, null, null],
|
||||
[0, "이효리", null, 0, null, 90, 91, 83, 0, 160, 250, null, null],
|
||||
[0, "성유리", null, 0, null, 92, 62, 53, 0, 160, 250, null, null],
|
||||
[0, "이진", null, 0, null, 64, 54, 52, 0, 160, 250, null, null],
|
||||
[0, "옥주현", null, 0, null, 43, 61, 91, 0, 160, 250, null, null],
|
||||
[0, "유진", null, 0, null, 94, 63, 73, 0, 160, 250, null, null],
|
||||
[0, "바다", null, 0, null, 58, 66, 96, 0, 160, 250, null, null],
|
||||
[0, "설아", null, 0, null, 70, 61, 64, 0, 160, 250, null, null],
|
||||
[0, "엑시", null, 0, null, 73, 81, 70, 0, 160, 250, null, null],
|
||||
[0, "보나", null, 0, null, 76, 68, 60, 0, 160, 250, null, null],
|
||||
[0, "성소", null, 0, null, 80, 94, 63, 0, 160, 250, null, null],
|
||||
[0, "은서", null, 0, null, 68, 63, 60, 0, 160, 250, null, null],
|
||||
[0, "다영", null, 0, null, 71, 60, 62, 0, 160, 250, null, null],
|
||||
[0, "다원", null, 0, null, 65, 60, 60, 0, 160, 250, null, null],
|
||||
[0, "우주소녀수빈", null, 0, null, 66, 61, 61, 0, 160, 250, null, null],
|
||||
[0, "선의", null, 0, null, 70, 62, 59, 0, 160, 250, null, null],
|
||||
[0, "우주소녀여름", null, 0, null, 58, 60, 60, 0, 160, 250, null, null],
|
||||
[0, "미기", null, 0, null, 63, 63, 61, 0, 160, 250, null, null],
|
||||
[0, "루다", null, 0, null, 81, 67, 66, 0, 160, 250, null, null],
|
||||
[0, "연정", null, 0, null, 68, 58, 83, 0, 160, 250, null, null],
|
||||
[0, "윤채경", null, 0, null, 80, 64, 70, 0, 160, 250, null, null],
|
||||
[0, "김채원", null, 0, null, 67, 60, 63, 0, 160, 250, null, null],
|
||||
[0, "양예나", null, 0, null, 70, 61, 68, 0, 160, 250, null, null],
|
||||
[0, "레이첼", null, 0, null, 68, 62, 62, 0, 160, 250, null, null],
|
||||
[0, "이진솔", null, 0, null, 69, 56, 70, 0, 160, 250, null, null],
|
||||
[0, "박규리", null, 0, null, 80, 76, 83, 0, 160, 250, null, null],
|
||||
[0, "한승연", null, 0, null, 77, 70, 69, 0, 160, 250, null, null],
|
||||
[0, "허영지", null, 0, null, 70, 66, 66, 0, 160, 250, null, null],
|
||||
[0, "니콜", null, 0, null, 69, 74, 73, 0, 160, 250, null, null],
|
||||
[0, "강지영", null, 0, null, 63, 63, 57, 0, 160, 250, null, null],
|
||||
[0, "레이나", null, 0, null, 76, 66, 74, 0, 160, 250, null, null],
|
||||
[0, "나나", null, 0, null, 90, 72, 64, 0, 160, 250, null, null],
|
||||
[0, "이영", null, 0, null, 69, 61, 67, 0, 160, 250, null, null],
|
||||
[0, "리지", null, 0, null, 68, 62, 77, 0, 160, 250, null, null],
|
||||
[0, "가은", null, 0, null, 60, 59, 63, 0, 160, 250, null, null],
|
||||
[0, "가희", null, 0, null, 67, 90, 62, 0, 160, 250, null, null],
|
||||
[0, "전효성", null, 0, null, 88, 87, 84, 0, 160, 250, null, null],
|
||||
[0, "송가은", null, 0, null, 80, 68, 77, 0, 160, 250, null, null],
|
||||
[0, "정하나", null, 0, null, 68, 63, 70, 0, 160, 250, null, null],
|
||||
[0, "한선화", null, 0, null, 79, 59, 71, 0, 160, 250, null, null],
|
||||
[0, "베이비소울", null, 0, null, 71, 60, 70, 0, 160, 250, null, null],
|
||||
[0, "유지애", null, 0, null, 70, 59, 71, 0, 160, 250, null, null],
|
||||
[0, "이미주", null, 0, null, 81, 57, 76, 0, 160, 250, null, null],
|
||||
[0, "Kei", null, 0, null, 87, 70, 83, 0, 160, 250, null, null],
|
||||
[0, "JIN", null, 0, null, 68, 63, 82, 0, 160, 250, null, null],
|
||||
[0, "류수정", null, 0, null, 69, 62, 72, 0, 160, 250, null, null],
|
||||
[0, "태연", null, 0, null, 87, 64, 90, 0, 160, 250, null, null],
|
||||
[0, "써니", null, 0, null, 79, 68, 78, 0, 160, 250, null, null],
|
||||
[0, "티파니", null, 0, null, 84, 66, 81, 0, 160, 250, null, null],
|
||||
[0, "효연", null, 0, null, 40, 100, 42, 0, 160, 250, null, null],
|
||||
[0, "유리", null, 0, null, 82, 84, 67, 0, 160, 250, null, null],
|
||||
[0, "수영", null, 0, null, 69, 68, 73, 0, 160, 250, null, null],
|
||||
[0, "서현", null, 0, null, 77, 64, 79, 0, 160, 250, null, null],
|
||||
[0, "제시카", null, 0, null, 81, 67, 86, 0, 160, 250, null, null],
|
||||
[0, "LE", null, 0, null, 63, 63, 80, 0, 160, 250, null, null],
|
||||
[0, "정화", null, 0, null, 80, 61, 61, 0, 160, 250, null, null],
|
||||
[0, "하니", null, 0, null, 87, 83, 69, 0, 160, 250, null, null],
|
||||
[0, "솔지", null, 0, null, 76, 63, 93, 0, 160, 250, null, null],
|
||||
[0, "혜린", null, 0, null, 86, 60, 86, 0, 160, 250, null, null],
|
||||
[0, "유니스", null, 0, null, 75, 58, 73, 0, 160, 250, null, null],
|
||||
[0, "기희현", null, 0, null, 86, 66, 70, 0, 160, 250, null, null],
|
||||
[0, "다이아제니", null, 0, null, 71, 66, 68, 0, 160, 250, null, null],
|
||||
[0, "정채연", null, 0, null, 79, 63, 66, 0, 160, 250, null, null],
|
||||
[0, "은진", null, 0, null, 66, 67, 63, 0, 160, 250, null, null],
|
||||
[0, "예빈", null, 0, null, 68, 65, 67, 0, 160, 250, null, null],
|
||||
[0, "은채", null, 0, null, 61, 58, 60, 0, 160, 250, null, null],
|
||||
[0, "주은", null, 0, null, 70, 59, 65, 0, 160, 250, null, null],
|
||||
[0, "솜이", null, 0, null, 70, 66, 61, 0, 160, 250, null, null],
|
||||
[0, "예린", null, 0, null, 74, 73, 70, 0, 160, 250, null, null],
|
||||
[0, "유주", null, 0, null, 65, 71, 85, 0, 160, 250, null, null],
|
||||
[0, "신비", null, 0, null, 77, 80, 74, 0, 160, 250, null, null],
|
||||
[0, "엄지", null, 0, null, 59, 69, 67, 0, 160, 250, null, null],
|
||||
[0, "세리", null, 0, null, 74, 73, 80, 0, 160, 250, null, null],
|
||||
[0, "아영", null, 0, null, 78, 76, 64, 0, 160, 250, null, null],
|
||||
[0, "우희", null, 0, null, 77, 77, 63, 0, 160, 250, null, null],
|
||||
[0, "달샤벳수빈", null, 0, null, 79, 74, 67, 0, 160, 250, null, null],
|
||||
[0, "효은", null, 0, null, 72, 71, 69, 0, 160, 250, null, null],
|
||||
[0, "민희", null, 0, null, 69, 73, 66, 0, 160, 250, null, null],
|
||||
[0, "소영", null, 0, null, 64, 70, 65, 0, 160, 250, null, null],
|
||||
[0, "혜빈", null, 0, null, 62, 59, 66, 0, 160, 250, null, null],
|
||||
[0, "연우", null, 0, null, 76, 61, 63, 0, 160, 250, null, null],
|
||||
[0, "제인", null, 0, null, 72, 67, 61, 0, 160, 250, null, null],
|
||||
[0, "모모랜드태하", null, 0, null, 60, 60, 60, 0, 160, 250, null, null],
|
||||
[0, "나윤", null, 0, null, 62, 61, 63, 0, 160, 250, null, null],
|
||||
[0, "데이지", null, 0, null, 68, 63, 59, 0, 160, 250, null, null],
|
||||
[0, "아인", null, 0, null, 72, 57, 69, 0, 160, 250, null, null],
|
||||
[0, "주이", null, 0, null, 40, 74, 56, 0, 160, 250, null, null],
|
||||
[0, "낸시", null, 0, null, 80, 69, 67, 0, 160, 250, null, null],
|
||||
[0, "선예", null, 0, null, 80, 61, 78, 0, 160, 250, null, null],
|
||||
[0, "선미", null, 0, null, 80, 82, 70, 0, 160, 250, null, null],
|
||||
[0, "유빈", null, 0, null, 76, 69, 77, 0, 160, 250, null, null],
|
||||
[0, "혜림", null, 0, null, 69, 63, 67, 0, 160, 250, null, null],
|
||||
[0, "예은", null, 0, null, 70, 61, 80, 0, 160, 250, null, null],
|
||||
[0, "설리", null, 0, null, 85, 41, 43, 0, 160, 250, null, null],
|
||||
[0, "빅토리아", null, 0, null, 89, 88, 80, 0, 160, 250, null, null],
|
||||
[0, "크리스탈", null, 0, null, 93, 72, 71, 0, 160, 250, null, null],
|
||||
[0, "엠버", null, 0, null, 65, 69, 74, 0, 160, 250, null, null],
|
||||
[0, "루나", null, 0, null, 76, 70, 92, 0, 160, 250, null, null],
|
||||
[0, "재이", null, 0, null, 80, 70, 70, 0, 160, 250, null, null],
|
||||
[0, "린지", null, 0, null, 69, 68, 71, 0, 160, 250, null, null],
|
||||
[0, "예지", null, 0, null, 58, 63, 78, 0, 160, 250, null, null],
|
||||
[0, "피에스타혜미", null, 0, null, 66, 54, 59, 0, 160, 250, null, null],
|
||||
[0, "차오루", null, 0, null, 78, 73, 67, 0, 160, 250, null, null],
|
||||
[0, "민영", null, 0, null, 76, 72, 81, 0, 160, 250, null, null],
|
||||
[0, "브브걸유정", null, 0, null, 64, 73, 67, 0, 160, 250, null, null],
|
||||
[0, "은지", null, 0, null, 70, 73, 68, 0, 160, 250, null, null],
|
||||
[0, "브브걸유나", null, 0, null, 66, 76, 66, 0, 160, 250, null, null],
|
||||
[0, "하윤", null, 0, null, 71, 78, 69, 0, 160, 250, null, null],
|
||||
[0, "베리굿태하", null, 0, null, 78, 75, 78, 0, 160, 250, null, null],
|
||||
[0, "조현", null, 0, null, 79, 78, 72, 0, 160, 250, null, null],
|
||||
[0, "서율", null, 0, null, 68, 63, 62, 0, 160, 250, null, null],
|
||||
[0, "다예", null, 0, null, 70, 62, 64, 0, 160, 250, null, null],
|
||||
[0, "세형", null, 0, null, 72, 70, 59, 0, 160, 250, null, null],
|
||||
[0, "고운", null, 0, null, 77, 71, 68, 0, 160, 250, null, null],
|
||||
[0, "간미연", null, 0, null, 77, 56, 73, 0, 160, 250, null, null],
|
||||
[0, "김이지", null, 0, null, 70, 63, 61, 0, 160, 250, null, null],
|
||||
[0, "윤은혜", null, 0, null, 72, 61, 63, 0, 160, 250, null, null],
|
||||
[0, "심은진", null, 0, null, 75, 60, 70, 0, 160, 250, null, null],
|
||||
[0, "이희진", null, 0, null, 63, 54, 78, 0, 160, 250, null, null],
|
||||
[0, "유지", null, 0, null, 72, 59, 73, 0, 160, 250, null, null],
|
||||
[0, "다혜", null, 0, null, 70, 67, 63, 0, 160, 250, null, null],
|
||||
[0, "베스티혜연", null, 0, null, 64, 63, 70, 0, 160, 250, null, null],
|
||||
[0, "해령", null, 0, null, 81, 70, 76, 0, 160, 250, null, null],
|
||||
[0, "김보아", null, 0, null, 69, 63, 86, 0, 160, 250, null, null],
|
||||
[0, "박시현", null, 0, null, 73, 62, 66, 0, 160, 250, null, null],
|
||||
[0, "양지원", null, 0, null, 84, 70, 69, 0, 160, 250, null, null],
|
||||
[0, "나래", null, 0, null, 69, 65, 79, 0, 160, 250, null, null],
|
||||
[0, "김보형", null, 0, null, 67, 61, 83, 0, 160, 250, null, null],
|
||||
[0, "주비", null, 0, null, 62, 73, 82, 0, 160, 250, null, null],
|
||||
[0, "미성", null, 0, null, 68, 71, 84, 0, 160, 250, null, null],
|
||||
[0, "코타", null, 0, null, 57, 73, 80, 0, 160, 250, null, null],
|
||||
[0, "금비라", null, 0, null, 63, 65, 87, 0, 160, 250, null, null],
|
||||
[0, "김연지", null, 0, null, 40, 54, 90, 0, 160, 250, null, null],
|
||||
[0, "이보람", null, 0, null, 61, 56, 87, 0, 160, 250, null, null],
|
||||
[0, "남규리", null, 0, null, 87, 55, 72, 0, 160, 250, null, null],
|
||||
[0, "다나", null, 0, null, 80, 70, 86, 0, 160, 250, null, null],
|
||||
[0, "린아", null, 0, null, 86, 68, 70, 0, 160, 250, null, null],
|
||||
[0, "선데이", null, 0, null, 72, 77, 66, 0, 160, 250, null, null],
|
||||
[0, "스테파니", null, 0, null, 76, 92, 63, 0, 160, 250, null, null],
|
||||
[0, "박정아", null, 0, null, 70, 63, 81, 0, 160, 250, null, null],
|
||||
[0, "하주연", null, 0, null, 52, 62, 63, 0, 160, 250, null, null],
|
||||
[0, "박세미", null, 0, null, 60, 59, 57, 0, 160, 250, null, null],
|
||||
[0, "김예원", null, 0, null, 62, 57, 58, 0, 160, 250, null, null],
|
||||
[0, "서인영", null, 0, null, 73, 78, 68, 0, 160, 250, null, null],
|
||||
[0, "차희", null, 0, null, 71, 59, 80, 0, 160, 250, null, null],
|
||||
[0, "멜로디유민", null, 0, null, 79, 55, 78, 0, 160, 250, null, null],
|
||||
[0, "예인", null, 0, null, 78, 63, 78, 0, 160, 250, null, null],
|
||||
[0, "여은", null, 0, null, 70, 57, 80, 0, 160, 250, null, null],
|
||||
[0, "오승희", null, 0, null, 73, 60, 69, 0, 160, 250, null, null],
|
||||
[0, "최유진", null, 0, null, 76, 63, 67, 0, 160, 250, null, null],
|
||||
[0, "장승연", null, 0, null, 68, 72, 61, 0, 160, 250, null, null],
|
||||
[0, "SORN", null, 0, null, 64, 73, 62, 0, 160, 250, null, null],
|
||||
[0, "장예은", null, 0, null, 70, 76, 66, 0, 160, 250, null, null],
|
||||
[0, "엘키", null, 0, null, 78, 71, 60, 0, 160, 250, null, null],
|
||||
[0, "권은빈", null, 0, null, 76, 73, 68, 0, 160, 250, null, null],
|
||||
[0, "프리스틴나영", null, 0, null, 73, 75, 70, 0, 160, 250, null, null],
|
||||
[0, "로아", null, 0, null, 68, 71, 61, 0, 160, 250, null, null],
|
||||
[0, "유하", null, 0, null, 70, 68, 65, 0, 160, 250, null, null],
|
||||
[0, "은우", null, 0, null, 72, 67, 63, 0, 160, 250, null, null],
|
||||
[0, "레나", null, 0, null, 73, 66, 73, 0, 160, 250, null, null],
|
||||
[0, "결경", null, 0, null, 88, 77, 59, 0, 160, 250, null, null],
|
||||
[0, "예하나", null, 0, null, 63, 65, 65, 0, 160, 250, null, null],
|
||||
[0, "성연", null, 0, null, 69, 71, 60, 0, 160, 250, null, null],
|
||||
[0, "시연", null, 0, null, 66, 62, 66, 0, 160, 250, null, null],
|
||||
[0, "카일라", null, 0, null, 60, 69, 60, 0, 160, 250, null, null],
|
||||
[0, "지유", null, 0, null, 72, 63, 66, 0, 160, 250, null, null],
|
||||
[0, "라니아혜미", null, 0, null, 66, 63, 61, 0, 160, 250, null, null],
|
||||
[0, "지은", null, 0, null, 61, 60, 56, 0, 160, 250, null, null],
|
||||
[0, "라니아유민", null, 0, null, 68, 63, 66, 0, 160, 250, null, null],
|
||||
[0, "따보", null, 0, null, 58, 60, 57, 0, 160, 250, null, null],
|
||||
[0, "제니", null, 0, null, 62, 51, 81, 0, 160, 250, null, null],
|
||||
[0, "건지", null, 0, null, 72, 53, 84, 0, 160, 250, null, null],
|
||||
[0, "서린", null, 0, null, 66, 50, 83, 0, 160, 250, null, null],
|
||||
[0, "나리", null, 0, null, 84, 86, 80, 0, 160, 250, null, null],
|
||||
[0, "지애", null, 0, null, 63, 81, 72, 0, 160, 250, null, null],
|
||||
[0, "우주", null, 0, null, 67, 86, 69, 0, 160, 250, null, null],
|
||||
[0, "와썹수진", null, 0, null, 64, 80, 73, 0, 160, 250, null, null],
|
||||
[0, "타히티민재", null, 0, null, 62, 63, 66, 0, 160, 250, null, null],
|
||||
[0, "미소", null, 0, null, 63, 60, 61, 0, 160, 250, null, null],
|
||||
[0, "타히티지수", null, 0, null, 61, 57, 67, 0, 160, 250, null, null],
|
||||
[0, "아리", null, 0, null, 72, 69, 64, 0, 160, 250, null, null],
|
||||
[0, "제리", null, 0, null, 66, 61, 68, 0, 160, 250, null, null],
|
||||
[0, "아유미", null, 0, null, 80, 68, 69, 0, 160, 250, null, null],
|
||||
[0, "혜승", null, 0, null, 68, 57, 71, 0, 160, 250, null, null],
|
||||
[0, "하린", null, 0, null, 70, 60, 66, 0, 160, 250, null, null],
|
||||
[0, "황정음", null, 0, null, 79, 55, 72, 0, 160, 250, null, null],
|
||||
[0, "슈가수진", null, 0, null, 83, 54, 63, 0, 160, 250, null, null],
|
||||
[0, "산다라박", null, 0, null, 80, 66, 64, 0, 160, 250, null, null],
|
||||
[0, "씨엘", null, 0, null, 40, 88, 77, 0, 160, 250, null, null],
|
||||
[0, "박봄", null, 0, null, 55, 60, 73, 0, 160, 250, null, null],
|
||||
[0, "공민지", null, 0, null, 40, 87, 70, 0, 160, 250, null, null],
|
||||
[0, "지아", null, 0, null, 68, 83, 70, 0, 160, 250, null, null],
|
||||
[0, "민", null, 0, null, 62, 82, 73, 0, 160, 250, null, null],
|
||||
[0, "페이", null, 0, null, 74, 87, 70, 0, 160, 250, null, null],
|
||||
[0, "앤씨아", null, 0, null, 74, 62, 70, 0, 160, 250, null, null],
|
||||
[0, "윤하", null, 0, null, 78, 53, 86, 0, 160, 250, null, null],
|
||||
[0, "아이비", null, 0, null, 87, 82, 87, 0, 160, 250, null, null],
|
||||
[0, "코코", null, 0, null, 80, 60, 78, 0, 160, 250, null, null],
|
||||
[0, "소리", null, 0, null, 78, 60, 78, 0, 160, 250, null, null],
|
||||
[0, "밴", null, 0, null, 79, 53, 90, 0, 160, 250, null, null],
|
||||
[0, "김청하", null, 0, null, 68, 94, 72, 0, 160, 250, null, null],
|
||||
[0, "장나라", null, 0, null, 84, 62, 80, 0, 160, 250, null, null],
|
||||
[0, "엘린", null, 0, null, 71, 61, 63, 0, 160, 250, null, null],
|
||||
[0, "소율", null, 0, null, 70, 66, 64, 0, 160, 250, null, null],
|
||||
[0, "금미", null, 0, null, 73, 63, 61, 0, 160, 250, null, null],
|
||||
[0, "크레용팝초아", null, 0, null, 72, 67, 65, 0, 160, 250, null, null],
|
||||
[0, "웨이", null, 0, null, 70, 65, 60, 0, 160, 250, null, null],
|
||||
[0, "쥬니엘", null, 0, null, 80, 46, 81, 0, 160, 250, null, null],
|
||||
[0, "이민", null, 0, null, 64, 50, 83, 0, 160, 250, null, null],
|
||||
[0, "크리스탈채", null, 0, null, 72, 51, 84, 0, 160, 250, null, null],
|
||||
[0, "윤미래", null, 0, null, 57, 80, 102, 0, 160, 250, null, null],
|
||||
[0, "애니", null, 0, null, 58, 92, 88, 0, 160, 250, null, null],
|
||||
[0, "NS윤지", null, 0, null, 86, 84, 78, 0, 160, 250, null, null]
|
||||
],
|
||||
"general_ex":[
|
||||
],
|
||||
|
||||
@@ -0,0 +1,711 @@
|
||||
{
|
||||
"title": "【가상모드15】 애니집결",
|
||||
"startYear": 180,
|
||||
"history": [
|
||||
"<C>●</>180년 1월:<L><b>【이벤트】</b></>제작자: 강서유서.",
|
||||
"<C>●</>180년 1월:<L><b>【가상모드15】</b>애니집결!</>",
|
||||
"<C>●</>180년 1월:<L><b>【이벤트】</b></>애니의 등장인물들이 한곳에서 자웅을 겨룬다!"
|
||||
],
|
||||
"stat": {
|
||||
"total": 220,
|
||||
"min": 40,
|
||||
"max": 95,
|
||||
"npcMax": 95
|
||||
},
|
||||
"iconPath": "애니집결",
|
||||
"fiction": 1,
|
||||
"nation":[
|
||||
|
||||
],
|
||||
"diplomacy":[],
|
||||
"general":[
|
||||
[0, "기타노시오리", null, 0, null, 96, 92, 93, 0, 160, 333, "왕좌", null],
|
||||
[0, "마도카", null, 0, null, 86, 50, 77, 0, 160, 300, null, "집중", "친구들에겐 비밀이야★"],
|
||||
[0, "마미", null, 0, null, 70, 74, 60, 0, 165, 240, null, null, "이젠 아무것도 두렵지 않아"],
|
||||
[0, "호무라", null, 0, null, 76, 64, 80, 0, 160, 333, null, "집중", "이게바로…사랑이야.."],
|
||||
[0, "쿄코", null, 0, null, 68, 77, 54, 0, 160, 240, null, null],
|
||||
[0, "미키사야카", null, 0, null, 80, 77, 62, 0, 160, 240, null, null, "나는 정말…바보"],
|
||||
[0, "나기사", null, 0, null, 72, 80, 70, 0, 160, 240, null, null, "나기사는 단지 치즈가 먹고싶엇던것 뿐이에요!"],
|
||||
[0, "오리코", null, 0, null, 65, 33, 94, 0, 160, 240, null, null],
|
||||
[0, "쿠레키리카", null, 0, null, 50, 80, 50, 0, 160, 240, null, null],
|
||||
[0, "유마", null, 0, null, 69, 74, 70, 0, 160, 333, null, null],
|
||||
[0, "큐베", null, 0, null, 22, 14, 4, 0, 160, 333, null, null, "나랑 계약해서 마녀가 되어줘!"],
|
||||
[0, "사사", null, 0, null, 64, 78, 72, 0, 160, 333, null, null],
|
||||
[0, "코이토", null, 0, null, 65, 70, 74, 0, 160, 333, null, null],
|
||||
[0, "코마키", null, 0, null, 80, 75, 49, 0, 160, 333, null, null],
|
||||
[0, "파브", null, 0, null, 40, 3, 32, 0, 160, 300, null, null, "지금부터 마을의 마법소녀를 반으로 줄여야 한다퐁!"],
|
||||
[0, "스노우화이트", null, 0, null, 68, 83, 79, 0, 160, 333, null, "돌격", "사람들을 도울수 있는게 기뻐서!"],
|
||||
[0, "프흐레", null, 0, null, 84, 25, 100, 0, 160, 333, null, "집중", "괜찮아...... 그리고 데류지 에게 전달해 줘...... 원하는 나의 요구"],
|
||||
[0, "섀도게일", null, 0, null, 52, 75, 74, 0, 160, 333, null, null],
|
||||
[0, "7753.0", null, 0, null, 64, 19, 84, 0, 160, 333, null, null, "전 인사부문소속의 7753이라고 합니다"],
|
||||
[0, "인페르노", null, 0, null, 79, 85, 60, 0, 160, 399, null, null, "저녀석…해버려줘…마법소녀,,,사냥,,,"],
|
||||
[0, "룰러", null, 0, null, 70, 30, 80, 0, 160, 333, null, null, "룰러의 이름으로 명한다"],
|
||||
[0, "네무링", null, 0, null, 71, 63, 58, 0, 160, 333, null, null, "공주님이 되어버리면 되는거야."],
|
||||
[0, "크랑테일", null, 0, null, 75, 86, 72, 0, 160, 333, null, null],
|
||||
[0, "리플", null, 0, null, 59, 81, 70, 0, 160, 299, null, null],
|
||||
[0, "글라시아네", null, 0, null, 42, 20, 85, 0, 160, 333, null, null, "죽이지마! 죽고싶지 않아!!"],
|
||||
[0, "페치카", null, 0, null, 71, 33, 75, 0, 160, 333, null, null, "그래도…이번엔 누군가를 구할수있어서..행복해요…"],
|
||||
[0, "하무엘", null, 0, null, 73, 23, 65, 0, 160, 333, null, null, "푸크푹이 유적안으로..윽…들어가고…있습니다…"],
|
||||
[0, "타마", null, 0, null, 66, 81, 27, 0, 160, 300, null, null],
|
||||
[0, "파르", null, 0, null, 30, 10, 74, 0, 160, 300, null, null, "게임마스터와 마스코트간에 규칙소통의 차이가 있엇퐁."],
|
||||
[0, "나노하", null, 0, null, 85, 105, 85, 0, 160, 300, "패권", "위압", "잠깐 머리좀 식힐까?"],
|
||||
[0, "페이트", null, 0, null, 70, 77, 73, 0, 160, 300, null, null],
|
||||
[0, "비비오", null, 0, null, 75, 70, 70, 0, 160, 300, null, null, "엄마를 돌려줘!!"],
|
||||
[0, "린디", null, 0, null, 78, 50, 50, 0, 160, 300, null, null],
|
||||
[0, "크로노", null, 0, null, 73, 27, 58, 0, 160, 300, null, null],
|
||||
[0, "스밥팅", null, 0, null, 53, 50, 64, 0, 160, 300, null, null],
|
||||
[0, "긴카", null, 0, null, 73, 80, 52, 0, 160, 300, null, null],
|
||||
[0, "캐로", null, 0, null, 71, 63, 74, 0, 160, 300, null, null],
|
||||
[0, "에리오", null, 0, null, 65, 68, 72, 0, 160, 300, null, null],
|
||||
[0, "티아나", null, 0, null, 72, 82, 78, 0, 160, 300, null, null],
|
||||
[0, "하야테", null, 0, null, 74, 55, 85, 0, 160, 300, null, "환술"],
|
||||
[0, "시그넘", null, 0, null, 75, 78, 79, 0, 160, 300, null, null],
|
||||
[0, "비타", null, 0, null, 70, 85, 50, 0, 160, 300, null, null],
|
||||
[0, "샤멀", null, 0, null, 55, 42, 80, 0, 160, 300, null, null],
|
||||
[0, "노베", null, 0, null, 72, 80, 70, 0, 160, 300, null, null],
|
||||
[0, "칭크", null, 0, null, 76, 84, 75, 0, 160, 300, null, null],
|
||||
[0, "콰트르", null, 0, null, 51, 39, 92, 0, 160, 300, null, null],
|
||||
[0, "스칼리에티", null, 0, null, 27, 12, 94, 0, 160, 300, null, "발명", "나는 너의 아빠쯤 되려나? 페이트."],
|
||||
[0, "유노", null, 0, null, 64, 45, 81, 0, 160, 300, null, null],
|
||||
[0, "쟈피라", null, 0, null, 20, 40, 65, 0, 160, 300, null, null],
|
||||
[0, "셰인", null, 0, null, 43, 67, 30, 0, 160, 300, null, null],
|
||||
[0, "이리야", null, 0, null, 79, 72, 67, 0, 160, 300, null, null, "소중한 내 친구니까!!"],
|
||||
[0, "미유", null, 0, null, 76, 82, 84, 0, 160, 300, null, null],
|
||||
[0, "쿠로", null, 0, null, 60, 73, 70, 0, 160, 300, null, null],
|
||||
[0, "토오사카린", null, 0, null, 72, 62, 83, 0, 160, 300, null, null],
|
||||
[0, "루비아", null, 0, null, 56, 40, 50, 0, 160, 300, null, "상재"],
|
||||
[0, "시로", null, 0, null, 78, 40, 70, 0, 160, 300, null, null],
|
||||
[0, "타이가", null, 0, null, 55, 50, 40, 0, 160, 300, null, null],
|
||||
[0, "루비", null, 0, null, 49, 20, 70, 0, 160, 300, null, "척사"],
|
||||
[0, "사파이어", null, 0, null, 49, 55, 86, 0, 160, 300, null, null],
|
||||
[0, "세라", null, 0, null, 50, 77, 30, 0, 160, 300, null, null],
|
||||
[0, "리즈", null, 0, null, 50, 80, 30, 0, 160, 300, null, null],
|
||||
[0, "아이리스필", null, 0, null, 80, 45, 79, 0, 160, 300, null, null],
|
||||
[0, "키리츠구", null, 0, null, 90, 95, 89, 0, 160, 300, null, null, "나는 너를 죽이고…세계를 구한다….!"],
|
||||
[0, "젤레치", null, 0, null, 57, 52, 99, 0, 100, 300, null, null],
|
||||
[0, "로드 엘멜로이", null, 0, null, 75, 43, 90, 0, 160, 300, null, null, "아니,나는 그의 신하다"],
|
||||
[0, "클라나기사", null, 0, null, 85, 30, 85, 0, 160, 300, null, null, "경단~ 경단~ 경단 경단 경단 경단 대가족~"],
|
||||
[0, "토모야", null, 0, null, 85, 84, 75, 0, 160, 300, null, null],
|
||||
[0, "후지바야시쿄", null, 0, null, 80, 70, 69, 0, 160, 300, null, "무쌍", "요헤이! 또 그러는 거야??"],
|
||||
[0, "후지바야시료", null, 0, null, 74, 30, 77, 0, 160, 300, null, null],
|
||||
[0, "토모요", null, 0, null, 80, 72, 65, 0, 160, 300, null, "무쌍"],
|
||||
[0, "캇페이", null, 0, null, 75, 55, 18, 0, 160, 300, null, null],
|
||||
[0, "요헤이", null, 0, null, 69, 60, 30, 0, 160, 300, null, "견고", "우오오오오오오!!!"],
|
||||
[0, "스노하라메이", null, 0, null, 70, 70, 70, 0, 160, 300, null, null, "저희 못난 오빠떔에 고생이 많으십니다"],
|
||||
[0, "사나에", null, 0, null, 80, 40, 75, 0, 160, 300, null, null],
|
||||
[0, "아키오", null, 0, null, 74, 86, 70, 0, 160, 300, null, null],
|
||||
[0, "나오유키", null, 0, null, 70, 55, 55, 0, 160, 300, null, null, "토모야.. 고맙다."],
|
||||
[0, "코토미", null, 0, null, 74, 52, 78, 0, 160, 300, null, null],
|
||||
[0, "우시오", null, 0, null, 75, 60, 78, 0, 160, 300, null, null, "안녕.. 아빠…"],
|
||||
[0, "리에", null, 0, null, 77, 37, 82, 0, 160, 300, null, null],
|
||||
[0, "미야자와", null, 0, null, 78, 30, 85, 0, 160, 300, null, null],
|
||||
[0, "시마카츠키", null, 0, null, 72, 49, 63, 0, 160, 300, null, null],
|
||||
[0, "사가라미사에", null, 0, null, 85, 87, 85, 0, 160, 300, null, "위압"],
|
||||
[0, "코즈키미유", null, 0, null, 77, 73, 64, 0, 160, 300, null, null, "혹시 루에게 고백이라도 한거니?"],
|
||||
[0, "카나타", null, 0, null, 75, 70, 69, 0, 160, 300, null, null],
|
||||
[0, "사이온지미우", null, 0, null, 2, 9, 4, 0, 160, 300, null, null, "엄마! 쉿! 쉬잇!!"],
|
||||
[0, "크리스틴", null, 0, null, 67, 80, 60, 0, 160, 300, null, "무쌍", "미유랑 카나타가 붙어있어…."],
|
||||
[0, "모모카", null, 0, null, 80, 60, 55, 0, 160, 300, null, null, "마이 달링! 루!"],
|
||||
[0, "산타", null, 0, null, 54, 10, 30, 0, 160, 300, "유지", null],
|
||||
[0, "쿠리타", null, 0, null, 46, 14, 10, 0, 160, 300, null, null],
|
||||
[0, "고니시아야", null, 0, null, 67, 15, 77, 0, 160, 300, null, null],
|
||||
[0, "루", null, 0, null, 81, 50, 73, 0, 160, 300, null, null, "다아!★"],
|
||||
[0, "완냐", null, 0, null, 69, 48, 75, 0, 160, 300, null, null],
|
||||
[0, "야마무라미캉", null, 0, null, 75, 64, 30, 0, 160, 300, null, null],
|
||||
[0, "야보시세이야", null, 0, null, 70, 50, 70, 0, 160, 300, null, null],
|
||||
[0, "야보시 루이", null, 0, null, 75, 73, 71, 0, 160, 300, null, null],
|
||||
[0, "도리안", null, 0, null, 65, 49, 86, 0, 160, 300, null, "발명"],
|
||||
[0, "키위", null, 0, null, 66, 33, 70, 0, 160, 300, null, "상재"],
|
||||
[0, "구아바", null, 0, null, 45, 49, 51, 0, 160, 300, null, null],
|
||||
[0, "히카리가오가", null, 0, null, 70, 49, 77, 0, 160, 300, null, null],
|
||||
[0, "코즈키유우", null, 0, null, 85, 33, 75, 0, 160, 300, null, "발명"],
|
||||
[0, "코즈키미키", null, 0, null, 88, 33, 80, 0, 160, 300, null, null],
|
||||
[0, "란", null, 0, null, 80, 72, 40, 0, 160, 300, null, null],
|
||||
[0, "하루네아이라", null, 0, null, 84, 45, 74, 0, 160, 300, null, null, "오로라~~~~~~~~~라이징~ 드리임!"],
|
||||
[0, "리즈무", null, 0, null, 80, 25, 82, 0, 160, 300, null, null],
|
||||
[0, "미온", null, 0, null, 78, 25, 90, 0, 160, 300, null, null],
|
||||
[0, "아세치쿄코", null, 0, null, 76, 30, 82, 0, 160, 300, null, "상재"],
|
||||
[0, "쥰매니저", null, 0, null, 75, 65, 75, 0, 160, 300, null, null],
|
||||
[0, "미스터K", null, 0, null, 55, 20, 70, 0, 160, 300, null, null],
|
||||
[0, "아세치킨타로", null, 0, null, 11, 22, 78, 0, 160, 300, null, null],
|
||||
[0, "세레나", null, 0, null, 78, 50, 82, 0, 160, 300, null, "상재"],
|
||||
[0, "카논", null, 0, null, 79, 50, 81, 0, 160, 300, null, null],
|
||||
[0, "카나메", null, 0, null, 73, 23, 92, 0, 160, 300, null, null],
|
||||
[0, "소나타", null, 0, null, 70, 35, 84, 0, 160, 300, null, null],
|
||||
[0, "아게하미아", null, 0, null, 35, 9, 4, 0, 160, 300, null, null],
|
||||
[0, "안경언니", null, 0, null, 74, 66, 77, 0, 160, 300, null, null, "프리즘스타의 세계에 온것을 환영해."],
|
||||
[0, "토가시카리나", null, 0, null, 89, 23, 81, 0, 160, 300, null, null],
|
||||
[0, "혜인", null, 0, null, 78, 50, 87, 0, 160, 300, null, null],
|
||||
[0, "하루네이츠키", null, 0, null, 85, 30, 85, 0, 160, 300, null, null],
|
||||
[0, "쇼우", null, 0, null, 87, 90, 78, 0, 160, 300, null, null],
|
||||
[0, "오로라드림히비키", null, 0, null, 85, 33, 80, 0, 160, 300, null, null],
|
||||
[0, "와타루", null, 0, null, 80, 11, 80, 0, 160, 300, null, null],
|
||||
[0, "펭귄선생", null, 0, null, 55, 44, 49, 0, 160, 300, null, null],
|
||||
[0, "카미죠토우마", null, 0, null, 70, 80, 50, 0, 160, 300, null, null, "불행해…"],
|
||||
[0, "인덱스", null, 0, null, 30, 10, 89, 0, 160, 300, null, null],
|
||||
[0, "미사카미코토", null, 0, null, 78, 93, 88, 0, 160, 300, null, null, "찌릿찌릿이라고 부르지마!!"],
|
||||
[0, "엑셀레이터", null, 0, null, 64, 110, 90, 0, 160, 300, null, "위압", "압축! 압축! 공기를 압축!"],
|
||||
[0, "시스터즈", null, 0, null, 44, 65, 50, 0, 160, 300, null, null, "~라고 미사카는 말합니다"],
|
||||
[0, "라스트오더", null, 0, null, 75, 10, 90, 0, 160, 300, null, null, "미사카는 미사카는 말해보기도 하고~"],
|
||||
[0, "카키네", null, 0, null, 44, 98, 22, 0, 160, 222, null, null],
|
||||
[0, "무기농시즈리", null, 0, null, 78, 90, 80, 0, 160, 300, null, null],
|
||||
[0, "쇼쿠호미사키", null, 0, null, 77, 30, 60, 0, 160, 300, null, null],
|
||||
[0, "키하라겐세이", null, 0, null, 7, 9, 85, 0, 160, 300, null, "발명"],
|
||||
[0, "아레이스타", null, 0, null, 67, 39, 90, 0, 160, 300, null, null],
|
||||
[0, "무스지메", null, 0, null, 57, 49, 75, 0, 160, 300, null, null],
|
||||
[0, "시라이쿠로코", null, 0, null, 56, 29, 60, 0, 160, 300, null, "견고", "오네사마!!!!!!!!!!!!!!!!!!!!!!!!!"],
|
||||
[0, "시아게", null, 0, null, 67, 40, 30, 0, 160, 300, null, null],
|
||||
[0, "사텐", null, 0, null, 55, 94, 30, 0, 160, 300, null, "무쌍"],
|
||||
[0, "우이하루", null, 0, null, 33, 15, 89, 0, 160, 300, null, null],
|
||||
[0, "헤븐캔슬러", null, 0, null, 79, 10, 90, 0, 160, 300, "은둔", "의술"],
|
||||
[0, "칸자키", null, 0, null, 70, 92, 75, 0, 160, 300, null, null],
|
||||
[0, "스테일", null, 0, null, 47, 88, 55, 0, 160, 300, null, null],
|
||||
[0, "코모에", null, 0, null, 78, 10, 85, 0, 160, 300, null, null],
|
||||
[0, "코난", null, 0, null, 55, 72, 99, 0, 160, 300, null, null, "미궁을 모르는 명탐정! 진실은 언제나 하나!"],
|
||||
[0, "모리란", null, 0, null, 67, 100, 82, 0, 160, 300, null, "돌격"],
|
||||
[0, "스즈키소노코", null, 0, null, 66, 55, 86, 0, 160, 300, null, "상재"],
|
||||
[0, "쿄고쿠마코토", null, 0, null, 79, 108, 52, 0, 160, 300, null, "무쌍"],
|
||||
[0, "진", null, 0, null, 79, 87, 90, 0, 160, 300, null, "돌격"],
|
||||
[0, "베르무트", null, 0, null, 75, 67, 96, 0, 160, 300, null, null, "A secret makes a woman woman…"],
|
||||
[0, "키얀티", null, 0, null, 56, 80, 49, 0, 160, 300, null, "저격"],
|
||||
[0, "코른", null, 0, null, 57, 84, 55, 0, 160, 300, null, "저격"],
|
||||
[0, "키르", null, 0, null, 64, 77, 63, 0, 150, 300, null, null],
|
||||
[0, "버본", null, 0, null, 84, 83, 80, 0, 160, 300, null, null],
|
||||
[0, "Rum", null, 0, null, 80, 30, 80, 0, 160, 300, null, null],
|
||||
[0, "헤이지", null, 0, null, 78, 78, 95, 0, 160, 300, null, null],
|
||||
[0, "카즈하", null, 0, null, 76, 30, 90, 0, 160, 300, null, null],
|
||||
[0, "메구레경부", null, 0, null, 94, 79, 88, 0, 160, 300, null, null],
|
||||
[0, "타카기형사", null, 0, null, 67, 80, 79, 0, 160, 300, null, null],
|
||||
[0, "미와코", null, 0, null, 70, 83, 82, 0, 160, 300, null, null],
|
||||
[0, "시라토리형사", null, 0, null, 71, 84, 81, 0, 160, 300, null, null],
|
||||
[0, "하네다슈키치", null, 0, null, 76, 33, 100, 0, 160, 300, null, null],
|
||||
[0, "조디", null, 0, null, 79, 67, 88, 0, 160, 300, null, null],
|
||||
[0, "슈이치", null, 0, null, 86, 90, 100, 0, 160, 300, null, "저격"],
|
||||
[0, "제임스 블랙", null, 0, null, 88, 55, 85, 0, 160, 300, null, null],
|
||||
[0, "케멜수사관", null, 0, null, 67, 78, 79, 0, 160, 300, null, null],
|
||||
[0, "히아바라아이", null, 0, null, 78, 49, 100, 0, 160, 300, null, "발명"],
|
||||
[0, "소년탐정단", null, 0, null, 67, 85, 74, 0, 160, 300, null, null],
|
||||
[0, "워커", null, 0, null, 73, 80, 66, 0, 160, 300, null, null],
|
||||
[0, "카리스마렌야", null, 0, null, 75, 78, 78, 0, 160, 300, null, "상재"],
|
||||
[0, "모리코고로", null, 0, null, 78, 77, 92, 0, 160, 300, null, null, "그만할수는 없어 진상을 밝혀내는게 탐정의 습성이니까."],
|
||||
[0, "토우카", null, 0, null, 86, 57, 77, 0, 160, 300, null, "인덕"],
|
||||
[0, "아이샤", null, 0, null, 97, 97, 75, 0, 160, 300, null, "위압"],
|
||||
[0, "린린", null, 0, null, 86, 98, 22, 0, 160, 300, null, "무쌍"],
|
||||
[0, "세이", null, 0, null, 92, 93, 80, 0, 160, 300, null, "무쌍"],
|
||||
[0, "시온", null, 0, null, 85, 94, 67, 0, 160, 300, null, "궁병"],
|
||||
[0, "슈리", null, 0, null, 75, 19, 100, 0, 160, 300, null, "집중", "하와와와…"],
|
||||
[0, "하나리", null, 0, null, 85, 40, 92, 0, 160, 300, null, "반계", "아와와…"],
|
||||
[0, "라이라이", null, 0, null, 33, 35, 78, 0, 160, 300, null, "상재"],
|
||||
[0, "덴덴", null, 0, null, 40, 22, 57, 0, 160, 300, null, null],
|
||||
[0, "미파", null, 0, null, 32, 17, 74, 0, 160, 300, null, null],
|
||||
[0, "스이", null, 0, null, 80, 93, 21, 0, 160, 300, null, null],
|
||||
[0, "탄포포", null, 0, null, 82, 90, 57, 0, 160, 310, null, null],
|
||||
[0, "루오", null, 0, null, 74, 67, 62, 0, 160, 290, null, null],
|
||||
[0, "소우", null, 0, null, 73, 70, 65, 0, 160, 290, null, null],
|
||||
[0, "유에", null, 0, null, 78, 13, 94, 0, 160, 330, null, "인덕", "백성의 호소를 귀담아 듣는것이 정치의 근본."],
|
||||
[0, "에이", null, 0, null, 78, 19, 99, 0, 160, 300, null, "신중"],
|
||||
[0, "롄", null, 0, null, 87, 107, 35, 0, 160, 300, null, "돌격"],
|
||||
[0, "네네네", null, 0, null, 78, 19, 89, 0, 160, 300, null, null, "진구우우웅!!!!!!!!킥!"],
|
||||
[0, "화웅", null, 0, null, 82, 87, 53, 0, 160, 300, null, "기병"],
|
||||
[0, "시아", null, 0, null, 81, 88, 78, 0, 160, 300, null, "돌격"],
|
||||
[0, "로안", null, 0, null, 85, 83, 79, 0, 160, 300, null, null],
|
||||
[0, "후우란", null, 0, null, 82, 30, 90, 0, 160, 300, null, null],
|
||||
[0, "파이렌", null, 0, null, 84, 85, 64, 0, 160, 300, null, "기병"],
|
||||
[0, "파이탄", null, 0, null, 19, 10, 67, 0, 160, 300, null, null],
|
||||
[0, "쿠탄", null, 0, null, 7, 3, 31, 0, 160, 300, null, null],
|
||||
[0, "엔야", null, 0, null, 79, 91, 38, 0, 160, 300, null, null],
|
||||
[0, "키쿄우", null, 0, null, 86, 90, 72, 0, 160, 300, null, null],
|
||||
[0, "유도", null, 0, null, 19, 11, 52, 0, 160, 300, null, null],
|
||||
[0, "레이하", null, 0, null, 80, 30, 65, 0, 160, 300, null, null],
|
||||
[0, "토시", null, 0, null, 86, 92, 36, 0, 160, 300, null, "돌격"],
|
||||
[0, "이이셰", null, 0, null, 87, 94, 41, 0, 160, 300, null, null, "지력 36이 지력100을 이겼다!"],
|
||||
[0, "마치", null, 0, null, 77, 23, 94, 0, 160, 300, null, null],
|
||||
[0, "카린", null, 0, null, 96, 75, 92, 0, 160, 300, null, "반계"],
|
||||
[0, "슌란", null, 0, null, 85, 89, 20, 0, 160, 300, null, "돌격"],
|
||||
[0, "슈란", null, 0, null, 87, 92, 75, 0, 160, 300, null, "저격"],
|
||||
[0, "케이파", null, 0, null, 51, 14, 95, 0, 160, 300, null, "집중", "아아…카린님…!"],
|
||||
[0, "곽가린", null, 0, null, 67, 19, 97, 0, 160, 300, null, "신산"],
|
||||
[0, "정욱후우", null, 0, null, 80, 35, 92, 0, 160, 300, null, null, "Zzzzz,,,,"],
|
||||
[0, "나기", null, 0, null, 80, 84, 53, 0, 160, 300, null, null],
|
||||
[0, "사와", null, 0, null, 83, 78, 63, 0, 160, 300, null, null],
|
||||
[0, "마오", null, 0, null, 77, 78, 76, 0, 160, 300, null, null],
|
||||
[0, "텐호", null, 0, null, 87, 12, 54, 0, 160, 300, null, "환술"],
|
||||
[0, "렌호", null, 0, null, 78, 56, 72, 0, 160, 300, null, "환술"],
|
||||
[0, "치호", null, 0, null, 77, 39, 89, 0, 160, 300, null, "환술"],
|
||||
[0, "미우", null, 0, null, 42, 44, 19, 0, 160, 300, null, null],
|
||||
[0, "나나노", null, 0, null, 74, 70, 67, 0, 160, 300, null, null],
|
||||
[0, "카론", null, 0, null, 89, 86, 51, 0, 160, 300, null, null],
|
||||
[0, "에이카", null, 0, null, 79, 81, 52, 0, 160, 300, null, null, "좌절감이 숙녀를 키우는 것이에요!!!"],
|
||||
[0, "초선", null, 0, null, 75, 100, 55, 0, 160, 300, null, "위압", "아앙 주인님~"],
|
||||
[0, "루린", null, 0, null, 74, 76, 67, 0, 160, 300, null, null, "걱정돼…걱정된다고!"],
|
||||
[0, "샨푸", null, 0, null, 89, 94, 73, 0, 160, 300, null, null],
|
||||
[0, "토우", null, 0, null, 22, 8, 77, 0, 160, 300, null, null],
|
||||
[0, "스우", null, 0, null, 81, 50, 83, 0, 160, 300, null, null],
|
||||
[0, "케이", null, 0, null, 53, 49, 32, 0, 160, 300, null, null],
|
||||
[0, "레이첸", null, 0, null, 23, 14, 60, 0, 160, 300, null, null],
|
||||
[0, "옌렌", null, 0, null, 96, 94, 75, 0, 160, 300, null, "무쌍"],
|
||||
[0, "세렌", null, 0, null, 94, 94, 69, 0, 160, 300, null, "돌격"],
|
||||
[0, "렌파", null, 0, null, 85, 55, 77, 0, 160, 300, null, null],
|
||||
[0, "메이린", null, 0, null, 96, 69, 97, 0, 160, 300, null, "신산"],
|
||||
[0, "사이", null, 0, null, 84, 80, 66, 0, 160, 300, null, null],
|
||||
[0, "스이레이", null, 0, null, 85, 81, 79, 0, 160, 300, null, null],
|
||||
[0, "민메이", null, 0, null, 78, 92, 72, 0, 160, 300, null, null],
|
||||
[0, "시슌", null, 0, null, 79, 93, 79, 0, 160, 300, null, null],
|
||||
[0, "아셰", null, 0, null, 82, 66, 89, 0, 160, 300, null, null],
|
||||
[0, "농", null, 0, null, 93, 62, 94, 0, 160, 300, null, null],
|
||||
[0, "샤오렌", null, 0, null, 84, 81, 80, 0, 160, 300, null, null],
|
||||
[0, "파오", null, 0, null, 92, 33, 92, 0, 160, 300, null, null],
|
||||
[0, "라이카", null, 0, null, 33, 14, 92, 0, 160, 300, null, null],
|
||||
[0, "리안", null, 0, null, 82, 91, 64, 0, 160, 300, null, null],
|
||||
[0, "마츠자키 아미", null, 0, null, 76, 69, 81, 0, 160, 300, null, null, "미스터리!!!!!"],
|
||||
[0, "이요", null, 0, null, 64, 99, 82, 0, 160, 300, null, null, "이요씨빔~~~~~~~~~"],
|
||||
[0, "캔다", null, 0, null, 70, 74, 70, 0, 160, 300, null, null],
|
||||
[0, "이싸", null, 0, null, 55, 75, 55, 0, 160, 300, null, null],
|
||||
[0, "미스터리", null, 0, null, 82, 10, 67, 0, 160, 300, null, "발명"],
|
||||
[0, "타케다쿠미코", null, 0, null, 80, 60, 80, 0, 160, 300, null, null],
|
||||
[0, "니얀다카멘", null, 0, null, 88, 96, 88, 0, 160, 300, null, "무쌍", "난다! 난다! 니얀다 카멘!"],
|
||||
[0, "냐고", null, 0, null, 37, 46, 42, 0, 160, 300, "유지", null],
|
||||
[0, "니얀다카렌", null, 0, null, 77, 90, 75, 0, 160, 300, null, null],
|
||||
[0, "미코", null, 0, null, 49, 21, 84, 0, 160, 300, null, null],
|
||||
[0, "냐온", null, 0, null, 72, 30, 90, 0, 160, 300, "패권", "발명"],
|
||||
[0, "콩", null, 0, null, 62, 60, 75, 0, 160, 300, null, null],
|
||||
[0, "네코선인", null, 0, null, 88, 52, 89, 0, 160, 300, "운둔", "신산"],
|
||||
[0, "긴코", null, 0, null, 67, 79, 90, 0, 160, 300, null, null],
|
||||
[0, "사라카치", null, 0, null, 70, 83, 80, 0, 160, 300, null, null],
|
||||
[0, "미이라맨", null, 0, null, 82, 86, 60, 0, 160, 300, null, "돌격", "미이라~맨"],
|
||||
[0, "망토대왕", null, 0, null, 67, 94, 70, 0, 160, 300, null, "돌격", "이몸은 숲의 왕이시다!"],
|
||||
[0, "타누코", null, 0, null, 72, 78, 82, 0, 160, 300, null, null],
|
||||
[0, "쿠모네코", null, 0, null, 74, 74, 45, 0, 160, 300, null, null],
|
||||
[0, "도쿠로왕", null, 0, null, 90, 95, 80, 0, 160, 300, null, "돌격", "하지마!! 이대로 봉인되긴 싫단말이다!!"],
|
||||
[0, "네프론", null, 0, null, 40, 93, 35, 0, 160, 300, null, null],
|
||||
[0, "오물대왕", null, 0, null, 72, 60, 78, 0, 160, 300, null, null],
|
||||
[0, "락맨", null, 0, null, 40, 97, 29, 0, 160, 300, null, null],
|
||||
[0, "피코", null, 0, null, 39, 67, 20, 0, 160, 300, null, null],
|
||||
[0, "또또", null, 0, null, 19, 10, 78, 0, 160, 300, null, "발명"],
|
||||
[0, "나나", null, 0, null, 50, 19, 88, 0, 160, 300, null, null],
|
||||
[0, "카카코선생님", null, 0, null, 67, 40, 75, 0, 160, 300, null, null],
|
||||
[0, "스즈코센세", null, 0, null, 76, 41, 84, 0, 160, 300, null, null],
|
||||
[0, "투투", null, 0, null, 52, 60, 70, 0, 160, 300, null, null],
|
||||
[0, "츄츄", null, 0, null, 64, 70, 30, 0, 160, 300, null, null],
|
||||
[0, "모모", null, 0, null, 78, 70, 75, 0, 160, 300, null, null],
|
||||
[0, "쥐선인", null, 0, null, 90, 43, 94, 0, 160, 300, null, "환술", "고양이들에게 속지마라..!"],
|
||||
[0, "로로나", null, 0, null, 92, 89, 94, 0, 160, 300, null, null, "나는 로로라이나 프릭셀이야!"],
|
||||
[0, "토토리", null, 0, null, 85, 86, 93, 0, 160, 300, null, null, "역시.. 키가 작으시네요 쿠데리아상"],
|
||||
[0, "메루루", null, 0, null, 87, 75, 92, 0, 160, 300, null, null],
|
||||
[0, "쿠데리아", null, 0, null, 75, 68, 79, 0, 160, 300, null, "상재", "그렇게 부르지 말랬지!!"],
|
||||
[0, "스테르크", null, 0, null, 80, 102, 81, 0, 160, 300, null, "무쌍", "자 따라해봐 로.로.나"],
|
||||
[0, "아스트리드", null, 0, null, 39, 78, 96, 0, 160, 300, "유지", null],
|
||||
[0, "미미", null, 0, null, 78, 82, 76, 0, 160, 300, null, null],
|
||||
[0, "지노 크나프", null, 0, null, 72, 84, 70, 0, 160, 300, null, null],
|
||||
[0, "에스카", null, 0, null, 84, 75, 91, 0, 160, 300, null, null],
|
||||
[0, "로직스", null, 0, null, 80, 85, 79, 0, 160, 300, null, null],
|
||||
[0, "소피", null, 0, null, 97, 94, 99, 0, 160, 300, null, "집중"],
|
||||
[0, "플라흐타", null, 0, null, 79, 80, 101, 0, 160, 300, null, "환술"],
|
||||
[0, "피리스", null, 0, null, 81, 66, 80, 0, 160, 300, null, "반계"],
|
||||
[0, "일메리아", null, 0, null, 90, 64, 85, 0, 160, 300, null, null],
|
||||
[0, "리디", null, 0, null, 77, 79, 82, 0, 160, 300, null, null],
|
||||
[0, "수르", null, 0, null, 79, 77, 84, 0, 160, 300, null, null],
|
||||
[0, "리아나", null, 0, null, 72, 78, 67, 0, 160, 300, null, null],
|
||||
[0, "이츠카시도", null, 0, null, 94, 82, 80, 0, 160, 300, null, "환술", "린~~~~네~~~!!!!!!!!!!!!!!!!!!!"],
|
||||
[0, "이츠카코토리", null, 0, null, 87, 91, 78, 0, 160, 300, null, null],
|
||||
[0, "야토가미토카", null, 0, null, 84, 94, 22, 0, 160, 300, null, null],
|
||||
[0, "요시노", null, 0, null, 88, 85, 64, 0, 160, 300, null, null],
|
||||
[0, "쿠루미", null, 0, null, 86, 88, 83, 0, 160, 300, null, null],
|
||||
[0, "타카미야마나", null, 0, null, 81, 90, 83, 0, 160, 300, null, null],
|
||||
[0, "소노가미린네", null, 0, null, 90, 93, 84, 0, 160, 300, null, null, "시도..! 시도!"],
|
||||
[0, "카구야", null, 0, null, 72, 90, 34, 0, 160, 300, null, null],
|
||||
[0, "유즈루", null, 0, null, 72, 90, 75, 0, 160, 300, null, null],
|
||||
[0, "이자요이미쿠", null, 0, null, 87, 82, 70, 0, 160, 300, null, null],
|
||||
[0, "마유리", null, 0, null, 81, 81, 81, 0, 160, 300, null, null],
|
||||
[0, "아루스마리아", null, 0, null, 75, 59, 92, 0, 160, 300, null, null],
|
||||
[0, "마리나", null, 0, null, 75, 59, 94, 0, 160, 300, null, null],
|
||||
[0, "소노가미리오", null, 0, null, 80, 87, 77, 0, 160, 300, null, null, "리오 나는 소노가미 리오야."],
|
||||
[0, "나츠미", null, 0, null, 70, 79, 77, 0, 160, 300, null, "환술"],
|
||||
[0, "오리가미", null, 0, null, 78, 88, 75, 0, 160, 300, null, "저격"],
|
||||
[0, "니아", null, 0, null, 70, 30, 82, 0, 160, 300, null, null],
|
||||
[0, "무쿠로", null, 0, null, 64, 85, 70, 0, 160, 300, null, null],
|
||||
[0, "레이네", null, 0, null, 70, 30, 80, 0, 160, 300, null, null],
|
||||
[0, "아이작", null, 0, null, 98, 67, 99, 0, 150, 290, null, "집중"],
|
||||
[0, "엘렌", null, 0, null, 86, 82, 77, 0, 160, 300, null, null],
|
||||
[0, "쿠사가베료코", null, 0, null, 81, 73, 76, 0, 160, 300, null, null],
|
||||
[0, "아르테미시아", null, 0, null, 83, 82, 69, 0, 160, 300, null, null],
|
||||
[0, "토노마치", null, 0, null, 33, 43, 22, 0, 160, 300, null, null],
|
||||
[0, "아이", null, 0, null, 42, 39, 50, 0, 160, 300, null, null],
|
||||
[0, "마이", null, 0, null, 19, 24, 37, 0, 160, 300, null, null],
|
||||
[0, "미이", null, 0, null, 19, 19, 56, 0, 160, 300, null, null],
|
||||
[0, "타치바나히비키", null, 0, null, 74, 95, 67, 0, 160, 300, null, "돌격"],
|
||||
[0, "츠바사", null, 0, null, 76, 94, 77, 0, 160, 300, null, null],
|
||||
[0, "크리스", null, 0, null, 80, 93, 77, 0, 160, 300, null, null],
|
||||
[0, "마리아", null, 0, null, 84, 92, 77, 0, 160, 300, null, null],
|
||||
[0, "시라베", null, 0, null, 85, 92, 77, 0, 160, 300, null, null],
|
||||
[0, "아카츠키키리카", null, 0, null, 77, 92, 80, 0, 160, 300, null, null],
|
||||
[0, "전희절창미쿠", null, 0, null, 72, 30, 90, 0, 160, 300, null, null],
|
||||
[0, "캐롤", null, 0, null, 95, 82, 80, 0, 160, 300, null, null],
|
||||
[0, "엘프나인", null, 0, null, 83, 29, 77, 0, 160, 300, null, null],
|
||||
[0, "웰박사", null, 0, null, 99, 70, 99, 0, 160, 300, null, "발명", "영웅이 된건가…?"],
|
||||
[0, "세가와유타", null, 0, null, 83, 75, 88, 0, 160, 300, null, "견고"],
|
||||
[0, "타카나시소라", null, 0, null, 86, 80, 85, 0, 160, 300, null, null],
|
||||
[0, "타카나시미우", null, 0, null, 87, 78, 78, 0, 160, 300, null, null],
|
||||
[0, "타카나시히나", null, 0, null, 75, 33, 51, 0, 160, 300, null, null],
|
||||
[0, "오다라이카", null, 0, null, 92, 64, 85, 0, 160, 300, null, null],
|
||||
[0, "니무라코이치", null, 0, null, 85, 51, 90, 0, 160, 300, null, null],
|
||||
[0, "샤샤", null, 0, null, 87, 44, 80, 0, 160, 300, null, null, "Miu! Мой милый Миу!"],
|
||||
[0, "큐어블랙", null, 0, null, 73, 95, 55, 0, 160, 300, null, "돌격"],
|
||||
[0, "큐어화이트", null, 0, null, 77, 90, 90, 0, 160, 300, null, null],
|
||||
[0, "큐어블룸", null, 0, null, 76, 89, 78, 0, 160, 300, null, null],
|
||||
[0, "큐어이그렛", null, 0, null, 82, 88, 94, 0, 160, 300, null, null],
|
||||
[0, "미치루", null, 0, null, 84, 86, 80, 0, 160, 300, null, null],
|
||||
[0, "카오루", null, 0, null, 84, 80, 86, 0, 160, 300, null, null],
|
||||
[0, "큐어드림", null, 0, null, 92, 96, 55, 0, 160, 300, null, "통찰", "희망이가진 위대한 힘! 큐어드림!"],
|
||||
[0, "큐어루즈", null, 0, null, 74, 93, 78, 0, 160, 300, null, null],
|
||||
[0, "키리야", null, 0, null, 77, 89, 85, 0, 160, 300, null, null, "고마워요..선배들…이세계에 살아가는 의미를 알게해줘서…"],
|
||||
[0, "루미너스", null, 0, null, 73, 89, 75, 0, 160, 300, null, null],
|
||||
[0, "레모네이드", null, 0, null, 84, 87, 66, 0, 160, 300, null, null],
|
||||
[0, "민트", null, 0, null, 80, 75, 77, 0, 160, 300, null, null],
|
||||
[0, "아쿠아", null, 0, null, 83, 80, 76, 0, 160, 300, null, null],
|
||||
[0, "밀키로즈", null, 0, null, 84, 97, 72, 0, 160, 300, null, null],
|
||||
[0, "분비", null, 0, null, 88, 98, 80, 0, 160, 300, null, "견고", "이렇게 죽긴 싫은데..!!"],
|
||||
[0, "가마오", null, 0, null, 42, 84, 36, 0, 160, 300, null, null],
|
||||
[0, "큐어블로섬", null, 0, null, 86, 75, 84, 0, 160, 300, null, null],
|
||||
[0, "큐어마린", null, 0, null, 71, 82, 41, 0, 160, 300, null, null],
|
||||
[0, "큐어션샤인", null, 0, null, 77, 83, 80, 0, 160, 300, null, null],
|
||||
[0, "큐어문라이트", null, 0, null, 82, 88, 84, 0, 160, 300, null, null],
|
||||
[0, "큐어멜로디", null, 0, null, 80, 85, 49, 0, 160, 300, null, null],
|
||||
[0, "큐어리듬", null, 0, null, 77, 85, 88, 0, 160, 300, null, null],
|
||||
[0, "큐어비트", null, 0, null, 80, 84, 80, 0, 160, 300, null, null],
|
||||
[0, "하미", null, 0, null, 56, 50, 77, 0, 160, 300, null, null],
|
||||
[0, "큐어뮤즈", null, 0, null, 86, 92, 81, 0, 160, 300, null, null],
|
||||
[0, "큐어하트", null, 0, null, 93, 90, 95, 0, 160, 300, null, "위압"],
|
||||
[0, "다이아몬드", null, 0, null, 86, 88, 90, 0, 160, 300, null, null],
|
||||
[0, "큐어로제타", null, 0, null, 80, 80, 85, 0, 160, 300, null, "상재"],
|
||||
[0, "큐어소드", null, 0, null, 79, 87, 82, 0, 160, 300, null, "착사"],
|
||||
[0, "큐어에이스", null, 0, null, 75, 83, 77, 0, 160, 300, null, null],
|
||||
[0, "하세가와스바루", null, 0, null, 86, 77, 80, 0, 160, 300, null, null, "정말 초등학생은 최고야!!"],
|
||||
[0, "토모카", null, 0, null, 70, 64, 82, 0, 160, 300, null, null, "잘부탁 드려요 하세가와 코치님!"],
|
||||
[0, "아이리", null, 0, null, 71, 76, 75, 0, 160, 300, null, null, "키얘기는 하지마세요!!"],
|
||||
[0, "마호", null, 0, null, 65, 62, 77, 0, 160, 300, null, "상재"],
|
||||
[0, "사키", null, 0, null, 75, 66, 80, 0, 160, 300, null, null, "마호~ 그만!!"],
|
||||
[0, "로큐브히나타", null, 0, null, 67, 66, 55, 0, 160, 300, null, null],
|
||||
[0, "사츠키", null, 0, null, 72, 77, 70, 0, 160, 300, null, null],
|
||||
[0, "넵튠", null, 0, null, 71, 55, 30, 0, 160, 300, null, null, "난 플라네튠의 여신 넵튠이야!"],
|
||||
[0, "퍼플하트", null, 0, null, 86, 88, 77, 0, 160, 300, null, "돌격"],
|
||||
[0, "네프기어", null, 0, null, 84, 87, 80, 0, 160, 300, null, null],
|
||||
[0, "느와르", null, 0, null, 85, 88, 80, 0, 160, 300, null, null],
|
||||
[0, "유니", null, 0, null, 73, 80, 75, 0, 160, 300, null, "저격"],
|
||||
[0, "블랑", null, 0, null, 80, 88, 69, 0, 160, 300, null, "격노"],
|
||||
[0, "롬", null, 0, null, 69, 77, 60, 0, 160, 300, null, null],
|
||||
[0, "람", null, 0, null, 70, 60, 77, 0, 160, 300, null, null],
|
||||
[0, "그린하트", null, 0, null, 81, 88, 83, 0, 160, 300, null, null],
|
||||
[0, "마제콘느", null, 0, null, 85, 88, 75, 0, 160, 300, null, null],
|
||||
[0, "프루루트", null, 0, null, 68, 94, 30, 0, 160, 300, null, "위압"],
|
||||
[0, "피셰", null, 0, null, 70, 61, 69, 0, 160, 300, null, null],
|
||||
[0, "비샤", null, 0, null, 75, 86, 75, 0, 160, 300, null, null],
|
||||
[0, "우즈메", null, 0, null, 78, 88, 82, 0, 160, 300, null, null],
|
||||
[0, "미나즈키하루카", null, 0, null, 83, 86, 70, 0, 160, 300, null, null],
|
||||
[0, "칸나즈키아오이", null, 0, null, 86, 84, 88, 0, 160, 300, null, null],
|
||||
[0, "하즈키쿠루미", null, 0, null, 75, 84, 80, 0, 160, 300, null, null],
|
||||
[0, "테슬라바이올렛", null, 0, null, 69, 85, 77, 0, 160, 300, null, null],
|
||||
[0, "나인바이올렛", null, 0, null, 73, 84, 79, 0, 160, 300, null, null],
|
||||
[0, "나폴레옹정령", null, 0, null, 60, 60, 50, 0, 160, 300, null, null],
|
||||
[0, "사이죠세츠코", null, 0, null, 77, 67, 81, 0, 160, 300, null, null],
|
||||
[0, "블랙트레이더", null, 0, null, 86, 95, 78, 0, 160, 300, null, null],
|
||||
[0, "엘리스", null, 0, null, 77, 91, 80, 0, 160, 300, null, null],
|
||||
[0, "리리카", null, 0, null, 65, 59, 71, 0, 160, 300, null, null],
|
||||
[0, "제르시퍼", null, 0, null, 95, 99, 89, 0, 160, 300, null, null],
|
||||
[0, "메구루", null, 0, null, 70, 80, 67, 0, 160, 300, null, null],
|
||||
[0, "스미레", null, 0, null, 75, 85, 80, 0, 160, 300, null, null],
|
||||
[0, "메어리", null, 0, null, 70, 88, 78, 0, 160, 300, null, null],
|
||||
[0, "유우키유우나", null, 0, null, 88, 91, 78, 0, 160, 300, null, null, "유우키 유우나! 용자부소속이야!"],
|
||||
[0, "토고미모리", null, 0, null, 88, 105, 97, 0, 160, 300, null, null],
|
||||
[0, "후우", null, 0, null, 85, 90, 86, 0, 160, 300, null, null],
|
||||
[0, "이츠키", null, 0, null, 87, 91, 84, 0, 160, 300, null, null],
|
||||
[0, "미요시카린", null, 0, null, 85, 93, 80, 0, 160, 300, null, null],
|
||||
[0, "노기소노코", null, 0, null, 79, 84, 78, 0, 160, 300, null, null],
|
||||
[0, "미노와긴", null, 0, null, 83, 87, 81, 0, 160, 300, null, null],
|
||||
[0, "아키선생님", null, 0, null, 85, 39, 88, 0, 160, 300, null, null],
|
||||
[0, "신수", null, 0, null, 97, 69, 99, 0, 160, 300, null, "견고"],
|
||||
[0, "노기와카바", null, 0, null, 87, 85, 79, 0, 160, 300, null, null],
|
||||
[0, "우에사토", null, 0, null, 80, 19, 85, 0, 160, 300, null, "귀모"],
|
||||
[0, "이요지마안즈", null, 0, null, 76, 88, 86, 0, 160, 295, null, "저격"],
|
||||
[0, "도이타마코", null, 0, null, 72, 89, 37, 0, 160, 300, null, "견고"],
|
||||
[0, "코오리치카게", null, 0, null, 67, 90, 83, 0, 160, 300, null, null],
|
||||
[0, "타카시마유우나", null, 0, null, 72, 88, 75, 0, 160, 300, null, null, "군짱, 그러면 안되."],
|
||||
[0, "우타노", null, 0, null, 71, 83, 67, 0, 160, 300, null, "농업"],
|
||||
[0, "후지모리미토", null, 0, null, 70, 15, 81, 0, 160, 300, null, null],
|
||||
[0, "키리토", null, 0, null, 85, 91, 80, 0, 160, 300, null, "무쌍", "스타…버스트!!!...스트림!!!!!"],
|
||||
[0, "아스나", null, 0, null, 94, 89, 87, 0, 160, 300, null, "무쌍", "내…이름…어떻게 안거야??"],
|
||||
[0, "린드", null, 0, null, 81, 72, 69, 0, 160, 300, null, null, "왜 디어벨 상을 죽게 내버려 뒀어!!"],
|
||||
[0, "키바오", null, 0, null, 88, 75, 80, 0, 160, 300, null, "통찰", "잠껀 기다려 보그레이!"],
|
||||
[0, "에길", null, 0, null, 75, 91, 73, 0, 160, 300, null, "상재", "싸게 사서 싸게 제공하는것이 우리가게의 모토지"],
|
||||
[0, "클라인", null, 0, null, 70, 92, 50, 0, 160, 300, null, null],
|
||||
[0, "리텐", null, 0, null, 72, 88, 59, 0, 160, 300, null, "견고"],
|
||||
[0, "리즈벳", null, 0, null, 65, 78, 70, 0, 160, 300, null, null],
|
||||
[0, "시리카", null, 0, null, 79, 78, 62, 0, 160, 300, null, null],
|
||||
[0, "PoH", null, 0, null, 65, 80, 74, 0, 160, 300, null, "저격", "It`s Show Time!"],
|
||||
[0, "히스클리프", null, 0, null, 69, 75, 75, 0, 160, 300, null, "발명"],
|
||||
[0, "슈미트", null, 0, null, 88, 82, 40, 0, 160, 300, null, "견고"],
|
||||
[0, "조", null, 0, null, 45, 73, 55, 0, 160, 300, null, null],
|
||||
[0, "자자", null, 0, null, 40, 80, 50, 0, 160, 300, null, null, "니녀석은 기필코 내가죽인다…!!"],
|
||||
[0, "그림록", null, 0, null, 52, 50, 19, 0, 160, 300, null, null],
|
||||
[0, "그리셸다", null, 0, null, 75, 50, 80, 0, 160, 300, null, null],
|
||||
[0, "NPC", null, 0, null, 10, 30, 55, 0, 160, 300, null, null],
|
||||
[0, "키즈멜", null, 0, null, 77, 87, 50, 0, 160, 300, null, null],
|
||||
[0, "스고우", null, 0, null, 23, 19, 51, 0, 160, 300, null, null],
|
||||
[0, "유이", null, 0, null, 79, 19, 88, 0, 160, 300, null, null],
|
||||
[0, "스트레아", null, 0, null, 70, 70, 55, 0, 160, 300, null, null],
|
||||
[0, "리파", null, 0, null, 70, 78, 72, 0, 160, 300, null, null],
|
||||
[0, "레콘", null, 0, null, 55, 50, 32, 0, 160, 300, null, null],
|
||||
[0, "사쿠야", null, 0, null, 80, 64, 78, 0, 160, 300, null, null],
|
||||
[0, "알리샤루", null, 0, null, 80, 60, 77, 0, 160, 300, null, null],
|
||||
[0, "쥐아르고", null, 0, null, 76, 50, 85, 0, 160, 300, null, null],
|
||||
[0, "카케무네", null, 0, null, 71, 59, 70, 0, 160, 300, null, null],
|
||||
[0, "시구르드", null, 0, null, 32, 23, 40, 0, 160, 300, null, null],
|
||||
[0, "룩스", null, 0, null, 81, 77, 60, 0, 160, 300, null, null],
|
||||
[0, "네즈하", null, 0, null, 65, 70, 71, 0, 160, 300, null, null],
|
||||
[0, "시논", null, 0, null, 75, 80, 60, 0, 160, 300, null, "저격"],
|
||||
[0, "데스건", null, 0, null, 40, 80, 66, 0, 160, 300, null, null, "나와 이총의 이름은 Death gun이다!"],
|
||||
[0, "신카와쿄지", null, 0, null, 39, 30, 16, 0, 160, 300, null, null],
|
||||
[0, "야미카제", null, 0, null, 65, 73, 70, 0, 160, 300, null, null],
|
||||
[0, "콘노유우키", null, 0, null, 99, 89, 85, 0, 160, 300, null, null],
|
||||
[0, "안시은", null, 0, null, 78, 72, 69, 0, 160, 300, null, null],
|
||||
[0, "세븐", null, 0, null, 75, 50, 95, 0, 160, 300, null, null],
|
||||
[0, "레인", null, 0, null, 87, 59, 73, 0, 160, 300, null, null],
|
||||
[0, "프리미어", null, 0, null, 80, 50, 60, 0, 160, 300, null, null],
|
||||
[0, "앨리스", null, 0, null, 85, 95, 85, 0, 160, 300, null, null],
|
||||
[0, "유지오", null, 0, null, 83, 80, 55, 0, 160, 300, null, null],
|
||||
[0, "티제", null, 0, null, 74, 81, 60, 0, 160, 300, null, null],
|
||||
[0, "로니에", null, 0, null, 80, 76, 52, 0, 160, 300, null, null],
|
||||
[0, "벡터", null, 0, null, 81, 55, 77, 0, 160, 300, null, null],
|
||||
[0, "최고사제", null, 0, null, 57, 19, 95, 0, 160, 300, null, null],
|
||||
[0, "호노카", null, 0, null, 88, 55, 64, 0, 160, 300, null, null],
|
||||
[0, "우미", null, 0, null, 75, 55, 88, 0, 160, 300, null, null],
|
||||
[0, "럽라코토리", null, 0, null, 76, 54, 80, 0, 160, 300, null, null],
|
||||
[0, "니코", null, 0, null, 78, 52, 66, 0, 160, 300, null, "인덕", "닛코 닛코~니~ 아나타노 하토니 니코니코니"],
|
||||
[0, "노조미", null, 0, null, 83, 63, 85, 0, 160, 300, null, null],
|
||||
[0, "에리", null, 0, null, 75, 67, 77, 0, 160, 300, null, null, "ХараШо!"],
|
||||
[0, "호시조라린", null, 0, null, 70, 59, 33, 0, 160, 300, null, null],
|
||||
[0, "하나요", null, 0, null, 71, 55, 70, 0, 160, 300, null, null],
|
||||
[0, "마키", null, 0, null, 75, 43, 84, 0, 160, 300, null, "의술"],
|
||||
[0, "키라츠바사", null, 0, null, 87, 33, 72, 0, 160, 300, null, null],
|
||||
[0, "유우키안쥬", null, 0, null, 80, 35, 77, 0, 160, 300, null, null],
|
||||
[0, "토노에레나", null, 0, null, 78, 39, 84, 0, 160, 300, null, null],
|
||||
[0, "타이요아카리", null, 0, null, 80, 80, 81, 0, 160, 300, null, null, "나 잊지 않을테니까! 후유나에대해 절대로 잊지 않을테니까!"],
|
||||
[0, "츠쿠요미루나", null, 0, null, 72, 53, 82, 0, 160, 300, null, null],
|
||||
[0, "시로카네긴카", null, 0, null, 76, 85, 81, 0, 160, 300, null, "상재"],
|
||||
[0, "호시카와세이라", null, 0, null, 83, 86, 75, 0, 160, 300, null, "저격"],
|
||||
[0, "신자키휴우나", null, 0, null, 70, 90, 55, 0, 160, 300, null, "신중", "안녕 아카리. 아카리와 만나 행복했어…"],
|
||||
[0, "에티아", null, 0, null, 80, 72, 71, 0, 160, 300, null, null],
|
||||
[0, "아라벨", null, 0, null, 54, 60, 92, 0, 160, 300, null, null],
|
||||
[0, "프리실라", null, 0, null, 76, 83, 56, 0, 160, 300, null, null],
|
||||
[0, "멜티나", null, 0, null, 71, 82, 65, 0, 160, 300, null, null],
|
||||
[0, "하나에", null, 0, null, 74, 80, 65, 0, 160, 300, null, null],
|
||||
[0, "도레미", null, 0, null, 86, 75, 42, 0, 160, 300, null, null, "프리티 윗치 도레미치!"],
|
||||
[0, "하즈키", null, 0, null, 78, 61, 80, 0, 160, 300, null, null, "프리티 윗치 하즈키치!"],
|
||||
[0, "아이코", null, 0, null, 78, 61, 75, 0, 160, 300, null, null, "프리티 윗치 아이코치!"],
|
||||
[0, "폿프", null, 0, null, 70, 70, 79, 0, 160, 300, null, null, "프리티 윗치 폿프치!"],
|
||||
[0, "세가와온푸", null, 0, null, 82, 60, 88, 0, 160, 300, null, null, "프리티 윗치 온푸치!"],
|
||||
[0, "모모코", null, 0, null, 65, 75, 78, 0, 160, 300, null, null, "프리티 윗치 모모코치!"],
|
||||
[0, "마죠리카", null, 0, null, 86, 33, 83, 0, 160, 300, null, "상재"],
|
||||
[0, "유키선생님", null, 0, null, 86, 67, 89, 0, 160, 300, null, null],
|
||||
[0, "코타케테츠야", null, 0, null, 72, 70, 76, 0, 160, 300, null, null],
|
||||
[0, "마죠트루비용", null, 0, null, 92, 42, 92, 0, 160, 300, null, null],
|
||||
[0, "오야지데", null, 0, null, 67, 84, 61, 0, 160, 300, null, null],
|
||||
[0, "하나", null, 0, null, 65, 75, 75, 0, 160, 300, null, null],
|
||||
[0, "크로노스선생", null, 0, null, 75, 34, 88, 0, 160, 300, null, null, "drop out boy~"],
|
||||
[0, "남만병1", null, 0, null, 55, 61, 39, 0, 160, 300, null, null, "냥!"],
|
||||
[0, "남만병2", null, 0, null, 49, 63, 29, 0, 160, 300, null, null],
|
||||
[0, "남만병3", null, 0, null, 50, 62, 27, 0, 160, 300, null, null],
|
||||
[0, "아카히라셋카", null, 0, null, 77, 85, 70, 0, 160, 300, null, null],
|
||||
[0, "나츠메", null, 0, null, 79, 86, 50, 0, 160, 300, null, null],
|
||||
[0, "아키미네유우나", null, 0, null, 70, 86, 54, 0, 160, 300, null, null],
|
||||
[0, "사토시", null, 0, null, 51, 95, 13, 0, 160, 300, null, null],
|
||||
[0, "타케시", null, 0, null, 80, 32, 92, 0, 160, 300, null, null],
|
||||
[0, "카스미", null, 0, null, 80, 44, 70, 0, 160, 300, null, null],
|
||||
[0, "그린", null, 0, null, 76, 55, 82, 0, 160, 222, null, null],
|
||||
[0, "관철", null, 0, null, 79, 33, 83, 0, 160, 300, null, null],
|
||||
[0, "오키드 박사", null, 0, null, 70, 31, 95, 0, 160, 300, null, null],
|
||||
[0, "하루카", null, 0, null, 87, 67, 81, 0, 160, 300, null, null],
|
||||
[0, "정인", null, 0, null, 72, 32, 81, 0, 160, 300, null, null],
|
||||
[0, "비주기", null, 0, null, 88, 70, 86, 0, 160, 300, null, "위압", "내가 이 상록시티 체육관 관장이자 최강의 관장인 비주기다"],
|
||||
[0, "레드", null, 0, null, 100, 80, 100, 0, 160, 300, null, "위압", "나는 정점이다."],
|
||||
[0, "태홍", null, 0, null, 90, 59, 95, 0, 160, 300, null, null, "마음이 없는 세계…"],
|
||||
[0, "마적", null, 0, null, 85, 33, 91, 0, 160, 300, null, null],
|
||||
[0, "섀턴", null, 0, null, 79, 39, 90, 0, 160, 300, null, null, "선전용이엇지만 이번엔 진짜로 새로운 에너지라도 찾아볼까?"],
|
||||
[0, "N", null, 0, null, 80, 45, 91, 0, 160, 300, null, null, "네 디지몬의 목소리를 들려줘"],
|
||||
[0, "야가미 타이치", null, 0, null, 91, 85, 76, 0, 160, 300, null, null],
|
||||
[0, "이시다야마토", null, 0, null, 75, 83, 80, 0, 160, 300, null, null],
|
||||
[0, "타케노우치소라", null, 0, null, 81, 66, 84, 0, 160, 300, null, null],
|
||||
[0, "이즈미코시로", null, 0, null, 67, 39, 95, 0, 160, 300, null, null],
|
||||
[0, "타치카와미미", null, 0, null, 81, 62, 60, 0, 160, 300, null, null],
|
||||
[0, "키도죠", null, 0, null, 76, 50, 89, 0, 160, 300, null, "의술"],
|
||||
[0, "타케루", null, 0, null, 87, 91, 75, 0, 160, 300, null, "위압", "파타몬~~~~!!!!!!!!"],
|
||||
[0, "야가미히카리", null, 0, null, 84, 39, 89, 0, 160, 300, null, null],
|
||||
[0, "반데몬", null, 0, null, 55, 80, 80, 0, 160, 300, null, null],
|
||||
[0, "다이스케", null, 0, null, 74, 79, 65, 0, 160, 300, null, null],
|
||||
[0, "미야코", null, 0, null, 80, 60, 75, 0, 160, 300, null, null],
|
||||
[0, "히다 이오리", null, 0, null, 70, 64, 80, 0, 160, 300, null, null],
|
||||
[0, "이치죠우지켄", null, 0, null, 75, 64, 80, 0, 160, 300, null, null],
|
||||
[0, "야가미유메", null, 0, null, 73, 56, 60, 0, 160, 300, null, null],
|
||||
[0, "이즈미쥰", null, 0, null, 75, 40, 92, 0, 160, 300, null, null],
|
||||
[0, "이즈미토모", null, 0, null, 75, 77, 70, 0, 160, 300, null, null],
|
||||
[0, "키도미노루", null, 0, null, 86, 50, 85, 0, 160, 300, null, null],
|
||||
[0, "나데시코", null, 0, null, 75, 81, 70, 0, 160, 300, null, null],
|
||||
[0, "타카이시노조미", null, 0, null, 70, 56, 76, 0, 160, 300, null, null],
|
||||
[0, "타카이시미츠루", null, 0, null, 72, 50, 78, 0, 160, 300, null, null],
|
||||
[0, "타카이시유키", null, 0, null, 74, 72, 69, 0, 160, 300, null, null],
|
||||
[0, "미츠루", null, 0, null, 70, 69, 60, 0, 160, 300, null, null],
|
||||
[0, "코지로", null, 0, null, 76, 64, 79, 0, 160, 300, null, "상재"],
|
||||
[0, "무사시", null, 0, null, 75, 80, 60, 0, 160, 300, null, "무쌍"],
|
||||
[0, "에바스자와쿠루미", null, 0, null, 72, 88, 59, 0, 160, 300, null, "무쌍"],
|
||||
[0, "타케야유키", null, 0, null, 73, 39, 29, 0, 160, 300, null, null],
|
||||
[0, "와카사유리", null, 0, null, 77, 33, 90, 0, 160, 300, null, null],
|
||||
[0, "이케다미키", null, 0, null, 74, 66, 75, 0, 160, 300, null, null],
|
||||
[0, "사쿠라메구미", null, 0, null, 77, 32, 80, 0, 160, 300, null, null, "언니가 아니라 사쿠라 선생님!"],
|
||||
[0, "다이몬마사루", null, 0, null, 56, 99, 42, 0, 160, 300, null, null],
|
||||
[0, "히나모리아무", null, 0, null, 83, 70, 67, 0, 160, 300, null, null, "네거티브 하트 록온! 오픈 하트!!"],
|
||||
[0, "발푸르기스의밤", null, 0, null, 67, 99, 56, 0, 160, 300, null, null],
|
||||
[0, "멘마", null, 0, null, 75, 56, 77, 0, 160, 300, null, null, "진땅 정말 좋아해 신부가 되고싶다는 말이야."],
|
||||
[0, "진땅", null, 0, null, 73, 55, 75, 0, 160, 300, null, null, "멘마!!! 미츠케타!!"],
|
||||
[0, "유키아츠", null, 0, null, 75, 69, 72, 0, 160, 300, null, null],
|
||||
[0, "폿포", null, 0, null, 62, 69, 50, 0, 160, 300, null, null, "진땅 멘마 미츠케타!"],
|
||||
[0, "야냐루", null, 0, null, 75, 55, 72, 0, 160, 300, null, null, "에! 진땅 또 멘마를 울렷어!!"],
|
||||
[0, "츠루코", null, 0, null, 73, 52, 88, 0, 160, 300, null, null, "진땅 그러면 안되!"],
|
||||
[0, "공백소라", null, 0, null, 71, 50, 95, 0, 160, 300, null, null],
|
||||
[0, "공백시로", null, 0, null, 72, 50, 97, 0, 160, 300, null, null],
|
||||
[0, "지브릴", null, 0, null, 75, 82, 77, 0, 160, 300, null, null],
|
||||
[0, "스테파니도라", null, 0, null, 76, 27, 77, 0, 160, 300, null, null],
|
||||
[0, "무녀님", null, 0, null, 70, 40, 91, 0, 160, 300, null, null],
|
||||
[0, "이즈냥", null, 0, null, 76, 74, 67, 0, 160, 300, null, null],
|
||||
[0, "기타노유키코", null, 0, null, 85, 23, 95, 0, 160, 300, null, null, "모두들 잘부탁해!"],
|
||||
[0, "둘리", null, 0, null, 34, 88, 52, 0, 160, 300, null, null],
|
||||
[0, "고길동", null, 0, null, 74, 88, 70, 0, 160, 300, null, null],
|
||||
[0, "이그드라실", null, 0, null, 15, 82, 97, 0, 160, 300, null, null],
|
||||
[0, "마츠다타카토", null, 0, null, 72, 56, 74, 0, 160, 300, null, null],
|
||||
[0, "0.0", null, 0, null, 77, 63, 77, 0, 160, 300, null, null],
|
||||
[0, "리젠랴", null, 0, null, 72, 70, 77, 0, 160, 300, null, null],
|
||||
[0, "리슈촌", null, 0, null, 67, 43, 52, 0, 160, 300, null, null],
|
||||
[0, "쿠도타이키", null, 0, null, 82, 55, 80, 0, 160, 300, null, null],
|
||||
[0, "히노모토아카리", null, 0, null, 77, 50, 84, 0, 160, 300, null, null],
|
||||
[0, "유메노우타", null, 0, null, 83, 49, 80, 0, 160, 300, null, null, "코구레!!!(빡침)"],
|
||||
[0, "코구레카게루", null, 0, null, 80, 78, 60, 0, 160, 300, null, null, "널 좋아해 우타."],
|
||||
[0, "히이라기케이이치", null, 0, null, 86, 72, 88, 0, 160, 300, null, null],
|
||||
[0, "사쿠라즈카미키", null, 0, null, 79, 31, 82, 0, 160, 300, null, null],
|
||||
[0, "후지사키마나", null, 0, null, 77, 90, 73, 0, 160, 300, null, null],
|
||||
[0, "마이멜로디", null, 0, null, 84, 60, 74, 0, 160, 300, null, null],
|
||||
[0, "히아라기준", null, 0, null, 82, 60, 75, 0, 160, 300, null, null],
|
||||
[0, "호시즈키키라라", null, 0, null, 83, 70, 65, 0, 160, 300, null, null],
|
||||
[0, "오토나시유즈루", null, 0, null, 85, 61, 72, 0, 160, 300, null, null],
|
||||
[0, "타치바나카나데", null, 0, null, 89, 88, 74, 0, 160, 300, null, null],
|
||||
[0, "나오키아야토", null, 0, null, 80, 53, 80, 0, 160, 300, null, null, "좋아해 유즈루 심장을 줘서 고마워…"],
|
||||
[0, "나카무라유리", null, 0, null, 81, 62, 76, 0, 160, 300, null, null],
|
||||
[0, "캐캐체유이", null, 0, null, 77, 77, 56, 0, 160, 300, null, null, "결혼! 여자들의 궁극의 행복."],
|
||||
[0, "히나타히데키", null, 0, null, 78, 70, 60, 0, 160, 300, null, null, "내가 해줄게!!"],
|
||||
[0, "오토나시하츠네", null, 0, null, 74, 27, 80, 0, 160, 300, null, null],
|
||||
[0, "이와사와마사미", null, 0, null, 76, 29, 88, 0, 160, 300, null, null],
|
||||
[0, "아마노네네", null, 0, null, 82, 44, 81, 0, 160, 300, null, null],
|
||||
[0, "아마노유우", null, 0, null, 77, 49, 92, 0, 160, 300, null, null, "어차피 게임인걸?"],
|
||||
[0, "아오누마키리하", null, 0, null, 76, 50, 84, 0, 160, 300, null, null],
|
||||
[0, "우즈마키나루토", null, 0, null, 88, 94, 72, 0, 160, 300, null, "돌격"],
|
||||
[0, "휴우가히나타", null, 0, null, 80, 60, 78, 0, 160, 300, null, null],
|
||||
[0, "우치하사스케", null, 0, null, 78, 90, 70, 0, 160, 300, null, null],
|
||||
[0, "하루노사쿠라", null, 0, null, 77, 85, 77, 0, 160, 300, null, "의술"],
|
||||
[0, "휴우가네지", null, 0, null, 75, 80, 62, 0, 160, 300, null, null],
|
||||
[0, "츠나데", null, 0, null, 75, 70, 84, 0, 160, 300, null, "의술"],
|
||||
[0, "우미노이루카", null, 0, null, 74, 68, 88, 0, 160, 300, null, null],
|
||||
[0, "록리", null, 0, null, 72, 80, 40, 0, 160, 300, null, null],
|
||||
[0, "텐텐", null, 0, null, 76, 55, 84, 0, 160, 300, null, null],
|
||||
[0, "쿠로사와다이아", null, 0, null, 80, 52, 86, 0, 160, 300, null, null],
|
||||
[0, "쿠로사와루비", null, 0, null, 83, 49, 70, 0, 160, 300, null, null],
|
||||
[0, "오하라마리", null, 0, null, 82, 30, 89, 0, 160, 300, null, "상재"],
|
||||
[0, "타카미치카", null, 0, null, 80, 40, 76, 0, 160, 300, null, null],
|
||||
[0, "사쿠라우치리코", null, 0, null, 80, 44, 84, 0, 160, 300, null, null],
|
||||
[0, "큐어에코", null, 0, null, 83, 62, 74, 0, 160, 300, null, null],
|
||||
[0, "홍진호", null, 0, null, 22, 22, 22, 0, 160, 222, null, null, "폭풍저그 콩진호가 간다!"],
|
||||
[0, "큐어러블리", null, 0, null, 80, 83, 47, 0, 160, 300, null, null],
|
||||
[0, "큐어프린세스", null, 0, null, 76, 85, 55, 0, 160, 300, null, null],
|
||||
[0, "큐어허니", null, 0, null, 83, 86, 67, 0, 160, 300, null, null],
|
||||
[0, "큐어포춘", null, 0, null, 82, 90, 80, 0, 160, 300, null, null],
|
||||
[0, "블루", null, 0, null, 41, 29, 17, 0, 160, 210, null, null],
|
||||
[0, "큐어텐더", null, 0, null, 82, 94, 77, 0, 160, 300, null, null],
|
||||
[0, "큐어플로라", null, 0, null, 81, 87, 69, 0, 160, 300, null, null],
|
||||
[0, "임요환", null, 0, null, 89, 57, 100, 0, 160, 300, null, null, "콩은 까야 제맛입니다"],
|
||||
[0, "큐어머메이드", null, 0, null, 88, 80, 93, 0, 160, 300, null, null],
|
||||
[0, "큐어트윙클", null, 0, null, 88, 84, 80, 0, 160, 300, null, null],
|
||||
[0, "큐어미라클", null, 0, null, 80, 86, 74, 0, 160, 300, null, null],
|
||||
[0, "큐어매지컬", null, 0, null, 78, 83, 70, 0, 160, 300, null, null],
|
||||
[0, "큐어펠리체", null, 0, null, 80, 77, 62, 0, 160, 300, null, null],
|
||||
[0, "키쿠오카세이지로", null, 0, null, 83, 42, 78, 0, 160, 300, null, null],
|
||||
[0, "히가타케루", null, 0, null, 70, 27, 90, 0, 160, 300, null, null],
|
||||
[0, "코지코린코", null, 0, null, 75, 40, 89, 0, 160, 300, null, null],
|
||||
[0, "조커", null, 0, null, 76, 90, 90, 0, 160, 300, null, null],
|
||||
[0, "카와리노", null, 0, null, 64, 93, 88, 0, 160, 300, null, null],
|
||||
[0, "크라미 첼", null, 0, null, 72, 42, 82, 0, 160, 300, null, null],
|
||||
[0, "필 닐바렌", null, 0, null, 75, 32, 90, 0, 160, 300, null, null],
|
||||
[0, "플럼스토커", null, 0, null, 78, 52, 89, 0, 160, 300, null, null],
|
||||
[0, "테토", null, 0, null, 75, 39, 95, 0, 160, 300, null, null],
|
||||
[0, "키리야마카즈오", null, 0, null, 92, 99, 97, 0, 160, 300, "패권", "위압", "앞이 나오면 너말대로 분교로가서 다죽이고 뒤가 나오면…. 이살인게임을 받아들이기로."],
|
||||
[0, "스기무라히로키", null, 0, null, 85, 90, 50, 0, 160, 300, null, null, "코토히키…넌 내가 지킬거야…"],
|
||||
[0, "미무라신지", null, 0, null, 89, 35, 93, 0, 160, 300, null, null],
|
||||
[0, "카와다소교", null, 0, null, 72, 58, 85, 0, 160, 300, null, null, "이 게임은 아직 끝나지 않았어…"],
|
||||
[0, "아마쿠사카나데", null, 0, null, 80, 20, 75, 0, 160, 300, null, null],
|
||||
[0, "나레이션", null, 0, null, 50, 50, 50, 0, 160, 300, null, null, "에라베!"],
|
||||
[0, "도라쿠우타케", null, 0, null, 79, 31, 85, 0, 160, 300, null, null],
|
||||
[0, "아마가미소라", null, 0, null, 67, 17, 92, 0, 160, 300, null, null, "그에 대해선 잊어버려! 내꺼니까~♥"],
|
||||
[0, "코우사카쿄우스케", null, 0, null, 70, 19, 30, 0, 160, 300, null, null],
|
||||
[0, "코우사카키리노", null, 0, null, 60, 60, 19, 0, 160, 300, null, null, "나한테 우리오빠 뺏긴 기분이 어떄?"],
|
||||
[0, "쿠로네코", null, 0, null, 81, 20, 72, 0, 160, 300, null, null],
|
||||
[0, "사오리버지나", null, 0, null, 93, 37, 70, 0, 160, 300, null, null],
|
||||
[0, "타무라마나미", null, 0, null, 82, 50, 80, 0, 160, 300, null, null, "남매끼리 연애? 말이된다고 생각해?"],
|
||||
[0, "아라가키아야셰", null, 0, null, 75, 59, 77, 0, 160, 300, null, null],
|
||||
[0, "보보보", null, 0, null, 67, 99, 50, 0, 160, 300, null, null, "코털진권 옥의!"],
|
||||
[0, "젤라티노", null, 0, null, 60, 75, 60, 0, 160, 300, null, null],
|
||||
[0, "돈벼락", null, 0, null, 64, 85, 49, 0, 160, 300, null, null],
|
||||
[0, "뀌리", null, 0, null, 72, 78, 68, 0, 160, 300, null, null],
|
||||
[0, "뷰티", null, 0, null, 77, 33, 90, 0, 160, 300, null, null],
|
||||
[0, "카츠", null, 0, null, 62, 82, 50, 0, 160, 300, null, null],
|
||||
[0, "노야마아즈사", null, 0, null, 82, 30, 72, 0, 160, 300, null, null],
|
||||
[0, "강영웅", null, 0, null, 86, 39, 90, 0, 160, 300, null, null],
|
||||
[0, "마츠오카유이치", null, 0, null, 84, 36, 72, 0, 160, 300, null, null],
|
||||
[0, "타카야나기켄", null, 0, null, 82, 28, 80, 0, 160, 300, null, null],
|
||||
[0, "니시노카오루", null, 0, null, 86, 34, 85, 0, 160, 300, null, null],
|
||||
[0, "코다마미노리", null, 0, null, 75, 30, 82, 0, 160, 300, null, null],
|
||||
[0, "사카키바라요코", null, 0, null, 85, 35, 77, 0, 160, 300, null, null],
|
||||
[0, "혼다미카", null, 0, null, 83, 40, 80, 0, 160, 300, null, null],
|
||||
[0, "미도리카와리에", null, 0, null, 87, 33, 82, 0, 160, 300, null, null],
|
||||
[0, "소마미츠코", null, 0, null, 85, 75, 80, 0, 160, 300, null, null, "뭐. 나도 살려둘 마음은 없었으니까."],
|
||||
[0, "코코", null, 0, null, 77, 19, 80, 0, 160, 300, null, null],
|
||||
[0, "너츠", null, 0, null, 77, 32, 85, 0, 160, 300, null, null],
|
||||
[0, "트리오더마이너", null, 0, null, 52, 84, 45, 0, 160, 300, null, null],
|
||||
[0, "사소리나", null, 0, null, 77, 80, 40, 0, 160, 300, null, null],
|
||||
[0, "킨토레스키", null, 0, null, 77, 100, 70, 0, 160, 300, null, null],
|
||||
[0, "시비렛타", null, 0, null, 54, 76, 89, 0, 160, 300, null, null, "싫어…! 이렇게 죽고싶지 않단말이야…!"],
|
||||
[0, "미즈시타타레", null, 0, null, 76, 80, 70, 0, 160, 300, null, null, "숙제를 잊지마라…!"],
|
||||
[0, "고얀", null, 0, null, 52, 94, 70, 0, 160, 300, null, null],
|
||||
[0, "레지나", null, 0, null, 85, 85, 85, 0, 160, 300, null, null],
|
||||
[0, "킹지코츄", null, 0, null, 56, 90, 70, 0, 160, 300, null, null],
|
||||
[0, "베르", null, 0, null, 43, 62, 90, 0, 160, 300, null, null],
|
||||
[0, "이라", null, 0, null, 89, 81, 60, 0, 160, 300, null, null],
|
||||
[0, "큐어피치", null, 0, null, 77, 88, 59, 0, 160, 300, null, null],
|
||||
[0, "큐어베리", null, 0, null, 78, 80, 70, 0, 160, 300, null, null],
|
||||
[0, "큐어파인", null, 0, null, 76, 82, 75, 0, 160, 300, null, null],
|
||||
[0, "큐어패션", null, 0, null, 79, 84, 83, 0, 160, 300, null, null],
|
||||
[0, "큐어해피", null, 0, null, 82, 82, 40, 0, 160, 300, null, null],
|
||||
[0, "큐어피스", null, 0, null, 84, 78, 14, 0, 160, 300, null, null],
|
||||
[0, "큐어써니", null, 0, null, 80, 80, 72, 0, 160, 300, null, null],
|
||||
[0, "큐어마치", null, 0, null, 83, 82, 75, 0, 160, 300, null, null],
|
||||
[0, "큐어뷰티", null, 0, null, 80, 76, 82, 0, 160, 300, null, null],
|
||||
[0, "큐어휩", null, 0, null, 82, 78, 50, 0, 160, 300, null, null],
|
||||
[0, "큐어커스터드", null, 0, null, 74, 65, 83, 0, 160, 300, null, null],
|
||||
[0, "큐어젤라토", null, 0, null, 82, 78, 83, 0, 160, 300, null, null],
|
||||
[0, "큐어마카롱", null, 0, null, 83, 76, 89, 0, 160, 300, null, null],
|
||||
[0, "큐어파르페", null, 0, null, 81, 80, 80, 0, 160, 300, null, null],
|
||||
[0, "큐어옐", null, 0, null, 85, 78, 74, 0, 160, 300, null, null],
|
||||
[0, "큐어앙주", null, 0, null, 80, 74, 88, 0, 160, 300, null, null],
|
||||
[0, "큐어에투알", null, 0, null, 84, 79, 83, 0, 160, 300, null, null],
|
||||
[0, "큐어마셰리", null, 0, null, 82, 65, 82, 0, 160, 300, null, null],
|
||||
[0, "유메노코토", null, 0, null, 81, 39, 80, 0, 160, 300, null, null, "혼노~ 스코시~ 이지와루나~ 뎅와노 키리카타오~ 시타노~ 다앗테 큐우니 신켄~나~오에데하나시 다스노~ 즈루이~ 스키타요토~ 이와세테아 게나이 다앗테 히카세테아게나이~"]
|
||||
],
|
||||
"general_ex":[
|
||||
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,590 @@
|
||||
{
|
||||
"title": "【가상모드16】 루드라사움",
|
||||
"startYear": 180,
|
||||
"history": [
|
||||
"<C>●</>180년 1월:<L><b>【가상모드16】</> 루드라사움",
|
||||
"<C>●</>180년 1월:<L><b>【이벤트】</b></>제작자 : Cure.",
|
||||
"<C>●</>180년 1월:<L><b>【이벤트】</b></>도움을주신분 : 네이미님, 거북마루님",
|
||||
"<C>●</>180년 1월:<L><b>【이벤트】</b></>루드라사움의 세계관을 불러옵니다."
|
||||
],
|
||||
"stat": {
|
||||
"total": 240,
|
||||
"min": 50,
|
||||
"max": 100
|
||||
},
|
||||
"iconPath": "루드라사움",
|
||||
"fiction": 0,
|
||||
"nation":[
|
||||
|
||||
],
|
||||
"diplomacy":[],
|
||||
"general":[
|
||||
[0, "3G", null, 0, null, 39, 67, 67, 0, 160, 300, null, null],
|
||||
[0, "PG 7", "PG-7.png", 0, null, 82, 83, 60, 0, 160, 300, null, null],
|
||||
[0, "PG 9", "PG-9.png", 0, null, 82, 60, 83, 0, 160, 300, null, null],
|
||||
[0, "가넷", null, 0, null, 88, 56, 88, 0, 160, 300, null, null],
|
||||
[0, "가라샤", null, 0, null, 70, 68, 47, 0, 160, 300, null, null],
|
||||
[0, "가르티아", null, 0, null, 73, 101, 73, 0, 160, 300, null, null],
|
||||
[0, "가무로아 마티오", "가무로아-마티오.png", 0, null, 60, 40, 60, 0, 160, 300, null, null],
|
||||
[0, "가와노에 미네", "가와노에-미네.png", 0, null, 71, 71, 71, 0, 160, 300, null, null],
|
||||
[0, "가와노에 유즈루", "가와노에-유즈루.png", 0, null, 76, 76, 61, 0, 160, 300, null, null],
|
||||
[0, "가이야스 야스토", null, 0, null, 51, 60, 31, 0, 160, 300, null, null],
|
||||
[0, "가이젤 고도", null, 0, null, 60, 40, 60, 0, 160, 300, null, null],
|
||||
[0, "검호", null, 0, null, 74, 80, 59, 0, 160, 300, null, null],
|
||||
[0, "겐리", null, 0, null, 77, 55, 72, 0, 160, 300, null, null],
|
||||
[0, "겟코", null, 0, null, 80, 85, 58, 0, 160, 300, null, null],
|
||||
[0, "고닌자 그린", "고닌자-그린.png", 0, null, 60, 20, 65, 0, 160, 300, null, null],
|
||||
[0, "고닌자 레드", "고닌자-레드.png", 0, null, 75, 70, 10, 0, 160, 300, null, null],
|
||||
[0, "고닌자 블랙", "고닌자-블랙.png", 0, null, 70, 65, 20, 0, 160, 300, null, null],
|
||||
[0, "고닌자 블루", "고닌자-블루.png", 0, null, 65, 75, 15, 0, 160, 300, null, null],
|
||||
[0, "고닌자 옐로", "고닌자-옐로.png", 0, null, 60, 15, 70, 0, 160, 300, null, null],
|
||||
[0, "고에몬", null, 0, null, 55, 40, 50, 0, 160, 300, null, null],
|
||||
[0, "고킨켄", null, 0, null, 70, 83, 44, 0, 160, 300, null, null],
|
||||
[0, "고토", null, 0, null, 55, 40, 51, 0, 160, 300, null, null],
|
||||
[0, "곤", null, 0, null, 76, 81, 59, 0, 160, 300, null, null],
|
||||
[0, "곤도 이사미", null, 0, null, 42, 22, 60, 0, 160, 300, null, null],
|
||||
[0, "그라크 알카포네", null, 0, null, 55, 40, 52, 0, 160, 300, null, null],
|
||||
[0, "그린 오니", null, 0, null, 55, 40, 53, 0, 160, 300, null, null],
|
||||
[0, "기가이", null, 0, null, 80, 99, 63, 0, 160, 300, null, null],
|
||||
[0, "김치 드라이브", "김치-드라이브.png", 0, null, 34, 67, 68, 0, 160, 300, null, null],
|
||||
[0, "나기 스 라갈", "나기-스-라갈.png", 0, null, 87, 54, 93, 0, 160, 300, null, null],
|
||||
[0, "나오에 아이", "나오에-아이.png", 0, null, 92, 49, 72, 0, 160, 300, null, null],
|
||||
[0, "나와토리", null, 0, null, 75, 75, 61, 0, 160, 300, null, null],
|
||||
[0, "나토리", null, 0, null, 80, 58, 85, 0, 160, 300, null, null],
|
||||
[0, "난죠 란", "난죠-란.png", 0, null, 83, 49, 72, 0, 160, 300, null, null],
|
||||
[0, "네로차페트7세", null, 0, null, 76, 67, 34, 0, 160, 300, null, null],
|
||||
[0, "네이 우롱", "네이-우롱.png", 0, null, 55, 40, 54, 0, 160, 300, null, null],
|
||||
[0, "네카이 시스", "네카이-시스.png", 0, null, 78, 69, 38, 0, 160, 300, null, null],
|
||||
[0, "넬슨 서버", "넬슨-서버.png", 0, null, 79, 60, 50, 0, 160, 300, null, null],
|
||||
[0, "노기쿠", null, 0, null, 77, 63, 78, 0, 160, 300, null, null],
|
||||
[0, "노벨", null, 0, null, 55, 40, 55, 0, 160, 300, null, null],
|
||||
[0, "노스", null, 0, null, 92, 106, 50, 0, 160, 300, null, null],
|
||||
[0, "노아 하코부네", "노아-하코부네.png", 0, null, 74, 46, 74, 0, 160, 300, null, null],
|
||||
[0, "노에마세", null, 0, null, 55, 40, 56, 0, 160, 300, null, null],
|
||||
[0, "누누하라 캐비지", "누누하라-캐비지.png", 0, null, 65, 59, 60, 0, 160, 300, null, null],
|
||||
[0, "느와르", null, 0, null, 77, 78, 63, 0, 160, 300, null, null],
|
||||
[0, "니나", null, 0, null, 55, 40, 57, 0, 160, 300, null, null],
|
||||
[0, "니들", null, 0, null, 76, 76, 54, 0, 160, 300, null, null],
|
||||
[0, "니코페리", null, 0, null, 87, 52, 97, 0, 160, 300, null, null],
|
||||
[0, "닛코", null, 0, null, 55, 90, 90, 0, 160, 300, null, null],
|
||||
[0, "다 게일", "다-게일.png", 0, null, 64, 70, 70, 0, 160, 300, null, null],
|
||||
[0, "다니엘 세프티", "다니엘-세프티.png", 0, null, 55, 40, 58, 0, 160, 300, null, null],
|
||||
[0, "다마네기", null, 0, null, 55, 40, 59, 0, 160, 300, null, null],
|
||||
[0, "다이몬 지타로", null, 0, null, 55, 50, 40, 0, 160, 300, null, null],
|
||||
[0, "다크란스", null, 0, null, 75, 100, 67, 0, 160, 300, null, null],
|
||||
[0, "닷지 에반스", null, 0, null, 47, 60, 27, 0, 160, 300, null, null],
|
||||
[0, "덴저러스 브라보", null, 0, null, 55, 51, 40, 0, 160, 300, null, null],
|
||||
[0, "덴즈 브라우", null, 0, null, 55, 52, 40, 0, 160, 300, null, null],
|
||||
[0, "도르한 크리케트", "도르한-크리케트.png", 0, null, 67, 58, 69, 0, 160, 300, null, null],
|
||||
[0, "도시바", null, 0, null, 89, 32, 59, 0, 160, 300, null, null],
|
||||
[0, "도코모", null, 0, null, 48, 60, 28, 0, 160, 300, null, null],
|
||||
[0, "도하라스 해피네스", null, 0, null, 55, 53, 40, 0, 160, 300, null, null],
|
||||
[0, "돈 도에스스키", "돈-도에스스키.png", 0, null, 55, 54, 40, 0, 160, 300, null, null],
|
||||
[0, "듀란", null, 0, null, 67, 67, 39, 0, 160, 300, null, null],
|
||||
[0, "라 사이젤", "라-사이젤.png", 0, null, 84, 103, 59, 0, 160, 300, null, null],
|
||||
[0, "라 하우젤", "라-하우젤.png", 0, null, 84, 103, 59, 0, 160, 300, null, null],
|
||||
[0, "라기시스", null, 0, null, 61, 70, 92, 0, 160, 300, null, null],
|
||||
[0, "라돈 알폰느", "라돈-알폰느.png", 0, null, 55, 55, 40, 0, 160, 300, null, null],
|
||||
[0, "라르가", null, 0, null, 69, 56, 69, 0, 160, 300, null, null],
|
||||
[0, "라벤더", null, 0, null, 55, 56, 40, 0, 160, 300, null, null],
|
||||
[0, "라우네아", null, 0, null, 78, 89, 61, 0, 160, 300, null, null],
|
||||
[0, "라인코크", null, 0, null, 82, 61, 91, 0, 160, 300, null, null],
|
||||
[0, "라인하르트", null, 0, null, 63, 75, 43, 0, 160, 300, null, null],
|
||||
[0, "라쳇 랜천", null, 0, null, 55, 57, 40, 0, 160, 300, null, null],
|
||||
[0, "라크 파이크스피크", null, 0, null, 55, 58, 40, 0, 160, 300, null, null],
|
||||
[0, "라파리아 무스카", null, 0, null, 55, 59, 50, 0, 160, 300, null, null],
|
||||
[0, "란마루", null, 0, null, 73, 74, 59, 0, 160, 300, null, null],
|
||||
[0, "란스", null, 0, null, 89, 105, 51, 0, 160, 300, null, null],
|
||||
[0, "래시", null, 0, null, 75, 83, 19, 0, 160, 300, null, null],
|
||||
[0, "레드 오니", null, 0, null, 60, 40, 50, 0, 160, 300, null, null],
|
||||
[0, "레드아이", null, 0, null, 81, 84, 84, 0, 160, 300, null, null],
|
||||
[0, "레류코프 바코프", "레류코프-바코프.png", 0, null, 79, 80, 59, 0, 160, 300, null, null],
|
||||
[0, "레리 세리카", null, 0, null, 60, 40, 51, 0, 160, 300, null, null],
|
||||
[0, "레베카 코프리", "레베카-코프리.png", 0, null, 66, 49, 64, 0, 160, 300, null, null],
|
||||
[0, "레이", null, 0, null, 85, 109, 53, 0, 160, 300, null, null],
|
||||
[0, "레이라 글레크니", "레이라-글레크니.png", 0, null, 73, 80, 54, 0, 160, 300, null, null],
|
||||
[0, "레이콕", null, 0, null, 75, 66, 50, 0, 160, 300, null, null],
|
||||
[0, "레자리안", null, 0, null, 60, 40, 52, 0, 160, 300, null, null],
|
||||
[0, "렉싱턴", null, 0, null, 87, 97, 60, 0, 160, 300, null, null],
|
||||
[0, "렌고쿠", null, 0, null, 87, 84, 57, 0, 160, 300, null, null],
|
||||
[0, "로나 케스치나", "로나-케스치나.png", 0, null, 51, 55, 55, 0, 160, 300, null, null],
|
||||
[0, "로도네 로도네", "로도네-로도네.png", 0, null, 59, 67, 67, 0, 160, 300, null, null],
|
||||
[0, "로라 인더스", "로라-인더스.png", 0, null, 60, 40, 53, 0, 160, 300, null, null],
|
||||
[0, "로레 엔론", "로레-엔론.png", 0, null, 55, 40, 65, 0, 160, 300, null, null],
|
||||
[0, "로렉스 가드라스", "로렉스-가드라스.png", 0, null, 85, 90, 55, 0, 160, 300, null, null],
|
||||
[0, "로버트 랜드스타", "로버트-랜드스타.png", 0, null, 60, 40, 54, 0, 160, 300, null, null],
|
||||
[0, "로제 카드", "로제-카드.png", 0, null, 69, 60, 49, 0, 160, 300, null, null],
|
||||
[0, "로즈", null, 0, null, 60, 40, 55, 0, 160, 300, null, null],
|
||||
[0, "로키 뱅크", "로키-뱅크.png", 0, null, 60, 40, 56, 0, 160, 300, null, null],
|
||||
[0, "루리카 카라", "루리카-카라.png", 0, null, 69, 48, 70, 0, 160, 300, null, null],
|
||||
[0, "루베란 체르", "루베란-체르.png", 0, null, 60, 40, 57, 0, 160, 300, null, null],
|
||||
[0, "루시 줄리에타", "루시-줄리에타.png", 0, null, 35, 65, 65, 0, 160, 300, null, null],
|
||||
[0, "루이스 키토와크", null, 0, null, 60, 40, 58, 0, 160, 300, null, null],
|
||||
[0, "루트 아리", "루트-아리.png", 0, null, 39, 67, 67, 0, 160, 300, null, null],
|
||||
[0, "르메이", null, 0, null, 89, 95, 54, 0, 160, 300, null, null],
|
||||
[0, "리림", null, 0, null, 76, 71, 71, 0, 160, 300, null, null],
|
||||
[0, "리세트 카라", "리세트-카라.png", 0, null, 64, 53, 72, 0, 160, 300, null, null],
|
||||
[0, "리아P리자스", null, 0, null, 97, 34, 44, 0, 160, 300, null, null],
|
||||
[0, "리즈나 란프비트", "리즈나-란프비트.png", 0, null, 80, 53, 95, 0, 160, 300, null, null],
|
||||
[0, "릭 아디슨", "릭-아디슨.png", 0, null, 83, 96, 62, 0, 160, 300, null, null],
|
||||
[0, "마도", null, 0, null, 82, 87, 58, 0, 160, 300, null, null],
|
||||
[0, "마르티나 카레", "마르티나-카레.png", 0, null, 72, 45, 56, 0, 160, 300, null, null],
|
||||
[0, "마리스", null, 0, null, 79, 58, 86, 0, 160, 300, null, null],
|
||||
[0, "마리시텐", null, 0, null, 60, 50, 40, 0, 160, 300, null, null],
|
||||
[0, "마리아 카스타드", "마리아-카스타드.png", 0, null, 73, 58, 73, 0, 160, 300, null, null],
|
||||
[0, "마사무네", null, 0, null, 92, 95, 54, 0, 160, 300, null, null],
|
||||
[0, "마사토 이주인", null, 0, null, 60, 51, 40, 0, 160, 300, null, null],
|
||||
[0, "마소우 시즈카", "마소우-시즈카.png", 0, null, 87, 54, 93, 0, 160, 300, null, null],
|
||||
[0, "마스조웨", null, 0, null, 87, 97, 60, 0, 160, 300, null, null],
|
||||
[0, "마시 줄리에타", "마시-줄리에타.png", 0, null, 35, 65, 65, 0, 160, 300, null, null],
|
||||
[0, "마에다 케이지", "마에다-케이지.png", 0, null, 71, 63, 69, 0, 160, 300, null, null],
|
||||
[0, "마에다 토시이에", "마에다-토시이에.png", 0, null, 73, 53, 67, 0, 160, 300, null, null],
|
||||
[0, "마키바노 메구", "마키바노-메구.png", 0, null, 60, 52, 40, 0, 160, 300, null, null],
|
||||
[0, "마키바노 앤트", "마키바노-앤트.png", 0, null, 60, 53, 40, 0, 160, 300, null, null],
|
||||
[0, "마틸다 마테우리", "마틸다-마테우리.png", 0, null, 71, 83, 61, 0, 160, 300, null, null],
|
||||
[0, "마하 마가렛", "마하-마가렛.png", 0, null, 70, 50, 83, 0, 160, 300, null, null],
|
||||
[0, "마호코P마사이", null, 0, null, 71, 56, 70, 0, 160, 300, null, null],
|
||||
[0, "만마루", null, 0, null, 60, 54, 40, 0, 160, 300, null, null],
|
||||
[0, "매직 더 간지", "매직-더-간지.png", 0, null, 96, 41, 94, 0, 160, 300, null, null],
|
||||
[0, "머슬", null, 0, null, 70, 82, 60, 0, 160, 300, null, null],
|
||||
[0, "메가데스 모로미", "메가데스-모로미.png", 0, null, 62, 46, 68, 0, 160, 300, null, null],
|
||||
[0, "메가스", null, 0, null, 70, 75, 57, 0, 160, 300, null, null],
|
||||
[0, "메가와스", null, 0, null, 70, 75, 57, 0, 160, 300, null, null],
|
||||
[0, "메가포스", null, 0, null, 70, 75, 57, 0, 160, 300, null, null],
|
||||
[0, "메나드 시세이", "메나드-시세이.png", 0, null, 71, 70, 56, 0, 160, 300, null, null],
|
||||
[0, "메디우사", null, 0, null, 72, 100, 75, 0, 160, 300, null, null],
|
||||
[0, "메르시 아처", "메르시-아처.png", 0, null, 38, 69, 58, 0, 160, 300, null, null],
|
||||
[0, "메리 앤", "메리-앤.png", 0, null, 60, 55, 40, 0, 160, 300, null, null],
|
||||
[0, "메림 체르", "메림-체르.png", 0, null, 54, 64, 56, 0, 160, 300, null, null],
|
||||
[0, "메이", null, 0, null, 60, 56, 40, 0, 160, 300, null, null],
|
||||
[0, "멜페이스", null, 0, null, 73, 61, 81, 0, 160, 300, null, null],
|
||||
[0, "모던 카라", "모던-카라.png", 0, null, 90, 48, 100, 0, 160, 300, null, null],
|
||||
[0, "모리 모토나리", "모리-모토나리.png", 0, null, 87, 93, 56, 0, 160, 300, null, null],
|
||||
[0, "모리 테루", "모리-테루.png", 0, null, 82, 88, 60, 0, 160, 300, null, null],
|
||||
[0, "모스크바 동장군", "모스크바-동장군.png", 0, null, 90, 73, 73, 0, 160, 300, null, null],
|
||||
[0, "모즈나", null, 0, null, 60, 57, 40, 0, 160, 300, null, null],
|
||||
[0, "모코모코", null, 0, null, 60, 58, 41, 0, 160, 300, null, null],
|
||||
[0, "무라라", null, 0, null, 65, 72, 44, 0, 160, 300, null, null],
|
||||
[0, "미 로드링", "미-로드링.png", 0, null, 78, 41, 79, 0, 160, 300, null, null],
|
||||
[0, "미네바 마가렛", "미네바-마가렛.png", 0, null, 84, 93, 63, 0, 160, 300, null, null],
|
||||
[0, "미라클 토우", "미라클-토우.png", 0, null, 64, 73, 103, 0, 160, 300, null, null],
|
||||
[0, "미르 요크스", "미르-요크스.png", 0, null, 67, 71, 49, 0, 160, 300, null, null],
|
||||
[0, "미리 요크스", "미리-요크스.png", 0, null, 68, 76, 54, 0, 160, 300, null, null],
|
||||
[0, "미스테리아 토우", "미스테리아-토우.png", 0, null, 81, 63, 93, 0, 160, 300, null, null],
|
||||
[0, "미쓰비시", null, 0, null, 91, 60, 55, 0, 160, 300, null, null],
|
||||
[0, "미쓰이", null, 0, null, 89, 60, 31, 0, 160, 300, null, null],
|
||||
[0, "미캉", null, 0, null, 56, 52, 64, 0, 160, 300, null, null],
|
||||
[0, "미킬 데파 라질", "미킬-데파-라질.png", 0, null, 60, 58, 40, 0, 160, 300, null, null],
|
||||
[0, "밀리 링클", "밀리-링클.png", 0, null, 54, 62, 56, 0, 160, 300, null, null],
|
||||
[0, "바레스 프로반스", "바레스-프로반스.png", 0, null, 82, 81, 53, 0, 160, 300, null, null],
|
||||
[0, "바바 쇼우엔", "바바-쇼우엔.png", 0, null, 82, 79, 59, 0, 160, 300, null, null],
|
||||
[0, "바바라", null, 0, null, 82, 58, 87, 0, 160, 300, null, null],
|
||||
[0, "바보라", null, 0, null, 76, 99, 70, 0, 160, 300, null, null],
|
||||
[0, "바쇼 마티오", "바쇼-마티오.png", 0, null, 60, 59, 50, 0, 160, 300, null, null],
|
||||
[0, "바운드 레스", null, 0, null, 50, 50, 50, 0, 160, 300, null, null],
|
||||
[0, "반 데로스", null, 0, null, 20, 49, 66, 0, 160, 300, null, null],
|
||||
[0, "배팅 센터즈", "배팅-센터즈.png", 0, null, 78, 59, 81, 0, 160, 300, null, null],
|
||||
[0, "버나드 세라미테", "버나드-세라미테.png", 0, null, 66, 65, 65, 0, 160, 300, null, null],
|
||||
[0, "버드 리스피", "버드-리스피.png", 0, null, 61, 62, 58, 0, 160, 300, null, null],
|
||||
[0, "베제르아이", null, 0, null, 87, 93, 55, 0, 160, 300, null, null],
|
||||
[0, "베키", null, 0, null, 20, 49, 66, 0, 160, 300, null, null],
|
||||
[0, "벨", null, 0, null, 20, 49, 66, 0, 160, 300, null, null],
|
||||
[0, "보두", null, 0, null, 67, 67, 50, 0, 160, 300, null, null],
|
||||
[0, "보브자 프란다스", null, 0, null, 42, 60, 22, 0, 160, 300, null, null],
|
||||
[0, "복수짱", null, 0, null, 70, 80, 56, 0, 160, 300, null, null],
|
||||
[0, "브란브라", null, 0, null, 74, 65, 52, 0, 160, 300, null, null],
|
||||
[0, "브리티쉬", null, 0, null, 79, 93, 65, 0, 160, 300, null, null],
|
||||
[0, "블랙 로터스", "블랙-로터스.png", 0, null, 33, 55, 72, 0, 160, 300, null, null],
|
||||
[0, "블레이저", null, 0, null, 20, 49, 66, 0, 160, 300, null, null],
|
||||
[0, "블루 오니", null, 0, null, 20, 49, 66, 0, 160, 300, null, null],
|
||||
[0, "비비드 카라", "비비드-카라.png", 0, null, 92, 47, 100, 0, 160, 300, null, null],
|
||||
[0, "비스케타 벨룬즈", "비스케타-벨룬즈.png", 0, null, 20, 49, 66, 0, 160, 300, null, null],
|
||||
[0, "비욘호우 오스만", "비욘호우-오스만.png", 0, null, 35, 69, 65, 0, 160, 300, null, null],
|
||||
[0, "빈탄 데스트라", null, 0, null, 41, 60, 21, 0, 160, 300, null, null],
|
||||
[0, "빗치 고르치", null, 0, null, 20, 49, 66, 0, 160, 300, null, null],
|
||||
[0, "사나다 토우린", "사나다-토우린.png", 0, null, 94, 47, 82, 0, 160, 300, null, null],
|
||||
[0, "사나키아", null, 0, null, 20, 49, 66, 0, 160, 300, null, null],
|
||||
[0, "사메잔", null, 0, null, 82, 56, 89, 0, 160, 300, null, null],
|
||||
[0, "사야 프라이디", "사야-프라이디.png", 0, null, 39, 67, 67, 0, 160, 300, null, null],
|
||||
[0, "사유", null, 0, null, 20, 49, 66, 0, 160, 300, null, null],
|
||||
[0, "사이아스 크라운", "사이아스-크라운.png", 0, null, 81, 54, 80, 0, 160, 300, null, null],
|
||||
[0, "사치코 센터즈", "사치코-센터즈.png", 0, null, 74, 74, 64, 0, 160, 300, null, null],
|
||||
[0, "사카나쿠 텐카", null, 0, null, 48, 28, 60, 0, 160, 300, null, null],
|
||||
[0, "사카모토 료마", "사카모토-료마.png", 0, null, 81, 80, 54, 0, 160, 300, null, null],
|
||||
[0, "사카이 타다츠구", "사카이-타다츠구.png", 0, null, 72, 68, 53, 0, 160, 300, null, null],
|
||||
[0, "사카키바라", null, 0, null, 72, 53, 68, 0, 160, 300, null, null],
|
||||
[0, "사쿠라 카라", "사쿠라-카라.png", 0, null, 76, 73, 73, 0, 160, 300, null, null],
|
||||
[0, "사테라", null, 0, null, 82, 81, 81, 0, 160, 300, null, null],
|
||||
[0, "사파이어", null, 0, null, 88, 88, 56, 0, 160, 300, null, null],
|
||||
[0, "산카쿠", null, 0, null, 20, 49, 66, 0, 160, 300, null, null],
|
||||
[0, "삼손 막시모프", "삼손-막시모프.png", 0, null, 20, 49, 66, 0, 160, 300, null, null],
|
||||
[0, "샤론", null, 0, null, 77, 75, 75, 0, 160, 300, null, null],
|
||||
[0, "샤리에라", null, 0, null, 37, 58, 70, 0, 160, 300, null, null],
|
||||
[0, "세라크로라스", null, 0, null, 80, 4, 80, 0, 160, 300, null, null],
|
||||
[0, "세스나 벤빌", "세스나-벤빌.png", 0, null, 64, 70, 54, 0, 160, 300, null, null],
|
||||
[0, "세실 카나", "세실-카나.png", 0, null, 79, 80, 57, 0, 160, 300, null, null],
|
||||
[0, "세이간", null, 0, null, 83, 48, 77, 0, 160, 300, null, null],
|
||||
[0, "세이조 모치키요", null, 0, null, 47, 27, 60, 0, 160, 300, null, null],
|
||||
[0, "세일러", null, 0, null, 20, 49, 66, 0, 160, 300, null, null],
|
||||
[0, "세키토리", null, 0, null, 20, 49, 66, 0, 160, 300, null, null],
|
||||
[0, "세티나 파보", "세티나-파보.png", 0, null, 20, 49, 66, 0, 160, 300, null, null],
|
||||
[0, "세피아 랜드스타", "세피아-랜드스타.png", 0, null, 20, 49, 66, 0, 160, 300, null, null],
|
||||
[0, "셀 카치골프", "셀-카치골프.png", 0, null, 44, 20, 60, 0, 160, 300, null, null],
|
||||
[0, "소르니아 벤츠", "소르니아-벤츠.png", 0, null, 43, 21, 60, 0, 160, 300, null, null],
|
||||
[0, "소울 레스", null, 0, null, 42, 22, 60, 0, 160, 300, null, null],
|
||||
[0, "소환짱", null, 0, null, 41, 23, 61, 0, 160, 300, null, null],
|
||||
[0, "솔트안", null, 0, null, 69, 64, 68, 0, 160, 300, null, null],
|
||||
[0, "슈퍼 간지", "슈퍼-간지.png", 0, null, 98, 41, 99, 0, 160, 300, null, null],
|
||||
[0, "스 프로반스", "스-프로반스.png", 0, null, 72, 56, 69, 0, 160, 300, null, null],
|
||||
[0, "스바 고야", null, 0, null, 51, 31, 60, 0, 160, 300, null, null],
|
||||
[0, "스즈메", null, 0, null, 75, 85, 75, 0, 160, 300, null, null],
|
||||
[0, "스즈야 무쌍", "스즈야-무쌍.png", 0, null, 56, 79, 79, 0, 160, 300, null, null],
|
||||
[0, "스즈키", null, 0, null, 40, 24, 61, 0, 160, 300, null, null],
|
||||
[0, "스테셀 로마노프", "스테셀-로마노프.png", 0, null, 38, 63, 67, 0, 160, 300, null, null],
|
||||
[0, "스트로가노프", null, 0, null, 33, 82, 45, 0, 160, 300, null, null],
|
||||
[0, "스티브 올란다", null, 0, null, 50, 30, 60, 0, 160, 300, null, null],
|
||||
[0, "스파르탄", null, 0, null, 39, 25, 61, 0, 160, 300, null, null],
|
||||
[0, "시게히코", null, 0, null, 80, 75, 30, 0, 160, 300, null, null],
|
||||
[0, "시노다 겐고로", "시노다-겐고로.png", 0, null, 83, 56, 88, 0, 160, 300, null, null],
|
||||
[0, "시노부", null, 0, null, 53, 74, 74, 0, 160, 300, null, null],
|
||||
[0, "시라 헬만", "시라-헬만.png", 0, null, 99, 47, 83, 0, 160, 300, null, null],
|
||||
[0, "시르바렐", null, 0, null, 38, 26, 62, 0, 160, 300, null, null],
|
||||
[0, "시마즈 요시히사", "시마즈-요시히사.png", 0, null, 91, 83, 48, 0, 160, 300, null, null],
|
||||
[0, "시마즈 이에히사", "시마즈-이에히사.png", 0, null, 87, 74, 61, 0, 160, 300, null, null],
|
||||
[0, "시마즈 카즈히사", "시마즈-카즈히사.png", 0, null, 85, 81, 56, 0, 160, 300, null, null],
|
||||
[0, "시마즈 토시히사", "시마즈-토시히사.png", 0, null, 91, 48, 83, 0, 160, 300, null, null],
|
||||
[0, "시바타 가츠이에", "시바타-가츠이에.png", 0, null, 80, 76, 45, 0, 160, 300, null, null],
|
||||
[0, "시저", null, 0, null, 81, 98, 63, 0, 160, 300, null, null],
|
||||
[0, "시치세이", null, 0, null, 80, 62, 84, 0, 160, 300, null, null],
|
||||
[0, "시카쿠", null, 0, null, 37, 27, 62, 0, 160, 300, null, null],
|
||||
[0, "시키부", null, 0, null, 85, 86, 58, 0, 160, 300, null, null],
|
||||
[0, "시타크 루소", null, 0, null, 49, 29, 60, 0, 160, 300, null, null],
|
||||
[0, "신시아", null, 0, null, 43, 28, 62, 0, 160, 300, null, null],
|
||||
[0, "실 플라인", "실-플라인.png", 0, null, 75, 63, 101, 0, 160, 300, null, null],
|
||||
[0, "실키 리틀레즌", "실키-리틀레즌.png", 0, null, 87, 108, 53, 0, 160, 300, null, null],
|
||||
[0, "실피드", null, 0, null, 42, 29, 63, 0, 160, 300, null, null],
|
||||
[0, "아길레다", null, 0, null, 77, 81, 50, 0, 160, 300, null, null],
|
||||
[0, "아나셀 카스포라", "아나셀-카스포라.png", 0, null, 33, 66, 67, 0, 160, 300, null, null],
|
||||
[0, "아니", null, 0, null, 41, 30, 63, 0, 160, 300, null, null],
|
||||
[0, "아니스 사와타리", "아니스-사와타리.png", 0, null, 78, 61, 106, 0, 160, 300, null, null],
|
||||
[0, "아레프갈드", null, 0, null, 81, 64, 95, 0, 160, 300, null, null],
|
||||
[0, "아르카리아", null, 0, null, 73, 72, 72, 0, 160, 300, null, null],
|
||||
[0, "아리스토레스 캄", "아리스토레스-캄.png", 0, null, 81, 73, 53, 0, 160, 300, null, null],
|
||||
[0, "아리시아", null, 0, null, 40, 31, 63, 0, 160, 300, null, null],
|
||||
[0, "아리오스 테오만", "아리오스-테오만.png", 0, null, 88, 104, 51, 0, 160, 300, null, null],
|
||||
[0, "아마즈사", null, 0, null, 39, 32, 64, 0, 160, 300, null, null],
|
||||
[0, "아미란 바코프", "아미란-바코프.png", 0, null, 38, 33, 64, 0, 160, 300, null, null],
|
||||
[0, "아미토스", null, 0, null, 89, 70, 55, 0, 160, 300, null, null],
|
||||
[0, "아바토르 스캇트", null, 0, null, 40, 60, 20, 0, 160, 300, null, null],
|
||||
[0, "아베 헤이조", null, 0, null, 37, 34, 64, 0, 160, 300, null, null],
|
||||
[0, "아벨트 세프티", "아벨트-세프티.png", 0, null, 79, 98, 68, 0, 160, 300, null, null],
|
||||
[0, "아부라코 도우산", "아부라코-도우산.png", 0, null, 73, 71, 48, 0, 160, 300, null, null],
|
||||
[0, "아사히나 하쿠만", null, 0, null, 54, 20, 40, 0, 160, 300, null, null],
|
||||
[0, "아스베스트", null, 0, null, 70, 70, 52, 0, 160, 300, null, null],
|
||||
[0, "아스카 카드뮴", "아스카-카드뮴.png", 0, null, 60, 50, 54, 0, 160, 300, null, null],
|
||||
[0, "아시 줄리에타", "아시-줄리에타.png", 0, null, 38, 66, 60, 0, 160, 300, null, null],
|
||||
[0, "아시카가 쵸신", "아시카가-쵸신.png", 0, null, 66, 44, 50, 0, 160, 300, null, null],
|
||||
[0, "아야 후지노미야", "아야-후지노미야.png", 0, null, 53, 20, 41, 0, 160, 300, null, null],
|
||||
[0, "아오이", null, 0, null, 50, 62, 48, 0, 160, 300, null, null],
|
||||
[0, "아이 컴", "아이-컴.png", 0, null, 39, 61, 60, 0, 160, 300, null, null],
|
||||
[0, "아이작", null, 0, null, 52, 60, 32, 0, 160, 300, null, null],
|
||||
[0, "아이젤", null, 0, null, 81, 59, 107, 0, 160, 300, null, null],
|
||||
[0, "아치볼트", null, 0, null, 52, 20, 42, 0, 160, 300, null, null],
|
||||
[0, "아카시 카제마루", "아카시-카제마루.png", 0, null, 80, 68, 37, 0, 160, 300, null, null],
|
||||
[0, "아카시로 카라", "아카시로-카라.png", 0, null, 70, 52, 70, 0, 160, 300, null, null],
|
||||
[0, "아케치 미츠히데", "아케치-미츠히데.png", 0, null, 76, 41, 67, 0, 160, 300, null, null],
|
||||
[0, "아키 델", "아키-델.png", 0, null, 51, 20, 43, 0, 160, 300, null, null],
|
||||
[0, "아키히메", null, 0, null, 38, 66, 60, 0, 160, 300, null, null],
|
||||
[0, "아타고 마카트", "아타고-마카트.png", 0, null, 50, 20, 44, 0, 160, 300, null, null],
|
||||
[0, "아테나1호", null, 0, null, 49, 20, 45, 0, 160, 300, null, null],
|
||||
[0, "아테나2호", null, 0, null, 74, 70, 70, 0, 160, 300, null, null],
|
||||
[0, "아텐 누", "아텐-누.png", 0, null, 64, 55, 82, 0, 160, 300, null, null],
|
||||
[0, "아틀란타", null, 0, null, 85, 90, 58, 0, 160, 300, null, null],
|
||||
[0, "아파치", null, 0, null, 73, 78, 57, 0, 160, 300, null, null],
|
||||
[0, "알렉산더", null, 0, null, 73, 67, 55, 0, 160, 300, null, null],
|
||||
[0, "알렉스 발스", "알렉스-발스.png", 0, null, 86, 45, 90, 0, 160, 300, null, null],
|
||||
[0, "알카네제 라이즈", "알카네제-라이즈.png", 0, null, 79, 86, 56, 0, 160, 300, null, null],
|
||||
[0, "알코트 마리우스", "알코트-마리우스.png", 0, null, 90, 46, 89, 0, 160, 300, null, null],
|
||||
[0, "알토 한브라", null, 0, null, 48, 20, 46, 0, 160, 300, null, null],
|
||||
[0, "암 이스엘", "암-이스엘.png", 0, null, 77, 61, 105, 0, 160, 300, null, null],
|
||||
[0, "암즈 아크", "암즈-아크.png", 0, null, 77, 94, 64, 0, 160, 300, null, null],
|
||||
[0, "야마가타", null, 0, null, 82, 61, 77, 0, 160, 300, null, null],
|
||||
[0, "야마나카 코지카", "야마나카-코지카.png", 0, null, 79, 35, 73, 0, 160, 300, null, null],
|
||||
[0, "야마다", null, 0, null, 47, 20, 47, 0, 160, 300, null, null],
|
||||
[0, "야마다 치즈코", "야마다-치즈코.png", 0, null, 85, 42, 85, 0, 160, 300, null, null],
|
||||
[0, "야마모토 란기", "야마모토-란기.png", 0, null, 76, 76, 59, 0, 160, 300, null, null],
|
||||
[0, "에구치", null, 0, null, 46, 20, 48, 0, 160, 300, null, null],
|
||||
[0, "에로피챠 냥코", "에로피챠-냥코.png", 0, null, 45, 20, 49, 0, 160, 300, null, null],
|
||||
[0, "에르무 트라이", "에르무-트라이.png", 0, null, 44, 20, 50, 0, 160, 300, null, null],
|
||||
[0, "에르시르", null, 0, null, 78, 74, 74, 0, 160, 300, null, null],
|
||||
[0, "에리느 해피네스", null, 0, null, 43, 20, 51, 0, 160, 300, null, null],
|
||||
[0, "에미 알폰느", "에미-알폰느.png", 0, null, 73, 61, 52, 0, 160, 300, null, null],
|
||||
[0, "엑스 반케트", "엑스-반케트.png", 0, null, 90, 79, 52, 0, 160, 300, null, null],
|
||||
[0, "엘레나 엘알", "엘레나-엘알.png", 0, null, 42, 20, 52, 0, 160, 300, null, null],
|
||||
[0, "엘레나 플라워", "엘레나-플라워.png", 0, null, 55, 78, 30, 0, 160, 300, null, null],
|
||||
[0, "엘레노아 란", "엘레노아-란.png", 0, null, 74, 50, 76, 0, 160, 300, null, null],
|
||||
[0, "엘리자베스 데스", "엘리자베스-데스.png", 0, null, 38, 64, 66, 0, 160, 300, null, null],
|
||||
[0, "엣찌", null, 0, null, 49, 60, 29, 0, 160, 300, null, null],
|
||||
[0, "예리코 코론", "예리코-코론.png", 0, null, 41, 20, 53, 0, 160, 300, null, null],
|
||||
[0, "오가와 켄타로", "오가와-켄타로.png", 0, null, 84, 96, 63, 0, 160, 300, null, null],
|
||||
[0, "오기르 롯 스테인", null, 0, null, 40, 20, 54, 0, 160, 300, null, null],
|
||||
[0, "오노하 메스포스", "오노하-메스포스.png", 0, null, 39, 60, 64, 0, 160, 300, null, null],
|
||||
[0, "오다 노부나가", "오다-노부나가.png", 0, null, 81, 97, 67, 0, 160, 300, null, null],
|
||||
[0, "오다 코우", "오다-코우.png", 0, null, 91, 56, 44, 0, 160, 300, null, null],
|
||||
[0, "오로 마티오", "오로-마티오.png", 0, null, 69, 55, 15, 0, 160, 300, null, null],
|
||||
[0, "오로라", null, 0, null, 78, 78, 61, 0, 160, 300, null, null],
|
||||
[0, "오리메", null, 0, null, 76, 63, 78, 0, 160, 300, null, null],
|
||||
[0, "오마치", null, 0, null, 85, 55, 102, 0, 160, 300, null, null],
|
||||
[0, "오아마 모토히데", null, 0, null, 67, 77, 38, 0, 160, 300, null, null],
|
||||
[0, "오즈 토터스", "오즈-토터스.png", 0, null, 83, 31, 66, 0, 160, 300, null, null],
|
||||
[0, "오키타 노조미", "오키타-노조미.png", 0, null, 65, 96, 76, 0, 160, 300, null, null],
|
||||
[0, "오토히메", null, 0, null, 68, 56, 15, 0, 160, 300, null, null],
|
||||
[0, "올오레 더 서드", "올오레-더-서드.png", 0, null, 54, 76, 76, 0, 160, 300, null, null],
|
||||
[0, "와그 아카", "와그-아카.png", 0, null, 93, 50, 99, 0, 160, 300, null, null],
|
||||
[0, "와요소 벤빌", "와요소-벤빌.png", 0, null, 67, 57, 15, 0, 160, 300, null, null],
|
||||
[0, "요라", null, 0, null, 66, 58, 15, 0, 160, 300, null, null],
|
||||
[0, "요시모토", null, 0, null, 55, 69, 15, 0, 160, 300, null, null],
|
||||
[0, "요시카게", null, 0, null, 82, 33, 61, 0, 160, 300, null, null],
|
||||
[0, "요시카와 마치코", "요시카와-마치코.png", 0, null, 58, 66, 50, 0, 160, 300, null, null],
|
||||
[0, "요시카와 쿄코", "요시카와-쿄코.png", 0, null, 58, 50, 66, 0, 160, 300, null, null],
|
||||
[0, "욧짱", null, 0, null, 65, 59, 15, 0, 160, 300, null, null],
|
||||
[0, "우", null, 0, null, 64, 60, 15, 0, 160, 300, null, null],
|
||||
[0, "우라질", null, 0, null, 63, 61, 15, 0, 160, 300, null, null],
|
||||
[0, "우르자", null, 0, null, 97, 44, 98, 0, 160, 300, null, null],
|
||||
[0, "우스피라 신토", "우스피라-신토.png", 0, null, 79, 51, 84, 0, 160, 300, null, null],
|
||||
[0, "우에스기 겐세이", "우에스기-겐세이.png", 0, null, 74, 59, 39, 0, 160, 300, null, null],
|
||||
[0, "우에스기 겐신", "우에스기-겐신.png", 0, null, 92, 97, 52, 0, 160, 300, null, null],
|
||||
[0, "우에스기 카츠코", "우에스기-카츠코.png", 0, null, 76, 71, 53, 0, 160, 300, null, null],
|
||||
[0, "우에스기 토라코", "우에스기-토라코.png", 0, null, 76, 53, 71, 0, 160, 300, null, null],
|
||||
[0, "운가 사요리", null, 0, null, 62, 62, 15, 0, 160, 300, null, null],
|
||||
[0, "웬디 크루미라", "웬디-크루미라.png", 0, null, 61, 63, 15, 0, 160, 300, null, null],
|
||||
[0, "웬리나", null, 0, null, 80, 3, 80, 0, 160, 300, null, null],
|
||||
[0, "위리스 후지사키", "위리스-후지사키.png", 0, null, 56, 64, 56, 0, 160, 300, null, null],
|
||||
[0, "위치타 스케트", "위치타-스케트.png", 0, null, 72, 76, 59, 0, 160, 300, null, null],
|
||||
[0, "유니콘", null, 0, null, 68, 76, 67, 0, 160, 300, null, null],
|
||||
[0, "유란 미라쥬", "유란-미라쥬.png", 0, null, 71, 75, 45, 0, 160, 300, null, null],
|
||||
[0, "유우게", null, 0, null, 75, 75, 61, 0, 160, 300, null, null],
|
||||
[0, "유즈 필라리아", "유즈-필라리아.png", 0, null, 60, 64, 15, 0, 160, 300, null, null],
|
||||
[0, "유즈하라 유즈미", "유즈하라-유즈미.png", 0, null, 72, 88, 54, 0, 160, 300, null, null],
|
||||
[0, "유키", null, 0, null, 72, 77, 77, 0, 160, 300, null, null],
|
||||
[0, "유키 델", "유키-델.png", 0, null, 59, 65, 15, 0, 160, 300, null, null],
|
||||
[0, "유키히메", null, 0, null, 58, 66, 15, 0, 160, 300, null, null],
|
||||
[0, "유틴 프루스", "유틴-프루스.png", 0, null, 57, 67, 15, 0, 160, 300, null, null],
|
||||
[0, "이누카이", null, 0, null, 72, 72, 72, 0, 160, 300, null, null],
|
||||
[0, "이마가와 앙코", "이마가와-앙코.png", 0, null, 56, 68, 15, 0, 160, 300, null, null],
|
||||
[0, "이베트 체리아", "이베트-체리아.png", 0, null, 68, 77, 46, 0, 160, 300, null, null],
|
||||
[0, "이소로쿠", null, 0, null, 78, 77, 57, 0, 160, 300, null, null],
|
||||
[0, "이시스", null, 0, null, 84, 88, 60, 0, 160, 300, null, null],
|
||||
[0, "이시지지", null, 0, null, 60, 40, 49, 0, 160, 300, null, null],
|
||||
[0, "이안", null, 0, null, 59, 48, 64, 0, 160, 300, null, null],
|
||||
[0, "이에야스", null, 0, null, 81, 85, 53, 0, 160, 300, null, null],
|
||||
[0, "이오 이슈타르", "이오-이슈타르.png", 0, null, 83, 38, 74, 0, 160, 300, null, null],
|
||||
[0, "이오시프", null, 0, null, 95, 54, 89, 0, 160, 300, null, null],
|
||||
[0, "이이 나오마사", "이이-나오마사.png", 0, null, 72, 72, 56, 0, 160, 300, null, null],
|
||||
[0, "이지스 카라", "이지스-카라.png", 0, null, 86, 87, 59, 0, 160, 300, null, null],
|
||||
[0, "이쿠노", null, 0, null, 75, 75, 61, 0, 160, 300, null, null],
|
||||
[0, "잇큐", null, 0, null, 39, 66, 55, 0, 160, 300, null, null],
|
||||
[0, "자락", null, 0, null, 52, 32, 60, 0, 160, 300, null, null],
|
||||
[0, "자비에르", null, 0, null, 81, 97, 67, 0, 160, 300, null, null],
|
||||
[0, "잔 사비스", "잔-사비스.png", 0, null, 77, 67, 38, 0, 160, 300, null, null],
|
||||
[0, "쟈로 쟈스락", null, 0, null, 40, 20, 60, 0, 160, 300, null, null],
|
||||
[0, "쟈하룻카스", null, 0, null, 81, 94, 64, 0, 160, 300, null, null],
|
||||
[0, "점퍼", null, 0, null, 60, 41, 48, 0, 160, 300, null, null],
|
||||
[0, "제리피 고라", "제리피-고라.png", 0, null, 60, 42, 47, 0, 160, 300, null, null],
|
||||
[0, "조후카", null, 0, null, 60, 43, 46, 0, 160, 300, null, null],
|
||||
[0, "죠니", null, 0, null, 56, 55, 64, 0, 160, 300, null, null],
|
||||
[0, "죠셉", null, 0, null, 60, 44, 45, 0, 160, 300, null, null],
|
||||
[0, "주노", null, 0, null, 85, 58, 90, 0, 160, 300, null, null],
|
||||
[0, "줄리아 린담", "줄리아-린담.png", 0, null, 39, 66, 63, 0, 160, 300, null, null],
|
||||
[0, "줄키 크라운", "줄키-크라운.png", 0, null, 67, 63, 41, 0, 160, 300, null, null],
|
||||
[0, "지마 바카스코", "지마-바카스코.png", 0, null, 73, 75, 57, 0, 160, 300, null, null],
|
||||
[0, "지블 마크토미", null, 0, null, 41, 21, 60, 0, 160, 300, null, null],
|
||||
[0, "지크", null, 0, null, 82, 63, 97, 0, 160, 300, null, null],
|
||||
[0, "쩌둥", null, 0, null, 95, 89, 54, 0, 160, 300, null, null],
|
||||
[0, "챠카 카드뮴", "챠카-카드뮴.png", 0, null, 77, 49, 90, 0, 160, 300, null, null],
|
||||
[0, "체네자리 드라갈", "체네자리-드라갈.png", 0, null, 75, 55, 81, 0, 160, 300, null, null],
|
||||
[0, "초르초토브", null, 0, null, 44, 60, 24, 0, 160, 300, null, null],
|
||||
[0, "쵸쵸맨 파브리", "쵸쵸맨-파브리.png", 0, null, 90, 18, 70, 0, 160, 300, null, null],
|
||||
[0, "츠치다 못코", "츠치다-못코.png", 0, null, 60, 45, 44, 0, 160, 300, null, null],
|
||||
[0, "치사 고도", "치사-고도.png", 0, null, 60, 46, 43, 0, 160, 300, null, null],
|
||||
[0, "치치쿠리", null, 0, null, 43, 60, 23, 0, 160, 300, null, null],
|
||||
[0, "칠디 샤프", "칠디-샤프.png", 0, null, 78, 91, 62, 0, 160, 300, null, null],
|
||||
[0, "카나 세이하쥬", "카나-세이하쥬.png", 0, null, 60, 47, 42, 0, 160, 300, null, null],
|
||||
[0, "카나요", null, 0, null, 78, 74, 74, 0, 160, 300, null, null],
|
||||
[0, "카네오", null, 0, null, 60, 48, 41, 0, 160, 300, null, null],
|
||||
[0, "카로리아 크리켓", "카로리아-크리켓.png", 0, null, 71, 56, 72, 0, 160, 300, null, null],
|
||||
[0, "카마 아트랜저", "카마-아트랜저.png", 0, null, 74, 54, 54, 0, 160, 300, null, null],
|
||||
[0, "카미라", null, 0, null, 90, 49, 109, 0, 160, 300, null, null],
|
||||
[0, "카바한", null, 0, null, 81, 45, 98, 0, 160, 300, null, null],
|
||||
[0, "카스미K카스미", null, 0, null, 68, 55, 73, 0, 160, 300, null, null],
|
||||
[0, "카오루Q카구라", null, 0, null, 77, 61, 82, 0, 160, 300, null, null],
|
||||
[0, "카오스", null, 0, null, 55, 89, 89, 0, 160, 300, null, null],
|
||||
[0, "카이트", null, 0, null, 83, 102, 62, 0, 160, 300, null, null],
|
||||
[0, "카츄사 봇슈", "카츄사-봇슈.png", 0, null, 69, 73, 68, 0, 160, 300, null, null],
|
||||
[0, "카토 스즈메", "카토-스즈메.png", 0, null, 60, 49, 40, 0, 160, 300, null, null],
|
||||
[0, "카토 키요시모리", null, 0, null, 60, 40, 59, 0, 160, 300, null, null],
|
||||
[0, "카파라 우치", "카파라-우치.png", 0, null, 74, 47, 65, 0, 160, 300, null, null],
|
||||
[0, "카페 아트풀", "카페-아트풀.png", 0, null, 83, 57, 89, 0, 160, 300, null, null],
|
||||
[0, "칼 오지잔", "칼-오지잔.png", 0, null, 74, 68, 53, 0, 160, 300, null, null],
|
||||
[0, "캐로리 메이트", "캐로리-메이트.png", 0, null, 60, 41, 58, 0, 160, 300, null, null],
|
||||
[0, "커티스 아벨렌", null, 0, null, 46, 60, 26, 0, 160, 300, null, null],
|
||||
[0, "케셀링크", null, 0, null, 95, 107, 47, 0, 160, 300, null, null],
|
||||
[0, "케이브냥", null, 0, null, 60, 70, 32, 0, 160, 300, null, null],
|
||||
[0, "케이브리스", null, 0, null, 90, 110, 50, 0, 160, 300, null, null],
|
||||
[0, "케이브왕", null, 0, null, 60, 70, 32, 0, 160, 300, null, null],
|
||||
[0, "케이코", null, 0, null, 79, 58, 96, 0, 160, 300, null, null],
|
||||
[0, "케이코쿠", null, 0, null, 68, 68, 83, 0, 160, 300, null, null],
|
||||
[0, "케챠크 반고", "케챠크-반고.png", 0, null, 60, 42, 57, 0, 160, 300, null, null],
|
||||
[0, "켄토우 카나미", "켄토우-카나미.png", 0, null, 60, 43, 56, 0, 160, 300, null, null],
|
||||
[0, "코난 호카벤", null, 0, null, 60, 44, 55, 0, 160, 300, null, null],
|
||||
[0, "코르도바 반", "코르도바-반.png", 0, null, 81, 79, 59, 0, 160, 300, null, null],
|
||||
[0, "코마츠", null, 0, null, 80, 73, 52, 0, 160, 300, null, null],
|
||||
[0, "코바야카와 치누", "코바야카와-치누.png", 0, null, 77, 74, 62, 0, 160, 300, null, null],
|
||||
[0, "코슈인 하즈키", "코슈인-하즈키.png", 0, null, 60, 45, 54, 0, 160, 300, null, null],
|
||||
[0, "코우사카", null, 0, null, 70, 68, 81, 0, 160, 300, null, null],
|
||||
[0, "코판돈 도트", "코판돈-도트.png", 0, null, 60, 46, 53, 0, 160, 300, null, null],
|
||||
[0, "콘 마가린", null, 0, null, 60, 47, 52, 0, 160, 300, null, null],
|
||||
[0, "콘버트 탁스", "콘버트-탁스.png", 0, null, 73, 48, 50, 0, 160, 300, null, null],
|
||||
[0, "콘타마", null, 0, null, 60, 48, 51, 0, 160, 300, null, null],
|
||||
[0, "콜라", null, 0, null, 4, 4, 4, 0, 160, 300, null, null],
|
||||
[0, "콜린 코콜린", "콜린-코콜린.png", 0, null, 60, 49, 50, 0, 160, 300, null, null],
|
||||
[0, "콩고", null, 0, null, 43, 23, 60, 0, 160, 300, null, null],
|
||||
[0, "쿠로베", null, 0, null, 88, 92, 53, 0, 160, 300, null, null],
|
||||
[0, "쿠로히메", null, 0, null, 85, 20, 65, 0, 160, 300, null, null],
|
||||
[0, "쿠마", null, 0, null, 75, 75, 15, 0, 160, 300, null, null],
|
||||
[0, "쿠마노 고로", null, 0, null, 46, 26, 60, 0, 160, 300, null, null],
|
||||
[0, "쿠모 단죠", "쿠모-단죠.png", 0, null, 72, 67, 44, 0, 160, 300, null, null],
|
||||
[0, "쿠소가키", null, 0, null, 60, 50, 49, 0, 160, 300, null, null],
|
||||
[0, "쿠유", null, 0, null, 60, 51, 48, 0, 160, 300, null, null],
|
||||
[0, "쿠제 쿄코", null, 0, null, 45, 25, 60, 0, 160, 300, null, null],
|
||||
[0, "쿠제 키요코", null, 0, null, 44, 24, 60, 0, 160, 300, null, null],
|
||||
[0, "큐티 밴드", "큐티-밴드.png", 0, null, 73, 69, 41, 0, 160, 300, null, null],
|
||||
[0, "크레인", null, 0, null, 60, 52, 47, 0, 160, 300, null, null],
|
||||
[0, "크루체 머핀", "크루체-머핀.png", 0, null, 60, 53, 46, 0, 160, 300, null, null],
|
||||
[0, "크룩 모프스", "크룩-모프스.png", 0, null, 98, 50, 83, 0, 160, 300, null, null],
|
||||
[0, "크림", null, 0, null, 96, 43, 90, 0, 160, 300, null, null],
|
||||
[0, "클린 뷰", "클린-뷰.png", 0, null, 60, 66, 45, 0, 160, 300, null, null],
|
||||
[0, "키바코", null, 0, null, 70, 74, 66, 0, 160, 300, null, null],
|
||||
[0, "키사라 코프리", "키사라-코프리.png", 0, null, 63, 67, 49, 0, 160, 300, null, null],
|
||||
[0, "키스 골드", null, 0, null, 60, 54, 45, 0, 160, 300, null, null],
|
||||
[0, "키이", null, 0, null, 70, 79, 56, 0, 160, 300, null, null],
|
||||
[0, "킷카와 키쿠", "킷카와-키쿠.png", 0, null, 69, 79, 71, 0, 160, 300, null, null],
|
||||
[0, "킹", null, 0, null, 66, 78, 73, 0, 160, 300, null, null],
|
||||
[0, "킹죠지 아바레", "킹죠지-아바레.png", 0, null, 69, 61, 69, 0, 160, 300, null, null],
|
||||
[0, "타락한 정치인", null, 0, null, 45, 60, 25, 0, 160, 300, null, null],
|
||||
[0, "타르고", null, 0, null, 79, 89, 56, 0, 160, 300, null, null],
|
||||
[0, "타마", null, 0, null, 60, 55, 44, 0, 160, 300, null, null],
|
||||
[0, "타마구시 후카", "타마구시-후카.png", 0, null, 69, 60, 70, 0, 160, 300, null, null],
|
||||
[0, "타마시이시바리", null, 0, null, 60, 56, 43, 0, 160, 300, null, null],
|
||||
[0, "타미 존", "타미-존.png", 0, null, 60, 57, 42, 0, 160, 300, null, null],
|
||||
[0, "테라", null, 0, null, 87, 20, 63, 0, 160, 300, null, null],
|
||||
[0, "텐마바시 아리스", "텐마바시-아리스.png", 0, null, 35, 65, 67, 0, 160, 300, null, null],
|
||||
[0, "토마 리프톤", "토마-리프톤.png", 0, null, 87, 89, 61, 0, 160, 300, null, null],
|
||||
[0, "토마토 퓨레", "토마토-퓨레.png", 0, null, 65, 64, 60, 0, 160, 300, null, null],
|
||||
[0, "토쿠가와 센", "토쿠가와-센.png", 0, null, 84, 86, 58, 0, 160, 300, null, null],
|
||||
[0, "토파즈", null, 0, null, 88, 72, 72, 0, 160, 300, null, null],
|
||||
[0, "토포스", null, 0, null, 83, 102, 61, 0, 160, 300, null, null],
|
||||
[0, "톨스토이 바트", "톨스토이-바트.png", 0, null, 60, 59, 40, 0, 160, 300, null, null],
|
||||
[0, "파레로아", null, 0, null, 76, 74, 74, 0, 160, 300, null, null],
|
||||
[0, "파렌", null, 0, null, 68, 71, 71, 0, 160, 300, null, null],
|
||||
[0, "파르프텐크스", null, 0, null, 38, 66, 66, 0, 160, 300, null, null],
|
||||
[0, "파멜라 헬만", "파멜라-헬만.png", 0, null, 40, 59, 60, 0, 160, 300, null, null],
|
||||
[0, "파스텔 카라", "파스텔-카라.png", 0, null, 91, 46, 100, 0, 160, 300, null, null],
|
||||
[0, "파이아르", null, 0, null, 81, 61, 98, 0, 160, 300, null, null],
|
||||
[0, "파티", null, 0, null, 41, 58, 60, 0, 160, 300, null, null],
|
||||
[0, "파티 더 서머", "파티-더-서머.png", 0, null, 42, 57, 60, 0, 160, 300, null, null],
|
||||
[0, "파파데마스", null, 0, null, 43, 56, 60, 0, 160, 300, null, null],
|
||||
[0, "파파이아 서버", "파파이아-서버.png", 0, null, 79, 59, 90, 0, 160, 300, null, null],
|
||||
[0, "패트리샤 베이컨", "패트리샤-베이컨.png", 0, null, 44, 55, 60, 0, 160, 300, null, null],
|
||||
[0, "패튼 미스날지", "패튼-미스날지.png", 0, null, 80, 85, 65, 0, 160, 300, null, null],
|
||||
[0, "페가수스 포트", null, 0, null, 45, 54, 60, 0, 160, 300, null, null],
|
||||
[0, "페르에레 칼레트", "페르에레-칼레트.png", 0, null, 38, 67, 61, 0, 160, 300, null, null],
|
||||
[0, "페리스", null, 0, null, 63, 76, 76, 0, 160, 300, null, null],
|
||||
[0, "페스포 톤토네", "페스포-톤토네.png", 0, null, 36, 64, 67, 0, 160, 300, null, null],
|
||||
[0, "페페 위지마", "페페-위지마.png", 0, null, 46, 53, 60, 0, 160, 300, null, null],
|
||||
[0, "페페론 차오", null, 0, null, 47, 52, 60, 0, 160, 300, null, null],
|
||||
[0, "포론 차오", "포론-차오.png", 0, null, 83, 73, 63, 0, 160, 300, null, null],
|
||||
[0, "포토프 토카레프", "포토프-토카레프.png", 0, null, 48, 51, 60, 0, 160, 300, null, null],
|
||||
[0, "풀 카라", "풀-카라.png", 0, null, 81, 58, 104, 0, 160, 300, null, null],
|
||||
[0, "프레이아 이즌", "프레이아-이즌.png", 0, null, 54, 77, 77, 0, 160, 300, null, null],
|
||||
[0, "프로스트바인", null, 0, null, 49, 50, 60, 0, 160, 300, null, null],
|
||||
[0, "프론소와즈", null, 0, null, 50, 49, 60, 0, 160, 300, null, null],
|
||||
[0, "프리마 호노노먼", "프리마-호노노먼.png", 0, null, 64, 54, 56, 0, 160, 300, null, null],
|
||||
[0, "프리크 파라핀", "프리크-파라핀.png", 0, null, 72, 65, 94, 0, 160, 300, null, null],
|
||||
[0, "플레처 모델", "플레처-모델.png", 0, null, 51, 48, 60, 0, 160, 300, null, null],
|
||||
[0, "플루페트", null, 0, null, 34, 40, 88, 0, 160, 300, null, null],
|
||||
[0, "피구", null, 0, null, 80, 73, 56, 0, 160, 300, null, null],
|
||||
[0, "피니 사나다", "피니-사나다.png", 0, null, 52, 47, 60, 0, 160, 300, null, null],
|
||||
[0, "피사로", null, 0, null, 89, 54, 95, 0, 160, 300, null, null],
|
||||
[0, "피텐 차오", "피텐-차오.png", 0, null, 80, 80, 57, 0, 160, 300, null, null],
|
||||
[0, "하니킹", null, 0, null, 97, 101, 44, 0, 160, 300, null, null],
|
||||
[0, "하라 쇼우지", "하라-쇼우지.png", 0, null, 78, 63, 50, 0, 160, 300, null, null],
|
||||
[0, "하삼 크라운", "하삼-크라운.png", 0, null, 75, 69, 42, 0, 160, 300, null, null],
|
||||
[0, "하우렌 프로반스", "하우렌-프로반스.png", 0, null, 78, 70, 50, 0, 160, 300, null, null],
|
||||
[0, "하우세스너스", null, 0, null, 83, 89, 37, 0, 160, 300, null, null],
|
||||
[0, "하이니 바흐", null, 0, null, 53, 46, 60, 0, 160, 300, null, null],
|
||||
[0, "하이디 팡크라우", "하이디-팡크라우.png", 0, null, 41, 58, 66, 0, 160, 300, null, null],
|
||||
[0, "하제후카 리모브", null, 0, null, 54, 45, 60, 0, 160, 300, null, null],
|
||||
[0, "학자", null, 0, null, 83, 53, 73, 0, 160, 300, null, null],
|
||||
[0, "한스킨스", null, 0, null, 55, 44, 60, 0, 160, 300, null, null],
|
||||
[0, "한티 카라", "한티-카라.png", 0, null, 70, 67, 108, 0, 160, 300, null, null],
|
||||
[0, "핫킨 다산", "핫킨-다산.png", 0, null, 76, 73, 60, 0, 160, 300, null, null],
|
||||
[0, "핫토리 한조", "핫토리-한조.png", 0, null, 65, 70, 64, 0, 160, 300, null, null],
|
||||
[0, "헨더슨 던트리스", "헨더슨-던트리스.png", 0, null, 56, 43, 60, 0, 160, 300, null, null],
|
||||
[0, "호 라가", "호-라가.png", 0, null, 79, 56, 101, 0, 160, 300, null, null],
|
||||
[0, "호넷", null, 0, null, 100, 40, 110, 0, 160, 300, null, null],
|
||||
[0, "호리카와 나미", "호리카와-나미.png", 0, null, 66, 62, 61, 0, 160, 300, null, null],
|
||||
[0, "호죠 마사코", "호죠-마사코.png", 0, null, 57, 42, 60, 0, 160, 300, null, null],
|
||||
[0, "호죠 소운", "호죠-소운.png", 0, null, 75, 62, 94, 0, 160, 300, null, null],
|
||||
[0, "혼다 마사노부", "혼다-마사노부.png", 0, null, 71, 68, 44, 0, 160, 300, null, null],
|
||||
[0, "혼다 타다카츠", "혼다-타다카츠.png", 0, null, 72, 80, 53, 0, 160, 300, null, null],
|
||||
[0, "화성대왕", null, 0, null, 58, 41, 60, 0, 160, 300, null, null],
|
||||
[0, "화염서사", null, 0, null, 64, 73, 87, 0, 160, 300, null, null],
|
||||
[0, "후루루 반", "후루루-반.png", 0, null, 59, 40, 60, 0, 160, 300, null, null],
|
||||
[0, "후브리 마츠시타", null, 0, null, 50, 60, 30, 0, 160, 300, null, null],
|
||||
[0, "후트 롯", "후트-롯.png", 0, null, 67, 69, 60, 0, 160, 300, null, null],
|
||||
[0, "휴버트 리프톤", "휴버트-리프톤.png", 0, null, 85, 80, 65, 0, 160, 300, null, null],
|
||||
[0, "히미코", null, 0, null, 67, 56, 66, 0, 160, 300, null, null],
|
||||
[0, "히바치", null, 0, null, 78, 90, 60, 0, 160, 300, null, null],
|
||||
[0, "히카리 미 블랑", "히카리-미-블랑.png", 0, null, 77, 40, 69, 0, 160, 300, null, null],
|
||||
[0, "히타치", null, 0, null, 89, 57, 60, 0, 160, 300, null, null]
|
||||
],
|
||||
"general_ex":[
|
||||
[999, "KD", null, 0, null, 4, 4, 4, 0, 12, 300, null, null],
|
||||
[999, "가이", null, 0, null, 5, 5, 5, 0, 15, 300, null, null],
|
||||
[999, "겟페이", null, 0, null, 20, 20, 20, 0, 60, 300, null, null],
|
||||
[999, "나이치사", null, 0, null, 5, 5, 5, 0, 15, 300, null, null],
|
||||
[999, "네프라카스", null, 0, null, 4, 4, 4, 0, 12, 300, null, null],
|
||||
[999, "다케다 신겐", "다케다-신겐.png", 0, null, 1, 1, 1, 0, 3, 300, null, null],
|
||||
[999, "도키치로", null, 0, null, 1, 1, 1, 0, 3, 300, null, null],
|
||||
[999, "라 바스왈드", "라-바스왈드.png", 0, null, 6, 6, 6, 0, 18, 300, null, null],
|
||||
[999, "라사움", null, 0, null, 9, 9, 9, 0, 27, 300, null, null],
|
||||
[999, "렌치 랜천", "렌치-랜천.png", 0, null, 20, 20, 20, 0, 160, 300, null, null],
|
||||
[999, "로벤 팡", "로벤-팡.png", 0, null, 8, 8, 8, 0, 160, 300, null, null],
|
||||
[999, "루드라사움", null, 0, null, 10, 10, 10, 0, 160, 300, null, null],
|
||||
[999, "리틀 프린세스", "리틀-프린세스.png", 0, null, 5, 5, 5, 0, 160, 300, null, null],
|
||||
[999, "마소우 소조", "마소우-소조.png", 0, null, 20, 20, 20, 0, 160, 300, null, null],
|
||||
[999, "스랄", null, 0, null, 5, 5, 5, 0, 160, 300, null, null],
|
||||
[999, "시스템", null, 0, null, 1, 1, 1, 0, 160, 300, null, null],
|
||||
[999, "아노키아M슬린", null, 0, null, 20, 20, 20, 0, 160, 300, null, null],
|
||||
[999, "아마테라스", null, 0, null, 7, 7, 7, 0, 160, 300, null, null],
|
||||
[999, "아벨", null, 0, null, 5, 5, 5, 0, 160, 300, null, null],
|
||||
[999, "아스마제", null, 0, null, 20, 20, 20, 0, 160, 300, null, null],
|
||||
[999, "여신 앨리스", "여신-앨리스.png", 0, null, 10, 10, 10, 0, 160, 300, null, null],
|
||||
[999, "오다 키쵸", "오다-키쵸.png", 0, null, 20, 20, 20, 0, 160, 300, null, null],
|
||||
[999, "와카", null, 0, null, 20, 20, 20, 0, 160, 300, null, null],
|
||||
[999, "웬즈딩 리자스", "웬즈딩-리자스.png", 0, null, 20, 20, 20, 0, 160, 300, null, null],
|
||||
[999, "자나게스 헬만", "자나게스-헬만.png", 0, null, 20, 20, 20, 0, 160, 300, null, null],
|
||||
[999, "질", null, 0, null, 5, 5, 5, 0, 160, 300, null, null],
|
||||
[999, "쿠엘플란", null, 0, null, 70, 70, 70, 0, 160, 300, null, null],
|
||||
[999, "쿠크루쿠크루", null, 0, null, 7, 7, 7, 0, 160, 300, null, null],
|
||||
[999, "테로 에티에노", "테로-에티에노.png", 0, null, 5, 5, 5, 0, 160, 300, null, null],
|
||||
[999, "파슬리R제스", "파슬리R제스.png", 0, null, 20, 20, 20, 0, 160, 300, null, null],
|
||||
[999, "파엘리나", null, 0, null, 20, 20, 20, 0, 160, 300, null, null],
|
||||
[999, "프란나", null, 0, null, 8, 8, 8, 0, 160, 300, null, null],
|
||||
[999, "프란체스카", null, 0, null, 20, 20, 20, 0, 160, 300, null, null],
|
||||
[999, "하모니트", null, 0, null, 8, 8, 8, 0, 160, 300, null, null],
|
||||
[999, "후지와라", null, 0, null, 20, 20, 20, 0, 160, 300, null, null],
|
||||
[999, "릴 가드라스", "릴-가드라스.png", 0, null, 60, 40, 59, 0, 160, 300, null, null]
|
||||
]
|
||||
}
|
||||
+2
-16
@@ -18,7 +18,7 @@ if(!$npcmode) {
|
||||
|
||||
$gencount = $db->queryFirstField('SELECT count(`no`) FROM general WHERE npc<2');
|
||||
|
||||
$nations = $db->queryAllLists('SELECT `name`, scoutmsg, color FROM nation');
|
||||
$nationList = $db->query('SELECT nation,`name`,color,scout,scoutmsg FROM nation ORDER BY rand()');
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
@@ -61,21 +61,7 @@ history.go(-1);
|
||||
<tr><td><?=info(0)?></td></tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table style="width:100%;" class="bg0 with_border">
|
||||
<thead>
|
||||
<tr><th colspan=2 class="bg1">임관 권유 메세지</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($nations as list($name, $scoutmsg, $color)): ?>
|
||||
|
||||
<tr>
|
||||
<td style='width:98px;color:<?=newColor($color)?>;background-color:<?=$color?>'><?=$name?></td>
|
||||
<td style='color:<?=newColor($color)?>;background-color:<?=$color?>'><?=$scoutmsg?:'-'?></td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?=getInvitationList($nationList)?>
|
||||
|
||||
<div class="bg0">
|
||||
<div class="bg1 with_border legacy_layout font1" style="text-align:center;font-weight:bold;">장수 빙의</div>
|
||||
|
||||
@@ -31,9 +31,6 @@ DROP TABLE IF EXISTS auction;
|
||||
# 통계 테이블 삭제
|
||||
DROP TABLE IF EXISTS statistic;
|
||||
|
||||
# 연감 테이블 삭제
|
||||
DROP TABLE IF EXISTS history;
|
||||
|
||||
# 이벤트 테이블 삭제
|
||||
DROP TABLE IF EXISTS event;
|
||||
|
||||
|
||||
+59
-50
@@ -23,7 +23,7 @@ CREATE TABLE `general` (
|
||||
`name` CHAR(32) NOT NULL COLLATE 'utf8mb4_bin',
|
||||
`name2` CHAR(32) NULL DEFAULT NULL COLLATE 'utf8mb4_bin',
|
||||
`nation` INT(6) NULL DEFAULT '0',
|
||||
`nations` CHAR(64) NULL DEFAULT ',0,',
|
||||
`nations` VARCHAR(64) NOT NULL DEFAULT '[0]',
|
||||
`city` INT(6) NULL DEFAULT '3',
|
||||
`troop` INT(6) NULL DEFAULT '0',
|
||||
`leader` INT(3) NULL DEFAULT '50',
|
||||
@@ -362,23 +362,53 @@ ENGINE=InnoDB;
|
||||
###########################################################################
|
||||
## 명전 테이블
|
||||
###########################################################################
|
||||
create table if not exists hall (
|
||||
no int(6) not null auto_increment,
|
||||
type int(2) default 0,
|
||||
rank int(2) default 0,
|
||||
name char(64) default '',
|
||||
nation char(12) default '',
|
||||
data int(5) default 0,
|
||||
color char(12) default '',
|
||||
picture varchar(40) default '',
|
||||
|
||||
PRIMARY KEY (no),
|
||||
UNIQUE INDEX `type` (`type`, `rank`)
|
||||
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
|
||||
CREATE TABLE `ng_hall` (
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`server_id` CHAR(20) NOT NULL,
|
||||
`scenario` INT(11) NOT NULL,
|
||||
`general_no` INT(11) NOT NULL,
|
||||
`type` INT(11) NOT NULL,
|
||||
`value` DOUBLE NOT NULL,
|
||||
`owner` INT(11) NULL DEFAULT NULL,
|
||||
`aux` TEXT NOT NULL DEFAULT '{}',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE INDEX `server_general` (`server_id`, `type`, `general_no`),
|
||||
UNIQUE INDEX `owner` (`owner`, `server_id`, `type`),
|
||||
INDEX `server_show` (`server_id`, `type`, `value`),
|
||||
INDEX `scenario` (`scenario`, `type`, `value`)
|
||||
)
|
||||
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPRESSED;
|
||||
|
||||
|
||||
###########################################################################
|
||||
## 왕조 테이블
|
||||
###########################################################################
|
||||
|
||||
CREATE TABLE if not exists `ng_games` (
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`server_id` CHAR(20) NOT NULL,
|
||||
`date` DATETIME NOT NULL,
|
||||
`winner_nation` INT(11) NULL DEFAULT NULL,
|
||||
`scenario` INT(11) NOT NULL,
|
||||
`env` TEXT NOT NULL COMMENT 'json',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE INDEX `server_id` (`server_id`),
|
||||
INDEX `date` (`date`)
|
||||
)
|
||||
ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE `ng_old_nations` (
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`server_id` CHAR(20) NOT NULL DEFAULT '0',
|
||||
`nation` INT(11) NOT NULL DEFAULT '0',
|
||||
`data` LONGTEXT NOT NULL DEFAULT '0' COMMENT 'json',
|
||||
`date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`),
|
||||
INDEX `server_id` (`server_id`, `nation`)
|
||||
)
|
||||
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPRESSED;
|
||||
|
||||
create table if not exists emperior (
|
||||
no int(6) not null auto_increment,
|
||||
phase char(255) default '',
|
||||
@@ -416,29 +446,6 @@ create table if not exists emperior (
|
||||
PRIMARY KEY (no)
|
||||
) ENGINE=INNODB ROW_FORMAT=COMPRESSED DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
INSERT IGNORE INTO `hall` (`type`, `rank`) VALUES
|
||||
( 0, 0), ( 0, 1), ( 0, 2), ( 0, 3), ( 0, 4), ( 0, 5), ( 0, 6), ( 0, 7), ( 0, 8), ( 0, 9),
|
||||
( 1, 0), ( 1, 1), ( 1, 2), ( 1, 3), ( 1, 4), ( 1, 5), ( 1, 6), ( 1, 7), ( 1, 8), ( 1, 9),
|
||||
( 2, 0), ( 2, 1), ( 2, 2), ( 2, 3), ( 2, 4), ( 2, 5), ( 2, 6), ( 2, 7), ( 2, 8), ( 2, 9),
|
||||
( 3, 0), ( 3, 1), ( 3, 2), ( 3, 3), ( 3, 4), ( 3, 5), ( 3, 6), ( 3, 7), ( 3, 8), ( 3, 9),
|
||||
( 4, 0), ( 4, 1), ( 4, 2), ( 4, 3), ( 4, 4), ( 4, 5), ( 4, 6), ( 4, 7), ( 4, 8), ( 4, 9),
|
||||
( 5, 0), ( 5, 1), ( 5, 2), ( 5, 3), ( 5, 4), ( 5, 5), ( 5, 6), ( 5, 7), ( 5, 8), ( 5, 9),
|
||||
( 6, 0), ( 6, 1), ( 6, 2), ( 6, 3), ( 6, 4), ( 6, 5), ( 6, 6), ( 6, 7), ( 6, 8), ( 6, 9),
|
||||
( 7, 0), ( 7, 1), ( 7, 2), ( 7, 3), ( 7, 4), ( 7, 5), ( 7, 6), ( 7, 7), ( 7, 8), ( 7, 9),
|
||||
( 8, 0), ( 8, 1), ( 8, 2), ( 8, 3), ( 8, 4), ( 8, 5), ( 8, 6), ( 8, 7), ( 8, 8), ( 8, 9),
|
||||
( 9, 0), ( 9, 1), ( 9, 2), ( 9, 3), ( 9, 4), ( 9, 5), ( 9, 6), ( 9, 7), ( 9, 8), ( 9, 9),
|
||||
(10, 0), (10, 1), (10, 2), (10, 3), (10, 4), (10, 5), (10, 6), (10, 7), (10, 8), (10, 9),
|
||||
(11, 0), (11, 1), (11, 2), (11, 3), (11, 4), (11, 5), (11, 6), (11, 7), (11, 8), (11, 9),
|
||||
(12, 0), (12, 1), (12, 2), (12, 3), (12, 4), (12, 5), (12, 6), (12, 7), (12, 8), (12, 9),
|
||||
(13, 0), (13, 1), (13, 2), (13, 3), (13, 4), (13, 5), (13, 6), (13, 7), (13, 8), (13, 9),
|
||||
(14, 0), (14, 1), (14, 2), (14, 3), (14, 4), (14, 5), (14, 6), (14, 7), (14, 8), (14, 9),
|
||||
(15, 0), (15, 1), (15, 2), (15, 3), (15, 4), (15, 5), (15, 6), (15, 7), (15, 8), (15, 9),
|
||||
(16, 0), (16, 1), (16, 2), (16, 3), (16, 4), (16, 5), (16, 6), (16, 7), (16, 8), (16, 9),
|
||||
(17, 0), (17, 1), (17, 2), (17, 3), (17, 4), (17, 5), (17, 6), (17, 7), (17, 8), (17, 9),
|
||||
(18, 0), (18, 1), (18, 2), (18, 3), (18, 4), (18, 5), (18, 6), (18, 7), (18, 8), (18, 9),
|
||||
(19, 0), (19, 1), (19, 2), (19, 3), (19, 4), (19, 5), (19, 6), (19, 7), (19, 8), (19, 9),
|
||||
(20, 0), (20, 1), (20, 2), (20, 3), (20, 4), (20, 5), (20, 6), (20, 7), (20, 8), (20, 9);
|
||||
|
||||
###########################################################################
|
||||
## 외교 테이블
|
||||
###########################################################################
|
||||
@@ -525,20 +532,22 @@ create table statistic (
|
||||
###########################################################################
|
||||
## 연감 테이블
|
||||
###########################################################################
|
||||
create table history (
|
||||
no int(6) not null auto_increment,
|
||||
year int(4) default 0,
|
||||
month int(2) default 0,
|
||||
map mediumtext default '',
|
||||
log text default '',
|
||||
genlog mediumtext default '',
|
||||
nation text default '',
|
||||
power text default '',
|
||||
gen text default '',
|
||||
city text default '',
|
||||
|
||||
PRIMARY KEY (no)
|
||||
) ENGINE=INNODB ROW_FORMAT=COMPRESSED DEFAULT CHARSET=utf8mb4;
|
||||
CREATE TABLE if not exists `history` (
|
||||
`no` INT(6) NOT NULL AUTO_INCREMENT,
|
||||
`server_id` CHAR(20) NOT NULL DEFAULT '',
|
||||
`year` INT(4) NULL DEFAULT '0',
|
||||
`month` INT(2) NULL DEFAULT '0',
|
||||
`map` MEDIUMTEXT NULL DEFAULT '',
|
||||
`log` TEXT NULL DEFAULT '',
|
||||
`genlog` MEDIUMTEXT NULL DEFAULT '',
|
||||
`nation` TEXT NULL DEFAULT '',
|
||||
`power` TEXT NULL DEFAULT '',
|
||||
`gen` TEXT NULL DEFAULT '',
|
||||
`city` TEXT NULL DEFAULT '',
|
||||
PRIMARY KEY (`no`),
|
||||
INDEX `server_id` (`server_id`, `year`, `month`)
|
||||
)
|
||||
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPRESSED;
|
||||
|
||||
###########################################################################
|
||||
## 이벤트 핸들러 테이블
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
<div class="rankView bg0" style="border:1px solid gray;">
|
||||
<h3 class="rankType bg1"><?=$typeName?></h3>
|
||||
<ul>
|
||||
<?php foreach($generals as $rank=>$general): ?><li class='<?=(key_exists("rankName", $general))?'no_value':''?> <?=(key_exists("serverName", $general))?'has_server':''?>'>
|
||||
<div class="hall_rank bg2 with_border">
|
||||
<?=$general['rankName']??(($rank+1).'위')?>
|
||||
</div>
|
||||
<div class="hall_img"><img width="64" height="64" src="<?=$general['pictureFullPath']?>"></div>
|
||||
<?php if(key_exists("serverName",$general)): ?>
|
||||
<div class="hall_server tooltip"><?=$general['serverName']?><?=$general['serverIdx']?>기
|
||||
<span class="tooltiptext">
|
||||
<?=$general['scenarioName']?><br>
|
||||
<?=substr($general['startTime'], 0, 10)?> ~ <?=substr($general['unitedTime'], 0, 10)?>
|
||||
</span>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div class="hall_nation" style="background-color:<?=$general['bgColor']?>;color:<?=$general['fgColor']?>;"><?=$general['nationName']??'-'?></div>
|
||||
<div class="hall_name" style="background-color:<?=$general['bgColor']?>;color:<?=$general['fgColor']?>;"><p><?=$general['name']??'-'?>
|
||||
<?php if($general["owner_name"]??null): ?>
|
||||
<div class="hall_owner">(<?=$general['owner_name']?>)</div>
|
||||
<?php endif;?>
|
||||
</p></div>
|
||||
<div class="hall_value"><?=$general['printValue']??$general['value']?></div>
|
||||
</li><?php endforeach; ?>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -0,0 +1,18 @@
|
||||
<table class="tb_layout bg0" style="margin:auto;">
|
||||
<thead>
|
||||
<tr><td colspan="2" style="text-align:center;" class="bg1">임관 권유 메시지</td></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($nationList as $nation): ?>
|
||||
<tr
|
||||
data-nation-id="<?=$nation['nation']?>"
|
||||
style="color:<?=$nation['textColor']?>;background-color:<?=$nation['color']?>;"
|
||||
>
|
||||
<td style="width:130px;text-align:center;"
|
||||
><?=$nation['name']?></td>
|
||||
<td style="width:870px;max-width:870px;max-height:200px;overflow:hidden;"
|
||||
><?=$nation['scoutmsg']?:'-'?></td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
+10
-8
@@ -11,6 +11,7 @@ $templates = new \League\Plates\Engine(__dir__.'/templates');
|
||||
$db = RootDB::db();
|
||||
$notice = $db->queryFirstField('SELECT `NOTICE` FROM `system` WHERE `NO`=1');
|
||||
$userGrade = $session->userGrade;
|
||||
$acl = $session->acl;
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
@@ -34,7 +35,7 @@ $userGrade = $session->userGrade;
|
||||
<?=WebUtil::printJS('../d_shared/menu.js')?>
|
||||
<?=WebUtil::printJS('../js/title.js')?>
|
||||
|
||||
<?php if ($userGrade >= 5): ?>
|
||||
<?php if ($userGrade >= 5 || $acl): ?>
|
||||
<!-- 운영자 -->
|
||||
<?=WebUtil::printCSS('../css/admin_server.css')?>
|
||||
<?=WebUtil::printJS('../js/admin_server.js')?>
|
||||
@@ -91,12 +92,12 @@ if ($userGrade >= 5) {
|
||||
계정은 한번 등록으로 계속 사용합니다. 각 서버 리셋시 캐릭터만 새로 생성하면 됩니다.<br>
|
||||
<br>
|
||||
<span class="Entrance_Che">체섭</span> : 메인서버입니다. 천하통일에 도전하여 왕조일람과 명예의전당에 올라봅시다! (주로 1턴=60분)<br>
|
||||
<span class="Entrance_Kwe">퀘섭</span> : 실제 장수가 되어 가상의 역사를 만들어 봅시다!<br>
|
||||
<span class="Entrance_Pwe">풰섭</span> : 실제 장수들과 어울려 사실적 역사를 체험해 봅시다!<br>
|
||||
<span class="Entrance_Twe">퉤섭</span> : 주로 패치사항 미리보기 테스트 서버입니다.<br>
|
||||
<span class="Entrance_Nya">냐섭</span> : 신 서버.<br>
|
||||
<span class="Entrance_Pya">퍄섭</span> : 신 서버2.<br>
|
||||
<span class="Entrance_Hwe">훼섭</span> : 1일천하 서버. 또는 운영자 테스트용 서버입니다.<br>
|
||||
<span class="Entrance_Kwe">퀘섭</span> : 마이너 서버 그룹1. 비교적 느린 시간으로 운영됩니다.<br>
|
||||
<span class="Entrance_Pwe">풰섭</span> : 마이너 서버 그룹1. 비교적 느린 시간으로 운영됩니다.<br>
|
||||
<span class="Entrance_Twe">퉤섭</span> : 마이너 서버 그룹2. 비교적 빠른 시간으로 운영됩니다.<br>
|
||||
<span class="Entrance_Nya">냐섭</span> : 마이너 서버 그룹3. 독특한 컨셉 위주로 운영됩니다.<br>
|
||||
<span class="Entrance_Pya">퍄섭</span> : 마이너 서버 그룹3. 독특한 컨셉 위주로 운영됩니다.<br>
|
||||
<span class="Entrance_Hwe">훼섭</span> : 운영자 테스트 서버입니다. 기습적으로 열리고, 닫힐 수 있습니다.<br>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
@@ -110,8 +111,9 @@ if ($userGrade >= 5) {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<?php
|
||||
if ($userGrade >= 5) {
|
||||
if ($userGrade >= 5 || $acl) {
|
||||
echo $templates->render('server_panel', []);
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -9,7 +9,7 @@ $userID = Session::getUserID();
|
||||
// 외부 파라미터
|
||||
|
||||
$db = RootDB::db();
|
||||
$member = $db->queryFirstRow('SELECT `id`, `name`, `grade`, `picture`, reg_date, third_use FROM `member` WHERE `NO` = %i', $userID);
|
||||
$member = $db->queryFirstRow('SELECT `id`, `name`, `grade`, `picture`, reg_date, third_use, acl FROM `member` WHERE `NO` = %i', $userID);
|
||||
|
||||
if(!$member['picture']){
|
||||
$picture = ServConfig::getSharedIconPath().'/default.jpg';
|
||||
@@ -42,6 +42,35 @@ if($member['grade'] == 6) {
|
||||
$grade = '블럭회원';
|
||||
}
|
||||
|
||||
$acl = [];
|
||||
//TODO: Acl을 관리하기 위한 별도의 객체 필요
|
||||
foreach(Json::decode($member['acl']??'{}') as $serverName=>$aclList){
|
||||
$serverKorName = AppConf::getList()[$serverName]->getKorName();
|
||||
$aclTextList = array_map(function($aclName){
|
||||
$aclText = "알수없음[{$aclName}]";
|
||||
switch($aclName){
|
||||
case 'openClose':$aclText='서버여닫기';break;
|
||||
case 'reset':$aclText='서버리셋';break;
|
||||
case 'update':$aclText='업데이트';break;
|
||||
case 'fullUpdate':$aclText='임의업데이트';break;
|
||||
case 'vote':$aclText='설문조사';break;
|
||||
case 'globalNotice':$aclText='전역공지';break;
|
||||
case 'notice':$aclText='공지';break;
|
||||
case 'blockGeneral':$aclText='장수징계';break;
|
||||
}
|
||||
return $aclText;
|
||||
}, $aclList);
|
||||
|
||||
$acl[] = sprintf("%s(%s)", $serverKorName, join(",", $aclTextList));
|
||||
}
|
||||
|
||||
if($acl){
|
||||
$acl = join(",<br>", $acl);
|
||||
}
|
||||
else{
|
||||
$acl = "-";
|
||||
}
|
||||
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'reason'=>'success',
|
||||
@@ -51,5 +80,6 @@ Json::die([
|
||||
'picture'=>$picture,
|
||||
'global_salt'=>RootDB::getGlobalSalt(),
|
||||
'join_date'=>$member['reg_date'],
|
||||
'third_use'=>($member['third_use']!=0)
|
||||
'third_use'=>($member['third_use']!=0),
|
||||
'acl'=>$acl
|
||||
]);
|
||||
|
||||
@@ -18,50 +18,58 @@ $server = Util::getReq('server', 'string', '');
|
||||
|
||||
$db = RootDB::db();
|
||||
$userGrade = $session->userGrade;
|
||||
$acl = $session->acl;
|
||||
$session->setReadOnly();
|
||||
|
||||
if($userGrade < 5) {
|
||||
if($userGrade < 5 && !$acl) {
|
||||
Json::die([
|
||||
'result'=>'FAIL',
|
||||
'msg'=>'운영자 권한이 없습니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
function doServerModeSet($server, $action, &$response){
|
||||
function doServerModeSet($server, $action, &$response, $session){
|
||||
|
||||
$serverList = AppConf::getList();
|
||||
$settingObj = $serverList[$server];
|
||||
$serverAcl = $session->acl[$server]??[];
|
||||
$userGrade = $session->userGrade;
|
||||
|
||||
$serverDir = $settingObj->getShortName();
|
||||
$serverPath = $settingObj->getBasePath();
|
||||
$realServerPath = realpath(dirname(__FILE__)).'/'.$serverPath;
|
||||
|
||||
if($action == 'close') { //폐쇄
|
||||
if($action == 'close' && ($userGrade >= 5 || in_array('openClose', $serverAcl))) { //폐쇄
|
||||
return $settingObj->closeServer();
|
||||
} elseif($action == 'reset') {//리셋
|
||||
} elseif($action == 'reset' && $userGrade >= 6) {//리셋
|
||||
//FIXME: reset, reset_full 구현
|
||||
if(file_exists($serverPath.'/d_setting/DB.php')){
|
||||
@unlink($serverPath.'/d_setting/DB.php');
|
||||
}
|
||||
|
||||
$response['installURL'] = $serverDir."/install.php";
|
||||
} elseif($action == 'open') {//오픈
|
||||
} elseif($action == 'open' && ($userGrade >= 5 || in_array('openClose', $serverAcl))) {//오픈
|
||||
return $settingObj->openServer();
|
||||
} else{
|
||||
$response['msg'] = '올바르지 않은 요청입니다';
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function doAdminPost($action, $notice, $server){
|
||||
function doAdminPost($action, $notice, $server, $session){
|
||||
$response = ['result' => 'FAIL'];
|
||||
|
||||
if($action == 'notice') {
|
||||
$globalAcl = $session->acl['global']??[];
|
||||
$userGrade = $session->userGrade;
|
||||
|
||||
if($action == 'notice' && ($userGrade >= 5 || in_array('notice', $globalAcl))) {
|
||||
RootDB::db()->update('system', ['NOTICE'=>$notice], true);
|
||||
$response['result'] = 'SUCCESS';
|
||||
return $response;
|
||||
}
|
||||
|
||||
if(doServerModeSet($server, $action, $response)){
|
||||
if(doServerModeSet($server, $action, $response, $session)){
|
||||
$response['result'] = 'SUCCESS';
|
||||
return $response;
|
||||
}
|
||||
@@ -70,6 +78,6 @@ function doAdminPost($action, $notice, $server){
|
||||
|
||||
}
|
||||
|
||||
$response = doAdminPost($action, $notice, $server);
|
||||
$response = doAdminPost($action, $notice, $server, $session);
|
||||
|
||||
Json::die($response);
|
||||
|
||||
@@ -4,8 +4,7 @@ namespace sammo;
|
||||
require(__dir__.'/../vendor/autoload.php');
|
||||
|
||||
$session = Session::requireLogin([])->setReadOnly();
|
||||
|
||||
if($session->userGrade < 5){
|
||||
if($session->userGrade < 5 && !$session->acl){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'권한이 부족합니다.'
|
||||
@@ -83,6 +82,7 @@ foreach (AppConf::getList() as $setting) {
|
||||
}
|
||||
|
||||
Json::die([
|
||||
'acl' => $session->acl,
|
||||
'server' => $server,
|
||||
'grade' => $session->userGrade
|
||||
]);
|
||||
+16
-11
@@ -44,12 +44,12 @@ require(__dir__.'/../vendor/autoload.php');
|
||||
<a href="entrance.php"><button id="btn_back1" class="with_skin">돌아가기</button></a>
|
||||
</caption>
|
||||
<colgroup>
|
||||
<col style="width:80px;" />
|
||||
<col style="width:80px;"/>
|
||||
<col style="width:80px;"/>
|
||||
<col style="width:80px;"/>
|
||||
<col style="width:80px;"/>
|
||||
<col/>
|
||||
<col style="width:80px;min-width:80px;" />
|
||||
<col style="width:80px;min-width:80px;"/>
|
||||
<col style="width:80px;min-width:80px;"/>
|
||||
<col style="width:80px;min-width:80px;"/>
|
||||
<col style="width:80px;min-width:80px;"/>
|
||||
<col style="min-width:80px;"/>
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -59,19 +59,24 @@ require(__dir__.'/../vendor/autoload.php');
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="bg1">ID</th>
|
||||
<td>
|
||||
<td colspan="5">
|
||||
<span id="slot_id"></span>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="bg1">닉네임</th>
|
||||
<td style="height:36px;">
|
||||
<td colspan="5" style="height:36px;">
|
||||
<span id="slot_nickname"></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="bg1">등급</th>
|
||||
<td>
|
||||
<td colspan="2">
|
||||
<span id="slot_grade"></span>
|
||||
</td>
|
||||
|
||||
<td colspan="3">
|
||||
<span id="slot_acl"></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="bg1">가입일시</th>
|
||||
|
||||
+2
-2
@@ -21,7 +21,7 @@ if(!$username || !$password){
|
||||
}
|
||||
|
||||
$userInfo = $RootDB->queryFirstRow(
|
||||
'SELECT `no`, `id`, `name`, `grade`, `delete_after` '.
|
||||
'SELECT `no`, `id`, `name`, `grade`, `delete_after`, `acl` '.
|
||||
'from member where id=%s_username AND '.
|
||||
'pw=sha2(concat(salt, %s_password, salt), 512)',[
|
||||
'username'=>$username,
|
||||
@@ -72,7 +72,7 @@ $RootDB->insert('member_log',[
|
||||
|
||||
|
||||
|
||||
$session->login($userInfo['no'], $userInfo['id'], $userInfo['grade']);
|
||||
$session->login($userInfo['no'], $userInfo['id'], $userInfo['grade'], Json::decode($userInfo['acl']??'{}'));
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'reason'=>'로그인 되었습니다.'
|
||||
|
||||
+18
-7
@@ -19,12 +19,6 @@ function getVersion($target=null){
|
||||
}
|
||||
|
||||
$session = Session::requireLogin(null)->setReadOnly();
|
||||
if($session->userGrade < 5){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'권한이 충분하지 않습니다'
|
||||
]);
|
||||
}
|
||||
|
||||
$request = $_POST + $_GET;
|
||||
|
||||
@@ -48,7 +42,24 @@ if(!$v->validate()){
|
||||
$target = Util::getReq('target');
|
||||
|
||||
$server = basename($request['server']);
|
||||
if($session->userGrade <= 5 || !$target){
|
||||
|
||||
$allowFullUpdate = in_array('fullUpdate', $session->acl[$server]??[]);
|
||||
$allowFullUpdate |= $session->userGrade >= 6;
|
||||
|
||||
$allowUpdate = in_array('update', $session->acl[$server]??[]);
|
||||
$allowUpdate |= $session->userGrade >= 5;
|
||||
$allowUpdate |= $allowFullUpdate;
|
||||
|
||||
|
||||
if(!$allowUpdate){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'권한이 충분하지 않습니다'
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
if(!$allowFullUpdate || !$target){
|
||||
$target = $storage->$server;
|
||||
if($target){
|
||||
$target = $target[0];
|
||||
|
||||
+49
-11
@@ -1,16 +1,16 @@
|
||||
|
||||
var serverAdminTemplate = '\
|
||||
<tr class="bg0" data-server_name="<%name%>" data-is_root="<%isRoot%>" data-git-path="<%lastGitPath%>">\
|
||||
<tr class="bg0 server_admin_<%name%>" data-server_name="<%name%>" data-is_root="<%isRoot%>" data-git-path="<%lastGitPath%>">\
|
||||
<th style="color:<%color%>;"><%korName%>(<%name%>)</th>\
|
||||
<td><%status%></td>\
|
||||
<td><%version%></td>\
|
||||
<td><button class="with_skin valid_if_set with_border obj_fill" onclick="modifyServerStatus(this, \'close\');">폐쇄</button></td>\
|
||||
<td><button class="with_skin valid_if_set with_border obj_fill" onclick="modifyServerStatus(this, \'open\');">오픈</button></td>\
|
||||
<td><a class="just_link" href="../<%name%>/install.php"><button class="with_skin valid_if_set with_border obj_fill">리셋</button></a></td>\
|
||||
<td><a class="just_link" href="../<%name%>/install_db.php"><button class="with_skin valid_if_installed only_admin with_border obj_fill">하드리셋</button></a></td>\
|
||||
<td><button class="with_skin valid_if_set with_border obj_fill" onclick="Entrance_AdminClosedLogin(this);">폐쇄중 로그인</button></td>\
|
||||
<td><button class="with_skin valid_if_set with_border obj_fill" onclick="Entrance_AdminOpen119(this);">서버119</button></td>\
|
||||
<td><button class="with_skin with_border obj_fill" onclick="serverUpdate(this);">업데이트</button></td>\
|
||||
<td><button class="serv_act_close with_skin valid_if_set with_border obj_fill" onclick="modifyServerStatus(this, \'close\');">폐쇄</button></td>\
|
||||
<td><button class="serv_act_open with_skin valid_if_set with_border obj_fill" onclick="modifyServerStatus(this, \'open\');">오픈</button></td>\
|
||||
<td><a class="just_link" href="../<%name%>/install.php"><button class="serv_act_reset with_skin valid_if_set with_border obj_fill">리셋</button></a></td>\
|
||||
<td><a class="just_link" href="../<%name%>/install_db.php"><button class="serv_act_hard_reset with_skin valid_if_installed only_admin with_border obj_fill">하드리셋</button></a></td>\
|
||||
<td><button class="serv_act_login_close with_skin valid_if_set with_border obj_fill" onclick="Entrance_AdminClosedLogin(this);">폐쇄중 로그인</button></td>\
|
||||
<td><button class="serv_act_119 with_skin valid_if_set with_border obj_fill" onclick="Entrance_AdminOpen119(this);">서버119</button></td>\
|
||||
<td><button class="serv_act_update with_skin with_border obj_fill" onclick="serverUpdate(this);">업데이트</button></td>\
|
||||
</tr>\
|
||||
';
|
||||
|
||||
@@ -25,13 +25,25 @@ function serverUpdate(caller){
|
||||
if(typeof isRoot !== 'boolean'){
|
||||
isRoot = (isRoot != 'false');
|
||||
};
|
||||
|
||||
var allowFullUpdate = (server in window.aclList && window.aclList[server].indexOf('fullUpdate')>=0);
|
||||
allowFullUpdate |= window.adminGrade > 5;
|
||||
|
||||
var allowUpdate = (server in window.aclList && window.aclList[server].indexOf('update')>=0);
|
||||
allowUpdate |= window.adminGrade >= 5;
|
||||
allowUpdate |= allowFullUpdate;
|
||||
|
||||
if(!allowUpdate){
|
||||
alert('권한이 없습니다!');
|
||||
return;
|
||||
}
|
||||
|
||||
if(isRoot){
|
||||
if(!confirm('서버 라이브러리, 루트 서버에 대해 git pull을 실행합니다.')){
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if(window.adminGrade < 6){
|
||||
else if(!allowFullUpdate){
|
||||
if (!confirm('다음 git tree-ish 주소로 업데이트를 시도합니다 : ' + target)) {
|
||||
return;
|
||||
}
|
||||
@@ -81,16 +93,42 @@ function drawServerAdminList(serverList){
|
||||
|
||||
var $tr = $(TemplateEngine(serverAdminTemplate, server));
|
||||
$table.append($tr);
|
||||
if(serverList.grade < 4){
|
||||
$tr.find('button').prop('disabled', true);
|
||||
}
|
||||
if(!server.valid){
|
||||
$tr.find('.valid_if_set').prop('disabled', true);
|
||||
}
|
||||
if(!server.installed){
|
||||
$tr.find('.valid_if_installed').prop('disabled', true);
|
||||
}
|
||||
|
||||
var aclByServer = serverList.acl[server.name];
|
||||
$.each(aclByServer, function(idx, action){
|
||||
console.log(action);
|
||||
if(action == 'update' || action == 'fullUpdate'){
|
||||
if(!server.installed){
|
||||
return true;
|
||||
}
|
||||
$tr.find('.serv_act_update').prop('disabled', false);
|
||||
}
|
||||
else if(action == 'openClose'){
|
||||
if(!server.valid){
|
||||
return true;
|
||||
}
|
||||
$tr.find('.serv_act_open, .serv_act_close').prop('disabled', false);
|
||||
}
|
||||
else if(action == 'reset'){
|
||||
if(!server.installed){
|
||||
return true;
|
||||
}
|
||||
$tr.find('.serv_act_reset').prop('disabled', false);
|
||||
}
|
||||
});
|
||||
});
|
||||
window.adminGrade = serverList.grade;
|
||||
if(serverList.grade == 5){
|
||||
|
||||
window.aclList = serverList.acl;
|
||||
if(serverList.grade <= 5){
|
||||
$table.find('.only_admin').prop('disabled', true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ function fillUserInfo(result){
|
||||
$('#slot_id').html(result.id);
|
||||
$('#slot_nickname').html(result.name);
|
||||
$('#slot_grade').html(result.grade);
|
||||
$('#slot_acl').html(result.acl);
|
||||
$('#slot_icon').attr('src', result.picture);
|
||||
$('#global_salt').val(result.global_salt);
|
||||
$('#slot_join_date').html(result.join_date);
|
||||
|
||||
@@ -91,7 +91,7 @@ if(!$email){
|
||||
|
||||
|
||||
$userInfo = $RootDB->queryFirstRow(
|
||||
'SELECT `no`, `id`, `name`, `grade`, `delete_after` from member where email=%s',$email);
|
||||
'SELECT `no`, `id`, `name`, `grade`, `delete_after`, `acl` from member where email=%s',$email);
|
||||
|
||||
if(!$userInfo){
|
||||
$restAPI->unlink();
|
||||
@@ -132,7 +132,7 @@ $RootDB->insert('member_log',[
|
||||
])
|
||||
]);
|
||||
|
||||
$session->login($userInfo['no'], $userInfo['id'], $userInfo['grade']);
|
||||
$session->login($userInfo['no'], $userInfo['id'], $userInfo['grade'], Json::decode($userInfo['acl']??'{}'));
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'reason'=>'로그인 되었습니다.'
|
||||
|
||||
+93
-13
@@ -21,8 +21,46 @@ xlsxpath = sys.argv[1]
|
||||
print(xlsxpath)
|
||||
wb = xlrd.open_workbook(xlsxpath)
|
||||
|
||||
def parseConfig(configSheet):
|
||||
result = {}
|
||||
for i in range(1, configSheet.nrows):
|
||||
row = configSheet.row_values(i)
|
||||
if len(row) < 4:
|
||||
continue
|
||||
varName = row[0]
|
||||
value = row[3]
|
||||
|
||||
if isinstance(value, float) and float(int(value)) == value:
|
||||
value = int(value)
|
||||
elif value == '':
|
||||
continue
|
||||
|
||||
if isinstance(value, str):
|
||||
values = value.split('\n')
|
||||
if len(values) > 1:
|
||||
value = values
|
||||
|
||||
varNames = varName.split('.')
|
||||
target = result
|
||||
for idx, name in enumerate(varNames):
|
||||
if idx + 1 == len(varNames):
|
||||
target[name] = value
|
||||
break
|
||||
if not name in target:
|
||||
target[name] = {}
|
||||
target = target[name]
|
||||
|
||||
if 'useCharSetting' in result:
|
||||
if result['useCharSetting'] > 0:
|
||||
result['fiction'] = 0
|
||||
else:
|
||||
result['fiction'] = 1
|
||||
del result['useCharSetting']
|
||||
return result
|
||||
|
||||
def extractNationList(nationSheet):
|
||||
jsonNationList = []
|
||||
nationChiefInfo = {}
|
||||
|
||||
for i in range(1, nationSheet.nrows):
|
||||
row = nationSheet.row_values(i)
|
||||
@@ -33,10 +71,18 @@ def extractNationList(nationSheet):
|
||||
name, color, gold, rice, desc, tech, nationType, nationLevel = row
|
||||
cities = ''
|
||||
else:
|
||||
row = row[:9]
|
||||
name, color, gold, rice, desc, tech, nationType, nationLevel, cities = row
|
||||
|
||||
name, color, gold, rice, desc, tech, nationType, nationLevel, cities = row[:9]
|
||||
|
||||
nationChiefInfo[name] = {}
|
||||
if len(row) >= 10:
|
||||
cheif0 = str(row[9])
|
||||
if cheif0:
|
||||
nationChiefInfo[name][cheif0] = 12
|
||||
if len(row) >= 11:
|
||||
cheif1 = str(row[10])
|
||||
if cheif1:
|
||||
nationChiefInfo[name][cheif1] = 11
|
||||
|
||||
|
||||
cities = list(map(str.strip, row[8].split(',')))
|
||||
|
||||
@@ -56,15 +102,16 @@ def extractNationList(nationSheet):
|
||||
|
||||
jsonNationList.append([name, color, gold, rice, desc, tech, nationType, nationLevel, cities])
|
||||
|
||||
return jsonNationList
|
||||
return jsonNationList, nationChiefInfo
|
||||
|
||||
|
||||
def extractGeneralList(generalSheet, nationList={}):
|
||||
def extractGeneralList(generalSheet, nationList={}, nationChiefInfo={}):
|
||||
nationInv = {'재야':0}
|
||||
for idx, nation in enumerate(nationList, 1):
|
||||
nationInv[nation[0]] = idx
|
||||
|
||||
json_general_list = []
|
||||
names = {}
|
||||
for i in range(1, generalSheet.nrows):
|
||||
row = generalSheet.row_values(i)
|
||||
if len(row) < 10:
|
||||
@@ -90,13 +137,17 @@ def extractGeneralList(generalSheet, nationList={}):
|
||||
elif row[2] == '':
|
||||
row[2] = None
|
||||
|
||||
level = 0
|
||||
|
||||
#국가
|
||||
|
||||
row[3] = str(row[3]).strip()
|
||||
if row[3] in nationInv:
|
||||
pass
|
||||
level = 1
|
||||
elif row[3].isdigit() and 0 < int(row[3]) < len(nationList):
|
||||
row[3] = nationList[row[3]][0]
|
||||
level = 1
|
||||
else:
|
||||
row[3] = 0
|
||||
|
||||
@@ -136,16 +187,39 @@ def extractGeneralList(generalSheet, nationList={}):
|
||||
if row[12] == '':
|
||||
row.pop()
|
||||
|
||||
row.insert(8, 0)
|
||||
if level and row[3] in nationChiefInfo:
|
||||
nationCheifDetail = nationChiefInfo[row[3]]
|
||||
if row[1] in nationCheifDetail:
|
||||
level = nationCheifDetail[row[1]]
|
||||
|
||||
row.insert(8, level)
|
||||
json_general_list.append(row)
|
||||
return json_general_list
|
||||
|
||||
if row[1] in names:
|
||||
raise RuntimeError('%s가 이미 있습니다!'%row[1])
|
||||
names[row[1]] = 1
|
||||
return json_general_list, names
|
||||
|
||||
|
||||
nationInfo = extractNationList(wb.sheet_by_name('국가'))
|
||||
if '환경 변수' in wb.sheet_names():
|
||||
config = parseConfig(wb.sheet_by_name('환경 변수'))
|
||||
else:
|
||||
config = {
|
||||
'title':'타이틀'
|
||||
}
|
||||
|
||||
generalList = extractGeneralList(wb.sheet_by_name('장수 목록'), nationInfo)
|
||||
if '국가' in wb.sheet_names():
|
||||
nationInfo, nationChiefInfo = extractNationList(wb.sheet_by_name('국가'))
|
||||
else:
|
||||
nationInfo = []
|
||||
nationChiefInfo = {}
|
||||
|
||||
generalList, names = extractGeneralList(wb.sheet_by_name('장수 목록'), nationInfo, nationChiefInfo)
|
||||
|
||||
with open('%s.json'%xlsxpath, 'wt', encoding='utf-8') as fp:
|
||||
fp.write(json.dumps(config, ensure_ascii=False, indent=' ')[:-2])
|
||||
fp.write(',\n')
|
||||
|
||||
fp.write(' "nation":[\n ')
|
||||
fp.write(',\n '.join([json.dumps(nation, ensure_ascii=False) for nation in nationInfo]))
|
||||
fp.write('\n ],\n')
|
||||
@@ -154,10 +228,16 @@ with open('%s.json'%xlsxpath, 'wt', encoding='utf-8') as fp:
|
||||
|
||||
fp.write(' "general":[\n ')
|
||||
fp.write(',\n '.join([json.dumps(general, ensure_ascii=False) for general in generalList]))
|
||||
fp.write('\n ],\n')
|
||||
fp.write('\n ]')
|
||||
|
||||
if '확장 장수 목록' in wb.sheet_names():
|
||||
generalExList = extractGeneralList(wb.sheet_by_name('확장 장수 목록'), nationInfo)
|
||||
fp.write(' "general_ex":[\n ')
|
||||
generalExList, names2 = extractGeneralList(wb.sheet_by_name('확장 장수 목록'), nationInfo, nationChiefInfo)
|
||||
|
||||
for name in names2:
|
||||
if name in names:
|
||||
raise RuntimeError('%s가 일반 장수 및 확장 장수에 모두 있습니다!'%name)
|
||||
|
||||
fp.write(',\n "general_ex":[\n ')
|
||||
fp.write(',\n '.join([json.dumps(general, ensure_ascii=False) for general in generalExList]))
|
||||
fp.write('\n ],\n')
|
||||
fp.write('\n ]')
|
||||
fp.write('\n}')
|
||||
@@ -560,11 +560,17 @@ class JosaUtil{
|
||||
return JosaUtil::checkText($target, $isRo);
|
||||
}
|
||||
|
||||
public static function pick(string $text, string $wJongsung, string $woJongsung=''){
|
||||
public static function pick($text, string $wJongsung, string $woJongsung=''){
|
||||
/* NOTE:원본 코드와 인자 순서가 다름.
|
||||
* 원본은 pick('바람', '랑', '이랑'); 이었다면 JosaUtil::pick('바람', '이랑', '랑'); 으로 바뀜.
|
||||
* JosaUtil::pick('바람', '은', '는'); JosaUti::pick('바람', '이', '가');처럼 쓰기 위해서임.
|
||||
*/
|
||||
if($text === null){
|
||||
$text = '';
|
||||
}
|
||||
else{
|
||||
$text = (string)$text;
|
||||
}
|
||||
JosaUtil::init();
|
||||
|
||||
if(!$woJongsung){
|
||||
|
||||
@@ -8,6 +8,7 @@ namespace sammo;
|
||||
* @property string $userName 유저명
|
||||
* @property int $userGrade 유저등급
|
||||
* @property string $ip IP
|
||||
* @property array $acl 권한
|
||||
*/
|
||||
class Session
|
||||
{
|
||||
@@ -19,7 +20,8 @@ class Session
|
||||
'userGrade'=>true,
|
||||
'writeClosed'=>true,
|
||||
'generalID'=>true,
|
||||
'generalName'=>true
|
||||
'generalName'=>true,
|
||||
'acl'=>true
|
||||
];
|
||||
|
||||
const GAME_KEY_DATE = '_g_loginDate';
|
||||
@@ -161,13 +163,14 @@ class Session
|
||||
return Util::array_get($_SESSION[$name]);
|
||||
}
|
||||
|
||||
public function login(int $userID, string $userName, int $grade): Session
|
||||
public function login(int $userID, string $userName, int $grade, array $acl): Session
|
||||
{
|
||||
$this->set('userID', $userID);
|
||||
$this->set('userName', $userName);
|
||||
$this->set('ip', Util::get_client_ip(true));
|
||||
$this->set('time', time());
|
||||
$this->set('userGrade', $grade);
|
||||
$this->set('acl', $acl);
|
||||
$this->set('access_token', null);
|
||||
return $this;
|
||||
}
|
||||
@@ -185,6 +188,7 @@ class Session
|
||||
$this->set('userID', null);
|
||||
$this->set('userName', null);
|
||||
$this->set('userGrade', null);
|
||||
$this->set('acl', null);
|
||||
$this->set('time', time());
|
||||
return $this;
|
||||
}
|
||||
@@ -244,7 +248,7 @@ class Session
|
||||
}
|
||||
|
||||
$turnterm = $gameStor->turnterm;
|
||||
$isUnited = $gameStor->isUnited != 0;
|
||||
$isUnited = $gameStor->isunited != 0;
|
||||
|
||||
$generalID = $general['no'];
|
||||
$generalName = $general['name'];
|
||||
|
||||
@@ -143,20 +143,42 @@ class StringUtil
|
||||
return static::padString($str, $maxsize, $ch, 0);
|
||||
}
|
||||
|
||||
public static function escapeTag($str)
|
||||
public static function escapeTag(?string $str):string
|
||||
{
|
||||
if(!$str){
|
||||
return '';
|
||||
}
|
||||
$str = htmlspecialchars($str);
|
||||
$str = str_replace(["\r\n", "\r", "\n"], '<br>', $str);
|
||||
return $str;
|
||||
}
|
||||
|
||||
public static function neutralize(?string $str, ?int $maxLen = null){
|
||||
if(!$str){
|
||||
return '';
|
||||
}
|
||||
if($maxLen && $maxLen > 0){
|
||||
$str = StringUtil::subStringForWidth($str, 0, $maxLen);
|
||||
}
|
||||
$str = htmlspecialchars($str);
|
||||
$str = StringUtil::removeSpecialCharacter($str);
|
||||
$str = WebUtil::htmlPurify($str);
|
||||
$str = StringUtil::textStrip($str);
|
||||
return $str;
|
||||
}
|
||||
|
||||
public static function textStrip(?string $str):string{
|
||||
if(!$str){
|
||||
return '';
|
||||
}
|
||||
return preg_replace('/^[\pZ\pC]+|[\pZ\pC]+$/u','',$str);
|
||||
}
|
||||
|
||||
public static function removeSpecialCharacter($str)
|
||||
{
|
||||
return str_replace([
|
||||
' ', '"', '\'', 'ⓝ', 'ⓜ', 'ⓖ', '\\', '/', '`',
|
||||
'-', '=', '[', ']', ';', ',', '.', '~', '!', '@',
|
||||
'#', '$', '%', '^', '&', '*', '(', ')', '_', '+',
|
||||
'|', '{', '}', ':', '', '<', '>', '?', ' '
|
||||
'"', '\'', 'ⓝ', 'ⓜ', 'ⓖ', '\\', '/', '`', '#',
|
||||
'-', '#', '|'
|
||||
], '', $str);
|
||||
}
|
||||
|
||||
|
||||
@@ -281,6 +281,23 @@ class Util extends \utilphp\util
|
||||
return $dict;
|
||||
}
|
||||
|
||||
/**
|
||||
* key=>value pair를 보존한 섞기
|
||||
*/
|
||||
public static function shuffle_assoc(&$array) {
|
||||
$keys = array_keys($array);
|
||||
|
||||
shuffle($keys);
|
||||
|
||||
foreach($keys as $key) {
|
||||
$new[$key] = $array[$key];
|
||||
}
|
||||
|
||||
$array = $new;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 0.0~1.0 사이의 랜덤 float
|
||||
|
||||
@@ -125,4 +125,14 @@ class WebUtil
|
||||
}
|
||||
return "<link rel='stylesheet' type='text/css' href='{$path}{$tail}' />\n";
|
||||
}
|
||||
|
||||
public static function htmlPurify(?string $text): string{
|
||||
if(!$text){
|
||||
return '';
|
||||
}
|
||||
|
||||
$config = \HTMLPurifier_HTML5Config::createDefault();
|
||||
$purifier = new \HTMLPurifier($config);
|
||||
return $purifier->purify($text);
|
||||
}
|
||||
}
|
||||
|
||||
+8
-7
@@ -6,21 +6,22 @@ $vendorDir = dirname(dirname(__FILE__));
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'ArithmeticError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php',
|
||||
'AssertionError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/AssertionError.php',
|
||||
'DB' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'DBHelper' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'DBTransaction' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'DivisionByZeroError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/DivisionByZeroError.php',
|
||||
'Error' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/Error.php',
|
||||
'FB' => $vendorDir . '/firephp/firephp-core/lib/FirePHPCore/fb.php',
|
||||
'FirePHP' => $vendorDir . '/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php',
|
||||
'HTMLPurifier_AttrDef_HTML_Bool2' => $vendorDir . '/xemlock/htmlpurifier-html5/library/HTMLPurifier/AttrDef/HTML/Bool2.php',
|
||||
'HTMLPurifier_AttrDef_Regexp' => $vendorDir . '/xemlock/htmlpurifier-html5/library/HTMLPurifier/AttrDef/Regexp.php',
|
||||
'HTMLPurifier_ChildDef_Details' => $vendorDir . '/xemlock/htmlpurifier-html5/library/HTMLPurifier/ChildDef/Details.php',
|
||||
'HTMLPurifier_ChildDef_Figure' => $vendorDir . '/xemlock/htmlpurifier-html5/library/HTMLPurifier/ChildDef/Figure.php',
|
||||
'HTMLPurifier_ChildDef_Media' => $vendorDir . '/xemlock/htmlpurifier-html5/library/HTMLPurifier/ChildDef/Media.php',
|
||||
'HTMLPurifier_ChildDef_Picture' => $vendorDir . '/xemlock/htmlpurifier-html5/library/HTMLPurifier/ChildDef/Picture.php',
|
||||
'HTMLPurifier_HTML5Config' => $vendorDir . '/xemlock/htmlpurifier-html5/library/HTMLPurifier/HTML5Config.php',
|
||||
'HTMLPurifier_HTML5Definition' => $vendorDir . '/xemlock/htmlpurifier-html5/library/HTMLPurifier/HTML5Definition.php',
|
||||
'MeekroDB' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'MeekroDBEval' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'MeekroDBException' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'ParseError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/ParseError.php',
|
||||
'SessionUpdateTimestampHandlerInterface' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/SessionUpdateTimestampHandlerInterface.php',
|
||||
'TypeError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/TypeError.php',
|
||||
'WhereClause' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'kakao\\KakaoKey' => $baseDir . '/d_setting/KakaoKey.php',
|
||||
'sammo\\RootDB' => $baseDir . '/d_setting/RootDB.php',
|
||||
|
||||
Vendored
+1
-2
@@ -6,10 +6,9 @@ $vendorDir = dirname(dirname(__FILE__));
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'5255c38a0faeba867671b61dfda6d864' => $vendorDir . '/paragonie/random_compat/lib/random.php',
|
||||
'2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
|
||||
'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php',
|
||||
'a0edc8309cc5e1d60e3047b5df6b7052' => $vendorDir . '/guzzlehttp/psr7/src/functions_include.php',
|
||||
'023d27dca8066ef29e6739335ea73bad' => $vendorDir . '/symfony/polyfill-php70/bootstrap.php',
|
||||
'37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
|
||||
'5b154887902198b16314243c6e0e3e19' => $vendorDir . '/pguardiario/phpuri/phpuri.php',
|
||||
'870dc64919afa8b0f700701bb2c6a783' => $baseDir . '/f_config/config.php',
|
||||
|
||||
+1
-1
@@ -7,5 +7,5 @@ $baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'utilphp\\' => array($vendorDir . '/brandonwamboldt/utilphp/src'),
|
||||
'Valitron' => array($vendorDir . '/vlucas/valitron/src'),
|
||||
'HTMLPurifier' => array($vendorDir . '/ezyang/htmlpurifier/library'),
|
||||
);
|
||||
|
||||
Vendored
+1
-1
@@ -8,7 +8,7 @@ $baseDir = dirname($vendorDir);
|
||||
return array(
|
||||
'sammo\\' => array($baseDir . '/src/sammo'),
|
||||
'kakao\\' => array($baseDir . '/src/kakao'),
|
||||
'Symfony\\Polyfill\\Php70\\' => array($vendorDir . '/symfony/polyfill-php70'),
|
||||
'Valitron\\' => array($vendorDir . '/vlucas/valitron/src/Valitron'),
|
||||
'Symfony\\Component\\Lock\\' => array($vendorDir . '/symfony/lock'),
|
||||
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
|
||||
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'),
|
||||
|
||||
Vendored
+18
-15
@@ -7,10 +7,9 @@ namespace Composer\Autoload;
|
||||
class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a
|
||||
{
|
||||
public static $files = array (
|
||||
'5255c38a0faeba867671b61dfda6d864' => __DIR__ . '/..' . '/paragonie/random_compat/lib/random.php',
|
||||
'2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
|
||||
'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php',
|
||||
'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php',
|
||||
'023d27dca8066ef29e6739335ea73bad' => __DIR__ . '/..' . '/symfony/polyfill-php70/bootstrap.php',
|
||||
'37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
|
||||
'5b154887902198b16314243c6e0e3e19' => __DIR__ . '/..' . '/pguardiario/phpuri/phpuri.php',
|
||||
'870dc64919afa8b0f700701bb2c6a783' => __DIR__ . '/../..' . '/f_config/config.php',
|
||||
@@ -25,9 +24,12 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a
|
||||
array (
|
||||
'kakao\\' => 6,
|
||||
),
|
||||
'V' =>
|
||||
array (
|
||||
'Valitron\\' => 9,
|
||||
),
|
||||
'S' =>
|
||||
array (
|
||||
'Symfony\\Polyfill\\Php70\\' => 23,
|
||||
'Symfony\\Component\\Lock\\' => 23,
|
||||
),
|
||||
'P' =>
|
||||
@@ -63,9 +65,9 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a
|
||||
array (
|
||||
0 => __DIR__ . '/../..' . '/src/kakao',
|
||||
),
|
||||
'Symfony\\Polyfill\\Php70\\' =>
|
||||
'Valitron\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/polyfill-php70',
|
||||
0 => __DIR__ . '/..' . '/vlucas/valitron/src/Valitron',
|
||||
),
|
||||
'Symfony\\Component\\Lock\\' =>
|
||||
array (
|
||||
@@ -121,31 +123,32 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a
|
||||
0 => __DIR__ . '/..' . '/brandonwamboldt/utilphp/src',
|
||||
),
|
||||
),
|
||||
'V' =>
|
||||
'H' =>
|
||||
array (
|
||||
'Valitron' =>
|
||||
'HTMLPurifier' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/vlucas/valitron/src',
|
||||
0 => __DIR__ . '/..' . '/ezyang/htmlpurifier/library',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
public static $classMap = array (
|
||||
'ArithmeticError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php',
|
||||
'AssertionError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/AssertionError.php',
|
||||
'DB' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'DBHelper' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'DBTransaction' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'DivisionByZeroError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/DivisionByZeroError.php',
|
||||
'Error' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/Error.php',
|
||||
'FB' => __DIR__ . '/..' . '/firephp/firephp-core/lib/FirePHPCore/fb.php',
|
||||
'FirePHP' => __DIR__ . '/..' . '/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php',
|
||||
'HTMLPurifier_AttrDef_HTML_Bool2' => __DIR__ . '/..' . '/xemlock/htmlpurifier-html5/library/HTMLPurifier/AttrDef/HTML/Bool2.php',
|
||||
'HTMLPurifier_AttrDef_Regexp' => __DIR__ . '/..' . '/xemlock/htmlpurifier-html5/library/HTMLPurifier/AttrDef/Regexp.php',
|
||||
'HTMLPurifier_ChildDef_Details' => __DIR__ . '/..' . '/xemlock/htmlpurifier-html5/library/HTMLPurifier/ChildDef/Details.php',
|
||||
'HTMLPurifier_ChildDef_Figure' => __DIR__ . '/..' . '/xemlock/htmlpurifier-html5/library/HTMLPurifier/ChildDef/Figure.php',
|
||||
'HTMLPurifier_ChildDef_Media' => __DIR__ . '/..' . '/xemlock/htmlpurifier-html5/library/HTMLPurifier/ChildDef/Media.php',
|
||||
'HTMLPurifier_ChildDef_Picture' => __DIR__ . '/..' . '/xemlock/htmlpurifier-html5/library/HTMLPurifier/ChildDef/Picture.php',
|
||||
'HTMLPurifier_HTML5Config' => __DIR__ . '/..' . '/xemlock/htmlpurifier-html5/library/HTMLPurifier/HTML5Config.php',
|
||||
'HTMLPurifier_HTML5Definition' => __DIR__ . '/..' . '/xemlock/htmlpurifier-html5/library/HTMLPurifier/HTML5Definition.php',
|
||||
'MeekroDB' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'MeekroDBEval' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'MeekroDBException' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'ParseError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/ParseError.php',
|
||||
'SessionUpdateTimestampHandlerInterface' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/SessionUpdateTimestampHandlerInterface.php',
|
||||
'TypeError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/TypeError.php',
|
||||
'WhereClause' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||
'kakao\\KakaoKey' => __DIR__ . '/../..' . '/d_setting/KakaoKey.php',
|
||||
'sammo\\RootDB' => __DIR__ . '/../..' . '/d_setting/RootDB.php',
|
||||
|
||||
Vendored
+144
-162
@@ -47,6 +47,55 @@
|
||||
"utility"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ezyang/htmlpurifier",
|
||||
"version": "v4.10.0",
|
||||
"version_normalized": "4.10.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/ezyang/htmlpurifier.git",
|
||||
"reference": "d85d39da4576a6934b72480be6978fb10c860021"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/d85d39da4576a6934b72480be6978fb10c860021",
|
||||
"reference": "d85d39da4576a6934b72480be6978fb10c860021",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"simpletest/simpletest": "^1.1"
|
||||
},
|
||||
"time": "2018-02-23T01:58:20+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"HTMLPurifier": "library/"
|
||||
},
|
||||
"files": [
|
||||
"library/HTMLPurifier.composer.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"LGPL"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Edward Z. Yang",
|
||||
"email": "admin@htmlpurifier.org",
|
||||
"homepage": "http://ezyang.com"
|
||||
}
|
||||
],
|
||||
"description": "Standards compliant HTML filter written in PHP",
|
||||
"homepage": "http://htmlpurifier.org/",
|
||||
"keywords": [
|
||||
"html"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "firephp/firephp-core",
|
||||
"version": "v0.4.0",
|
||||
@@ -87,17 +136,17 @@
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/guzzle",
|
||||
"version": "6.3.2",
|
||||
"version_normalized": "6.3.2.0",
|
||||
"version": "6.3.3",
|
||||
"version_normalized": "6.3.3.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/guzzle.git",
|
||||
"reference": "68d0ea14d5a3f42a20e87632a5f84931e2709c90"
|
||||
"reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/68d0ea14d5a3f42a20e87632a5f84931e2709c90",
|
||||
"reference": "68d0ea14d5a3f42a20e87632a5f84931e2709c90",
|
||||
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba",
|
||||
"reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -107,13 +156,13 @@
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-curl": "*",
|
||||
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4",
|
||||
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
|
||||
"psr/log": "^1.0"
|
||||
},
|
||||
"suggest": {
|
||||
"psr/log": "Required for using the Log middleware"
|
||||
},
|
||||
"time": "2018-03-26T16:33:04+00:00",
|
||||
"time": "2018-04-22T15:46:56+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
@@ -274,17 +323,17 @@
|
||||
},
|
||||
{
|
||||
"name": "leafo/scssphp",
|
||||
"version": "v0.7.5",
|
||||
"version_normalized": "0.7.5.0",
|
||||
"version": "v0.7.6",
|
||||
"version_normalized": "0.7.6.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/leafo/scssphp.git",
|
||||
"reference": "8b538d828bbb75276974605c4a1a435e939da74e"
|
||||
"reference": "585f6ae84de62ffecf69c23805f25d78d7e4b794"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/leafo/scssphp/zipball/8b538d828bbb75276974605c4a1a435e939da74e",
|
||||
"reference": "8b538d828bbb75276974605c4a1a435e939da74e",
|
||||
"url": "https://api.github.com/repos/leafo/scssphp/zipball/585f6ae84de62ffecf69c23805f25d78d7e4b794",
|
||||
"reference": "585f6ae84de62ffecf69c23805f25d78d7e4b794",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -294,7 +343,7 @@
|
||||
"phpunit/phpunit": "~4.6",
|
||||
"squizlabs/php_codesniffer": "~2.5"
|
||||
},
|
||||
"time": "2018-02-09T02:04:21+00:00",
|
||||
"time": "2018-05-24T02:18:53+00:00",
|
||||
"bin": [
|
||||
"bin/pscss"
|
||||
],
|
||||
@@ -463,56 +512,6 @@
|
||||
"psr-3"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "paragonie/random_compat",
|
||||
"version": "v2.0.12",
|
||||
"version_normalized": "2.0.12.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/paragonie/random_compat.git",
|
||||
"reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/258c89a6b97de7dfaf5b8c7607d0478e236b04fb",
|
||||
"reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "4.*|5.*"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
|
||||
},
|
||||
"time": "2018-04-04T21:24:14+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"lib/random.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Paragon Initiative Enterprises",
|
||||
"email": "security@paragonie.com",
|
||||
"homepage": "https://paragonie.com"
|
||||
}
|
||||
],
|
||||
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
|
||||
"keywords": [
|
||||
"csprng",
|
||||
"pseudorandom",
|
||||
"random"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "pguardiario/phpuri",
|
||||
"version": "1.0",
|
||||
@@ -541,20 +540,20 @@
|
||||
},
|
||||
{
|
||||
"name": "php-extended/php-system",
|
||||
"version": "1.3.0",
|
||||
"version_normalized": "1.3.0.0",
|
||||
"version": "1.4.0",
|
||||
"version_normalized": "1.4.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-extended/php-system.git",
|
||||
"reference": "66727d5dc0a665916bd7e08bcfb9820e7be1d20c"
|
||||
"url": "https://gitlab.com/php-extended/php-system.git",
|
||||
"reference": "9e6b3c2009ef56dc123efc43900e40cdf217ace0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-extended/php-system/zipball/66727d5dc0a665916bd7e08bcfb9820e7be1d20c",
|
||||
"reference": "66727d5dc0a665916bd7e08bcfb9820e7be1d20c",
|
||||
"url": "https://gitlab.com/api/v4/projects/php-extended%2Fphp-system/repository/archive.zip?sha=9e6b3c2009ef56dc123efc43900e40cdf217ace0",
|
||||
"reference": "9e6b3c2009ef56dc123efc43900e40cdf217ace0",
|
||||
"shasum": ""
|
||||
},
|
||||
"time": "2017-01-14T11:56:24+00:00",
|
||||
"time": "2018-06-07T06:03:27+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
@@ -569,11 +568,11 @@
|
||||
"authors": [
|
||||
{
|
||||
"name": "Anastaszor",
|
||||
"role": "developer"
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "A generic way to find informations about the running system",
|
||||
"homepage": "https://github.com/php-extended/php-system",
|
||||
"homepage": "https://gitlab.com/php-extended/php-system",
|
||||
"keywords": [
|
||||
"operating system",
|
||||
"os",
|
||||
@@ -583,23 +582,23 @@
|
||||
},
|
||||
{
|
||||
"name": "php-extended/php-tail",
|
||||
"version": "2.1.1",
|
||||
"version_normalized": "2.1.1.0",
|
||||
"version": "2.2.0",
|
||||
"version_normalized": "2.2.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-extended/php-tail.git",
|
||||
"reference": "eabf7bee64f8c30fe9b9e1176562fdb903c54ae7"
|
||||
"url": "https://gitlab.com/php-extended/php-tail.git",
|
||||
"reference": "19fbd3a79ccc071954f28296b2c44754335304a0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-extended/php-tail/zipball/eabf7bee64f8c30fe9b9e1176562fdb903c54ae7",
|
||||
"reference": "eabf7bee64f8c30fe9b9e1176562fdb903c54ae7",
|
||||
"url": "https://gitlab.com/api/v4/projects/php-extended%2Fphp-tail/repository/archive.zip?sha=19fbd3a79ccc071954f28296b2c44754335304a0",
|
||||
"reference": "19fbd3a79ccc071954f28296b2c44754335304a0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php-extended/php-system": "^1.2"
|
||||
},
|
||||
"time": "2017-07-25T13:52:42+00:00",
|
||||
"time": "2018-06-07T06:04:58+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
@@ -614,11 +613,11 @@
|
||||
"authors": [
|
||||
{
|
||||
"name": "Anastaszor",
|
||||
"role": "developer"
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "A smart way to tail files depending of the environment",
|
||||
"homepage": "https://github.com/php-extended/php-tail",
|
||||
"homepage": "https://gitlab.com/php-extended/php-tail",
|
||||
"keywords": [
|
||||
"cheat",
|
||||
"mighty",
|
||||
@@ -775,32 +774,31 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/lock",
|
||||
"version": "v3.4.9",
|
||||
"version_normalized": "3.4.9.0",
|
||||
"version": "v4.1.0",
|
||||
"version_normalized": "4.1.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/lock.git",
|
||||
"reference": "3a707193326d31603824706e34a95af899a59788"
|
||||
"reference": "a1df50492e927ad00ca271f29adb2949a14f2a5a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/lock/zipball/3a707193326d31603824706e34a95af899a59788",
|
||||
"reference": "3a707193326d31603824706e34a95af899a59788",
|
||||
"url": "https://api.github.com/repos/symfony/lock/zipball/a1df50492e927ad00ca271f29adb2949a14f2a5a",
|
||||
"reference": "a1df50492e927ad00ca271f29adb2949a14f2a5a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^5.5.9|>=7.0.8",
|
||||
"psr/log": "~1.0",
|
||||
"symfony/polyfill-php70": "~1.0"
|
||||
"php": "^7.1.3",
|
||||
"psr/log": "~1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"predis/predis": "~1.0"
|
||||
},
|
||||
"time": "2018-04-29T14:44:26+00:00",
|
||||
"time": "2018-05-30T07:26:09+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.4-dev"
|
||||
"dev-master": "4.1-dev"
|
||||
}
|
||||
},
|
||||
"installation-source": "dist",
|
||||
@@ -837,99 +835,41 @@
|
||||
"semaphore"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php70",
|
||||
"version": "v1.8.0",
|
||||
"version_normalized": "1.8.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php70.git",
|
||||
"reference": "77454693d8f10dd23bb24955cffd2d82db1007a6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/77454693d8f10dd23bb24955cffd2d82db1007a6",
|
||||
"reference": "77454693d8f10dd23bb24955cffd2d82db1007a6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"paragonie/random_compat": "~1.0|~2.0",
|
||||
"php": ">=5.3.3"
|
||||
},
|
||||
"time": "2018-04-26T10:06:28+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.8-dev"
|
||||
}
|
||||
},
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\Polyfill\\Php70\\": ""
|
||||
},
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
],
|
||||
"classmap": [
|
||||
"Resources/stubs"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nicolas Grekas",
|
||||
"email": "p@tchwork.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"compatibility",
|
||||
"polyfill",
|
||||
"portable",
|
||||
"shim"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "vlucas/valitron",
|
||||
"version": "v1.4.2",
|
||||
"version_normalized": "1.4.2.0",
|
||||
"version": "v1.4.3",
|
||||
"version_normalized": "1.4.3.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/vlucas/valitron.git",
|
||||
"reference": "87775d76268beda2afa085bdd6e44b17e98907c6"
|
||||
"reference": "3c5463315bfa23b17f8949b100a960d035234e43"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/vlucas/valitron/zipball/87775d76268beda2afa085bdd6e44b17e98907c6",
|
||||
"reference": "87775d76268beda2afa085bdd6e44b17e98907c6",
|
||||
"url": "https://api.github.com/repos/vlucas/valitron/zipball/3c5463315bfa23b17f8949b100a960d035234e43",
|
||||
"reference": "3c5463315bfa23b17f8949b100a960d035234e43",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~4.0"
|
||||
"phpunit/phpunit": "^4.8.35 || ^5.5 || ^6.5"
|
||||
},
|
||||
"time": "2017-10-30T23:15:06+00:00",
|
||||
"suggest": {
|
||||
"ext-mbstring": "It can support the multiple bytes string length."
|
||||
},
|
||||
"time": "2018-05-06T10:45:26+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Valitron": "src/"
|
||||
"psr-4": {
|
||||
"Valitron\\": "src/Valitron"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"BSD"
|
||||
"BSD-3-Clause"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
@@ -945,5 +885,47 @@
|
||||
"validation",
|
||||
"validator"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "xemlock/htmlpurifier-html5",
|
||||
"version": "v0.1.7",
|
||||
"version_normalized": "0.1.7.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/xemlock/htmlpurifier-html5.git",
|
||||
"reference": "b4b35e51ec75e0207c23035f7d9a354bdcdac359"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/xemlock/htmlpurifier-html5/zipball/b4b35e51ec75e0207c23035f7d9a354bdcdac359",
|
||||
"reference": "b4b35e51ec75e0207c23035f7d9a354bdcdac359",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ezyang/htmlpurifier": "^4.7",
|
||||
"php": ">=5.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "4.7.*|5.7.*"
|
||||
},
|
||||
"time": "2018-06-07T14:30:17+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"library/HTMLPurifier/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "xemlock",
|
||||
"email": "xemlock@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "HTML Purifier definitions for HTML5 elements"
|
||||
}
|
||||
]
|
||||
|
||||
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
|
||||
CREDITS
|
||||
|
||||
Almost everything written by Edward Z. Yang (Ambush Commander). Lots of thanks
|
||||
to the DevNetwork Community for their help (see docs/ref-devnetwork.html for
|
||||
more details), Feyd especially (namely IPv6 and optimization). Thanks to RSnake
|
||||
for letting me package his fantastic XSS cheatsheet for a smoketest.
|
||||
|
||||
vim: et sw=4 sts=4
|
||||
Vendored
+373
@@ -0,0 +1,373 @@
|
||||
|
||||
Install
|
||||
How to install HTML Purifier
|
||||
|
||||
HTML Purifier is designed to run out of the box, so actually using the
|
||||
library is extremely easy. (Although... if you were looking for a
|
||||
step-by-step installation GUI, you've downloaded the wrong software!)
|
||||
|
||||
While the impatient can get going immediately with some of the sample
|
||||
code at the bottom of this library, it's well worth reading this entire
|
||||
document--most of the other documentation assumes that you are familiar
|
||||
with these contents.
|
||||
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
1. Compatibility
|
||||
|
||||
HTML Purifier is PHP 5 and PHP 7, and is actively tested from PHP 5.0.5
|
||||
and up. It has no core dependencies with other libraries.
|
||||
|
||||
These optional extensions can enhance the capabilities of HTML Purifier:
|
||||
|
||||
* iconv : Converts text to and from non-UTF-8 encodings
|
||||
* bcmath : Used for unit conversion and imagecrash protection
|
||||
* tidy : Used for pretty-printing HTML
|
||||
|
||||
These optional libraries can enhance the capabilities of HTML Purifier:
|
||||
|
||||
* CSSTidy : Clean CSS stylesheets using %Core.ExtractStyleBlocks
|
||||
Note: You should use the modernized fork of CSSTidy available
|
||||
at https://github.com/Cerdic/CSSTidy
|
||||
* Net_IDNA2 (PEAR) : IRI support using %Core.EnableIDNA
|
||||
Note: This is not necessary for PHP 5.3 or later
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
2. Reconnaissance
|
||||
|
||||
A big plus of HTML Purifier is its inerrant support of standards, so
|
||||
your web-pages should be standards-compliant. (They should also use
|
||||
semantic markup, but that's another issue altogether, one HTML Purifier
|
||||
cannot fix without reading your mind.)
|
||||
|
||||
HTML Purifier can process these doctypes:
|
||||
|
||||
* XHTML 1.0 Transitional (default)
|
||||
* XHTML 1.0 Strict
|
||||
* HTML 4.01 Transitional
|
||||
* HTML 4.01 Strict
|
||||
* XHTML 1.1
|
||||
|
||||
...and these character encodings:
|
||||
|
||||
* UTF-8 (default)
|
||||
* Any encoding iconv supports (with crippled internationalization support)
|
||||
|
||||
These defaults reflect what my choices would be if I were authoring an
|
||||
HTML document, however, what you choose depends on the nature of your
|
||||
codebase. If you don't know what doctype you are using, you can determine
|
||||
the doctype from this identifier at the top of your source code:
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
...and the character encoding from this code:
|
||||
|
||||
<meta http-equiv="Content-type" content="text/html;charset=ENCODING">
|
||||
|
||||
If the character encoding declaration is missing, STOP NOW, and
|
||||
read 'docs/enduser-utf8.html' (web accessible at
|
||||
http://htmlpurifier.org/docs/enduser-utf8.html). In fact, even if it is
|
||||
present, read this document anyway, as many websites specify their
|
||||
document's character encoding incorrectly.
|
||||
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
3. Including the library
|
||||
|
||||
The procedure is quite simple:
|
||||
|
||||
require_once '/path/to/library/HTMLPurifier.auto.php';
|
||||
|
||||
This will setup an autoloader, so the library's files are only included
|
||||
when you use them.
|
||||
|
||||
Only the contents in the library/ folder are necessary, so you can remove
|
||||
everything else when using HTML Purifier in a production environment.
|
||||
|
||||
If you installed HTML Purifier via PEAR, all you need to do is:
|
||||
|
||||
require_once 'HTMLPurifier.auto.php';
|
||||
|
||||
Please note that the usual PEAR practice of including just the classes you
|
||||
want will not work with HTML Purifier's autoloading scheme.
|
||||
|
||||
Advanced users, read on; other users can skip to section 4.
|
||||
|
||||
Autoload compatibility
|
||||
----------------------
|
||||
|
||||
HTML Purifier attempts to be as smart as possible when registering an
|
||||
autoloader, but there are some cases where you will need to change
|
||||
your own code to accomodate HTML Purifier. These are those cases:
|
||||
|
||||
PHP VERSION IS LESS THAN 5.1.2, AND YOU'VE DEFINED __autoload
|
||||
Because spl_autoload_register() doesn't exist in early versions
|
||||
of PHP 5, HTML Purifier has no way of adding itself to the autoload
|
||||
stack. Modify your __autoload function to test
|
||||
HTMLPurifier_Bootstrap::autoload($class)
|
||||
|
||||
For example, suppose your autoload function looks like this:
|
||||
|
||||
function __autoload($class) {
|
||||
require str_replace('_', '/', $class) . '.php';
|
||||
return true;
|
||||
}
|
||||
|
||||
A modified version with HTML Purifier would look like this:
|
||||
|
||||
function __autoload($class) {
|
||||
if (HTMLPurifier_Bootstrap::autoload($class)) return true;
|
||||
require str_replace('_', '/', $class) . '.php';
|
||||
return true;
|
||||
}
|
||||
|
||||
Note that there *is* some custom behavior in our autoloader; the
|
||||
original autoloader in our example would work for 99% of the time,
|
||||
but would fail when including language files.
|
||||
|
||||
AN __autoload FUNCTION IS DECLARED AFTER OUR AUTOLOADER IS REGISTERED
|
||||
spl_autoload_register() has the curious behavior of disabling
|
||||
the existing __autoload() handler. Users need to explicitly
|
||||
spl_autoload_register('__autoload'). Because we use SPL when it
|
||||
is available, __autoload() will ALWAYS be disabled. If __autoload()
|
||||
is declared before HTML Purifier is loaded, this is not a problem:
|
||||
HTML Purifier will register the function for you. But if it is
|
||||
declared afterwards, it will mysteriously not work. This
|
||||
snippet of code (after your autoloader is defined) will fix it:
|
||||
|
||||
spl_autoload_register('__autoload')
|
||||
|
||||
Users should also be on guard if they use a version of PHP previous
|
||||
to 5.1.2 without an autoloader--HTML Purifier will define __autoload()
|
||||
for you, which can collide with an autoloader that was added by *you*
|
||||
later.
|
||||
|
||||
|
||||
For better performance
|
||||
----------------------
|
||||
|
||||
Opcode caches, which greatly speed up PHP initialization for scripts
|
||||
with large amounts of code (HTML Purifier included), don't like
|
||||
autoloaders. We offer an include file that includes all of HTML Purifier's
|
||||
files in one go in an opcode cache friendly manner:
|
||||
|
||||
// If /path/to/library isn't already in your include path, uncomment
|
||||
// the below line:
|
||||
// require '/path/to/library/HTMLPurifier.path.php';
|
||||
|
||||
require 'HTMLPurifier.includes.php';
|
||||
|
||||
Optional components still need to be included--you'll know if you try to
|
||||
use a feature and you get a class doesn't exists error! The autoloader
|
||||
can be used in conjunction with this approach to catch classes that are
|
||||
missing. Simply add this afterwards:
|
||||
|
||||
require 'HTMLPurifier.autoload.php';
|
||||
|
||||
Standalone version
|
||||
------------------
|
||||
|
||||
HTML Purifier has a standalone distribution; you can also generate
|
||||
a standalone file from the full version by running the script
|
||||
maintenance/generate-standalone.php . The standalone version has the
|
||||
benefit of having most of its code in one file, so parsing is much
|
||||
faster and the library is easier to manage.
|
||||
|
||||
If HTMLPurifier.standalone.php exists in the library directory, you
|
||||
can use it like this:
|
||||
|
||||
require '/path/to/HTMLPurifier.standalone.php';
|
||||
|
||||
This is equivalent to including HTMLPurifier.includes.php, except that
|
||||
the contents of standalone/ will be added to your path. To override this
|
||||
behavior, specify a new HTMLPURIFIER_PREFIX where standalone files can
|
||||
be found (usually, this will be one directory up, the "true" library
|
||||
directory in full distributions). Don't forget to set your path too!
|
||||
|
||||
The autoloader can be added to the end to ensure the classes are
|
||||
loaded when necessary; otherwise you can manually include them.
|
||||
To use the autoloader, use this:
|
||||
|
||||
require 'HTMLPurifier.autoload.php';
|
||||
|
||||
For advanced users
|
||||
------------------
|
||||
|
||||
HTMLPurifier.auto.php performs a number of operations that can be done
|
||||
individually. These are:
|
||||
|
||||
HTMLPurifier.path.php
|
||||
Puts /path/to/library in the include path. For high performance,
|
||||
this should be done in php.ini.
|
||||
|
||||
HTMLPurifier.autoload.php
|
||||
Registers our autoload handler HTMLPurifier_Bootstrap::autoload($class).
|
||||
|
||||
You can do these operations by yourself--in fact, you must modify your own
|
||||
autoload handler if you are using a version of PHP earlier than PHP 5.1.2
|
||||
(See "Autoload compatibility" above).
|
||||
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
4. Configuration
|
||||
|
||||
HTML Purifier is designed to run out-of-the-box, but occasionally HTML
|
||||
Purifier needs to be told what to do. If you answer no to any of these
|
||||
questions, read on; otherwise, you can skip to the next section (or, if you're
|
||||
into configuring things just for the heck of it, skip to 4.3).
|
||||
|
||||
* Am I using UTF-8?
|
||||
* Am I using XHTML 1.0 Transitional?
|
||||
|
||||
If you answered no to any of these questions, instantiate a configuration
|
||||
object and read on:
|
||||
|
||||
$config = HTMLPurifier_Config::createDefault();
|
||||
|
||||
|
||||
4.1. Setting a different character encoding
|
||||
|
||||
You really shouldn't use any other encoding except UTF-8, especially if you
|
||||
plan to support multilingual websites (read section three for more details).
|
||||
However, switching to UTF-8 is not always immediately feasible, so we can
|
||||
adapt.
|
||||
|
||||
HTML Purifier uses iconv to support other character encodings, as such,
|
||||
any encoding that iconv supports <http://www.gnu.org/software/libiconv/>
|
||||
HTML Purifier supports with this code:
|
||||
|
||||
$config->set('Core.Encoding', /* put your encoding here */);
|
||||
|
||||
An example usage for Latin-1 websites (the most common encoding for English
|
||||
websites):
|
||||
|
||||
$config->set('Core.Encoding', 'ISO-8859-1');
|
||||
|
||||
Note that HTML Purifier's support for non-Unicode encodings is crippled by the
|
||||
fact that any character not supported by that encoding will be silently
|
||||
dropped, EVEN if it is ampersand escaped. If you want to work around
|
||||
this, you are welcome to read docs/enduser-utf8.html for a fix,
|
||||
but please be cognizant of the issues the "solution" creates (for this
|
||||
reason, I do not include the solution in this document).
|
||||
|
||||
|
||||
4.2. Setting a different doctype
|
||||
|
||||
For those of you using HTML 4.01 Transitional, you can disable
|
||||
XHTML output like this:
|
||||
|
||||
$config->set('HTML.Doctype', 'HTML 4.01 Transitional');
|
||||
|
||||
Other supported doctypes include:
|
||||
|
||||
* HTML 4.01 Strict
|
||||
* HTML 4.01 Transitional
|
||||
* XHTML 1.0 Strict
|
||||
* XHTML 1.0 Transitional
|
||||
* XHTML 1.1
|
||||
|
||||
|
||||
4.3. Other settings
|
||||
|
||||
There are more configuration directives which can be read about
|
||||
here: <http://htmlpurifier.org/live/configdoc/plain.html> They're a bit boring,
|
||||
but they can help out for those of you who like to exert maximum control over
|
||||
your code. Some of the more interesting ones are configurable at the
|
||||
demo <http://htmlpurifier.org/demo.php> and are well worth looking into
|
||||
for your own system.
|
||||
|
||||
For example, you can fine tune allowed elements and attributes, convert
|
||||
relative URLs to absolute ones, and even autoparagraph input text! These
|
||||
are, respectively, %HTML.Allowed, %URI.MakeAbsolute and %URI.Base, and
|
||||
%AutoFormat.AutoParagraph. The %Namespace.Directive naming convention
|
||||
translates to:
|
||||
|
||||
$config->set('Namespace.Directive', $value);
|
||||
|
||||
E.g.
|
||||
|
||||
$config->set('HTML.Allowed', 'p,b,a[href],i');
|
||||
$config->set('URI.Base', 'http://www.example.com');
|
||||
$config->set('URI.MakeAbsolute', true);
|
||||
$config->set('AutoFormat.AutoParagraph', true);
|
||||
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
5. Caching
|
||||
|
||||
HTML Purifier generates some cache files (generally one or two) to speed up
|
||||
its execution. For maximum performance, make sure that
|
||||
library/HTMLPurifier/DefinitionCache/Serializer is writeable by the webserver.
|
||||
|
||||
If you are in the library/ folder of HTML Purifier, you can set the
|
||||
appropriate permissions using:
|
||||
|
||||
chmod -R 0755 HTMLPurifier/DefinitionCache/Serializer
|
||||
|
||||
If the above command doesn't work, you may need to assign write permissions
|
||||
to group:
|
||||
|
||||
chmod -R 0775 HTMLPurifier/DefinitionCache/Serializer
|
||||
|
||||
You can also chmod files via your FTP client; this option
|
||||
is usually accessible by right clicking the corresponding directory and
|
||||
then selecting "chmod" or "file permissions".
|
||||
|
||||
Starting with 2.0.1, HTML Purifier will generate friendly error messages
|
||||
that will tell you exactly what you have to chmod the directory to, if in doubt,
|
||||
follow its advice.
|
||||
|
||||
If you are unable or unwilling to give write permissions to the cache
|
||||
directory, you can either disable the cache (and suffer a performance
|
||||
hit):
|
||||
|
||||
$config->set('Core.DefinitionCache', null);
|
||||
|
||||
Or move the cache directory somewhere else (no trailing slash):
|
||||
|
||||
$config->set('Cache.SerializerPath', '/home/user/absolute/path');
|
||||
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
6. Using the code
|
||||
|
||||
The interface is mind-numbingly simple:
|
||||
|
||||
$purifier = new HTMLPurifier($config);
|
||||
$clean_html = $purifier->purify( $dirty_html );
|
||||
|
||||
That's it! For more examples, check out docs/examples/ (they aren't very
|
||||
different though). Also, docs/enduser-slow.html gives advice on what to
|
||||
do if HTML Purifier is slowing down your application.
|
||||
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
7. Quick install
|
||||
|
||||
First, make sure library/HTMLPurifier/DefinitionCache/Serializer is
|
||||
writable by the webserver (see Section 5: Caching above for details).
|
||||
If your website is in UTF-8 and XHTML Transitional, use this code:
|
||||
|
||||
<?php
|
||||
require_once '/path/to/htmlpurifier/library/HTMLPurifier.auto.php';
|
||||
|
||||
$config = HTMLPurifier_Config::createDefault();
|
||||
$purifier = new HTMLPurifier($config);
|
||||
$clean_html = $purifier->purify($dirty_html);
|
||||
?>
|
||||
|
||||
If your website is in a different encoding or doctype, use this code:
|
||||
|
||||
<?php
|
||||
require_once '/path/to/htmlpurifier/library/HTMLPurifier.auto.php';
|
||||
|
||||
$config = HTMLPurifier_Config::createDefault();
|
||||
$config->set('Core.Encoding', 'ISO-8859-1'); // replace with your encoding
|
||||
$config->set('HTML.Doctype', 'HTML 4.01 Transitional'); // replace with your doctype
|
||||
$purifier = new HTMLPurifier($config);
|
||||
|
||||
$clean_html = $purifier->purify($dirty_html);
|
||||
?>
|
||||
|
||||
vim: et sw=4 sts=4
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
|
||||
Installation
|
||||
Comment installer HTML Purifier
|
||||
|
||||
Attention : Ce document est encodé en UTF-8, si les lettres avec des accents
|
||||
ne s'affichent pas, prenez un meilleur éditeur de texte.
|
||||
|
||||
L'installation de HTML Purifier est très simple, parce qu'il n'a pas besoin
|
||||
de configuration. Pour les utilisateurs impatients, le code se trouve dans le
|
||||
pied de page, mais je recommande de lire le document.
|
||||
|
||||
1. Compatibilité
|
||||
|
||||
HTML Purifier fonctionne avec PHP 5. PHP 5.0.5 est la dernière version testée.
|
||||
Il ne dépend pas d'autres librairies.
|
||||
|
||||
Les extensions optionnelles sont iconv (généralement déjà installée) et tidy
|
||||
(répendue aussi). Si vous utilisez UTF-8 et que vous ne voulez pas l'indentation,
|
||||
vous pouvez utiliser HTML Purifier sans ces extensions.
|
||||
|
||||
|
||||
2. Inclure la librairie
|
||||
|
||||
Quand vous devez l'utilisez, incluez le :
|
||||
|
||||
require_once('/path/to/library/HTMLPurifier.auto.php');
|
||||
|
||||
Ne pas l'inclure si ce n'est pas nécessaire, car HTML Purifier est lourd.
|
||||
|
||||
HTML Purifier utilise "autoload". Si vous avez défini la fonction __autoload,
|
||||
vous devez ajouter cette fonction :
|
||||
|
||||
spl_autoload_register('__autoload')
|
||||
|
||||
Plus d'informations dans le document "INSTALL".
|
||||
|
||||
3. Installation rapide
|
||||
|
||||
Si votre site Web est en UTF-8 et XHTML Transitional, utilisez :
|
||||
|
||||
<?php
|
||||
require_once('/path/to/htmlpurifier/library/HTMLPurifier.auto.php');
|
||||
$purificateur = new HTMLPurifier();
|
||||
$html_propre = $purificateur->purify($html_a_purifier);
|
||||
?>
|
||||
|
||||
Sinon, utilisez :
|
||||
|
||||
<?php
|
||||
require_once('/path/to/html/purifier/library/HTMLPurifier.auto.load');
|
||||
$config = $HTMLPurifier_Config::createDefault();
|
||||
$config->set('Core', 'Encoding', 'ISO-8859-1'); //Remplacez par votre
|
||||
encodage
|
||||
$config->set('Core', 'XHTML', true); //Remplacer par false si HTML 4.01
|
||||
$purificateur = new HTMLPurifier($config);
|
||||
$html_propre = $purificateur->purify($html_a_purifier);
|
||||
?>
|
||||
|
||||
|
||||
vim: et sw=4 sts=4
|
||||
Vendored
+504
@@ -0,0 +1,504 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 2.1, February 1999
|
||||
|
||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
[This is the first released version of the Lesser GPL. It also counts
|
||||
as the successor of the GNU Library Public License, version 2, hence
|
||||
the version number 2.1.]
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
Licenses are intended to guarantee your freedom to share and change
|
||||
free software--to make sure the software is free for all its users.
|
||||
|
||||
This license, the Lesser General Public License, applies to some
|
||||
specially designated software packages--typically libraries--of the
|
||||
Free Software Foundation and other authors who decide to use it. You
|
||||
can use it too, but we suggest you first think carefully about whether
|
||||
this license or the ordinary General Public License is the better
|
||||
strategy to use in any particular case, based on the explanations below.
|
||||
|
||||
When we speak of free software, we are referring to freedom of use,
|
||||
not price. Our General Public Licenses are designed to make sure that
|
||||
you have the freedom to distribute copies of free software (and charge
|
||||
for this service if you wish); that you receive source code or can get
|
||||
it if you want it; that you can change the software and use pieces of
|
||||
it in new free programs; and that you are informed that you can do
|
||||
these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
distributors to deny you these rights or to ask you to surrender these
|
||||
rights. These restrictions translate to certain responsibilities for
|
||||
you if you distribute copies of the library or if you modify it.
|
||||
|
||||
For example, if you distribute copies of the library, whether gratis
|
||||
or for a fee, you must give the recipients all the rights that we gave
|
||||
you. You must make sure that they, too, receive or can get the source
|
||||
code. If you link other code with the library, you must provide
|
||||
complete object files to the recipients, so that they can relink them
|
||||
with the library after making changes to the library and recompiling
|
||||
it. And you must show them these terms so they know their rights.
|
||||
|
||||
We protect your rights with a two-step method: (1) we copyright the
|
||||
library, and (2) we offer you this license, which gives you legal
|
||||
permission to copy, distribute and/or modify the library.
|
||||
|
||||
To protect each distributor, we want to make it very clear that
|
||||
there is no warranty for the free library. Also, if the library is
|
||||
modified by someone else and passed on, the recipients should know
|
||||
that what they have is not the original version, so that the original
|
||||
author's reputation will not be affected by problems that might be
|
||||
introduced by others.
|
||||
|
||||
Finally, software patents pose a constant threat to the existence of
|
||||
any free program. We wish to make sure that a company cannot
|
||||
effectively restrict the users of a free program by obtaining a
|
||||
restrictive license from a patent holder. Therefore, we insist that
|
||||
any patent license obtained for a version of the library must be
|
||||
consistent with the full freedom of use specified in this license.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the
|
||||
ordinary GNU General Public License. This license, the GNU Lesser
|
||||
General Public License, applies to certain designated libraries, and
|
||||
is quite different from the ordinary General Public License. We use
|
||||
this license for certain libraries in order to permit linking those
|
||||
libraries into non-free programs.
|
||||
|
||||
When a program is linked with a library, whether statically or using
|
||||
a shared library, the combination of the two is legally speaking a
|
||||
combined work, a derivative of the original library. The ordinary
|
||||
General Public License therefore permits such linking only if the
|
||||
entire combination fits its criteria of freedom. The Lesser General
|
||||
Public License permits more lax criteria for linking other code with
|
||||
the library.
|
||||
|
||||
We call this license the "Lesser" General Public License because it
|
||||
does Less to protect the user's freedom than the ordinary General
|
||||
Public License. It also provides other free software developers Less
|
||||
of an advantage over competing non-free programs. These disadvantages
|
||||
are the reason we use the ordinary General Public License for many
|
||||
libraries. However, the Lesser license provides advantages in certain
|
||||
special circumstances.
|
||||
|
||||
For example, on rare occasions, there may be a special need to
|
||||
encourage the widest possible use of a certain library, so that it becomes
|
||||
a de-facto standard. To achieve this, non-free programs must be
|
||||
allowed to use the library. A more frequent case is that a free
|
||||
library does the same job as widely used non-free libraries. In this
|
||||
case, there is little to gain by limiting the free library to free
|
||||
software only, so we use the Lesser General Public License.
|
||||
|
||||
In other cases, permission to use a particular library in non-free
|
||||
programs enables a greater number of people to use a large body of
|
||||
free software. For example, permission to use the GNU C Library in
|
||||
non-free programs enables many more people to use the whole GNU
|
||||
operating system, as well as its variant, the GNU/Linux operating
|
||||
system.
|
||||
|
||||
Although the Lesser General Public License is Less protective of the
|
||||
users' freedom, it does ensure that the user of a program that is
|
||||
linked with the Library has the freedom and the wherewithal to run
|
||||
that program using a modified version of the Library.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow. Pay close attention to the difference between a
|
||||
"work based on the library" and a "work that uses the library". The
|
||||
former contains code derived from the library, whereas the latter must
|
||||
be combined with the library in order to run.
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library or other
|
||||
program which contains a notice placed by the copyright holder or
|
||||
other authorized party saying it may be distributed under the terms of
|
||||
this Lesser General Public License (also called "this License").
|
||||
Each licensee is addressed as "you".
|
||||
|
||||
A "library" means a collection of software functions and/or data
|
||||
prepared so as to be conveniently linked with application programs
|
||||
(which use some of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work
|
||||
which has been distributed under these terms. A "work based on the
|
||||
Library" means either the Library or any derivative work under
|
||||
copyright law: that is to say, a work containing the Library or a
|
||||
portion of it, either verbatim or with modifications and/or translated
|
||||
straightforwardly into another language. (Hereinafter, translation is
|
||||
included without limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for
|
||||
making modifications to it. For a library, complete source code means
|
||||
all the source code for all modules it contains, plus any associated
|
||||
interface definition files, plus the scripts used to control compilation
|
||||
and installation of the library.
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running a program using the Library is not restricted, and output from
|
||||
such a program is covered only if its contents constitute a work based
|
||||
on the Library (independent of the use of the Library in a tool for
|
||||
writing it). Whether that is true depends on what the Library does
|
||||
and what the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's
|
||||
complete source code as you receive it, in any medium, provided that
|
||||
you conspicuously and appropriately publish on each copy an
|
||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||
all the notices that refer to this License and to the absence of any
|
||||
warranty; and distribute a copy of this License along with the
|
||||
Library.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy,
|
||||
and you may at your option offer warranty protection in exchange for a
|
||||
fee.
|
||||
|
||||
2. You may modify your copy or copies of the Library or any portion
|
||||
of it, thus forming a work based on the Library, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no
|
||||
charge to all third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a
|
||||
table of data to be supplied by an application program that uses
|
||||
the facility, other than as an argument passed when the facility
|
||||
is invoked, then you must make a good faith effort to ensure that,
|
||||
in the event an application does not supply such function or
|
||||
table, the facility still operates, and performs whatever part of
|
||||
its purpose remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has
|
||||
a purpose that is entirely well-defined independent of the
|
||||
application. Therefore, Subsection 2d requires that any
|
||||
application-supplied function or table used by this function must
|
||||
be optional: if the application does not supply it, the square
|
||||
root function must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Library,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Library, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library
|
||||
with the Library (or with a work based on the Library) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||
License instead of this License to a given copy of the Library. To do
|
||||
this, you must alter all the notices that refer to this License, so
|
||||
that they refer to the ordinary GNU General Public License, version 2,
|
||||
instead of to this License. (If a newer version than version 2 of the
|
||||
ordinary GNU General Public License has appeared, then you can specify
|
||||
that version instead if you wish.) Do not make any other change in
|
||||
these notices.
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for
|
||||
that copy, so the ordinary GNU General Public License applies to all
|
||||
subsequent copies and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of
|
||||
the Library into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or
|
||||
derivative of it, under Section 2) in object code or executable form
|
||||
under the terms of Sections 1 and 2 above provided that you accompany
|
||||
it with the complete corresponding machine-readable source code, which
|
||||
must be distributed under the terms of Sections 1 and 2 above on a
|
||||
medium customarily used for software interchange.
|
||||
|
||||
If distribution of object code is made by offering access to copy
|
||||
from a designated place, then offering equivalent access to copy the
|
||||
source code from the same place satisfies the requirement to
|
||||
distribute the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the
|
||||
Library, but is designed to work with the Library by being compiled or
|
||||
linked with it, is called a "work that uses the Library". Such a
|
||||
work, in isolation, is not a derivative work of the Library, and
|
||||
therefore falls outside the scope of this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library
|
||||
creates an executable that is a derivative of the Library (because it
|
||||
contains portions of the Library), rather than a "work that uses the
|
||||
library". The executable is therefore covered by this License.
|
||||
Section 6 states terms for distribution of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file
|
||||
that is part of the Library, the object code for the work may be a
|
||||
derivative work of the Library even though the source code is not.
|
||||
Whether this is true is especially significant if the work can be
|
||||
linked without the Library, or if the work is itself a library. The
|
||||
threshold for this to be true is not precisely defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data
|
||||
structure layouts and accessors, and small macros and small inline
|
||||
functions (ten lines or less in length), then the use of the object
|
||||
file is unrestricted, regardless of whether it is legally a derivative
|
||||
work. (Executables containing this object code plus portions of the
|
||||
Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may
|
||||
distribute the object code for the work under the terms of Section 6.
|
||||
Any executables containing that work also fall under Section 6,
|
||||
whether or not they are linked directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also combine or
|
||||
link a "work that uses the Library" with the Library to produce a
|
||||
work containing portions of the Library, and distribute that work
|
||||
under terms of your choice, provided that the terms permit
|
||||
modification of the work for the customer's own use and reverse
|
||||
engineering for debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the
|
||||
Library is used in it and that the Library and its use are covered by
|
||||
this License. You must supply a copy of this License. If the work
|
||||
during execution displays copyright notices, you must include the
|
||||
copyright notice for the Library among them, as well as a reference
|
||||
directing the user to the copy of this License. Also, you must do one
|
||||
of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding
|
||||
machine-readable source code for the Library including whatever
|
||||
changes were used in the work (which must be distributed under
|
||||
Sections 1 and 2 above); and, if the work is an executable linked
|
||||
with the Library, with the complete machine-readable "work that
|
||||
uses the Library", as object code and/or source code, so that the
|
||||
user can modify the Library and then relink to produce a modified
|
||||
executable containing the modified Library. (It is understood
|
||||
that the user who changes the contents of definitions files in the
|
||||
Library will not necessarily be able to recompile the application
|
||||
to use the modified definitions.)
|
||||
|
||||
b) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (1) uses at run time a
|
||||
copy of the library already present on the user's computer system,
|
||||
rather than copying library functions into the executable, and (2)
|
||||
will operate properly with a modified version of the library, if
|
||||
the user installs one, as long as the modified version is
|
||||
interface-compatible with the version that the work was made with.
|
||||
|
||||
c) Accompany the work with a written offer, valid for at
|
||||
least three years, to give the same user the materials
|
||||
specified in Subsection 6a, above, for a charge no more
|
||||
than the cost of performing this distribution.
|
||||
|
||||
d) If distribution of the work is made by offering access to copy
|
||||
from a designated place, offer equivalent access to copy the above
|
||||
specified materials from the same place.
|
||||
|
||||
e) Verify that the user has already received a copy of these
|
||||
materials or that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the
|
||||
Library" must include any data and utility programs needed for
|
||||
reproducing the executable from it. However, as a special exception,
|
||||
the materials to be distributed need not include anything that is
|
||||
normally distributed (in either source or binary form) with the major
|
||||
components (compiler, kernel, and so on) of the operating system on
|
||||
which the executable runs, unless that component itself accompanies
|
||||
the executable.
|
||||
|
||||
It may happen that this requirement contradicts the license
|
||||
restrictions of other proprietary libraries that do not normally
|
||||
accompany the operating system. Such a contradiction means you cannot
|
||||
use both them and the Library together in an executable that you
|
||||
distribute.
|
||||
|
||||
7. You may place library facilities that are a work based on the
|
||||
Library side-by-side in a single library together with other library
|
||||
facilities not covered by this License, and distribute such a combined
|
||||
library, provided that the separate distribution of the work based on
|
||||
the Library and of the other library facilities is otherwise
|
||||
permitted, and provided that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work
|
||||
based on the Library, uncombined with any other library
|
||||
facilities. This must be distributed under the terms of the
|
||||
Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact
|
||||
that part of it is a work based on the Library, and explaining
|
||||
where to find the accompanying uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute
|
||||
the Library except as expressly provided under this License. Any
|
||||
attempt otherwise to copy, modify, sublicense, link with, or
|
||||
distribute the Library is void, and will automatically terminate your
|
||||
rights under this License. However, parties who have received copies,
|
||||
or rights, from you under this License will not have their licenses
|
||||
terminated so long as such parties remain in full compliance.
|
||||
|
||||
9. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Library or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Library (or any work based on the
|
||||
Library), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Library or works based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the
|
||||
Library), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute, link with or modify the Library
|
||||
subject to these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties with
|
||||
this License.
|
||||
|
||||
11. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Library at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Library by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Library.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply,
|
||||
and the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Library under this License may add
|
||||
an explicit geographical distribution limitation excluding those countries,
|
||||
so that distribution is permitted only in or among countries not thus
|
||||
excluded. In such case, this License incorporates the limitation as if
|
||||
written in the body of this License.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new
|
||||
versions of the Lesser General Public License from time to time.
|
||||
Such new versions will be similar in spirit to the present version,
|
||||
but may differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Library
|
||||
specifies a version number of this License which applies to it and
|
||||
"any later version", you have the option of following the terms and
|
||||
conditions either of that version or of any later version published by
|
||||
the Free Software Foundation. If the Library does not specify a
|
||||
license version number, you may choose any version ever published by
|
||||
the Free Software Foundation.
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free
|
||||
programs whose distribution conditions are incompatible with these,
|
||||
write to the author to ask for permission. For software which is
|
||||
copyrighted by the Free Software Foundation, write to the Free
|
||||
Software Foundation; we sometimes make exceptions for this. Our
|
||||
decision will be guided by the two goals of preserving the free status
|
||||
of all derivatives of our free software and of promoting the sharing
|
||||
and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest
|
||||
possible use to the public, we recommend making it free software that
|
||||
everyone can redistribute and change. You can do so by permitting
|
||||
redistribution under these terms (or, alternatively, under the terms of the
|
||||
ordinary General Public License).
|
||||
|
||||
To apply these terms, attach the following notices to the library. It is
|
||||
safest to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least the
|
||||
"copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the library's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1990
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
|
||||
vim: et sw=4 sts=4
|
||||
Vendored
+1190
@@ -0,0 +1,1190 @@
|
||||
NEWS ( CHANGELOG and HISTORY ) HTMLPurifier
|
||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
|
||||
= KEY ====================
|
||||
# Breaks back-compat
|
||||
! Feature
|
||||
- Bugfix
|
||||
+ Sub-comment
|
||||
. Internal change
|
||||
==========================
|
||||
|
||||
4.10.0, released 2018-02-22
|
||||
# PHP 5.3 is no longer officially supported by HTML Purifier
|
||||
(we did not specifically break support, but we are no longer
|
||||
testing on PHP 5.3)
|
||||
! Relative CSS length units are now supported
|
||||
- A few PHP 7.2 compatibility fixes, thanks John Flatness
|
||||
<john@zerocrates.org>
|
||||
- Improve portability with old versions of libxml which don't
|
||||
support accessing the data of a node
|
||||
- IDNA2008 is now used for converting domains to ASCII, fixing
|
||||
some rather strange bugs with international domains
|
||||
- Fix race condition resulting in E_WARNING when creating
|
||||
directories with Serializer
|
||||
|
||||
4.9.3, released 2017-06-02
|
||||
- Workaround PHP 7.1 infinite loop when opcode cache is enabled.
|
||||
Thanks @Xiphin (#134, #135)
|
||||
- Don't use autoloader when testing for DOMDocument. Hypothetically,
|
||||
this could cause your install to start using DirectLex if you had
|
||||
previously been monkeypatching in a custom, autoloaded implementation
|
||||
of DOMDocument. Don't do that. Thanks @Izumi-kun (#130)
|
||||
|
||||
4.9.2, released 2017-03-12
|
||||
- Fixes PHP 5.3 compatibility
|
||||
- Fix breakage when decoding decimal entities. Thanks @rybakit (#129)
|
||||
|
||||
4.9.1, released 2017-03-08
|
||||
! %URI.DefaultScheme can now be set to null, in which case
|
||||
all relative paths are removed.
|
||||
! New CSS properties: min-width, max-width, min-height, max-height (#94)
|
||||
! Transparency (rgba) and hsl/hsla supported where color CSS is present.
|
||||
Thanks @fxbt for contributing the patch. (#118)
|
||||
- When idn_to_ascii is defined, we might accept malformed
|
||||
hostnames. Apply validation to the result in such cases.
|
||||
- Close directory when done in Serializer DefinitionCache (#100)
|
||||
- Deleted some asserts to avoid linters from choking (#97)
|
||||
- Rework Serializer cache behavior to avoid chmod'ing if possible (#32)
|
||||
- Embedded semicolons in strings in CSS are now handled correctly!
|
||||
- We accidentally dropped certain Unicode characters if there was
|
||||
one or more invalid characters. This has been fixed, thanks
|
||||
to mpyw <ryosuke_i_628@yahoo.co.jp>
|
||||
- Fix for "Don't truncate upon encountering </div> when using DOMLex"
|
||||
caused a regression with HTML 4.01 Strict parsing with libxml 2.9.1
|
||||
(and maybe later versions, but known OK with libxml 2.9.4). The
|
||||
fix is to go about handling truncation a bit more cleverly so that
|
||||
we can wrap with divs (sidestepping the bug) but slurping out the
|
||||
rest of the text in case it ran off the end. (#78)
|
||||
- Fix PREG_BACKTRACK_LIMIT_ERROR in HTMLPurifier_Filter_ExtractStyle.
|
||||
Thanks @breathbath for contributing the report and fix (#120)
|
||||
- Fix entity decoding algorithm to be more conservative about
|
||||
decoding entities that are missing trailing semicolon.
|
||||
To get old behavior, set %Core.LegacyEntityDecoder to true.
|
||||
(#119)
|
||||
- Workaround libxml bug when HTML tags are embedded inside
|
||||
script tags. To disable workaround set %Core.AggressivelyRemoveScript
|
||||
to false. (#83)
|
||||
# By default, when a link has a target attribute associated
|
||||
with it, we now also add rel="noopener" in order to
|
||||
prevent the new window from being able to overwrite
|
||||
the original frame. To disable this protection,
|
||||
set %HTML.TargetNoopener to FALSE.
|
||||
|
||||
4.9.0 was cut on Git but never properly released; when we did the
|
||||
real release we decided to skip this version number.
|
||||
|
||||
4.8.0, released 2016-07-16
|
||||
# By default, when a link has a target attribute associated
|
||||
with it, we now also add rel="noreferrer" in order to
|
||||
prevent the new window from being able to overwrite
|
||||
the original frame. To disable this protection,
|
||||
set %HTML.TargetNoreferrer to FALSE.
|
||||
! Full PHP 7 compatibility, the test suite is ALL GO.
|
||||
! %CSS.AllowDuplicates permits duplicate CSS properties.
|
||||
! Support for 'tel' URIs.
|
||||
! Partial support for 'border-radius' properties when %CSS.AllowProprietary is true.
|
||||
The slash syntax, i.e., 'border-radius: 2em 1em 4em / 0.5em 3em' is not
|
||||
yet supported.
|
||||
! %Attr.ID.HTML5 turns on HTML5-style ID handling.
|
||||
- alt truncation could result in malformed UTF-8 sequence. Don't
|
||||
truncate. Thanks Brandon Farber for reporting.
|
||||
- Linkify regex is smarter, based off of Gruber's regex.
|
||||
- IDNA supported natively on PHP 5.3 and later.
|
||||
- Non all-numeric top-level names (e.g., foo.1f, 1f) are now
|
||||
allowed.
|
||||
- Minor bounds error fix to squash a PHP 7 notice.
|
||||
- Support non-/tmp temporary directories for data:// validation
|
||||
- Give a better error message when a user attempts to allow
|
||||
ul/ol without allowing li.
|
||||
- On some versions of PHP, the Serializer DefinitionCache could
|
||||
infinite loop when the directory exists but is not listable. (#49)
|
||||
- Don't match for <body> inside comments with
|
||||
%Core.ConvertDocumentToFragment. (#67)
|
||||
- SafeObject is now less case sensitive. (#57)
|
||||
- AutoFormat.RemoveEmpty.Predicate now correctly renders in
|
||||
web form. (#85)
|
||||
|
||||
4.7.0, released 2015-08-04
|
||||
# opacity is now considered a "tricky" CSS property rather than a
|
||||
proprietary one.
|
||||
! %AutoFormat.RemoveEmpty.Predicate for specifying exactly when
|
||||
an element should be considered "empty" (maybe preserve if it
|
||||
has attributes), and modify iframe support so that the iframe
|
||||
is removed if it is missing a src attribute. Thanks meeva for
|
||||
reporting.
|
||||
- Don't truncate upon encountering </div> when using DOMLex. Thanks
|
||||
Myrto Christina for finally convincing me to fix this.
|
||||
- Update YouTube filter for new code.
|
||||
- Fix parsing of rgb() values with spaces in them for 'border'
|
||||
attribute.
|
||||
- Don't remove foo="" attributes if foo is a boolean attribute. Thanks
|
||||
valME for reporting.
|
||||
|
||||
4.6.0, released 2013-11-30
|
||||
# Secure URI munge hashing algorithm has changed to hash_hmac("sha256", $url, $secret).
|
||||
Please update any verification scripts you may have.
|
||||
# URI parsing algorithm was made more strict, so only prefixes which
|
||||
looks like schemes will actually be schemes. Thanks
|
||||
Michael Gusev <mgusev@sugarcrm.com> for fixing.
|
||||
# %Core.EscapeInvalidChildren is no longer supported, and no longer does
|
||||
anything.
|
||||
! New directive %Core.AllowHostnameUnderscore which allows underscores
|
||||
in hostnames.
|
||||
- Eliminate quadratic behavior in DOMLex by using a proper queue.
|
||||
Thanks Ole Laursen for noticing this.
|
||||
- Rewritten MakeWellFormed/FixNesting implementation eliminates quadratic
|
||||
behavior in the rest of the purificaiton pipeline. Thanks Chedburn
|
||||
Networks for sponsoring this work.
|
||||
- Made Linkify URL parser a bit less permissive, so that non-breaking
|
||||
spaces and commas are not included as part of URL. Thanks nAS for fixing.
|
||||
- Fix some bad interactions with %HTML.Allowed and injectors. Thanks
|
||||
David Hirtz for reporting.
|
||||
- Fix infinite loop in DirectLex. Thanks Ashar Javed (@soaj1664ashar)
|
||||
for reporting.
|
||||
|
||||
4.5.0, released 2013-02-17
|
||||
# Fix bug where stacked attribute transforms clobber each other;
|
||||
this also means it's no longer possible to override attribute
|
||||
transforms in later modules. No internal code was using this
|
||||
but this may break some clients.
|
||||
# We now use SHA-1 to identify cached definitions, instead of MD5.
|
||||
! Support display:inline-block
|
||||
! Support for more white-space CSS values.
|
||||
! Permit underscores in font families
|
||||
! Support for page-break-* CSS3 properties when proprietary properties
|
||||
are enabled.
|
||||
! New directive %Core.DisableExcludes; can be set to 'true' to turn off
|
||||
SGML excludes checking. If HTML Purifier is removing too much text
|
||||
and you don't care about full standards compliance, try setting this to
|
||||
'true'.
|
||||
- Use prepend for SPL autoloading on PHP 5.3 and later.
|
||||
- Fix bug with nofollow transform when pre-existing rel exists.
|
||||
- Fix bug where background:url() always gets lower-cased
|
||||
(but not background-image:url())
|
||||
- Fix bug with non lower-case color names in HTML
|
||||
- Fix bug where data URI validation doesn't remove temporary files.
|
||||
Thanks Javier Marín Ros <javiermarinros@gmail.com> for reporting.
|
||||
- Don't remove certain empty tags on RemoveEmpty.
|
||||
|
||||
4.4.0, released 2012-01-18
|
||||
# Removed PEARSax3 handler.
|
||||
# URI.Munge now munges URIs inside the same host that go from https
|
||||
to http. Reported by Neike Taika-Tessaro.
|
||||
# Core.EscapeNonASCIICharacters now always transforms entities to
|
||||
entities, even if target encoding is UTF-8.
|
||||
# Tighten up selector validation in ExtractStyleBlocks.
|
||||
Non-syntactically valid selectors are now rejected, along with
|
||||
some of the more obscure ones such as attribute selectors, the
|
||||
:lang pseudoselector, and anything not in CSS2.1. Furthermore,
|
||||
ID and class selectors now work properly with the relevant
|
||||
configuration attributes. Also, mute errors when parsing CSS
|
||||
with CSS Tidy. Reported by Mario Heiderich and Norman Hippert.
|
||||
! Added support for 'scope' attribute on tables.
|
||||
! Added %HTML.TargetBlank, which adds target="blank" to all outgoing links.
|
||||
! Properly handle sub-lists directly nested inside of lists in
|
||||
a standards compliant way, by moving them into the preceding <li>
|
||||
! Added %HTML.AllowedComments and %HTML.AllowedCommentsRegexp for
|
||||
limited allowed comments in untrusted situations.
|
||||
! Implement iframes, and allow them to be used in untrusted mode with
|
||||
%HTML.SafeIframe and %URI.SafeIframeRegexp. Thanks Bradley M. Froehle
|
||||
<brad.froehle@gmail.com> for submitting an initial version of the patch.
|
||||
! The Forms module now works properly for transitional doctypes.
|
||||
! Added support for internationalized domain names. You need the PEAR
|
||||
Net_IDNA2 module to be in your path; if it is installed, ensure the
|
||||
class can be loaded and then set %Core.EnableIDNA to true.
|
||||
- Color keywords are now case insensitive. Thanks Yzmir Ramirez
|
||||
<yramirez-htmlpurifier@adicio.com> for reporting.
|
||||
- Explicitly initialize anonModule variable to null.
|
||||
- Do not duplicate nofollow if already present. Thanks 178
|
||||
for reporting.
|
||||
- Do not add nofollow if hostname matches our current host. Thanks 178
|
||||
for reporting, and Neike Taika-Tessaro for helping diagnose.
|
||||
- Do not unset parser variable; this fixes intermittent serialization
|
||||
problems. Thanks Neike Taika-Tessaro for reporting, bill
|
||||
<10010tiger@gmail.com> for diagnosing.
|
||||
- Fix iconv truncation bug, where non-UTF-8 target encodings see
|
||||
output truncated after around 8000 characters. Thanks Jörg Ludwig
|
||||
<joerg.ludwig@iserv.eu> for reporting.
|
||||
- Fix broken table content model for XHTML1.1 (and also earlier
|
||||
versions, although the W3C validator doesn't catch those violations).
|
||||
Thanks GlitchMr <glitch.mr@gmail.com> for reporting.
|
||||
|
||||
4.3.0, released 2011-03-27
|
||||
# Fixed broken caching of customized raw definitions, but requires an
|
||||
API change. The old API still works but will emit a warning,
|
||||
see http://htmlpurifier.org/docs/enduser-customize.html#optimized
|
||||
for how to upgrade your code.
|
||||
# Protect against Internet Explorer innerHTML behavior by specially
|
||||
treating attributes with backticks but no angled brackets, quotes or
|
||||
spaces. This constitutes a slight semantic change, which can be
|
||||
reverted using %Output.FixInnerHTML. Reported by Neike Taika-Tessaro
|
||||
and Mario Heiderich.
|
||||
# Protect against cssText/innerHTML by restricting allowed characters
|
||||
used in fonts further than mandated by the specification and encoding
|
||||
some extra special characters in URLs. Reported by Neike
|
||||
Taika-Tessaro and Mario Heiderich.
|
||||
! Added %HTML.Nofollow to add rel="nofollow" to external links.
|
||||
! More types of SPL autoloaders allowed on later versions of PHP.
|
||||
! Implementations for position, top, left, right, bottom, z-index
|
||||
when %CSS.Trusted is on.
|
||||
! Add %Cache.SerializerPermissions option for custom serializer
|
||||
directory/file permissions
|
||||
! Fix longstanding bug in Flash support for non-IE browsers, and
|
||||
allow more wmode attributes.
|
||||
! Add %CSS.AllowedFonts to restrict permissible font names.
|
||||
- Switch to an iterative traversal of the DOM, which prevents us
|
||||
from running out of stack space for deeply nested documents.
|
||||
Thanks Maxim Krizhanovsky for contributing a patch.
|
||||
- Make removal of conditional IE comments ungreedy; thanks Bernd
|
||||
for reporting.
|
||||
- Escape CDATA before removing Internet Explorer comments.
|
||||
- Fix removal of id attributes under certain conditions by ensuring
|
||||
armor attributes are preserved when recreating tags.
|
||||
- Check if schema.ser was corrupted.
|
||||
- Check if zend.ze1_compatibility_mode is on, and error out if it is.
|
||||
This safety check is only done for HTMLPurifier.auto.php; if you
|
||||
are using standalone or the specialized includes files, you're
|
||||
expected to know what you're doing.
|
||||
- Stop repeatedly writing the cache file after I'm done customizing a
|
||||
raw definition. Reported by ajh.
|
||||
- Switch to using require_once in the Bootstrap to work around bad
|
||||
interaction with Zend Debugger and APC. Reported by Antonio Parraga.
|
||||
- Fix URI handling when hostname is missing but scheme is present.
|
||||
Reported by Neike Taika-Tessaro.
|
||||
- Fix missing numeric entities on DirectLex; thanks Neike Taika-Tessaro
|
||||
for reporting.
|
||||
- Fix harmless notice from indexing into empty string. Thanks Matthijs
|
||||
Kooijman <matthijs@stdin.nl> for reporting.
|
||||
- Don't autoclose no parent elements are able to support the element
|
||||
that triggered the autoclose. In particular fixes strange behavior
|
||||
of stray <li> tags. Thanks pkuliga@gmail.com for reporting and
|
||||
Neike Taika-Tessaro <pinkgothic@gmail.com> for debugging assistance.
|
||||
|
||||
4.2.0, released 2010-09-15
|
||||
! Added %Core.RemoveProcessingInstructions, which lets you remove
|
||||
<? ... ?> statements.
|
||||
! Added %URI.DisableResources functionality; the directive originally
|
||||
did nothing. Thanks David Rothstein for reporting.
|
||||
! Add documentation about configuration directive types.
|
||||
! Add %CSS.ForbiddenProperties configuration directive.
|
||||
! Add %HTML.FlashAllowFullScreen to permit embedded Flash objects
|
||||
to utilize full-screen mode.
|
||||
! Add optional support for the <code>file</code> URI scheme, enable
|
||||
by explicitly setting %URI.AllowedSchemes.
|
||||
! Add %Core.NormalizeNewlines options to allow turning off newline
|
||||
normalization.
|
||||
- Fix improper handling of Internet Explorer conditional comments
|
||||
by parser. Thanks zmonteca for reporting.
|
||||
- Fix missing attributes bug when running on Mac Snow Leopard and APC.
|
||||
Thanks sidepodcast for the fix.
|
||||
- Warn if an element is allowed, but an attribute it requires is
|
||||
not allowed.
|
||||
|
||||
4.1.1, released 2010-05-31
|
||||
- Fix undefined index warnings in maintenance scripts.
|
||||
- Fix bug in DirectLex for parsing elements with a single attribute
|
||||
with entities.
|
||||
- Rewrite CSS output logic for font-family and url(). Thanks Mario
|
||||
Heiderich <mario.heiderich@googlemail.com> for reporting and Takeshi
|
||||
Terada <t-terada@violet.plala.or.jp> for suggesting the fix.
|
||||
- Emit an error for CollectErrors if a body is extracted
|
||||
- Fix bug where in background-position for center keyword handling.
|
||||
- Fix infinite loop when a wrapper element is inserted in a context
|
||||
where it's not allowed. Thanks Lars <lars@renoz.dk> for reporting.
|
||||
- Remove +x bit and shebang from index.php; only supported mode is to
|
||||
explicitly call it with php.
|
||||
- Make test script less chatty when log_errors is on.
|
||||
|
||||
4.1.0, released 2010-04-26
|
||||
! Support proprietary height attribute on table element
|
||||
! Support YouTube slideshows that contain /cp/ in their URL.
|
||||
! Support for data: URI scheme; not enabled by default, add it using
|
||||
%URI.AllowedSchemes
|
||||
! Support flashvars when using %HTML.SafeObject and %HTML.SafeEmbed.
|
||||
! Support for Internet Explorer compatibility with %HTML.SafeObject
|
||||
using %Output.FlashCompat.
|
||||
! Handle <ol><ol> properly, by inserting the necessary <li> tag.
|
||||
- Always quote the insides of url(...) in CSS.
|
||||
|
||||
4.0.0, released 2009-07-07
|
||||
# APIs for ConfigSchema subsystem have substantially changed. See
|
||||
docs/dev-config-bcbreaks.txt for details; in essence, anything that
|
||||
had both namespace and directive now have a single unified key.
|
||||
# Some configuration directives were renamed, specifically:
|
||||
%AutoFormatParam.PurifierLinkifyDocURL -> %AutoFormat.PurifierLinkify.DocURL
|
||||
%FilterParam.ExtractStyleBlocksEscaping -> %Filter.ExtractStyleBlocks.Escaping
|
||||
%FilterParam.ExtractStyleBlocksScope -> %Filter.ExtractStyleBlocks.Scope
|
||||
%FilterParam.ExtractStyleBlocksTidyImpl -> %Filter.ExtractStyleBlocks.TidyImpl
|
||||
As usual, the old directive names will still work, but will throw E_NOTICE
|
||||
errors.
|
||||
# The allowed values for class have been relaxed to allow all of CDATA for
|
||||
doctypes that are not XHTML 1.1 or XHTML 2.0. For old behavior, set
|
||||
%Attr.ClassUseCDATA to false.
|
||||
# Instead of appending the content model to an old content model, a blank
|
||||
element will replace the old content model. You can use #SUPER to get
|
||||
the old content model.
|
||||
! More robust support for name="" and id=""
|
||||
! HTMLPurifier_Config::inherit($config) allows you to inherit one
|
||||
configuration, and have changes to that configuration be propagated
|
||||
to all of its children.
|
||||
! Implement %HTML.Attr.Name.UseCDATA, which relaxes validation rules on
|
||||
the name attribute when set. Use with care. Thanks Ian Cook for
|
||||
sponsoring.
|
||||
! Implement %AutoFormat.RemoveEmpty.RemoveNbsp, which removes empty
|
||||
tags that contain non-breaking spaces as well other whitespace. You
|
||||
can also modify which tags should have maintained with
|
||||
%AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions.
|
||||
! Implement %Attr.AllowedClasses, which allows administrators to restrict
|
||||
classes users can use to a specified finite set of classes, and
|
||||
%Attr.ForbiddenClasses, which is the logical inverse.
|
||||
! You can now maintain your own configuration schema directories by
|
||||
creating a config-schema.php file or passing an extra argument. Check
|
||||
docs/dev-config-schema.html for more details.
|
||||
! Added HTMLPurifier_Config->serialize() method, which lets you save away
|
||||
your configuration in a compact serial file, which you can unserialize
|
||||
and use directly without having to go through the overhead of setup.
|
||||
- Fix bug where URIDefinition would not get cleared if it's directives got
|
||||
changed.
|
||||
- Fix fatal error in HTMLPurifier_Encoder on certain platforms (probably NetBSD 5.0)
|
||||
- Fix bug in Linkify autoformatter involving <a><span>http://foo</span></a>
|
||||
- Make %URI.Munge not apply to links that have the same host as your host.
|
||||
- Prevent stray </body> tag from truncating output, if a second </body>
|
||||
is present.
|
||||
. Created script maintenance/rename-config.php for renaming a configuration
|
||||
directive while maintaining its alias. This script does not change source code.
|
||||
. Implement namespace locking for definition construction, to prevent
|
||||
bugs where a directive is used for definition construction but is not
|
||||
used to construct the cache hash.
|
||||
|
||||
3.3.0, released 2009-02-16
|
||||
! Implement CSS property 'overflow' when %CSS.AllowTricky is true.
|
||||
! Implement generic property list classess
|
||||
- Fix bug with testEncodingSupportsASCII() algorithm when iconv() implementation
|
||||
does not do the "right thing" with characters not supported in the output
|
||||
set.
|
||||
- Spellcheck UTF-8: The Secret To Character Encoding
|
||||
- Fix improper removal of the contents of elements with only whitespace. Thanks
|
||||
Eric Wald for reporting.
|
||||
- Fix broken test suite in versions of PHP without spl_autoload_register()
|
||||
- Fix degenerate case with YouTube filter involving double hyphens.
|
||||
Thanks Pierre Attar for reporting.
|
||||
- Fix YouTube rendering problem on certain versions of Firefox.
|
||||
- Fix CSSDefinition Printer problems with decorators
|
||||
- Add text parameter to unit tests, forces text output
|
||||
. Add verbose mode to command line test runner, use (--verbose)
|
||||
. Turn on unit tests for UnitConverter
|
||||
. Fix missing version number in configuration %Attr.DefaultImageAlt (added 3.2.0)
|
||||
. Fix newline errors that caused spurious failures when CRLF HTML Purifier was
|
||||
tested on Linux.
|
||||
. Removed trailing whitespace from all text files, see
|
||||
remote-trailing-whitespace.php maintenance script.
|
||||
. Convert configuration to use property list backend.
|
||||
|
||||
3.2.0, released 2008-10-31
|
||||
# Using %Core.CollectErrors forces line number/column tracking on, whereas
|
||||
previously you could theoretically turn it off.
|
||||
# HTMLPurifier_Injector->notifyEnd() is formally deprecated. Please
|
||||
use handleEnd() instead.
|
||||
! %Output.AttrSort for when you need your attributes in alphabetical order to
|
||||
deal with a bug in FCKEditor. Requested by frank farmer.
|
||||
! Enable HTML comments when %HTML.Trusted is on. Requested by Waldo Jaquith.
|
||||
! Proper support for name attribute. It is now allowed and equivalent to the id
|
||||
attribute in a and img tags, and is only converted to id when %HTML.TidyLevel
|
||||
is heavy (for all doctypes).
|
||||
! %AutoFormat.RemoveEmpty to remove some empty tags from documents. Please don't
|
||||
use on hand-written HTML.
|
||||
! Add error-cases for unsupported elements in MakeWellFormed. This enables
|
||||
the strategy to be used, standalone, on untrusted input.
|
||||
! %Core.AggressivelyFixLt is on by default. This causes more sensible
|
||||
processing of left angled brackets in smileys and other whatnot.
|
||||
! Test scripts now have a 'type' parameter, which lets you say 'htmlpurifier',
|
||||
'phpt', 'vtest', etc. in order to only execute those tests. This supercedes
|
||||
the --only-phpt parameter, although for backwards-compatibility the flag
|
||||
will still work.
|
||||
! AutoParagraph auto-formatter will now preserve double-newlines upon output.
|
||||
Users who are not performing inbound filtering, this may seem a little
|
||||
useless, but as a bonus, the test suite and handling of edge cases is also
|
||||
improved.
|
||||
! Experimental implementation of forms for %HTML.Trusted
|
||||
! Track column numbers when maintain line numbers is on
|
||||
! Proprietary 'background' attribute on table-related elements converted into
|
||||
corresponding CSS. Thanks Fusemail for sponsoring this feature!
|
||||
! Add forward(), forwardUntilEndToken(), backward() and current() to Injector
|
||||
supertype.
|
||||
! HTMLPurifier_Injector->handleEnd() permits modification to end tokens. The
|
||||
time of operation varies slightly from notifyEnd() as *all* end tokens are
|
||||
processed by the injector before they are subject to the well-formedness rules.
|
||||
! %Attr.DefaultImageAlt allows overriding default behavior of setting alt to
|
||||
basename of image when not present.
|
||||
! %AutoFormat.DisplayLinkURI neuters <a> tags into plain text URLs.
|
||||
- Fix two bugs in %URI.MakeAbsolute; one involving empty paths in base URLs,
|
||||
the other involving an undefined $is_folder error.
|
||||
- Throw error when %Core.Encoding is set to a spurious value. Previously,
|
||||
this errored silently and returned false.
|
||||
- Redirected stderr to stdout for flush error output.
|
||||
- %URI.DisableExternal will now use the host in %URI.Base if %URI.Host is not
|
||||
available.
|
||||
- Do not re-munge URL if the output URL has the same host as the input URL.
|
||||
Requested by Chris.
|
||||
- Fix error in documentation regarding %Filter.ExtractStyleBlocks
|
||||
- Prevent <![CDATA[<body></body>]]> from triggering %Core.ConvertDocumentToFragment
|
||||
- Fix bug with inline elements in blockquotes conflicting with strict doctype
|
||||
- Detect if HTML support is disabled for DOM by checking for loadHTML() method.
|
||||
- Fix bug where dots and double-dots in absolute URLs without hostname were
|
||||
not collapsed by URIFilter_MakeAbsolute.
|
||||
- Fix bug with anonymous modules operating on SafeEmbed or SafeObject elements
|
||||
by reordering their addition.
|
||||
- Will now throw exception on many error conditions during lexer creation; also
|
||||
throw an exception when MaintainLineNumbers is true, but a non-tracksLineNumbers
|
||||
is being used.
|
||||
- Detect if domxml extension is loaded, and use DirectLEx accordingly.
|
||||
- Improve handling of big numbers with floating point arithmetic in UnitConverter.
|
||||
Reported by David Morton.
|
||||
. Strategy_MakeWellFormed now operates in-place, saving memory and allowing
|
||||
for more interesting filter-backtracking
|
||||
. New HTMLPurifier_Injector->rewind() functionality, allows injectors to rewind
|
||||
index to reprocess tokens.
|
||||
. StringHashParser now allows for multiline sections with "empty" content;
|
||||
previously the section would remain undefined.
|
||||
. Added --quick option to multitest.php, which tests only the most recent
|
||||
release for each series.
|
||||
. Added --distro option to multitest.php, which accepts either 'normal' or
|
||||
'standalone'. This supercedes --exclude-normal and --exclude-standalone
|
||||
|
||||
3.1.1, released 2008-06-19
|
||||
# %URI.Munge now, by default, does not munge resources (for example, <img src="">)
|
||||
In order to enable this again, please set %URI.MungeResources to true.
|
||||
! More robust imagecrash protection with height/width CSS with %CSS.MaxImgLength,
|
||||
and height/width HTML with %HTML.MaxImgLength.
|
||||
! %URI.MungeSecretKey for secure URI munging. Thanks Chris
|
||||
for sponsoring this feature. Check out the corresponding documentation
|
||||
for details. (Att Nightly testers: The API for this feature changed before
|
||||
the general release. Namely, rename your directives %URI.SecureMungeSecretKey =>
|
||||
%URI.MungeSecretKey and and %URI.SecureMunge => %URI.Munge)
|
||||
! Implemented post URI filtering. Set member variable $post to true to set
|
||||
a URIFilter as such.
|
||||
! Allow modules to define injectors via $info_injector. Injectors are
|
||||
automatically disabled if injector's needed elements are not found.
|
||||
! Support for "safe" objects added, use %HTML.SafeObject and %HTML.SafeEmbed.
|
||||
Thanks Chris for sponsoring. If you've been using ad hoc code from the
|
||||
forums, PLEASE use this instead.
|
||||
! Added substitutions for %e, %n, %a and %p in %URI.Munge (in order,
|
||||
embedded, tag name, attribute name, CSS property name). See %URI.Munge
|
||||
for more details. Requested by Jochem Blok.
|
||||
- Disable percent height/width attributes for img.
|
||||
- AttrValidator operations are now atomic; updates to attributes are not
|
||||
manifest in token until end of operations. This prevents naughty internal
|
||||
code from directly modifying CurrentToken when they're not supposed to.
|
||||
This semantics change was requested by frank farmer.
|
||||
- Percent encoding checks enabled for URI query and fragment
|
||||
- Fix stray backslashes in font-family; CSS Unicode character escapes are
|
||||
now properly resolved (although *only* in font-family). Thanks Takeshi Terada
|
||||
for reporting.
|
||||
- Improve parseCDATA algorithm to take into account newline normalization
|
||||
- Account for browser confusion between Yen character and backslash in
|
||||
Shift_JIS encoding. This fix generalizes to any other encoding which is not
|
||||
a strict superset of printable ASCII. Thanks Takeshi Terada for reporting.
|
||||
- Fix missing configuration parameter in Generator calls. Thanks vs for the
|
||||
partial patch.
|
||||
- Improved adherence to Unicode by checking for non-character codepoints.
|
||||
Thanks Geoffrey Sneddon for reporting. This may result in degraded
|
||||
performance for extremely large inputs.
|
||||
- Allow CSS property-value pair ''text-decoration: none''. Thanks Jochem Blok
|
||||
for reporting.
|
||||
. Added HTMLPurifier_UnitConverter and HTMLPurifier_Length for convenient
|
||||
handling of CSS-style lengths. HTMLPurifier_AttrDef_CSS_Length now uses
|
||||
this class.
|
||||
. API of HTMLPurifier_AttrDef_CSS_Length changed from __construct($disable_negative)
|
||||
to __construct($min, $max). __construct(true) is equivalent to
|
||||
__construct('0').
|
||||
. Added HTMLPurifier_AttrDef_Switch class
|
||||
. Rename HTMLPurifier_HTMLModule_Tidy->construct() to setup() and bubble method
|
||||
up inheritance hierarchy to HTMLPurifier_HTMLModule. All HTMLModules
|
||||
get this called with the configuration object. All modules now
|
||||
use this rather than __construct(), although legacy code using constructors
|
||||
will still work--the new format, however, lets modules access the
|
||||
configuration object for HTML namespace dependant tweaks.
|
||||
. AttrDef_HTML_Pixels now takes a single construction parameter, pixels.
|
||||
. ConfigSchema data-structure heavily optimized; on average it uses a third
|
||||
the memory it did previously. The interface has changed accordingly,
|
||||
consult changes to HTMLPurifier_Config for details.
|
||||
. Variable parsing types now are magic integers instead of strings
|
||||
. Added benchmark for ConfigSchema
|
||||
. HTMLPurifier_Generator requires $config and $context parameters. If you
|
||||
don't know what they should be, use HTMLPurifier_Config::createDefault()
|
||||
and new HTMLPurifier_Context().
|
||||
. Printers now properly distinguish between output configuration, and
|
||||
target configuration. This is not applicable to scripts using
|
||||
the Printers for HTML Purifier related tasks.
|
||||
. HTML/CSS Printers must be primed with prepareGenerator($gen_config), otherwise
|
||||
fatal errors will ensue.
|
||||
. URIFilter->prepare can return false in order to abort loading of the filter
|
||||
. Factory for AttrDef_URI implemented, URI#embedded to indicate URI that embeds
|
||||
an external resource.
|
||||
. %URI.Munge functionality factored out into a post-filter class.
|
||||
. Added CurrentCSSProperty context variable during CSS validation
|
||||
|
||||
3.1.0, released 2008-05-18
|
||||
# Unnecessary references to objects (vestiges of PHP4) removed from method
|
||||
signatures. The following methods do not need references when assigning from
|
||||
them and will result in E_STRICT errors if you try:
|
||||
+ HTMLPurifier_Config->get*Definition() [* = HTML, CSS]
|
||||
+ HTMLPurifier_ConfigSchema::instance()
|
||||
+ HTMLPurifier_DefinitionCacheFactory::instance()
|
||||
+ HTMLPurifier_DefinitionCacheFactory->create()
|
||||
+ HTMLPurifier_DoctypeRegistry->register()
|
||||
+ HTMLPurifier_DoctypeRegistry->get()
|
||||
+ HTMLPurifier_HTMLModule->addElement()
|
||||
+ HTMLPurifier_HTMLModule->addBlankElement()
|
||||
+ HTMLPurifier_LanguageFactory::instance()
|
||||
# Printer_ConfigForm's get*() functions were static-ified
|
||||
# %HTML.ForbiddenAttributes requires attribute declarations to be in the
|
||||
form of tag@attr, NOT tag.attr (which will throw an error and won't do
|
||||
anything). This is for forwards compatibility with XML; you'd do best
|
||||
to migrate an %HTML.AllowedAttributes directives to this syntax too.
|
||||
! Allow index to be false for config from form creation
|
||||
! Added HTMLPurifier::VERSION constant
|
||||
! Commas, not dashes, used for serializer IDs. This change is forwards-compatible
|
||||
and allows for version numbers like "3.1.0-dev".
|
||||
! %HTML.Allowed deals gracefully with whitespace anywhere, anytime!
|
||||
! HTML Purifier's URI handling is a lot more robust, with much stricter
|
||||
validation checks and better percent encoding handling. Thanks Gareth Heyes
|
||||
for indicating security vulnerabilities from lax percent encoding.
|
||||
! Bootstrap autoloader deals more robustly with classes that don't exist,
|
||||
preventing class_exists($class, true) from barfing.
|
||||
- InterchangeBuilder now alphabetizes its lists
|
||||
- Validation error in configdoc output fixed
|
||||
- Iconv and other encoding errors muted even with custom error handlers that
|
||||
do not honor error_reporting
|
||||
- Add protection against imagecrash attack with CSS height/width
|
||||
- HTMLPurifier::instance() created for consistency, is equivalent to getInstance()
|
||||
- Fixed and revamped broken ConfigForm smoketest
|
||||
- Bug with bool/null fields in Printer_ConfigForm fixed
|
||||
- Bug with global forbidden attributes fixed
|
||||
- Improved error messages for allowed and forbidden HTML elements and attributes
|
||||
- Missing (or null) in configdoc documentation restored
|
||||
- If DOM throws and exception during parsing with PH5P (occurs in newer versions
|
||||
of DOM), HTML Purifier punts to DirectLex
|
||||
- Fatal error with unserialization of ScriptRequired
|
||||
- Created directories are now chmod'ed properly
|
||||
- Fixed bug with fallback languages in LanguageFactory
|
||||
- Standalone testing setup properly with autoload
|
||||
. Out-of-date documentation revised
|
||||
. UTF-8 encoding check optimization as suggested by Diego
|
||||
. HTMLPurifier_Error removed in favor of exceptions
|
||||
. More copy() function removed; should use clone instead
|
||||
. More extensive unit tests for HTMLDefinition
|
||||
. assertPurification moved to central harness
|
||||
. HTMLPurifier_Generator accepts $config and $context parameters during
|
||||
instantiation, not runtime
|
||||
. Double-quotes outside of attribute values are now unescaped
|
||||
|
||||
3.1.0rc1, released 2008-04-22
|
||||
# Autoload support added. Internal require_once's removed in favor of an
|
||||
explicit require list or autoloading. To use HTML Purifier,
|
||||
you must now either use HTMLPurifier.auto.php
|
||||
or HTMLPurifier.includes.php; setting the include path and including
|
||||
HTMLPurifier.php is insufficient--in such cases include HTMLPurifier.autoload.php
|
||||
as well to register our autoload handler (or modify your autoload function
|
||||
to check HTMLPurifier_Bootstrap::getPath($class)). You can also use
|
||||
HTMLPurifier.safe-includes.php for a less performance friendly but more
|
||||
user-friendly library load.
|
||||
# HTMLPurifier_ConfigSchema static functions are officially deprecated. Schema
|
||||
information is stored in the ConfigSchema directory, and the
|
||||
maintenance/generate-schema-cache.php generates the schema.ser file, which
|
||||
is now instantiated. Support for userland schema changes coming soon!
|
||||
# HTMLPurifier_Config will now throw E_USER_NOTICE when you use a directive
|
||||
alias; to get rid of these errors just modify your configuration to use
|
||||
the new directive name.
|
||||
# HTMLPurifier->addFilter is deprecated; built-in filters can now be
|
||||
enabled using %Filter.$filter_name or by setting your own filters using
|
||||
%Filter.Custom
|
||||
# Directive-level safety properties superceded in favor of module-level
|
||||
safety. Internal method HTMLModule->addElement() has changed, although
|
||||
the externally visible HTMLDefinition->addElement has *not* changed.
|
||||
! Extra utility classes for testing and non-library operations can
|
||||
be found in extras/. Specifically, these are FSTools and ConfigDoc.
|
||||
You may find a use for these in your own project, but right now they
|
||||
are highly experimental and volatile.
|
||||
! Integration with PHPT allows for automated smoketests
|
||||
! Limited support for proprietary HTML elements, namely <marquee>, sponsored
|
||||
by Chris. You can enable them with %HTML.Proprietary if your client
|
||||
demands them.
|
||||
! Support for !important CSS cascade modifier. By default, this will be stripped
|
||||
from CSS, but you can enable it using %CSS.AllowImportant
|
||||
! Support for display and visibility CSS properties added, set %CSS.AllowTricky
|
||||
to true to use them.
|
||||
! HTML Purifier now has its own Exception hierarchy under HTMLPurifier_Exception.
|
||||
Developer error (not enduser error) can cause these to be triggered.
|
||||
! Experimental kses() wrapper introduced with HTMLPurifier.kses.php
|
||||
! Finally %CSS.AllowedProperties for tweaking allowed CSS properties without
|
||||
mucking around with HTMLPurifier_CSSDefinition
|
||||
! ConfigDoc output has been enhanced with version and deprecation info.
|
||||
! %HTML.ForbiddenAttributes and %HTML.ForbiddenElements implemented.
|
||||
- Autoclose now operates iteratively, i.e. <span><span><div> now has
|
||||
both span tags closed.
|
||||
- Various HTMLPurifier_Config convenience functions now accept another parameter
|
||||
$schema which defines what HTMLPurifier_ConfigSchema to use besides the
|
||||
global default.
|
||||
- Fix bug with trusted script handling in libxml versions later than 2.6.28.
|
||||
- Fix bug in ExtractStyleBlocks with comments in style tags
|
||||
- Fix bug in comment parsing for DirectLex
|
||||
- Flush output now displayed when in command line mode for unit tester
|
||||
- Fix bug with rgb(0, 1, 2) color syntax with spaces inside shorthand syntax
|
||||
- HTMLPurifier_HTMLDefinition->addAttribute can now be called multiple times
|
||||
on the same element without emitting errors.
|
||||
- Fixed fatal error in PH5P lexer with invalid tag names
|
||||
. Plugins now get their own changelogs according to project conventions.
|
||||
. Convert tokens to use instanceof, reducing memory footprint and
|
||||
improving comparison speed.
|
||||
. Dry runs now supported in SimpleTest; testing facilities improved
|
||||
. Bootstrap class added for handling autoloading functionality
|
||||
. Implemented recursive glob at FSTools->globr
|
||||
. ConfigSchema now has instance methods for all corresponding define*
|
||||
static methods.
|
||||
. A couple of new historical maintenance scripts were added.
|
||||
. HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php split into two files
|
||||
. tests/index.php can now be run from any directory.
|
||||
. HTMLPurifier_Token subclasses split into seperate files
|
||||
. HTMLPURIFIER_PREFIX now is defined in Bootstrap.php, NOT HTMLPurifier.php
|
||||
. HTMLPURIFIER_PREFIX can now be defined outside of HTML Purifier
|
||||
. New --php=php flag added, allows PHP executable to be specified (command
|
||||
line only!)
|
||||
. htmlpurifier_add_test() preferred method to translate test files in to
|
||||
classes, because it handles PHPT files too.
|
||||
. Debugger class is deprecated and will be removed soon.
|
||||
. Command line argument parsing for testing scripts revamped, now --opt value
|
||||
format is supported.
|
||||
. Smoketests now cleanup after magic quotes
|
||||
. Generator now can output comments (however, comments are still stripped
|
||||
from HTML Purifier output)
|
||||
. HTMLPurifier_ConfigSchema->validate() deprecated in favor of
|
||||
HTMLPurifier_VarParser->parse()
|
||||
. Integers auto-cast into float type by VarParser.
|
||||
. HTMLPURIFIER_STRICT removed; no validation is performed on runtime, only
|
||||
during cache generation
|
||||
. Reordered script calls in maintenance/flush.php
|
||||
. Command line scripts now honor exit codes
|
||||
. When --flush fails in unit testers, abort tests and print message
|
||||
. Improved documentation in docs/dev-flush.html about the maintenance scripts
|
||||
. copy() methods removed in favor of clone keyword
|
||||
|
||||
3.0.0, released 2008-01-06
|
||||
# HTML Purifier is PHP 5 only! The 2.1.x branch will be maintained
|
||||
until PHP 4 is completely deprecated, but no new features will be added
|
||||
to it.
|
||||
+ Visibility declarations added
|
||||
+ Constructor methods renamed to __construct()
|
||||
+ PHP4 reference cruft removed (in progress)
|
||||
! CSS properties are now case-insensitive
|
||||
! DefinitionCacheFactory now can register new implementations
|
||||
! New HTMLPurifier_Filter_ExtractStyleBlocks for extracting <style> from
|
||||
documents and cleaning their contents up. Requires the CSSTidy library
|
||||
<http://csstidy.sourceforge.net/>. You can access the blocks with the
|
||||
'StyleBlocks' Context variable ($purifier->context->get('StyleBlocks')).
|
||||
The output CSS can also be "scoped" for a specific element, use:
|
||||
%Filter.ExtractStyleBlocksScope
|
||||
! Experimental support for some proprietary CSS attributes allowed:
|
||||
opacity (and all of the browser-specific equivalents) and scrollbar colors.
|
||||
Enable by setting %CSS.Proprietary to true.
|
||||
- Colors missing # but in hex form will be corrected
|
||||
- CSS Number algorithm improved
|
||||
- Unit testing and multi-testing now on steroids: command lines,
|
||||
XML output, and other goodies now added.
|
||||
. Unit tests for Injector improved
|
||||
. New classes:
|
||||
+ HTMLPurifier_AttrDef_CSS_AlphaValue
|
||||
+ HTMLPurifier_AttrDef_CSS_Filter
|
||||
. Multitest now has a file docblock
|
||||
|
||||
2.1.3, released 2007-11-05
|
||||
! tests/multitest.php allows you to test multiple versions by running
|
||||
tests/index.php through multiple interpreters using `phpv` shell
|
||||
script (you must provide this script!)
|
||||
- Fixed poor include ordering for Email URI AttrDefs, causes fatal errors
|
||||
on some systems.
|
||||
- Injector algorithm further refined: off-by-one error regarding skip
|
||||
counts for dormant injectors fixed
|
||||
- Corrective blockquote definition now enabled for HTML 4.01 Strict
|
||||
- Fatal error when <img> tag (or any other element with required attributes)
|
||||
has 'id' attribute fixed, thanks NykO18 for reporting
|
||||
- Fix warning emitted when a non-supported URI scheme is passed to the
|
||||
MakeAbsolute URIFilter, thanks NykO18 (again)
|
||||
- Further refine AutoParagraph injector. Behavior inside of elements
|
||||
allowing paragraph tags clarified: only inline content delimeted by
|
||||
double newlines (not block elements) are paragraphed.
|
||||
- Buggy treatment of end tags of elements that have required attributes
|
||||
fixed (does not manifest on default tag-set)
|
||||
- Spurious internal content reorganization error suppressed
|
||||
- HTMLDefinition->addElement now returns a reference to the created
|
||||
element object, as implied by the documentation
|
||||
- Phorum mod's HTML Purifier help message expanded (unreleased elsewhere)
|
||||
- Fix a theoretical class of infinite loops from DirectLex reported
|
||||
by Nate Abele
|
||||
- Work around unnecessary DOMElement type-cast in PH5P that caused errors
|
||||
in PHP 5.1
|
||||
- Work around PHP 4 SimpleTest lack-of-error complaining for one-time-only
|
||||
HTMLDefinition errors, this may indicate problems with error-collecting
|
||||
facilities in PHP 5
|
||||
- Make ErrorCollectorEMock work in both PHP 4 and PHP 5
|
||||
- Make PH5P work with PHP 5.0 by removing unnecessary array parameter typedef
|
||||
. %Core.AcceptFullDocuments renamed to %Core.ConvertDocumentToFragment
|
||||
to better communicate its purpose
|
||||
. Error unit tests can now specify the expectation of no errors. Future
|
||||
iterations of the harness will be extremely strict about what errors
|
||||
are allowed
|
||||
. Extend Injector hooks to allow for more powerful injector routines
|
||||
. HTMLDefinition->addBlankElement created, as according to the HTMLModule
|
||||
method
|
||||
. Doxygen configuration file updated, with minor improvements
|
||||
. Test runner now checks for similarly named files in conf/ directory too.
|
||||
. Minor cosmetic change to flush-definition-cache.php: trailing newline is
|
||||
outputted
|
||||
. Maintenance script for generating PH5P patch added, original PH5P source
|
||||
file also added under version control
|
||||
. Full unit test runner script title made more descriptive with PHP version
|
||||
. Updated INSTALL file to state that 4.3.7 is the earliest version we
|
||||
are actively testing
|
||||
|
||||
2.1.2, released 2007-09-03
|
||||
! Implemented Object module for trusted users
|
||||
! Implemented experimental HTML5 parsing mode using PH5P. To use, add
|
||||
this to your code:
|
||||
require_once 'HTMLPurifier/Lexer/PH5P.php';
|
||||
$config->set('Core', 'LexerImpl', 'PH5P');
|
||||
Note that this Lexer introduces some classes not in the HTMLPurifier
|
||||
namespace. Also, this is PHP5 only.
|
||||
! CSS property border-spacing implemented
|
||||
- Fix non-visible parsing error in DirectLex with empty tags that have
|
||||
slashes inside attribute values.
|
||||
- Fix typo in CSS definition: border-collapse:seperate; was incorrectly
|
||||
accepted as valid CSS. Usually non-visible, because this styling is the
|
||||
default for tables in most browsers. Thanks Brett Zamir for pointing
|
||||
this out.
|
||||
- Fix validation errors in configuration form
|
||||
- Hammer out a bunch of edge-case bugs in the standalone distribution
|
||||
- Inclusion reflection removed from URISchemeRegistry; you must manually
|
||||
include any new schema files you wish to use
|
||||
- Numerous typo fixes in documentation thanks to Brett Zamir
|
||||
. Unit test refactoring for one logical test per test function
|
||||
. Config and context parameters in ComplexHarness deprecated: instead, edit
|
||||
the $config and $context member variables
|
||||
. HTML wrapper in DOMLex now takes DTD identifiers into account; doesn't
|
||||
really make a difference, but is good for completeness sake
|
||||
. merge-library.php script refactored for greater code reusability and
|
||||
PHP4 compatibility
|
||||
|
||||
2.1.1, released 2007-08-04
|
||||
- Fix show-stopper bug in %URI.MakeAbsolute functionality
|
||||
- Fix PHP4 syntax error in standalone version
|
||||
. Add prefix directory to include path for standalone, this prevents
|
||||
other installations from clobbering the standalone's URI schemes
|
||||
. Single test methods can be invoked by prefixing with __only
|
||||
|
||||
2.1.0, released 2007-08-02
|
||||
# flush-htmldefinition-cache.php superseded in favor of a generic
|
||||
flush-definition-cache.php script, you can clear a specific cache
|
||||
by passing its name as a parameter to the script
|
||||
! Phorum mod implemented for HTML Purifier
|
||||
! With %Core.AggressivelyFixLt, <3 and similar emoticons no longer
|
||||
trigger HTML removal in PHP5 (DOMLex). This directive is not necessary
|
||||
for PHP4 (DirectLex).
|
||||
! Standalone file now available, which greatly reduces the amount of
|
||||
includes (although there are still a few files that reside in the
|
||||
standalone folder)
|
||||
! Relative URIs can now be transformed into their absolute equivalents
|
||||
using %URI.Base and %URI.MakeAbsolute
|
||||
! Ruby implemented for XHTML 1.1
|
||||
! You can now define custom URI filtering behavior, see enduser-uri-filter.html
|
||||
for more details
|
||||
! UTF-8 font names now supported in CSS
|
||||
- AutoFormatters emit friendly error messages if tags or attributes they
|
||||
need are not allowed
|
||||
- ConfigForm's compactification of directive names is now configurable
|
||||
- AutoParagraph autoformatter algorithm refined after field-testing
|
||||
- XHTML 1.1 now applies XHTML 1.0 Strict cleanup routines, namely
|
||||
blockquote wrapping
|
||||
- Contents of <style> tags removed by default when tags are removed
|
||||
. HTMLPurifier_Config->getSerial() implemented, this is extremely useful
|
||||
for output cache invalidation
|
||||
. ConfigForm printer now can retrieve CSS and JS files as strings, in
|
||||
case HTML Purifier's directory is not publically accessible
|
||||
. Introduce new text/itext configuration directive values: these represent
|
||||
longer strings that would be more appropriately edited with a textarea
|
||||
. Allow newlines to act as separators for lists, hashes, lookups and
|
||||
%HTML.Allowed
|
||||
. ConfigForm generates textareas instead of text inputs for lists, hashes,
|
||||
lookups, text and itext fields
|
||||
. Hidden element content removal genericized: %Core.HiddenElements can
|
||||
be used to customize this behavior, by default <script> and <style> are
|
||||
hidden
|
||||
. Added HTMLPURIFIER_PREFIX constant, should be used instead of dirname(__FILE__)
|
||||
. Custom ChildDef added to default include list
|
||||
. URIScheme reflection improved: will not attempt to include file if class
|
||||
already exists. May clobber autoload, so I need to keep an eye on it
|
||||
. ConfigSchema heavily optimized, will only collect information and validate
|
||||
definitions when HTMLPURIFIER_SCHEMA_STRICT is true.
|
||||
. AttrDef_URI unit tests and implementation refactored
|
||||
. benchmarks/ directory now protected from public view with .htaccess file;
|
||||
run the tests via command line
|
||||
. URI scheme is munged off if there is no authority and the scheme is the
|
||||
default one
|
||||
. All unit tests inherit from HTMLPurifier_Harness, not UnitTestCase
|
||||
. Interface for URIScheme changed
|
||||
. Generic URI object to hold components of URI added, most systems involved
|
||||
in URI validation have been migrated to use it
|
||||
. Custom filtering for URIs factored out to URIDefinition interface for
|
||||
maximum extensibility
|
||||
|
||||
2.0.1, released 2007-06-27
|
||||
! Tag auto-closing now based on a ChildDef heuristic rather than a
|
||||
manually set auto_close array; some behavior may change
|
||||
! Experimental AutoFormat functionality added: auto-paragraph and
|
||||
linkify your HTML input by setting %AutoFormat.AutoParagraph and
|
||||
%AutoFormat.Linkify to true
|
||||
! Newlines normalized internally, and then converted back to the
|
||||
value of PHP_EOL. If this is not desired, set your newline format
|
||||
using %Output.Newline.
|
||||
! Beta error collection, messages are implemented for the most generic
|
||||
cases involving Lexing or Strategies
|
||||
- Clean up special case code for <script> tags
|
||||
- Reorder includes for DefinitionCache decorators, fixes a possible
|
||||
missing class error
|
||||
- Fixed bug where manually modified definitions were not saved via cache
|
||||
(mostly harmless, except for the fact that it would be a little slower)
|
||||
- Configuration objects with different serials do not clobber each
|
||||
others when revision numbers are unequal
|
||||
- Improve Serializer DefinitionCache directory permissions checks
|
||||
- DefinitionCache no longer throws errors when it encounters old
|
||||
serial files that do not conform to the current style
|
||||
- Stray xmlns attributes removed from configuration documentation
|
||||
- configForm.php smoketest no longer has XSS vulnerability due to
|
||||
unescaped print_r output
|
||||
- Printer adheres to configuration's directives on output format
|
||||
- Fix improperly named form field in ConfigForm printer
|
||||
. Rewire some test-cases to swallow errors rather than expect them
|
||||
. HTMLDefinition printer updated with some of the new attributes
|
||||
. DefinitionCache keys reordered to reflect precedence: version number,
|
||||
hash, then revision number
|
||||
. %Core.DefinitionCache renamed to %Cache.DefinitionImpl
|
||||
. Interlinking in configuration documentation added using
|
||||
Injector_PurifierLinkify
|
||||
. Directives now keep track of aliases to themselves
|
||||
. Error collector now requires a severity to be passed, use PHP's internal
|
||||
error constants for this
|
||||
. HTMLPurifier_Config::getAllowedDirectivesForForm implemented, allows
|
||||
much easier selective embedding of configuration values
|
||||
. Doctype objects now accept public and system DTD identifiers
|
||||
. %HTML.Doctype is now constrained by specific values, to specify a custom
|
||||
doctype use new %HTML.CustomDoctype
|
||||
. ConfigForm truncates long directives to keep the form small, and does
|
||||
not re-output namespaces
|
||||
|
||||
2.0.0, released 2007-06-20
|
||||
# Completely refactored HTMLModuleManager, decentralizing safety
|
||||
information
|
||||
# Transform modules changed to Tidy modules, which offer more flexibility
|
||||
and better modularization
|
||||
# Configuration object now finalizes itself when a read operation is
|
||||
performed on it, ensuring that its internal state stays consistent.
|
||||
To revert this behavior, you can set the $autoFinalize member variable
|
||||
off, but it's not recommended.
|
||||
# New compact syntax for AttrDef objects that can be used to instantiate
|
||||
new objects via make()
|
||||
# Definitions (esp. HTMLDefinition) are now cached for a significant
|
||||
performance boost. You can disable caching by setting %Core.DefinitionCache
|
||||
to null. You CANNOT edit raw definitions without setting the corresponding
|
||||
DefinitionID directive (%HTML.DefinitionID for HTMLDefinition).
|
||||
# Contents between <script> tags are now completely removed if <script>
|
||||
is not allowed
|
||||
# Prototype-declarations for Lexer removed in favor of configuration
|
||||
determination of Lexer implementations.
|
||||
! HTML Purifier now works in PHP 4.3.2.
|
||||
! Configuration form-editing API makes tweaking HTMLPurifier_Config a
|
||||
breeze!
|
||||
! Configuration directives that accept hashes now allow new string
|
||||
format: key1:value1,key2:value2
|
||||
! ConfigDoc now factored into OOP design
|
||||
! All deprecated elements now natively supported
|
||||
! Implement TinyMCE styled whitelist specification format in
|
||||
%HTML.Allowed
|
||||
! Config object gives more friendly error messages when things go wrong
|
||||
! Advanced API implemented: easy functions for creating elements (addElement)
|
||||
and attributes (addAttribute) on HTMLDefinition
|
||||
! Add native support for required attributes
|
||||
- Deprecated and removed EnableRedundantUTF8Cleaning. It didn't even work!
|
||||
- DOMLex will not emit errors when a custom error handler that does not
|
||||
honor error_reporting is used
|
||||
- StrictBlockquote child definition refrains from wrapping whitespace
|
||||
in tags now.
|
||||
- Bug resulting from tag transforms to non-allowed elements fixed
|
||||
- ChildDef_Custom's regex generation has been improved, removing several
|
||||
false positives
|
||||
. Unit test for ElementDef created, ElementDef behavior modified to
|
||||
be more flexible
|
||||
. Added convenience functions for HTMLModule constructors
|
||||
. AttrTypes now has accessor functions that should be used instead
|
||||
of directly manipulating info
|
||||
. TagTransform_Center deprecated in favor of generic TagTransform_Simple
|
||||
. Add extra protection in AttrDef_URI against phantom Schemes
|
||||
. Doctype object added to HTMLDefinition which describes certain aspects
|
||||
of the operational document type
|
||||
. Lexer is now pre-emptively included, with a conditional include for the
|
||||
PHP5 only version.
|
||||
. HTMLDefinition and CSSDefinition have a common parent class: Definition.
|
||||
. DirectLex can now track line-numbers
|
||||
. Preliminary error collector is in place, although no code actually reports
|
||||
errors yet
|
||||
. Factor out most of ValidateAttributes to new AttrValidator class
|
||||
|
||||
1.6.1, released 2007-05-05
|
||||
! Support for more deprecated attributes via transformations:
|
||||
+ hspace and vspace in img
|
||||
+ size and noshade in hr
|
||||
+ nowrap in td
|
||||
+ clear in br
|
||||
+ align in caption, table, img and hr
|
||||
+ type in ul, ol and li
|
||||
! DirectLex now preserves text in which a < bracket is followed by
|
||||
a non-alphanumeric character. This means that certain emoticons
|
||||
are now preserved.
|
||||
! %Core.RemoveInvalidImg is now operational, when set to false invalid
|
||||
images will hang around with an empty src
|
||||
! target attribute in a tag supported, use %Attr.AllowedFrameTargets
|
||||
to enable
|
||||
! CSS property white-space now allows nowrap (supported in all modern
|
||||
browsers) but not others (which have spotty browser implementations)
|
||||
! XHTML 1.1 mode now sort-of works without any fatal errors, and
|
||||
lang is now moved over to xml:lang.
|
||||
! Attribute transformation smoketest available at smoketests/attrTransform.php
|
||||
! Transformation of font's size attribute now handles super-large numbers
|
||||
- Possibly fatal bug with __autoload() fixed in module manager
|
||||
- Invert HTMLModuleManager->addModule() processing order to check
|
||||
prefixes first and then the literal module
|
||||
- Empty strings get converted to empty arrays instead of arrays with
|
||||
an empty string in them.
|
||||
- Merging in attribute lists now works.
|
||||
. Demo script removed: it has been added to the website's repository
|
||||
. Basic.php script modified to work out of the box
|
||||
. Refactor AttrTransform classes to reduce duplication
|
||||
. AttrTransform_TextAlign axed in favor of a more general
|
||||
AttrTransform_EnumToCSS, refer to HTMLModule/TransformToStrict.php to
|
||||
see how the new equivalent is implemented
|
||||
. Unit tests now use exclusively assertIdentical
|
||||
|
||||
1.6.0, released 2007-04-01
|
||||
! Support for most common deprecated attributes via transformations:
|
||||
+ bgcolor in td, th, tr and table
|
||||
+ border in img
|
||||
+ name in a and img
|
||||
+ width in td, th and hr
|
||||
+ height in td, th
|
||||
! Support for CSS attribute 'height' added
|
||||
! Support for rel and rev attributes in a tags added, use %Attr.AllowedRel
|
||||
and %Attr.AllowedRev to activate
|
||||
- You can define ID blacklists using regular expressions via
|
||||
%Attr.IDBlacklistRegexp
|
||||
- Error messages are emitted when you attempt to "allow" elements or
|
||||
attributes that HTML Purifier does not support
|
||||
- Fix segfault in unit test. The problem is not very reproduceable and
|
||||
I don't know what causes it, but a six line patch fixed it.
|
||||
|
||||
1.5.0, released 2007-03-23
|
||||
! Added a rudimentary I18N and L10N system modeled off MediaWiki. It
|
||||
doesn't actually do anything yet, but keep your eyes peeled.
|
||||
! docs/enduser-utf8.html explains how to use UTF-8 and HTML Purifier
|
||||
! Newly structured HTMLDefinition modeled off of XHTML 1.1 modules.
|
||||
I am loathe to release beta quality APIs, but this is exactly that;
|
||||
don't use the internal interfaces if you're not willing to do migration
|
||||
later on.
|
||||
- Allow 'x' subtag in language codes
|
||||
- Fixed buggy chameleon-support for ins and del
|
||||
. Added support for IDREF attributes (i.e. for)
|
||||
. Renamed HTMLPurifier_AttrDef_Class to HTMLPurifier_AttrDef_Nmtokens
|
||||
. Removed context variable ParentType, replaced with IsInline, which
|
||||
is false when you're not inline and an integer of the parent that
|
||||
caused you to become inline when you are (so possibly zero)
|
||||
. Removed ElementDef->type in favor of ElementDef->descendants_are_inline
|
||||
and HTMLDefinition->content_sets
|
||||
. StrictBlockquote now reports what elements its supposed to allow,
|
||||
rather than what it does allow
|
||||
. Removed HTMLDefinition->info_flow_elements in favor of
|
||||
HTMLDefinition->content_sets['Flow']
|
||||
. Removed redundant "exclusionary" definitions from DTD roster
|
||||
. StrictBlockquote now requires a construction parameter as if it
|
||||
were an Required ChildDef, this is the "real" set of allowed elements
|
||||
. AttrDef partitioned into HTML, CSS and URI segments
|
||||
. Modify Youtube filter regexp to be multiline
|
||||
. Require both PHP5 and DOM extension in order to use DOMLex, fixes
|
||||
some edge cases where a DOMDocument class exists in a PHP4 environment
|
||||
due to DOM XML extension.
|
||||
|
||||
1.4.1, released 2007-01-21
|
||||
! docs/enduser-youtube.html updated according to new functionality
|
||||
- YouTube IDs can have underscores and dashes
|
||||
|
||||
1.4.0, released 2007-01-21
|
||||
! Implemented list-style-image, URIs now allowed in list-style
|
||||
! Implemented background-image, background-repeat, background-attachment
|
||||
and background-position CSS properties. Shorthand property background
|
||||
supports all of these properties.
|
||||
! Configuration documentation looks nicer
|
||||
! Added %Core.EscapeNonASCIICharacters to workaround loss of Unicode
|
||||
characters while %Core.Encoding is set to a non-UTF-8 encoding.
|
||||
! Support for configuration directive aliases added
|
||||
! Config object can now be instantiated from ini files
|
||||
! YouTube preservation code added to the core, with two lines of code
|
||||
you can add it as a filter to your code. See smoketests/preserveYouTube.php
|
||||
for sample code.
|
||||
! Moved SLOW to docs/enduser-slow.html and added code examples
|
||||
- Replaced version check with functionality check for DOM (thanks Stephen
|
||||
Khoo)
|
||||
. Added smoketest 'all.php', which loads all other smoketests via frames
|
||||
. Implemented AttrDef_CSSURI for url(http://google.com) style declarations
|
||||
. Added convenient single test selector form on test runner
|
||||
|
||||
1.3.2, released 2006-12-25
|
||||
! HTMLPurifier object now accepts configuration arrays, no need to manually
|
||||
instantiate a configuration object
|
||||
! Context object now accessible to outside
|
||||
! Added enduser-youtube.html, explains how to embed YouTube videos. See
|
||||
also corresponding smoketest preserveYouTube.php.
|
||||
! Added purifyArray(), which takes a list of HTML and purifies it all
|
||||
! Added static member variable $version to HTML Purifier with PHP-compatible
|
||||
version number string.
|
||||
- Fixed fatal error thrown by upper-cased language attributes
|
||||
- printDefinition.php: added labels, added better clarification
|
||||
. HTMLPurifier_Config::create() added, takes mixed variable and converts into
|
||||
a HTMLPurifier_Config object.
|
||||
|
||||
1.3.1, released 2006-12-06
|
||||
! Added HTMLPurifier.func.php stub for a convenient function to call the library
|
||||
- Fixed bug in RemoveInvalidImg code that caused all images to be dropped
|
||||
(thanks to .mario for reporting this)
|
||||
. Standardized all attribute handling variables to attr, made it plural
|
||||
|
||||
1.3.0, released 2006-11-26
|
||||
# Invalid images are now removed, rather than replaced with a dud
|
||||
<img src="" alt="Invalid image" />. Previous behavior can be restored
|
||||
with new directive %Core.RemoveInvalidImg set to false.
|
||||
! (X)HTML Strict now supported
|
||||
+ Transparently handles inline elements in block context (blockquote)
|
||||
! Added GET method to demo for easier validation, added 50kb max input size
|
||||
! New directive %HTML.BlockWrapper, for block-ifying inline elements
|
||||
! New directive %HTML.Parent, allows you to only allow inline content
|
||||
! New directives %HTML.AllowedElements and %HTML.AllowedAttributes to let
|
||||
users narrow the set of allowed tags
|
||||
! <li value="4"> and <ul start="2"> now allowed in loose mode
|
||||
! New directives %URI.DisableExternalResources and %URI.DisableResources
|
||||
! New directive %Attr.DisableURI, which eliminates all hyperlinking
|
||||
! New directive %URI.Munge, munges URI so you can use some sort of redirector
|
||||
service to avoid PageRank leaks or warn users that they are exiting your site.
|
||||
! Added spiffy new smoketest printDefinition.php, which lets you twiddle with
|
||||
the configuration settings and see how the internal rules are affected.
|
||||
! New directive %URI.HostBlacklist for blocking links to bad hosts.
|
||||
xssAttacks.php smoketest updated accordingly.
|
||||
- Added missing type to ChildDef_Chameleon
|
||||
- Remove Tidy option from demo if there is not Tidy available
|
||||
. ChildDef_Required guards against empty tags
|
||||
. Lookup table HTMLDefinition->info_flow_elements added
|
||||
. Added peace-of-mind variable initialization to Strategy_FixNesting
|
||||
. Added HTMLPurifier->info_parent_def, parent child processing made special
|
||||
. Added internal documents briefly summarizing future progression of HTML
|
||||
. HTMLPurifier_Config->getBatch($namespace) added
|
||||
. More lenient casting to bool from string in HTMLPurifier_ConfigSchema
|
||||
. Refactored ChildDef classes into their own files
|
||||
|
||||
1.2.0, released 2006-11-19
|
||||
# ID attributes now disabled by default. New directives:
|
||||
+ %HTML.EnableAttrID - restores old behavior by allowing IDs
|
||||
+ %Attr.IDPrefix - %Attr.IDBlacklist alternative that munges all user IDs
|
||||
so that they don't collide with your IDs
|
||||
+ %Attr.IDPrefixLocal - Same as above, but for when there are multiple
|
||||
instances of user content on the page
|
||||
+ Profuse documentation on how to use these available in docs/enduser-id.txt
|
||||
! Added MODx plugin <http://modxcms.com/forums/index.php/topic,6604.0.html>
|
||||
! Added percent encoding normalization
|
||||
! XSS attacks smoketest given facelift
|
||||
! Configuration documentation now has table of contents
|
||||
! Added %URI.DisableExternal, which prevents links to external websites. You
|
||||
can also use %URI.Host to permit absolute linking to subdomains
|
||||
! Non-accessible resources (ex. mailto) blocked from embedded URIs (img src)
|
||||
- Type variable in HTMLDefinition was not being set properly, fixed
|
||||
- Documentation updated
|
||||
+ TODO added request Phalanger
|
||||
+ TODO added request Native compression
|
||||
+ TODO added request Remove redundant tags
|
||||
+ TODO added possible plaintext formatter for HTML Purifier documentation
|
||||
+ Updated ConfigDoc TODO
|
||||
+ Improved inline comments in AttrDef/Class.php, AttrDef/CSS.php
|
||||
and AttrDef/Host.php
|
||||
+ Revamped documentation into HTML, along with misc updates
|
||||
- HTMLPurifier_Context doesn't throw a variable reference error if you attempt
|
||||
to retrieve a non-existent variable
|
||||
. Switched to purify()-wide Context object registry
|
||||
. Refactored unit tests to minimize duplication
|
||||
. XSS attack sheet updated
|
||||
. configdoc.xml now has xml:space attached to default value nodes
|
||||
. Allow configuration directives to permit null values
|
||||
. Cleaned up test-cases to remove unnecessary swallowErrors()
|
||||
|
||||
1.1.2, released 2006-09-30
|
||||
! Add HTMLPurifier.auto.php stub file that configures include_path
|
||||
- Documentation updated
|
||||
+ INSTALL document rewritten
|
||||
+ TODO added semi-lossy conversion
|
||||
+ API Doxygen docs' file exclusions updated
|
||||
+ Added notes on HTML versus XML attribute whitespace handling
|
||||
+ Noted that HTMLPurifier_ChildDef_Custom isn't being used
|
||||
+ Noted that config object's definitions are cached versions
|
||||
- Fixed lack of attribute parsing in HTMLPurifier_Lexer_PEARSax3
|
||||
- ftp:// URIs now have their typecodes checked
|
||||
- Hooked up HTMLPurifier_ChildDef_Custom's unit tests (they weren't being run)
|
||||
. Line endings standardized throughout project (svn:eol-style standardized)
|
||||
. Refactored parseData() to general Lexer class
|
||||
. Tester named "HTML Purifier" not "HTMLPurifier"
|
||||
|
||||
1.1.1, released 2006-09-24
|
||||
! Configuration option to optionally Tidy up output for indentation to make up
|
||||
for dropped whitespace by DOMLex (pretty-printing for the entire application
|
||||
should be done by a page-wide Tidy)
|
||||
- Various documentation updates
|
||||
- Fixed parse error in configuration documentation script
|
||||
- Fixed fatal error in benchmark scripts, slightly augmented
|
||||
- As far as possible, whitespace is preserved in-between table children
|
||||
- Sample test-settings.php file included
|
||||
|
||||
1.1.0, released 2006-09-16
|
||||
! Directive documentation generation using XSLT
|
||||
! XHTML can now be turned off, output becomes <br>
|
||||
- Made URI validator more forgiving: will ignore leading and trailing
|
||||
quotes, apostrophes and less than or greater than signs.
|
||||
- Enforce alphanumeric namespace and directive names for configuration.
|
||||
- Table child definition made more flexible, will fix up poorly ordered elements
|
||||
. Renamed ConfigDef to ConfigSchema
|
||||
|
||||
1.0.1, released 2006-09-04
|
||||
- Fixed slight bug in DOMLex attribute parsing
|
||||
- Fixed rejection of case-insensitive configuration values when there is a
|
||||
set of allowed values. This manifested in %Core.Encoding.
|
||||
- Fixed rejection of inline style declarations that had lots of extra
|
||||
space in them. This manifested in TinyMCE.
|
||||
|
||||
1.0.0, released 2006-09-01
|
||||
! Shorthand CSS properties implemented: font, border, background, list-style
|
||||
! Basic color keywords translated into hexadecimal values
|
||||
! Table CSS properties implemented
|
||||
! Support for charsets other than UTF-8 (defined by iconv)
|
||||
! Malformed UTF-8 and non-SGML character detection and cleaning implemented
|
||||
- Fixed broken numeric entity conversion
|
||||
- API documentation completed
|
||||
. (HTML|CSS)Definition de-singleton-ized
|
||||
|
||||
1.0.0beta, released 2006-08-16
|
||||
! First public release, most functionality implemented. Notable omissions are:
|
||||
+ Shorthand CSS properties
|
||||
+ Table CSS properties
|
||||
+ Deprecated attribute transformations
|
||||
|
||||
vim: et sw=4 sts=4
|
||||
Vendored
+29
@@ -0,0 +1,29 @@
|
||||
HTML Purifier [](http://travis-ci.org/ezyang/htmlpurifier)
|
||||
=============
|
||||
|
||||
HTML Purifier is an HTML filtering solution that uses a unique combination
|
||||
of robust whitelists and aggressive parsing to ensure that not only are
|
||||
XSS attacks thwarted, but the resulting HTML is standards compliant.
|
||||
|
||||
HTML Purifier is oriented towards richly formatted documents from
|
||||
untrusted sources that require CSS and a full tag-set. This library can
|
||||
be configured to accept a more restrictive set of tags, but it won't be
|
||||
as efficient as more bare-bones parsers. It will, however, do the job
|
||||
right, which may be more important.
|
||||
|
||||
Places to go:
|
||||
|
||||
* See INSTALL for a quick installation guide
|
||||
* See docs/ for developer-oriented documentation, code examples and
|
||||
an in-depth installation guide.
|
||||
* See WYSIWYG for information on editors like TinyMCE and FCKeditor
|
||||
|
||||
HTML Purifier can be found on the web at: [http://htmlpurifier.org/](http://htmlpurifier.org/)
|
||||
|
||||
## Installation
|
||||
|
||||
Package available on [Composer](https://packagist.org/packages/ezyang/htmlpurifier).
|
||||
|
||||
If you're using Composer to manage dependencies, you can use
|
||||
|
||||
$ composer require "ezyang/htmlpurifier":"dev-master"
|
||||
Vendored
+150
@@ -0,0 +1,150 @@
|
||||
|
||||
TODO List
|
||||
|
||||
= KEY ====================
|
||||
# Flagship
|
||||
- Regular
|
||||
? Maybe I'll Do It
|
||||
==========================
|
||||
|
||||
If no interest is expressed for a feature that may require a considerable
|
||||
amount of effort to implement, it may get endlessly delayed. Do not be
|
||||
afraid to cast your vote for the next feature to be implemented!
|
||||
|
||||
Things to do as soon as possible:
|
||||
|
||||
- http://htmlpurifier.org/phorum/read.php?3,5560,6307#msg-6307
|
||||
- Think about allowing explicit order of operations hooks for transforms
|
||||
- Fix "<.<" bug (trailing < is removed if not EOD)
|
||||
- Build in better internal state dumps and debugging tools for remote
|
||||
debugging
|
||||
- Allowed/Allowed* have strange interactions when both set
|
||||
? Transform lone embeds into object tags
|
||||
- Deprecated config options that emit warnings when you set them (with'
|
||||
a way of muting the warning if you really want to)
|
||||
- Make HTML.Trusted work with Output.FlashCompat
|
||||
- HTML.Trusted and HTML.SafeObject have funny interaction; general
|
||||
problem is what to do when a module "supersedes" another
|
||||
(see also tables and basic tables.) This is a little dicier
|
||||
because HTML.SafeObject has some extra functionality that
|
||||
trusted might find useful. See http://htmlpurifier.org/phorum/read.php?3,5762,6100
|
||||
|
||||
FUTURE VERSIONS
|
||||
---------------
|
||||
|
||||
4.9 release [OMG CONFIG PONIES]
|
||||
! Fix Printer. It's from the old days when we didn't have decent XML classes
|
||||
! Factor demo.php into a set of Printer classes, and then create a stub
|
||||
file for users here (inside the actual HTML Purifier library)
|
||||
- Fix error handling with form construction
|
||||
- Do encoding validation in Printers, or at least, where user data comes in
|
||||
- Config: Add examples to everything (make built-in which also automatically
|
||||
gives output)
|
||||
- Add "register" field to config schemas to eliminate dependence on
|
||||
naming conventions (try to remember why we ultimately decided on tihs)
|
||||
|
||||
5.0 release [HTML 5]
|
||||
# Swap out code to use html5lib tokenizer and tree-builder
|
||||
! Allow turning off of FixNesting and required attribute insertion
|
||||
|
||||
5.1 release [It's All About Trust] (floating)
|
||||
# Implement untrusted, dangerous elements/attributes
|
||||
# Implement IDREF support (harder than it seems, since you cannot have
|
||||
IDREFs to non-existent IDs)
|
||||
- Implement <area> (client and server side image maps are blocking
|
||||
on IDREF support)
|
||||
# Frameset XHTML 1.0 and HTML 4.01 doctypes
|
||||
- Figure out how to simultaneously set %CSS.Trusted and %HTML.Trusted (?)
|
||||
|
||||
5.2 release [Error'ed]
|
||||
# Error logging for filtering/cleanup procedures
|
||||
# Additional support for poorly written HTML
|
||||
- Microsoft Word HTML cleaning (i.e. MsoNormal, but research essential!)
|
||||
- Friendly strict handling of <address> (block -> <br>)
|
||||
- XSS-attempt detection--certain errors are flagged XSS-like
|
||||
- Append something to duplicate IDs so they're still usable (impl. note: the
|
||||
dupe detector would also need to detect the suffix as well)
|
||||
|
||||
6.0 release [Beyond HTML]
|
||||
# Legit token based CSS parsing (will require revamping almost every
|
||||
AttrDef class). Probably will use CSSTidy
|
||||
# More control over allowed CSS properties using a modularization
|
||||
# IRI support (this includes IDN)
|
||||
- Standardize token armor for all areas of processing
|
||||
|
||||
7.0 release [To XML and Beyond]
|
||||
- Extended HTML capabilities based on namespacing and tag transforms (COMPLEX)
|
||||
- Hooks for adding custom processors to custom namespaced tags and
|
||||
attributes, offer default implementation
|
||||
- Lots of documentation and samples
|
||||
|
||||
Ongoing
|
||||
- More refactoring to take advantage of PHP5's facilities
|
||||
- Refactor unit tests into lots of test methods
|
||||
- Plugins for major CMSes (COMPLEX)
|
||||
- phpBB
|
||||
- Also, a FAQ for extension writers with HTML Purifier
|
||||
|
||||
AutoFormat
|
||||
- Smileys
|
||||
- Syntax highlighting (with GeSHi) with <pre> and possibly <?php
|
||||
- Look at http://drupal.org/project/Modules/category/63 for ideas
|
||||
|
||||
Neat feature related
|
||||
! Support exporting configuration, so users can easily tweak settings
|
||||
in the demo, and then copy-paste into their own setup
|
||||
- Advanced URI filtering schemes (see docs/proposal-new-directives.txt)
|
||||
- Allow scoped="scoped" attribute in <style> tags; may be troublesome
|
||||
because regular CSS has no way of uniquely identifying nodes, so we'd
|
||||
have to generate IDs
|
||||
- Explain how to use HTML Purifier in non-PHP languages / create
|
||||
a simple command line stub (or complicated?)
|
||||
- Fixes for Firefox's inability to handle COL alignment props (Bug 915)
|
||||
- Automatically add non-breaking spaces to empty table cells when
|
||||
empty-cells:show is applied to have compatibility with Internet Explorer
|
||||
- Table of Contents generation (XHTML Compiler might be reusable). May also
|
||||
be out-of-band information.
|
||||
- Full set of color keywords. Also, a way to add onto them without
|
||||
finalizing the configuration object.
|
||||
- Write a var_export and memcached DefinitionCache - Denis
|
||||
- Built-in support for target="_blank" on all external links
|
||||
- Convert RTL/LTR override characters to <bdo> tags, or vice versa on demand.
|
||||
Also, enable disabling of directionality
|
||||
? Externalize inline CSS to promote clean HTML, proposed by Sander Tekelenburg
|
||||
? Remove redundant tags, ex. <u><u>Underlined</u></u>. Implementation notes:
|
||||
1. Analyzing which tags to remove duplicants
|
||||
2. Ensure attributes are merged into the parent tag
|
||||
3. Extend the tag exclusion system to specify whether or not the
|
||||
contents should be dropped or not (currently, there's code that could do
|
||||
something like this if it didn't drop the inner text too.)
|
||||
? Make AutoParagraph also support paragraph-izing double <br> tags, and not
|
||||
just double newlines. This is kind of tough to do in the current framework,
|
||||
though, and might be reasonably approximated by search replacing double <br>s
|
||||
with newlines before running it through HTML Purifier.
|
||||
|
||||
Maintenance related (slightly boring)
|
||||
# CHMOD install script for PEAR installs
|
||||
! Factor out command line parser into its own class, and unit test it
|
||||
- Reduce size of internal data-structures (esp. HTMLDefinition)
|
||||
- Allow merging configurations. Thus,
|
||||
a -> b -> default
|
||||
c -> d -> default
|
||||
becomes
|
||||
a -> b -> c -> d -> default
|
||||
Maybe allow more fine-grained tuning of this behavior. Alternatively,
|
||||
encourage people to use short plist depths before building them up.
|
||||
- Time PHPT tests
|
||||
|
||||
ChildDef related (very boring)
|
||||
- Abstract ChildDef_BlockQuote to work with all elements that only
|
||||
allow blocks in them, required or optional
|
||||
- Implement lenient <ruby> child validation
|
||||
|
||||
Wontfix
|
||||
- Non-lossy smart alternate character encoding transformations (unless
|
||||
patch provided)
|
||||
- Pretty-printing HTML: users can use Tidy on the output on entire page
|
||||
- Native content compression, whitespace stripping: use gzip if this is
|
||||
really important
|
||||
|
||||
vim: et sw=4 sts=4
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
4.10.0
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user