Compare commits
44
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1f556cf88c | ||
|
|
76625cf472 | ||
|
|
84fee0f1f2 | ||
|
|
9f81c760d0 | ||
|
|
f26ac8c37b | ||
|
|
7cffa68d04 | ||
|
|
01094d376f | ||
|
|
77ec4c6572 | ||
|
|
3e5727a166 | ||
|
|
91e56644b4 | ||
|
|
e0b7a3d763 | ||
|
|
6a25f03687 | ||
|
|
104f306deb | ||
|
|
09c21cd466 | ||
|
|
5b89797f57 | ||
|
|
ab1cc5146d | ||
|
|
2483a7723f | ||
|
|
367db15d93 | ||
|
|
30e02aac08 | ||
|
|
ce5ddf05fe | ||
|
|
475837bca0 | ||
|
|
bd0ae25afd | ||
|
|
688de08feb | ||
|
|
83b550adbe | ||
|
|
fa89bae7d9 | ||
|
|
456246362f | ||
|
|
b472440ec1 | ||
|
|
7b5613d032 | ||
|
|
f5b3b985ce | ||
|
|
515298700a | ||
|
|
41d7566acb | ||
|
|
f4196263fa | ||
|
|
6bc69ac467 | ||
|
|
15b2c8b8e6 | ||
|
|
8e1d33e880 | ||
|
|
797902552d | ||
|
|
f3d2dcdad2 | ||
|
|
928478a8ad | ||
|
|
5023ee800b | ||
|
|
4a70625487 | ||
|
|
26327b5c8c | ||
|
|
372f47760b | ||
|
|
3111a5eb71 | ||
|
|
98e2e2f125 |
@@ -29,6 +29,7 @@ d_pic/*.jpg
|
||||
d_pic/*.gif
|
||||
d_pic/*.png
|
||||
d_pic/*.webp
|
||||
d_pic/*.avif
|
||||
d_pic/uploaded_image
|
||||
|
||||
/dist_js
|
||||
|
||||
@@ -56,7 +56,7 @@ $rootDB->insert('member', [
|
||||
'token_valid_until' => '2999-01-01 00:00:00',
|
||||
'pw' => $finalPassword,
|
||||
'salt' => $userSalt,
|
||||
'grade' => 6,
|
||||
'grade' => 7,
|
||||
'name' => $nickname,
|
||||
'reg_date' => $nowDate
|
||||
]);
|
||||
|
||||
@@ -92,4 +92,14 @@ CREATE TABLE `login_token` (
|
||||
INDEX `by_date` (`user_id`, `expire_date`)
|
||||
)
|
||||
COLLATE='utf8mb4_general_ci'
|
||||
ENGINE=Aria;
|
||||
ENGINE=Aria;
|
||||
|
||||
CREATE TABLE `banned_member` (
|
||||
`no` INT NOT NULL AUTO_INCREMENT,
|
||||
`hashed_email` VARCHAR(128) NOT NULL COLLATE 'utf8mb4_general_ci' COMMENT 'SHA512(salt | email | salt )',
|
||||
`info` TEXT NULL COLLATE 'utf8mb4_general_ci' COMMENT '부가정보',
|
||||
PRIMARY KEY (`no`),
|
||||
UNIQUE INDEX `email` (`hashed_email`(128))
|
||||
)
|
||||
COLLATE='utf8mb4_general_ci'
|
||||
ENGINE = Aria;
|
||||
+1
-1
@@ -6,7 +6,7 @@ include "func.php";
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
|
||||
if($session->userGrade < 5) {
|
||||
if($session->userGrade < 6) {
|
||||
die(requireAdminPermissionHTML());
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ include "func.php";
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
|
||||
if ($session->userGrade < 5) {
|
||||
if ($session->userGrade < 6) {
|
||||
header('location:_admin1.php');
|
||||
die();
|
||||
}
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@ include "func.php";
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
|
||||
if ($session->userGrade < 5) {
|
||||
if ($session->userGrade < 6) {
|
||||
die(requireAdminPermissionHTML());
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ $msg = Util::getPost('msg', 'string');
|
||||
//로그인 검사
|
||||
$session = Session::requireLogin()->loginGame()->setReadOnly();
|
||||
|
||||
if ($session->userGrade < 5) {
|
||||
if ($session->userGrade < 6) {
|
||||
header('location:_admin2.php');
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ if ($type2 < 0 || $type2 > 6) {
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
|
||||
if ($session->userGrade < 5) {
|
||||
if ($session->userGrade < 6) {
|
||||
die(requireAdminPermissionHTML());
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ $nation = Util::getPost('nation', 'int');
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
if ($session->userGrade < 5) {
|
||||
if ($session->userGrade < 6) {
|
||||
header('location:_admin5.php');
|
||||
die();
|
||||
}
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@ if ($reqQueryType === null || !key_exists($reqQueryType, $queryMap)) {
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
|
||||
if ($session->userGrade < 5) {
|
||||
if ($session->userGrade < 6) {
|
||||
die(requireAdminPermissionHTML());
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ $type = 0;
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
|
||||
if ($session->userGrade < 5) {
|
||||
if ($session->userGrade < 6) {
|
||||
die(requireAdminPermissionHTML());
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ include "func.php";
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
|
||||
if ($session->userGrade < 5) {
|
||||
if ($session->userGrade < 6) {
|
||||
die('권한 부족');
|
||||
}
|
||||
|
||||
|
||||
@@ -177,7 +177,7 @@ $templates = new \League\Plates\Engine('templates');
|
||||
$valid = 1;
|
||||
}
|
||||
|
||||
if ($userGrade >= 5) {
|
||||
if ($userGrade >= 6) {
|
||||
$valid = true;
|
||||
$showDetailedInfo = true;
|
||||
}
|
||||
@@ -275,7 +275,7 @@ $templates = new \League\Plates\Engine('templates');
|
||||
$ourGeneral = false;
|
||||
}
|
||||
|
||||
if ($userGrade == 6) {
|
||||
if ($userGrade == 7) {
|
||||
$ourGeneral = true;
|
||||
}
|
||||
|
||||
|
||||
+1
-57
@@ -125,63 +125,7 @@ $globalBetTotal = array_sum($globalBet);
|
||||
</tr>
|
||||
</table>
|
||||
<table align=center class='tb_layout bg0'>
|
||||
<?php if ($session->userGrade >= 5) : ?>
|
||||
<form method=post action=c_tournament.php>
|
||||
<tr>
|
||||
<td colspan=8><input type=textarea size=150 style=color:white;background-color:black; name=msg><input type=submit name=btn value='메시지'></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan=8>
|
||||
<button type="button" class="btn btn-secondary" onclick='location.reload()'>갱신</button>
|
||||
<?php if ($admin['tournament'] == 0) : ?>
|
||||
<select name=trig size=1 style=color:white;background-color:black;>
|
||||
<option style=color:white; value=0 <?= !$admin['tnmt_trig'] ? 'selected' : '' ?>>수동진행</option>
|
||||
<option style=color:white; value=1 <?= $admin['tnmt_trig'] ? 'selected' : '' ?>>자동진행</option>
|
||||
</select>
|
||||
<input type=submit name=btn value='자동개최설정'>
|
||||
<?php else : ?>
|
||||
<input type=submit name=btn value='중단' onclick='return confirm("진짜 중단하시겠습니까?")'>
|
||||
<?php endif; ?>
|
||||
|
||||
|
||||
<?php switch ($admin['tournament']) {
|
||||
case 1:
|
||||
echo "<input type=submit name=btn value='랜덤투입'>";
|
||||
echo "<input type=submit name=btn value='랜덤전부투입'>";
|
||||
break;
|
||||
case 2:
|
||||
echo "<input type=submit name=btn value='예선'><input type=submit name=btn value='예선전부'>";
|
||||
break;
|
||||
case 3:
|
||||
echo "<input type=submit name=btn value='추첨'><input type=submit name=btn value='추첨전부'>";
|
||||
break;
|
||||
case 4:
|
||||
echo "<input type=submit name=btn value='본선'><input type=submit name=btn value='본선전부'>";
|
||||
break;
|
||||
case 5:
|
||||
echo "<input type=submit name=btn value='배정'>";
|
||||
break;
|
||||
case 6:
|
||||
echo "<input type=submit name=btn value='베팅마감'>";
|
||||
break;
|
||||
case 7:
|
||||
echo "<input type=submit name=btn value='16강'>";
|
||||
break;
|
||||
case 8:
|
||||
echo "<input type=submit name=btn value='8강'>";
|
||||
break;
|
||||
case 9:
|
||||
echo "<input type=submit name=btn value='4강'>";
|
||||
break;
|
||||
case 10:
|
||||
echo "<input type=submit name=btn value='결승'>";
|
||||
break;
|
||||
} ?>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</form>
|
||||
<?php elseif ($me['no'] > 0 && $me['tournament'] == 0 && $admin['tournament'] == 1) : ?>
|
||||
<?php if ($me['no'] > 0 && $me['tournament'] == 0 && $admin['tournament'] == 1) : ?>
|
||||
<form method=post action=c_tournament.php>
|
||||
<tr>
|
||||
<td colspan=8><button type="button" class="btn btn-secondary" onclick='location.reload()'>갱신</button><button type="submit" class="btn btn-sammo-base2" onclick='return confirm("참가비 금<?= $admin['develcost'] ?>이 필요합니다. 참가하시겠습니까?")'>참가</button><input type='hidden' name='btn' value='참가'/></td>
|
||||
|
||||
+2
-2
@@ -112,7 +112,7 @@ function GetImageURL($imgsvr, $filepath = '')
|
||||
function checkLimit($refreshScore = null)
|
||||
{
|
||||
$session = Session::getInstance();
|
||||
if ($session->userGrade >= 4) {
|
||||
if ($session->userGrade >= 6) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1009,7 +1009,7 @@ function increaseRefresh($type = "", $cnt = 1)
|
||||
$isunited = $gameStor->isunited;
|
||||
$opentime = $gameStor->opentime;
|
||||
|
||||
if ($userGrade == 6) {
|
||||
if ($userGrade >= 6) {
|
||||
return;
|
||||
}
|
||||
if ($isunited == 2) {
|
||||
|
||||
+2
-2
@@ -7,10 +7,10 @@ include "func.php";
|
||||
|
||||
$session = Session::requireLogin();
|
||||
|
||||
if ($session->userGrade < 5) {
|
||||
if ($session->userGrade < 6) {
|
||||
die('관리자 아님');
|
||||
}
|
||||
if ($session->userGrade == 5) {
|
||||
if ($session->userGrade == 6) {
|
||||
die('DB 리셋 권한을 가지고 있지 않습니다.');
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ else{
|
||||
$availableNextCall = $session->availableNextCallGetCityList??'2000-01-01 00:00:00';
|
||||
$now = new \DateTimeImmutable();
|
||||
|
||||
if($now <= new \DateTimeImmutable($availableNextCall) && $session->userGrade < 5){
|
||||
if($now <= new \DateTimeImmutable($availableNextCall) && $session->userGrade < 6){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>"도시 목록은 10초에 한번 갱신 가능합니다.\n다음 시간 : ".$availableNextCall
|
||||
|
||||
@@ -8,7 +8,7 @@ include('func.php');
|
||||
|
||||
$session = Session::requireLogin([])->setReadOnly();
|
||||
|
||||
if(Session::getInstance()->userGrade < 5){
|
||||
if(Session::getInstance()->userGrade < 6){
|
||||
Json::die([
|
||||
'reason'=>'권한이 부족합니다.'
|
||||
]);
|
||||
|
||||
@@ -1,430 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace sammo;
|
||||
|
||||
use sammo\DTO\VoteInfo;
|
||||
use sammo\Enums\GeneralQueryMode;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
|
||||
$session = Session::requireLogin()->loginGame()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
increaseRefresh("메인", 1);
|
||||
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
|
||||
if (!$userID) {
|
||||
header('Location:..');
|
||||
die();
|
||||
}
|
||||
|
||||
//턴 실행.
|
||||
TurnExecutionHelper::executeAllCommand();
|
||||
|
||||
if (!$session->isGameLoggedIn()) {
|
||||
header('Location:..');
|
||||
die();
|
||||
}
|
||||
|
||||
$me = $db->queryFirstRow(
|
||||
'SELECT no,refresh_score,turntime,newmsg,newvote,`officer_level` FROM `general`
|
||||
LEFT JOIN general_access_log AS l ON `general`.no = l.general_id WHERE owner = %i',
|
||||
$userID
|
||||
);
|
||||
|
||||
//그새 사망이면
|
||||
if ($me === null) {
|
||||
$session->logoutGame();
|
||||
header('Location: ../');
|
||||
die();
|
||||
}
|
||||
|
||||
$gameStor->cacheAll(true);
|
||||
|
||||
if ($me['newmsg'] == 1 || $me['newvote'] == 1) {
|
||||
$db->update('general', [
|
||||
'newmsg' => 0,
|
||||
'newvote' => 0
|
||||
], 'owner=%i', $userID);
|
||||
}
|
||||
|
||||
$plock = boolval($db->queryFirstField('SELECT plock FROM plock WHERE `type`="GAME" LIMIT 1'));
|
||||
|
||||
$limitState = checkLimit($me['refresh_score']);
|
||||
if ($limitState >= 2) {
|
||||
printLimitMsg($me['turntime']);
|
||||
exit();
|
||||
}
|
||||
|
||||
$generalObj = General::createObjFromDB($me['no'], null, GeneralQueryMode::FullWithAccessLog);
|
||||
$generalObj->setRawCity($db->queryFirstRow('SELECT * FROM city WHERE city = %i', $generalObj->getCityID()));
|
||||
$scenario = $gameStor->scenario_text;
|
||||
|
||||
$nationID = $generalObj->getNationID();
|
||||
if ($nationID) {
|
||||
$nationStor = KVStorage::getStorage($db, $nationID, 'nation_env');
|
||||
$nationStor->cacheAll();
|
||||
}
|
||||
|
||||
if ($gameStor->extended_general == 0) {
|
||||
$extend = "표준";
|
||||
} else {
|
||||
$extend = "확장";
|
||||
}
|
||||
if ($gameStor->fiction == 0) {
|
||||
$fiction = "사실";
|
||||
} else {
|
||||
$fiction = "가상";
|
||||
}
|
||||
if ($gameStor->npcmode == 0) {
|
||||
$npcmode = "불가능";
|
||||
} else if ($gameStor->npcmode == 1) {
|
||||
$npcmode = "가능";
|
||||
} else {
|
||||
$npcmode = "선택 생성";
|
||||
}
|
||||
$color = "cyan";
|
||||
$serverName = UniqueConst::$serverName;
|
||||
$serverCnt = $gameStor->server_cnt;
|
||||
|
||||
$auctionCount = $db->queryFirstField('SELECT count(*) FROM ng_auction WHERE finished = 0');
|
||||
$isTournamentActive = $gameStor->tournament > 0;
|
||||
$isTournamentApplicationOpen = $gameStor->tournament == 1;
|
||||
$isBettingActive = $gameStor->tournament == 6;
|
||||
|
||||
$myNationStatic = getNationStaticInfo($generalObj->getNationID());
|
||||
$nationColorType = substr($myNationStatic['color'] ?? '#000000', 1);
|
||||
|
||||
$autorunUser = ($gameStor->autorun_user) ?? [];
|
||||
$otherTextInfo = [];
|
||||
|
||||
if ($gameStor->join_mode == 'onlyRandom') {
|
||||
$otherTextInfo[] = '랜덤 임관 전용';
|
||||
}
|
||||
if ($autorunUser['limit_minutes'] ?? false) {
|
||||
$otherTextInfo[] = getAutorunInfo($autorunUser);
|
||||
}
|
||||
|
||||
if (!$otherTextInfo) {
|
||||
$otherTextInfo = '표준';
|
||||
} else {
|
||||
$otherTextInfo = join(', ', $otherTextInfo);
|
||||
}
|
||||
|
||||
$lastVoteID = $gameStor->lastVote;
|
||||
$lastVote = null;
|
||||
if ($lastVoteID) {
|
||||
$voteStor = KVStorage::getStorage($db, 'vote');
|
||||
$lastVote = VoteInfo::fromArray($voteStor->getValue("vote_{$lastVoteID}"));
|
||||
if ($lastVote->endDate && $lastVote->endDate < TimeUtil::now()) {
|
||||
$lastVote = null;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title><?= $serverName ?>: 메인</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="color-scheme" content="dark">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=500" />
|
||||
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||
<?= WebUtil::printJS('d_shared/base_map.js') ?>
|
||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||
<?= WebUtil::printDist('vue', 'v_main', true) ?>
|
||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||
<?= WebUtil::printCSS('css/map.css') ?>
|
||||
<?= WebUtil::printStaticValues([
|
||||
//deprecated, staticValues를 이용할 것
|
||||
'serverName' => $serverName,
|
||||
'serverCnt' => $serverCnt,
|
||||
'serverNick' => DB::prefix(),
|
||||
'serverID' => UniqueConst::$serverID,
|
||||
'maxTurn' => GameConst::$maxTurn,
|
||||
'maxPushTurn' => 12,
|
||||
'serverNow' => TimeUtil::now(false),
|
||||
'lastExecuted' => $gameStor->turntime,
|
||||
'isLocked' => $plock,
|
||||
'isTournamentActive' => $isTournamentActive,
|
||||
'isBettingActive' => $isBettingActive,
|
||||
'staticValues' => [
|
||||
'serverName' => $serverName,
|
||||
'serverCnt' => $serverCnt,
|
||||
'serverNick' => DB::prefix(),
|
||||
'serverID' => UniqueConst::$serverID,
|
||||
'maxTurn' => GameConst::$maxTurn,
|
||||
'maxPushTurn' => 12,
|
||||
'serverNow' => TimeUtil::now(false),
|
||||
'lastExecuted' => $gameStor->turntime,
|
||||
'isLocked' => $plock,
|
||||
'isTournamentActive' => $isTournamentActive,
|
||||
'isBettingActive' => $isBettingActive,
|
||||
'mapName' => GameConst::$mapName,
|
||||
'unitSet' => GameConst::$unitSet,
|
||||
]
|
||||
]) ?>
|
||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.1/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body class="img_back sam-color-<?= $nationColorType ?>">
|
||||
<div id="container" class="bg0">
|
||||
<div class="row toolbars gx-0">
|
||||
<div class="buttonPlate"><?= allButton($gameStor->npcmode == 1) ?></button></div>
|
||||
</div>
|
||||
<div class="tb_layout row gx-0">
|
||||
<div id="server_title" class="row py-2 center">
|
||||
<h3>삼국지 모의전투 HiDCHe <?= $serverName . $serverCnt ?>기 <span class="avoid-wrap">(<font color=cyan><?= $scenario ?></font>)</span></h3>
|
||||
</div>
|
||||
|
||||
<div class="row center gx-0">
|
||||
<div class="s-border-t col py-2 col-8 col-lg-4" style="color:<?= $color ?>;">
|
||||
<?= $scenario ?>
|
||||
</div>
|
||||
<div class="s-border-t col py-2 col-4 col-lg-2" style="color:<?= $color ?>;">
|
||||
NPC 수, 상성 : <?= $extend ?>,<?= $fiction ?>
|
||||
</div>
|
||||
<div class="s-border-t col py-2 col-4 col-lg-2" style="color:<?= $color ?>;">
|
||||
NPC선택 : <?= $npcmode ?>
|
||||
</div>
|
||||
<div class="s-border-t col py-2 col-4 col-lg-2" style="color:<?= $color ?>;">
|
||||
토너먼트 : <?= getTournamentTermText($gameStor->turnterm) ?>
|
||||
</div>
|
||||
<div class="s-border-t col py-2 col-4 col-lg-2" style="color:<?= $color ?>;">
|
||||
기타 설정: <?= $otherTextInfo ?>
|
||||
</div>
|
||||
|
||||
<div class="s-border-t col py-2 col-8 col-lg-4"><?= info(2) ?></div>
|
||||
<div class="s-border-t col py-2 col-4 col-lg-2">전체 접속자 수 : <?= $gameStor->online_user_cnt ?> 명</div>
|
||||
<div class="s-border-t col py-2 col-4 col-lg-2">턴당 갱신횟수 : <?= $gameStor->refreshLimit ?>회</div>
|
||||
<div class="s-border-t col py-2 col-8 col-lg-4"><?= info(3) ?></div>
|
||||
<div class="s-border-t py-2 col col-6 col-lg-4">
|
||||
<?php if ($isTournamentActive) : ?>
|
||||
↑<span style='color:cyan'><?= (['전력전', '통솔전', '일기토', '설전',])[$gameStor->tnmt_type] ?? '' ?> <?= getTournament($gameStor->tournament) ?> <?= getTournamentTime() ?></span>↑
|
||||
<?php else : ?>
|
||||
<span style='color:magenta'>현재 토너먼트 경기 없음</span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div class="s-border-t py-2 col col-6 col-lg-2">
|
||||
<div style="display:inline-block;"><?= $plock ? ("<span style='color:magenta;'>동작 시각: " . substr($gameStor->turntime, 5, 14) . "</span>") : ("<span style='color:cyan;'>동작 시각: " . substr($gameStor->turntime, 5, 14) . "</span>") ?></div>
|
||||
</div>
|
||||
<div class="s-border-t py-2 col col-6 col-lg-2">
|
||||
<?php if ($auctionCount > 0) : ?>
|
||||
<span style='color:cyan'><?= $auctionCount ?>건</span> 거래 진행중
|
||||
<?php else : ?>
|
||||
<span style='color:magenta'>진행중 거래 없음</span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div class="s-border-t py-2 col col-6 col-lg-4 vote-cell">
|
||||
<?php
|
||||
?>
|
||||
<?php if ($lastVote === null) : ?>
|
||||
<span style='color:magenta'>진행중 설문 없음</span>
|
||||
<?php else : ?>
|
||||
<span style='color:cyan'>설문 진행중</span> : <span><?= $lastVote->title ?></span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row gx-0">
|
||||
<div class="col s-border-t px-2 py-2">접속중인 국가: <?= $gameStor->online_nation ?></div>
|
||||
</div>
|
||||
<div class="row gx-0">
|
||||
<div class="col s-border-t px-2 py-2">운영자 메세지 : <span style='color:yellow;'><?= $gameStor->msg ?></span></div>
|
||||
</div>
|
||||
<div class="row gx-0">
|
||||
<div class="col s-border-t py-2" id="nation-msg-position">
|
||||
<div class="px-2">【 국가방침 】</div>
|
||||
<div id='nation-msg-box'>
|
||||
<div id='nation-msg'><?= nationMsg($generalObj) ?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row gx-0">
|
||||
<div class="col s-border-t px-2 py-2">
|
||||
【 접속자 】<?= onlinegen($generalObj) ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php if ($session->userGrade >= 5) : ?>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<a href='_admin1.php' target='_blank'><button type='button'>게임관리</button></a>
|
||||
<a href='_admin2.php' target='_blank'><button type='button'>회원관리</button></a>
|
||||
<a href='_admin4.php' target='_blank'><button type='button'>멀티관리</button></a>
|
||||
<a href='_admin5.php' target='_blank'><button type='button'>일제정보</button></a>
|
||||
<a href='_admin7.php' target='_blank'><button type='button'>로그정보</button></a>
|
||||
<a href='_admin8.php' target='_blank'><button type='button'>외교정보</button></a>
|
||||
<a href='_119.php' target='_blank'><button type='button'>119</button></a>
|
||||
</div>
|
||||
</div>
|
||||
<?php elseif ($session->userGrade == 4) : ?>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<a href='_119.php' target='_blank'><button type='button'>119</button></a>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<div id="map_view" class="gx-0">
|
||||
<div id="mapZone" class="view-item"><?= getMapHtml() ?></div>
|
||||
<div class="view-item" id="reservedCommandZone">
|
||||
<div id="reservedCommandList"></div>
|
||||
<div id="actionMiniPlate" class="gx-0 row">
|
||||
<div class="col">
|
||||
<div class="gx-1 row">
|
||||
<div class="col-8 d-grid"><button type='button' class='btn btn-sammo-base2 refreshPage'>갱 신</button></div>
|
||||
<div class="col-4 d-grid"><button type='button' class='btn btn-sammo-base2' onclick="location.replace('../')">로비로</button></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="cityInfo" class="view-item" style="border:none;text-align:center;"><?= cityInfo($generalObj) ?></div>
|
||||
<div id="nation-position"><?php myNationInfo($generalObj); ?></div>
|
||||
<div id="general-position"><?php generalInfo($generalObj); ?></div>
|
||||
<div id="generalCommandButton" class="row gx-0">
|
||||
<div class="buttonPlate bg2">
|
||||
?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="actionMiniPlateSub" class="gx-0 row">
|
||||
<div class="col">
|
||||
<div class="gx-1 row">
|
||||
<div class="col-3 d-grid"><button type='button' class="btn btn-dark" onclick="scrollHardTo('reservedCommandList')">명령으로</button></div>
|
||||
<div class="col-5 d-grid"><button type='button' class='btn btn-sammo-base2 refreshPage'>갱 신</button></div>
|
||||
<div class="col-4 d-grid"><button type='button' class='btn btn-sammo-base2' onclick="location.replace('../')">로비로</button></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row gx-0">
|
||||
<div class="col-lg-6" id="general_public_record-position">
|
||||
<div class="bg1 center s-border-tb"><b>장수 동향</b></div>
|
||||
<div id="general_public_record" style="text-align:left;"><?= formatHistoryToHTML(getGlobalActionLogRecent(15)) ?></div>
|
||||
</div>
|
||||
<div class="col-lg-6" id="general_log-position">
|
||||
<div class="bg1 center s-border-tb"><b>개인 기록</b></div>
|
||||
<div id="general_log" style="text-align:left;"><?= formatHistoryToHTML(getGeneralActionLogRecent($me['no'], 15)) ?></div>
|
||||
</div>
|
||||
<div class="col-12" id="world_history-position">
|
||||
<div class="bg1 center s-border-tb"><b>중원 정세</b></div>
|
||||
<div id="world_history" colspan=2 style="text-align:left;"><?= formatHistoryToHTML(getGlobalHistoryLogRecent(15)) ?></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row toolbars gx-0">
|
||||
<div class="buttonPlate"><?= allButton($gameStor->npcmode == 1) ?></div>
|
||||
|
||||
<div id="message_board" class="row gx-0">
|
||||
<div class="message_input_form bg0 gx-0 row">
|
||||
<div id="mailbox_list-col" class="col-6 col-lg-2 d-grid">
|
||||
<select id="mailbox_list" size="1" class="form-control bg-dark text-white">
|
||||
</select>
|
||||
</div>
|
||||
<div id="msg_input-col" class="col-12 col-lg-8 d-grid">
|
||||
<input type="text" id="msg_input" maxlength="99" class="form-control">
|
||||
</div>
|
||||
<div id="msg_submit-col" class="col-6 col-lg-2 d-grid"><button id="msg_submit" class="btn btn-primary">서신전달&갱신</button></div>
|
||||
</div>
|
||||
<div class="col-lg-6 board_side bg0"><a id="public_talk_position"></a>
|
||||
<div class="board_header bg0">전체 메시지(최고99자)</div>
|
||||
<section class="public_message">
|
||||
<div class="d-grid"><button type="button" class="load_old_message btn btn-secondary" data-msg_type="public">이전 메시지 불러오기</button></div>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-lg-6 board_side bg0"><a id="national_talk_position"></a>
|
||||
<div class="board_header bg0">국가 메시지(최고99자)</div>
|
||||
<section class="national_message">
|
||||
<div class="d-grid"><button type="button" class="load_old_message btn btn-secondary" data-msg_type="national">이전 메시지 불러오기</button></div>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-lg-6 board_side bg0"><a id="private_talk_position"></a>
|
||||
<div class="board_header bg0">개인 메시지(최고99자)</div>
|
||||
<section class="private_message">
|
||||
<div class="d-grid"><button type="button" class="load_old_message btn btn-secondary" data-msg_type="private">이전 메시지 불러오기</button></div>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-lg-6 board_side bg0"><a id="diplomacy_talk_position"></a>
|
||||
<div class="board_header bg0">외교 메시지(최고99자)</div>
|
||||
<section class="diplomacy_message">
|
||||
<div class="d-grid"><button type="button" class="load_old_message btn btn-secondary" data-msg_type="diplomacy">이전 메시지 불러오기</button></div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row toolbars gx-0">
|
||||
<div class="buttonPlate"><?= allButton($gameStor->npcmode == 1) ?></div><?= banner() ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
if ($limitState == 1) {
|
||||
MessageBox("접속제한이 얼마 남지 않았습니다!");
|
||||
}
|
||||
if ($me['newmsg'] == 1) {
|
||||
MessageBox("새로운 서신이 도착했습니다!");
|
||||
}
|
||||
if ($me['newvote'] == 1) {
|
||||
$develcost = $gameStor->develcost * 5;
|
||||
MessageBox("설문조사에 참여하시면 금{$develcost}과 유니크템을 드립니다! (우측 상단 설문조사 메뉴)");
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand fixed-bottom navbar-dark bg-dark d-sm-block d-lg-none p-0" id="navbar500">
|
||||
<div class="container-fluid px-0">
|
||||
<div class="collapse navbar-collapse">
|
||||
<ul class="navbar-nav me-auto mx-auto">
|
||||
<li class="nav-item dropup">
|
||||
<div class="dropdown-toggle text-white btn btn-sammo-base2" id="navbarGlobal" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
외부 메뉴
|
||||
</div>
|
||||
<ul class="dropdown-menu dropdown-menu-start" aria-labelledby="navbarGlobal" id="navbarGlobalItems">
|
||||
<?= allButton($gameStor->npcmode == 1, ['btnBegin' => '<li>', 'btnEnd' => '</li>', 'btnClass' => 'dropdown-item']) ?>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="nav-item dropup">
|
||||
<div class="dropdown-toggle btn btn-sammo-nation" id="navbarNation" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
국가 메뉴
|
||||
</div>
|
||||
<ul class="dropdown-menu" aria-labelledby="navbarNation" id="navbarNationItems">
|
||||
</ul>
|
||||
</li>
|
||||
<li class="nav-item dropup">
|
||||
<div class="dropdown-toggle text-white btn btn-dark" id="navbarQuick" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
빠른 이동
|
||||
</div>
|
||||
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown" id="navbarQuickItems">
|
||||
<li><a class="dropdown-item disabled">국가 정보</a></button></li>
|
||||
<hr class="dropdown-divider">
|
||||
</hr>
|
||||
<li><button type="button" onclick="scrollHardTo('nation-msg-position')" class="dropdown-item">방침</button></li>
|
||||
<li><button type="button" onclick="scrollHardTo('reservedCommandList')" class="dropdown-item">명령</button></li>
|
||||
<li><button type="button" onclick="scrollHardTo('nation-position')" class="dropdown-item">국가</button></li>
|
||||
<li><button type="button" onclick="scrollHardTo('general-position')" class="dropdown-item">장수</button></li>
|
||||
<li><button type="button" onclick="scrollHardTo('cityInfo')" class="dropdown-item">도시</button></li>
|
||||
<li><a class="dropdown-item disabled">동향 정보</a></button></li>
|
||||
<hr class="dropdown-divider">
|
||||
</hr>
|
||||
<li><button type="button" onclick="scrollHardTo('mapZone')" class="dropdown-item">지도</button></li>
|
||||
<li><button type="button" onclick="scrollHardTo('general_public_record-position')" class="dropdown-item">동향</button></li>
|
||||
<li><button type="button" onclick="scrollHardTo('general_log-position')" class="dropdown-item">개인</button></li>
|
||||
<li><button type="button" onclick="scrollHardTo('world_history-position')" class="dropdown-item">정세</button></li>
|
||||
<li><span> </span></li>
|
||||
<li><a class="dropdown-item disabled">메시지</a></button></li>
|
||||
<hr class="dropdown-divider">
|
||||
</hr>
|
||||
<li><button type="button" onclick="scrollHardTo('public_talk_position')" class="dropdown-item">전체</button></li>
|
||||
<li><button type="button" onclick="scrollHardTo('national_talk_position')" class="dropdown-item">국가</button></li>
|
||||
<li><button type="button" onclick="scrollHardTo('private_talk_position')" class="dropdown-item">개인</button></li>
|
||||
<li><button type="button" onclick="scrollHardTo('diplomacy_talk_position')" class="dropdown-item">외교</button></li>
|
||||
<li><button type='button' class='btn btn-sammo-base2' onclick="location.replace('../')">로비로</button></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="refreshPage btn btn-sammo-base2 text-white" role="button">갱신</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -54,7 +54,7 @@ class GeneralList extends \sammo\BaseAPI
|
||||
$availableNextCall = $session->availableNextCallGetGeneralList ?? '2000-01-01 00:00:00';
|
||||
$now = new \DateTimeImmutable();
|
||||
|
||||
if ($now <= new \DateTimeImmutable($availableNextCall) && $session->userGrade < 5) {
|
||||
if ($now <= new \DateTimeImmutable($availableNextCall) && $session->userGrade < 6) {
|
||||
return "장수 리스트는 10초에 한번 갱신 가능합니다.\n다음 시간 : " . $availableNextCall;
|
||||
}
|
||||
|
||||
|
||||
@@ -94,6 +94,10 @@ class ResetStat extends \sammo\BaseAPI
|
||||
}
|
||||
$userLogger = new UserLogger($userID);
|
||||
|
||||
if($general->getNPCType() != 0){
|
||||
return 'NPC는 능력치 초기화를 할 수 없습니다.';
|
||||
}
|
||||
|
||||
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
|
||||
@@ -50,7 +50,7 @@ class UploadImage extends \sammo\BaseAPI
|
||||
}
|
||||
|
||||
$extension = ltrim($contentType, 'image/');
|
||||
$validExtensions = ['png', 'jpeg', 'jpg', 'gif', 'webp'];
|
||||
$validExtensions = ['png', 'jpeg', 'jpg', 'gif', 'webp', 'avif'];
|
||||
if (!in_array(strtolower($extension), $validExtensions)) {
|
||||
return '지원하지 않는 이미지 파일입니다: ' . $contentType;
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ use \sammo\Constraint\Constraint;
|
||||
use \sammo\Constraint\ConstraintHelper;
|
||||
use sammo\CityConst;
|
||||
use sammo\Enums\InheritanceKey;
|
||||
use sammo\Enums\PenaltyKey;
|
||||
|
||||
use function sammo\refreshNationStaticInfo;
|
||||
use function sammo\getAllNationStaticInfo;
|
||||
@@ -45,6 +46,7 @@ class che_거병 extends Command\GeneralCommand{
|
||||
ConstraintHelper::BeNeutral(),
|
||||
ConstraintHelper::BeOpeningPart($relYear+1),
|
||||
ConstraintHelper::AllowJoinAction(),
|
||||
ConstraintHelper::NoPenalty(PenaltyKey::NoFoundNation),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,8 @@ use \sammo\Constraint\Constraint;
|
||||
use \sammo\Constraint\ConstraintHelper;
|
||||
use sammo\Enums\GeneralQueryMode;
|
||||
use sammo\Enums\InheritanceKey;
|
||||
use sammo\Enums\PenaltyKey;
|
||||
use sammo\Json;
|
||||
use sammo\StaticEventHandler;
|
||||
|
||||
class che_선양 extends Command\GeneralCommand
|
||||
@@ -111,6 +113,14 @@ class che_선양 extends Command\GeneralCommand
|
||||
$date = $general->getTurnTime($general::TURNTIME_HM);
|
||||
|
||||
$destGeneral = $this->destGeneralObj;
|
||||
$destGeneralPenaltyList = JSON::decode($destGeneral->getVar('penalty'));
|
||||
$penaltyKeyList = [PenaltyKey::NoChief, PenaltyKey::NoFoundNation, PenaltyKey::NoAmbassador];
|
||||
foreach ($penaltyKeyList as $penaltyKey) {
|
||||
if (key_exists($penaltyKey->value, $destGeneralPenaltyList)) {
|
||||
$general->getLogger()->pushGeneralActionLog("선양할 수 없는 장수입니다.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$generalName = $general->getName();
|
||||
$destGeneralName = $destGeneral->getName();
|
||||
|
||||
@@ -256,8 +256,11 @@ class che_징병 extends Command\GeneralCommand
|
||||
$ownCities = [];
|
||||
$ownRegions = [];
|
||||
|
||||
foreach (DB::db()->query('SELECT city, region from city where nation = %i', $general->getNationID()) as $city) {
|
||||
$ownCities[$city['city']] = 1;
|
||||
foreach (DB::db()->query('SELECT city, region, secu, level from city where nation = %i', $general->getNationID()) as $city) {
|
||||
$ownCities[$city['city']] = [
|
||||
'secu' => $city['secu'],
|
||||
'level' => $city['level'],
|
||||
];
|
||||
$ownRegions[$city['region']] = 1;
|
||||
}
|
||||
|
||||
@@ -273,23 +276,19 @@ class che_징병 extends Command\GeneralCommand
|
||||
'values' => [],
|
||||
];
|
||||
|
||||
$crewTypes = [];
|
||||
foreach (GameUnitConst::byType($armType) as $unit) {
|
||||
$crewObj = new \stdClass;
|
||||
|
||||
$crewObj->id = $unit->id;
|
||||
$crewObj->reqTech = $unit->reqTech;
|
||||
$crewObj->reqYear = $unit->reqYear;
|
||||
/** @var ?\sammo\GameUnitConstraints\ReqTech */
|
||||
$reqTechObj = $unit->reqConstraints['reqTech'] ?? null;
|
||||
$crewObj->reqTech = $reqTechObj ? $reqTechObj->reqTech : 0;
|
||||
|
||||
/*
|
||||
if ($unit->reqTech == 0) {
|
||||
$crewObj->bgcolor = 'green';
|
||||
} else {
|
||||
$crewObj->bgcolor = 'limegreen';
|
||||
}
|
||||
*/
|
||||
/** @var ?\sammo\GameUnitConstraint\ReqMinRelYear */
|
||||
$reqMinRelYearObj = $unit->reqConstraints['reqMinRelYear'] ?? null;
|
||||
$crewObj->reqYear = $reqMinRelYearObj ? $reqMinRelYearObj->reqMinRelYear : 0;
|
||||
|
||||
$crewObj->notAvailable = !$unit->isValid($ownCities, $ownRegions, $relativeYear, $tech);
|
||||
$crewObj->notAvailable = !$unit->isValid($general, $ownCities, $ownRegions, $relativeYear, $tech);
|
||||
|
||||
$crewObj->baseRice = $general->onCalcDomestic($this->getName(), 'rice', $unit->riceWithTech($tech), ['armType' => $unit->armType]);
|
||||
$crewObj->baseCost = $general->onCalcDomestic($this->getName(), 'cost', $unit->costWithTech($tech), ['armType' => $unit->armType]);
|
||||
|
||||
@@ -33,12 +33,12 @@ class NoPenalty extends Constraint{
|
||||
/** @var PenaltyKey */
|
||||
$checkKey = $this->arg;
|
||||
|
||||
$peneltyList = JSON::decode($this->general['penalty']);
|
||||
if(!key_exists($checkKey->value, $peneltyList)){
|
||||
$penaltyList = JSON::decode($this->general['penalty']);
|
||||
if(!key_exists($checkKey->value, $penaltyList)){
|
||||
return true;
|
||||
}
|
||||
|
||||
$this->reason = "징계 사유: {$peneltyList[$checkKey->value]}";
|
||||
$this->reason = "징계 사유: {$penaltyList[$checkKey->value]}";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
+333
-401
@@ -1,6 +1,13 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
use sammo\GameUnitConstraint\Impossible;
|
||||
use sammo\GameUnitConstraint\ReqTech;
|
||||
use sammo\GameUnitConstraint\ReqCities;
|
||||
use sammo\GameUnitConstraint\ReqRegions;
|
||||
use sammo\GameUnitConstraint\ReqMinRelYear;
|
||||
|
||||
|
||||
class GameUnitConstBase{
|
||||
protected function __construct(){
|
||||
|
||||
@@ -21,8 +28,6 @@ class GameUnitConstBase{
|
||||
|
||||
protected static $constID = [];
|
||||
protected static $constName = [];
|
||||
protected static $constCity = [];
|
||||
protected static $constRegion = [];
|
||||
protected static $constType = [];
|
||||
|
||||
protected static $typeData = [
|
||||
@@ -33,319 +38,322 @@ class GameUnitConstBase{
|
||||
self::T_SIEGE => '차병',
|
||||
];
|
||||
|
||||
protected static $_buildData = [
|
||||
[
|
||||
1000, self::T_CASTLE, '성벽',
|
||||
100, 100, 7, 0, 0, 99, 9,
|
||||
999999, null, null, 999999,
|
||||
[],//성벽은 공격할 수 없다.
|
||||
[self::T_FOOTMAN=>1.2],
|
||||
['성벽입니다.','생성할 수 없습니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
|
||||
[
|
||||
1100, self::T_FOOTMAN, '보병',
|
||||
100, 150, 7, 10, 0, 9, 9,
|
||||
0, null, null, 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['표준적인 보병입니다.','보병은 방어특화이며,','상대가 회피하기 어렵습니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1101, self::T_FOOTMAN, '청주병',
|
||||
100, 200, 7, 10, 0, 10, 11,
|
||||
1000, null, ['중원'], 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['저렴하고 튼튼합니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1102, self::T_FOOTMAN, '수병',
|
||||
150, 150, 7, 10, 0, 11, 10,
|
||||
1000, null, ['오월'], 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['저렴하고 강력합니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1103, self::T_FOOTMAN, '자객병',
|
||||
100, 150, 8, 20, 0, 10, 10,
|
||||
2000, ['저'], null, 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['은밀하고 날쌥니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1104, self::T_FOOTMAN, '근위병',
|
||||
150, 200, 7, 10, 0, 12, 12,
|
||||
3000, ['낙양'], null, 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['최강의 보병입니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1105, self::T_FOOTMAN, '등갑병',
|
||||
100, 225, 7, 5, 0, 13, 10,
|
||||
1000, null, ['남중'], 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['등갑을 두른 보병입니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1106, self::T_FOOTMAN, '백이병',
|
||||
175, 175, 7, 5, 0, 13, 11,
|
||||
3000, ['성도'], null, 0,
|
||||
[self::T_ARCHER=>1.1, self::T_CAVALRY=>0.9, self::T_SIEGE=>1.1],
|
||||
[self::T_ARCHER=>0.9, self::T_CAVALRY=>1.1, self::T_SIEGE=>0.9],
|
||||
['정예 보병입니다. 불리한 싸움도 버텨냅니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
|
||||
[
|
||||
1200, self::T_ARCHER, '궁병',
|
||||
100, 100, 7, 10, 0, 10, 10,
|
||||
0, null, null, 0,
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
|
||||
['표준적인 궁병입니다.','궁병은 선제사격을 하는 병종입니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1201, self::T_ARCHER, '궁기병',
|
||||
100, 100, 8, 20, 0, 11, 12,
|
||||
1000, null, ['동이'], 0,
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.9, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.1, self::T_SIEGE=>0.8],
|
||||
['말을 타고 잘 피합니다. 특히 다른 궁병보다 보병에게 조금 더 강합니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1202, self::T_ARCHER, '연노병',
|
||||
150, 100, 8, 10, 0, 12, 11,
|
||||
1000, null, ['서촉'], 0,
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
|
||||
['화살을 연사합니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1203, self::T_ARCHER, '강궁병',
|
||||
150, 150, 7, 10, 0, 13, 13,
|
||||
3000, ['양양'], null, 0,
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
|
||||
['강건한 궁병입니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1204, self::T_ARCHER, '석궁병',
|
||||
200, 100, 7, 10, 0, 13, 13,
|
||||
3000, ['건업'], null, 0,
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
|
||||
['강력한 화살을 쏩니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
|
||||
[
|
||||
1300, self::T_CAVALRY, '기병',
|
||||
150, 100, 7, 5, 0, 11, 11,
|
||||
0, null, null, 0,
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['표준적인 기병입니다.','기병은 공격특화입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1301, self::T_CAVALRY, '백마병',
|
||||
200, 100, 7, 5, 0, 12, 13,
|
||||
1000, null, ['하북'], 0,
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['백마의 위용을 보여줍니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1302, self::T_CAVALRY, '중장기병',
|
||||
150, 150, 7, 5, 0, 13, 12,
|
||||
1000, null, ['서북'], 0,
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['갑주를 두른 기병입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1303, self::T_CAVALRY, '돌격기병',
|
||||
200, 100, 8, 5, 0, 13, 11,
|
||||
2000, ['흉노'], null, 0,
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['저돌적으로 공격합니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1304, self::T_CAVALRY, '철기병',
|
||||
100, 200, 7, 5, 0, 11, 13,
|
||||
2000, ['강'], null, 0,
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['철갑을 두른 기병입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1305, self::T_CAVALRY, '수렵기병',
|
||||
150, 100, 8, 15, 0, 12, 12,
|
||||
2000, ['산월'], null, 0,
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['날쎄고 빠른 기병입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1306, self::T_CAVALRY, '맹수병',
|
||||
250, 175, 6, 0, 0, 16, 16,
|
||||
2000, ['남만'], null, 0,
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['어느 누구보다 강력합니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1307, self::T_CAVALRY, '호표기병',
|
||||
200, 150, 7, 5, 0, 14, 14,
|
||||
3000, ['허창'], null, 0,
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['정예 기병입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
|
||||
[
|
||||
1400, self::T_WIZARD, '귀병',
|
||||
80, 80, 7, 5, 0.5, 9, 9,
|
||||
0, null, null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['계략을 사용하는 병종입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1401, self::T_WIZARD, '신귀병',
|
||||
80, 80, 7, 20, 0.6, 10, 10,
|
||||
1000, null, ['초'], 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['신출귀몰한 귀병입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1402, self::T_WIZARD, '백귀병',
|
||||
80, 130, 7, 5, 0.6, 9, 11,
|
||||
2000, ['오환'], null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['저렴하고 튼튼합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1403, self::T_WIZARD, '흑귀병',
|
||||
130, 80, 7, 5, 0.6, 11, 9,
|
||||
2000, ['왜'], null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['저렴하고 강력합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1404, self::T_WIZARD, '악귀병',
|
||||
130, 130, 7, 0, 0.6, 12, 12,
|
||||
3000, ['장안'], null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['백병전에도 능숙합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1405, self::T_WIZARD, '남귀병',
|
||||
60, 60, 7, 10, 0.8, 8, 8,
|
||||
1000, null, null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['전투를 포기하고 계략에 몰두합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1406, self::T_WIZARD, '황귀병',
|
||||
110, 110, 7, 0, 0.8, 13, 10,
|
||||
3000, ['낙양'], null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['고도로 훈련된 귀병입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1407, self::T_WIZARD, '천귀병',
|
||||
80, 130, 7, 15, 0.6, 11, 12,
|
||||
3000, ['성도'], null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['갑주를 두른 귀병입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1408, self::T_WIZARD, '마귀병',
|
||||
130, 80, 7, 15, 0.6, 12, 11,
|
||||
3000, ['업'], null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['날카로운 무기를 가진 귀병입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
|
||||
[
|
||||
1500, self::T_SIEGE, '정란',
|
||||
100, 100, 6, 0, 0, 14, 5,
|
||||
0, null, null, 3,
|
||||
[self::T_FOOTMAN=>1.25, self::T_ARCHER=>1.25, self::T_CAVALRY=>1.25, self::T_WIZARD=>1.25, self::T_CASTLE=>1.8, 1106=>1.112],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2, 1106=>1.067],
|
||||
['높은 구조물 위에서 공격합니다. 첫 공격은 성벽을 향합니다.'],
|
||||
['che_성벽부상무효'], ['che_선제사격시도', 'che_선제사격발동'], ['che_성벽선제']
|
||||
],
|
||||
[
|
||||
1501, self::T_SIEGE, '충차',
|
||||
150, 100, 6, 0, 0, 18, 5,
|
||||
1000, null, null, 3,
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>0.8, self::T_CAVALRY=>0.8, self::T_WIZARD=>0.8, self::T_CASTLE=>2.4],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2],
|
||||
['엄청난 위력으로 성벽을 부수어버립니다.'],
|
||||
['che_성벽부상무효'], null, null
|
||||
],
|
||||
[
|
||||
1502, self::T_SIEGE, '벽력거',
|
||||
150, 100, 6, 5, 0, 20, 5,
|
||||
3000, ['업'], null, 0,
|
||||
[self::T_FOOTMAN=>1.25, self::T_ARCHER=>1.25, self::T_CAVALRY=>1.25, self::T_WIZARD=>1.25, self::T_CASTLE=>1.8, 1106=>1.112],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2, 1106=>1.067],
|
||||
['상대에게 돌덩이를 날립니다. 첫 공격은 성벽을 향합니다.'],
|
||||
['che_성벽부상무효'], ['che_선제사격시도', 'che_선제사격발동'], ['che_성벽선제']
|
||||
],
|
||||
[
|
||||
1503, self::T_SIEGE, '목우',
|
||||
50, 200, 5, 0, 0, 15, 5,
|
||||
3000, ['성도'], null, 0,
|
||||
[self::T_FOOTMAN=>1, self::T_ARCHER=>1, self::T_CAVALRY=>1, self::T_WIZARD=>1, self::T_CASTLE=>1.8],
|
||||
[self::T_FOOTMAN=>1, self::T_ARCHER=>1, self::T_CAVALRY=>1, self::T_WIZARD=>1, 1106=>1],
|
||||
['상대를 저지하는 특수병기입니다.'],
|
||||
['che_성벽부상무효'], ['che_저지시도', 'che_저지발동'], null
|
||||
]
|
||||
];
|
||||
protected static function getBuildData(): array {
|
||||
return [
|
||||
[
|
||||
1000, self::T_CASTLE, '성벽',
|
||||
100, 100, 7, 0, 0, 99, 9,
|
||||
[new Impossible()],
|
||||
[], // 성벽은 공격할 수 없다.
|
||||
[self::T_FOOTMAN=>1.2],
|
||||
['성벽입니다.','생성할 수 없습니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
|
||||
[
|
||||
1100, self::T_FOOTMAN, '보병',
|
||||
100, 150, 7, 10, 0, 9, 9,
|
||||
[],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['표준적인 보병입니다.','보병은 방어특화이며,','상대가 회피하기 어렵습니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1101, self::T_FOOTMAN, '청주병',
|
||||
100, 200, 7, 10, 0, 10, 11,
|
||||
[new ReqTech(1000), new ReqRegions('중원')],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['저렴하고 튼튼합니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1102, self::T_FOOTMAN, '수병',
|
||||
150, 150, 7, 10, 0, 11, 10,
|
||||
[new ReqTech(1000), new ReqRegions('오월')],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['저렴하고 강력합니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1103, self::T_FOOTMAN, '자객병',
|
||||
100, 150, 8, 20, 0, 10, 10,
|
||||
[new ReqTech(2000), new ReqCities('저')],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['은밀하고 날쌥니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1104, self::T_FOOTMAN, '근위병',
|
||||
150, 200, 7, 10, 0, 12, 12,
|
||||
[new ReqTech(3000), new ReqCities('낙양')],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['최강의 보병입니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1105, self::T_FOOTMAN, '등갑병',
|
||||
100, 225, 7, 5, 0, 13, 10,
|
||||
[new ReqTech(1000), new ReqRegions('남중')],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['등갑을 두른 보병입니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1106, self::T_FOOTMAN, '백이병',
|
||||
175, 175, 7, 5, 0, 13, 11,
|
||||
[new ReqTech(3000), new ReqCities('성도')],
|
||||
[self::T_ARCHER=>1.1, self::T_CAVALRY=>0.9, self::T_SIEGE=>1.1],
|
||||
[self::T_ARCHER=>0.9, self::T_CAVALRY=>1.1, self::T_SIEGE=>0.9],
|
||||
['정예 보병입니다. 불리한 싸움도 버텨냅니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
|
||||
[
|
||||
1200, self::T_ARCHER, '궁병',
|
||||
100, 100, 7, 10, 0, 10, 10,
|
||||
[],
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
|
||||
['표준적인 궁병입니다.','궁병은 선제사격을 하는 병종입니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1201, self::T_ARCHER, '궁기병',
|
||||
100, 100, 8, 20, 0, 11, 12,
|
||||
[new ReqTech(1000), new ReqRegions('동이')],
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.9, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.1, self::T_SIEGE=>0.8],
|
||||
['말을 타고 잘 피합니다. 특히 다른 궁병보다 보병에게 조금 더 강합니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1202, self::T_ARCHER, '연노병',
|
||||
150, 100, 8, 10, 0, 12, 11,
|
||||
[new ReqTech(1000), new ReqRegions('서촉')],
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
|
||||
['화살을 연사합니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1203, self::T_ARCHER, '강궁병',
|
||||
150, 150, 7, 10, 0, 13, 13,
|
||||
[new ReqTech(3000), new ReqCities('양양')],
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
|
||||
['강건한 궁병입니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1204, self::T_ARCHER, '석궁병',
|
||||
200, 100, 7, 10, 0, 13, 13,
|
||||
[new ReqTech(3000), new ReqCities('건업')],
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
|
||||
['강력한 화살을 쏩니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
|
||||
[
|
||||
1300, self::T_CAVALRY, '기병',
|
||||
150, 100, 7, 5, 0, 11, 11,
|
||||
[],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['표준적인 기병입니다.','기병은 공격특화입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1301, self::T_CAVALRY, '백마병',
|
||||
200, 100, 7, 5, 0, 12, 13,
|
||||
[new ReqTech(1000), new ReqRegions('하북')],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['백마의 위용을 보여줍니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1302, self::T_CAVALRY, '중장기병',
|
||||
150, 150, 7, 5, 0, 13, 12,
|
||||
[new ReqTech(1000), new ReqRegions('서북')],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['갑주를 두른 기병입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1303, self::T_CAVALRY, '돌격기병',
|
||||
200, 100, 8, 5, 0, 13, 11,
|
||||
[new ReqTech(2000), new ReqCities('흉노')],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['저돌적으로 공격합니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1304, self::T_CAVALRY, '철기병',
|
||||
100, 250, 7, 5, 0, 11, 13,
|
||||
[new ReqTech(2000), new ReqCities('강')],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['철갑을 두른 기병입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1305, self::T_CAVALRY, '수렵기병',
|
||||
150, 100, 8, 15, 0, 12, 12,
|
||||
[new ReqTech(2000), new ReqCities('산월')],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['날쎄고 빠른 기병입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1306, self::T_CAVALRY, '맹수병',
|
||||
250, 175, 6, 0, 0, 16, 16,
|
||||
[new ReqTech(2000), new ReqCities('남만')],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['어느 누구보다 강력합니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1307, self::T_CAVALRY, '호표기병',
|
||||
200, 150, 7, 5, 0, 14, 14,
|
||||
[new ReqTech(3000), new ReqCities('허창')],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['정예 기병입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
|
||||
[
|
||||
1400, self::T_WIZARD, '귀병',
|
||||
80, 80, 7, 5, 0.5, 9, 9,
|
||||
[],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['계략을 사용하는 병종입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1401, self::T_WIZARD, '신귀병',
|
||||
80, 80, 7, 20, 0.6, 10, 10,
|
||||
[new ReqTech(1000), new ReqRegions('초')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['신출귀몰한 귀병입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1402, self::T_WIZARD, '백귀병',
|
||||
80, 130, 7, 5, 0.6, 9, 11,
|
||||
[new ReqTech(2000), new ReqCities('오환')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['저렴하고 튼튼합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1403, self::T_WIZARD, '흑귀병',
|
||||
130, 80, 7, 5, 0.6, 11, 9,
|
||||
[new ReqTech(2000), new ReqCities('왜')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['저렴하고 강력합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1404, self::T_WIZARD, '악귀병',
|
||||
130, 130, 7, 0, 0.6, 12, 12,
|
||||
[new ReqTech(3000), new ReqCities('장안')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['백병전에도 능숙합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1405, self::T_WIZARD, '남귀병',
|
||||
60, 60, 7, 10, 0.8, 8, 8,
|
||||
[new ReqTech(1000)],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['전투를 포기하고 계략에 몰두합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1406, self::T_WIZARD, '황귀병',
|
||||
110, 110, 7, 0, 0.8, 13, 10,
|
||||
[new ReqTech(3000), new ReqCities('낙양')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['고도로 훈련된 귀병입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1407, self::T_WIZARD, '천귀병',
|
||||
80, 130, 7, 15, 0.6, 11, 12,
|
||||
[new ReqTech(3000), new ReqCities('성도')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['갑주를 두른 귀병입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1408, self::T_WIZARD, '마귀병',
|
||||
130, 80, 7, 15, 0.6, 12, 11,
|
||||
[new ReqTech(3000), new ReqCities('업')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['날카로운 무기를 가진 귀병입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
|
||||
[
|
||||
1500, self::T_SIEGE, '정란',
|
||||
100, 100, 6, 0, 0, 14, 5,
|
||||
[new ReqMinRelYear(3)],
|
||||
[self::T_FOOTMAN=>1.25, self::T_ARCHER=>1.25, self::T_CAVALRY=>1.25, self::T_WIZARD=>1.25, self::T_CASTLE=>1.8, 1106=>1.112],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2, 1106=>1.067],
|
||||
['높은 구조물 위에서 공격합니다. 첫 공격은 성벽을 향합니다.'],
|
||||
['che_성벽부상무효'], ['che_선제사격시도', 'che_선제사격발동'], ['che_성벽선제']
|
||||
],
|
||||
[
|
||||
1501, self::T_SIEGE, '충차',
|
||||
150, 100, 6, 0, 0, 18, 5,
|
||||
[new ReqTech(1000), new ReqMinRelYear(3)],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>0.8, self::T_CAVALRY=>0.8, self::T_WIZARD=>0.8, self::T_CASTLE=>2.4],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2],
|
||||
['엄청난 위력으로 성벽을 부수어버립니다.'],
|
||||
['che_성벽부상무효'], null, null
|
||||
],
|
||||
[
|
||||
1502, self::T_SIEGE, '벽력거',
|
||||
150, 100, 6, 5, 0, 20, 5,
|
||||
[new ReqTech(3000), new ReqCities('업')],
|
||||
[self::T_FOOTMAN=>1.25, self::T_ARCHER=>1.25, self::T_CAVALRY=>1.25, self::T_WIZARD=>1.25, self::T_CASTLE=>1.8, 1106=>1.112],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2, 1106=>1.067],
|
||||
['상대에게 돌덩이를 날립니다. 첫 공격은 성벽을 향합니다.'],
|
||||
['che_성벽부상무효'], ['che_선제사격시도', 'che_선제사격발동'], ['che_성벽선제']
|
||||
],
|
||||
[
|
||||
1503, self::T_SIEGE, '목우',
|
||||
50, 200, 5, 0, 0, 15, 5,
|
||||
[new ReqTech(3000), new ReqCities('성도')],
|
||||
[self::T_FOOTMAN=>1, self::T_ARCHER=>1, self::T_CAVALRY=>1, self::T_WIZARD=>1, self::T_CASTLE=>1.8],
|
||||
[self::T_FOOTMAN=>1, self::T_ARCHER=>1, self::T_CAVALRY=>1, self::T_WIZARD=>1, 1106=>1],
|
||||
['상대를 저지하는 특수병기입니다.'],
|
||||
['che_성벽부상무효'], ['che_저지시도', 'che_저지발동'], null
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
public static function addGameUnit(GameUnitDetail $unitType){
|
||||
static::_generate();
|
||||
@@ -357,22 +365,6 @@ class GameUnitConstBase{
|
||||
static::$constType[$unitType->armType] = [];
|
||||
}
|
||||
static::$constType[$unitType->armType][] = $unitType;
|
||||
|
||||
foreach($unitType->reqCities as $reqCity){
|
||||
if(!key_exists($reqCity, static::$constCity)){
|
||||
static::$constCity[$reqCity] = [];
|
||||
}
|
||||
static::$constCity[$reqCity][] = $unitType;
|
||||
}
|
||||
|
||||
if($unitType->reqRegions){
|
||||
foreach($unitType->reqRegions as $reqRegion){
|
||||
if(!key_exists($reqRegion, static::$constRegion)){
|
||||
static::$constRegion[$reqRegion] = [];
|
||||
}
|
||||
static::$constRegion[$reqRegion][] = $unitType;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -400,22 +392,6 @@ class GameUnitConstBase{
|
||||
return static::$constName[$name]??null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \sammo\GameUnitDetail[]
|
||||
*/
|
||||
public static function byCity(int $city): array{
|
||||
static::_generate();
|
||||
return static::$constCity[$city]??[];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \sammo\GameUnitDetail[]
|
||||
*/
|
||||
public static function byRegion(int $region): array{
|
||||
static::_generate();
|
||||
return static::$constRegion[$region]??[];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return \sammo\GameUnitDetail[]
|
||||
@@ -435,17 +411,17 @@ class GameUnitConstBase{
|
||||
|
||||
protected static function _generate(){
|
||||
|
||||
if(static::$constID || static::$constName || static::$constCity || static::$constRegion || static::$constType){
|
||||
if(static::$constID || static::$constName || static::$constType){
|
||||
return;
|
||||
}
|
||||
|
||||
$constID = [];
|
||||
$constName = [];
|
||||
$constCity = [];
|
||||
$constRegion = [];
|
||||
$constType = [];
|
||||
|
||||
foreach(static::$_buildData as $rawUnit){
|
||||
$buildData = static::getBuildData();
|
||||
|
||||
foreach($buildData as $rawUnit){
|
||||
[
|
||||
$id,
|
||||
$armType,
|
||||
@@ -457,10 +433,7 @@ class GameUnitConstBase{
|
||||
$magicCoef,
|
||||
$cost,
|
||||
$rice,
|
||||
$reqTech,
|
||||
$reqCities,
|
||||
$reqRegions,
|
||||
$reqYear,
|
||||
$reqConstraints,
|
||||
$attackCoef,
|
||||
$defenceCoef,
|
||||
$info,
|
||||
@@ -469,26 +442,9 @@ class GameUnitConstBase{
|
||||
$iActionList,
|
||||
] = $rawUnit;
|
||||
|
||||
if($reqYear > 0){
|
||||
$info[] = "{$reqYear}년 경과 후 사용 가능";
|
||||
}
|
||||
|
||||
if($reqTech > 0){
|
||||
$info[] = "기술력 {$reqTech} 이상 필요";
|
||||
}
|
||||
|
||||
if($reqCities !== null){
|
||||
$reqCities = array_map(function($reqCity) use (&$info){
|
||||
$info[] = "{$reqCity} 소유시 가능";
|
||||
return CityConst::byName($reqCity)->id;
|
||||
}, $reqCities);
|
||||
}
|
||||
|
||||
if($reqRegions !== null){
|
||||
$reqRegions = array_map(function($reqRegion) use (&$info){
|
||||
$info[] = "{$reqRegion} 지역 소유시 가능";
|
||||
return CityConst::$regionMap[$reqRegion];
|
||||
}, $reqRegions);
|
||||
foreach($reqConstraints as $constraint){
|
||||
/** @var \sammo\GameUnitConstraint\BaseGameUnitConstraint $constraint */
|
||||
$info[] = $constraint->getInfo();
|
||||
}
|
||||
|
||||
$unit = new GameUnitDetail(
|
||||
@@ -502,16 +458,13 @@ class GameUnitConstBase{
|
||||
$magicCoef,
|
||||
$cost,
|
||||
$rice,
|
||||
$reqTech,
|
||||
$reqCities,
|
||||
$reqRegions,
|
||||
$reqYear,
|
||||
$reqConstraints,
|
||||
$attackCoef,
|
||||
$defenceCoef,
|
||||
$info,
|
||||
$initSkillTrigger,
|
||||
$phaseSkillTrigger,
|
||||
$iActionList,
|
||||
$iActionList
|
||||
);
|
||||
|
||||
$constID[$id] = $unit;
|
||||
@@ -521,31 +474,10 @@ class GameUnitConstBase{
|
||||
}
|
||||
$constType[$armType][$id] = $unit;
|
||||
|
||||
if($unit->reqCities){
|
||||
foreach($unit->reqCities as $reqCity){
|
||||
if(!key_exists($reqCity, $constCity)){
|
||||
$constCity[$reqCity] = [];
|
||||
}
|
||||
$constCity[$reqCity][$id] = $unit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if($unit->reqRegions){
|
||||
foreach($unit->reqRegions as $reqRegion){
|
||||
if(!key_exists($reqRegion, $constRegion)){
|
||||
$constRegion[$reqRegion] = [];
|
||||
}
|
||||
$constRegion[$reqRegion][$id] = $unit;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static::$constID = $constID;
|
||||
static::$constName = $constName;
|
||||
static::$constCity = $constCity;
|
||||
static::$constRegion = $constRegion;
|
||||
static::$constType = $constType;
|
||||
|
||||
static::_generateOptional();
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace sammo\GameUnitConstraint;
|
||||
|
||||
use sammo\General;
|
||||
|
||||
abstract class BaseGameUnitConstraint {
|
||||
public abstract function test(General $general, array $ownCities, array $ownRegions, int $relativeYear, int $tech, array $nationAux): bool;
|
||||
|
||||
public abstract function getInfo(): string;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace sammo\GameUnitConstraint;
|
||||
|
||||
use sammo\General;
|
||||
|
||||
class Impossible extends BaseGameUnitConstraint {
|
||||
|
||||
public function test(General $general, array $ownCities, array $ownRegions, int $relativeYear, int $tech, array $nationAux): bool
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getInfo(): string
|
||||
{
|
||||
return "불가능";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace sammo\GameUnitConstraint;
|
||||
|
||||
use sammo\CityConst;
|
||||
use sammo\General;
|
||||
|
||||
class ReqCities extends BaseGameUnitConstraint
|
||||
{
|
||||
|
||||
public readonly array $reqCities;
|
||||
public function __construct(...$reqCities)
|
||||
{
|
||||
$dstReqCities = [];
|
||||
if (count($reqCities) == 0) {
|
||||
$this->reqCities = [];
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($reqCities as $city) {
|
||||
$dstReqCities[CityConst::byName($city)->id] = $city;
|
||||
}
|
||||
$this->reqCities = $dstReqCities;
|
||||
}
|
||||
|
||||
public function test(General $general, array $ownCities, array $ownRegions, int $relativeYear, int $tech, array $nationAux): bool
|
||||
{
|
||||
foreach ($this->reqCities as $cityID => $cityName) {
|
||||
if (key_exists($cityID, $ownCities)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getInfo(): string
|
||||
{
|
||||
$cityNameText = implode(', ', $this->reqCities);
|
||||
return "{$cityNameText} 소유시 가능";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace sammo\GameUnitConstraint;
|
||||
|
||||
use sammo\General;
|
||||
|
||||
class ReqMinRelYear extends BaseGameUnitConstraint {
|
||||
|
||||
public function __construct(public readonly int $reqMinRelYear)
|
||||
{
|
||||
}
|
||||
|
||||
public function test(General $general, array $ownCities, array $ownRegions, int $relativeYear, int $tech, array $nationAux): bool
|
||||
{
|
||||
return $relativeYear >= $this->reqMinRelYear;
|
||||
}
|
||||
|
||||
public function getInfo(): string
|
||||
{
|
||||
return "{$this->reqMinRelYear}년 경과 후 사용 가능";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
namespace sammo\GameUnitConstraint;
|
||||
|
||||
use sammo\CityConst;
|
||||
use sammo\General;
|
||||
|
||||
class ReqRegions extends BaseGameUnitConstraint
|
||||
{
|
||||
|
||||
public readonly array $reqRegions;
|
||||
public function __construct(...$reqRegions)
|
||||
{
|
||||
$dstReqRegions = [];
|
||||
if (count($reqRegions) == 0) {
|
||||
$this->reqRegions = [];
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($reqRegions as $region) {
|
||||
$dstReqRegions[CityConst::$regionMap[$region]] = $region;
|
||||
}
|
||||
|
||||
$this->reqRegions = $dstReqRegions;
|
||||
}
|
||||
|
||||
public function test(General $general, array $ownCities, array $ownRegions, int $relativeYear, int $tech, array $nationAux): bool
|
||||
{
|
||||
foreach ($this->reqRegions as $regionID => $regionText) {
|
||||
if (key_exists($regionID, $ownRegions)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getInfo(): string
|
||||
{
|
||||
$regionNameText = implode(', ', $this->reqRegions);
|
||||
return "{$regionNameText} 지역 소유시 가능";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace sammo\GameUnitConstraint;
|
||||
|
||||
use sammo\General;
|
||||
use sammo\KVStorage;
|
||||
|
||||
class ReqTech extends BaseGameUnitConstraint {
|
||||
|
||||
public function __construct(public readonly int $reqTech)
|
||||
{
|
||||
}
|
||||
|
||||
public function test(General $general, array $ownCities, array $ownRegions, int $relativeYear, int $tech, array $nationAux): bool
|
||||
{
|
||||
if ($tech < $this->reqTech) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getInfo(): string
|
||||
{
|
||||
return "기술력 {$this->reqTech} 이상 필요";
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace sammo;
|
||||
|
||||
use sammo\GameUnitConstraint\BaseGameUnitConstraint;
|
||||
|
||||
class GameUnitDetail implements iAction
|
||||
{
|
||||
use DefaultAction;
|
||||
@@ -16,17 +18,14 @@ class GameUnitDetail implements iAction
|
||||
public $magicCoef;
|
||||
public $cost;
|
||||
public $rice;
|
||||
public $reqTech;
|
||||
public $reqCities;
|
||||
public $reqRegions;
|
||||
public $reqYear;
|
||||
public $attackCoef;
|
||||
public $defenceCoef;
|
||||
public $info;
|
||||
public $initSkillTrigger;
|
||||
public $phaseSkillTrigger;
|
||||
/** @var iAction[]|null iActionList */
|
||||
public $iActionList;
|
||||
public array $reqConstraints;
|
||||
|
||||
|
||||
public function __construct(
|
||||
int $id,
|
||||
@@ -39,13 +38,10 @@ class GameUnitDetail implements iAction
|
||||
float $magicCoef,
|
||||
int $cost,
|
||||
int $rice,
|
||||
int $reqTech,
|
||||
?array $reqCities,
|
||||
?array $reqRegions,
|
||||
int $reqYear,
|
||||
array $reqConstraints,
|
||||
array $attackCoef,
|
||||
array $defenceCoef,
|
||||
array $info,
|
||||
public readonly array $info,
|
||||
?array $initSkillTrigger,
|
||||
?array $phaseSkillTrigger,
|
||||
?array $iActionList,
|
||||
@@ -60,13 +56,13 @@ class GameUnitDetail implements iAction
|
||||
$this->magicCoef = $magicCoef;
|
||||
$this->cost = $cost;
|
||||
$this->rice = $rice;
|
||||
$this->reqTech = $reqTech;
|
||||
$this->reqCities = $reqCities;
|
||||
$this->reqRegions = $reqRegions;
|
||||
$this->reqYear = $reqYear;
|
||||
$this->reqConstraints = [];
|
||||
foreach($reqConstraints as $constraint){
|
||||
$className = Util::getClassNameFromObj($constraint);
|
||||
$this->reqConstraints[$className] = $constraint;
|
||||
}
|
||||
$this->attackCoef = $attackCoef;
|
||||
$this->defenceCoef = $defenceCoef;
|
||||
$this->info = $info;
|
||||
$this->initSkillTrigger = $initSkillTrigger;
|
||||
$this->phaseSkillTrigger = $phaseSkillTrigger;
|
||||
$this->iActionList = [];
|
||||
@@ -193,41 +189,13 @@ class GameUnitDetail implements iAction
|
||||
return $defaultWar;
|
||||
}
|
||||
|
||||
public function isValid($ownCities, $ownRegions, $relativeYear, $tech)
|
||||
public function isValid(General $general, $ownCities, $ownRegions, $relativeYear, $tech, $nationAux = [])
|
||||
{
|
||||
//음수 없음
|
||||
$relativeYear = max(0, $relativeYear);
|
||||
|
||||
if ($relativeYear < $this->reqYear) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($tech < $this->reqTech) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($this->reqCities !== null) {
|
||||
$valid = false;
|
||||
foreach ($this->reqCities as $reqCity) {
|
||||
if (\key_exists($reqCity, $ownCities)) {
|
||||
$valid = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$valid) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->reqRegions !== null) {
|
||||
$valid = false;
|
||||
foreach ($this->reqRegions as $reqRegion) {
|
||||
if (\key_exists($reqRegion, $ownRegions)) {
|
||||
$valid = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$valid) {
|
||||
foreach($this->reqConstraints as $constraint){
|
||||
if(!$constraint->test($general, $ownCities, $ownRegions, $relativeYear, $tech, $nationAux)){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
+18
-11
@@ -2558,8 +2558,11 @@ class GeneralAI
|
||||
$cities = [];
|
||||
$regions = [];
|
||||
|
||||
foreach ($db->queryAllLists('SELECT city, region FROM city WHERE nation = %i', $nationID) as [$cityID, $regionID]) {
|
||||
$cities[$cityID] = true;
|
||||
foreach ($db->queryAllLists('SELECT city, region, secu, level FROM city WHERE nation = %i', $nationID) as [$cityID, $regionID, $secu, $level]) {
|
||||
$cities[$cityID] = [
|
||||
'secu' => $secu,
|
||||
'level' => $level,
|
||||
];
|
||||
$regions[$regionID] = true;
|
||||
}
|
||||
$relYear = Util::valueFit($env['year'] - $env['startyear'], 0);
|
||||
@@ -2567,7 +2570,7 @@ class GeneralAI
|
||||
|
||||
$types = [];
|
||||
foreach (GameUnitConst::byType($armType) as $crewtype) {
|
||||
if ($crewtype->isValid($cities, $regions, $relYear, $tech)) {
|
||||
if ($crewtype->isValid($general, $cities, $regions, $relYear, $tech)) {
|
||||
$score = $crewtype->pickScore($tech);
|
||||
$types[$crewtype->id] = $score;
|
||||
}
|
||||
@@ -2581,12 +2584,16 @@ class GeneralAI
|
||||
|
||||
if ($this->generalPolicy->can고급병종) {
|
||||
$currCrewType = $general->getCrewTypeObj();
|
||||
if ($currCrewType->isValid($cities, $regions, $relYear, $tech)) {
|
||||
if ($currCrewType->reqTech >= 2000) {
|
||||
$type = $currCrewType->id;
|
||||
} else if ($currCrewType->armType != $armType && $currCrewType->reqTech >= 1000) {
|
||||
//굳이 뽑은 이유가 있겠지
|
||||
$type = $currCrewType->id;
|
||||
if ($currCrewType->isValid($general, $cities, $regions, $relYear, $tech)) {
|
||||
$reqTechObj = $currCrewType->reqConstraints['reqTech'] ?? null;
|
||||
if($reqTechObj){
|
||||
$reqTech = $reqTechObj->getValue($tech);
|
||||
if ($reqTech >= 2000) {
|
||||
$type = $currCrewType->id;
|
||||
} else if ($currCrewType->armType != $armType && $reqTech >= 1000) {
|
||||
//굳이 뽑은 이유가 있겠지
|
||||
$type = $currCrewType->id;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4036,7 +4043,7 @@ class GeneralAI
|
||||
if ($general->getVar('belong') < $minBelong) {
|
||||
continue;
|
||||
}
|
||||
if ($general->getVar('officer_level') !== 1) {
|
||||
if ($general->getVar('officer_level') > 4) {
|
||||
continue;
|
||||
}
|
||||
$nextChiefs[11] = $general;
|
||||
@@ -4093,7 +4100,7 @@ class GeneralAI
|
||||
|
||||
$newChief = null;
|
||||
foreach ($generals as $general) {
|
||||
if ($general->getVar('officer_level') !== 1) {
|
||||
if ($general->getVar('officer_level') > 4) {
|
||||
continue;
|
||||
}
|
||||
if ($general->getNPCType() < 2 && $general->getVar('killturn') < $minUserKillturn) {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
<?php
|
||||
|
||||
namespace sammo\GeneralTrigger;
|
||||
|
||||
use sammo\BaseGeneralTrigger;
|
||||
use sammo\General;
|
||||
use sammo\ActionLogger;
|
||||
@@ -7,16 +9,18 @@ use sammo\DB;
|
||||
use sammo\Util;
|
||||
use sammo\JosaUtil;
|
||||
|
||||
class che_도시치료 extends BaseGeneralTrigger{
|
||||
class che_도시치료 extends BaseGeneralTrigger
|
||||
{
|
||||
protected $priority = 10010;
|
||||
|
||||
public function action(\sammo\RandUtil $rng, ?array $env=null, $arg=null):?array{
|
||||
public function action(\sammo\RandUtil $rng, ?array $env = null, $arg = null): ?array
|
||||
{
|
||||
|
||||
/** @var \sammo\General $general */
|
||||
$general = $this->object;
|
||||
$logger = $general->getLogger();
|
||||
|
||||
if($general->getVar('injury') > 0){
|
||||
if ($general->getVar('injury') > 0) {
|
||||
$general->updateVar('injury', 0);
|
||||
$general->activateSkill('pre.부상경감', 'pre.치료');
|
||||
$logger->pushGeneralActionLog('<C>의술</>을 펼쳐 스스로 치료합니다!', ActionLogger::PLAIN);
|
||||
@@ -24,14 +28,27 @@ class che_도시치료 extends BaseGeneralTrigger{
|
||||
|
||||
$db = DB::db();
|
||||
|
||||
/** @var array{int,string,string}[] $patients */
|
||||
$patients = $db->queryAllLists(
|
||||
'SELECT no,name,nation FROM general WHERE city=%i AND injury > 10 AND no != %i',
|
||||
$general->getCityID(),
|
||||
$general->getID()
|
||||
);
|
||||
if ($general->getNationID() == 0) {
|
||||
/** @var array{int,string,string}[] $patients */
|
||||
$patients = $db->queryAllLists(
|
||||
'SELECT no,name,nation FROM general WHERE city=%i AND nation=%i AND injury > 10 AND no != %i',
|
||||
$general->getCityID(),
|
||||
0,
|
||||
$general->getID()
|
||||
);
|
||||
}
|
||||
else {
|
||||
/** @var array{int,string,string}[] $patients */
|
||||
$patients = $db->queryAllLists(
|
||||
'SELECT no,name,nation FROM general WHERE city=%i AND injury > 10 AND no != %i',
|
||||
$general->getCityID(),
|
||||
$general->getID()
|
||||
);
|
||||
}
|
||||
|
||||
if(!$patients){
|
||||
|
||||
|
||||
if (!$patients) {
|
||||
return $env;
|
||||
}
|
||||
|
||||
@@ -42,7 +59,7 @@ class che_도시치료 extends BaseGeneralTrigger{
|
||||
|
||||
/** @var string|null */
|
||||
$curedPatientName = null;
|
||||
foreach($patients as [$patientID, $patientName, $patientNationID]){
|
||||
foreach ($patients as [$patientID, $patientName, $patientNationID]) {
|
||||
if (!$rng->nextBool(0.5)) {
|
||||
continue;
|
||||
}
|
||||
@@ -54,28 +71,27 @@ class che_도시치료 extends BaseGeneralTrigger{
|
||||
$patientLogger->flush();
|
||||
}
|
||||
|
||||
if(!$cureList){
|
||||
if (!$cureList) {
|
||||
return $env;
|
||||
}
|
||||
|
||||
if($curedPatientName === null){
|
||||
if ($curedPatientName === null) {
|
||||
throw new \sammo\MustNotBeReachedException();
|
||||
}
|
||||
|
||||
|
||||
if(count($cureList) == 1){
|
||||
if (count($cureList) == 1) {
|
||||
$josaUl = JosaUtil::pick($curedPatientName, "을");
|
||||
$logger->pushGeneralActionLog("<C>의술</>을 펼쳐 도시의 장수 <Y>{$curedPatientName}</>{$josaUl} 치료합니다!", ActionLogger::PLAIN);
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
$otherCount = count($cureList) - 1;
|
||||
$logger->pushGeneralActionLog("<C>의술</>을 펼쳐 도시의 장수들 <Y>{$curedPatientName}</> 외 <C>{$otherCount}</>명을 치료합니다!", ActionLogger::PLAIN);
|
||||
}
|
||||
|
||||
$db->update('general', [
|
||||
'injury'=>0
|
||||
'injury' => 0
|
||||
], 'no IN %li', $cureList);
|
||||
|
||||
return $env;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -302,7 +302,7 @@ class ResetHelper{
|
||||
'server_cnt'=>$serverCnt,
|
||||
];
|
||||
|
||||
foreach(RootDB::db()->query('SELECT `no`, `name`, `picture`, `imgsvr` FROM member WHERE grade >= 5') as $admin){
|
||||
foreach(RootDB::db()->query('SELECT `no`, `name`, `picture`, `imgsvr` FROM member WHERE grade >= 6') as $admin){
|
||||
$db->insert('general', [
|
||||
'owner'=>$admin['no'],
|
||||
'name'=>$admin['name'],
|
||||
|
||||
+114
-29
@@ -10,20 +10,22 @@
|
||||
"min": 40,
|
||||
"max": 90
|
||||
},
|
||||
"iconPath": ".",
|
||||
"iconPath": "강서유서월드",
|
||||
"fiction": 1,
|
||||
"nation":[
|
||||
["TOG", "#FFD700", 13000, 60000, "반정부주의 단체", 0, "병가", 2, ["대", "유구"]],
|
||||
["초대 선받아", "#00FFFF", 8000, 25000, "초대 선택받은 아이들의 세력, 원작과는 다르다 달라", 0, "명가", 2, ["천수", "저"]],
|
||||
["TOG", "#FFD700", 13000, 60000, "반정부주의 단체", 1, "병가", 2, ["하비"]],
|
||||
["초대 선받아", "#00FFFF", 8000, 25000, "초대 선택받은 아이들의 세력, 원작과는 다르다 달라", 0, "명가", 2, ["계", "역경"]],
|
||||
["견휘", "#008000", 20000, 40000, "연휘아님 소설 출현 캐릭터(허락받음 오래전에)", 0, "법가", 3, ["장안", "함곡"]],
|
||||
["강인", "#00FF00", 15000, 40000, "블로거분 소설 캐릭터(소설 여전히 진짜 적게 연재", 0, "법가", 3, ["한중", "양평"]],
|
||||
["테란 자치령", "#000080", 40000, 60000, "스타크래프트 테란 자치령 소속", 0, "법가", 7, ["성도"]]
|
||||
["테란 자치령", "#000080", 40000, 60000, "스타크래프트 테란 자치령 소속", 1, "법가", 5, ["성도"]],
|
||||
["이터니얼", "#A0522D", 30000, 120000, "프리큐어의 주적", 1, "도적", 4, ["이도", "왜", "유구"]],
|
||||
["타이 제국", "#20B2AA", 30000, 60000, "타이지역과 동남아의 강국", 0, "법가", 5, ["남해", "교지"]]
|
||||
],
|
||||
"diplomacy":[],
|
||||
"general":[
|
||||
[1, "키타노 유키코", null, 1, "대", 86, 31, 95, 1, 160, 300, "대의", "저격", "모든것은 우리들의 꿈을 이루기 위해…"],
|
||||
[1, "키타노 시오리", null, 1, "대", 94, 96, 89, 1, 160, 300, "대의", "무쌍", "언니를 지켜보일거야"],
|
||||
[1, "이치가와 아이리", null, 1, "대", 78, 88, 94, 11, 160, 300, "대의", null, "유키코를 지킬거야. 내 속죄를 위해"],
|
||||
[1, "키타노 유키코", null, 1, "대", 95, 31, 95, 12, 160, 300, "대의", "저격", "모든것은 우리들의 꿈을 이루기 위해…"],
|
||||
[1, "키타노 시오리", null, 1, "대", 88, 96, 89, 1, 160, 300, "대의", "무쌍", "언니를 지켜보일거야"],
|
||||
[1, "이치가와 아이리", null, 1, "대", 87, 73, 94, 11, 160, 300, "대의", null, "유키코를 지킬거야. 내 속죄를 위해"],
|
||||
[1, "이즈카에 에리카", null, 1, "유구", 77, 93, 72, 1, 160, 300, "의협", "저격"],
|
||||
[1, "타에구치 유카리", null, 1, "유구", 71, 66, 80, 1, 160, 300, "할거", null, "아버지와 어머니를 지키기 위해 미래에서 왓어 난"],
|
||||
[1, "오모타 아미유", null, 1, "대", 64, 51, 44, 1, 160, 300, "대의", null],
|
||||
@@ -34,7 +36,7 @@
|
||||
[1, "요리시마 사치코", null, 1, "유구", 51, 81, 70, 1, 160, 300, "대의", "저격"],
|
||||
[0, "큐어 스플릿", null, 0, null, 80, 90, 56, 0, 160, 300, null, "무쌍"],
|
||||
[0, "큐어 솔크", null, 0, null, 93, 97, 67, 0, 160, 300, null, null, "아버지를 이겨보일거야."],
|
||||
[0, "큐어 샤인", null, 0, null, 99, 75, 99, 0, 160, 300, "패권", "신산", "디지털 월드와 인간세계 모두를 위해"],
|
||||
[0, "큐어 샤인", null, 0, null, 89, 75, 99, 0, 160, 300, "패권", "신산", "디지털 월드와 인간세계 모두를 위해"],
|
||||
[0, "큐어 러브", null, 0, null, 77, 86, 54, 0, 160, 300, null, null, "사랑을 추구하는 전사 큐어 러브"],
|
||||
[0, "큐어 프로즌", null, 0, null, 64, 88, 72, 0, 160, 300, null, null],
|
||||
[0, "큐어 바이올렛", null, 0, null, 49, 89, 77, 0, 160, 300, null, "상재"],
|
||||
@@ -46,16 +48,16 @@
|
||||
[0, "큐어 뮤직", null, 0, null, 79, 84, 60, 0, 160, 300, null, null],
|
||||
[0, "큐어 포르테", null, 0, null, 72, 77, 55, 0, 160, 300, null, null],
|
||||
[0, "큐어 리스", null, 0, null, 89, 80, 67, 0, 160, 300, null, null],
|
||||
[0, "분비", null, 0, null, 85, 94, 90, 0, 148, 300, null, null],
|
||||
[0, "시비렛타", null, 0, null, 82, 73, 90, 0, 127, 300, null, null],
|
||||
[0, "히토", null, 0, null, 64, 88, 80, 0, 115, 300, null, null],
|
||||
[8, "분비", null, 6, "이도", 85, 94, 90, 12, 148, 300, null, null],
|
||||
[8, "시비렛타", null, 6, "이도", 82, 73, 90, 1, 127, 300, null, null],
|
||||
[8, "히토", null, 6, "이도", 64, 88, 80, 11, 115, 300, null, null],
|
||||
[2, "모요코모 미에카", null, 2, "천수", 91, 60, 97, 12, 141, 300, "할거", null, "모든것은 분비님이 부활시키려는 그자를 막기 위해서야! 그자는 우리가 죽을뻔한 초대 선택받은 아이들의 적이니까!"],
|
||||
[2, "노자미 미노코", null, 2, "천수", 80, 77, 80, 11, 143, 300, null, null, "도대체 요시미츠님(분비님)은 뭔 생각이신거야…"],
|
||||
[2, "노자미 미에키", null, 0, null, 73, 70, 55, 0, 160, 300, null, null],
|
||||
[999, "리아", null, 0, null, 99, 34, 100, 0, 132, 300, null, "집중", "이 세계를 부디 안정시켜줄 사람이 필요해…."],
|
||||
[0, "코구라 아치모토", null, 0, null, 51, 44, 114, 0, 160, 300, null, "발명", "크흐흐…다크 프리큐어여 모습을 드러내라…!"],
|
||||
[0, "다크 프리큐어즈", null, 0, null, 84, 97, 92, 0, 160, 300, null, null, "모든건… 그분의 부활을 위해."],
|
||||
[0, "레톨프", null, 0, null, 87, 88, 64, 0, 160, 300, null, null],
|
||||
[2, "리아", null, 0, null, 99, 34, 100, 0, 132, 300, null, "집중", "이 세계를 부디 안정시켜줄 사람이 필요해…."],
|
||||
[8, "코구라 아치모토", null, 6, "왜", 51, 44, 114, 1, 160, 300, null, "발명", "크흐흐…다크 프리큐어여 모습을 드러내라…!"],
|
||||
[8, "다크 프리큐어즈", null, 6, "왜", 84, 97, 92, 1, 160, 300, null, null, "모든건… 그분의 부활을 위해."],
|
||||
[8, "레톨프", null, 6, "왜", 87, 88, 64, 1, 160, 300, null, null],
|
||||
[2, "사사토케 라이라", null, 2, "천수", 71, 80, 74, 1, 151, 300, null, null, "다시한번 주어진 기회. 이번엔 그녀를 지킬거야."],
|
||||
[2, "하루사키 츠보미", null, 2, "천수", 88, 51, 97, 1, 153, 300, "할거", null, "똑같은 악당짓을 다시는 하지않게, 나자신을 바꿀거야, 사랑하는 라이라 오빠와 함께."],
|
||||
[2, "아야토케 나이미", null, 2, "천수", 76, 44, 88, 1, 151, 300, null, null],
|
||||
@@ -80,6 +82,7 @@
|
||||
[0, "오카자키 토모야", null, 0, null, 79, 82, 51, 0, 160, 300, null, null],
|
||||
[0, "오카자키 우시오", null, 0, null, 67, 77, 68, 0, 160, 300, null, null, "미우를 구하기 위해..! 난 싸울거야 친구니까!"],
|
||||
[0, "최산해", null, 0, null, 82, 88, 33, 0, 160, 300, null, null],
|
||||
[0, "모토미야 유지", null, 0, null, 86, 31, 88, 0, 160, 300, null, "상재", "허허…. 이나라가 어찌되련지…"],
|
||||
[0, "유에", null, 0, null, 56, 14, 80, 0, 160, 300, null, null, "백성을 우선시하는게 통치의 근본."],
|
||||
[0, "에이", null, 0, null, 64, 33, 97, 0, 160, 300, null, null, "유에는 소중한 친구이자 주군,"],
|
||||
[0, "견휘", null, 3, "장안", 85, 44, 92, 12, 160, 300, null, "집중"],
|
||||
@@ -165,7 +168,7 @@
|
||||
[0, "미라 호너", null, 0, null, 89, 66, 94, 0, 160, 300, null, null],
|
||||
[0, "알렌 세자르", null, 0, null, 85, 61, 82, 0, 160, 300, null, null],
|
||||
[0, "마이클 리버티", null, 0, null, 64, 33, 71, 0, 160, 300, null, null],
|
||||
[0, "시온 크루스", null, 5, "성도", 51, 14, 85, 1, 160, 300, null, null],
|
||||
[0, "시온 크루스", null, 0, null, 51, 14, 85, 0, 160, 300, null, null],
|
||||
[0, "사라 케리건", null, 0, null, 95, 95, 81, 0, 160, 300, null, "무쌍"],
|
||||
[10, "드랄리스카", null, 0, null, 82, 93, 78, 0, 160, 300, null, null, "케리건님이 죽다니…근데 왜 내가 그 중임을 이어받아야 하는거야?"],
|
||||
[0, "에레니카", null, 0, null, 78, 38, 91, 0, 160, 300, null, null, "곧있으면 위대하신 아몬님이 완전히 부활할거야 드랄리스카 언니 후후후…."],
|
||||
@@ -218,7 +221,7 @@
|
||||
[0, "나서희", null, 0, null, 81, 77, 44, 0, 160, 300, null, null, "다미를 지킬거야"],
|
||||
[0, "스노우 화이트", null, 0, null, 71, 80, 66, 0, 160, 300, null, null, "이번에야 말로 친구들을 지켜 보이겠어. 소타도, 아카리도"],
|
||||
[0, "워터 스플렛", null, 0, null, 65, 80, 52, 0, 160, 300, null, null, "이번생에는 그런 셔플린 따위에게 지지 않을거야,"],
|
||||
[0, "스노우 슬러스", null, 0, null, 69, 75, 53, 0, 160, 300, null, null, "저번생이랑 달라! 나도 강해졋다고!"],
|
||||
[0, "프린세스 스노우", null, 0, null, 69, 75, 53, 0, 160, 300, null, null, "저번생이랑 달라! 나도 강해졋다고!"],
|
||||
[0, "리하나", null, 0, null, 79, 70, 65, 0, 160, 300, null, null, "프흐레 언니…"],
|
||||
[0, "블루베리", null, 0, null, 81, 88, 73, 0, 160, 300, null, null],
|
||||
[0, "스윔스윔", null, 0, null, 54, 90, 71, 0, 163, 300, null, null, "룰러가 그랫어 마법소녀는 본모습을 남에게 보여주면 안된다고"],
|
||||
@@ -242,7 +245,7 @@
|
||||
[0, "나츠세 유우", null, 0, null, 66, 30, 70, 0, 160, 300, null, null],
|
||||
[0, "크로노스 신", null, 0, null, 50, 15, 90, 0, 160, 300, null, null],
|
||||
[0, "프흐레", null, 0, null, 69, 24, 100, 0, 160, 300, null, null, "마법나라가 바라는 마법소녀란 말이지…"],
|
||||
[999, "나나하라 슈야", null, 0, null, 73, 72, 62, 0, 160, 300, null, null, "전세계의 어른들에게 선전포고 한다!"],
|
||||
[0, "나나하라 슈야", null, 0, null, 73, 72, 62, 0, 160, 300, null, null, "전세계의 어른들에게 선전포고 한다!"],
|
||||
[0, "타에구치유이치로", null, 0, null, 51, 63, 44, 0, 160, 300, null, null],
|
||||
[0, "카와다 소교", null, 0, null, 49, 70, 85, 0, 160, 300, null, null],
|
||||
[0, "카에리 유카리", null, 0, null, 41, 31, 53, 0, 160, 300, null, null],
|
||||
@@ -254,25 +257,25 @@
|
||||
[0, "카마디야", null, 0, null, 85, 93, 55, 0, 160, 300, null, null, "크흐흐… 감히 인간 따위가!! 나에게 덤비다니 용서못한다!!"],
|
||||
[0, "토토리몬", null, 0, null, 69, 88, 44, 0, 160, 300, null, null, "모든것은 카마디야님의 부활을 위해서…."],
|
||||
[0, "카와리노", null, 0, null, 73, 91, 80, 0, 160, 300, null, null, "나를 그곳에 꺼내주신 카마디야 님을 위해 난 일한다!"],
|
||||
[0, "가마오", null, 0, null, 41, 65, 13, 0, 160, 300, null, null, "이씨 너무 배고파…"],
|
||||
[0, "가마오", "이터니얼", 0, null, 41, 65, 13, 0, 160, 300, null, null, "이씨 너무 배고파…"],
|
||||
[0, "밀키 로즈", null, 0, null, 64, 82, 52, 0, 160, 300, null, null],
|
||||
[0, "옐로우 미치", null, 0, null, 61, 80, 80, 0, 160, 300, null, null, "난 마법나라 외교부문의 부문장 옐로우 미치야"],
|
||||
[0, "마왕팜", null, 0, null, 50, 90, 70, 0, 160, 300, null, null, "무지개? 어째서…!"],
|
||||
[0, "그림하트", null, 0, null, 74, 63, 41, 0, 160, 300, null, null, "목을 쳐라!!"],
|
||||
[0, "루다", null, 0, null, 62, 66, 62, 0, 160, 300, null, null],
|
||||
[0, "루다", null, 0, null, 62, 66, 62, 0, 160, 300, null, null, "널 좋아해 미우."],
|
||||
[0, "아이카와 준", null, 0, null, 90, 88, 65, 0, 160, 300, null, null],
|
||||
[0, "아이카와 린", null, 0, null, 74, 12, 85, 0, 160, 300, null, null],
|
||||
[0, "타카이시 히야미", null, 0, null, 86, 75, 77, 0, 161, 300, "대의", "인덕", "이나라를 안정시키려는데 힘이 부족해…"],
|
||||
[0, "타카이시 카린", null, 0, null, 41, 14, 79, 0, 160, 300, "재간", null, "우리딸이 행복해야 할텐데…."],
|
||||
[0, "타카이시 에이린", null, 0, null, 75, 51, 92, 0, 160, 300, null, null],
|
||||
[0, "정군호", null, 0, null, 94, 65, 88, 0, 160, 300, null, null, "우리 제국의 대장군으로써, 이나라를 수호한다!"],
|
||||
[0, "슈리", null, 0, null, 81, 34, 100, 0, 160, 300, null, "신산", "하와와"],
|
||||
[0, "미나미", null, 0, null, 85, 56, 98, 0, 160, 300, null, "귀모"],
|
||||
[0, "타카이시 히야미", null, 7, "남해", 86, 75, 77, 12, 161, 300, "대의", "인덕", "이나라를 안정시키려는데 힘이 부족해…"],
|
||||
[0, "타카이시 카린", null, 7, "남해", 41, 14, 79, 1, 160, 300, "재간", null, "우리딸이 행복해야 할텐데…."],
|
||||
[0, "타카이시 에이린", null, 7, "교지", 75, 51, 92, 1, 160, 300, null, null],
|
||||
[0, "정군호", null, 7, "남해", 94, 65, 88, 1, 160, 300, null, null, "우리 제국의 대장군으로써, 이나라를 수호한다!"],
|
||||
[0, "슈리", null, 7, "교지", 81, 34, 100, 11, 160, 300, null, "신산", "하와와"],
|
||||
[0, "히나리", null, 0, null, 85, 56, 98, 0, 160, 300, null, "귀모"],
|
||||
[0, "린린", null, 0, null, 92, 99, 44, 0, 160, 300, null, "무쌍", "~거다"],
|
||||
[0, "아이샤", null, 0, null, 96, 98, 71, 0, 160, 300, null, "위압"],
|
||||
[0, "모토미야 미야코", null, 0, null, 71, 64, 77, 0, 160, 300, null, null],
|
||||
[0, "모토미야 메이", null, 0, null, 81, 55, 80, 0, 160, 300, null, null],
|
||||
[0, "모토미야 유지", null, 0, null, 86, 31, 88, 0, 160, 300, null, "상재", "허허…. 이나라가 어찌되련지…"],
|
||||
[0, "오오시 리네", null, 0, null, 66, 72, 46, 0, 160, 300, null, null],
|
||||
[0, "타카이시 나츠히코", null, 0, null, 51, 33, 67, 0, 160, 300, null, null],
|
||||
[0, "유해", null, 0, null, 85, 87, 64, 0, 160, 300, null, null],
|
||||
[0, "유채", null, 0, null, 64, 71, 23, 0, 160, 300, null, null],
|
||||
@@ -294,14 +297,96 @@
|
||||
[1, "니시나 묘토", null, 0, null, 63, 67, 44, 0, 160, 300, null, null, "에휴 유키코를 지키는데 이유는 없지만 말이지"],
|
||||
[0, "오오시 마카코", null, 0, null, 55, 73, 55, 0, 160, 300, null, null, "젠장…! 유키코 놈들 절대로 가만두지 않을거다!"],
|
||||
[0, "스즈이 이로키", null, 0, null, 63, 59, 37, 0, 160, 300, null, null, "우리는 고사모! 유키코와 동료들을 증오하는 클래스 메이트!"],
|
||||
[0, "스즈키 이로이", null, 0, null, 59, 64, 44, 0, 160, 300, null, null, "유키노는 증오의 철퇴를 마주보아라!"],
|
||||
[0, "스즈키 이로이", null, 0, null, 59, 64, 44, 0, 160, 300, null, null, "유키코는 증오의 철퇴를 마주보아라!"],
|
||||
[0, "히라구시 토노", null, 0, null, 51, 58, 59, 0, 160, 300, null, null],
|
||||
[0, "미타키 신고", null, 0, null, 68, 77, 64, 0, 160, 300, null, null],
|
||||
[0, "섀도 게일", null, 0, null, 57, 69, 62, 0, 160, 300, null, null],
|
||||
[0, "사야코", null, 0, null, 69, 75, 60, 0, 160, 300, null, null],
|
||||
[0, "미요가타노 나코", null, 0, null, 77, 55, 79, 0, 160, 300, null, null, "fucking doll!"],
|
||||
[0, "첼너 마우스", null, 0, null, 51, 85, 2, 0, 160, 300, null, null, "체르나는 그런거 싫단 말이야! 내꺼라고!"],
|
||||
[0, "페치카", null, 0, null, 68, 8, 80, 0, 160, 300, null, null]
|
||||
[0, "페치카", null, 0, null, 68, 8, 80, 0, 160, 300, null, null],
|
||||
[0, "기타노 유리코", null, 0, null, 14, 9, 64, 0, 160, 300, null, null, "유키코는 참 의젓한 아이야."],
|
||||
[0, "니얀다 카멘", null, 0, null, 86, 85, 41, 0, 160, 300, null, null, "살려달라고 외치면 그 누구든 구할거야, 설사 적이라 할지라도"],
|
||||
[0, "니얀다 카렌", null, 0, null, 73, 88, 60, 0, 160, 300, null, null],
|
||||
[0, "니얀다 아렌", null, 0, null, 73, 85, 58, 0, 160, 300, null, null],
|
||||
[0, "니얀다 루나", null, 0, null, 84, 81, 75, 0, 160, 300, null, null],
|
||||
[0, "니얀다 아코", null, 0, null, 67, 80, 55, 0, 160, 300, null, null],
|
||||
[0, "니얀다 세인트", null, 0, null, 81, 83, 71, 0, 160, 300, null, null],
|
||||
[0, "니얀다 레인", null, 0, null, 66, 82, 52, 0, 160, 300, null, null],
|
||||
[0, "니얀다 마우스", null, 0, null, 69, 74, 39, 0, 160, 300, null, null],
|
||||
[0, "마키무라 신타로", null, 0, null, 65, 62, 39, 0, 160, 300, null, null],
|
||||
[0, "요시야마 에리", null, 0, null, 46, 12, 55, 0, 160, 300, null, null],
|
||||
[0, "타케우치 리키", null, 0, null, 51, 33, 72, 0, 160, 300, null, null, "세상에는 승자와 패자가 있다, 허나 그것은 사실일까?"],
|
||||
[0, "나카가와 노리코", null, 0, null, 19, 8, 68, 0, 160, 300, null, null, "알고있엇니? 수십년간 전쟁이 지속된 이 나라에도 이렇게 아름다운 봄이 온다는 것을, 돌아오지 않는 계절은 없어, 신기해"],
|
||||
[0, "타마키 이로하", null, 0, null, 75, 69, 62, 0, 160, 300, null, null],
|
||||
[0, "타마키 우이", null, 0, null, 87, 53, 74, 0, 160, 300, null, null, "마기우스의 날개의 쉼터에 온것을 환영해 언니"],
|
||||
[0, "사토미 토우카", null, 0, null, 65, 47, 92, 0, 160, 300, null, null, "우린 우이가 너무 좋아~ 이로하 언니도"],
|
||||
[0, "히이라기 네무", null, 0, null, 57, 48, 93, 0, 160, 300, null, null],
|
||||
[0, "아노토카 모미카", null, 0, null, 69, 81, 74, 0, 160, 300, null, null, "친구들을 믿는 굳건한 마음 큐어 프리트"],
|
||||
[0, "모노미야 세이나", null, 0, null, 77, 83, 41, 0, 160, 300, null, null, "어떤 유혹에도 빛을 잃지않는 깨끗한 마음 큐어 다이아!"],
|
||||
[0, "모노야마 유이", null, 0, null, 69, 85, 60, 0, 160, 300, null, null, "사랑하는 사람을 지키기 위한 진실한 마음 큐어 실린!"],
|
||||
[0, "루시에르", null, 0, null, 84, 72, 80, 0, 160, 300, null, null],
|
||||
[0, "큐어 루프", null, 0, null, 63, 81, 40, 0, 160, 300, null, null],
|
||||
[0, "가제크", null, 0, null, 55, 79, 51, 0, 160, 300, null, null],
|
||||
[0, "큐어 가젯", null, 0, null, 67, 81, 55, 0, 160, 300, null, null],
|
||||
[0, "큐어 루비", null, 0, null, 73, 79, 59, 0, 160, 300, null, null],
|
||||
[0, "루미에르", null, 0, null, 80, 81, 64, 0, 160, 300, null, null],
|
||||
[0, "토모야마 리에리", null, 0, null, 92, 55, 91, 0, 160, 300, null, null],
|
||||
[0, "니카와라 리나", null, 0, null, 75, 67, 77, 0, 160, 300, null, null],
|
||||
[0, "테네유치 이야노", null, 0, null, 66, 81, 55, 0, 160, 300, null, null],
|
||||
[0, "니시유라 리코", null, 0, null, 64, 84, 75, 0, 160, 300, null, null],
|
||||
[0, "소우다 마키", null, 0, null, 67, 81, 62, 0, 160, 300, null, null],
|
||||
[0, "타니구치유이치로", null, 0, null, 79, 82, 66, 0, 160, 300, null, null],
|
||||
[0, "마라바키 료", null, 0, null, 82, 81, 60, 0, 160, 300, null, null],
|
||||
[0, "에트리카 에슈", null, 0, null, 84, 53, 82, 0, 160, 300, null, null, "모든것은, 나를 이렇게 만든 세상에 복수하기 위해!"],
|
||||
[0, "유가을", null, 0, null, 87, 95, 60, 0, 160, 300, null, null],
|
||||
[0, "츠바이 유시", null, 0, null, 43, 63, 77, 0, 160, 300, null, null],
|
||||
[0, "크람베리", null, 0, null, 82, 93, 51, 0, 160, 300, null, null],
|
||||
[0, "파브", null, 0, null, 41, 10, 78, 0, 160, 300, null, null],
|
||||
[0, "파르", null, 0, null, 43, 10, 88, 0, 160, 300, null, null],
|
||||
[0, "타이요 아카리", null, 0, null, 81, 92, 77, 0, 160, 300, null, null, "나 잊지 않을테니까, 후유나에 대해 절대로 잊지않을 테니까"],
|
||||
[0, "신자키 후유나", null, 0, null, 74, 79, 55, 0, 160, 300, null, null, "안녕 아카리, 아카리와 만나 행복했어"],
|
||||
[0, "크랑테일", null, 0, null, 77, 81, 55, 0, 160, 300, null, null],
|
||||
[0, "타카이시 히모리", null, 0, null, 69, 37, 89, 0, 160, 300, null, null],
|
||||
[0, "사카나기 아야나", null, 0, null, 73, 89, 53, 0, 160, 300, null, null],
|
||||
[0, "사카나기 이즈카", null, 0, null, 77, 82, 60, 0, 160, 300, null, null],
|
||||
[0, "릿프", null, 0, null, 51, 9, 61, 0, 160, 300, null, null],
|
||||
[0, "다크니스 드림", null, 0, null, 64, 93, 66, 0, 160, 300, null, null],
|
||||
[0, "큐어 멜로디", null, 0, null, 74, 88, 46, 0, 160, 300, null, null],
|
||||
[0, "큐어 하모니", null, 0, null, 81, 88, 55, 0, 160, 300, null, null],
|
||||
[0, "큐어 블루펄", null, 0, null, 87, 92, 80, 0, 160, 300, null, null],
|
||||
[0, "큐어 위시", null, 0, null, 83, 77, 42, 0, 160, 300, null, null],
|
||||
[0, "큐어 비트", null, 0, null, 69, 88, 68, 0, 160, 300, null, null],
|
||||
[0, "큐어 리히트", null, 0, null, 73, 79, 70, 0, 160, 300, null, null],
|
||||
[0, "바라엘", null, 0, null, 87, 88, 64, 0, 160, 300, null, null],
|
||||
[0, "다크 드림", null, 0, null, 77, 89, 69, 0, 160, 300, null, null],
|
||||
[0, "하드고어 앨리스", null, 0, null, 81, 53, 79, 0, 160, 300, null, null],
|
||||
[0, "푸크푹", null, 0, null, 66, 27, 79, 0, 160, 300, null, null],
|
||||
[0, "카나", null, 0, null, 77, 55, 89, 0, 160, 300, null, null],
|
||||
[0, "아리엘", null, 0, null, 86, 60, 93, 0, 160, 300, null, null],
|
||||
[0, "리오네타", null, 0, null, 70, 17, 81, 0, 160, 300, null, null],
|
||||
[0, "키도 미노루", null, 0, null, 84, 67, 85, 0, 160, 300, null, null],
|
||||
[0, "리 슈촌", null, 0, null, 56, 69, 40, 0, 160, 300, null, null],
|
||||
[0, "아마노 네네", null, 0, null, 82, 77, 90, 0, 160, 300, null, null],
|
||||
[0, "쿠도 타이키", null, 0, null, 80, 80, 77, 0, 160, 300, null, null],
|
||||
[0, "히노모토 아카리", null, 0, null, 89, 100, 42, 0, 160, 300, null, null],
|
||||
[0, "아오누마 키리하", null, 0, null, 63, 55, 89, 0, 160, 300, null, null],
|
||||
[0, "츠루기 젠지로", null, 0, null, 58, 77, 39, 0, 160, 300, null, null],
|
||||
[0, "향상성", null, 0, null, 64, 71, 27, 0, 160, 300, null, null, "전, 디지털 월드의 평화를 바라는 자입니다."],
|
||||
[0, "이그드라실", null, 0, null, 68, 89, 66, 0, 160, 300, null, null],
|
||||
[0, "렌", null, 0, null, 80, 104, 70, 0, 160, 300, null, "무쌍"],
|
||||
[0, "네네네", null, 0, null, 73, 82, 55, 0, 160, 300, null, null],
|
||||
[0, "이소긴&야도간", null, 0, null, 90, 96, 76, 0, 160, 300, null, null],
|
||||
[0, "바스도라", null, 0, null, 83, 85, 72, 0, 160, 300, null, null],
|
||||
[0, "포이즈니", null, 0, null, 80, 83, 70, 0, 160, 300, null, null],
|
||||
[0, "긴토레스키", null, 0, null, 70, 90, 90, 0, 160, 300, null, "무쌍"],
|
||||
[0, "키리야", null, 0, null, 82, 85, 52, 0, 160, 300, null, null],
|
||||
[0, "큐어 옐", null, 0, null, 85, 83, 73, 0, 160, 300, null, null],
|
||||
[0, "큐어 앙주", null, 0, null, 89, 93, 74, 0, 160, 300, null, null],
|
||||
[0, "큐어 에투알", null, 0, null, 77, 94, 76, 0, 160, 300, null, null],
|
||||
[0, "닥터 크라이시스", null, 0, null, 86, 83, 77, 0, 160, 300, null, null],
|
||||
[0, "큐어 프렌디", null, 0, null, 87, 82, 80, 0, 160, 300, null, null],
|
||||
[0, "큐어 릴리안", null, 0, null, 87, 82, 80, 0, 160, 300, null, null]
|
||||
],
|
||||
"general_ex":[
|
||||
|
||||
|
||||
@@ -0,0 +1,543 @@
|
||||
{
|
||||
"title": "【가상모드28-b】 강서유서 소설 월드(비세력)",
|
||||
"startYear": 180,
|
||||
"history": [
|
||||
"<C>●</>180년 1월:<L><b>【가상모드28】</b>강서유서 소설 월드</>",
|
||||
"<C>●</>180년 1월:<L><b>【이벤트】</b></>강서유서의 소설 캐릭터들이 날뛰는곳"
|
||||
],
|
||||
"stat": {
|
||||
"total": 210,
|
||||
"min": 40,
|
||||
"max": 90
|
||||
},
|
||||
"iconPath": "강서유서월드",
|
||||
"fiction": 1,
|
||||
"nation":[
|
||||
],
|
||||
"diplomacy":[],
|
||||
"general":[
|
||||
[1, "키타노 유키코", null, 0, null, 95, 31, 95, 0, 160, 300, "대의", "저격", "모든것은 우리들의 꿈을 이루기 위해…"],
|
||||
[1, "키타노 시오리", null, 0, null, 88, 96, 89, 0, 160, 300, "대의", "무쌍", "언니를 지켜보일거야"],
|
||||
[1, "이치가와 아이리", null, 0, null, 87, 73, 94, 0, 160, 300, "대의", null, "유키코를 지킬거야. 내 속죄를 위해"],
|
||||
[1, "이즈카에 에리카", null, 0, null, 77, 93, 72, 0, 160, 300, "의협", "저격"],
|
||||
[1, "타에구치 유카리", null, 0, null, 71, 66, 80, 0, 160, 300, "할거", null, "아버지와 어머니를 지키기 위해 미래에서 왓어 난"],
|
||||
[1, "오모타 아미유", null, 0, null, 64, 51, 44, 0, 160, 300, "대의", null],
|
||||
[1, "소카이 요시나", null, 0, null, 79, 62, 80, 0, 160, 300, "의협", null],
|
||||
[1, "소미타키 코토키", null, 0, null, 86, 79, 55, 0, 160, 300, "재간", null],
|
||||
[1, "타카이시 유키", null, 0, null, 83, 64, 72, 0, 160, 300, "재간", null],
|
||||
[1, "스즈카 아야로", null, 0, null, 62, 88, 47, 0, 160, 300, "의협", null],
|
||||
[1, "요리시마 사치코", null, 0, null, 51, 81, 70, 0, 160, 300, null, "저격"],
|
||||
[0, "큐어 스플릿", null, 0, null, 80, 90, 56, 0, 160, 300, null, "무쌍"],
|
||||
[0, "큐어 솔크", null, 0, null, 93, 97, 67, 0, 160, 300, null, null, "아버지를 이겨보일거야."],
|
||||
[0, "큐어 샤인", null, 0, null, 89, 75, 99, 0, 160, 300, "패권", "신산", "디지털 월드와 인간세계 모두를 위해"],
|
||||
[0, "큐어 러브", null, 0, null, 77, 86, 54, 0, 160, 300, null, null, "사랑을 추구하는 전사 큐어 러브"],
|
||||
[0, "큐어 프로즌", null, 0, null, 64, 88, 72, 0, 160, 300, null, null],
|
||||
[0, "큐어 바이올렛", null, 0, null, 49, 89, 77, 0, 160, 300, null, "상재"],
|
||||
[0, "큐어 드림", null, 0, null, 97, 99, 71, 0, 160, 300, null, "무쌍"],
|
||||
[0, "큐어 뮤즈", null, 0, null, 71, 95, 64, 0, 160, 300, null, null],
|
||||
[0, "큐어 플리오네", null, 0, null, 89, 102, 86, 0, 148, 300, null, null],
|
||||
[0, "큐어 리큐브", null, 0, null, 67, 88, 82, 0, 152, 300, null, null],
|
||||
[0, "큐어 퓨리", null, 0, null, 83, 84, 42, 0, 160, 300, null, null],
|
||||
[0, "큐어 뮤직", null, 0, null, 79, 84, 60, 0, 160, 300, null, null],
|
||||
[0, "큐어 포르테", null, 0, null, 72, 77, 55, 0, 160, 300, null, null],
|
||||
[0, "큐어 리스", null, 0, null, 89, 80, 67, 0, 160, 300, null, null],
|
||||
[0, "분비", null, 0, null, 85, 94, 90, 0, 148, 300, null, null],
|
||||
[0, "시비렛타", null, 0, null, 82, 73, 90, 0, 127, 300, null, null],
|
||||
[0, "히토", null, 0, null, 64, 88, 80, 0, 115, 300, null, null],
|
||||
[2, "모요코모 미에카", null, 0, null, 91, 60, 97, 0, 141, 300, "할거", null, "모든것은 분비님이 부활시키려는 그자를 막기 위해서야! 그자는 우리가 죽을뻔한 선택받은 아이들의 적이니까!"],
|
||||
[2, "노자미 미노코", null, 0, null, 80, 77, 80, 0, 143, 300, null, null, "도체 요시미츠님(분비님)은 뭔 생각이신거야…"],
|
||||
[2, "노자미 미에키", null, 0, null, 73, 70, 55, 0, 160, 300, null, null],
|
||||
[999, "리아", null, 0, null, 99, 34, 100, 0, 132, 300, null, "집중", "이 세계를 부디 안정시켜줄 사람이 필요해…."],
|
||||
[0, "코구라 아치모토", null, 0, null, 51, 44, 114, 0, 160, 300, null, "발명", "크흐흐…다크 프리큐어여 모습을 드러내라…!"],
|
||||
[0, "다크 프리큐어즈", null, 0, null, 84, 97, 92, 0, 160, 300, null, null, "모든건… 그분의 부활을 위해."],
|
||||
[0, "레톨프", null, 0, null, 87, 88, 64, 0, 160, 300, null, null],
|
||||
[2, "사사토케 라이라", null, 0, null, 71, 80, 74, 0, 151, 300, null, null, "다시한번 주어진 기회. 이번엔 그녀를 지킬거야."],
|
||||
[2, "하루사키 츠보미", null, 0, null, 88, 51, 97, 0, 153, 300, "할거", null, "똑같은 악당짓을 다시는 하지않게, 나자신을 바꿀거야, 사랑하는 라이라 오빠와 함께."],
|
||||
[2, "아야토케 나이미", null, 0, null, 76, 44, 88, 0, 151, 300, null, null],
|
||||
[2, "히마즈라 유게키", null, 0, null, 54, 80, 12, 0, 149, 300, null, null],
|
||||
[2, "하루사키 유나", null, 0, null, 77, 44, 91, 0, 150, 300, null, null],
|
||||
[0, "야가미 타이치", null, 0, null, 89, 88, 67, 0, 153, 300, null, null],
|
||||
[0, "야가미 소라", null, 0, null, 62, 37, 75, 0, 153, 300, null, null],
|
||||
[0, "야가미 유메", null, 0, null, 80, 55, 78, 0, 160, 300, null, null],
|
||||
[0, "이시다 야마토", null, 0, null, 72, 77, 60, 0, 153, 300, null, null],
|
||||
[0, "이시다 나데히코", null, 0, null, 80, 50, 79, 0, 160, 300, null, null],
|
||||
[0, "이즈미 코시로", null, 0, null, 34, 17, 99, 0, 154, 300, null, "발명"],
|
||||
[0, "이즈미 미미", null, 0, null, 51, 23, 66, 0, 154, 300, null, null],
|
||||
[0, "이즈미 토모", null, 0, null, 37, 30, 89, 0, 160, 300, null, null],
|
||||
[0, "이즈미 쥰", null, 0, null, 77, 77, 31, 0, 160, 300, null, null],
|
||||
[0, "아마노 유우", null, 0, null, 77, 70, 85, 0, 160, 300, null, null, "모든건 그분을 위하여"],
|
||||
[2, "사사토케 키아라", null, 0, null, 85, 83, 60, 0, 160, 300, null, null, "감히 엄마를 그렇게 만들었겟다… 그 디지몬 절로 용서하지 않을거야!"],
|
||||
[2, "야카기 츠에루", null, 0, null, 83, 80, 51, 0, 160, 300, null, null, "할머니의 업보… 제가 신 갚아나갈 거에요"],
|
||||
[0, "사이온지 카나타", null, 0, null, 81, 79, 85, 0, 160, 300, null, null, "내가 먼 말할게 좋아해 미유,"],
|
||||
[0, "사이온지 미유", null, 0, null, 78, 64, 82, 0, 160, 300, null, null, "미우… 방금 뭐라고?.....루? 루란 말이야?"],
|
||||
[0, "사이온지 미우", null, 0, null, 85, 91, 33, 0, 160, 300, null, "견고", "크하하… 모두 박살나 버려라, 이딴 세상!"],
|
||||
[0, "오카자키 나기사", null, 0, null, 77, 17, 91, 0, 160, 300, null, null, "경단~ 경단~ 경단~경단 경단 가족~"],
|
||||
[0, "오카자키 토모야", null, 0, null, 79, 82, 51, 0, 160, 300, null, null],
|
||||
[0, "오카자키 우시오", null, 0, null, 67, 77, 68, 0, 160, 300, null, null, "미우를 구하기 위해..! 난 싸울거야 친구니까!"],
|
||||
[0, "최산해", null, 0, null, 82, 88, 33, 0, 160, 300, null, null],
|
||||
[0, "모토미야 유지", null, 0, null, 86, 31, 88, 0, 160, 300, null, "상재", "허허…. 이나라가 어찌되련지…"],
|
||||
[0, "유에", null, 0, null, 56, 14, 80, 0, 160, 300, null, null, "백성을 우선시하는게 통치의 근본."],
|
||||
[0, "에이", null, 0, null, 64, 33, 97, 0, 160, 300, null, null, "유에는 소중한 친구이자 주군,"],
|
||||
[0, "고현", null, 0, null, 52, 37, 81, 0, 160, 300, null, null],
|
||||
[5, "고순", null, 0, null, 88, 86, 66, 0, 160, 300, null, "기병"],
|
||||
[5, "장료", null, 0, null, 85, 92, 78, 0, 160, 300, null, "무쌍"],
|
||||
[5, "가후", null, 0, null, 80, 46, 98, 0, 160, 300, null, null],
|
||||
[5, "견린", null, 0, null, 70, 42, 88, 0, 160, 300, null, null],
|
||||
[5, "견정", null, 0, null, 66, 40, 55, 0, 160, 300, null, null],
|
||||
[5, "헌제", null, 0, null, 47, 44, 83, 0, 160, 300, null, null],
|
||||
[5, "곽가", null, 0, null, 61, 33, 91, 0, 160, 300, null, "귀모"],
|
||||
[5, "강인", null, 0, null, 90, 53, 91, 0, 160, 300, null, null],
|
||||
[5, "사마예은", null, 0, null, 53, 37, 82, 0, 160, 300, null, null],
|
||||
[3, "유혜은", null, 0, null, 69, 57, 72, 0, 160, 300, null, null],
|
||||
[3, "유현아", null, 0, null, 65, 68, 51, 0, 160, 300, null, null],
|
||||
[3, "장연지", null, 0, null, 31, 15, 66, 0, 160, 300, null, null],
|
||||
[3, "장서연", null, 0, null, 74, 73, 44, 0, 160, 300, null, null],
|
||||
[3, "유하연", null, 0, null, 68, 61, 65, 0, 160, 300, null, null],
|
||||
[3, "유희", null, 0, null, 64, 75, 62, 0, 160, 300, null, null],
|
||||
[3, "나지현", null, 0, null, 64, 33, 71, 0, 160, 300, null, null],
|
||||
[3, "아사쿠라 나오", null, 0, null, 81, 63, 83, 0, 160, 300, null, "저격", "모든건 우리를 싸우게 만들고 서로 죽이게 한 어른들에 한 복수,"],
|
||||
[3, "아오이 타쿠마", null, 0, null, 77, 89, 55, 0, 160, 300, null, null],
|
||||
[0, "우라베 슈고", null, 0, null, 53, 68, 61, 0, 160, 300, null, null],
|
||||
[0, "카사이 오사무", null, 0, null, 66, 54, 39, 0, 160, 300, null, null],
|
||||
[0, "카케이 쿄코", null, 0, null, 77, 55, 81, 0, 160, 300, null, null],
|
||||
[0, "사쿠라이 하루야", null, 0, null, 63, 79, 51, 0, 160, 300, null, null],
|
||||
[0, "히카사 쇼타", null, 0, null, 55, 31, 44, 0, 160, 300, null, null],
|
||||
[0, "토츠카 호나미", null, 0, null, 81, 77, 53, 0, 160, 300, null, null],
|
||||
[0, "니이미 레나", null, 0, null, 66, 78, 55, 0, 160, 300, null, null],
|
||||
[0, "큐어 트윙클", null, 0, null, 81, 88, 55, 0, 160, 300, null, null],
|
||||
[0, "모토무라 아스카", null, 0, null, 64, 77, 81, 0, 160, 300, null, null],
|
||||
[0, "야기 아야네", null, 0, null, 78, 83, 55, 0, 160, 300, null, "저격"],
|
||||
[0, "야자와 아이", null, 0, null, 67, 89, 57, 0, 160, 300, null, "무쌍"],
|
||||
[0, "유키 카나", null, 0, null, 79, 24, 88, 0, 160, 300, null, "통찰"],
|
||||
[0, "노다 샤토미", null, 0, null, 61, 55, 69, 0, 160, 300, null, null],
|
||||
[0, "사사가와 류헤이", null, 0, null, 66, 58, 66, 0, 160, 300, null, null],
|
||||
[0, "키리야마 카즈오", null, 0, null, 91, 92, 99, 0, 160, 300, "패권", "위압", "뒷면이 나오면…이 게임을 받아들이기로…!"],
|
||||
[0, "이치가와 쥬리", null, 0, null, 34, 32, 91, 0, 160, 300, null, "발명"],
|
||||
[0, "모토무라 아야네", null, 0, null, 77, 67, 55, 0, 163, 300, null, null],
|
||||
[0, "코토히키 카요코", null, 0, null, 78, 33, 78, 0, 160, 300, null, null],
|
||||
[0, "스기무라 히로키", null, 0, null, 67, 90, 45, 0, 160, 300, "유지", null],
|
||||
[0, "민유희", null, 0, null, 89, 55, 81, 0, 163, 300, null, null],
|
||||
[0, "사카키 유코", null, 0, null, 45, 34, 60, 0, 160, 300, null, null],
|
||||
[0, "사쿠라이 사키", null, 0, null, 78, 77, 66, 0, 160, 300, null, "저격"],
|
||||
[0, "마키", null, 0, null, 72, 74, 56, 0, 160, 300, null, null],
|
||||
[0, "마이", null, 0, null, 70, 70, 60, 0, 160, 300, null, null],
|
||||
[0, "소마 미츠코", null, 0, null, 93, 66, 90, 0, 160, 300, null, null, "나는 뺏는쪽에 서서 살아가는 거잖아…?"],
|
||||
[0, "타카구치유이치로", null, 0, null, 77, 54, 79, 0, 160, 300, null, null],
|
||||
[0, "스즈키 아야로", null, 0, null, 55, 44, 77, 0, 160, 300, null, null],
|
||||
[0, "아사기 유미", null, 0, null, 84, 56, 66, 0, 160, 300, null, null],
|
||||
[1, "아오조야 하나코", null, 0, null, 89, 66, 94, 0, 160, 300, null, null],
|
||||
[1, "아유카 시로미", null, 0, null, 3, 15, 64, 0, 160, 300, null, null],
|
||||
[0, "아유카 시코", null, 0, null, 7, 9, 66, 0, 160, 300, null, null],
|
||||
[0, "아카타 마야코", null, 0, null, 35, 40, 55, 0, 160, 300, null, null],
|
||||
[0, "아타키 류야", null, 0, null, 64, 12, 80, 0, 160, 300, null, null],
|
||||
[0, "우츠미 유키에", null, 0, null, 71, 44, 82, 0, 160, 300, null, null, "바보야…모두 바보야! 모두 살아돌아갈수도 있엇는데…."],
|
||||
[0, "아제라크", null, 0, null, 81, 89, 68, 0, 160, 300, null, null, "프리큐어…! 모조리 거미밥으로 만들어주마!"],
|
||||
[0, "악튜러스 멩스크", null, 0, null, 95, 71, 99, 0, 151, 300, "패권", "집중", "누구도 날 막을 수 없어. 네놈이건, 연합이건, 프로토스건, 그 누구도! 코프룰루를 가질 수 없다면 차라리 잿더미로 만들어 버릴테다!"],
|
||||
[0, "발레리안 멩스크", null, 0, null, 85, 63, 88, 0, 160, 300, null, null, "난 국민의 편이오. 아버지의 죄는 용서받을 수 없다는 걸 알고 있소. 권좌에서… 내려오셔야 한다는 것도."],
|
||||
[10, "호러스 워필드", null, 0, null, 95, 83, 82, 0, 160, 300, "대의", "인덕", "캐리건... 잘 들어라. 지금 왕복선 3엔 부상병들만 타고 있다. 다들 누군가의... 남편이자, 아버지야. 들은 그냥 보내다오. 알겠나? 독한 것. 넌 인간도 아니야. 넌 우릴 배신했어. 뭣 때문에? 그깟 복수 때문에?\n무고한 사람들을 얼마나 죽인 거야? 또 얼마나 더 죽일 셈이야?\n레이너가 널 보면 뭐라고 할까?"],
|
||||
[10, "캐롤라이나", null, 0, null, 80, 51, 75, 0, 160, 300, null, null],
|
||||
[10, "노바 테라", null, 0, null, 71, 92, 55, 0, 160, 300, null, "저격", "노바, 작전준비"],
|
||||
[10, "헥터 산티아고", null, 0, null, 85, 55, 84, 0, 160, 300, null, null],
|
||||
[10, "클레리아 듀크", null, 0, null, 89, 64, 88, 0, 146, 300, null, null, "가족들과 같이 마지막 까지 살아남아 돌아가겟어."],
|
||||
[10, "에밀리아 듀크", null, 0, null, 82, 84, 66, 0, 160, 300, null, "저격", "어머니랑 다시 만나서 기뻐"],
|
||||
[0, "에르지나 듀크", null, 0, null, 75, 87, 62, 0, 160, 300, null, "저격"],
|
||||
[0, "헤일리 듀크", null, 0, null, 70, 64, 84, 0, 160, 300, null, null],
|
||||
[0, "존 레이너", null, 0, null, 77, 89, 62, 0, 160, 300, null, "돌격"],
|
||||
[0, "베르카 나바렌", null, 0, null, 81, 51, 93, 0, 160, 300, null, null],
|
||||
[0, "마리에 베넷", null, 0, null, 66, 33, 66, 0, 160, 300, null, null],
|
||||
[0, "유리아 베넷", null, 0, null, 76, 41, 55, 0, 160, 300, null, null],
|
||||
[0, "루미 베레스", null, 0, null, 77, 33, 89, 0, 160, 300, null, null],
|
||||
[0, "타이커스", null, 0, null, 61, 85, 40, 0, 160, 300, null, null],
|
||||
[0, "제임스 레이너", null, 0, null, 99, 88, 72, 0, 160, 300, "대의", "돌격", "피닉스! 안돼!!"],
|
||||
[0, "맷 호너", null, 0, null, 87, 64, 95, 0, 160, 300, null, null],
|
||||
[0, "로리 스완", null, 0, null, 32, 55, 93, 0, 160, 300, null, "발명"],
|
||||
[0, "이곤 스텟먼", null, 0, null, 11, 7, 91, 0, 160, 300, null, "발명"],
|
||||
[0, "가브리엘 토시", null, 0, null, 85, 96, 55, 0, 160, 300, null, null],
|
||||
[0, "로사 모랄레스", null, 0, null, 51, 44, 67, 0, 160, 300, null, null],
|
||||
[0, "레베카 레이너", null, 0, null, 81, 93, 44, 0, 160, 300, null, null],
|
||||
[0, "케이트 록웰", null, 0, null, 43, 10, 78, 0, 160, 300, null, null],
|
||||
[0, "아리엘 헨슨", null, 0, null, 17, 1, 89, 0, 160, 300, null, "발명"],
|
||||
[0, "미라 호너", null, 0, null, 89, 66, 94, 0, 160, 300, null, null],
|
||||
[0, "알렌 세자르", null, 0, null, 85, 61, 82, 0, 160, 300, null, null],
|
||||
[0, "마이클 리버티", null, 0, null, 64, 33, 71, 0, 160, 300, null, null],
|
||||
[0, "시온 크루스", null, 0, null, 51, 14, 85, 0, 160, 300, null, null],
|
||||
[0, "사라 케리건", null, 0, null, 95, 95, 81, 0, 160, 300, null, "무쌍"],
|
||||
[10, "드랄리스카", null, 0, null, 82, 93, 78, 0, 160, 300, null, null, "케리건님이 죽다니…근데 왜 내가 그 중임을 이어받아야 하는거야?"],
|
||||
[0, "에레니카", null, 0, null, 78, 38, 91, 0, 160, 300, null, null, "곧있으면 위하신 아몬님이 완전히 부활할거야 드랄리스카 언니 후후후…."],
|
||||
[0, "세페니아", null, 0, null, 75, 81, 51, 0, 160, 300, null, null, "에레니카 언니 뭔가 이상해"],
|
||||
[0, "이즈샤", null, 0, null, 31, 55, 81, 0, 160, 300, null, null, "여왕님의 명을 받듭니다"],
|
||||
[0, "자가라", null, 0, null, 87, 91, 46, 0, 160, 300, null, null],
|
||||
[0, "데히카", null, 0, null, 75, 91, 55, 0, 160, 300, null, null],
|
||||
[0, "스투코프 부제독", null, 0, null, 87, 71, 93, 0, 160, 300, null, null],
|
||||
[0, "니아드라", null, 0, null, 80, 83, 52, 0, 160, 300, null, null],
|
||||
[0, "아바투르", null, 0, null, 43, 33, 81, 0, 160, 300, null, "발명"],
|
||||
[0, "다고쓰", null, 0, null, 81, 85, 80, 0, 160, 300, null, null, "휴우… 드랄리스카도 환생자라 다행이야, 죽을일은 없겠네… 근데 케리건이 죽을줄이야…"],
|
||||
[0, "초월체", null, 0, null, 95, 55, 99, 0, 160, 300, null, null],
|
||||
[0, "자츠", null, 0, null, 82, 55, 71, 0, 160, 300, null, null],
|
||||
[0, "곤", null, 0, null, 79, 56, 77, 0, 160, 300, null, null],
|
||||
[0, "카그", null, 0, null, 80, 55, 69, 0, 160, 300, null, null],
|
||||
[0, "아우자", null, 0, null, 64, 71, 86, 0, 160, 300, null, null],
|
||||
[0, "제라드 듀갈", null, 0, null, 87, 51, 80, 0, 160, 300, null, null],
|
||||
[0, "맘스틴 령", null, 0, null, 80, 51, 66, 0, 160, 300, null, null],
|
||||
[0, "스투코프 주니어", null, 0, null, 81, 56, 72, 0, 160, 300, null, null, "ued 2차원정로 우린 아몬과의 결전에 참가할거야."],
|
||||
[0, "레비나 스투코프", null, 0, null, 66, 31, 90, 0, 160, 300, null, null, "근데 우리 병사로 괜찮을까 오빠"],
|
||||
[0, "제라툴", null, 0, null, 85, 90, 82, 0, 160, 300, null, null, "젤나가 맙소사! 누가 이런 끔찍한 혼종을 만들었단 말인가"],
|
||||
[0, "테사다르", "`", 0, null, 82, 77, 86, 0, 160, 300, null, null, "난 죽음을 경험한 적이 없네"],
|
||||
[0, "피닉스", null, 0, null, 79, 80, 65, 0, 160, 300, null, null],
|
||||
[0, "알다리스", null, 0, null, 80, 51, 77, 0, 160, 300, null, null],
|
||||
[0, "탈란다르", null, 0, null, 84, 66, 80, 0, 160, 300, null, null],
|
||||
[0, "아르타니스", null, 0, null, 80, 71, 84, 0, 160, 300, null, null, "모조리 용기병으로 만들어주마!"],
|
||||
[0, "라자갈", null, 0, null, 90, 75, 89, 0, 160, 300, null, null],
|
||||
[0, "우룬 제독", null, 0, null, 84, 80, 55, 0, 160, 300, null, null],
|
||||
[0, "셀렌디스", null, 0, null, 80, 80, 67, 0, 160, 300, null, null],
|
||||
[0, "보라준", null, 0, null, 87, 51, 91, 0, 160, 300, null, null],
|
||||
[0, "알라리크", null, 0, null, 89, 92, 87, 0, 160, 300, null, null],
|
||||
[0, "말라쉬", null, 0, null, 80, 96, 65, 0, 160, 300, null, null],
|
||||
[0, "니온", null, 0, null, 62, 73, 43, 0, 160, 300, null, null],
|
||||
[0, "지나라", null, 0, null, 75, 90, 55, 0, 160, 300, null, null],
|
||||
[0, "아리샤", null, 0, null, 51, 81, 50, 0, 160, 300, null, null, "난 XX부르드의 울트라 표 아리샤다!"],
|
||||
[0, "아몬", null, 0, null, 97, 107, 85, 0, 160, 300, null, null, "나는 너희들의 시작이었으니 또한 끝이리라….!"],
|
||||
[0, "에밀 나루드", null, 0, null, 85, 92, 96, 0, 160, 300, null, null, "아몬께서 별빛으로 속삭이셨다. 그분은 돌아오신다고 하셨다. 그분은 파괴한다고 하셨다. 멸종. 모든 것이 종말을 맞이할 것이라고"],
|
||||
[0, "오로스", null, 0, null, 80, 79, 55, 0, 160, 300, null, null],
|
||||
[0, "도로시 멩스크", null, 0, null, 52, 74, 81, 0, 160, 300, null, null],
|
||||
[0, "유다미", null, 0, null, 40, 78, 3, 0, 160, 300, null, null],
|
||||
[0, "유지혜", null, 0, null, 77, 64, 80, 0, 160, 300, null, null, "언니를 이번에야 말로 지킬거야… 그럴려고 마법소녀가 된걸!"],
|
||||
[0, "유하준", null, 0, null, 78, 70, 70, 0, 160, 300, null, null],
|
||||
[0, "유당찬", null, 0, null, 83, 69, 55, 0, 160, 300, null, null],
|
||||
[0, "유시하", "`", 0, null, 67, 55, 81, 0, 160, 300, null, null],
|
||||
[0, "유미하", null, 0, null, 41, 34, 48, 0, 160, 300, null, null],
|
||||
[0, "유지은", null, 0, null, 55, 78, 64, 0, 160, 300, null, null, "나는 레플리카"],
|
||||
[0, "유혜선", null, 0, null, 78, 89, 55, 0, 160, 300, null, null, "나는"],
|
||||
[0, "최정윤", null, 0, null, 85, 71, 66, 0, 160, 300, null, null, "우리는 다미키즈, 다미의 친구들이자 다미에 의해 도움을 받은 아이들 거기서도 나는 캔디팝이야"],
|
||||
[0, "이선아", null, 0, null, 83, 88, 56, 0, 160, 300, null, null, "나는 마콧치, 마법나라 감사부문의 부부장이야."],
|
||||
[0, "나서희", null, 0, null, 81, 77, 44, 0, 160, 300, null, null, "다미를 지킬거야"],
|
||||
[0, "스노우 화이트", null, 0, null, 71, 80, 66, 0, 160, 300, null, null, "이번에야 말로 친구들을 지켜 보이겠어. 소타도, 아카리도"],
|
||||
[0, "워터 스플렛", null, 0, null, 65, 80, 52, 0, 160, 300, null, null, "이번생에는 그런 셔플린 따위에게 지지 않을거야,"],
|
||||
[0, "스노우 슬러스", null, 0, null, 69, 75, 53, 0, 160, 300, null, null, "번생이랑 달라! 나도 강해졋다고!"],
|
||||
[0, "리하나", null, 0, null, 79, 70, 65, 0, 160, 300, null, null, "프흐레 언니…"],
|
||||
[0, "블루베리", null, 0, null, 81, 88, 73, 0, 160, 300, null, null],
|
||||
[0, "스윔스윔", null, 0, null, 54, 90, 71, 0, 163, 300, null, null, "룰러가 그랫어 마법소녀는 본모습을 남에게 보여주면 안된다고"],
|
||||
[0, "이선화", null, 0, null, 66, 55, 79, 0, 160, 300, null, null, "다미는 우리의 소중한 친구"],
|
||||
[0, "정혜림", null, 0, null, 91, 88, 80, 0, 160, 300, null, null, "우리 다미키즈는 다미언니에 의해 많은걸 받은 아이들이야,"],
|
||||
[0, "하나조노 아무", null, 0, null, 67, 53, 81, 0, 160, 300, null, null, "캐릭터 변신! 애뮬릿 다이아!"],
|
||||
[0, "하나조노 카렌", null, 0, null, 66, 51, 80, 0, 160, 300, null, null, "나는 하나조노 카렌, 전 이름은 하나무라 카렌이야."],
|
||||
[0, "하나조노 아리스", null, 0, null, 53, 14, 61, 0, 160, 300, null, null],
|
||||
[0, "린", null, 0, null, 38, 32, 69, 0, 160, 300, null, null, "난 용담꽃의 페어리루 린이야~"],
|
||||
[0, "하나조노 마츠아", null, 0, null, 44, 40, 55, 0, 160, 300, null, null],
|
||||
[0, "롭프", null, 0, null, 55, 47, 50, 0, 160, 300, null, null],
|
||||
[0, "이정선 황제", null, 0, null, 74, 44, 85, 0, 160, 300, null, null, "감히 우리 제국에 반기를 든자들! 용서하지 않는다! !"],
|
||||
[0, "이양선 공", null, 0, null, 77, 42, 79, 0, 160, 300, null, null, "형님이 리 화를 내시다니 내심 단하구나 그들은"],
|
||||
[0, "이을용 황태자", null, 0, null, 51, 33, 69, 0, 160, 300, null, null],
|
||||
[0, "카라시프 장군", null, 0, null, 75, 69, 71, 0, 160, 300, null, null],
|
||||
[0, "카몬 요네미", null, 0, null, 40, 8, 66, 0, 160, 300, null, null],
|
||||
[0, "키타노 타케시", null, 0, null, 43, 14, 75, 0, 160, 300, null, null, "우리가족의 행복과 안전을 우선시해야지"],
|
||||
[0, "키타노 유리아", null, 0, null, 32, 8, 69, 0, 160, 300, null, null],
|
||||
[0, "후타바 안즈", null, 0, null, 67, 44, 90, 0, 160, 300, null, null, "나도 하메르도 행복하길"],
|
||||
[0, "히나노", null, 0, null, 66, 32, 73, 0, 160, 300, null, null, "이번생에는 행복하고 싶어"],
|
||||
[0, "나츠세 유우", null, 0, null, 66, 30, 70, 0, 160, 300, null, null],
|
||||
[0, "크로노스 신", null, 0, null, 50, 15, 90, 0, 160, 300, null, null],
|
||||
[0, "프흐레", null, 0, null, 69, 24, 100, 0, 160, 300, null, null, "마법나라가 바라는 마법소녀란 말이지…"],
|
||||
[0, "나나하라 슈야", null, 0, null, 73, 72, 62, 0, 160, 300, null, null, "전세계의 어른들에게 선전포고 한다!"],
|
||||
[0, "타에구치유이치로", null, 0, null, 51, 63, 44, 0, 160, 300, null, null],
|
||||
[0, "카와다 소교", null, 0, null, 49, 70, 85, 0, 160, 300, null, null],
|
||||
[0, "카에리 유카리", null, 0, null, 41, 31, 53, 0, 160, 300, null, null],
|
||||
[0, "사에구치 미나", null, 0, null, 44, 55, 36, 0, 160, 300, null, null],
|
||||
[0, "큐어 카루티", null, 0, null, 62, 81, 55, 0, 160, 300, null, null],
|
||||
[0, "큐어 리프렛", null, 0, null, 71, 89, 72, 0, 160, 300, null, null],
|
||||
[0, "큐어 실프", null, 0, null, 83, 92, 88, 0, 160, 300, null, null],
|
||||
[0, "큐어 아네모스", null, 0, null, 69, 80, 55, 0, 160, 300, null, null],
|
||||
[0, "카마디야", null, 0, null, 85, 93, 55, 0, 160, 300, null, null, "크흐흐… 감히 인간 따위가!! 나에게 덤비다니 용서못한다!!"],
|
||||
[0, "토토리몬", null, 0, null, 69, 88, 44, 0, 160, 300, null, null, "모든것은 카마디야님의 부활을 위해서…."],
|
||||
[0, "카와리노", null, 0, null, 73, 91, 80, 0, 160, 300, null, null, "나를 그곳에 꺼내주신 카마디야 님을 위해 난 일한다!"],
|
||||
[0, "가마오", null, 0, null, 41, 65, 13, 0, 160, 300, null, null, "이씨 너무 배고파…"],
|
||||
[0, "밀키 로즈", null, 0, null, 64, 82, 52, 0, 160, 300, null, null],
|
||||
[0, "옐로우 미치", null, 0, null, 61, 80, 80, 0, 160, 300, null, null, "난 마법나라 외교부문의 부문장 옐로우 미치야"],
|
||||
[0, "마왕팜", null, 0, null, 50, 90, 70, 0, 160, 300, null, null, "무지개? 어째서…!"],
|
||||
[0, "그림하트", null, 0, null, 74, 63, 41, 0, 160, 300, null, null, "목을 쳐라!!"],
|
||||
[0, "루다", null, 0, null, 62, 66, 62, 0, 160, 300, null, null, "널 좋아해 미우."],
|
||||
[0, "아이카와 준", null, 0, null, 90, 88, 65, 0, 160, 300, null, null],
|
||||
[0, "아이카와 린", null, 0, null, 74, 12, 85, 0, 160, 300, null, null],
|
||||
[0, "타카이시 히야미", null, 0, null, 86, 75, 77, 0, 161, 300, "대의", "인덕", "이나라를 안정시키려는데 힘이 부족해…"],
|
||||
[0, "타카이시 카린", null, 0, null, 41, 14, 79, 0, 160, 300, "재간", null, "우리딸이 행복해야 할텐데…."],
|
||||
[0, "타카이시 에이린", null, 0, null, 75, 51, 92, 0, 160, 300, null, null],
|
||||
[0, "정군호", null, 0, null, 94, 65, 88, 0, 160, 300, null, null, "우리 제국의 장군으로써, 이나라를 수호한다!"],
|
||||
[0, "슈리", null, 0, null, 81, 34, 100, 0, 160, 300, null, "신산", "하와와"],
|
||||
[0, "미나미", null, 0, null, 85, 56, 98, 0, 160, 300, null, "귀모"],
|
||||
[0, "린린", null, 0, null, 92, 99, 44, 0, 160, 300, null, "무쌍", "~거다"],
|
||||
[0, "아이샤", null, 0, null, 96, 98, 71, 0, 160, 300, null, "위압"],
|
||||
[0, "모토미야 미야코", null, 0, null, 71, 64, 77, 0, 160, 300, null, null],
|
||||
[0, "모토미야 메이", null, 0, null, 81, 55, 80, 0, 160, 300, null, null],
|
||||
[0, "오오시 리네", null, 0, null, 66, 72, 46, 0, 160, 300, null, null],
|
||||
[0, "타카이시 나츠히코", null, 0, null, 51, 33, 67, 0, 160, 300, null, null],
|
||||
[0, "유해", null, 0, null, 85, 87, 64, 0, 160, 300, null, null],
|
||||
[0, "유채", null, 0, null, 64, 71, 23, 0, 160, 300, null, null],
|
||||
[0, "유창", null, 0, null, 59, 68, 33, 0, 160, 300, null, null],
|
||||
[0, "타카이시 타케루", null, 0, null, 80, 92, 65, 0, 160, 300, null, "무쌍"],
|
||||
[0, "타카이시 히카리", null, 0, null, 31, 11, 90, 0, 160, 300, null, "인덕"],
|
||||
[0, "타카이시 노조미", null, 0, null, 82, 66, 81, 0, 160, 300, null, null],
|
||||
[0, "타카이시 미츠루", null, 0, null, 85, 51, 71, 0, 160, 300, null, null, "이 나라가 왜이리 망가져 버린걸까"],
|
||||
[0, "유상", null, 0, null, 66, 77, 51, 0, 160, 300, null, null],
|
||||
[0, "유상호", null, 0, null, 39, 56, 44, 0, 160, 300, null, null, "쯧. 런애가 내 딸이라니 수치야"],
|
||||
[0, "서유현", null, 0, null, 42, 44, 60, 0, 160, 300, null, null, "하… 내가 교육을 잘못했구나"],
|
||||
[0, "오준", null, 0, null, 69, 12, 84, 0, 160, 300, null, null, "이 지역은 이제부터 내것이다!"],
|
||||
[10, "도니 버밀리언", null, 0, null, 48, 14, 66, 0, 160, 300, null, null],
|
||||
[0, "모한다르", null, 0, null, 68, 81, 45, 0, 160, 300, null, null],
|
||||
[0, "월리엄 와이트", null, 0, null, 55, 64, 88, 0, 160, 300, null, null, "아니 나를 별명으로 부르지 말라고!"],
|
||||
[0, "도미니크 헥터", null, 0, null, 57, 69, 41, 0, 160, 300, null, null],
|
||||
[0, "리만 베리오스", null, 0, null, 55, 69, 40, 0, 160, 300, null, null],
|
||||
[1, "고야 나카타", null, 0, null, 73, 55, 77, 0, 160, 300, null, null, "유키코, 난 너를 언제나 사랑할거야"],
|
||||
[1, "니시나 묘토", null, 0, null, 63, 67, 44, 0, 160, 300, null, null, "에휴 유키코를 지키는데 이유는 없지만 말이지"],
|
||||
[0, "오오시 마카코", null, 0, null, 55, 73, 55, 0, 160, 300, null, null, "젠장…! 유키코 놈들 절로 가만두지 않을거다!"],
|
||||
[0, "스즈이 이로키", null, 0, null, 63, 59, 37, 0, 160, 300, null, null, "우리는 고사모! 유키코와 동료들을 증오하는 클래스 메이트!"],
|
||||
[0, "스즈키 이로이", null, 0, null, 59, 64, 44, 0, 160, 300, null, null, "유키코는 증오의 철퇴를 마주보아라!"],
|
||||
[0, "히라구시 토노", null, 0, null, 51, 58, 59, 0, 160, 300, null, null],
|
||||
[0, "미타키 신고", null, 0, null, 68, 77, 64, 0, 160, 300, null, null],
|
||||
[0, "섀도 게일", null, 0, null, 57, 69, 62, 0, 160, 300, null, null],
|
||||
[0, "사야코", null, 0, null, 69, 75, 60, 0, 160, 300, null, null],
|
||||
[0, "미요가타노 나코", null, 0, null, 77, 55, 79, 0, 160, 300, null, null, "fucking doll!"],
|
||||
[0, "첼너 마우스", null, 0, null, 51, 85, 2, 0, 160, 300, null, null, "체르나는 그런거 싫단 말이야! 내꺼라고!"],
|
||||
[0, "페치카", null, 0, null, 68, 8, 80, 0, 160, 300, null, null],
|
||||
[0, "기타노 유리코", null, 0, null, 14, 9, 64, 0, 160, 300, null, null, "유키코는 참 의젓한 아이야."],
|
||||
[0, "니얀다 카멘", null, 0, null, 86, 85, 41, 0, 160, 300, null, null, "살려달라고 외치면 그 누구든 구할거야, 설사 적이라 할지라도"],
|
||||
[0, "니얀다 카렌", null, 0, null, 73, 88, 60, 0, 160, 300, null, null],
|
||||
[0, "니얀다 아렌", null, 0, null, 73, 85, 58, 0, 160, 300, null, null],
|
||||
[0, "니얀다 루나", null, 0, null, 84, 81, 75, 0, 160, 300, null, null],
|
||||
[0, "니얀다 아코", null, 0, null, 67, 80, 55, 0, 160, 300, null, null],
|
||||
[0, "니얀다 세인트", null, 0, null, 81, 83, 71, 0, 160, 300, null, null],
|
||||
[0, "니얀다 레인", null, 0, null, 66, 82, 52, 0, 160, 300, null, null],
|
||||
[0, "니얀다 마우스", null, 0, null, 69, 74, 39, 0, 160, 300, null, null],
|
||||
[0, "마키무라 신타로", null, 0, null, 65, 62, 39, 0, 160, 300, null, null],
|
||||
[0, "요시야마 에리", null, 0, null, 46, 12, 55, 0, 160, 300, null, null],
|
||||
[0, "타케우치 리키", null, 0, null, 51, 33, 72, 0, 160, 300, null, null, "세상에는 승자와 패자가 있다, 허나 그것은 사실일까?"],
|
||||
[0, "나카가와 노리코", null, 0, null, 19, 8, 68, 0, 160, 300, null, null, "알고있엇니? 수십년간 전쟁이 지속된 이 나라에도 이렇게 아름다운 봄이 온다는 것을, 돌아오지 않는 계절은 없어, 신기해"],
|
||||
[0, "타마키 이로하", null, 0, null, 75, 69, 62, 0, 160, 300, null, null],
|
||||
[0, "타마키 우이", null, 0, null, 87, 53, 74, 0, 160, 300, null, null, "마기우스의 날개의 쉼터에 온것을 환영해 언니"],
|
||||
[0, "사토미 토우카", null, 0, null, 65, 47, 92, 0, 160, 300, null, null, "우린 우이가 너무 좋아~ 이로하 언니도"],
|
||||
[0, "히이라기 네무", null, 0, null, 57, 48, 93, 0, 160, 300, null, null],
|
||||
[0, "아노토카 모미카", null, 0, null, 69, 81, 74, 0, 160, 300, null, null, "친구들을 믿는 굳건한 마음 큐어 프리트"],
|
||||
[0, "모노미야 세이나", null, 0, null, 77, 83, 41, 0, 160, 300, null, null, "어떤 유혹에도 빛을 잃지않는 깨끗한 마음 큐어 다이아!"],
|
||||
[0, "모노야마 유이", null, 0, null, 69, 85, 60, 0, 160, 300, null, null, "사랑하는 사람을 지키기 위한 진실한 마음 큐어 실린!"],
|
||||
[0, "루시에르", null, 0, null, 84, 72, 80, 0, 160, 300, null, null, "내 딸들은 행복했으면 좋겟어"],
|
||||
[0, "큐어 루프", null, 0, null, 63, 81, 40, 0, 160, 300, null, null, "감히… 내동생을 어둠의 가면으로 죽였겟다! 복수할거야! 로스쿨"],
|
||||
[0, "가제크", null, 0, null, 55, 79, 51, 0, 160, 300, null, null, "어…언니 사…살려줘!!"],
|
||||
[0, "큐어 가젯", null, 0, null, 67, 81, 55, 0, 160, 300, null, null, "어머니… 어머니의 원수 꼭 갚겠어요.. 우리를 버린 로스쿨에게 복수할 겁니다"],
|
||||
[0, "큐어 루비", null, 0, null, 73, 79, 59, 0, 160, 300, null, null, "언니 우리 같이 힘내자"],
|
||||
[0, "루미에르", null, 0, null, 80, 81, 64, 0, 160, 300, null, null],
|
||||
[0, "토모야마 리에리", null, 0, null, 92, 55, 91, 0, 160, 300, null, null],
|
||||
[0, "니카와라 리나", null, 0, null, 75, 67, 77, 0, 160, 300, null, null],
|
||||
[0, "테네유치 이야노", null, 0, null, 66, 81, 55, 0, 160, 300, null, null],
|
||||
[0, "니시유라 리코", null, 0, null, 64, 84, 75, 0, 160, 300, null, null],
|
||||
[0, "소우다 마키", null, 0, null, 67, 81, 62, 0, 160, 300, null, null],
|
||||
[0, "타니구치유이치로", null, 0, null, 79, 82, 66, 0, 160, 300, null, null],
|
||||
[0, "마라바키 료", null, 0, null, 82, 81, 60, 0, 160, 300, null, null],
|
||||
[0, "에트리카 에슈", null, 0, null, 84, 53, 82, 0, 160, 300, null, null, "모든것은, 나를 이렇게 만든 세상에 복수하기 위해!"],
|
||||
[0, "유가을", null, 0, null, 87, 95, 60, 0, 160, 300, null, null],
|
||||
[0, "츠바이 유시", null, 0, null, 43, 63, 77, 0, 160, 300, null, null],
|
||||
[0, "크람베리", null, 0, null, 82, 93, 51, 0, 160, 300, null, null],
|
||||
[0, "파브", null, 0, null, 41, 10, 78, 0, 160, 300, null, null],
|
||||
[0, "파르", null, 0, null, 43, 10, 88, 0, 160, 300, null, null],
|
||||
[0, "타이요 아카리", null, 0, null, 81, 92, 77, 0, 160, 300, null, null, "나 잊지 않을테니까, 후유나에 대해 절대로 잊지않을 테니까"],
|
||||
[0, "신자키 후유나", null, 0, null, 74, 79, 55, 0, 160, 300, null, null, "안녕 아카리, 아카리와 만나 행복했어"],
|
||||
[0, "크랑테일", null, 0, null, 77, 81, 55, 0, 160, 300, null, null],
|
||||
[0, "타카이시 히모리", null, 0, null, 69, 37, 89, 0, 160, 300, null, null, "내 나라, 부모님의 나라 내가 지킬거야"],
|
||||
[0, "사카나기 아야나", null, 0, null, 73, 89, 53, 0, 160, 300, null, null, "난 스윔스윔, 잘부탁해"],
|
||||
[0, "사카나기 이즈카", null, 0, null, 77, 82, 60, 0, 160, 300, null, null, "난 사야코야"],
|
||||
[0, "릿프", null, 0, null, 51, 9, 61, 0, 160, 300, null, null],
|
||||
[0, "다크니스 드림", null, 0, null, 64, 93, 66, 0, 160, 300, null, null],
|
||||
[0, "큐어 멜로디", null, 0, null, 74, 88, 46, 0, 160, 300, null, null],
|
||||
[0, "큐어 하모니", null, 0, null, 81, 88, 55, 0, 160, 300, null, null],
|
||||
[0, "큐어 블루펄", null, 0, null, 87, 92, 80, 0, 160, 300, null, null],
|
||||
[0, "큐어 위시", null, 0, null, 83, 77, 42, 0, 160, 300, null, null],
|
||||
[0, "큐어 비트", null, 0, null, 69, 88, 68, 0, 160, 300, null, null],
|
||||
[0, "하드고어 앨리스", null, 0, null, 73, 79, 70, 0, 160, 300, null, null],
|
||||
[0, "푸크푹", null, 0, null, 87, 88, 64, 0, 160, 300, null, null],
|
||||
[0, "카나", null, 0, null, 77, 89, 69, 0, 160, 300, null, null],
|
||||
[0, "키도 미노루", null, 0, null, 81, 53, 79, 0, 160, 300, null, null],
|
||||
[0, "리 슈촌", null, 0, null, 66, 27, 79, 0, 160, 300, null, null],
|
||||
[0, "아마노 네네", null, 0, null, 77, 55, 89, 0, 160, 300, null, null],
|
||||
[0, "쿠도 타이키", null, 0, null, 86, 60, 93, 0, 160, 300, null, null],
|
||||
[0, "히노모토 아카리", null, 0, null, 70, 17, 81, 0, 160, 300, null, null],
|
||||
[0, "아오누마 키리하", null, 0, null, 84, 67, 85, 0, 160, 300, null, null],
|
||||
[0, "츠루기 젠지로", null, 0, null, 56, 69, 40, 0, 160, 300, null, null],
|
||||
[0, "향상성", null, 0, null, 82, 77, 90, 0, 160, 300, null, null],
|
||||
[0, "이그드라실", null, 0, null, 80, 80, 77, 0, 160, 300, null, null, "저는 디지털 월드의 평화를 바라는자,"],
|
||||
[0, "렌", null, 0, null, 89, 100, 42, 0, 160, 300, null, "무쌍"],
|
||||
[0, "네네네", null, 0, null, 63, 55, 89, 0, 160, 300, null, null],
|
||||
[0, "이소긴&야도간", null, 0, null, 58, 77, 39, 0, 160, 300, null, null],
|
||||
[0, "바스도라", null, 0, null, 64, 71, 27, 0, 160, 300, null, null],
|
||||
[0, "포이즈니", null, 0, null, 68, 89, 66, 0, 160, 300, null, null],
|
||||
[0, "긴토레스키", null, 0, null, 80, 104, 70, 0, 160, 300, null, "무쌍"],
|
||||
[0, "키리야", null, 0, null, 73, 82, 55, 0, 160, 300, null, null],
|
||||
[0, "큐어 옐", null, 0, null, 90, 96, 76, 0, 160, 300, null, null],
|
||||
[0, "큐어 앙주", null, 0, null, 83, 85, 72, 0, 160, 300, null, null],
|
||||
[0, "큐어 에투알", null, 0, null, 80, 83, 70, 0, 160, 300, null, null],
|
||||
[0, "닥터 크라이시스", null, 0, null, 70, 90, 90, 0, 160, 300, null, null],
|
||||
[0, "큐어 원더풀", null, 0, null, 82, 85, 52, 0, 160, 300, null, null],
|
||||
[0, "큐어 냐미", null, 0, null, 85, 83, 73, 0, 160, 300, null, null],
|
||||
[0, "큐어 리히트", null, 0, null, 89, 93, 74, 0, 160, 300, null, null],
|
||||
[0, "다크 드림", null, 0, null, 77, 94, 76, 0, 160, 300, null, null],
|
||||
[0, "큐어 프렌디", null, 0, null, 86, 83, 77, 0, 160, 300, null, null],
|
||||
[0, "큐어 릴리안", null, 0, null, 87, 82, 80, 0, 160, 300, null, null]
|
||||
],
|
||||
"general_ex":[
|
||||
|
||||
],
|
||||
"initialEvents": [
|
||||
[
|
||||
true,
|
||||
[
|
||||
"ChangeCity",
|
||||
"all",
|
||||
{
|
||||
"trade": 100
|
||||
}
|
||||
]
|
||||
]
|
||||
],
|
||||
"events": [
|
||||
[
|
||||
"month",
|
||||
1000,
|
||||
[
|
||||
"Date",
|
||||
"==",
|
||||
180,
|
||||
1
|
||||
],
|
||||
[
|
||||
"ChangeCity",
|
||||
"all",
|
||||
{
|
||||
"trade": 100
|
||||
}
|
||||
],
|
||||
[
|
||||
"DeleteEvent"
|
||||
]
|
||||
],
|
||||
[
|
||||
"month",
|
||||
1000,
|
||||
[
|
||||
"Date",
|
||||
"==",
|
||||
180,
|
||||
7
|
||||
],
|
||||
[
|
||||
"ChangeCity",
|
||||
"all",
|
||||
{
|
||||
"trade": 100
|
||||
}
|
||||
],
|
||||
[
|
||||
"DeleteEvent"
|
||||
]
|
||||
],
|
||||
[
|
||||
"month",
|
||||
1000,
|
||||
[
|
||||
"Date",
|
||||
"==",
|
||||
181,
|
||||
1
|
||||
],
|
||||
[
|
||||
"ChangeCity",
|
||||
"all",
|
||||
{
|
||||
"trade": 100
|
||||
}
|
||||
],
|
||||
[
|
||||
"DeleteEvent"
|
||||
]
|
||||
],
|
||||
[
|
||||
"month",
|
||||
1000,
|
||||
[
|
||||
"Date",
|
||||
"==",
|
||||
181,
|
||||
7
|
||||
],
|
||||
[
|
||||
"ChangeCity",
|
||||
"all",
|
||||
{
|
||||
"trade": 100
|
||||
}
|
||||
],
|
||||
[
|
||||
"DeleteEvent"
|
||||
]
|
||||
],
|
||||
[
|
||||
"month",
|
||||
1000,
|
||||
[
|
||||
"Date",
|
||||
"==",
|
||||
182,
|
||||
1
|
||||
],
|
||||
[
|
||||
"ChangeCity",
|
||||
"all",
|
||||
{
|
||||
"trade": 100
|
||||
}
|
||||
],
|
||||
[
|
||||
"DeleteEvent"
|
||||
]
|
||||
],
|
||||
[
|
||||
"month",
|
||||
1000,
|
||||
[
|
||||
"Date",
|
||||
"==",
|
||||
182,
|
||||
7
|
||||
],
|
||||
[
|
||||
"ChangeCity",
|
||||
"all",
|
||||
{
|
||||
"trade": 100
|
||||
}
|
||||
],
|
||||
[
|
||||
"DeleteEvent"
|
||||
]
|
||||
],
|
||||
[
|
||||
"destroy_nation",
|
||||
1000,
|
||||
[
|
||||
"and",
|
||||
[
|
||||
"Date",
|
||||
">=",
|
||||
183,
|
||||
1
|
||||
],
|
||||
[
|
||||
"RemainNation",
|
||||
"==",
|
||||
1
|
||||
]
|
||||
],
|
||||
[
|
||||
"BlockScoutAction"
|
||||
],
|
||||
[
|
||||
"DeleteEvent"
|
||||
]
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"title": "【가상모드29】 리그오브레전드 v1.0",
|
||||
"startYear": 2024,
|
||||
"title": "【가상모드29】 리그오브레전드 v1.1",
|
||||
"startYear": 2025,
|
||||
"history": [
|
||||
"<C>●</>2024년 1월:<L><b>【가상모드99】</b>리그 오브 레전드 (전콘도움 네이미)</>",
|
||||
"<C>●</>2024년 1월:<L><b>【가상모드29】</b>리그 오브 레전드 (비급) (전콘도움 네이미)</>",
|
||||
"<C>●</>2024년 1월:<L><b>【이벤트】</b></>소환사의 협곡에 오신 것을 환영합니다."
|
||||
],
|
||||
"stat": {
|
||||
@@ -29,6 +29,12 @@
|
||||
["타곤", "#0000FF", 5000, 5000, "타곤", 300, "덕가", 2, ["한중"]]
|
||||
],
|
||||
"diplomacy":[],
|
||||
"const": {
|
||||
"randGenFirstName": ["근거리", "원거리", "대포", "슈퍼"],
|
||||
"randGenMiddleName": [""],
|
||||
"randGenLastName": [" 미니언"],
|
||||
"npcMessageFreqByDay": 2
|
||||
},
|
||||
"general":[
|
||||
[0, "가렌", null, 10, "성도", 101, 97, 49, 11, 2009, 2200, null, null, "내 검과 심장은 데마시아의 것이다."],
|
||||
[0, "갈리오", null, 10, "성도", 108, 58, 96, 1, 2009, 2200, null, null, "힘을 발휘할 시간이군!"],
|
||||
@@ -232,7 +238,7 @@
|
||||
[0, "바루스", null, 0, null, 88, 113, 59, 0, 2009, 2200, null, null, "죄 지은 자, 고통받을지어다."],
|
||||
[0, "바이", null, 5, "낙양", 103, 104, 49, 1, 2009, 2200, null, null, "일단 한 대 맞아. 질문은 나중에 하고."],
|
||||
[0, "베이가", null, 0, null, 102, 26, 119, 0, 2009, 2200, null, null, "내가 너였다면, 너에게 어떤 자비도 없었을 거란 것만 알아 둬!"],
|
||||
[0, "베인", null, 10, "성도", 84, 116, 55, 1, 2009, 2200, null, null, "어둠에 빠진 자들을 사냥해 볼까?"],
|
||||
[0, "베인", null, 0, null, 84, 116, 55, 0, 2009, 2200, null, null, "어둠에 빠진 자들을 사냥해 볼까?"],
|
||||
[0, "벡스", null, 3, "서량", 89, 56, 112, 1, 2009, 2200, null, null, "뭐, 그러든가, 말든가…"],
|
||||
[0, "벨베스", null, 13, "장안", 103, 96, 60, 1, 2009, 2200, null, null, "내가 바로 적막의 목소리다."],
|
||||
[0, "벨코즈", null, 13, "장안", 84, 55, 118, 1, 2009, 2200, null, null, "해체하여, 지식을 습득한다."],
|
||||
@@ -400,7 +406,7 @@
|
||||
[0, "이블린", null, 0, null, 91, 68, 104, 0, 2009, 2200, null, null, "날 원하잖아, 그렇지?"],
|
||||
[0, "이즈리얼", null, 5, "낙양", 91, 101, 77, 1, 2009, 2200, null, null, "임무를 수락하지! 잠깐, 어디 가는 거라고?"],
|
||||
[0, "일라오이", null, 9, "이도", 102, 94, 58, 11, 2009, 2200, null, null, "설교는 필요 없다. 부러진 뼈가 더 큰 교훈을 새겨 줄 테니."],
|
||||
[0, "자르반 4세", null, 0, null, 96, 101, 61, 0, 2009, 2200, null, null, "내 의지로 여기서 끝을 보겠노라."],
|
||||
[0, "자르반 4세", null, 10, "성도", 96, 101, 61, 12, 2009, 2200, null, null, "내 의지로 여기서 끝을 보겠노라."],
|
||||
[0, "자야", null, 7, "위례", 88, 112, 61, 12, 2009, 2200, null, null, "댄스 파티에 내가 빠질 수는 없지."],
|
||||
[0, "자이라", null, 0, null, 88, 59, 106, 0, 2009, 2200, null, null, "가시 덩굴에 포근히 안겨봐."],
|
||||
[0, "자크", null, 6, "허창", 109, 84, 47, 1, 2009, 2200, null, null, "딱 봐도 잘 싸우게 생기지 않았어?"],
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"title": "【가상모드29-b】 리그오브레전드 v1.0 (비급)",
|
||||
"startYear": 2024,
|
||||
"title": "【가상모드29-b】 리그오브레전드 v1.1 (비급)",
|
||||
"startYear": 2025,
|
||||
"history": [
|
||||
"<C>●</>2024년 1월:<L><b>【가상모드99】</b>리그 오브 레전드 (비급) (전콘도움 네이미)</>",
|
||||
"<C>●</>2024년 1월:<L><b>【가상모드29-b】</b>리그 오브 레전드 (비급) (전콘도움 네이미)</>",
|
||||
"<C>●</>2024년 1월:<L><b>【이벤트】</b></>소환사의 협곡에 오신 것을 환영합니다."
|
||||
],
|
||||
"stat": {
|
||||
@@ -30,9 +30,12 @@
|
||||
],
|
||||
"diplomacy":[],
|
||||
"const": {
|
||||
"randGenFirstName": ["근거리", "원거리", "대포", "슈퍼"],
|
||||
"randGenMiddleName": [""],
|
||||
"randGenLastName": [" 미니언"],
|
||||
"npcBanMessageProb": 0,
|
||||
"npcSeizureMessageProb": 0,
|
||||
"npcMessageFreqByDay": 8,
|
||||
"npcMessageFreqByDay": 2,
|
||||
"availableSpecialWar": [
|
||||
"che_귀병",
|
||||
"che_신산",
|
||||
@@ -373,7 +376,7 @@
|
||||
[0, "바루스", null, 0, null, 88, 113, 59, 0, 2009, 2200, null, null, "죄 지은 자, 고통받을지어다."],
|
||||
[0, "바이", null, 5, "낙양", 103, 104, 49, 1, 2009, 2200, null, null, "일단 한 대 맞아. 질문은 나중에 하고."],
|
||||
[0, "베이가", null, 0, null, 102, 26, 119, 0, 2009, 2200, null, null, "내가 너였다면, 너에게 어떤 자비도 없었을 거란 것만 알아 둬!"],
|
||||
[0, "베인", null, 10, "성도", 84, 116, 55, 1, 2009, 2200, null, null, "어둠에 빠진 자들을 사냥해 볼까?"],
|
||||
[0, "베인", null, 0, null, 84, 116, 55, 0, 2009, 2200, null, null, "어둠에 빠진 자들을 사냥해 볼까?"],
|
||||
[0, "벡스", null, 3, "서량", 89, 56, 112, 1, 2009, 2200, null, null, "뭐, 그러든가, 말든가…"],
|
||||
[0, "벨베스", null, 13, "장안", 103, 96, 60, 1, 2009, 2200, null, null, "내가 바로 적막의 목소리다."],
|
||||
[0, "벨코즈", null, 13, "장안", 84, 55, 118, 1, 2009, 2200, null, null, "해체하여, 지식을 습득한다."],
|
||||
@@ -541,7 +544,7 @@
|
||||
[0, "이블린", null, 0, null, 91, 68, 104, 0, 2009, 2200, null, null, "날 원하잖아, 그렇지?"],
|
||||
[0, "이즈리얼", null, 5, "낙양", 91, 101, 77, 1, 2009, 2200, null, null, "임무를 수락하지! 잠깐, 어디 가는 거라고?"],
|
||||
[0, "일라오이", null, 9, "이도", 102, 94, 58, 11, 2009, 2200, null, null, "설교는 필요 없다. 부러진 뼈가 더 큰 교훈을 새겨 줄 테니."],
|
||||
[0, "자르반 4세", null, 0, null, 96, 101, 61, 0, 2009, 2200, null, null, "내 의지로 여기서 끝을 보겠노라."],
|
||||
[0, "자르반 4세", null, 10, "성도", 96, 101, 61, 12, 2009, 2200, null, null, "내 의지로 여기서 끝을 보겠노라."],
|
||||
[0, "자야", null, 7, "위례", 88, 112, 61, 12, 2009, 2200, null, null, "댄스 파티에 내가 빠질 수는 없지."],
|
||||
[0, "자이라", null, 0, null, 88, 59, 106, 0, 2009, 2200, null, null, "가시 덩굴에 포근히 안겨봐."],
|
||||
[0, "자크", null, 6, "허창", 109, 84, 47, 1, 2009, 2200, null, null, "딱 봐도 잘 싸우게 생기지 않았어?"],
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"title": "【가상모드29-d】 리그오브레전드 v1.0 (파죽지세)",
|
||||
"startYear": 2024,
|
||||
"title": "【가상모드29-d】 리그오브레전드 v1.1 (파죽지세)",
|
||||
"startYear": 2025,
|
||||
"history": [
|
||||
"<C>●</>2024년 1월:<L><b>【가상모드99】</b>리그 오브 레전드 (파죽지세) (전콘도움 네이미)</>",
|
||||
"<C>●</>2024년 1월:<L><b>【가상모드29-d】</b>리그 오브 레전드 (파죽지세) (전콘도움 네이미)</>",
|
||||
"<C>●</>2024년 1월:<L><b>【이벤트】</b></>소환사의 협곡에 오신 것을 환영합니다."
|
||||
],
|
||||
"stat": {
|
||||
@@ -30,10 +30,14 @@
|
||||
],
|
||||
"diplomacy":[],
|
||||
"const": {
|
||||
"randGenFirstName": ["근거리", "원거리", "대포", "슈퍼"],
|
||||
"randGenMiddleName": [""],
|
||||
"randGenLastName": [" 미니언"],
|
||||
"scenarioEffect": "event_StrongAttacker",
|
||||
"availableInstantAction": {
|
||||
"instantRetreat": true
|
||||
}
|
||||
},
|
||||
"npcMessageFreqByDay": 2
|
||||
},
|
||||
"general":[
|
||||
[0, "가렌", null, 10, "성도", 101, 97, 49, 11, 2009, 2200, null, null, "내 검과 심장은 데마시아의 것이다."],
|
||||
@@ -238,7 +242,7 @@
|
||||
[0, "바루스", null, 0, null, 88, 113, 59, 0, 2009, 2200, null, null, "죄 지은 자, 고통받을지어다."],
|
||||
[0, "바이", null, 5, "낙양", 103, 104, 49, 1, 2009, 2200, null, null, "일단 한 대 맞아. 질문은 나중에 하고."],
|
||||
[0, "베이가", null, 0, null, 102, 26, 119, 0, 2009, 2200, null, null, "내가 너였다면, 너에게 어떤 자비도 없었을 거란 것만 알아 둬!"],
|
||||
[0, "베인", null, 10, "성도", 84, 116, 55, 1, 2009, 2200, null, null, "어둠에 빠진 자들을 사냥해 볼까?"],
|
||||
[0, "베인", null, 0, null, 84, 116, 55, 0, 2009, 2200, null, null, "어둠에 빠진 자들을 사냥해 볼까?"],
|
||||
[0, "벡스", null, 3, "서량", 89, 56, 112, 1, 2009, 2200, null, null, "뭐, 그러든가, 말든가…"],
|
||||
[0, "벨베스", null, 13, "장안", 103, 96, 60, 1, 2009, 2200, null, null, "내가 바로 적막의 목소리다."],
|
||||
[0, "벨코즈", null, 13, "장안", 84, 55, 118, 1, 2009, 2200, null, null, "해체하여, 지식을 습득한다."],
|
||||
@@ -406,7 +410,7 @@
|
||||
[0, "이블린", null, 0, null, 91, 68, 104, 0, 2009, 2200, null, null, "날 원하잖아, 그렇지?"],
|
||||
[0, "이즈리얼", null, 5, "낙양", 91, 101, 77, 1, 2009, 2200, null, null, "임무를 수락하지! 잠깐, 어디 가는 거라고?"],
|
||||
[0, "일라오이", null, 9, "이도", 102, 94, 58, 11, 2009, 2200, null, null, "설교는 필요 없다. 부러진 뼈가 더 큰 교훈을 새겨 줄 테니."],
|
||||
[0, "자르반 4세", null, 0, null, 96, 101, 61, 0, 2009, 2200, null, null, "내 의지로 여기서 끝을 보겠노라."],
|
||||
[0, "자르반 4세", null, 10, "성도", 96, 101, 61, 12, 2009, 2200, null, null, "내 의지로 여기서 끝을 보겠노라."],
|
||||
[0, "자야", null, 7, "위례", 88, 112, 61, 12, 2009, 2200, null, null, "댄스 파티에 내가 빠질 수는 없지."],
|
||||
[0, "자이라", null, 0, null, 88, 59, 106, 0, 2009, 2200, null, null, "가시 덩굴에 포근히 안겨봐."],
|
||||
[0, "자크", null, 6, "허창", 109, 84, 47, 1, 2009, 2200, null, null, "딱 봐도 잘 싸우게 생기지 않았어?"],
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"title": "【가상모드29-e】 리그오브레전드 v1.0 (비급+파죽지세)",
|
||||
"startYear": 2024,
|
||||
"title": "【가상모드29-e】 리그오브레전드 v1.1 (비급+파죽지세)",
|
||||
"startYear": 2025,
|
||||
"history": [
|
||||
"<C>●</>2024년 1월:<L><b>【가상모드99】</b>리그 오브 레전드 (비급+파죽지세) (전콘도움 네이미)</>",
|
||||
"<C>●</>2024년 1월:<L><b>【가상모드29-e】</b>리그 오브 레전드 (비급+파죽지세) (전콘도움 네이미)</>",
|
||||
"<C>●</>2024년 1월:<L><b>【이벤트】</b></>소환사의 협곡에 오신 것을 환영합니다."
|
||||
],
|
||||
"stat": {
|
||||
@@ -30,13 +30,16 @@
|
||||
],
|
||||
"diplomacy":[],
|
||||
"const": {
|
||||
"randGenFirstName": ["근거리", "원거리", "대포", "슈퍼"],
|
||||
"randGenMiddleName": [""],
|
||||
"randGenLastName": [" 미니언"],
|
||||
"scenarioEffect": "event_StrongAttacker",
|
||||
"availableInstantAction": {
|
||||
"instantRetreat": true
|
||||
},
|
||||
"npcBanMessageProb": 0,
|
||||
"npcSeizureMessageProb": 0,
|
||||
"npcMessageFreqByDay": 8,
|
||||
"npcMessageFreqByDay": 2,
|
||||
"availableSpecialWar": [
|
||||
"che_귀병",
|
||||
"che_신산",
|
||||
@@ -377,7 +380,7 @@
|
||||
[0, "바루스", null, 0, null, 88, 113, 59, 0, 2009, 2200, null, null, "죄 지은 자, 고통받을지어다."],
|
||||
[0, "바이", null, 5, "낙양", 103, 104, 49, 1, 2009, 2200, null, null, "일단 한 대 맞아. 질문은 나중에 하고."],
|
||||
[0, "베이가", null, 0, null, 102, 26, 119, 0, 2009, 2200, null, null, "내가 너였다면, 너에게 어떤 자비도 없었을 거란 것만 알아 둬!"],
|
||||
[0, "베인", null, 10, "성도", 84, 116, 55, 1, 2009, 2200, null, null, "어둠에 빠진 자들을 사냥해 볼까?"],
|
||||
[0, "베인", null, 0, null, 84, 116, 55, 0, 2009, 2200, null, null, "어둠에 빠진 자들을 사냥해 볼까?"],
|
||||
[0, "벡스", null, 3, "서량", 89, 56, 112, 1, 2009, 2200, null, null, "뭐, 그러든가, 말든가…"],
|
||||
[0, "벨베스", null, 13, "장안", 103, 96, 60, 1, 2009, 2200, null, null, "내가 바로 적막의 목소리다."],
|
||||
[0, "벨코즈", null, 13, "장안", 84, 55, 118, 1, 2009, 2200, null, null, "해체하여, 지식을 습득한다."],
|
||||
@@ -545,7 +548,7 @@
|
||||
[0, "이블린", null, 0, null, 91, 68, 104, 0, 2009, 2200, null, null, "날 원하잖아, 그렇지?"],
|
||||
[0, "이즈리얼", null, 5, "낙양", 91, 101, 77, 1, 2009, 2200, null, null, "임무를 수락하지! 잠깐, 어디 가는 거라고?"],
|
||||
[0, "일라오이", null, 9, "이도", 102, 94, 58, 11, 2009, 2200, null, null, "설교는 필요 없다. 부러진 뼈가 더 큰 교훈을 새겨 줄 테니."],
|
||||
[0, "자르반 4세", null, 0, null, 96, 101, 61, 0, 2009, 2200, null, null, "내 의지로 여기서 끝을 보겠노라."],
|
||||
[0, "자르반 4세", null, 10, "성도", 96, 101, 61, 12, 2009, 2200, null, null, "내 의지로 여기서 끝을 보겠노라."],
|
||||
[0, "자야", null, 7, "위례", 88, 112, 61, 12, 2009, 2200, null, null, "댄스 파티에 내가 빠질 수는 없지."],
|
||||
[0, "자이라", null, 0, null, 88, 59, 106, 0, 2009, 2200, null, null, "가시 덩굴에 포근히 안겨봐."],
|
||||
[0, "자크", null, 6, "허창", 109, 84, 47, 1, 2009, 2200, null, null, "딱 봐도 잘 싸우게 생기지 않았어?"],
|
||||
|
||||
+79
-74
@@ -1,87 +1,92 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
use sammo\GameUnitConstraint\ReqMinRelYear;
|
||||
use sammo\GameUnitConstraint\ReqTech;
|
||||
|
||||
class GameUnitConst extends GameUnitConstBase
|
||||
{
|
||||
const DEFAULT_CREWTYPE = 1100;
|
||||
|
||||
protected static $_buildData = [
|
||||
[
|
||||
1000, self::T_CASTLE, '성벽',
|
||||
100, 100, 7, 0, 0, 99, 9,
|
||||
999999, null, null, 999999,
|
||||
[],//성벽은 공격할 수 없다.
|
||||
[self::T_FOOTMAN=>1.2],
|
||||
['성벽입니다.','생성할 수 없습니다.'],
|
||||
null, null, null
|
||||
],
|
||||
protected static function getBuildData(): array {
|
||||
return [
|
||||
[
|
||||
1000, self::T_CASTLE, '성벽',
|
||||
100, 100, 7, 0, 0, 99, 9,
|
||||
[],
|
||||
[], // 성벽은 공격할 수 없다.
|
||||
[self::T_FOOTMAN=>1.2],
|
||||
['성벽입니다.','생성할 수 없습니다.'],
|
||||
null, null, null
|
||||
],
|
||||
|
||||
[
|
||||
1100, self::T_FOOTMAN, '보병',
|
||||
100, 150, 7, 10, 0, 9, 9,
|
||||
0, null, null, 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['표준적인 보병입니다.','보병은 방어특화이며,','상대가 회피하기 어렵습니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1100, self::T_FOOTMAN, '보병',
|
||||
100, 150, 7, 10, 0, 9, 9,
|
||||
[],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['표준적인 보병입니다.','보병은 방어특화이며,','상대가 회피하기 어렵습니다.'],
|
||||
null, null, null
|
||||
],
|
||||
|
||||
[
|
||||
1200, self::T_ARCHER, '궁병',
|
||||
100, 100, 7, 20, 0, 10, 10,
|
||||
0, null, null, 0,
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
|
||||
['표준적인 궁병입니다.','궁병은 회피특화입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1200, self::T_ARCHER, '궁병',
|
||||
100, 100, 7, 20, 0, 10, 10,
|
||||
[],
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
|
||||
['표준적인 궁병입니다.','궁병은 회피특화입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
|
||||
[
|
||||
1300, self::T_CAVALRY, '기병',
|
||||
150, 100, 7, 5, 0, 11, 11,
|
||||
0, null, null, 0,
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['표준적인 기병입니다.','기병은 공격특화입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1300, self::T_CAVALRY, '기병',
|
||||
150, 100, 7, 5, 0, 11, 11,
|
||||
[],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['표준적인 기병입니다.','기병은 공격특화입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
|
||||
[
|
||||
1400, self::T_WIZARD, '귀병',
|
||||
80, 80, 7, 5, 0.5, 9, 9,
|
||||
0, null, null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['계략을 사용하는 병종입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1405, self::T_WIZARD, '남귀병',
|
||||
60, 60, 7, 10, 0.8, 8, 8,
|
||||
1000, null, null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['전투를 포기하고 계략에 몰두합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1400, self::T_WIZARD, '귀병',
|
||||
80, 80, 7, 5, 0.5, 9, 9,
|
||||
[],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['계략을 사용하는 병종입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1405, self::T_WIZARD, '남귀병',
|
||||
60, 60, 7, 10, 0.8, 8, 8,
|
||||
[],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['전투를 포기하고 계략에 몰두합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
|
||||
[
|
||||
1500, self::T_SIEGE, '정란',
|
||||
100, 100, 6, 0, 0, 15, 5,
|
||||
0, null, null, 3,
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>0.8, self::T_CAVALRY=>0.8, self::T_WIZARD=>0.8, self::T_CASTLE=>1.8],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2],
|
||||
['높은 구조물 위에서 공격합니다.'],
|
||||
['che_성벽부상무효'], null, ['che_성벽선제']
|
||||
],
|
||||
[
|
||||
1501, self::T_SIEGE, '충차',
|
||||
150, 100, 6, 0, 0, 20, 5,
|
||||
1000, null, null, 3,
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>0.8, self::T_CAVALRY=>0.8, self::T_WIZARD=>0.8, self::T_CASTLE=>2.4],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2],
|
||||
['엄청난 위력으로 성벽을 부수어버립니다.'],
|
||||
['che_성벽부상무효'], null, null
|
||||
]
|
||||
];
|
||||
[
|
||||
1500, self::T_SIEGE, '정란',
|
||||
100, 100, 6, 0, 0, 15, 5,
|
||||
[new ReqMinRelYear(3)],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>0.8, self::T_CAVALRY=>0.8, self::T_WIZARD=>0.8, self::T_CASTLE=>1.8],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2],
|
||||
['높은 구조물 위에서 공격합니다.'],
|
||||
['che_성벽부상무효'], null, ['che_성벽선제']
|
||||
],
|
||||
[
|
||||
1501, self::T_SIEGE, '충차',
|
||||
150, 100, 6, 0, 0, 20, 5,
|
||||
[new ReqTech(1000), new ReqMinRelYear(3)],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>0.8, self::T_CAVALRY=>0.8, self::T_WIZARD=>0.8, self::T_CASTLE=>2.4],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2],
|
||||
['엄청난 위력으로 성벽을 부수어버립니다.'],
|
||||
['che_성벽부상무효'], null, null
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,310 +1,318 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
use sammo\GameUnitConstraint\Impossible;
|
||||
use sammo\GameUnitConstraint\ReqCities;
|
||||
use sammo\GameUnitConstraint\ReqMinRelYear;
|
||||
use sammo\GameUnitConstraint\ReqRegions;
|
||||
use sammo\GameUnitConstraint\ReqTech;
|
||||
|
||||
class GameUnitConst extends GameUnitConstBase
|
||||
{
|
||||
protected static $_buildData = [
|
||||
[
|
||||
1000, self::T_CASTLE, '성벽',
|
||||
100, 100, 7, 0, 0, 99, 9,
|
||||
999999, null, null, 999999,
|
||||
[],//성벽은 공격할 수 없다.
|
||||
[self::T_FOOTMAN=>1.2],
|
||||
['성벽입니다.','생성할 수 없습니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
protected static function getBuildData(): array {
|
||||
return [
|
||||
[
|
||||
1000, self::T_CASTLE, '성벽',
|
||||
100, 100, 7, 0, 0, 99, 9,
|
||||
[new Impossible()],
|
||||
[], // 성벽은 공격할 수 없다.
|
||||
[self::T_FOOTMAN=>1.2],
|
||||
['성벽입니다.','생성할 수 없습니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
|
||||
[
|
||||
1100, self::T_FOOTMAN, '보병',
|
||||
100, 150, 7, 10, 0, 9, 9,
|
||||
0, null, null, 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['표준적인 보병입니다.','보병은 방어특화이며,','상대가 회피하기 어렵습니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1101, self::T_FOOTMAN, '청주병',
|
||||
100, 200, 7, 10, 0, 10, 11,
|
||||
1000, null, ['중원'], 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['저렴하고 튼튼합니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1102, self::T_FOOTMAN, '수병',
|
||||
150, 150, 7, 10, 0, 11, 10,
|
||||
1000, null, ['오월'], 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['저렴하고 강력합니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1103, self::T_FOOTMAN, '자객병',
|
||||
100, 150, 8, 20, 0, 10, 10,
|
||||
2000, ['저'], null, 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['은밀하고 날쌥니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1104, self::T_FOOTMAN, '근위병',
|
||||
150, 200, 7, 10, 0, 12, 12,
|
||||
3000, ['낙양'], null, 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['최강의 보병입니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1105, self::T_FOOTMAN, '등갑병',
|
||||
100, 225, 7, 5, 0, 13, 10,
|
||||
1000, null, ['남중'], 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['등갑을 두른 보병입니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1106, self::T_FOOTMAN, '백이병',
|
||||
175, 175, 7, 5, 0, 13, 11,
|
||||
3000, ['성도'], null, 0,
|
||||
[self::T_ARCHER=>1.1, self::T_CAVALRY=>0.9, self::T_SIEGE=>1.1],
|
||||
[self::T_ARCHER=>0.9, self::T_CAVALRY=>1.1, self::T_SIEGE=>0.9],
|
||||
['정예 보병입니다. 불리한 싸움도 버텨냅니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1100, self::T_FOOTMAN, '보병',
|
||||
100, 150, 7, 10, 0, 9, 9,
|
||||
[],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['표준적인 보병입니다.','보병은 방어특화이며,','상대가 회피하기 어렵습니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1101, self::T_FOOTMAN, '청주병',
|
||||
100, 200, 7, 10, 0, 10, 11,
|
||||
[new ReqTech(1000), new ReqRegions('중원')],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['저렴하고 튼튼합니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1102, self::T_FOOTMAN, '수병',
|
||||
150, 150, 7, 10, 0, 11, 10,
|
||||
[new ReqTech(1000), new ReqRegions('오월')],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['저렴하고 강력합니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1103, self::T_FOOTMAN, '자객병',
|
||||
100, 150, 8, 20, 0, 10, 10,
|
||||
[new ReqTech(2000), new ReqCities('저')],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['은밀하고 날쌥니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1104, self::T_FOOTMAN, '근위병',
|
||||
150, 200, 7, 10, 0, 12, 12,
|
||||
[new ReqTech(3000), new ReqCities('낙양')],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['최강의 보병입니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1105, self::T_FOOTMAN, '등갑병',
|
||||
100, 225, 7, 5, 0, 13, 10,
|
||||
[new ReqTech(1000), new ReqRegions('남중')],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8],
|
||||
['등갑을 두른 보병입니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1106, self::T_FOOTMAN, '백이병',
|
||||
175, 175, 7, 5, 0, 13, 11,
|
||||
[new ReqTech(3000), new ReqCities('성도')],
|
||||
[self::T_ARCHER=>1.1, self::T_CAVALRY=>0.9, self::T_SIEGE=>1.1],
|
||||
[self::T_ARCHER=>0.9, self::T_CAVALRY=>1.1, self::T_SIEGE=>0.9],
|
||||
['정예 보병입니다. 불리한 싸움도 버텨냅니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
|
||||
[
|
||||
1200, self::T_ARCHER, '궁병',
|
||||
100, 100, 7, 10, 0, 10, 10,
|
||||
0, null, null, 0,
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
|
||||
['표준적인 궁병입니다.','궁병은 선제사격을 하는 병종입니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1201, self::T_ARCHER, '궁기병',
|
||||
100, 100, 8, 20, 0, 11, 12,
|
||||
1000, null, ['동이'], 0,
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.9, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.1, self::T_SIEGE=>0.8],
|
||||
['말을 타고 잘 피합니다. 특히 다른 궁병보다 보병에게 조금 더 강합니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1202, self::T_ARCHER, '연노병',
|
||||
150, 100, 8, 10, 0, 12, 11,
|
||||
1000, null, ['서촉'], 0,
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
|
||||
['화살을 연사합니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1203, self::T_ARCHER, '강궁병',
|
||||
150, 150, 7, 10, 0, 13, 13,
|
||||
3000, ['양양'], null, 0,
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
|
||||
['강건한 궁병입니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1204, self::T_ARCHER, '석궁병',
|
||||
200, 100, 7, 10, 0, 13, 13,
|
||||
3000, ['건업'], null, 0,
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
|
||||
['강력한 화살을 쏩니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1200, self::T_ARCHER, '궁병',
|
||||
100, 100, 7, 10, 0, 10, 10,
|
||||
[],
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
|
||||
['표준적인 궁병입니다.','궁병은 선제사격을 하는 병종입니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1201, self::T_ARCHER, '궁기병',
|
||||
100, 100, 8, 20, 0, 11, 12,
|
||||
[new ReqTech(1000), new ReqRegions('동이')],
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.9, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.1, self::T_SIEGE=>0.8],
|
||||
['말을 타고 잘 피합니다. 특히 다른 궁병보다 보병에게 조금 더 강합니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1202, self::T_ARCHER, '연노병',
|
||||
150, 100, 8, 10, 0, 12, 11,
|
||||
[new ReqTech(1000), new ReqRegions('서촉')],
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
|
||||
['화살을 연사합니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1203, self::T_ARCHER, '강궁병',
|
||||
150, 150, 7, 10, 0, 13, 13,
|
||||
[new ReqTech(3000), new ReqCities('양양')],
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
|
||||
['강건한 궁병입니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1204, self::T_ARCHER, '석궁병',
|
||||
200, 100, 7, 10, 0, 13, 13,
|
||||
[new ReqTech(3000), new ReqCities('건업')],
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2, self::T_SIEGE=>0.8],
|
||||
['강력한 화살을 쏩니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
|
||||
[
|
||||
1300, self::T_CAVALRY, '기병',
|
||||
150, 100, 7, 5, 0, 11, 11,
|
||||
0, null, null, 0,
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['표준적인 기병입니다.','기병은 공격특화입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1301, self::T_CAVALRY, '백마병',
|
||||
200, 100, 7, 5, 0, 12, 13,
|
||||
1000, null, ['하북'], 0,
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['백마의 위용을 보여줍니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1302, self::T_CAVALRY, '중장기병',
|
||||
150, 150, 7, 5, 0, 13, 12,
|
||||
1000, null, ['서북'], 0,
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['갑주를 두른 기병입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1303, self::T_CAVALRY, '돌격기병',
|
||||
200, 100, 8, 5, 0, 13, 11,
|
||||
2000, ['흉노'], null, 0,
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['저돌적으로 공격합니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1304, self::T_CAVALRY, '철기병',
|
||||
100, 200, 7, 5, 0, 11, 13,
|
||||
2000, ['강'], null, 0,
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['철갑을 두른 기병입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1305, self::T_CAVALRY, '수렵기병',
|
||||
150, 100, 8, 15, 0, 12, 12,
|
||||
2000, ['산월'], null, 0,
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['날쎄고 빠른 기병입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1306, self::T_CAVALRY, '맹수병',
|
||||
250, 175, 6, 0, 0, 16, 16,
|
||||
2000, ['남만'], null, 0,
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['어느 누구보다 강력합니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1307, self::T_CAVALRY, '호표기병',
|
||||
200, 150, 7, 5, 0, 14, 14,
|
||||
3000, ['허창'], null, 0,
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['정예 기병입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1300, self::T_CAVALRY, '기병',
|
||||
150, 100, 7, 5, 0, 11, 11,
|
||||
[],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['표준적인 기병입니다.','기병은 공격특화입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1301, self::T_CAVALRY, '백마병',
|
||||
200, 100, 7, 5, 0, 12, 13,
|
||||
[new ReqTech(1000), new ReqRegions('하북')],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['백마의 위용을 보여줍니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1302, self::T_CAVALRY, '중장기병',
|
||||
150, 150, 7, 5, 0, 13, 12,
|
||||
[new ReqTech(1000), new ReqRegions('서북')],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['갑주를 두른 기병입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1303, self::T_CAVALRY, '돌격기병',
|
||||
200, 100, 8, 5, 0, 13, 11,
|
||||
[new ReqTech(2000), new ReqCities('흉노')],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['저돌적으로 공격합니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1304, self::T_CAVALRY, '철기병',
|
||||
100, 200, 7, 5, 0, 11, 13,
|
||||
[new ReqTech(2000), new ReqCities('강')],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['철갑을 두른 기병입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1305, self::T_CAVALRY, '수렵기병',
|
||||
150, 100, 8, 15, 0, 12, 12,
|
||||
[new ReqTech(2000), new ReqCities('산월')],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['날쎄고 빠른 기병입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1306, self::T_CAVALRY, '맹수병',
|
||||
250, 175, 6, 0, 0, 16, 16,
|
||||
[new ReqTech(2000), new ReqCities('남만')],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['어느 누구보다 강력합니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1307, self::T_CAVALRY, '호표기병',
|
||||
200, 150, 7, 5, 0, 14, 14,
|
||||
[new ReqTech(3000), new ReqCities('허창')],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8],
|
||||
['정예 기병입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
|
||||
[
|
||||
1400, self::T_WIZARD, '귀병',
|
||||
80, 80, 7, 5, 0.5, 9, 9,
|
||||
0, null, null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['계략을 사용하는 병종입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1401, self::T_WIZARD, '신귀병',
|
||||
80, 80, 7, 20, 0.6, 10, 10,
|
||||
1000, null, ['초'], 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['신출귀몰한 귀병입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1402, self::T_WIZARD, '백귀병',
|
||||
80, 130, 7, 5, 0.6, 9, 11,
|
||||
2000, ['오환'], null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['저렴하고 튼튼합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1403, self::T_WIZARD, '흑귀병',
|
||||
130, 80, 7, 5, 0.6, 11, 9,
|
||||
2000, ['왜'], null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['저렴하고 강력합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1404, self::T_WIZARD, '악귀병',
|
||||
130, 130, 7, 0, 0.6, 12, 12,
|
||||
3000, ['장안'], null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['백병전에도 능숙합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1405, self::T_WIZARD, '남귀병',
|
||||
60, 60, 7, 10, 0.8, 8, 8,
|
||||
1000, null, null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['전투를 포기하고 계략에 몰두합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1406, self::T_WIZARD, '황귀병',
|
||||
110, 110, 7, 0, 0.8, 13, 10,
|
||||
3000, ['낙양'], null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['고도로 훈련된 귀병입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1407, self::T_WIZARD, '천귀병',
|
||||
80, 130, 7, 15, 0.6, 11, 12,
|
||||
3000, ['성도'], null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['갑주를 두른 귀병입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1408, self::T_WIZARD, '마귀병',
|
||||
130, 80, 7, 15, 0.6, 12, 11,
|
||||
3000, ['업'], null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['날카로운 무기를 가진 귀병입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1400, self::T_WIZARD, '귀병',
|
||||
80, 80, 7, 5, 0.5, 9, 9,
|
||||
[],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['계략을 사용하는 병종입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1401, self::T_WIZARD, '신귀병',
|
||||
80, 80, 7, 20, 0.6, 10, 10,
|
||||
[new ReqTech(1000), new ReqRegions('초')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['신출귀몰한 귀병입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1402, self::T_WIZARD, '백귀병',
|
||||
80, 130, 7, 5, 0.6, 9, 11,
|
||||
[new ReqTech(2000), new ReqCities('오환')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['저렴하고 튼튼합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1403, self::T_WIZARD, '흑귀병',
|
||||
130, 80, 7, 5, 0.6, 11, 9,
|
||||
[new ReqTech(2000), new ReqCities('왜')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['저렴하고 강력합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1404, self::T_WIZARD, '악귀병',
|
||||
130, 130, 7, 0, 0.6, 12, 12,
|
||||
[new ReqTech(3000), new ReqCities('장안')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['백병전에도 능숙합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1405, self::T_WIZARD, '남귀병',
|
||||
60, 60, 7, 10, 0.8, 8, 8,
|
||||
[new ReqTech(1000)],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['전투를 포기하고 계략에 몰두합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1406, self::T_WIZARD, '황귀병',
|
||||
110, 110, 7, 0, 0.8, 13, 10,
|
||||
[new ReqTech(3000), new ReqCities('낙양')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['고도로 훈련된 귀병입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1407, self::T_WIZARD, '천귀병',
|
||||
80, 130, 7, 15, 0.6, 11, 12,
|
||||
[new ReqTech(3000), new ReqCities('성도')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['갑주를 두른 귀병입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1408, self::T_WIZARD, '마귀병',
|
||||
130, 80, 7, 15, 0.6, 12, 11,
|
||||
[new ReqTech(3000), new ReqCities('업')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
['날카로운 무기를 가진 귀병입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
|
||||
[
|
||||
1500, self::T_SIEGE, '정란',
|
||||
100, 100, 6, 0, 0, 14, 5,
|
||||
0, null, null, 3,
|
||||
[self::T_FOOTMAN=>1.25, self::T_ARCHER=>1.25, self::T_CAVALRY=>1.25, self::T_WIZARD=>1.25, self::T_CASTLE=>1.2, 1106=>1.112],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2, 1106=>1.067],
|
||||
['높은 구조물 위에서 공격합니다. 첫 공격은 성벽을 향합니다.'],
|
||||
['che_성벽부상무효'], ['che_선제사격시도', 'che_선제사격발동'], ['che_성벽선제']
|
||||
],
|
||||
[
|
||||
1502, self::T_SIEGE, '벽력거',
|
||||
150, 100, 6, 5, 0, 20, 5,
|
||||
3000, ['업'], null, 0,
|
||||
[self::T_FOOTMAN=>1.25, self::T_ARCHER=>1.25, self::T_CAVALRY=>1.25, self::T_WIZARD=>1.25, self::T_CASTLE=>1.2, 1106=>1.112],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2, 1106=>1.067],
|
||||
['상대에게 돌덩이를 날립니다. 첫 공격은 성벽을 향합니다.'],
|
||||
['che_성벽부상무효'], ['che_선제사격시도', 'che_선제사격발동'], ['che_성벽선제']
|
||||
],
|
||||
[
|
||||
1503, self::T_SIEGE, '목우',
|
||||
50, 200, 5, 0, 0, 15, 5,
|
||||
3000, ['성도'], null, 0,
|
||||
[self::T_FOOTMAN=>1, self::T_ARCHER=>1, self::T_CAVALRY=>1, self::T_WIZARD=>1, self::T_CASTLE=>1.2],
|
||||
[self::T_FOOTMAN=>1, self::T_ARCHER=>1, self::T_CAVALRY=>1, self::T_WIZARD=>1, 1106=>1],
|
||||
['상대를 저지하는 특수병기입니다.'],
|
||||
['che_성벽부상무효'], ['che_저지시도', 'che_저지발동'], null
|
||||
]
|
||||
];
|
||||
[
|
||||
1500, self::T_SIEGE, '정란',
|
||||
100, 100, 6, 0, 0, 14, 5,
|
||||
[new ReqMinRelYear(3)],
|
||||
[self::T_FOOTMAN=>1.25, self::T_ARCHER=>1.25, self::T_CAVALRY=>1.25, self::T_WIZARD=>1.25, self::T_CASTLE=>1.2, 1106=>1.112],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2, 1106=>1.067],
|
||||
['높은 구조물 위에서 공격합니다. 첫 공격은 성벽을 향합니다.'],
|
||||
['che_성벽부상무효'], ['che_선제사격시도', 'che_선제사격발동'], ['che_성벽선제']
|
||||
],
|
||||
[
|
||||
1502, self::T_SIEGE, '벽력거',
|
||||
150, 100, 6, 5, 0, 20, 5,
|
||||
[new ReqTech(3000), new ReqCities('업')],
|
||||
[self::T_FOOTMAN=>1.25, self::T_ARCHER=>1.25, self::T_CAVALRY=>1.25, self::T_WIZARD=>1.25, self::T_CASTLE=>1.2, 1106=>1.112],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2, 1106=>1.067],
|
||||
['상대에게 돌덩이를 날립니다. 첫 공격은 성벽을 향합니다.'],
|
||||
['che_성벽부상무효'], ['che_선제사격시도', 'che_선제사격발동'], ['che_성벽선제']
|
||||
],
|
||||
[
|
||||
1503, self::T_SIEGE, '목우',
|
||||
50, 200, 5, 0, 0, 15, 5,
|
||||
[new ReqTech(3000), new ReqCities('성도')],
|
||||
[self::T_FOOTMAN=>1, self::T_ARCHER=>1, self::T_CAVALRY=>1, self::T_WIZARD=>1, self::T_CASTLE=>1.2],
|
||||
[self::T_FOOTMAN=>1, self::T_ARCHER=>1, self::T_CAVALRY=>1, self::T_WIZARD=>1, 1106=>1],
|
||||
['상대를 저지하는 특수병기입니다.'],
|
||||
['che_성벽부상무효'], ['che_저지시도', 'che_저지발동'], null
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
+209
-200
@@ -2,209 +2,218 @@
|
||||
|
||||
namespace sammo;
|
||||
|
||||
use sammo\GameUnitConstraint\Impossible;
|
||||
use sammo\GameUnitConstraint\ReqCities;
|
||||
use sammo\GameUnitConstraint\ReqMinRelYear;
|
||||
use sammo\GameUnitConstraint\ReqRegions;
|
||||
use sammo\GameUnitConstraint\ReqTech;
|
||||
|
||||
class GameUnitConst extends GameUnitConstBase
|
||||
{
|
||||
const DEFAULT_CREWTYPE = 1100;
|
||||
|
||||
protected static $_buildData = [
|
||||
[
|
||||
1000, self::T_CASTLE, '성벽',
|
||||
100, 100, 7, 0, 0, 99, 9,
|
||||
999999, null, null, 999999,
|
||||
[], //성벽은 공격할 수 없다.
|
||||
[self::T_FOOTMAN => 1.2],
|
||||
['성벽입니다.', '생성할 수 없습니다.'],
|
||||
null, null, null
|
||||
],
|
||||
protected static function getBuildData(): array
|
||||
{
|
||||
return [
|
||||
[
|
||||
1000, self::T_CASTLE, '성벽',
|
||||
100, 100, 7, 0, 0, 99, 9,
|
||||
[new Impossible()],
|
||||
[], //성벽은 공격할 수 없다.
|
||||
[self::T_FOOTMAN => 1.2],
|
||||
['성벽입니다.', '생성할 수 없습니다.'],
|
||||
null, null, null
|
||||
],
|
||||
|
||||
[
|
||||
1100, self::T_FOOTMAN, '보병',
|
||||
100, 150, 7, 10, 0, 9, 9,
|
||||
0, null, null, 0,
|
||||
[self::T_ARCHER => 1.2, self::T_CAVALRY => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_ARCHER => 0.8, self::T_CAVALRY => 1.2, self::T_SIEGE => 0.8],
|
||||
['표준적인 보병입니다.', '보병은 방어특화이며,', '상대가 회피하기 어렵습니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1200, self::T_ARCHER, '궁병',
|
||||
100, 100, 7, 10, 0, 10, 10,
|
||||
0, null, null, 0,
|
||||
[self::T_CAVALRY => 1.2, self::T_FOOTMAN => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_CAVALRY => 0.8, self::T_FOOTMAN => 1.2, self::T_SIEGE => 0.8],
|
||||
['표준적인 궁병입니다.', '궁병은 선제사격을 하는 병종입니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1300, self::T_CAVALRY, '기병',
|
||||
150, 100, 7, 5, 0, 11, 11,
|
||||
0, null, null, 0,
|
||||
[self::T_FOOTMAN => 1.2, self::T_ARCHER => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_FOOTMAN => 0.8, self::T_ARCHER => 1.2, self::T_SIEGE => 0.8],
|
||||
['표준적인 기병입니다.', '기병은 공격특화입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1104, self::T_FOOTMAN, '근위병',
|
||||
150, 200, 7, 10, 0, 12, 12,
|
||||
2000, ['낙양'], null, 0,
|
||||
[self::T_ARCHER => 1.2, self::T_CAVALRY => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_ARCHER => 0.8, self::T_CAVALRY => 1.2, self::T_SIEGE => 0.8],
|
||||
['최강의 보병입니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1106, self::T_FOOTMAN, '백이병',
|
||||
175, 175, 7, 5, 0, 13, 11,
|
||||
2000, ['성도'], null, 0,
|
||||
[self::T_ARCHER => 1.1, self::T_CAVALRY => 0.9, self::T_SIEGE => 1.1],
|
||||
[self::T_ARCHER => 0.9, self::T_CAVALRY => 1.1, self::T_SIEGE => 0.9],
|
||||
['정예 보병입니다. 불리한 싸움도 버텨냅니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
97201, self::T_ARCHER, '화랑',
|
||||
175, 150, 8, 15, 0.05, 13, 13,
|
||||
2000, ['한', '서라벌'], null, 0,
|
||||
[self::T_CAVALRY => 1.2, self::T_FOOTMAN => 0.9, self::T_SIEGE => 1.2],
|
||||
[self::T_CAVALRY => 0.8, self::T_FOOTMAN => 1.1, self::T_SIEGE => 0.8],
|
||||
['특수한 궁병입니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1204, self::T_ARCHER, '석궁병',
|
||||
200, 125, 7, 10, 0, 13, 13,
|
||||
2000, ['건업'], null, 0,
|
||||
[self::T_CAVALRY => 1.2, self::T_FOOTMAN => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_CAVALRY => 0.8, self::T_FOOTMAN => 1.2, self::T_SIEGE => 0.8],
|
||||
['강력한 화살을 쏩니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1303, self::T_CAVALRY, '돌격기병',
|
||||
200, 125, 8, 10, 0, 13, 12,
|
||||
2000, ['서량', '안정'], null, 0,
|
||||
[self::T_FOOTMAN => 1.2, self::T_ARCHER => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_FOOTMAN => 0.8, self::T_ARCHER => 1.2, self::T_SIEGE => 0.8],
|
||||
['저돌적으로 공격합니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1307, self::T_CAVALRY, '호표기병',
|
||||
200, 150, 7, 5, 0, 14, 14,
|
||||
2000, ['허창'], null, 0,
|
||||
[self::T_FOOTMAN => 1.2, self::T_ARCHER => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_FOOTMAN => 0.8, self::T_ARCHER => 1.2, self::T_SIEGE => 0.8],
|
||||
['정예 기병입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1306, self::T_CAVALRY, '맹수병',
|
||||
250, 175, 6, 0, 0, 16, 16,
|
||||
2000, ['운남'], null, 0,
|
||||
[self::T_FOOTMAN => 1.2, self::T_ARCHER => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_FOOTMAN => 0.8, self::T_ARCHER => 1.2, self::T_SIEGE => 0.8],
|
||||
['어느 누구보다 강력합니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1400, self::T_WIZARD, '귀병',
|
||||
80, 80, 7, 5, 0.5, 9, 9,
|
||||
0, null, null, 0,
|
||||
[self::T_SIEGE => 1.2],
|
||||
[self::T_SIEGE => 0.8],
|
||||
['계략을 사용하는 병종입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1405, self::T_WIZARD, '남귀병',
|
||||
60, 60, 7, 10, 0.8, 8, 8,
|
||||
1000, null, null, 0,
|
||||
[self::T_SIEGE => 1.2],
|
||||
[self::T_SIEGE => 0.8],
|
||||
['전투를 포기하고 계략에 몰두합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1404, self::T_WIZARD, '악귀병',
|
||||
130, 130, 7, 0, 0.6, 12, 12,
|
||||
2000, ['장안'], null, 0,
|
||||
[self::T_SIEGE => 1.2],
|
||||
[self::T_SIEGE => 0.8],
|
||||
['백병전에도 능숙합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1407, self::T_WIZARD, '천귀병',
|
||||
90, 130, 7, 15, 0.6, 11, 12,
|
||||
2000, ['성도'], null, 0,
|
||||
[self::T_SIEGE => 1.2],
|
||||
[self::T_SIEGE => 0.8],
|
||||
['갑주를 두른 귀병입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1500, self::T_SIEGE, '정란',
|
||||
100, 100, 6, 0, 0, 14, 5,
|
||||
0, null, null, 3,
|
||||
[self::T_FOOTMAN => 1.25, self::T_ARCHER => 1.25, self::T_CAVALRY => 1.25, self::T_WIZARD => 1.25, self::T_CASTLE => 1.8, 1106 => 1.112],
|
||||
[self::T_FOOTMAN => 1.2, self::T_ARCHER => 1.2, self::T_CAVALRY => 1.2, self::T_WIZARD => 1.2],
|
||||
['높은 구조물 위에서 공격합니다.'],
|
||||
['che_성벽부상무효'], ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1501, self::T_SIEGE, '충차',
|
||||
150, 100, 6, 0, 0, 20, 5,
|
||||
1000, null, null, 3,
|
||||
[self::T_FOOTMAN => 0.8, self::T_ARCHER => 0.8, self::T_CAVALRY => 0.8, self::T_WIZARD => 0.8, self::T_CASTLE => 2.4],
|
||||
[self::T_FOOTMAN => 1.2, self::T_ARCHER => 1.2, self::T_CAVALRY => 1.2, self::T_WIZARD => 1.2],
|
||||
['엄청난 위력으로 성벽을 부수어버립니다.'],
|
||||
['che_성벽부상무효'], null, null
|
||||
],
|
||||
[
|
||||
1502, self::T_SIEGE, '벽력거',
|
||||
135, 100, 6, 5, 0, 20, 5,
|
||||
2000, ['업'], null, 0,
|
||||
[self::T_FOOTMAN => 1.25, self::T_ARCHER => 1.25, self::T_CAVALRY => 1.25, self::T_WIZARD => 1.25, self::T_CASTLE => 1.8, 1106 => 1.112],
|
||||
[self::T_FOOTMAN => 0.833, self::T_ARCHER => 0.833, self::T_CAVALRY => 0.833, self::T_WIZARD => 0.833, 1106 => 0.909],
|
||||
['상대에게 돌덩이를 날립니다.'],
|
||||
['che_성벽부상무효'], ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
97101, self::T_FOOTMAN, '중장보병',
|
||||
150, 175, 7, 10, 0, 12, 12,
|
||||
3000, null, null, 0,
|
||||
[self::T_ARCHER => 1.2, self::T_CAVALRY => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_ARCHER => 0.8, self::T_CAVALRY => 1.2, self::T_SIEGE => 0.8],
|
||||
['전천후 보병입니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1202, self::T_ARCHER, '연노병',
|
||||
150, 175, 8, 10, 0, 12, 12,
|
||||
3000, null, null, 0,
|
||||
[self::T_CAVALRY => 1.2, self::T_FOOTMAN => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_CAVALRY => 0.8, self::T_FOOTMAN => 1.2, self::T_SIEGE => 0.8],
|
||||
['화살을 연사합니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1304, self::T_CAVALRY, '철기병',
|
||||
175, 175, 7, 5, 0, 13, 13,
|
||||
3000, null, null, 0,
|
||||
[self::T_FOOTMAN => 1.2, self::T_ARCHER => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_FOOTMAN => 0.8, self::T_ARCHER => 1.2, self::T_SIEGE => 0.8],
|
||||
['철갑을 두른 기병입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1401, self::T_WIZARD, '신귀병',
|
||||
100, 100, 7, 20, 0.6, 12, 12,
|
||||
3000, null, null, 0,
|
||||
[self::T_SIEGE => 1.2],
|
||||
[self::T_SIEGE => 0.8],
|
||||
['신출귀몰한 귀병입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
];
|
||||
[
|
||||
1100, self::T_FOOTMAN, '보병',
|
||||
100, 150, 7, 10, 0, 9, 9,
|
||||
[],
|
||||
[self::T_ARCHER => 1.2, self::T_CAVALRY => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_ARCHER => 0.8, self::T_CAVALRY => 1.2, self::T_SIEGE => 0.8],
|
||||
['표준적인 보병입니다.', '보병은 방어특화이며,', '상대가 회피하기 어렵습니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1200, self::T_ARCHER, '궁병',
|
||||
100, 100, 7, 10, 0, 10, 10,
|
||||
[],
|
||||
[self::T_CAVALRY => 1.2, self::T_FOOTMAN => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_CAVALRY => 0.8, self::T_FOOTMAN => 1.2, self::T_SIEGE => 0.8],
|
||||
['표준적인 궁병입니다.', '궁병은 선제사격을 하는 병종입니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1300, self::T_CAVALRY, '기병',
|
||||
150, 100, 7, 5, 0, 11, 11,
|
||||
[],
|
||||
[self::T_FOOTMAN => 1.2, self::T_ARCHER => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_FOOTMAN => 0.8, self::T_ARCHER => 1.2, self::T_SIEGE => 0.8],
|
||||
['표준적인 기병입니다.', '기병은 공격특화입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1104, self::T_FOOTMAN, '근위병',
|
||||
150, 200, 7, 10, 0, 12, 12,
|
||||
[new ReqTech(2000), new ReqCities('낙양')],
|
||||
[self::T_ARCHER => 1.2, self::T_CAVALRY => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_ARCHER => 0.8, self::T_CAVALRY => 1.2, self::T_SIEGE => 0.8],
|
||||
['최강의 보병입니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1106, self::T_FOOTMAN, '백이병',
|
||||
175, 175, 7, 5, 0, 13, 11,
|
||||
[new ReqTech(2000), new ReqCities('성도')],
|
||||
[self::T_ARCHER => 1.1, self::T_CAVALRY => 0.9, self::T_SIEGE => 1.1],
|
||||
[self::T_ARCHER => 0.9, self::T_CAVALRY => 1.1, self::T_SIEGE => 0.9],
|
||||
['정예 보병입니다. 불리한 싸움도 버텨냅니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
97201, self::T_ARCHER, '화랑',
|
||||
175, 150, 8, 15, 0.05, 13, 13,
|
||||
[new ReqTech(2000), new ReqCities('한', '서라벌')],
|
||||
[self::T_CAVALRY => 1.2, self::T_FOOTMAN => 0.9, self::T_SIEGE => 1.2],
|
||||
[self::T_CAVALRY => 0.8, self::T_FOOTMAN => 1.1, self::T_SIEGE => 0.8],
|
||||
['특수한 궁병입니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1204, self::T_ARCHER, '석궁병',
|
||||
200, 125, 7, 10, 0, 13, 13,
|
||||
[new ReqTech(2000), new ReqCities('건업')],
|
||||
[self::T_CAVALRY => 1.2, self::T_FOOTMAN => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_CAVALRY => 0.8, self::T_FOOTMAN => 1.2, self::T_SIEGE => 0.8],
|
||||
['강력한 화살을 쏩니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1303, self::T_CAVALRY, '돌격기병',
|
||||
200, 125, 8, 10, 0, 13, 12,
|
||||
[new ReqTech(2000), new ReqCities('서량', '안정')],
|
||||
[self::T_FOOTMAN => 1.2, self::T_ARCHER => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_FOOTMAN => 0.8, self::T_ARCHER => 1.2, self::T_SIEGE => 0.8],
|
||||
['저돌적으로 공격합니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1307, self::T_CAVALRY, '호표기병',
|
||||
200, 150, 7, 5, 0, 14, 14,
|
||||
[new ReqTech(2000), new ReqCities('허창')],
|
||||
[self::T_FOOTMAN => 1.2, self::T_ARCHER => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_FOOTMAN => 0.8, self::T_ARCHER => 1.2, self::T_SIEGE => 0.8],
|
||||
['정예 기병입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1306, self::T_CAVALRY, '맹수병',
|
||||
250, 175, 6, 0, 0, 16, 16,
|
||||
[new ReqTech(2000), new ReqCities('운남')],
|
||||
[self::T_FOOTMAN => 1.2, self::T_ARCHER => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_FOOTMAN => 0.8, self::T_ARCHER => 1.2, self::T_SIEGE => 0.8],
|
||||
['어느 누구보다 강력합니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1400, self::T_WIZARD, '귀병',
|
||||
80, 80, 7, 5, 0.5, 9, 9,
|
||||
[],
|
||||
[self::T_SIEGE => 1.2],
|
||||
[self::T_SIEGE => 0.8],
|
||||
['계략을 사용하는 병종입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1405, self::T_WIZARD, '남귀병',
|
||||
60, 60, 7, 10, 0.8, 8, 8,
|
||||
[new ReqTech(1000)],
|
||||
[self::T_SIEGE => 1.2],
|
||||
[self::T_SIEGE => 0.8],
|
||||
['전투를 포기하고 계략에 몰두합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1404, self::T_WIZARD, '악귀병',
|
||||
130, 130, 7, 0, 0.6, 12, 12,
|
||||
[new ReqTech(2000), new ReqCities('장안')],
|
||||
[self::T_SIEGE => 1.2],
|
||||
[self::T_SIEGE => 0.8],
|
||||
['백병전에도 능숙합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1407, self::T_WIZARD, '천귀병',
|
||||
90, 130, 7, 15, 0.6, 11, 12,
|
||||
[new ReqTech(2000), new ReqCities('성도')],
|
||||
[self::T_SIEGE => 1.2],
|
||||
[self::T_SIEGE => 0.8],
|
||||
['갑주를 두른 귀병입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1500, self::T_SIEGE, '정란',
|
||||
100, 100, 6, 0, 0, 14, 5,
|
||||
[new ReqMinRelYear(3)],
|
||||
[self::T_FOOTMAN => 1.25, self::T_ARCHER => 1.25, self::T_CAVALRY => 1.25, self::T_WIZARD => 1.25, self::T_CASTLE => 1.8, 1106 => 1.112],
|
||||
[self::T_FOOTMAN => 1.2, self::T_ARCHER => 1.2, self::T_CAVALRY => 1.2, self::T_WIZARD => 1.2],
|
||||
['높은 구조물 위에서 공격합니다.'],
|
||||
['che_성벽부상무효'], ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1501, self::T_SIEGE, '충차',
|
||||
150, 100, 6, 0, 0, 20, 5,
|
||||
[new ReqTech(1000), new ReqMinRelYear(3)],
|
||||
[self::T_FOOTMAN => 0.8, self::T_ARCHER => 0.8, self::T_CAVALRY => 0.8, self::T_WIZARD => 0.8, self::T_CASTLE => 2.4],
|
||||
[self::T_FOOTMAN => 1.2, self::T_ARCHER => 1.2, self::T_CAVALRY => 1.2, self::T_WIZARD => 1.2],
|
||||
['엄청난 위력으로 성벽을 부수어버립니다.'],
|
||||
['che_성벽부상무효'], null, null
|
||||
],
|
||||
[
|
||||
1502, self::T_SIEGE, '벽력거',
|
||||
135, 100, 6, 5, 0, 20, 5,
|
||||
[new ReqTech(2000), new ReqCities('업')],
|
||||
[self::T_FOOTMAN => 1.25, self::T_ARCHER => 1.25, self::T_CAVALRY => 1.25, self::T_WIZARD => 1.25, self::T_CASTLE => 1.8, 1106 => 1.112],
|
||||
[self::T_FOOTMAN => 0.833, self::T_ARCHER => 0.833, self::T_CAVALRY => 0.833, self::T_WIZARD => 0.833, 1106 => 0.909],
|
||||
['상대에게 돌덩이를 날립니다.'],
|
||||
['che_성벽부상무효'], ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
97101, self::T_FOOTMAN, '중장보병',
|
||||
150, 175, 7, 10, 0, 12, 12,
|
||||
[new ReqTech(3000)],
|
||||
[self::T_ARCHER => 1.2, self::T_CAVALRY => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_ARCHER => 0.8, self::T_CAVALRY => 1.2, self::T_SIEGE => 0.8],
|
||||
['전천후 보병입니다.'],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
1202, self::T_ARCHER, '연노병',
|
||||
150, 175, 8, 10, 0, 12, 12,
|
||||
[new ReqTech(3000)],
|
||||
[self::T_CAVALRY => 1.2, self::T_FOOTMAN => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_CAVALRY => 0.8, self::T_FOOTMAN => 1.2, self::T_SIEGE => 0.8],
|
||||
['화살을 연사합니다.'],
|
||||
null, ['che_선제사격시도', 'che_선제사격발동'], null
|
||||
],
|
||||
[
|
||||
1304, self::T_CAVALRY, '철기병',
|
||||
175, 175, 7, 5, 0, 13, 13,
|
||||
[new ReqTech(3000)],
|
||||
[self::T_FOOTMAN => 1.2, self::T_ARCHER => 0.8, self::T_SIEGE => 1.2],
|
||||
[self::T_FOOTMAN => 0.8, self::T_ARCHER => 1.2, self::T_SIEGE => 0.8],
|
||||
['철갑을 두른 기병입니다.'],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
1401, self::T_WIZARD, '신귀병',
|
||||
100, 100, 7, 20, 0.6, 12, 12,
|
||||
[new ReqTech(3000)],
|
||||
[self::T_SIEGE => 1.2],
|
||||
[self::T_SIEGE => 0.8],
|
||||
['신출귀몰한 귀병입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
+425
-421
@@ -1,6 +1,12 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
use sammo\GameUnitConstraint\Impossible;
|
||||
use sammo\GameUnitConstraint\ReqTech;
|
||||
use sammo\GameUnitConstraint\ReqCities;
|
||||
use sammo\GameUnitConstraint\ReqRegions;
|
||||
use sammo\GameUnitConstraint\ReqMinRelYear;
|
||||
|
||||
class GameUnitConst extends GameUnitConstBase
|
||||
{
|
||||
const DEFAULT_CREWTYPE = 217100;
|
||||
@@ -13,427 +19,425 @@ class GameUnitConst extends GameUnitConstBase
|
||||
self::T_SIEGE => '차병',
|
||||
];
|
||||
|
||||
protected static $_buildData = [
|
||||
[
|
||||
1000, self::T_CASTLE, '성벽',
|
||||
100, 100, 7, 0, 0, 99, 9,
|
||||
999999, null, null, 999999,
|
||||
[],//성벽은 공격할 수 없다.
|
||||
[self::T_FOOTMAN=>1.2],
|
||||
['성벽입니다.','생성할 수 없습니다.'],
|
||||
null, null, null
|
||||
],
|
||||
protected static function getBuildData(): array
|
||||
{
|
||||
return [
|
||||
[
|
||||
1000, self::T_CASTLE, '성벽',
|
||||
100, 100, 7, 0, 0, 99, 9,
|
||||
[new Impossible()],
|
||||
[], //성벽은 공격할 수 없다.
|
||||
[self::T_FOOTMAN=>1.2],
|
||||
['성벽입니다.','생성할 수 없습니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217100, self::T_FOOTMAN, '보병',
|
||||
100, 150, 7, 10, 0, 9, 9,
|
||||
[],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["표준적인 보병입니다. 보병은 방어특화입니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217101, self::T_FOOTMAN, '마물병',
|
||||
110, 160, 7, 10, 0, 9, 10,
|
||||
[new ReqRegions('호넷 마인령', '케이브리스 마인령')],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["마군 지역 기본병종입니다. 조금더 강하지만 쌀을 많이 소비합니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217102, self::T_FOOTMAN, '중장보병',
|
||||
100, 250, 7, 5, 0, 13, 10,
|
||||
[new ReqTech(1000), new ReqRegions('헬만 동부')],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["헬만 특유의 견고한 보병입니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217103, self::T_FOOTMAN, '흑의 군 보병',
|
||||
150, 150, 7, 10, 0, 12, 11,
|
||||
[new ReqTech(1000), new ReqRegions('리자스 남부', '리자스 북부')],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["흑의 군 전통의 체계적인 훈련으로 공격력을 보완했습니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217104, self::T_FOOTMAN, '용병',
|
||||
125, 175, 7, 10, 0, 12, 11,
|
||||
[new ReqTech(1000), new ReqRegions('자유도시 동부')],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["일반 보병보다 비싸지만 받은 만큼은 일해줍니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217105, self::T_FOOTMAN, '사메라이',
|
||||
175, 150, 7, 0, 0, 11, 10,
|
||||
[new ReqTech(1000), new ReqRegions('제스 남부')],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["검으로 난무를 가하는 몬스터 보병입니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217106, self::T_FOOTMAN, '템플나이트병',
|
||||
75, 275, 7, 0, 0, 11, 12,
|
||||
[new ReqTech(1000), new ReqRegions('AL교')],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["공격을 포기하고 오직 방어에만 집중합니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217107, self::T_FOOTMAN, '메이드병',
|
||||
150, 150, 7, 20, 0, 13, 11,
|
||||
[new ReqTech(2000), new ReqCities('메이드의 묘지')],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["켓셀링크 휘하의 날렵한 전투메이드입니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217108, self::T_FOOTMAN, '요괴병',
|
||||
150, 150, 8, 0, 0, 11, 13,
|
||||
[new ReqTech(2000), new ReqCities('오슈')],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["단단한 육체를 믿고 적진을 돌파합니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217109, self::T_FOOTMAN, '리자스 친위병',
|
||||
150, 200, 7, 10, 0, 12, 12,
|
||||
[new ReqTech(3000), new ReqCities('리자스성')],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["여왕을 수호하는 리자스 최강의 보병 정예보병입니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217110, self::T_FOOTMAN, '케이브리스 마물병',
|
||||
200, 150, 7, 5, 0, 13, 14,
|
||||
[new ReqTech(3000), new ReqCities('케이브리스의 성')],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["케이브리스 직속의 마물 정예 전투보병입니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217111, self::T_FOOTMAN, '투신',
|
||||
200, 300, 7, 5, 0, 28, 23,
|
||||
[new ReqTech(5000), new ReqCities('투신도시')],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["성마교단 유적에서 발굴된 사상 최강의 보병입니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217200, self::T_ARCHER, '궁병',
|
||||
100, 100, 7, 20, 0, 10, 10,
|
||||
[],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["표준적인 궁병입니다. 궁병은 회피특화입니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217201, self::T_ARCHER, '투척마물병',
|
||||
150, 100, 7, 10, 0, 11, 12,
|
||||
[new ReqTech(1000), new ReqRegions('호넷 마인령')],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["날렵함을 포기하고 도끼를 투척합니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217202, self::T_ARCHER, '백의 군 궁병',
|
||||
100, 100, 8, 30, 0, 11, 11,
|
||||
[new ReqTech(1000), new ReqRegions('리자스 남부')],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["전략을 활용하여 치고 빠지기에 능합니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217203, self::T_ARCHER, '벌레술사병',
|
||||
100, 150, 7, 20, 0, 12, 12,
|
||||
[new ReqTech(2000), new ReqCities('호박성')],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["벌레들을 부려 몸을 보호하는 궁병입니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217204, self::T_ARCHER, '저격암살병',
|
||||
225, 75, 5, 10, 0, 14, 11,
|
||||
[new ReqTech(2000), new ReqCities('블라디보스토크')],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["독을 바른 탄환으로 적의 목숨을 앗아갑니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217205, self::T_ARCHER, '호루스병',
|
||||
150, 100, 8, 20, 0, 11, 12,
|
||||
[new ReqTech(2000), new ReqCities('거대전함')],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["민첩하게 파고드는 호루스족 궁병입니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217206, self::T_ARCHER, '튤립병',
|
||||
200, 100, 7, 20, 0, 13, 13,
|
||||
[new ReqTech(3000), new ReqCities('커스텀')],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["최첨단병기 튤립으로 적을 폭격합니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217207, self::T_ARCHER, '아이스플레임 궁병',
|
||||
150, 150, 7, 20, 0, 13, 13,
|
||||
[new ReqTech(3000), new ReqCities('라그나로크 아크')],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["혁명을 성공으로 이끈 정예 게릴라 궁병입니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217208, self::T_ARCHER, '카라 궁병',
|
||||
225, 225, 7, 30, 0, 25, 25,
|
||||
[new ReqTech(5000), new ReqCities('펜실 카우')],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["선조의 힘을 이어받은 최강의 카라 정예 궁병입니다."],
|
||||
null, null, null
|
||||
],
|
||||
|
||||
[
|
||||
217100, self::T_FOOTMAN, '보병',
|
||||
100, 150, 7, 10, 0, 9, 9,
|
||||
0, null, null, 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["표준적인 보병입니다. 보병은 방어특화입니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217101, self::T_FOOTMAN, '마물병',
|
||||
110, 160, 7, 10, 0, 9, 10,
|
||||
0, null, ["호넷 마인령","케이브리스 마인령"], 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["마군 지역 기본병종입니다. 조금더 강하지만 쌀을 많이 소비합니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217102, self::T_FOOTMAN, '중장보병',
|
||||
100, 250, 7, 5, 0, 13, 10,
|
||||
1000, null, ["헬만 동부"], 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["헬만 특유의 견고한 보병입니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217103, self::T_FOOTMAN, '흑의 군 보병',
|
||||
150, 150, 7, 10, 0, 12, 11,
|
||||
1000, null, ["리자스 남부","리자스 북부"], 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["흑의 군 전통의 체계적인 훈련으로 공격력을 보완했습니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217104, self::T_FOOTMAN, '용병',
|
||||
125, 175, 7, 10, 0, 12, 11,
|
||||
1000, null, ["자유도시 동부"], 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["일반 보병보다 비싸지만 받은 만큼은 일해줍니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217105, self::T_FOOTMAN, '사메라이',
|
||||
175, 150, 7, 0, 0, 11, 10,
|
||||
1000, null, ["제스 남부"], 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["검으로 난무를 가하는 몬스터 보병입니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217106, self::T_FOOTMAN, '템플나이트병',
|
||||
75, 275, 7, 0, 0, 11, 12,
|
||||
1000, null, ["AL교"], 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["공격을 포기하고 오직 방어에만 집중합니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217107, self::T_FOOTMAN, '메이드병',
|
||||
150, 150, 7, 20, 0, 13, 11,
|
||||
2000, ["메이드의 묘지"], null, 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["켓셀링크 휘하의 날렵한 전투메이드입니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217108, self::T_FOOTMAN, '요괴병',
|
||||
150, 150, 8, 0, 0, 11, 13,
|
||||
2000, ["오슈"], null, 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["단단한 육체를 믿고 적진을 돌파합니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217109, self::T_FOOTMAN, '리자스 친위병',
|
||||
150, 200, 7, 10, 0, 12, 12,
|
||||
3000, ["리자스성"], null, 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["여왕을 수호하는 리자스 최강의 보병 정예보병입니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217110, self::T_FOOTMAN, '케이브리스 마물병',
|
||||
200, 150, 7, 5, 0, 13, 14,
|
||||
3000, ["케이브리스의 성"], null, 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["케이브리스 직속의 마물 정예 전투보병입니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217111, self::T_FOOTMAN, '투신',
|
||||
200, 300, 7, 5, 0, 28, 23,
|
||||
5000, ["투신도시"], null, 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["성마교단 유적에서 발굴된 사상 최강의 보병입니다."],
|
||||
null, ['che_방어력증가5p'], null
|
||||
],
|
||||
[
|
||||
217300, self::T_CAVALRY, '기동병',
|
||||
150, 100, 7, 5, 0, 11, 11,
|
||||
[],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["표준적인 기동병입니다. 기동병은 공격특화입니다."],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
217301, self::T_CAVALRY, '하치온나',
|
||||
175, 100, 7, 15, 0, 12, 12,
|
||||
[new ReqTech(1000), new ReqRegions('자유도시 서부')],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["작은 몸으로 회피하며 따끔한 일격을 먹이는 몬스터 기동병입니다."],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
217302, self::T_CAVALRY, '적의 군 기동병',
|
||||
200, 100, 7, 5, 0, 12, 13,
|
||||
[new ReqTech(1000), new ReqRegions('리자스 북부')],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["리자스군의 자랑인 기동부대입니다."],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
217303, self::T_CAVALRY, '안드로이드 기동병',
|
||||
175, 150, 7, 10, 0, 13, 12,
|
||||
[new ReqTech(2000), new ReqCities('악의 탑')],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["파이아르가 개발한 최첨단 안드로이드 기동병입니다."],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
217304, self::T_CAVALRY, '파란쵸 기동병',
|
||||
200, 100, 8, 5, 0, 13, 11,
|
||||
[new ReqTech(2000), new ReqCities('파란쵸 왕국')],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["적진을 일점돌파하는 파란쵸왕국의 돌격 기동병입니다. "],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
217305, self::T_CAVALRY, '비행마물병',
|
||||
150, 100, 8, 15, 0, 12, 12,
|
||||
[new ReqTech(2000), new ReqCities('죽음의 대지')],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["비행마물에 올라탄 기동마물병입니다."],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
217306, self::T_CAVALRY, '마물조련사병',
|
||||
250, 200, 6, 0, 0, 16, 16,
|
||||
[new ReqTech(3000), new ReqCities('랑그바우')],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["무시무시한 몬스터에 올라타서 싸우는 극강의 기동병입니다."],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
217307, self::T_CAVALRY, '기마병',
|
||||
200, 150, 7, 5, 0, 14, 14,
|
||||
[new ReqTech(3000), new ReqCities('오와리')],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["JAPAN 특유의 기마에 올라타 적을 짓밟는 기동병입니다."],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
217308, self::T_CAVALRY, '엔젤나이트',
|
||||
300, 200, 7, 5, 0, 25, 25,
|
||||
[new ReqTech(5000), new ReqCities('떨어진 궁도')],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["신의 명령으로 파멸을 내리기 위해 강림했습니다."],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
|
||||
[
|
||||
217200, self::T_ARCHER, '궁병',
|
||||
100, 100, 7, 20, 0, 10, 10,
|
||||
0, null, null, 0,
|
||||
[ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["표준적인 궁병입니다. 궁병은 회피특화입니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217201, self::T_ARCHER, '투척마물병',
|
||||
150, 100, 7, 10, 0, 11, 12,
|
||||
1000, null, ["호넷 마인령"], 0,
|
||||
[ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["날렵함을 포기하고 도끼를 투척합니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217202, self::T_ARCHER, '백의 군 궁병',
|
||||
100, 100, 8, 30, 0, 11, 11,
|
||||
1000, null, ["리자스 남부"], 0,
|
||||
[ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["전략을 활용하여 치고 빠지기에 능합니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217203, self::T_ARCHER, '벌레술사병',
|
||||
100, 150, 7, 20, 0, 12, 12,
|
||||
2000, ["호박성"], null, 0,
|
||||
[ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["벌레들을 부려 몸을 보호하는 궁병입니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217204, self::T_ARCHER, '저격암살병',
|
||||
225, 75, 5, 10, 0, 14, 11,
|
||||
2000, ["블라디보스토크"], null, 0,
|
||||
[ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["독을 바른 탄환으로 적의 목숨을 앗아갑니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217205, self::T_ARCHER, '호루스병',
|
||||
150, 100, 8, 20, 0, 11, 12,
|
||||
2000, ["거대전함"], null, 0,
|
||||
[ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["민첩하게 파고드는 호루스족 궁병입니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217206, self::T_ARCHER, '튤립병',
|
||||
200, 100, 7, 20, 0, 13, 13,
|
||||
3000, ["커스텀"], null, 0,
|
||||
[ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["최첨단병기 튤립으로 적을 폭격합니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217207, self::T_ARCHER, '아이스플레임 궁병',
|
||||
150, 150, 7, 20, 0, 13, 13,
|
||||
3000, ["라그나로크 아크"], null, 0,
|
||||
[ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["혁명을 성공으로 이끈 정예 게릴라 궁병입니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217208, self::T_ARCHER, '카라 궁병',
|
||||
225, 225, 7, 30, 0, 25, 25,
|
||||
5000, ["펜실 카우"], null, 0,
|
||||
[ self::T_FOOTMAN=>0.8, self::T_CAVALRY=>1.2, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_CAVALRY=>0.8, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["선조의 힘을 이어받은 최강의 카라 정예 궁병입니다."],
|
||||
null, null, null
|
||||
],
|
||||
|
||||
[
|
||||
217300, self::T_CAVALRY, '기동병',
|
||||
150, 100, 7, 5, 0, 11, 11,
|
||||
0, null, null, 0,
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["표준적인 기동병입니다. 기동병은 공격특화입니다."],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
217301, self::T_CAVALRY, '하치온나',
|
||||
175, 100, 7, 15, 0, 12, 12,
|
||||
1000, null, ["자유도시 서부"], 0,
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["작은 몸으로 회피하며 따끔한 일격을 먹이는 몬스터 기동병입니다."],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
217302, self::T_CAVALRY, '적의 군 기동병',
|
||||
200, 100, 7, 5, 0, 12, 13,
|
||||
1000, null, ["리자스 북부"], 0,
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["리자스군의 자랑인 기동부대입니다."],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
217303, self::T_CAVALRY, '안드로이드 기동병',
|
||||
175, 150, 7, 10, 0, 13, 12,
|
||||
2000, ["악의 탑"], null, 0,
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["파이아르가 개발한 최첨단 안드로이드 기동병입니다."],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
217304, self::T_CAVALRY, '파란쵸 기동병',
|
||||
200, 100, 8, 5, 0, 13, 11,
|
||||
2000, ["파란쵸 왕국"], null, 0,
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["적진을 일점돌파하는 파란쵸왕국의 돌격 기동병입니다. "],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
217305, self::T_CAVALRY, '비행마물병',
|
||||
150, 100, 8, 15, 0, 12, 12,
|
||||
2000, ["죽음의 대지"], null, 0,
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["비행마물에 올라탄 기동마물병입니다."],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
217306, self::T_CAVALRY, '마물조련사병',
|
||||
250, 200, 6, 0, 0, 16, 16,
|
||||
3000, ["랑그바우"], null, 0,
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["무시무시한 몬스터에 올라타서 싸우는 극강의 기동병입니다."],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
217307, self::T_CAVALRY, '기마병',
|
||||
200, 150, 7, 5, 0, 14, 14,
|
||||
3000, ["오와리"], null, 0,
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["JAPAN 특유의 기마에 올라타 적을 짓밟는 기동병입니다."],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
[
|
||||
217308, self::T_CAVALRY, '엔젤나이트',
|
||||
300, 200, 7, 5, 0, 25, 25,
|
||||
5000, ["떨어진 궁도"], null, 0,
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8, self::T_SIEGE=>1.2, 217502=>1],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2, self::T_SIEGE=>0.8, 217502=>1],
|
||||
["신의 명령으로 파멸을 내리기 위해 강림했습니다."],
|
||||
null, ['che_기병병종전투'], null
|
||||
],
|
||||
|
||||
[
|
||||
217400, self::T_WIZARD, '마법병',
|
||||
80, 80, 7, 5, 0.6, 9, 9,
|
||||
0, null, null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["마법을 사용하는 병종입니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217401, self::T_WIZARD, '마물 마법병',
|
||||
90, 90, 7, 0, 0.6, 11, 9,
|
||||
0, null, ["호넷 마인령","케이브리스 마인령"], 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["마군 지역 기본병종입니다. 조금더 강하지만 금을 많이 소비합니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217402, self::T_WIZARD, '카라 마법병',
|
||||
80, 80, 7, 20, 0.6, 10, 10,
|
||||
1000, null, ["카라의 숲"], 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["신속히 움직이며 카라의 저주로 적을 공격합니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217403, self::T_WIZARD, '제스 마법병',
|
||||
100, 100, 7, 0, 0.6, 10, 10,
|
||||
1000, null, ["제스 북부"], 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["마법국가 제스의 전통있는 마법병입니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217404, self::T_WIZARD, '무녀',
|
||||
80, 80, 8, 10, 0.6, 10, 10,
|
||||
1000, null, ["JAPAN"], 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["신마법과 함께 신통한 춤으로 활력을 불어넣는 마법병입니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217405, self::T_WIZARD, '프로즌',
|
||||
90, 70, 7, 10, 0.8, 10, 10,
|
||||
1000, null, ["헬만 서부"], 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["백병전에 불리한 연약한 몸으로 마법 사용에 집중하는 몬스터입니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217406, self::T_WIZARD, '마소한 마법병',
|
||||
70, 90, 7, 10, 0.8, 11, 10,
|
||||
1000, null, ["케이브리스 마인령"], 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["로브를 여러겹 둘러입은 마물마법병입니다. 직접 전투보단 마법에 집중합니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217407, self::T_WIZARD, '신관병',
|
||||
80, 130, 7, 5, 0.6, 9, 11,
|
||||
2000, ["카이즈"], null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["AL교의 전투신관입니다. 몸을 보호하는 성스러운 마법을 사용합니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217408, self::T_WIZARD, '중장마법병',
|
||||
80, 130, 7, 15, 0.6, 11, 12,
|
||||
3000, ["로제스그라드"], null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["두터운 로브를 입고 불길한 주문을 읊습니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217409, self::T_WIZARD, '악마병',
|
||||
130, 80, 7, 15, 0.6, 11, 12,
|
||||
3000, ["올드제스"], null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["고대 제스 왕가의 계약에 따라 소환된 흑마법병입니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217410, self::T_WIZARD, '호넷 마물병',
|
||||
130, 130, 7, 0, 0.6, 12, 12,
|
||||
3000, ["구 마왕성"], null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["호넷 직속의 최강 마물 마법병입니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217411, self::T_WIZARD, 'Z가디언',
|
||||
180, 180, 7, 0, 0.7, 28, 20,
|
||||
5000, ["라그나로크 아크"], null, 0,
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["제스의 기술력이 집약된 최고의 마법병기입니다."],
|
||||
null, null, null
|
||||
],
|
||||
|
||||
[
|
||||
217500, self::T_SIEGE, '정란',
|
||||
150, 150, 6, 0, 0, 15, 5,
|
||||
0, null, null, 3,
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>0.8, self::T_CAVALRY=>0.8, self::T_WIZARD=>0.8, self::T_CASTLE=>1.8],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2],
|
||||
["높은 구조물 위에서 공격합니다."],
|
||||
['che_성벽부상무효'], null, null
|
||||
],
|
||||
[
|
||||
217501, self::T_SIEGE, '충차',
|
||||
150, 100, 6, 0, 0, 20, 5,
|
||||
1000, null, null, 3,
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>0.8, self::T_CAVALRY=>0.8, self::T_WIZARD=>0.8, self::T_CASTLE=>2.4],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2],
|
||||
["엄청난 위력으로 성벽을 부수어버립니다."],
|
||||
['che_성벽부상무효'], null, null
|
||||
],
|
||||
[
|
||||
217502, self::T_SIEGE, '튤립3호',
|
||||
275, 300, 6, 0, 0, 35, 15,
|
||||
5000, ["커스텀"], null, 0,
|
||||
[ ],
|
||||
[ ],
|
||||
["파괴적인 위력과 정말 파괴적인 비용을 자랑하는 전차입니다. "],
|
||||
['che_성벽부상무효'], null, null
|
||||
],
|
||||
|
||||
|
||||
];
|
||||
[
|
||||
217400, self::T_WIZARD, '마법병',
|
||||
80, 80, 7, 5, 0.6, 9, 9,
|
||||
[],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["마법을 사용하는 병종입니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217401, self::T_WIZARD, '마물 마법병',
|
||||
90, 90, 7, 0, 0.6, 11, 9,
|
||||
[new ReqRegions('호넷 마인령', '케이브리스 마인령')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["마군 지역 기본병종입니다. 조금더 강하지만 금을 많이 소비합니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217402, self::T_WIZARD, '카라 마법병',
|
||||
80, 80, 7, 20, 0.6, 10, 10,
|
||||
[new ReqTech(1000), new ReqRegions('카라의 숲')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["신속히 움직이며 카라의 저주로 적을 공격합니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217403, self::T_WIZARD, '제스 마법병',
|
||||
100, 100, 7, 0, 0.6, 10, 10,
|
||||
[new ReqTech(1000), new ReqRegions('제스 북부')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["마법국가 제스의 전통있는 마법병입니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217404, self::T_WIZARD, '무녀',
|
||||
80, 80, 8, 10, 0.6, 10, 10,
|
||||
[new ReqTech(1000), new ReqRegions('JAPAN')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["신마법과 함께 신통한 춤으로 활력을 불어넣는 마법병입니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217405, self::T_WIZARD, '프로즌',
|
||||
90, 70, 7, 10, 0.8, 10, 10,
|
||||
[new ReqTech(1000), new ReqRegions('헬만 서부')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["백병전에 불리한 연약한 몸으로 마법 사용에 집중하는 몬스터입니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217406, self::T_WIZARD, '마소한 마법병',
|
||||
70, 90, 7, 10, 0.8, 11, 10,
|
||||
[new ReqTech(1000), new ReqRegions('케이브리스 마인령')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["로브를 여러겹 둘러입은 마물마법병입니다. 직접 전투보단 마법에 집중합니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217407, self::T_WIZARD, '신관병',
|
||||
80, 130, 7, 5, 0.6, 9, 11,
|
||||
[new ReqTech(2000), new ReqCities('카이즈')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["AL교의 전투신관입니다. 몸을 보호하는 성스러운 마법을 사용합니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217408, self::T_WIZARD, '중장마법병',
|
||||
80, 130, 7, 15, 0.6, 11, 12,
|
||||
[new ReqTech(3000), new ReqCities('로제스그라드')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["두터운 로브를 입고 불길한 주문을 읊습니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217409, self::T_WIZARD, '악마병',
|
||||
130, 80, 7, 15, 0.6, 11, 12,
|
||||
[new ReqTech(3000), new ReqCities('올드제스')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["고대 제스 왕가의 계약에 따라 소환된 흑마법병입니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217410, self::T_WIZARD, '호넷 마물병',
|
||||
130, 130, 7, 0, 0.6, 12, 12,
|
||||
[new ReqTech(3000), new ReqCities('구 마왕성')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["호넷 직속의 최강 마물 마법병입니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217411, self::T_WIZARD, 'Z가디언',
|
||||
180, 180, 7, 0, 0.7, 28, 20,
|
||||
[new ReqTech(5000), new ReqCities('라그나로크 아크')],
|
||||
[self::T_SIEGE=>1.2],
|
||||
[self::T_SIEGE=>0.8],
|
||||
["제스의 기술력이 집약된 최고의 마법병기입니다."],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
217500, self::T_SIEGE, '정란',
|
||||
150, 150, 6, 0, 0, 15, 5,
|
||||
[new ReqMinRelYear(3)],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>0.8, self::T_CAVALRY=>0.8, self::T_WIZARD=>0.8, self::T_CASTLE=>1.8],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2],
|
||||
["높은 구조물 위에서 공격합니다."],
|
||||
['che_성벽부상무효'], null, null
|
||||
],
|
||||
[
|
||||
217501, self::T_SIEGE, '충차',
|
||||
150, 100, 6, 0, 0, 20, 5,
|
||||
[new ReqTech(1000), new ReqMinRelYear(3)],
|
||||
[ self::T_FOOTMAN=>0.8, self::T_ARCHER=>0.8, self::T_CAVALRY=>0.8, self::T_WIZARD=>0.8, self::T_CASTLE=>2.4],
|
||||
[ self::T_FOOTMAN=>1.2, self::T_ARCHER=>1.2, self::T_CAVALRY=>1.2, self::T_WIZARD=>1.2],
|
||||
["엄청난 위력으로 성벽을 부수어버립니다."],
|
||||
['che_성벽부상무효'], null, null
|
||||
],
|
||||
[
|
||||
217502, self::T_SIEGE, '튤립3호',
|
||||
275, 300, 6, 0, 0, 35, 15,
|
||||
[new ReqTech(5000), new ReqCities('커스텀')],
|
||||
[],
|
||||
[],
|
||||
["파괴적인 위력과 정말 파괴적인 비용을 자랑하는 전차입니다. "],
|
||||
['che_성벽부상무효'], null, null
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
+101
-96
@@ -1,104 +1,109 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
use sammo\GameUnitConstraint\Impossible;
|
||||
use sammo\GameUnitConstraint\ReqTech;
|
||||
use sammo\GameUnitConstraint\ReqCities;
|
||||
use sammo\GameUnitConstraint\ReqRegions;
|
||||
use sammo\GameUnitConstraint\ReqMinRelYear;
|
||||
|
||||
class GameUnitConst extends GameUnitConstBase
|
||||
{
|
||||
const DEFAULT_CREWTYPE = 1500;
|
||||
|
||||
protected static $_buildData = [
|
||||
[
|
||||
1000, self::T_CASTLE, '성벽',
|
||||
100, 100, 7, 0, 0, 99, 9,
|
||||
999999, null, null, 999999,
|
||||
[],//성벽은 공격할 수 없다.
|
||||
[self::T_FOOTMAN=>1.2],
|
||||
['성벽입니다.','생성할 수 없습니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1100, self::T_FOOTMAN, '보병',
|
||||
100, 150, 7, 10, 0, 18, 18,
|
||||
0, null, null, 0,
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2],
|
||||
['표준적인 보병입니다.','보병은 방어특화이며,','상대가 회피하기 어렵습니다.'],
|
||||
null, null, null
|
||||
],
|
||||
|
||||
[
|
||||
1200, self::T_ARCHER, '궁병',
|
||||
100, 100, 7, 20, 0, 20, 20,
|
||||
0, null, null, 0,
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2],
|
||||
['표준적인 궁병입니다.','궁병은 회피특화입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
|
||||
[
|
||||
1300, self::T_CAVALRY, '기병',
|
||||
150, 100, 7, 5, 0, 22, 22,
|
||||
0, null, null, 0,
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2],
|
||||
['표준적인 기병입니다.','기병은 공격특화입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
|
||||
[
|
||||
1400, self::T_WIZARD, '귀병',
|
||||
80, 80, 7, 5, 0.5, 18, 18,
|
||||
0, null, null, 0,
|
||||
[],
|
||||
[],
|
||||
['계략을 사용하는 병종입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1405, self::T_WIZARD, '남귀병',
|
||||
60, 60, 7, 10, 0.8, 16, 16,
|
||||
1000, null, null, 0,
|
||||
[],
|
||||
[],
|
||||
['전투를 포기하고 계략에 몰두합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
|
||||
[
|
||||
1500, self::T_SIEGE, '정란',
|
||||
100, 100, 6, 0, 0, 7, 3,
|
||||
0, null, null, 0,
|
||||
[self::T_CASTLE=>1.8],
|
||||
[],
|
||||
['높은 구조물 위에서 공격합니다.'],
|
||||
['che_성벽부상무효'], null, null
|
||||
],
|
||||
[
|
||||
1501, self::T_SIEGE, '충차',
|
||||
150, 100, 6, 0, 0, 10, 3,
|
||||
1000, null, null, 3,
|
||||
[self::T_CASTLE=>2.4],
|
||||
[],
|
||||
['엄청난 위력으로 성벽을 부수어버립니다.'],
|
||||
['che_성벽부상무효'], null, null
|
||||
],
|
||||
[
|
||||
1502, self::T_SIEGE, '벽력거',
|
||||
200, 100, 6, 0, 0, 20, 4,
|
||||
3000, ['업'], null, 0,
|
||||
[self::T_CASTLE=>1.8],
|
||||
[],
|
||||
['상대에게 돌덩이를 날립니다.'],
|
||||
['che_성벽부상무효'], null, null
|
||||
],
|
||||
[
|
||||
1503, self::T_SIEGE, '목우',
|
||||
50, 200, 5, 0, 0, 15, 3,
|
||||
3000, ['성도'], null, 0,
|
||||
[],
|
||||
[],
|
||||
['상대를 저지하는 특수병기입니다.'],
|
||||
['che_성벽부상무효'], null, null
|
||||
]
|
||||
];
|
||||
protected static function getBuildData(): array
|
||||
{
|
||||
return [
|
||||
[
|
||||
1000, self::T_CASTLE, '성벽',
|
||||
100, 100, 7, 0, 0, 99, 9,
|
||||
[new Impossible()],
|
||||
[], //성벽은 공격할 수 없다.
|
||||
[self::T_FOOTMAN=>1.2],
|
||||
['성벽입니다.','생성할 수 없습니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1100, self::T_FOOTMAN, '보병',
|
||||
100, 150, 7, 10, 0, 18, 18,
|
||||
[],
|
||||
[self::T_ARCHER=>1.2, self::T_CAVALRY=>0.8],
|
||||
[self::T_ARCHER=>0.8, self::T_CAVALRY=>1.2],
|
||||
['표준적인 보병입니다.','보병은 방어특화이며,','상대가 회피하기 어렵습니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1200, self::T_ARCHER, '궁병',
|
||||
100, 100, 7, 20, 0, 20, 20,
|
||||
[],
|
||||
[self::T_CAVALRY=>1.2, self::T_FOOTMAN=>0.8],
|
||||
[self::T_CAVALRY=>0.8, self::T_FOOTMAN=>1.2],
|
||||
['표준적인 궁병입니다.','궁병은 회피특화입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1300, self::T_CAVALRY, '기병',
|
||||
150, 100, 7, 5, 0, 22, 22,
|
||||
[],
|
||||
[self::T_FOOTMAN=>1.2, self::T_ARCHER=>0.8],
|
||||
[self::T_FOOTMAN=>0.8, self::T_ARCHER=>1.2],
|
||||
['표준적인 기병입니다.','기병은 공격특화입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1400, self::T_WIZARD, '귀병',
|
||||
80, 80, 7, 5, 0.5, 18, 18,
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
['계략을 사용하는 병종입니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1405, self::T_WIZARD, '남귀병',
|
||||
60, 60, 7, 10, 0.8, 16, 16,
|
||||
[new ReqTech(1000)],
|
||||
[],
|
||||
[],
|
||||
['전투를 포기하고 계략에 몰두합니다.'],
|
||||
null, null, null
|
||||
],
|
||||
[
|
||||
1500, self::T_SIEGE, '정란',
|
||||
100, 100, 6, 0, 0, 7, 3,
|
||||
[],
|
||||
[self::T_CASTLE=>1.8],
|
||||
[],
|
||||
['높은 구조물 위에서 공격합니다.'],
|
||||
['che_성벽부상무효'], null, null
|
||||
],
|
||||
[
|
||||
1501, self::T_SIEGE, '충차',
|
||||
150, 100, 6, 0, 0, 10, 3,
|
||||
[new ReqTech(1000), new ReqMinRelYear(3)],
|
||||
[self::T_CASTLE=>2.4],
|
||||
[],
|
||||
['엄청난 위력으로 성벽을 부수어버립니다.'],
|
||||
['che_성벽부상무효'], null, null
|
||||
],
|
||||
[
|
||||
1502, self::T_SIEGE, '벽력거',
|
||||
200, 100, 6, 0, 0, 20, 4,
|
||||
[new ReqTech(3000), new ReqCities('업')],
|
||||
[self::T_CASTLE=>1.8],
|
||||
[],
|
||||
['상대에게 돌덩이를 날립니다.'],
|
||||
['che_성벽부상무효'], null, null
|
||||
],
|
||||
[
|
||||
1503, self::T_SIEGE, '목우',
|
||||
50, 200, 5, 0, 0, 15, 3,
|
||||
[new ReqTech(3000), new ReqCities('성도')],
|
||||
[],
|
||||
[],
|
||||
['상대를 저지하는 특수병기입니다.'],
|
||||
['che_성벽부상무효'], null, null
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,11 @@ import { callSammoAPI, extractHttpMethod, GET, POST, type APICallT, type APITail
|
||||
export type { ValidResponse, InvalidResponse };
|
||||
|
||||
const apiRealPath = {
|
||||
Admin: {
|
||||
BanEmailAddress: POST as APICallT<{
|
||||
email: string,
|
||||
}>
|
||||
},
|
||||
Login: {
|
||||
LoginByID: POST as APICallT<{
|
||||
username: string,
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<div
|
||||
class="general-icon"
|
||||
:style="{
|
||||
backgroundImage: `url(${iconPath})`,
|
||||
backgroundImage: `url('${iconPath}')`,
|
||||
}"
|
||||
></div>
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
<div
|
||||
class="general-crew-type-icon"
|
||||
:style="{
|
||||
backgroundImage: `url(${imagePath}/crewtype${general.crewtype}.png)`,
|
||||
backgroundImage: `url('${imagePath}/crewtype${general.crewtype}.png')`,
|
||||
}"
|
||||
></div>
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<div
|
||||
class="general-icon"
|
||||
:style="{
|
||||
backgroundImage: `url(${iconPath})`,
|
||||
backgroundImage: `url('${iconPath}')`,
|
||||
}"
|
||||
></div>
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
v-if="city.color"
|
||||
:class="`city_bg b${city.color.substring(1)}`"
|
||||
:style="{
|
||||
backgroundImage: `url(${imagePath}/b${city.color.substring(1).toUpperCase()}.png)`,
|
||||
backgroundImage: `url('${imagePath}/b${city.color.substring(1).toUpperCase()}.png')`,
|
||||
}"
|
||||
></div>
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
left: '0',
|
||||
width: '100%',
|
||||
height: `${props.height}px`,
|
||||
backgroundImage: `url(${imagePath}/pr${props.height - 2}.gif)`,
|
||||
backgroundImage: `url('${imagePath}/pr${props.height - 2}.gif')`,
|
||||
backgroundRepeat: 'repeat-x',
|
||||
backgroundPosition: 'center',
|
||||
}"
|
||||
@@ -30,7 +30,7 @@
|
||||
left: '0',
|
||||
width: `${clamp(props.percent, 0, 100)}%`,
|
||||
height: `${props.height}px`,
|
||||
backgroundImage: `url(${imagePath}/pb${props.height - 2}.gif)`,
|
||||
backgroundImage: `url('${imagePath}/pb${props.height - 2}.gif')`,
|
||||
backgroundRepeat: 'repeat-x',
|
||||
backgroundPosition: 'left center',
|
||||
|
||||
|
||||
@@ -279,7 +279,7 @@
|
||||
label-cols-lg="3"
|
||||
content-cols-sm
|
||||
content-cols-lg="7"
|
||||
description="업로드할 파일을 선택해주세요. (jpg, png, gif, webp)"
|
||||
description="업로드할 파일을 선택해주세요. (jpg, png, gif, webp, avif)"
|
||||
label="이미지 업로드"
|
||||
label-align="right"
|
||||
:label-for="`${uuid}_image_upload`"
|
||||
@@ -288,7 +288,7 @@
|
||||
:id="`${uuid}_image_upload`"
|
||||
class="form-control"
|
||||
type="file"
|
||||
accept=".jpg,.jpeg,.png,.gif,.webp"
|
||||
accept=".jpg,.jpeg,.png,.gif,.webp,.avif"
|
||||
@change="chooseImage"
|
||||
/>
|
||||
</BFormGroup>
|
||||
|
||||
@@ -176,10 +176,7 @@ export type GameUnitType = {
|
||||
magicCoef: number;
|
||||
cost: number;
|
||||
rice: number;
|
||||
reqTech: number;
|
||||
reqCities: CityID[] | null;
|
||||
reqRegions: MapRegionID[] | null;
|
||||
reqYear: number;
|
||||
reqConstraints: Record<string, unknown>[];
|
||||
attackCoef: Record<CrewTypeID | ArmTypeID, number> | null | [];
|
||||
defenceCoef: Record<CrewTypeID | ArmTypeID, number> | null | [];
|
||||
info: string | string[];
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
import { SammoRootAPI, type InvalidResponse } from '@/SammoRootAPI';
|
||||
import axios from 'axios';
|
||||
import $ from 'jquery';
|
||||
import { isNumber } from 'lodash-es';
|
||||
import { TemplateEngine } from '@util/TemplateEngine';
|
||||
import type { InvalidResponse } from '@/defs';
|
||||
import { setAxiosXMLHttpRequest } from '@util/setAxiosXMLHttpRequest';
|
||||
import { unwrap_any } from '@util/unwrap_any';
|
||||
import { convertFormData } from '@util/convertFormData';
|
||||
import { exportWindow } from '@util/exportWindow';
|
||||
import '@/gateway/common';
|
||||
import { setSammoAPIPrefix } from '@/util/callSammoAPI';
|
||||
|
||||
type UserEntry = {
|
||||
userID: string,
|
||||
@@ -32,7 +33,7 @@ type UserListResponse = {
|
||||
}
|
||||
|
||||
const userFrame = '\
|
||||
<tr id="userinfo_<%userID%>" data-username="<%userName%>" data-id="<%userID%>">\
|
||||
<tr id="userinfo_<%userID%>" data-username="<%userName%>" data-id="<%userID%>" data-email="<%email%>">\
|
||||
<th scope="row"><%userID%></th>\
|
||||
<td><%userName%></td>\
|
||||
<td class="small"><%emailFunc(email)%><br>(<%authType%>)</td>\
|
||||
@@ -49,6 +50,7 @@ const userFrame = '\
|
||||
<button type="button" onclick="changeUserStatus(\'reset_pw\', this);" class="btn btn-info btn-sm">암호<br>변경</button>\
|
||||
<button type="button" onclick="changeUserStatus(\'block\', this);" class="btn btn-warning btn-sm">유저<br>차단</button>\
|
||||
<button type="button" onclick="changeUserStatus(\'unblock\', this);" class="btn btn-secondary btn-sm">차단<br>해제</button>\
|
||||
<button type="button" onclick="banEmailAddress(this);" class="btn btn-danger btn-sm">영구<br>차단</button>\
|
||||
<button type="button" onclick="changeUserStatus(\'set_userlevel\', this);" class="btn btn-primary btn-sm">별도<br>권한</button>\
|
||||
</div>\
|
||||
</td>\
|
||||
@@ -171,6 +173,25 @@ async function changeSystem(action: string, param?: string): Promise<void> {
|
||||
}
|
||||
}
|
||||
|
||||
async function banEmailAddress(target: Element): Promise<void> {
|
||||
const email: string = $(target).parents('tr').data('email');
|
||||
|
||||
if (!confirm(`${email}에 대해서 영구차단을 진행합니다.`)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const result = await SammoRootAPI.Admin.BanEmailAddress({
|
||||
email,
|
||||
}, true);
|
||||
|
||||
if (!result.result) {
|
||||
alert(result.reason);
|
||||
return;
|
||||
}
|
||||
|
||||
alert('완료되었습니다.');
|
||||
}
|
||||
|
||||
async function changeUserStatus(action: string, userID: Element | number, param?: number): Promise<void> {
|
||||
if (userID instanceof Element) {
|
||||
userID = parseInt($(userID).parents('tr').data('id'));
|
||||
@@ -180,7 +201,6 @@ async function changeUserStatus(action: string, userID: Element | number, param?
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (action == 'set_userlevel') {
|
||||
if (!isNumber(param)) {
|
||||
param = parseInt(prompt('원하는 등급을 입력해주세요.(1:일반, 4:특별, 5:부운영자, 6:운영자)', '1') ?? '0');
|
||||
@@ -280,5 +300,9 @@ $(async function () {
|
||||
})
|
||||
});
|
||||
|
||||
|
||||
setSammoAPIPrefix('..');
|
||||
|
||||
exportWindow(changeSystem, 'changeSystem');
|
||||
exportWindow(changeUserStatus, 'changeUserStatus');
|
||||
exportWindow(changeUserStatus, 'changeUserStatus');
|
||||
exportWindow(banEmailAddress, 'banEmailAddress');
|
||||
@@ -123,7 +123,7 @@ export async function callSammoAPI<ResultType extends ValidResponse, ErrorType e
|
||||
retry: 0,
|
||||
});
|
||||
}
|
||||
return ky("api.php", {
|
||||
return ky(apiPath, {
|
||||
searchParams: {
|
||||
...paramArgs,
|
||||
path,
|
||||
|
||||
@@ -40,6 +40,16 @@ if($userInfo['delete_after']){
|
||||
]);
|
||||
}
|
||||
|
||||
$penaltyList = JSON::decode($userInfo['penalty']??'{}');
|
||||
foreach($penaltyList as $penaltyKey=>$penaltyValue){
|
||||
if($penaltyValue['expire'] ?? 0 > TimeUtil::now()){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>"징계가 남아있어 탈퇴할 수 없습니다."
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
$db->update('member',[
|
||||
'delete_after'=>TimeUtil::nowAddMinutes(60*24*30)
|
||||
], 'no=%i', $userID);
|
||||
|
||||
@@ -32,10 +32,12 @@ else{
|
||||
|
||||
$tokenValidUntil = $member['token_valid_until'];
|
||||
|
||||
if($member['grade'] == 6) {
|
||||
$grade = '운영자';
|
||||
if($member['grade'] == 7) {
|
||||
$grade = '최고운영자';
|
||||
} elseif($member['grade'] == 6) {
|
||||
$grade = '부운영자(시스템)';
|
||||
} elseif($member['grade'] == 5) {
|
||||
$grade = '부운영자';
|
||||
$grade = '부운영자(유저)';
|
||||
} elseif($member['grade'] > 1) {
|
||||
$grade = '특별회원';
|
||||
} elseif($member['grade'] == 1) {
|
||||
|
||||
@@ -21,7 +21,7 @@ $size = getImageSize($image['tmp_name']);
|
||||
|
||||
$imageType = $size[2];
|
||||
|
||||
$availableImageType = array('.webp'=>IMAGETYPE_WEBP, '.jpg'=>IMAGETYPE_JPEG, '.png'=>IMAGETYPE_PNG, '.gif'=>IMAGETYPE_GIF);
|
||||
$availableImageType = array('.avif'=>IMAGETYPE_AVIF, '.webp'=>IMAGETYPE_WEBP, '.jpg'=>IMAGETYPE_JPEG, '.png'=>IMAGETYPE_PNG, '.gif'=>IMAGETYPE_GIF);
|
||||
|
||||
$db = RootDB::db();
|
||||
$member = $db->queryFirstRow('SELECT `ID`, `PICTURE` FROM `member` WHERE `NO` = %i', $userID);
|
||||
@@ -48,7 +48,7 @@ if(!is_uploaded_file($image['tmp_name'])) {
|
||||
$response['result'] = false;
|
||||
} elseif(!$newExt) {
|
||||
//확장자 검사
|
||||
$response['reason'] = 'webp, jpg, gif, png 파일이 아닙니다!';
|
||||
$response['reason'] = 'avif, webp, jpg, gif, png 파일이 아닙니다!';
|
||||
$response['result'] = false;
|
||||
} elseif($image['size'] > 51200) {
|
||||
//파일크기 검사
|
||||
|
||||
@@ -7,7 +7,7 @@ WebUtil::requireAJAX();
|
||||
|
||||
$session = Session::requireLogin([])->setReadOnly();
|
||||
|
||||
if($session->userGrade < 5){
|
||||
if($session->userGrade < 6){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'운영자 권한이 없습니다.'
|
||||
@@ -90,7 +90,7 @@ if($action == 'scrub_icon'){
|
||||
|
||||
$cnt = 0;
|
||||
|
||||
foreach(glob(AppConf::getUserIconPathFS().'/*.{webp,jpg,png,gif}', GLOB_BRACE) as $filepath){
|
||||
foreach(glob(AppConf::getUserIconPathFS().'/*.{avif,webp,jpg,png,gif}', GLOB_BRACE) as $filepath){
|
||||
$filename = basename($filepath);
|
||||
|
||||
if (array_key_exists($filename, $usedIcon)) {
|
||||
|
||||
@@ -143,7 +143,7 @@ require(__DIR__ . '/../vendor/autoload.php');
|
||||
<form name="change_icon_form" id="change_icon_form" method="post" enctype="multipart/form-data">
|
||||
<input class="with_skin" type="text" readonly="readonly" id="image_upload_filename">
|
||||
<button id="image_upload_fake_btn" class="with_skin">찾아보기</button>
|
||||
<input type="file" id="image_upload" name="image_upload" accept=".webp,.jpg,.jpeg,.png,.gif"><br>
|
||||
<input type="file" id="image_upload" name="image_upload" accept=".avif,.webp,.jpg,.jpeg,.png,.gif"><br>
|
||||
<input class="with_skin" id="btn_image_submit" type="submit" value="아이콘 변경"> <button id="btn_remove_icon" class="with_skin">아이콘 제거</button>
|
||||
</form>
|
||||
|
||||
@@ -156,7 +156,7 @@ require(__DIR__ . '/../vendor/autoload.php');
|
||||
<th class="bg1">도움말</th>
|
||||
<td colspan="5" style="text-align:left;padding:8px;">
|
||||
<p style="line-height:1.2em;">
|
||||
아이콘은 64 x 64픽셀 ~ 128 x 128픽셀 사이, 50KB 이하의 webp, jpg, gif, png 파일만 가능합니다.</p>
|
||||
아이콘은 64 x 64픽셀 ~ 128 x 128픽셀 사이, 50KB 이하의 avif, webp, jpg, gif, png 파일만 가능합니다.</p>
|
||||
<p style="margin-top:1em;color:magenta;line-height:1.2em;">탈퇴시 1개월간 정보가 보존되며, 1개월간 재가입이 불가능합니다.</span>
|
||||
</p>
|
||||
</td>
|
||||
|
||||
+1
-1
@@ -202,7 +202,7 @@ $target = Util::getPost('target');
|
||||
$server = basename($request['server']);
|
||||
$settingBasePath = __DIR__ . "/{$server}/d_setting/";
|
||||
$allowFullUpdate = in_array('fullUpdate', $session->acl[$server] ?? []);
|
||||
$allowFullUpdate |= $session->userGrade >= 6;
|
||||
$allowFullUpdate |= $session->userGrade >= 7;
|
||||
|
||||
$allowUpdate = in_array('update', $session->acl[$server] ?? []);
|
||||
$allowUpdate |= $session->userGrade >= 5;
|
||||
|
||||
@@ -48,6 +48,15 @@ function checkEmailDup($email){
|
||||
return '적절하지 않은 길이입니다.';
|
||||
}
|
||||
|
||||
$globalSalt = RootDB::getGlobalSalt();
|
||||
$isBanned = RootDB::db()->queryFirstField(
|
||||
'SELECT count(no) FROM banned_member WHERE `hashed_email` = %s LIMIT 1',
|
||||
hash('sha512', $globalSalt.$email.$globalSalt)
|
||||
);
|
||||
if($isBanned){
|
||||
return '영구 차단된 이메일입니다.';
|
||||
}
|
||||
|
||||
$userInfo = RootDB::db()->queryFirstField('SELECT `no`, `delete_after` FROM member WHERE `email` = %s LIMIT 1', $email);
|
||||
if($userInfo){
|
||||
$nowDate = TimeUtil::now();
|
||||
@@ -55,7 +64,7 @@ function checkEmailDup($email){
|
||||
return '이미 사용중인 이메일입니다. 관리자에게 문의해주세요.';
|
||||
}
|
||||
|
||||
if($userInfo['delete_after'] >= $userInfo){
|
||||
if($userInfo['delete_after'] >= $nowDate){
|
||||
return "삭제 요청된 계정입니다.[{$userInfo['delete_after']}]";
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import os
|
||||
import sys
|
||||
import json
|
||||
from openpyxl.worksheet.worksheet import Worksheet
|
||||
import json
|
||||
|
||||
#TODO: 시나리오마다 바뀔 수 있음
|
||||
nationLevelMap = {
|
||||
@@ -37,14 +38,19 @@ def parseConfig(configSheet: Worksheet):
|
||||
value = int(value)
|
||||
|
||||
if isinstance(value, str):
|
||||
values = value.split('\n')
|
||||
if len(values) > 1:
|
||||
value = values
|
||||
# json으로 변환 시도
|
||||
try:
|
||||
value = json.loads(value)
|
||||
except:
|
||||
values = value.split('\n')
|
||||
if len(values) > 1:
|
||||
value = values
|
||||
|
||||
varNames = varName.split('.')
|
||||
varNameCnt = len(varNames)
|
||||
target = result
|
||||
for idx, name in enumerate(varNames):
|
||||
if idx + 1 == len(varNames):
|
||||
if idx + 1 == varNameCnt:
|
||||
target[name] = value
|
||||
break
|
||||
if not name in target:
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
namespace sammo\API\Admin;
|
||||
|
||||
use sammo\Session;
|
||||
use DateTimeInterface;
|
||||
use sammo\BaseAPI;
|
||||
use sammo\Enums\APIRecoveryType;
|
||||
use sammo\RootDB;
|
||||
use sammo\TimeUtil;
|
||||
use sammo\Validator;
|
||||
|
||||
class BanEmailAddress extends \sammo\BaseAPI
|
||||
{
|
||||
public function validateArgs(): ?string
|
||||
{
|
||||
$v = new Validator($this->args);
|
||||
$v
|
||||
->rule('required', [
|
||||
'email',
|
||||
]);
|
||||
|
||||
if (!$v->validate()) {
|
||||
return $v->errorStr();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function getRequiredSessionMode(): int
|
||||
{
|
||||
return BaseAPI::REQ_LOGIN | BaseAPI::REQ_READ_ONLY;
|
||||
}
|
||||
|
||||
public function launch(Session $session, ?DateTimeInterface $modifiedSince, ?string $reqEtag): null | string | array | APIRecoveryType
|
||||
{
|
||||
$RootDB = RootDB::db();
|
||||
$email = $this->args['email'];
|
||||
|
||||
if ($session->userGrade < 5) {
|
||||
return '권한이 없습니다.';
|
||||
}
|
||||
$globalSalt = RootDB::getGlobalSalt();
|
||||
|
||||
try{
|
||||
$RootDB->insert('banned_member', [
|
||||
'hashed_email' => hash('sha512', $globalSalt.$email.$globalSalt),
|
||||
'info' => TimeUtil::now(),
|
||||
]);
|
||||
}
|
||||
catch(\Exception $e){
|
||||
return '이미 등록된 이메일입니다.';
|
||||
}
|
||||
|
||||
return [
|
||||
'result' => true,
|
||||
'reason' => '등록되었습니다.'
|
||||
];
|
||||
}
|
||||
}
|
||||
+9
-1
@@ -1,3 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
</head>
|
||||
<body>
|
||||
<pre>
|
||||
HiDCHe서버 이용 약관
|
||||
|
||||
@@ -140,4 +146,6 @@
|
||||
|
||||
부칙 <2018.4.17.>
|
||||
⓵ 본 약관은 2018.4.17.부터 적용된다.
|
||||
</pre>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
+9
-1
@@ -1,3 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
</head>
|
||||
<body>
|
||||
<pre>
|
||||
개인정보 제공 및 이용에 대한 동의
|
||||
|
||||
@@ -19,4 +25,6 @@
|
||||
|
||||
개인정보 관리자 : 이동수
|
||||
연락처 : hided62@gmail.com
|
||||
</pre>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
+1
-1
@@ -176,7 +176,7 @@ module.exports = (env, argv) => {
|
||||
use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader', 'sass-loader']
|
||||
},
|
||||
{
|
||||
test: /\.(png|jpe?g|gif|webp)$/,
|
||||
test: /\.(png|jpe?g|gif|webp|avif)$/,
|
||||
use: ['file-loader']
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user