forked from devsam/core
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6bd677ad6f | ||
|
|
7d1c5f3510 | ||
|
|
a49508fd20 | ||
|
|
5870213ff0 | ||
|
|
65c3d7f925 | ||
|
|
33f4fd8fee | ||
|
|
9bdc34dc42 | ||
|
|
ff654df997 | ||
|
|
b7758da2f3 | ||
|
|
747089f1a8 | ||
|
|
9ee3021b76 | ||
|
|
0c60ea66e3 | ||
|
|
c3bb312b5f | ||
|
|
7447a42d40 | ||
|
|
3e9cc367af | ||
|
|
4c1790014f | ||
|
|
03fc7a579a | ||
|
|
a53db257cf | ||
|
|
b093cab493 | ||
|
|
9b484dc819 | ||
|
|
5ab26a9f8c | ||
|
|
b800a63bd2 | ||
|
|
43a5e47fb3 | ||
|
|
319545106e | ||
|
|
39b261b8a0 | ||
|
|
c9e61d1098 | ||
|
|
0bffdaa5fc | ||
|
|
9228510834 | ||
|
|
0b002a8946 | ||
|
|
ad43ddabe6 | ||
|
|
24c022a329 | ||
|
|
0e48cee0d6 | ||
|
|
4ad1794d95 | ||
|
|
46cf25b585 | ||
|
|
b3d78fc30f | ||
|
|
556bc06da4 | ||
|
|
7e8f9c463b | ||
|
|
568c7779b6 | ||
|
|
0a0d237f4d | ||
|
|
c243ccbdce | ||
|
|
64b79d6af5 | ||
|
|
016c0f3743 | ||
|
|
fd1599e0a7 | ||
|
|
7408aa6b72 | ||
|
|
e6b2107fa9 | ||
|
|
9aff52eaad | ||
|
|
bf5bda0f85 | ||
|
|
ffbf2d0a93 | ||
|
|
82f59ef5a2 | ||
|
|
c2c40abbb4 | ||
|
|
bb54d732d0 | ||
|
|
eee4e0c676 | ||
|
|
d9457ae017 | ||
|
|
bbc0b18b19 | ||
|
|
da7651311e | ||
|
|
72846f0817 | ||
|
|
05ef3387ab | ||
|
|
eed44e5737 | ||
|
|
27c7a85a21 | ||
|
|
4f6dd046ec | ||
|
|
89fad9ada7 | ||
|
|
bc31b49b99 | ||
|
|
09444e3624 | ||
|
|
7586243a95 | ||
|
|
1e1c7801e1 | ||
|
|
a363f6ef5f | ||
|
|
334e1fd2da | ||
|
|
2e8e29e93c | ||
|
|
5e5a1a3668 | ||
|
|
b93b464ebf | ||
|
|
842ba46a95 | ||
|
|
03b27d8e8f | ||
|
|
c11b41c6ba | ||
|
|
018cc526ee | ||
|
|
edf4508e6b | ||
|
|
d26a1f0312 | ||
|
|
2984f6a453 | ||
|
|
a00058d959 | ||
|
|
8e56a457f1 | ||
|
|
74d5f021cd | ||
|
|
a37715315d | ||
|
|
d9c9977610 | ||
|
|
c2f0cbb10a | ||
|
|
a34d00d822 | ||
|
|
9924ec6963 | ||
|
|
9036201887 | ||
|
|
b2435d2430 | ||
|
|
afd6148770 | ||
|
|
b70b58a35a | ||
|
|
df963c2780 | ||
|
|
1b732c76e6 | ||
|
|
f9489b0173 | ||
|
|
18942c55ae | ||
|
|
bf34b2f1ca | ||
|
|
a717a021c2 | ||
|
|
dcf718d592 | ||
|
|
f5eeb2b839 | ||
|
|
bc435adc11 |
Vendored
+1
@@ -0,0 +1 @@
|
||||
"use strict";!function(t,r){var n=function(t){function r(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function n(t){return t.replace(/"/g,""")}function e(t){if(!t)return"";var r=[];for(var e in t){var i=t[e]+"";r.push(e+'="'+n(i)+'"')}return r.join(" ")}function i(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i=new a(i);for(var f=o(t),u=[],c=0;c<f.length;c++){var p=f[c];if("nl"===p.type&&i.nl2br)u.push("<br>\n");else if(p.isLink&&i.check(p)){var l=i.resolve(p),s=l.formatted,g=l.formattedHref,y=l.tagName,h=l.className,v=l.target,k=l.attributes,S="<"+y+' href="'+n(g)+'"';h&&(S+=' class="'+n(h)+'"'),v&&(S+=' target="'+n(v)+'"'),k&&(S+=" "+e(k)),S+=">"+r(s)+"</"+y+">",u.push(S)}else u.push(r(p.toString()))}return u.join("")}var o=t.tokenize,f=t.options,a=f.Options;if(!String.prototype.linkify)try{Object.defineProperty(String.prototype,"linkify",{a:function(){},get:function(){return function(t){return i(this,t)}}})}catch(u){String.prototype.linkify||(String.prototype.linkify=function(t){return i(this,t)})}return i}(r);t.linkifyStr=n}(window,linkify);
|
||||
Vendored
+1
File diff suppressed because one or more lines are too long
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
+13
File diff suppressed because one or more lines are too long
+13
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Vendored
+1
File diff suppressed because one or more lines are too long
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
@@ -32,6 +32,7 @@ CREATE TABLE `member` (
|
||||
`PICTURE` VARCHAR(64) NULL DEFAULT 'default.jpg',
|
||||
`IMGSVR` INT(1) NULL DEFAULT '0',
|
||||
`acl` TEXT NOT NULL DEFAULT '{}' COMMENT 'json',
|
||||
`penalty` TEXT NOT NULL DEFAULT '{}' COMMENT 'json',
|
||||
`GRADE` INT(1) NULL DEFAULT '1',
|
||||
`REG_NUM` INT(3) NULL DEFAULT '0',
|
||||
`REG_DATE` DATETIME NOT NULL,
|
||||
|
||||
+1
-38
@@ -73,7 +73,6 @@ $sel[$type] = "selected";
|
||||
<td width=130 align=center id=bg1>국 가 명</td>
|
||||
<td width=80 align=center id=bg1>상 태</td>
|
||||
<td width=60 align=center id=bg1>기 간</td>
|
||||
<td align=center id=bg1>비 고</td>
|
||||
</tr>
|
||||
<?php
|
||||
|
||||
@@ -95,11 +94,7 @@ for ($i=0; $i < $dipcount; $i++) {
|
||||
$me = $dip['me'];
|
||||
$you = $dip['you'];
|
||||
|
||||
$query = "select reserved,showing from diplomacy where you='$me' and me='$you'";
|
||||
$result2 = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
$dip2 = MYDB_fetch_array($result2);
|
||||
|
||||
if ($dip['state'] == 2 && $dip['fixed'] == "" && $dip['reserved'] == "" && $dip2['reserved'] == "") {
|
||||
if ($dip['state'] == 2) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -115,37 +110,6 @@ for ($i=0; $i < $dipcount; $i++) {
|
||||
}
|
||||
|
||||
$date = date('Y-m-d H:i:s');
|
||||
$note = "";
|
||||
if ($dip['fixed'] != "") {
|
||||
if ($dip['state'] == 7) {
|
||||
$note .= $dip['fixed'];
|
||||
} else {
|
||||
$note .= "<font color=gray>{$dip['fixed']}</font>";
|
||||
}
|
||||
if ($dip['reserved'] != "" || $dip2['reserved'] != "") {
|
||||
$note .= "<br>";
|
||||
}
|
||||
}
|
||||
if ($dip['reserved'] != "") {
|
||||
if ($dip['showing'] >= $date) {
|
||||
$note .= "<font color=skyblue>아국측 제의</font>: {$dip['reserved']}";
|
||||
} else {
|
||||
$note .= "<font color=gray>아국측 제의: {$dip['reserved']}</font>";
|
||||
}
|
||||
if ($dip2['reserved'] != "") {
|
||||
$note .= "<br>";
|
||||
}
|
||||
}
|
||||
if ($dip2['reserved'] != "") {
|
||||
if ($dip2['showing'] >= $date) {
|
||||
$note .= "<font color=limegreen>상대측 제의</font>: {$dip2['reserved']}";
|
||||
} else {
|
||||
$note .= "<font color=gray>상대측 제의: {$dip2['reserved']}</font>";
|
||||
}
|
||||
}
|
||||
if ($note == "") {
|
||||
$note = " ";
|
||||
}
|
||||
|
||||
echo "
|
||||
<tr>
|
||||
@@ -153,7 +117,6 @@ for ($i=0; $i < $dipcount; $i++) {
|
||||
<td align=center style=color:".newColor($nationColor[$you]).";background-color:{$nationColor[$you]};>$nationName[$you]</td>
|
||||
<td align=center>$state</td>
|
||||
<td align=center>{$dip['term']} 개월</td>
|
||||
<td align=left style=font-size:7px;>{$note}</td>
|
||||
</tr>";
|
||||
}
|
||||
?>
|
||||
|
||||
+21
-3
@@ -130,6 +130,19 @@ for($i=1; $i <= $count; $i++) {
|
||||
elseif($level5['npc'] == 1) { $l5 = "<font color=skyblue>{$level5['name']}</font>"; }
|
||||
else { $l5 = $level5['name']; }
|
||||
|
||||
$generals = $db->query('SELECT no,nation,npc,name,level,penalty,permission FROM general WHERE nation=%i ORDER BY no ASC', $nation['nation']);
|
||||
$ambassadors = [];
|
||||
$auditors = [];
|
||||
foreach($generals as $general){
|
||||
$generalPermission = checkSecretPermission($general, false);
|
||||
if($generalPermission == 4){
|
||||
$ambassadors[] = $general['name'];
|
||||
}
|
||||
else if($generalPermission == 3){
|
||||
$auditors[] = $general['name'];
|
||||
}
|
||||
}
|
||||
|
||||
echo "
|
||||
<table align=center width=1000 class='tb_layout bg2'>
|
||||
<tr>
|
||||
@@ -143,7 +156,7 @@ for($i=1; $i <= $count; $i++) {
|
||||
<td width=80 align=center id=bg1>국 력</td>
|
||||
<td width=170 align=center>{$nation['power']}</td>
|
||||
<td width=80 align=center id=bg1>장수 / 속령</td>
|
||||
<td width=170 align=center>{$gencount} / {$citycount}</td>
|
||||
<td width=170 align=center>".count($generals)." / {$citycount}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center id=bg1>".getLevel(12, $nation['level'])."</td>
|
||||
@@ -165,6 +178,12 @@ for($i=1; $i <= $count; $i++) {
|
||||
<td align=center id=bg1>".getLevel( 5, $nation['level'])."</td>
|
||||
<td align=center>$l5</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center id=bg1>외교권자</td><td colspan=5>";
|
||||
echo join(', ', $ambassadors);
|
||||
echo "</td><td align=center id=bg1>조언자</td><td align=center >";
|
||||
echo count($auditors).'명';
|
||||
echo "</td></tr>
|
||||
<tr>
|
||||
<td colspan=8>";
|
||||
if($nation['level'] > 0) {
|
||||
@@ -190,8 +209,7 @@ for($i=1; $i <= $count; $i++) {
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan=8> 장수 일람 : ";
|
||||
for($j=0; $j < $gencount; $j++) {
|
||||
$general = MYDB_fetch_array($genresult);
|
||||
foreach($generals as $general){
|
||||
if($general['npc'] >= 2) { echo "<font color=cyan>{$general['name']}</font>, "; }
|
||||
elseif($general['npc'] == 1) { echo "<font color=skyblue>{$general['name']}</font>, "; }
|
||||
else { echo "{$general['name']}, "; }
|
||||
|
||||
+10
-7
@@ -33,7 +33,7 @@ $query = "select nation from general where no='$gen'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
$general = MYDB_fetch_array($result);
|
||||
|
||||
$query = "select no,nation,level,con,turntime,belong from general where owner='{$userID}'";
|
||||
$query = "select no,nation,level,con,turntime,belong,permission,penalty from general where owner='{$userID}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
$me = MYDB_fetch_array($result);
|
||||
|
||||
@@ -47,11 +47,14 @@ if ($con >= 2) {
|
||||
exit();
|
||||
}
|
||||
|
||||
//재야인 경우
|
||||
$meLevel = $me['level'];
|
||||
if ($meLevel == 0 || ($meLevel == 1 && $me['belong'] < $nation['secretlimit'])) {
|
||||
echo "수뇌부가 아니거나 사관년도가 부족합니다.";
|
||||
exit();
|
||||
$permission = checkSecretPermission($me);
|
||||
if($permission < 0){
|
||||
echo '국가에 소속되어있지 않습니다.';
|
||||
die();
|
||||
}
|
||||
else if ($permission < 1) {
|
||||
echo "권한이 부족합니다. 수뇌부가 아니거나 사관년도가 부족합니다.";
|
||||
die();
|
||||
}
|
||||
|
||||
//잘못된 접근
|
||||
@@ -158,7 +161,7 @@ for ($i=0; $i < $gencount; $i++) {
|
||||
<?=getBatResRecent($gen, 24)?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php if($npc > 1 || $meLevel >= 5): ?>
|
||||
<?php if($npc > 1 || $permission >= 2): ?>
|
||||
<tr>
|
||||
<td align=center id=bg1><font color=orange size=3>개인 기록</font></td>
|
||||
<td align=center id=bg1><font color=orange size=3> </font></td>
|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
$connect=$db->get();
|
||||
|
||||
increaseRefresh("기밀실", 1);
|
||||
|
||||
$query = "select no,nation,level from general where owner='{$userID}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$me = MYDB_fetch_array($result);
|
||||
|
||||
if($me['level'] < 5) {
|
||||
echo "수뇌부가 아닙니다.";
|
||||
exit();
|
||||
}
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title><?=UniqueConst::$serverName?>: 기밀실</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=1024" />
|
||||
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
|
||||
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
|
||||
<?=WebUtil::printJS('js/common.js')?>
|
||||
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
|
||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
||||
<?=WebUtil::printCSS('css/common.css')?>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div style='width:1000px;margin:auto'>
|
||||
<table align=center width=1000 class='tb_layout bg0'>
|
||||
<tr><td>기 밀 실<br><?=backButton()?></td></tr>
|
||||
<form name=form1 method=post action=c_chiefboard.php>
|
||||
<tr><td align=center>
|
||||
제목 <input type=textarea maxlength=50 name=title style=color:white;background-color:black;width:830px;>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td>
|
||||
<textarea name=msg style=color:white;background-color:black;width:998px;height:200px;></textarea><br>
|
||||
<input type=submit value=저장하기>
|
||||
<input type=hidden name=num value=-1>
|
||||
</td></tr>
|
||||
</form>
|
||||
</table>
|
||||
<br>
|
||||
<?php
|
||||
$nation = getNation($me['nation']);
|
||||
|
||||
//20개 메세지
|
||||
$index = $nation['coreindex'];
|
||||
for($i=0; $i < 20; $i++) {
|
||||
$who = "coreboard{$index}_who";
|
||||
$query = "select name,picture,imgsvr from general where no='$nation[$who]'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$general = MYDB_fetch_array($result);
|
||||
if($nation["coreboard{$index}"] != '') { msgprint($nation["coreboard{$index}"], $general['name'], $general['picture'], $general['imgsvr'], $nation["coreboard{$index}_when"], $index, 1); }
|
||||
$index--;
|
||||
if($index < 0) { $index = 19; }
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<table width=1000 class='tb_layout bg0'>
|
||||
<tr><td><?=backButton()?></td></tr>
|
||||
<tr><td><?=banner()?></td></tr>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -13,20 +13,21 @@ $connect=$db->get();
|
||||
|
||||
increaseRefresh("사령부", 1);
|
||||
|
||||
$query = "select no,nation,level,con,turntime,belong from general where owner='{$userID}'";
|
||||
$query = "select no,nation,level,con,turntime,belong,permission,penalty from general where owner='{$userID}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$me = MYDB_fetch_array($result);
|
||||
|
||||
$query = "select secretlimit from nation where nation='{$me['nation']}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$nation = MYDB_fetch_array($result);
|
||||
|
||||
$con = checkLimit($me['con']);
|
||||
if($con >= 2) { printLimitMsg($me['turntime']); exit(); }
|
||||
|
||||
if($me['level'] == 0 || ($me['level'] == 1 && $me['belong'] < $nation['secretlimit'])) {
|
||||
echo "수뇌부가 아니거나 사관년도가 부족합니다.";
|
||||
exit();
|
||||
$permission = checkSecretPermission($me);
|
||||
if($permission < 0){
|
||||
echo '국가에 소속되어있지 않습니다.';
|
||||
die();
|
||||
}
|
||||
else if ($permission < 1) {
|
||||
echo "권한이 부족합니다. 수뇌부가 아니거나 사관년도가 부족합니다.";
|
||||
die();
|
||||
}
|
||||
|
||||
if($me['level'] >= 5) { $btn = "submit"; $btn2 = "button"; }
|
||||
|
||||
@@ -179,7 +179,7 @@ if($valid == 0 && $userGrade < 5) {
|
||||
$city = $db->queryFirstRow('SELECT * FROM city WHERE city=%i', $citylist);
|
||||
$cityNation = getNationStaticInfo($city['nation']);
|
||||
|
||||
//태수, 군사, 시중
|
||||
//태수, 군사, 종사
|
||||
$gen1 = $db->queryFirstRow('SELECT `name`, npc FROM general WHERE `no`=%i', $city['gen1']);
|
||||
$gen2 = $db->queryFirstRow('SELECT `name`, npc FROM general WHERE `no`=%i', $city['gen2']);
|
||||
$gen3 = $db->queryFirstRow('SELECT `name`, npc FROM general WHERE `no`=%i', $city['gen3']);
|
||||
@@ -415,7 +415,7 @@ foreach($generalsFormat as $general){
|
||||
<td align=center><?=$gen1['name']??'-'?></td>
|
||||
<td align=center class=bg1>군사</td>
|
||||
<td align=center><?=$gen2['name']??'-'?></td>
|
||||
<td align=center class=bg1>시중</td>
|
||||
<td align=center class=bg1>종사</td>
|
||||
<td align=center><?=$gen3['name']??'-'?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
+15
-44
@@ -13,9 +13,9 @@ $connect=$db->get();
|
||||
|
||||
increaseRefresh("내무부", 1);
|
||||
|
||||
$me = $db->queryFirstRow('SELECT no, nation, level, con, turntime, belong FROM general WHERE owner=%i', $userID);
|
||||
$me = $db->queryFirstRow('SELECT no, nation, level, con, turntime, belong, permission, penalty FROM general WHERE owner=%i', $userID);
|
||||
|
||||
$nation = $db->queryFirstRow('SELECT secretlimit, msg, scoutmsg FROM nation WHERE nation = %i', $me['nation']);
|
||||
$nation = $db->queryFirstRow('SELECT msg, scoutmsg FROM nation WHERE nation = %i', $me['nation']);
|
||||
|
||||
$con = checkLimit($me['con']);
|
||||
if ($con >= 2) {
|
||||
@@ -23,9 +23,14 @@ if ($con >= 2) {
|
||||
exit();
|
||||
}
|
||||
|
||||
if ($me['level'] == 0 || ($me['level'] == 1 && $me['belong'] < $nation['secretlimit'])) {
|
||||
echo "수뇌부가 아니거나 사관년도가 부족합니다.";
|
||||
exit();
|
||||
$permission = checkSecretPermission($me);
|
||||
if($permission < 0){
|
||||
echo '국가에 소속되어있지 않습니다.';
|
||||
die();
|
||||
}
|
||||
else if ($permission < 1) {
|
||||
echo "권한이 부족합니다. 수뇌부가 아니거나 사관년도가 부족합니다.";
|
||||
die();
|
||||
}
|
||||
|
||||
if ($me['level'] >= 5) {
|
||||
@@ -45,7 +50,7 @@ if ($me['level'] >= 5) {
|
||||
<meta name="viewport" content="width=1024" />
|
||||
<title><?=UniqueConst::$serverName?>: 내무부</title>
|
||||
<script>
|
||||
var editable = <?=($me['level']>=5?'true':'false')?>;
|
||||
var editable = <?=(($me['level']>=5||$permission==4)?'true':'false')?>;
|
||||
var nationMsg = <?=Json::encode($nation['msg']??'')?>;
|
||||
var scoutmsg = <?=Json::encode($nation['scoutmsg']??'')?>;
|
||||
</script>
|
||||
@@ -80,7 +85,6 @@ var scoutmsg = <?=Json::encode($nation['scoutmsg']??'')?>;
|
||||
<td width=80 align=center class=bg1>상태</td>
|
||||
<td width=60 align=center class=bg1>기간</td>
|
||||
<td width=100 align=center class=bg1>종 료 시 점</td>
|
||||
<td align=center class=bg1>비 고</td>
|
||||
</tr>
|
||||
<?php
|
||||
$admin = $gameStor->getValues(['year','month']);
|
||||
@@ -106,19 +110,15 @@ for ($i=0; $i < $nationcount; $i++) {
|
||||
<td align=center>-</td>
|
||||
<td align=center>-</td>
|
||||
<td align=center>-</td>
|
||||
<td align=left style=font-size:7px;>-</td>
|
||||
</tr>";
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
$query = "select state,term,fixed,reserved,showing from diplomacy where me='{$me['nation']}' and you='{$nation['nation']}'";
|
||||
$query = "select state,term from diplomacy where me='{$me['nation']}' and you='{$nation['nation']}'";
|
||||
$result2 = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
$dip = MYDB_fetch_array($result2);
|
||||
|
||||
$query = "select reserved,showing from diplomacy where you='{$me['nation']}' and me='{$nation['nation']}'";
|
||||
$result2 = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
$dip2 = MYDB_fetch_array($result2);
|
||||
//속령수
|
||||
$query = "select city from city where nation='{$nation['nation']}'";
|
||||
$result2 = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
@@ -144,33 +144,6 @@ for ($i=0; $i < $nationcount; $i++) {
|
||||
}
|
||||
|
||||
$date = date('Y-m-d H:i:s');
|
||||
$note = "";
|
||||
if ($dip['fixed'] != "") {
|
||||
if ($dip['state'] == 7) {
|
||||
$note .= $dip['fixed'];
|
||||
} else {
|
||||
$note .= "<font color=gray>{$dip['fixed']}</font>";
|
||||
}
|
||||
if ($dip['reserved'] != "" || $dip2['reserved'] != "") {
|
||||
$note .= "<br>";
|
||||
}
|
||||
}
|
||||
if ($dip['showing'] >= $date) {
|
||||
if ($dip['reserved'] != "") {
|
||||
$note .= "<font color=skyblue>아국측 제의</font>: ".$dip['reserved'];
|
||||
if ($dip2['reserved'] != "") {
|
||||
$note .= "<br>";
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($dip2['showing'] >= $date) {
|
||||
if ($dip2['reserved'] != "") {
|
||||
$note .= "<font color=limegreen>상대측 제의</font>: ".$dip2['reserved'];
|
||||
}
|
||||
}
|
||||
if ($note == "") {
|
||||
$note = " ";
|
||||
}
|
||||
|
||||
echo "
|
||||
<tr>
|
||||
@@ -188,9 +161,7 @@ for ($i=0; $i < $nationcount; $i++) {
|
||||
<td align=center>-</td>
|
||||
<td align=center>-</td>";
|
||||
}
|
||||
echo "
|
||||
<td align=left style=font-size:7px;>{$note}</td>
|
||||
</tr>";
|
||||
echo "</tr>";
|
||||
}
|
||||
echo "
|
||||
</table>
|
||||
@@ -302,8 +273,8 @@ if ($budgetricediff > 0) {
|
||||
<tr>
|
||||
<td align=right class=bg1>세율 (5 ~ 30%) </td>
|
||||
<td align=center><input type=text <?=$read?> name=rate style=text-align:right;color:white;background-color:black; size=3 maxlength=3 value=<?=$nation['rate']?>>% <input type=<?=$btn?> name=btn value=세율></td>
|
||||
<td align=right class=bg1>봉급 지급율 (20 ~ 200%) </td>
|
||||
<td align=center><input type=text <?=$read?> name=bill style=text-align:right;color:white;background-color:black; size=3 maxlength=3 value=<?=$nation['bill']?>>% <input type=<?=$btn?> name=btn value=지급율></td>
|
||||
<td align=right class=bg1>봉급 지급률 (20 ~ 200%) </td>
|
||||
<td align=center><input type=text <?=$read?> name=bill style=text-align:right;color:white;background-color:black; size=3 maxlength=3 value=<?=$nation['bill']?>>% <input type=<?=$btn?> name=btn value=지급률></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=right class=bg1>기밀 권한 (1 ~ 99년) </td>
|
||||
|
||||
+10
-5
@@ -19,11 +19,11 @@ $connect=$db->get();
|
||||
|
||||
increaseRefresh("암행부", 1);
|
||||
|
||||
$query = "select no,nation,level,con,turntime,belong from general where owner='{$userID}'";
|
||||
$query = "select no,nation,level,con,turntime,belong,permission,penalty from general where owner='{$userID}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
$me = MYDB_fetch_array($result);
|
||||
|
||||
$query = "select level,secretlimit from nation where nation='{$me['nation']}'";
|
||||
$query = "select level from nation where nation='{$me['nation']}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
$nation = MYDB_fetch_array($result);
|
||||
|
||||
@@ -33,9 +33,14 @@ if ($con >= 2) {
|
||||
exit();
|
||||
}
|
||||
|
||||
if ($me['level'] == 0 || ($me['level'] == 1 && $me['belong'] < $nation['secretlimit'])) {
|
||||
echo "수뇌부가 아니거나 사관년도가 부족합니다.";
|
||||
exit();
|
||||
$permission = checkSecretPermission($me);
|
||||
if($permission < 0){
|
||||
echo '국가에 소속되어있지 않습니다.';
|
||||
die();
|
||||
}
|
||||
else if ($permission < 1) {
|
||||
echo "권한이 부족합니다. 수뇌부가 아니거나 사관년도가 부족합니다.";
|
||||
die();
|
||||
}
|
||||
|
||||
$sel = [];
|
||||
|
||||
+80
-8
@@ -35,8 +35,12 @@ if($meLevel == 0) {
|
||||
<title><?=UniqueConst::$serverName?>: 인사부</title>
|
||||
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
|
||||
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
|
||||
<?=WebUtil::printJS('../e_lib/select2/select2.full.min.js')?>
|
||||
<?=WebUtil::printJS('js/common.js')?>
|
||||
<?=WebUtil::printJS('js/bossInfo.js')?>
|
||||
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
|
||||
<?=WebUtil::printCSS('../e_lib/select2/select2.min.css')?>
|
||||
<?=WebUtil::printCSS('../e_lib/select2/select2-bootstrap4.css')?>
|
||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
||||
<?=WebUtil::printCSS('css/common.css')?>
|
||||
<script type="text/javascript">
|
||||
@@ -45,6 +49,51 @@ function out() {
|
||||
}
|
||||
</script>
|
||||
|
||||
<?php
|
||||
|
||||
$query = "select nation,name,level,color,l12set,l11set,l10set,l9set,l8set,l7set,l6set,l5set from nation where nation='{$me['nation']}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$nation = MYDB_fetch_array($result); //국가정보
|
||||
|
||||
$ambassadors = $db->query('SELECT no, name, level, penalty, permission FROM general WHERE permission = \'ambassador\' AND nation = %i', $nation['nation']);
|
||||
$auditors = $db->query('SELECT no, name, level, penalty, permission FROM general WHERE permission = \'auditor\' AND nation = %i', $nation['nation']);
|
||||
$candidateAmbassadors = [];
|
||||
$candidateAuditors = [];
|
||||
foreach($ambassadors as $ambassador){
|
||||
$candidateAmbassadors[] = $ambassador;
|
||||
}
|
||||
foreach($auditors as $auditor){
|
||||
$candidateAuditors[] = $auditor;
|
||||
}
|
||||
foreach($db->query('SELECT no, name, nation, level, penalty, permission FROM general WHERE nation = %i AND permission = \'normal\' AND level != 12', $nation['nation']) as $candidate){
|
||||
$maxPermission = checkSecretMaxPermission($candidate);
|
||||
if($maxPermission == 4){
|
||||
$candidateAmbassadors[] = $candidate;
|
||||
}
|
||||
if($maxPermission >= 3){
|
||||
$candidateAuditors[] = $candidate;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
<script>
|
||||
var candidateAmbassadors = <?=Json::encode(array_map(function($value){
|
||||
return [
|
||||
'id'=>$value['no'],
|
||||
'text'=>$value['name'],
|
||||
"selected"=>($value['permission']!='normal')
|
||||
];
|
||||
}, $candidateAmbassadors))?>;
|
||||
|
||||
var candidateAuditors = <?=Json::encode(array_map(function($value){
|
||||
return [
|
||||
'id'=>$value['no'],
|
||||
'text'=>$value['name'],
|
||||
"selected"=>($value['permission']!='normal')
|
||||
];
|
||||
}, $candidateAuditors))?>;
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@@ -55,10 +104,6 @@ function out() {
|
||||
|
||||
<?php
|
||||
|
||||
$query = "select nation,name,level,color,l12set,l11set,l10set,l9set,l8set,l7set,l6set,l5set from nation where nation='{$me['nation']}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$nation = MYDB_fetch_array($result); //국가정보
|
||||
|
||||
$lv = getNationChiefLevel($nation['level']);
|
||||
if($meLevel >= 5) { $btn = "submit"; }
|
||||
else { $btn = "hidden"; }
|
||||
@@ -77,6 +122,7 @@ $tigerresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connec
|
||||
$query = "select name,picture,firenum from general where nation='{$nation['nation']}' order by firenum desc limit 7"; // 건안칠자
|
||||
$eagleresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
|
||||
|
||||
echo "
|
||||
<table align=center width=1000 class='tb_layout bg0'>
|
||||
<tr>
|
||||
@@ -279,9 +325,35 @@ for($i=10; $i >= $lv; $i--) {
|
||||
echo "
|
||||
<tr><td colspan=4>※ <font color=red>빨간색</font>은 현재 임명중인 장수, <font color=orange>노란색</font>은 다른 관직에 임명된 장수, 하얀색은 일반 장수를 뜻합니다.</td></tr>
|
||||
</table>
|
||||
<table align=center width=1000 class='tb_layout bg0'>
|
||||
<tr><td colspan=5 height=5></td></tr>
|
||||
|
||||
";
|
||||
|
||||
if($meLevel == 12):
|
||||
?>
|
||||
<table align='center' width='1000' class='tb_layout bg0'>
|
||||
<tr><td colspan='4' height='5'></td></tr>
|
||||
<tr><td colspan='4' align='center' bgcolor='purple'>외 교 권 자 임 명</td></tr>
|
||||
<tr>
|
||||
<td width=98 align=right id=bg1>외교권자</td>
|
||||
<td width=398>
|
||||
<select id="selectAmbassador" multiple="multiple">
|
||||
</select>
|
||||
<button id='changeAmbassador' type='button'>임명</button>
|
||||
</td>
|
||||
<td width=98 align=right id=bg1>조언자</td>
|
||||
<td width=398>
|
||||
<select id="selectAuditor" multiple="multiple">
|
||||
</select>
|
||||
<button id='changeAuditor' type='button'>임명</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
endif;
|
||||
?>
|
||||
<table align=center width=1000 id='officer_list' class='tb_layout bg0'>
|
||||
<tr><td colspan=5 height=5></td></tr>
|
||||
<?php
|
||||
if($meLevel >= 5) {
|
||||
echo "
|
||||
<tr><td colspan=5 align=center bgcolor=orange>도 시 관 직 임 명</td></tr>
|
||||
@@ -395,7 +467,7 @@ if($meLevel >= 5) {
|
||||
</form>
|
||||
<form method=post action=c_myBossInfo.php>
|
||||
<tr>
|
||||
<td colspan=3 align=right id=bg2>시 중 임 명</td>
|
||||
<td colspan=3 align=right id=bg2>종 사 임 명</td>
|
||||
<td colspan=2>
|
||||
<select name=citylist size=1 style=color:white;background-color:black;>
|
||||
";
|
||||
@@ -455,7 +527,7 @@ echo "
|
||||
<td width=158 align=center id=bg1 colspan=2><font size=4>도 시</font></td>
|
||||
<td width=278 align=center id=bg1><font size=4>태 수 (사관) 【현재도시】</font></td>
|
||||
<td width=278 align=center id=bg1><font size=4>군 사 (사관) 【현재도시】</font></td>
|
||||
<td width=278 align=center id=bg1><font size=4>시 중 (사관) 【현재도시】</font></td>
|
||||
<td width=278 align=center id=bg1><font size=4>종 사 (사관) 【현재도시】</font></td>
|
||||
</tr>
|
||||
";
|
||||
|
||||
|
||||
@@ -113,7 +113,7 @@ for ($j=0; $j < $citycount; $j++) {
|
||||
$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
$gen2 = MYDB_fetch_array($genresult);
|
||||
|
||||
$query = "select name from general where no='{$city['gen3']}'"; // 시중
|
||||
$query = "select name from general where no='{$city['gen3']}'"; // 종사
|
||||
$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
$gen3 = MYDB_fetch_array($genresult);
|
||||
|
||||
@@ -163,7 +163,7 @@ for ($j=0; $j < $citycount; $j++) {
|
||||
<td align=center>";
|
||||
echo $gen2['name']==''?"-":"{$gen2['name']}";
|
||||
echo "</td>
|
||||
<td align=center id=bg1>시중</td>
|
||||
<td align=center id=bg1>종사</td>
|
||||
<td align=center>";
|
||||
echo $gen3['name']==''?"-":"{$gen3['name']}";
|
||||
echo "</td>
|
||||
|
||||
@@ -120,7 +120,7 @@ echo "
|
||||
<td align=center>+$goldincomeList[0] / +$deadIncome</td>
|
||||
<td align=center id=bg1>세곡/둔전</td>
|
||||
<td align=center>+$riceincomeList[0] / +$riceincomeList[1]</td>
|
||||
<td align=center id=bg1>지급율</td>
|
||||
<td align=center id=bg1>지급률</td>
|
||||
<td align=center colspan=3>"; echo $me['nation']==0?"해당 없음":"{$nation['bill']} %"; echo "</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
$connect=$db->get();
|
||||
|
||||
increaseRefresh("회의실", 1);
|
||||
|
||||
$query = "select no,nation from general where owner='{$userID}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$me = MYDB_fetch_array($result);
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title><?=UniqueConst::$serverName?>: 회의실</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=1024" />
|
||||
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
|
||||
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
|
||||
<?=WebUtil::printJS('js/common.js')?>
|
||||
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
|
||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
||||
<?=WebUtil::printCSS('css/common.css')?>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div style='width:1000px;margin:auto'>
|
||||
<table width=1000 class='tb_layout bg0'>
|
||||
<tr><td>회 의 실<br><?=backButton()?></td></tr>
|
||||
<form name=form1 method=post action=c_nationboard.php>
|
||||
<tr><td align=center>
|
||||
제목 <input type=textarea maxlength=50 name=title style=color:white;background-color:black;width:830px;>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td>
|
||||
<textarea name=msg style=color:white;background-color:black;width:998px;height:200px;></textarea><br>
|
||||
<input type=submit value=저장하기>
|
||||
<input type=hidden name=num value=-1>
|
||||
</td></tr>
|
||||
</form>
|
||||
</table>
|
||||
<br>
|
||||
<?php
|
||||
$nation = getNation($me['nation']);
|
||||
|
||||
//20개 메세지
|
||||
$index = $nation['boardindex'];
|
||||
for($i=0; $i < 20; $i++) {
|
||||
$who = "board{$index}_who";
|
||||
$query = "select name,picture,imgsvr from general where no='$nation[$who]'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$general = MYDB_fetch_array($result);
|
||||
if($nation["board{$index}"] != '') { msgprint($nation["board{$index}"], $general['name'], $general['picture'], $general['imgsvr'], $nation["board{$index}_when"], $index, 0); }
|
||||
$index--;
|
||||
if($index < 0) { $index = 19; }
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<table width=1000 class='tb_layout bg0'>
|
||||
<tr><td><?=backButton()?></td></tr>
|
||||
<tr><td><?=banner()?> </td></tr>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
$connect=$db->get();
|
||||
|
||||
increaseRefresh("국법", 1);
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title><?=UniqueConst::$serverName?>: 국법</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=1024" />
|
||||
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
|
||||
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
|
||||
<?=WebUtil::printJS('js/common.js')?>
|
||||
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
|
||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
||||
<?=WebUtil::printCSS('css/common.css')?>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<table align=center width=1000 class='tb_layout bg0'>
|
||||
<tr><td>국 법<br><?=backButton()?></td></tr>
|
||||
<tr><td>
|
||||
|
||||
<?php
|
||||
$query = "select no,nation,level from general where owner='{$userID}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$me = MYDB_fetch_array($result);
|
||||
|
||||
$query = "select rule from nation where nation='{$me['nation']}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$nation = MYDB_fetch_array($result);
|
||||
|
||||
if($me['level'] >= 5) {
|
||||
echo "
|
||||
<form name=form1 method=post action=c_nationrule.php>
|
||||
<textarea name=msg style=color:white;background-color:black;width:998px;height:500px;>{$nation['rule']}</textarea><br>
|
||||
<input type=submit value=저장하기>
|
||||
</form>";
|
||||
} else {
|
||||
echo "
|
||||
<textarea name=msg style=color:white;background-color:black;width:998px;height:500px; readonly>{$nation['rule']}</textarea><br>";
|
||||
}
|
||||
|
||||
?>
|
||||
</td></tr>
|
||||
<tr><td><?=backButton()?></td></tr>
|
||||
<tr><td><?=banner()?> </td></tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -255,7 +255,7 @@ $startYear = $gameStor->getValue('startyear');
|
||||
<option value="1">일반</option>
|
||||
<option value="4">태수</option>
|
||||
<option value="3">군사</option>
|
||||
<option value="2">시중</option>
|
||||
<option value="2">종사</option>
|
||||
<option value="10">무장 수뇌</option>
|
||||
<option value="9">지장 수뇌</option>
|
||||
<option value="11">참모</option>
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
|
||||
$title = Util::getReq('title');
|
||||
$msg = Util::getReq('msg');
|
||||
$num = Util::getReq('num', 'int');
|
||||
$reply = Util::getReq('reply');
|
||||
// $title, $msg, $num
|
||||
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
$connect=$db->get();
|
||||
|
||||
if (getBlockLevel() == 1 || getBlockLevel() == 3) {
|
||||
header('location:b_chiefboard.php');
|
||||
die();
|
||||
}
|
||||
|
||||
$query = "select no,nation from general where owner='{$userID}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$me = MYDB_fetch_array($result);
|
||||
|
||||
$title = str_replace("|", " ", $title);
|
||||
$msg = str_replace("|", " ", $msg);
|
||||
$reply = str_replace("|", " ", $reply);
|
||||
$title = trim($title);
|
||||
$msg = trim($msg);
|
||||
$reply = trim($reply);
|
||||
|
||||
$nation = getNation($me['nation']);
|
||||
|
||||
//새글 추가시
|
||||
if($num == -1 && $title != "" && $msg != "") {
|
||||
$num = $nation['coreindex'] + 1;
|
||||
if($num >= 20) { $num = 0; }
|
||||
$msg = $title."|".$msg;
|
||||
$msg = addslashes(SQ2DQ($msg));
|
||||
$date = date('Y-m-d H:i:s');
|
||||
$query = "update nation set coreboard{$num}='$msg',coreboard{$num}_who='{$me['no']}',coreboard{$num}_when='$date' where nation='{$me['nation']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$query = "update nation set coreindex='$num' where nation='{$me['nation']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
//$num에 댓글시
|
||||
} elseif($num >= 0 && $reply != "") {
|
||||
$newmsg = $nation["coreboard{$num}"]."|".$me['no']."|".$reply;
|
||||
$newmsg = addslashes(SQ2DQ($newmsg));
|
||||
|
||||
$query = "update nation set coreboard{$num}='$newmsg' where nation='{$me['nation']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
}
|
||||
|
||||
header('location:b_chiefboard.php');
|
||||
+8
-3
@@ -18,10 +18,15 @@ $userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
|
||||
$me = $db->queryFirstRow('SELECT `no`,nation,`level` FROM general WHERE `owner`=%i', $userID);
|
||||
$me = $db->queryFirstRow('SELECT `no`,nation,`level`,permission,penalty FROM general WHERE `owner`=%i', $userID);
|
||||
|
||||
//내가 수뇌부이어야함
|
||||
if($me['level'] < 5) {
|
||||
$permission = checkSecretPermission($me);
|
||||
if($permission < 0){
|
||||
header('location:b_myBossInfo.php');
|
||||
exit();
|
||||
}
|
||||
else if ($me['level'] < 5 && $permission != 4) {
|
||||
header('location:b_myBossInfo.php');
|
||||
exit();
|
||||
}
|
||||
@@ -42,7 +47,7 @@ if($btn == "국가방침 수정") {
|
||||
$db->update('nation', [
|
||||
'rate'=>$rate,
|
||||
], 'nation=%i', $me['nation']);
|
||||
} elseif($btn == "지급율") {
|
||||
} elseif($btn == "지급률") {
|
||||
$bill = Util::valueFit($bill, 20, 200);
|
||||
$db->update('nation', [
|
||||
'bill'=>$bill
|
||||
|
||||
@@ -93,11 +93,6 @@ if($command == 61) {
|
||||
$me = MYDB_fetch_array($result);
|
||||
|
||||
if($me['level'] >= 5) {
|
||||
$note = StringUtil::neutralize($note, 90);
|
||||
|
||||
$query = "update diplomacy set reserved='{$note}' where me='{$me['nation']}' and you='$double'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
|
||||
$count = count($turn);
|
||||
$str = "type=type";
|
||||
for($i=0; $i < $count; $i++) {
|
||||
|
||||
+40
-20
@@ -59,7 +59,7 @@ if($btn == "임명") {
|
||||
header('location:b_myBossInfo.php');
|
||||
exit();
|
||||
}
|
||||
$query = "select no,name,gold,rice,nation,troop,level,npc,picture,imgsvr from general where no='$outlist'";
|
||||
$query = "select no,name,gold,rice,nation,troop,level,npc,picture,imgsvr,permission,penalty,belong from general where no='$outlist'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$general = MYDB_fetch_array($result);
|
||||
|
||||
@@ -74,6 +74,13 @@ if($btn == "임명") {
|
||||
exit();
|
||||
}
|
||||
|
||||
//추방할사람이 외교권자이면 불가
|
||||
$permission = checkSecretPermission($general);
|
||||
if($permission == 4){
|
||||
header('location:b_myBossInfo.php');
|
||||
exit();
|
||||
}
|
||||
|
||||
//NPC 부대장 추방 불가
|
||||
if($general['npc'] == 5){
|
||||
header('location:b_myBossInfo.php');
|
||||
@@ -143,11 +150,13 @@ if($btn == "추방") {
|
||||
'level'=>0,
|
||||
'nation'=>0,
|
||||
'belong'=>0,
|
||||
'permission'=>'normal',
|
||||
], 'no=%i', $general['no']);
|
||||
}
|
||||
else{
|
||||
$db->update('general', [
|
||||
'level'=>0,
|
||||
'permission'=>'normal',
|
||||
'nation'=>0,
|
||||
'belong'=>0,
|
||||
'makelimit'=>12,
|
||||
@@ -301,27 +310,29 @@ if($btn == "임명" && $level >= 5 && $level <= 11) {
|
||||
|
||||
if($btn == "임명" && $level >= 2 && $level <= 4 && $citylist > 0) {
|
||||
switch($level) {
|
||||
case 4: $lv = 1; break;
|
||||
case 3: $lv = 2; break;
|
||||
case 2: $lv = 3; break;
|
||||
case 4: $genlv = 'gen1'; $genlvset = 'gen1set'; break;
|
||||
case 3: $genlv = 'gen2'; $genlvset = 'gen2set'; break;
|
||||
case 2: $genlv = 'gen3'; $genlvset = 'gen3set'; break;
|
||||
}
|
||||
|
||||
$query = "select gen{$lv} from city where nation='{$me['nation']}' and city='$citylist'";
|
||||
$query = "select {$genlv} from city where nation='{$me['nation']}' and city='$citylist'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$city = MYDB_fetch_array($result);
|
||||
if(!$city){
|
||||
header('location:b_myBossInfo.php');
|
||||
die();
|
||||
}
|
||||
$oldlist = $city["gen{$lv}"];
|
||||
$oldlist = $city[$genlv];
|
||||
|
||||
if($oldlist != 0) {
|
||||
//기존 장수 일반으로
|
||||
$query = "update general set level=1 where no='$oldlist'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$db->update('general', [
|
||||
'level'=>1
|
||||
], 'no=%i', $oldlist);
|
||||
//기존 자리 공석으로
|
||||
$query = "update city set gen{$lv}=0 where city='$citylist'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$db->update('city', [
|
||||
$genlv=>0
|
||||
], 'city = %i AND nation = %i', $citylist , $me['nation']);
|
||||
}
|
||||
if($genlist != 0) {
|
||||
$valid = 0;
|
||||
@@ -333,17 +344,26 @@ if($btn == "임명" && $level >= 2 && $level <= 4 && $citylist > 0) {
|
||||
|
||||
if($valid == 1) {
|
||||
// 신임 장수의 원래 자리 해제
|
||||
$query = "update city set gen1=0 where gen1='$genlist'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$query = "update city set gen2=0 where gen2='$genlist'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$query = "update city set gen3=0 where gen3='$genlist'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$db->update('city', [
|
||||
'gen1'=>0,
|
||||
], 'gen1=%i', $genlist);
|
||||
$db->update('city', [
|
||||
'gen2'=>0,
|
||||
], 'gen2=%i', $genlist);
|
||||
$db->update('city', [
|
||||
'gen3'=>0,
|
||||
], 'gen3=%i', $genlist);
|
||||
|
||||
//신임 장수
|
||||
$query = "update general set level='$level' where no='$genlist'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$query = "update city set gen{$lv}='$genlist',gen{$lv}set='1' where city='$citylist'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$db->update('city', [
|
||||
$genlv=>$genlist,
|
||||
$genlvset=>1
|
||||
], 'city=%i AND nation=%i', $citylist, $general['nation']);
|
||||
if($db->affectedRows() > 0){
|
||||
$db->update('general',[
|
||||
'level'=>$level
|
||||
], 'no=%i', $genlist);
|
||||
}
|
||||
}
|
||||
}
|
||||
header('location:b_myBossInfo.php');
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
// $title, $msg, $num
|
||||
$title = Util::getReq('title');
|
||||
$msg = Util::getReq('msg');
|
||||
$num = Util::getReq('num', 'int');
|
||||
$reply = Util::getReq('reply');
|
||||
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
$connect=$db->get();
|
||||
|
||||
if(getBlockLevel() != 1 && getBlockLevel() != 3) {
|
||||
$query = "select no,nation from general where owner='{$userID}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$me = MYDB_fetch_array($result);
|
||||
|
||||
$title = str_replace("|", " ", $title);
|
||||
$msg = str_replace("|", " ", $msg);
|
||||
$reply = str_replace("|", " ", $reply);
|
||||
$title = trim($title);
|
||||
$msg = trim($msg);
|
||||
$reply = trim($reply);
|
||||
|
||||
$nation = getNation($me['nation']);
|
||||
|
||||
//새글 추가시
|
||||
if($num == -1 && $title != "" && $msg != "") {
|
||||
$num = $nation['boardindex'] + 1;
|
||||
if($num >= 20) { $num = 0; }
|
||||
$msg = $title."|".$msg;
|
||||
$msg = addslashes(SQ2DQ($msg));
|
||||
$date = date('Y-m-d H:i:s');
|
||||
$query = "update nation set board{$num}='$msg',board{$num}_who='{$me['no']}',board{$num}_when='$date' where nation='{$me['nation']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$query = "update nation set boardindex='$num' where nation='{$me['nation']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
//$num에 댓글시
|
||||
} elseif($num >= 0 && $reply != "") {
|
||||
$newmsg = $nation["board{$num}"]."|".$me['no']."|".$reply;
|
||||
$newmsg = addslashes(SQ2DQ($newmsg));
|
||||
|
||||
$query = "update nation set board{$num}='$newmsg' where nation='{$me['nation']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
}
|
||||
}
|
||||
|
||||
header('location:b_nationboard.php');
|
||||
@@ -1,25 +0,0 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
// $msg
|
||||
$msg = Util::getReq('msg');
|
||||
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
$connect=$db->get();
|
||||
|
||||
$query = "select no,nation from general where owner='{$userID}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$me = MYDB_fetch_array($result);
|
||||
|
||||
$msg = addslashes(SQ2DQ($msg));
|
||||
|
||||
$query = "update nation set rule='$msg' where nation='{$me['nation']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
|
||||
header('location:b_nationrule.php');
|
||||
+3
-1
@@ -12,7 +12,9 @@ $gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
|
||||
$killturn = $gameStor->killturn;
|
||||
|
||||
$db->update('general', ['killturn'=>$killturn*3], 'owner=%i', $userID);
|
||||
$db->update('general', [
|
||||
'killturn'=>$killturn*3,
|
||||
], 'owner=%i', $userID);
|
||||
|
||||
|
||||
header('location:b_myPage.php');
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
#newArticle{
|
||||
width:1000px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.titleInput{
|
||||
width:100%;
|
||||
color:white;
|
||||
background-color:transparent;
|
||||
border:none;
|
||||
margin:1px 5px;
|
||||
}
|
||||
|
||||
.contentInput{
|
||||
width:100%;
|
||||
min-height:3em;
|
||||
color:white;
|
||||
background-color:transparent;
|
||||
border:none;
|
||||
padding:1px 5px;
|
||||
}
|
||||
|
||||
.articleFrame{
|
||||
width:1000px;
|
||||
margin: 20px auto;
|
||||
}
|
||||
|
||||
.commentText{
|
||||
width:100%;
|
||||
}
|
||||
|
||||
.authorName, .comment .author{
|
||||
width:110px;
|
||||
font-size:85%;
|
||||
}
|
||||
|
||||
.date{
|
||||
width:125px;
|
||||
font-size:85%;
|
||||
}
|
||||
|
||||
.text{
|
||||
text-align:left;
|
||||
padding:1px 5px;
|
||||
}
|
||||
|
||||
.submitComment{
|
||||
width:100%;
|
||||
}
|
||||
|
||||
.commentText{
|
||||
color:white;
|
||||
background-color:transparent;
|
||||
border:none;
|
||||
padding:1px 5px;
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
#newLetter {
|
||||
width:1000px;
|
||||
margin: 10px auto;
|
||||
}
|
||||
|
||||
#newLetter th{
|
||||
width:20ch;
|
||||
}
|
||||
|
||||
#newLetter textarea{
|
||||
width:100%;
|
||||
min-height:3em;
|
||||
color:white;
|
||||
background-color:transparent;
|
||||
border:none;
|
||||
}
|
||||
|
||||
.letterFrame{
|
||||
width:1000px;
|
||||
margin: 10px auto;
|
||||
}
|
||||
|
||||
.letterFrame th{
|
||||
width:20ch;
|
||||
}
|
||||
|
||||
.letterHeader{
|
||||
position: relative;
|
||||
font-size:200%;
|
||||
}
|
||||
|
||||
.letterDate{
|
||||
position: absolute;
|
||||
right:1ch;
|
||||
bottom:0.2em;
|
||||
font-size:50%;
|
||||
|
||||
}
|
||||
|
||||
.letterBrief, .letterDetail{
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.letterSignerPlate{
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
.letterSrc, .letterDest{
|
||||
display:inline-block;
|
||||
margin: 0 10px;
|
||||
border: 1px solid gray;
|
||||
width:110px;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
.signerNation, .signerName{
|
||||
border-top: 1px solid gray;
|
||||
}
|
||||
@@ -67,4 +67,15 @@ color:white;
|
||||
|
||||
.nation_info td{
|
||||
height:18px;
|
||||
}
|
||||
|
||||
#sidebar{
|
||||
position:fixed;
|
||||
right:0;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
|
||||
#sidebar button{
|
||||
/*width:100px;*/
|
||||
}
|
||||
+26
-3
@@ -59,12 +59,16 @@
|
||||
height:667px;
|
||||
}
|
||||
|
||||
.private_message{
|
||||
height:667px;
|
||||
.diplomacy_message{
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.national_message{
|
||||
height:1350px;
|
||||
height:667px;
|
||||
}
|
||||
|
||||
.private_message{
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.msg_icon{
|
||||
@@ -83,6 +87,7 @@
|
||||
font-weight: bold;
|
||||
margin-bottom:3px;
|
||||
color:white;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.message_input_form{
|
||||
@@ -129,6 +134,16 @@
|
||||
outline-style:solid;
|
||||
outline-width:1px;
|
||||
outline-color: gray;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
flex-direction: column;
|
||||
}
|
||||
.board_side > div{
|
||||
height: 1.2em;
|
||||
}
|
||||
|
||||
.msg_invalid{
|
||||
color:rgba(255,255,255,0.5);
|
||||
}
|
||||
|
||||
.msg_body{
|
||||
@@ -143,6 +158,14 @@
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.btn-delete-msg{
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
margin:2px 2px 0 2px;
|
||||
font-size:8px;
|
||||
}
|
||||
|
||||
/*
|
||||
.public_message .msg_target{
|
||||
box-shadow: 2px 2px darkslategrey;
|
||||
|
||||
+84
-61
@@ -243,7 +243,7 @@ function cityInfo() {
|
||||
<td height=7>".bar($wall)."</td>
|
||||
<td rowspan=2 style='text-align:center;' class='bg1'><b>시세</b></td>
|
||||
<td height=7>".bar($trade)."</td>
|
||||
<td rowspan=2 style='text-align:center;' class='bg1'><b>시중</b></td>
|
||||
<td rowspan=2 style='text-align:center;' class='bg1'><b>종사</b></td>
|
||||
<td rowspan=2 style='text-align:center;'>{$gen3['name']}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -322,7 +322,7 @@ function myNationInfo() {
|
||||
<td class='center'>";echo $me['nation']==0?"해당 없음":"{$nation['rice']}";echo "</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='bg1 center'><b>지급율</b></td>
|
||||
<td class='bg1 center'><b>지급률</b></td>
|
||||
<td class='center'>";
|
||||
if($me['nation'] == 0) {
|
||||
echo "해당 없음";
|
||||
@@ -399,6 +399,70 @@ function myNationInfo() {
|
||||
";
|
||||
}
|
||||
|
||||
function checkSecretMaxPermission($me){
|
||||
$secretMax = 4;
|
||||
if($penalty['noTopSecret']??false){
|
||||
$secretMax = 1;
|
||||
}
|
||||
else if($penalty['noChief']??false){
|
||||
$secretMax = 1;
|
||||
}
|
||||
else if($penalty['noAmbassador']??false){
|
||||
$secretMax = 2;
|
||||
}
|
||||
return $secretMax;
|
||||
}
|
||||
|
||||
function checkSecretPermission($me, $checkSecretLimit=true){
|
||||
if(!key_exists('penalty', $me) || !key_exists('permission', $me)){
|
||||
trigger_error ('canAccessSecret() 함수에 필요한 인자가 부족');
|
||||
}
|
||||
$penalty = Json::decode($me['penalty'])??[];
|
||||
$permission = $me['permission'];
|
||||
|
||||
if(!$me['nation']){
|
||||
return -1;
|
||||
}
|
||||
|
||||
if($me['level'] == 0){
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
if($pernalty['noSecret']??false){
|
||||
return 0;
|
||||
}
|
||||
|
||||
$secretMin = 0;
|
||||
$secretMax = checkSecretMaxPermission($me);
|
||||
|
||||
|
||||
if($me['level'] == 12){
|
||||
$secretMin = 4;
|
||||
}
|
||||
else if($me['permission'] == 'ambassador'){
|
||||
$secretMin = 4;
|
||||
}
|
||||
else if($me['permission'] == 'auditor'){
|
||||
$secretMin = 3;
|
||||
}
|
||||
else if($me['level'] >= 5){
|
||||
$secretMin = 2;
|
||||
}
|
||||
else if($me['level'] > 1){
|
||||
$secretMin = 1;
|
||||
}
|
||||
else if($checkSecretLimit){
|
||||
$db = DB::db();
|
||||
$secretLimit = $db->queryFirstField('SELECT secretlimit FROM nation WHERE nation = %i', $me['nation']);
|
||||
if ($me['belong'] >= $secretLimit) {
|
||||
$secretMin = 1;
|
||||
}
|
||||
}
|
||||
|
||||
return min($secretMin, $secretMax);
|
||||
}
|
||||
|
||||
function addCommand($typename, $value, $valid = 1, $color=0) {
|
||||
if($valid == 1) {
|
||||
switch($color) {
|
||||
@@ -1128,59 +1192,6 @@ function nationMsg() {
|
||||
return $msg?:'';
|
||||
}
|
||||
|
||||
function msgprint($msg, $name, $picture, $imgsvr, $when, $num, $type) {
|
||||
$db = DB::db();
|
||||
$connect=$db->get();
|
||||
|
||||
$message = explode('|', $msg);
|
||||
$count = (count($message) - 2)/2;
|
||||
$message[0] = Tag2Code($message[0]);
|
||||
$message[1] = Tag2Code($message[1]);
|
||||
// $message[0] = str_replace("\n", "<br>", $message[0]);
|
||||
// $message[1] = str_replace("\n", "<br>", $message[1]);
|
||||
|
||||
if($type == 0) { $board = "c_nationboard.php"; }
|
||||
else { $board = "c_chiefboard.php"; }
|
||||
|
||||
$imageTemp = GetImageURL($imgsvr);
|
||||
echo "
|
||||
<table style='text-align:center;' width=1000 class='tb_layout bg0'>
|
||||
<tr>
|
||||
<td width=90 style='text-align:center;' class='bg1'><font size=1>$name</font></td>
|
||||
<td width=746 style='text-align:center;' class='bg1'><font size=4><b>$message[0]</b></font></td>
|
||||
<td width=148 style='text-align:center;' class='bg1'>$when</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width=90 height=64 valign=top><img width='64' height='64' class='generalIcon' src='{$imageTemp}/{$picture}' border='0'></td>
|
||||
<td width=906 colspan=2>$message[1]</td>
|
||||
</tr>";
|
||||
for($i=0; $i < $count; $i++) {
|
||||
$who = Tag2Code($message[2+$i*2]);
|
||||
$reply = Tag2Code($message[3+$i*2]);
|
||||
$query = "select name from general where no='$who'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$regen = MYDB_fetch_array($result);
|
||||
echo "
|
||||
<tr>
|
||||
<td width=90 style='text-align:center;'><font size=1>{$regen['name']}</font></td>
|
||||
<td width=906 colspan=2>$reply</td>
|
||||
</tr>";
|
||||
}
|
||||
echo "
|
||||
<tr>
|
||||
<form name=reply_form{$num} method=post action=$board>
|
||||
<td width=90 style='text-align:center;'>댓글달기</td>
|
||||
<td width=906 colspan=2>
|
||||
<input type=textarea name=reply maxlength=250 style=color:white;background-color:black;width:804px;>
|
||||
<input type=submit value=댓글달기>
|
||||
<input type=hidden name=num value=$num>
|
||||
</td>
|
||||
</form>
|
||||
</tr>
|
||||
</table>
|
||||
<br>";
|
||||
}
|
||||
|
||||
function banner() {
|
||||
|
||||
return sprintf(
|
||||
@@ -1942,6 +1953,7 @@ function updateTurntime($no) {
|
||||
'npc'=>$general['npc_org'],
|
||||
'killturn'=>$general['killturn'],
|
||||
'mode'=>2,
|
||||
'permission'=>'normal',
|
||||
'name2'=>null
|
||||
], 'no=%i',$no);
|
||||
|
||||
@@ -1957,7 +1969,7 @@ function updateTurntime($no) {
|
||||
nextRuler($general);
|
||||
}
|
||||
|
||||
//도시의 태수, 군사, 시중직도 초기화
|
||||
//도시의 태수, 군사, 종사직도 초기화
|
||||
$query = "update city set gen1='0' where gen1='{$general['no']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$query = "update city set gen2='0' where gen2='{$general['no']}'";
|
||||
@@ -2176,7 +2188,7 @@ function CheckHall($no) {
|
||||
];
|
||||
$jsonAux = Json::encode($aux);
|
||||
|
||||
$db->insertUpdate('ng_hall', [
|
||||
$db->insertIgnore('ng_hall', [
|
||||
'server_id'=>UniqueConst::$serverID,
|
||||
'scenario'=>$scenarioIdx,
|
||||
'general_no'=>$no,
|
||||
@@ -2184,10 +2196,21 @@ function CheckHall($no) {
|
||||
'value'=>$general[$typeName]??0,
|
||||
'owner'=>$general['owner']??null,
|
||||
'aux'=>$jsonAux
|
||||
],[
|
||||
'value'=>$general[$typeName]??0,
|
||||
'aux'=>$jsonAux
|
||||
]);
|
||||
|
||||
if($db->affectedRows() == 0){
|
||||
$db->update('ng_hall', [
|
||||
'value'=>$general[$typeName]??0,
|
||||
'aux'=>$jsonAux
|
||||
],
|
||||
'server_id = %s AND scenario = %i AND general_no = %i AND type = %i AND value < %?',
|
||||
UniqueConst::$serverID,
|
||||
$scenarioIdx,
|
||||
$no,
|
||||
$idx,
|
||||
$general[$typeName]??0);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2548,7 +2571,7 @@ function deleteNation($general) {
|
||||
$oldNation['aux'] = Json::decode($oldNation['aux']);
|
||||
|
||||
// 전 장수 재야로 // 전 장수 소속 무소속으로
|
||||
$query = "update general set belong=0,troop=0,level=0,nation=0,makelimit=12 where nation='{$general['nation']}'";
|
||||
$query = "update general set belong=0,troop=0,level=0,nation=0,permission='normal',makelimit=12 where nation='{$general['nation']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
// 도시 공백지로
|
||||
$query = "update city set nation=0,front=0,gen1=0,gen2=0,gen3=0 where nation='{$general['nation']}'";
|
||||
|
||||
@@ -278,11 +278,11 @@ function getLevel($level, $nlevel=8) {
|
||||
|
||||
case 712: $call = '황제'; break; case 612: $call = '왕'; break;
|
||||
case 711: $call = '승상'; break; case 611: $call = '광록훈'; break;
|
||||
case 710: $call = '위장군'; break; case 610: $call = '전장군'; break;
|
||||
case 710: $call = '표기장군'; break; case 610: $call = '좌장군'; break;
|
||||
case 709: $call = '사공'; break; case 609: $call = '상서령'; break;
|
||||
case 708: $call = '표기장군'; break; case 608: $call = '좌장군'; break;
|
||||
case 708: $call = '거기장군'; break; case 608: $call = '우장군'; break;
|
||||
case 707: $call = '태위'; break; case 607: $call = '중서령'; break;
|
||||
case 706: $call = '거기장군'; break; case 606: $call = '우장군'; break;
|
||||
case 706: $call = '위장군'; break; case 606: $call = '전장군'; break;
|
||||
case 705: $call = '사도'; break; case 605: $call = '비서령'; break;
|
||||
|
||||
case 512: $call = '공'; break; case 412: $call = '주목'; break;
|
||||
@@ -302,7 +302,7 @@ function getLevel($level, $nlevel=8) {
|
||||
|
||||
case 4: $call = '태수'; break;
|
||||
case 3: $call = '군사'; break;
|
||||
case 2: $call = '시중'; break;
|
||||
case 2: $call = '종사'; break;
|
||||
case 1: $call = '일반'; break;
|
||||
case 0: $call = '재야'; break;
|
||||
default: $call = '-'; break;
|
||||
|
||||
@@ -776,6 +776,7 @@ function checkMerge() {
|
||||
|
||||
$db->update('general', [
|
||||
'nation'=>0,
|
||||
'permission'=>'normal',
|
||||
], 'nation=%i AND npc = 5', $me['nation']);
|
||||
|
||||
$query = "delete from nation where nation='{$me['nation']}'";
|
||||
@@ -922,6 +923,7 @@ function checkSurrender() {
|
||||
|
||||
$db->update('general', [
|
||||
'nation'=>0,
|
||||
'permission'=>'normal',
|
||||
], 'nation=%i AND npc = 5', $me['nation']);
|
||||
|
||||
$query = "delete from nation where nation='{$me['nation']}'";
|
||||
|
||||
@@ -5,14 +5,15 @@ function getMailboxList(){
|
||||
|
||||
$generalNations = [];
|
||||
|
||||
foreach(DB::db()->queryAllLists('select `no`, `name`, `nation`, `level`, `npc` from `general` where `npc` < 2') as $general)
|
||||
foreach(DB::db()->query('select `no`, `name`, `nation`, `level`, `npc`, `permission`, `penalty` from `general` where `npc` < 2') as $general)
|
||||
{
|
||||
list($generalID, $generalName, $nationID, $level, $npc) = $general;
|
||||
[$generalID, $generalName, $nationID, $level, $npc] = [$general['no'], $general['name'], $general['nation'], $general['level'], $general['npc']];
|
||||
if(!isset($generalNations[$nationID])){
|
||||
$generalNations[$nationID] = [];
|
||||
}
|
||||
|
||||
$obj = [$generalID, $generalName, 0];
|
||||
$permission = checkSecretPermission($general, false);
|
||||
|
||||
if($level == 12){
|
||||
$obj[2] |= 1;
|
||||
@@ -22,6 +23,10 @@ function getMailboxList(){
|
||||
$obj[2] |= 2;
|
||||
}
|
||||
|
||||
if($permission == 4){
|
||||
$obj[2] |= 4;
|
||||
}
|
||||
|
||||
$generalNations[$nationID][] = $obj;
|
||||
}
|
||||
|
||||
@@ -37,7 +42,7 @@ function getMailboxList(){
|
||||
"mailbox"=>$mailbox,
|
||||
"name"=>$nationName,
|
||||
"color"=>$color,
|
||||
"general"=>$generals
|
||||
"general"=>$generals,
|
||||
];
|
||||
}, array_merge([getNationStaticInfo(0)], getAllNationStaticInfo()));
|
||||
|
||||
|
||||
+22
-3
@@ -204,6 +204,21 @@ function processAI($no) {
|
||||
'killturn'=>1
|
||||
], 'no=%i', $general['no']);
|
||||
}
|
||||
else if($general['level'] == 12){
|
||||
$newRuler = $db->queryFirstField('SELECT `no` FROM general WHERE nation = %i AND no != %i ORDER BY RAND() LIMIT 1', $general['nation'], $general['no']);
|
||||
if($newRuler){
|
||||
$command = EncodeCommand(0, 0, $newRuler, 54); //선양
|
||||
$db->update('general', [
|
||||
'turn0'=>$command,
|
||||
'turn1'=>$command,
|
||||
'turn2'=>$command,
|
||||
'turn3'=>$command,
|
||||
'turn4'=>$command,
|
||||
'killturn'=>rand(70,75),
|
||||
], 'no=%i', $general['no']);
|
||||
}
|
||||
|
||||
}
|
||||
else{
|
||||
$command = EncodeCommand(0, 0, 0, 26); //집합
|
||||
$db->update('general', [
|
||||
@@ -437,12 +452,12 @@ function processAI($no) {
|
||||
} elseif($admin['month'] == 12) {
|
||||
//세율
|
||||
$nation['rate'] = TaxRate($general['nation']);
|
||||
//지급율
|
||||
//지급률
|
||||
GoldBillRate($nation['nation'], $nation['rate'], $admin['gold_rate'], $nation['type'], $nation['gold']);
|
||||
} elseif($admin['month'] == 6) {
|
||||
//세율
|
||||
$nation['rate'] = TaxRate($general['nation']);
|
||||
//지급율
|
||||
//지급률
|
||||
RiceBillRate($nation['nation'], $nation['rate'], $admin['rice_rate'], $nation['type'], $nation['rice']);
|
||||
}
|
||||
|
||||
@@ -1338,7 +1353,7 @@ function NPCStaffWork($general, $nation, $dipState){
|
||||
return Util::choiceRandomUsingWeight($commandList);
|
||||
}
|
||||
|
||||
//종전하기, 지급율
|
||||
//종전하기, 지급률
|
||||
//$command = $fourth * 100000000 + $type * 100000 + $crew * 100 + 11;
|
||||
|
||||
function Promotion($nation, $level) {
|
||||
@@ -1416,6 +1431,10 @@ function Promotion($nation, $level) {
|
||||
$query = "update general set level={$i2} where no='{$level['no']}'";
|
||||
MYDB_query($query, $connect) or Error("Promotion_02 ".MYDB_error($connect),"");
|
||||
}
|
||||
|
||||
$db->update('general', [
|
||||
'permission'=>'ambassador',
|
||||
], 'nation=%i AND npc < 2 AND level > 4', $nation);
|
||||
}
|
||||
|
||||
function TaxRate($nation) {
|
||||
|
||||
@@ -446,7 +446,7 @@ function process_4(&$general) {
|
||||
|
||||
// 군주, 참모 보정
|
||||
if($general['level'] == 12 || $general['level'] == 11) { $score *= 1.05; }
|
||||
// 시중 보정
|
||||
// 종사 보정
|
||||
if($general['level'] == 2 && $general['no'] == $city['gen3']) { $score *= 1.05; }
|
||||
|
||||
$rd = Util::randF();
|
||||
@@ -646,7 +646,7 @@ function process_7(&$general) {
|
||||
|
||||
// 군주, 참모 보정
|
||||
if($general['level'] == 12 || $general['level'] == 11) { $score *= 1.05; }
|
||||
// 시중 보정
|
||||
// 종사 보정
|
||||
if($general['level'] == 2 && $general['no'] == $city['gen3']) { $score *= 1.05; }
|
||||
|
||||
$rd = Util::randF();
|
||||
|
||||
@@ -605,11 +605,6 @@ function process_61(&$general) {
|
||||
$validMinutes = max(30, $turnterm*3);
|
||||
$validUntil->add(new \DateInterval("PT{$validMinutes}M"));
|
||||
|
||||
//FIXME: 현재 command가 숫자로만 이루어져 있어서 문자열을 처리할 수 없다.
|
||||
//XXX: 으악.
|
||||
//TODO: 커맨드 처리 방식을 json으로 변경
|
||||
$option = $db->queryFirstField('SELECT reserved FROM diplomacy WHERE me=%i AND you=%i', $src->nationID, $dest->nationID);
|
||||
|
||||
$msg = new DiplomaticMessage(
|
||||
Message::MSGTYPE_DIPLOMACY,
|
||||
$src,
|
||||
@@ -619,19 +614,11 @@ function process_61(&$general) {
|
||||
$validUntil,
|
||||
[
|
||||
'action'=>DiplomaticMessage::TYPE_NO_AGGRESSION,
|
||||
'year'=>$when,
|
||||
'option'=>$option
|
||||
'year'=>$when
|
||||
]
|
||||
);
|
||||
$msg->send();
|
||||
|
||||
//NOTE: 현재 내무부 외교란의 비고는 diplomacy가 기준이니까 유지할 필요는 있다.
|
||||
//FIXME: 외교란도 message란의 diplomacy를 참조하든가 하도록.
|
||||
$db->update('diplomacy', [
|
||||
'showing'=>$validUntil->format('Y-m-d H:i:s')
|
||||
], 'me=%i AND you=%i', $src->nationID, $dest->nationID);
|
||||
// 3턴후
|
||||
|
||||
pushGenLog($general, ["<C>●</>{$month}월:<D><b>{$destNation['name']}</b></>으로 불가침 제의 서신을 보냈습니다.<1>$date</>"]);
|
||||
}
|
||||
|
||||
|
||||
@@ -243,6 +243,7 @@ function process_25(&$general) {
|
||||
'nation'=>$nation['nation'],
|
||||
'nations'=>Json::encode($joinedNations),
|
||||
'level'=>1,
|
||||
'permission'=>'normal',
|
||||
'experience'=>$db->sqleval('experience + %i', $exp),
|
||||
'city'=>$king['city'],
|
||||
'belong'=>1
|
||||
@@ -595,11 +596,11 @@ function process_45(&$general) {
|
||||
pushGeneralHistory($general, "<C>●</>{$admin['year']}년 {$admin['month']}월:<D><b>{$nation['name']}</b></>에서 하야");
|
||||
|
||||
// 국적 바꾸고 등급 재야로 // 명성/공헌 N*10% 감소
|
||||
$query = "update general set resturn='SUCCESS',belong=0,nation=0,level=0,experience=experience*(1-0.1*betray),dedication=dedication*(1-0.1*betray),makelimit='12',gold='{$general['gold']}',rice='{$general['rice']}',betray=betray+1 where no='{$general['no']}'";
|
||||
$query = "update general set resturn='SUCCESS',belong=0,nation=0,level=0,permission='normal',experience=experience*(1-0.1*betray),dedication=dedication*(1-0.1*betray),makelimit='12',gold='{$general['gold']}',rice='{$general['rice']}',betray=betray+1 where no='{$general['no']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
}
|
||||
|
||||
//도시의 태수, 군사, 시중직도 초기화
|
||||
//도시의 태수, 군사, 종사직도 초기화
|
||||
$query = "update city set gen1='0' where gen1='{$general['no']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$query = "update city set gen2='0' where gen2='{$general['no']}'";
|
||||
@@ -846,18 +847,28 @@ function process_54(&$general) {
|
||||
$log[] = "<C>●</>{$admin['month']}월:현재 통합 진행중입니다. 선양 실패.";
|
||||
} else {
|
||||
//군주 교체
|
||||
$query = "update general set level='12' where no='$who'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
// 태수,군사,시중이었다면 해제
|
||||
$query = "update city set gen1='0' where gen1='$who'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$query = "update city set gen2='0' where gen2='$who'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$query = "update city set gen3='0' where gen3='$who'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$db->update('general', [
|
||||
'level'=>12,
|
||||
'permission'=>'normal'
|
||||
], 'no=%i', $who);
|
||||
|
||||
$query = "update general set resturn='SUCCESS',level='1',experience=experience*0.7 where no='{$general['no']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
// 태수,군사,종사이었다면 해제
|
||||
$db->update('city', [
|
||||
'gen1'=>0,
|
||||
], 'gen1=%i', $who);
|
||||
$db->update('city', [
|
||||
'gen2'=>0,
|
||||
], 'gen2=%i', $who);
|
||||
$db->update('city', [
|
||||
'gen3'=>0,
|
||||
], 'gen3=%i', $who);
|
||||
|
||||
$db->update('general', [
|
||||
'resturn'=>'SUCCESS',
|
||||
'level'=>1,
|
||||
'permission'=>'auditor',
|
||||
'experience'=>$db->sqleval('experience*0.7'),
|
||||
], 'no=%i', $general['no']);
|
||||
|
||||
$josaYi = JosaUtil::pick($general['name'], '이');
|
||||
$history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<Y><b>【선양】</b></><Y>{$general['name']}</>{$josaYi} <D><b>{$nation['name']}</b></>의 군주 자리를 <Y>{$nextruler['name']}</>에게 선양했습니다.";
|
||||
@@ -1059,7 +1070,7 @@ function process_57(&$general) {
|
||||
//군주 교체
|
||||
$query = "update general set resturn='SUCCESS',level='12' where no='{$general['no']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
// 태수,군사,시중이었다면 해제
|
||||
// 태수,군사,종사이었다면 해제
|
||||
$query = "update city set gen1='0' where gen1='{$general['no']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$query = "update city set gen2='0' where gen2='{$general['no']}'";
|
||||
|
||||
@@ -136,7 +136,7 @@ function commandButton() {
|
||||
}
|
||||
|
||||
$db = DB::db();
|
||||
$me = $db->queryFirstRow("select no,nation,level,belong from general where owner=%i", $userID);
|
||||
$me = $db->queryFirstRow("select no,nation,level,belong,permission,penalty from general where owner=%i", $userID);
|
||||
|
||||
$nation = $db->queryFirstRow("select nation,level,color,secretlimit from nation where nation=%i",$me['nation'])??[
|
||||
'nation'=>0,
|
||||
@@ -150,22 +150,21 @@ function commandButton() {
|
||||
|
||||
$templates = new \League\Plates\Engine(__dir__.'/templates');
|
||||
$showSecret = false;
|
||||
if($me['level'] >= 2){
|
||||
$permission = checkSecretPermission($me);
|
||||
if($permission >= 1){
|
||||
$showSecret = true;
|
||||
}
|
||||
else if($me['level']== 0){
|
||||
$showSecret = false;
|
||||
}
|
||||
else if($me['belong'] >= $nation['secretlimit']){
|
||||
$showSecret = true;
|
||||
}
|
||||
|
||||
return $templates->render('commandButton', [
|
||||
'bgColor'=>$bgColor,
|
||||
'fgColor'=>$fgColor,
|
||||
'meLevel'=>$me['level'],
|
||||
'nationLevel'=>$nation['level'],
|
||||
'showSecret'=>$showSecret
|
||||
'showSecret'=>$showSecret,
|
||||
'permission'=>$permission,
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
+11
-11
@@ -40,7 +40,7 @@ function processSpring() {
|
||||
|
||||
$admin = $gameStor->getValues(['year', 'month']);
|
||||
|
||||
pushWorldHistory(["<R>★</>{$admin['year']}년 {$admin['month']}월: <S>모두들 즐거운 게임 하고 계신가요? ^^ <Y>삼국일보</> 애독해 주시고, <M>훼접</>은 삼가주세요~</>"], $admin['year'], $admin['month']);
|
||||
pushWorldHistory(["<R>★</>{$admin['year']}년 {$admin['month']}월: <S>모두들 즐거운 게임 하고 계신가요? ^^ <Y>매너 있는 플레이</> 부탁드리고, <M>지나친 훼접</>은 삼가주세요~</>"], $admin['year'], $admin['month']);
|
||||
}
|
||||
|
||||
function processGoldIncome() {
|
||||
@@ -68,25 +68,25 @@ function processGoldIncome() {
|
||||
// 기본량도 안될경우
|
||||
if($nation['gold'] < GameConst::$basegold) {
|
||||
$realoutcome = 0;
|
||||
// 실지급율
|
||||
// 실지급률
|
||||
$ratio = 0;
|
||||
//기본량은 넘지만 요구량이 안될경우
|
||||
} elseif($nation['gold'] - GameConst::$basegold < $outcome) {
|
||||
$realoutcome = $nation['gold'] - GameConst::$basegold;
|
||||
$nation['gold'] = GameConst::$basegold;
|
||||
// 실지급율
|
||||
// 실지급률
|
||||
$ratio = $realoutcome / $originoutcome;
|
||||
} else {
|
||||
$realoutcome = $outcome;
|
||||
$nation['gold'] -= $realoutcome;
|
||||
// 실지급율
|
||||
// 실지급률
|
||||
$ratio = $realoutcome / $originoutcome;
|
||||
}
|
||||
$adminLog[] = StringUtil::padStringAlignRight((string)$nation['name'],12," ")
|
||||
." // 세금 : ".StringUtil::padStringAlignRight((string)$income,6," ")
|
||||
." // 세출 : ".StringUtil::padStringAlignRight((string)$originoutcome,6," ")
|
||||
." // 실제 : ".tab2((string)$realoutcome,6," ")
|
||||
." // 지급율 : ".tab2((string)round($ratio*100,2),5," ")
|
||||
." // 지급률 : ".tab2((string)round($ratio*100,2),5," ")
|
||||
." % // 결과금 : ".tab2((string)$nation['gold'],6," ");
|
||||
|
||||
$query = "select no,name,nation from general where nation='{$nation['nation']}' and level>='9'";
|
||||
@@ -223,7 +223,7 @@ function getGoldIncome($nationNo, $rate, $admin_rate, $type) {
|
||||
$gen = MYDB_fetch_array($result);
|
||||
$level3[$gen['no']] = $gen['city'];
|
||||
}
|
||||
$query = "select no,city from general where nation='$nationNo' and level=2"; // 시중
|
||||
$query = "select no,city from general where nation='$nationNo' and level=2"; // 종사
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$count = MYDB_num_rows($result);
|
||||
for($j=0; $j < $count; $j++) {
|
||||
@@ -391,25 +391,25 @@ function processRiceIncome() {
|
||||
// 기본량도 안될경우
|
||||
if($nation['rice'] < GameConst::$baserice) {
|
||||
$realoutcome = 0;
|
||||
// 실지급율
|
||||
// 실지급률
|
||||
$ratio = 0;
|
||||
//기본량은 넘지만 요구량이 안될경우
|
||||
} elseif($nation['rice'] - GameConst::$baserice < $outcome) {
|
||||
$realoutcome = $nation['rice'] - GameConst::$baserice;
|
||||
$nation['rice'] = GameConst::$baserice;
|
||||
// 실지급율
|
||||
// 실지급률
|
||||
$ratio = $realoutcome / $originoutcome;
|
||||
} else {
|
||||
$realoutcome = $outcome;
|
||||
$nation['rice'] -= $realoutcome;
|
||||
// 실지급율
|
||||
// 실지급률
|
||||
$ratio = $realoutcome / $originoutcome;
|
||||
}
|
||||
$adminLog[] = StringUtil::padStringAlignRight($nation['name'],12," ")
|
||||
." // 세곡 : ".StringUtil::padStringAlignRight((string)$income,6," ")
|
||||
." // 세출 : ".StringUtil::padStringAlignRight((string)$originoutcome,6," ")
|
||||
." // 실제 : ".tab2((string)$realoutcome,6," ")
|
||||
." // 지급율 : ".tab2((string)round($ratio*100,2),5," ")
|
||||
." // 지급률 : ".tab2((string)round($ratio*100,2),5," ")
|
||||
." % // 결과곡 : ".tab2((string)$nation['rice'],6," ");
|
||||
|
||||
$query = "select no,name,nation from general where nation='{$nation['nation']}' and level>='9'";
|
||||
@@ -467,7 +467,7 @@ function getRiceIncome($nationNo, $rate, $admin_rate, $type) {
|
||||
$gen = MYDB_fetch_array($result);
|
||||
$level3[$gen['no']] = $gen['city'];
|
||||
}
|
||||
$query = "select no,city from general where nation='$nationNo' and level=2"; // 시중
|
||||
$query = "select no,city from general where nation='$nationNo' and level=2"; // 종사
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$count = MYDB_num_rows($result);
|
||||
for($j=0; $j < $count; $j++) {
|
||||
|
||||
+31
-13
@@ -88,6 +88,9 @@ $mapTheme = $admin['map_theme'];
|
||||
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
|
||||
<?=WebUtil::printJS('../e_lib/jquery.redirect.js')?>
|
||||
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
|
||||
<?=WebUtil::printJS('../e_lib/moment.min.js')?>
|
||||
<?=WebUtil::printJS('../e_lib/linkify/linkify.min.js')?>
|
||||
<?=WebUtil::printJS('../e_lib/linkify/linkify-string.min.js')?>
|
||||
<?=WebUtil::printJS('../d_shared/common_path.js')?>
|
||||
<?=WebUtil::printJS('js/common.js')?>
|
||||
<?=WebUtil::printJS('js/main.js')?>
|
||||
@@ -105,7 +108,7 @@ $(function(){
|
||||
|
||||
setInterval(function(){
|
||||
refreshMsg();
|
||||
}, 10000);
|
||||
}, 5000);
|
||||
});
|
||||
</script>
|
||||
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
|
||||
@@ -114,6 +117,7 @@ $(function(){
|
||||
<?=WebUtil::printCSS('css/main.css')?>
|
||||
<?=WebUtil::printCSS('css/map.css')?>
|
||||
<?=WebUtil::printCSS('css/msg.css')?>
|
||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.1/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
|
||||
<link href="https://fonts.googleapis.com/css?family=Nanum+Gothic|Nanum+Myeongjo|Nanum+Pen+Script" rel="stylesheet">
|
||||
|
||||
</head>
|
||||
@@ -230,7 +234,7 @@ else if($session->userGrade == 4){
|
||||
?>
|
||||
|
||||
</table>
|
||||
<table class="tb_layout bg0" style="width:1000px;">
|
||||
<table class="tb_layout bg0" style="width:1000px;" id='map_position'>
|
||||
<tr>
|
||||
<td style='width:700px;height:520px;' colspan=2>
|
||||
<?=getMapHtml($mapTheme)?>
|
||||
@@ -262,7 +266,7 @@ else if($session->userGrade == 4){
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=right style="'width:650px;border:none;">
|
||||
<td align=right style="'width:650px;border:none;"><br>
|
||||
<?php commandTable(); ?>
|
||||
<input id="mainBtnSubmit" type=button style=background-color:<?=GameConst::$basecolor2?>;color:white;width:110px;font-size:13px; value='실 행' onclick='refreshing(this, 3,form2)'><input type=button style=background-color:<?=GameConst::$basecolor2?>;color:white;width:110px;font-size:13px; value='갱 신' onclick='refreshing(this, 0,0)'><input type=button style=background-color:<?=GameConst::$basecolor2?>;color:white;width:160px;font-size:13px; value='로비로' onclick=location.replace('../')><br>
|
||||
</td>
|
||||
@@ -276,7 +280,7 @@ else if($session->userGrade == 4){
|
||||
</tr>
|
||||
<tr><td colspan=2><?=commandButton()?></td></tr>
|
||||
</table>
|
||||
<table class="tb_layout bg0">
|
||||
<table class="tb_layout bg0" id='history_position'>
|
||||
<tr>
|
||||
<td width=498 class='bg1 center'><b>장수 동향</b></td>
|
||||
<td width=498 class='bg1 center'><b>개인 기록</b></td>
|
||||
@@ -302,25 +306,39 @@ else if($session->userGrade == 4){
|
||||
</div>
|
||||
<div><?=allButton()?></div>
|
||||
<div id="message_board"><div style="left:0;" class="board_side bg0">
|
||||
<div class="board_header bg0">전체 메시지(최고99자)</div>
|
||||
<section class="public_message"></section>
|
||||
<div class="board_header bg0">개인 메시지(최고99자)</div>
|
||||
<section class="private_message"></section>
|
||||
</div><div style="right:0;" class="board_side bg0">
|
||||
<section class="diplomacy_message">
|
||||
|
||||
<div class="board_header bg0" id='public_talk_position'>전체 메시지(최고99자)</div>
|
||||
<section class="public_message">
|
||||
<button type="button" class="load_old_message btn btn-secondary btn-block" data-msg_type="public">이전 메시지 불러오기</button>
|
||||
</section>
|
||||
<div class="board_header bg0" id='secret_talk_position'>개인 메시지(최고99자)</div>
|
||||
<section class="private_message">
|
||||
<button type="button" class="load_old_message btn btn-secondary btn-block" data-msg_type="private">이전 메시지 불러오기</button>
|
||||
</section>
|
||||
</div><div style="right:0;" class="board_side bg0">
|
||||
<div class="board_header bg0">국가 메시지(최고99자)</div>
|
||||
<section class="national_message"></section>
|
||||
<section class="national_message">
|
||||
<button type="button" class="load_old_message btn btn-secondary btn-block" data-msg_type="national">이전 메시지 불러오기</button>
|
||||
</section>
|
||||
<div class="board_header bg0">외교 메시지(최고99자)</div>
|
||||
<section class="diplomacy_message">
|
||||
<button type="button" class="load_old_message btn btn-secondary btn-block" data-msg_type="diplomacy">이전 메시지 불러오기</button>
|
||||
</section>
|
||||
</div></div>
|
||||
<div style="clear:left;"><?=allButton()?><?=banner()?></div>
|
||||
</div>
|
||||
<div id='sidebar' class='btn-group-vertical'>
|
||||
<button type="button" class="btn btn-primary" onclick='refreshing(this, 0,0)'><i class="fas fa-sync-alt"></i> 갱신</button>
|
||||
<a class="btn btn-secondary" href="#map_position" role="button">지도 & 턴입력</a>
|
||||
<a class="btn btn-secondary" href="#history_position" role="button">장수 동향</a>
|
||||
<a class="btn btn-secondary" href="#public_talk_position" role="button">국가 메시지</a>
|
||||
<a class="btn btn-secondary" href="#secret_talk_position" role="button">개인 메시지</a>
|
||||
</div>
|
||||
<?php
|
||||
if ($con == 1) {
|
||||
MessageBox("접속제한이 얼마 남지 않았습니다!");
|
||||
}
|
||||
if ($me['newmsg'] == 1) {
|
||||
MessageBox("개인 서신이 도착했습니다!");
|
||||
MessageBox("새로운 서신이 도착했습니다!");
|
||||
}
|
||||
if ($me['newvote'] == 1) {
|
||||
$develcost = $admin['develcost']*5;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
namespace sammo;
|
||||
|
||||
include('lib.php');
|
||||
include 'func.php';
|
||||
|
||||
$result = [
|
||||
"generalID"=>null,
|
||||
@@ -11,14 +12,18 @@ $result = [
|
||||
$session = Session::requireGameLogin([])->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$generalInfo = DB::db()->queryFirstRow('SELECT `no`, `nation`, `level` from `general` where `owner`=%i', $userID);
|
||||
$generalInfo = DB::db()->queryFirstRow('SELECT `no`, `nation`, `level`, belong, penalty, permission from `general` where `owner`=%i', $userID);
|
||||
if(!$generalInfo){
|
||||
Json::die($result);
|
||||
}
|
||||
|
||||
$permission = checkSecretPermission($generalInfo);
|
||||
|
||||
|
||||
$result['generalID'] = $generalInfo['no'];
|
||||
$result['myNationID'] = $generalInfo['nation'];
|
||||
$result['isChief'] = ($generalInfo['level'] == 12);
|
||||
$result['generalLevel'] = $generalInfo['level'];
|
||||
$result['permission'] = $permission;
|
||||
|
||||
Json::die($result);
|
||||
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
|
||||
$isSecretBoard = Util::getReq('isSecret', 'bool', false);
|
||||
$title = Util::getReq('title');
|
||||
$text = Util::getReq('text');
|
||||
|
||||
increaseRefresh("회의실", 1);
|
||||
|
||||
$me = $db->queryFirstRow('SELECT no, nation, name, level, permission, con, turntime, belong, penalty, `picture`,`imgsvr` FROM general WHERE owner=%i', $userID);
|
||||
|
||||
$con = checkLimit($me['con']);
|
||||
if ($con >= 2) {
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'접속 제한입니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
if($title === null || $text === null){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'올바르지 않은 입력입니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$title = trim($title);
|
||||
$text = trim($text);
|
||||
|
||||
if(!$title && !$text){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'제목과 내용이 둘다 비어있습니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$permission = checkSecretPermission($me);
|
||||
if($permission < 0){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'국가에 소속되어있지 않습니다.'
|
||||
]);
|
||||
|
||||
}
|
||||
else if ($isSecretBoard && $permission < 2) {
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'권한이 부족합니다. 수뇌부가 아닙니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$icon = GetImageURL($me['imgsvr'], $me['picture']);
|
||||
|
||||
$db->insert('board', [
|
||||
'nation_no'=>$me['nation'],
|
||||
'is_secret'=>$isSecretBoard,
|
||||
'date'=>TimeUtil::DatetimeNow(),
|
||||
'general_no'=>$me['no'],
|
||||
'author'=>$me['name'],
|
||||
'author_icon'=>$icon,
|
||||
'title'=>$title,
|
||||
'text'=>$text
|
||||
]);
|
||||
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'reason'=>'success',
|
||||
'row_id'=>$db->insertId()
|
||||
]);
|
||||
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
|
||||
$articleNo = Util::getReq('articleNo', 'int');
|
||||
$text = Util::getReq('text');
|
||||
|
||||
increaseRefresh("회의실", 1);
|
||||
|
||||
$me = $db->queryFirstRow('SELECT no, nation, name, level, permission, con, turntime, belong, penalty FROM general WHERE owner=%i', $userID);
|
||||
|
||||
$con = checkLimit($me['con']);
|
||||
if ($con >= 2) {
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'접속 제한입니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
if($articleNo === null || $text === null){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'올바르지 않은 입력입니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$text = trim($text);
|
||||
|
||||
if(!$text){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'내용이 비어있습니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$article = $db->queryFirstRow('SELECT * FROM board WHERE no = %i AND nation_no = %i', $articleNo, $me['nation']);
|
||||
if(!$article){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'게시물이 없습니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$isSecretBoard = $article['is_secret'];
|
||||
|
||||
$permission = checkSecretPermission($me);
|
||||
if($permission < 0){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'국가에 소속되어있지 않습니다.'
|
||||
]);
|
||||
|
||||
}
|
||||
else if ($isSecretBoard && $permission < 2) {
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'권한이 부족합니다. 수뇌부가 아닙니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$db->insert('comment', [
|
||||
'nation_no'=>$me['nation'],
|
||||
'is_secret'=>$isSecretBoard,
|
||||
'date'=>TimeUtil::DatetimeNow(),
|
||||
'document_no'=>$articleNo,
|
||||
'general_no'=>$me['no'],
|
||||
'author'=>$me['name'],
|
||||
'text'=>$text
|
||||
]);
|
||||
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'reason'=>'success',
|
||||
'row_id'=>$db->insertId()
|
||||
]);
|
||||
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
|
||||
$isSecretBoard = Util::getReq('isSecret', 'bool', false);
|
||||
|
||||
increaseRefresh("회의실", 1);
|
||||
|
||||
$me = $db->queryFirstRow('SELECT no, nation, level, permission, con, turntime, belong, penalty FROM general WHERE owner=%i', $userID);
|
||||
|
||||
|
||||
$con = checkLimit($me['con']);
|
||||
if ($con >= 2) {
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'접속 제한입니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$permission = checkSecretPermission($me);
|
||||
if($permission < 0){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'국가에 소속되어있지 않습니다.'
|
||||
]);
|
||||
|
||||
}
|
||||
else if ($isSecretBoard && $permission < 2) {
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'권한이 부족합니다. 수뇌부가 아닙니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$articles = [];
|
||||
|
||||
foreach(
|
||||
$db->query(
|
||||
'SELECT * FROM board WHERE nation_no = %i AND is_secret = %i ORDER BY date desc',
|
||||
$me['nation'],
|
||||
$isSecretBoard
|
||||
) as $article
|
||||
){
|
||||
//TODO:아이콘 받아오기
|
||||
$article['comment'] = [];
|
||||
$articles[$article['no']] = $article;
|
||||
}
|
||||
|
||||
foreach(
|
||||
$db->query(
|
||||
'SELECT * FROM comment WHERE nation_no = %i AND is_secret = %i ORDER BY date asc',
|
||||
$me['nation'],
|
||||
$isSecretBoard
|
||||
) as $comment
|
||||
){
|
||||
//TODO:아이콘 받아오기?
|
||||
$articles[$comment['document_no']]['comment'][] = $comment;
|
||||
}
|
||||
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'articles'=>$articles,
|
||||
'reason'=>'success'
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,134 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
|
||||
$letterNo = Util::getReq('letterNo', 'int');
|
||||
|
||||
increaseRefresh("외교부", 1);
|
||||
|
||||
$me = $db->queryFirstRow('SELECT no, name, nation, level, permission, con, turntime, belong, penalty, picture, imgsvr FROM general WHERE owner=%i', $userID);
|
||||
|
||||
$con = checkLimit($me['con']);
|
||||
if ($con >= 2) {
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'접속 제한입니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
if($letterNo === null){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'올바르지 않은 입력입니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
$permission = checkSecretPermission($me);
|
||||
if ($permission < 4) {
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'권한이 부족합니다. 수뇌부가 아닙니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$letter = $db->queryFirstRow('SELECT * FROM ng_diplomacy WHERE no=%i AND (src_nation_id = %i OR dest_nation_id = %i) AND state = \'activated\'', $letterNo, $me['nation'], $me['nation']);
|
||||
if(!$letter){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'서신이 없습니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
$aux = Json::decode($letter['aux']);
|
||||
|
||||
|
||||
$stateOpt = $aux['state_opt']??null;
|
||||
|
||||
if(($stateOpt == 'try_destroy_src' && $letter['src_nation_id'] == $me['nation'])||
|
||||
($stateOpt == 'try_destroy_dest' && $letter['dest_nation_id'] == $me['nation'])){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'이미 파기 신청을 했습니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$srcNation = getNationStaticInfo($letter['src_nation_id']);
|
||||
$destNation = getNationStaticInfo($letter['dest_nation_id']);
|
||||
$me['icon'] = GetImageURL($me['imgsvr'], $me['picture']);
|
||||
|
||||
|
||||
if($letter['src_nation_id'] == $me['nation']){
|
||||
$src = new MessageTarget($me['no'], $me['name'], $srcNation['nation'], $srcNation['name'], $srcNation['color'], $me['icon']);
|
||||
$dest = new MessageTarget(0, '', $destNation['nation'], $destNation['name'], $destNation['color']);
|
||||
}
|
||||
else{
|
||||
$src = new MessageTarget($me['no'], $me['name'], $destNation['nation'], $destNation['name'], $destNation['color'], $me['icon']);
|
||||
$dest = new MessageTarget(0, '', $srcNation['nation'], $srcNation['name'], $srcNation['color']);
|
||||
}
|
||||
|
||||
|
||||
$now = new \DateTime();
|
||||
$unlimited = new \DateTime('9999-12-31');
|
||||
|
||||
if(in_array($stateOpt, ['try_destroy_src', 'try_destroy_dest'])){
|
||||
$deleteLetterNo = $letterNo;
|
||||
$db->update('ng_diplomacy', [
|
||||
'state'=>'cancelled',
|
||||
'aux'=>Json::encode($aux)
|
||||
], 'no=%i', $letterNo);
|
||||
while(true){
|
||||
$deleteLetter = $db->queryFirstRow('SELECT prev_no, aux FROM ng_diplomacy WHERE no = %i AND state = \'replaced\'', $currentLetterNo);
|
||||
if(!$deleteLetter){
|
||||
break;
|
||||
}
|
||||
$deleteAux = Json::decode($deleteLetter['aux']);
|
||||
$deleteLetterNo = $deleteLetter['prev_no'];
|
||||
$deleteAux['reason'] = [
|
||||
'who'=>$me['no'],
|
||||
'action'=>'destroy',
|
||||
'reason'=>'파기'
|
||||
];
|
||||
}
|
||||
$msgText = "외교 서신 #{$letterNo}를 파기했습니다.";
|
||||
$lastState = 'cancelled';
|
||||
}
|
||||
else{
|
||||
if ($letter['src_nation_id'] == $me['nation']) {
|
||||
$aux['state_opt'] = 'try_destroy_src';
|
||||
}
|
||||
else{
|
||||
$aux['state_opt'] = 'try_destroy_dest';
|
||||
}
|
||||
$db->update('ng_diplomacy', [
|
||||
'aux'=>Json::encode($aux)
|
||||
], 'no=%i', $letterNo);
|
||||
|
||||
$msgText = "외교 서신 #{$letterNo}를 파기 요청합니다.";
|
||||
$lastState = 'activated';
|
||||
}
|
||||
|
||||
$msg = new Message(
|
||||
Message::MSGTYPE_DIPLOMACY,
|
||||
$src,
|
||||
$dest,
|
||||
$msgText,
|
||||
$now,
|
||||
$unlimited,
|
||||
['invalid' => true]
|
||||
);
|
||||
$msgID = $msg->send();
|
||||
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'reason'=>'success',
|
||||
'state'=>$lastState
|
||||
]);
|
||||
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
|
||||
$isSecretBoard = Util::getReq('isSecret', 'bool', false);
|
||||
|
||||
increaseRefresh("외교부", 1);
|
||||
|
||||
$me = $db->queryFirstRow('SELECT no, nation, level, permission, con, turntime, belong, penalty FROM general WHERE owner=%i', $userID);
|
||||
|
||||
|
||||
$con = checkLimit($me['con']);
|
||||
if ($con >= 2) {
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'접속 제한입니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$permission = checkSecretPermission($me);
|
||||
if($permission < 0){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'국가에 소속되어있지 않습니다.'
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
$letters = [];
|
||||
|
||||
foreach(
|
||||
$db->query(
|
||||
'SELECT * FROM ng_diplomacy WHERE (src_nation_id = %i OR dest_nation_id = %i) AND state != \'cancelled\' ORDER BY date desc',
|
||||
$me['nation'], $me['nation']
|
||||
) as $letter
|
||||
){
|
||||
|
||||
if($permission < 3 && $letter['text_detail']){
|
||||
$letter['text_detail'] = '(권한이 부족합니다)';
|
||||
}
|
||||
$letter['aux'] = Json::decode($letter['aux']);
|
||||
$letter['src'] = $letter['aux']['src'];
|
||||
$letter['dest'] = $letter['aux']['dest'];
|
||||
|
||||
$letter['src']['nationID'] = $letter['src_nation_id'];
|
||||
$letter['dest']['nationID'] = $letter['dest_nation_id'];
|
||||
|
||||
$letters[$letter['no']] = [
|
||||
'no'=>$letter['no'],
|
||||
'src'=>$letter['src'],
|
||||
'dest'=>$letter['dest'],
|
||||
'prev_no'=>$letter['prev_no'],
|
||||
'state'=>$letter['state'],
|
||||
'state_opt'=>($letter['aux']['state_opt']??null),
|
||||
'brief'=>$letter['text_brief'],
|
||||
'detail'=>$letter['text_detail'],
|
||||
'date'=>$letter['date']
|
||||
];
|
||||
}
|
||||
|
||||
$nations = [];
|
||||
foreach(getAllNationStaticInfo() as $nation){
|
||||
if($nation['nation'] == 0 || $nation['nation'] == $me['nation']){
|
||||
continue;
|
||||
}
|
||||
$nations[] = $nation;
|
||||
}
|
||||
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'nations'=>$nations,
|
||||
'letters'=>$letters,
|
||||
'myNationID'=>$me['nation'],
|
||||
'reason'=>'success'
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,129 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
|
||||
$letterNo = Util::getReq('letterNo', 'int');
|
||||
$isAgree = Util::getReq('isAgree', 'bool', false);
|
||||
$reason = Util::getReq('reason', 'string', '');
|
||||
|
||||
|
||||
|
||||
|
||||
increaseRefresh("외교부", 1);
|
||||
|
||||
$me = $db->queryFirstRow('SELECT no, name, nation, level, permission, con, turntime, belong, penalty, picture, imgsvr FROM general WHERE owner=%i', $userID);
|
||||
|
||||
$con = checkLimit($me['con']);
|
||||
if ($con >= 2) {
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'접속 제한입니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
if($letterNo === null){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'올바르지 않은 입력입니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$permission = checkSecretPermission($me);
|
||||
if ($permission < 4) {
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'권한이 부족합니다. 수뇌부가 아닙니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$reason = trim($reason);
|
||||
|
||||
$letter = $db->queryFirstRow('SELECT * FROM ng_diplomacy WHERE no=%i AND dest_nation_id = %i AND state = \'proposed\'', $letterNo, $me['nation']);
|
||||
if(!$letter){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'서신이 없습니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$aux = Json::decode($letter['aux']);
|
||||
$me['icon'] = GetImageURL($me['imgsvr'], $me['picture']);
|
||||
|
||||
$srcNation = getNationStaticInfo($letter['src_nation_id']);
|
||||
$destNation = getNationStaticInfo($letter['dest_nation_id']);
|
||||
|
||||
$src = new MessageTarget($me['no'], $me['name'], $destNation['nation'], $destNation['name'], $destNation['color'], $me['icon']);
|
||||
$dest = new MessageTarget(0, '', $srcNation['nation'], $srcNation['name'], $srcNation['color']);
|
||||
|
||||
$now = new \DateTime();
|
||||
$unlimited = new \DateTime('9999-12-31');
|
||||
|
||||
if($isAgree){
|
||||
$aux['dest']['generalName'] = $me['name'];
|
||||
$aux['dest']['generalIcon'] = $me['icon'];
|
||||
|
||||
$db->update('ng_diplomacy', [
|
||||
'state'=>'activated',
|
||||
'dest_signer'=>$me['no'],
|
||||
'aux'=>Json::encode($aux)
|
||||
], 'no=%i', $letterNo);
|
||||
//TODO: 외교 서신에 대한 메시지를 양국에 발송해야함
|
||||
|
||||
$prevLetterNo = $letter['prev_no'];
|
||||
while($prevLetterNo !== null){
|
||||
$db->update('ng_diplomacy', [
|
||||
'state'=>'replaced',
|
||||
], 'no=%i', $prevLetterNo);
|
||||
$prevLetterNo = $db->queryFirstField('SELECT prev_no FROM ng_diplomacy WHERE state != \'cancelled\' AND no = %i', $prevLetterNo);
|
||||
}
|
||||
$msgText = "외교 서신 #{$letterNo}가 승인되었습니다.";
|
||||
}
|
||||
else{
|
||||
$aux['reason'] = [
|
||||
'who'=>$me['no'],
|
||||
'action'=>'disagree',
|
||||
'reason'=>$reason
|
||||
];
|
||||
$db->update('ng_diplomacy', [
|
||||
'state'=>'cancelled',
|
||||
'aux'=>Json::encode($aux)
|
||||
], 'no=%i', $letterNo);
|
||||
$msgText = "외교 서신 #{$letterNo}가 거부되었습니다.";
|
||||
if($reason){
|
||||
$msgText .= ' 이유 : '.$reason;
|
||||
}
|
||||
}
|
||||
|
||||
$msg = new Message(
|
||||
Message::MSGTYPE_DIPLOMACY,
|
||||
$src,
|
||||
$dest,
|
||||
$msgText,
|
||||
$now,
|
||||
$unlimited,
|
||||
['invalid' => true]
|
||||
);
|
||||
$msgID = $msg->send();
|
||||
|
||||
$msg = new Message(
|
||||
Message::MSGTYPE_NATIONAL,
|
||||
$src,
|
||||
$dest,
|
||||
$msgText,
|
||||
$now,
|
||||
$unlimited,
|
||||
['invalid' => true]
|
||||
);
|
||||
$msgID = $msg->send();
|
||||
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'reason'=>'success'
|
||||
]);
|
||||
@@ -0,0 +1,89 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
|
||||
$letterNo = Util::getReq('letterNo', 'int');
|
||||
|
||||
increaseRefresh("외교부", 1);
|
||||
|
||||
$me = $db->queryFirstRow('SELECT no, name, nation, level, permission, con, turntime, belong, penalty, picture, imgsvr FROM general WHERE owner=%i', $userID);
|
||||
|
||||
$con = checkLimit($me['con']);
|
||||
if ($con >= 2) {
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'접속 제한입니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
if($letterNo === null){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'올바르지 않은 입력입니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
$permission = checkSecretPermission($me);
|
||||
if ($permission < 4) {
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'권한이 부족합니다. 수뇌부가 아닙니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$reason = trim($reason);
|
||||
|
||||
$letter = $db->queryFirstRow('SELECT * FROM ng_diplomacy WHERE no=%i AND src_nation_id = %i AND state = \'proposed\'', $letterNo, $me['nation']);
|
||||
if(!$letter){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'서신이 없습니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$aux = Json::decode($letter['aux']);
|
||||
$me['icon'] = GetImageURL($me['imgsvr'], $me['picture']);
|
||||
|
||||
$srcNation = getNationStaticInfo($letter['src_nation_id']);
|
||||
$destNation = getNationStaticInfo($letter['dest_nation_id']);
|
||||
|
||||
$src = new MessageTarget($me['no'], $me['name'], $srcNation['nation'], $srcNation['name'], $srcNation['color'], $me['icon']);
|
||||
$dest = new MessageTarget(0, '', $destNation['nation'], $destNation['name'], $destNation['color']);
|
||||
|
||||
$now = new \DateTime();
|
||||
$unlimited = new \DateTime('9999-12-31');
|
||||
|
||||
$aux['reason'] = [
|
||||
'who'=>$me['no'],
|
||||
'action'=>'cancelled',
|
||||
'reason'=>$reason
|
||||
];
|
||||
$db->update('ng_diplomacy', [
|
||||
'state'=>'cancelled',
|
||||
'aux'=>Json::encode($aux)
|
||||
], 'no=%i', $letterNo);
|
||||
$msgText = "외교 서신 #{$letterNo}가 회수되었습니다.";
|
||||
|
||||
$msg = new Message(
|
||||
Message::MSGTYPE_DIPLOMACY,
|
||||
$src,
|
||||
$dest,
|
||||
$msgText,
|
||||
$now,
|
||||
$unlimited,
|
||||
['invalid' => true]
|
||||
);
|
||||
$msgID = $msg->send();
|
||||
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'reason'=>'success'
|
||||
]);
|
||||
@@ -0,0 +1,191 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
|
||||
$destNationNo = Util::getReq('destNation', 'int', 0);
|
||||
$prevNo = Util::getReq('prevNo', 'int', null);
|
||||
$textBrief = Util::getReq('brief');
|
||||
$textDetail = Util::getReq('detail');
|
||||
|
||||
increaseRefresh("외교부", 1);
|
||||
|
||||
if($prevNo < 1){
|
||||
$prevNo = null;
|
||||
}
|
||||
|
||||
$me = $db->queryFirstRow('SELECT no, name, nation, level, permission, con, turntime, belong, penalty, picture, imgsvr FROM general WHERE owner=%i', $userID);
|
||||
|
||||
$con = checkLimit($me['con']);
|
||||
if ($con >= 2) {
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'접속 제한입니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
if($destNationNo == $me['nation']){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'자국으로 보낼 수 없습니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
if($textBrief === null || $textDetail === null){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'올바르지 않은 입력입니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$textBrief = trim($textBrief);
|
||||
$textDetail = trim($textDetail);
|
||||
|
||||
if(!$textBrief){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'요약문이 비어있습니다'
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
$permission = checkSecretPermission($me);
|
||||
if ($permission < 4) {
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'권한이 부족합니다. 수뇌부가 아닙니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$srcNationNo = $me['nation'];
|
||||
|
||||
if($prevNo !== null){
|
||||
//state는 체크하지 않는걸로 하자. 파기한 것을 재 송신하는 경우도 있을 수 있음.
|
||||
$prevLetter = $db->queryFirstRow(
|
||||
'SELECT no, src_nation_id, dest_nation_id, state, aux FROM ng_diplomacy WHERE no = %i AND src_nation_id IN (%i, %i) AND dest_nation_id IN (%i, %i)',
|
||||
$prevNo,
|
||||
$srcNationNo, $destNationNo,
|
||||
$srcNationNo, $destNationNo
|
||||
);
|
||||
|
||||
if(!$prevLetter){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'이전 문서가 없습니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
//새로 나온 문서가 있는지 확인하자
|
||||
$newerLetter = $db->queryFirstField(
|
||||
'SELECT count(no) FROM ng_diplomacy WHERE prev_no = %i AND state != \'cancelled\'', $prevNo
|
||||
);
|
||||
if($newerLetter){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'해당 문서에 대한 새로운 문서가 이미 있습니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
if($prevLetter['src_nation_id'] != $srcNationNo){
|
||||
$destNationNo = $prevLetter['src_nation_id'];
|
||||
}
|
||||
else{
|
||||
$destNationNo = $prevLetter['dest_nation_id'];
|
||||
}
|
||||
|
||||
if($prevLetter['state'] == 'proposed'){
|
||||
$prevAux = Json::decode($prevLetter['aux']);
|
||||
$prevAux['reason'] = [
|
||||
'who'=>$me['no'],
|
||||
'action'=>'new_letter',
|
||||
'reason'=>'new_letter'
|
||||
];
|
||||
$db->update('ng_diplomacy', [
|
||||
'state'=>'replaced',
|
||||
'aux'=>Json::encode($prevAux)
|
||||
], 'no=%i', $prevNo);
|
||||
}
|
||||
}
|
||||
|
||||
$nations = $db->query('SELECT nation, name, color FROM nation WHERE nation IN (%i, %i)', $srcNationNo, $destNationNo);
|
||||
if(count($nations) != 2){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'올바르지 않은 국가입니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
if($nations[0]['nation'] == $me['nation']){
|
||||
//index 순서에 따라 또 모름.
|
||||
$srcNation = $nations[0];
|
||||
$destNation = $nations[1];
|
||||
}
|
||||
else{
|
||||
$srcNation = $nations[1];
|
||||
$destNation = $nations[0];
|
||||
}
|
||||
|
||||
$me['icon'] = GetImageURL($me['imgsvr'], $me['picture']);
|
||||
|
||||
$db->insert('ng_diplomacy', [
|
||||
'src_nation_id'=>$srcNation['nation'],
|
||||
'dest_nation_id'=>$destNation['nation'],
|
||||
'prev_no'=>$prevNo,
|
||||
'state'=>'proposed',
|
||||
'text_brief'=>$textBrief,
|
||||
'text_detail'=>$textDetail,
|
||||
'date'=>TimeUtil::DatetimeNow(),
|
||||
'src_signer'=>$me['no'],
|
||||
'dest_signer'=>null,
|
||||
'aux'=>Json::encode([
|
||||
'src'=>[
|
||||
'nationName'=>$srcNation['name'],
|
||||
'nationColor'=>$srcNation['color'],
|
||||
'generalName'=>$me['name'],
|
||||
'generalIcon'=>$me['icon']
|
||||
],
|
||||
'dest'=>[
|
||||
'nationName'=>$destNation['name'],
|
||||
'nationColor'=>$destNation['color']
|
||||
]
|
||||
]),
|
||||
]);
|
||||
$newLetterNo = $db->insertId();
|
||||
|
||||
$src = new MessageTarget($me['no'], $me['name'], $srcNation['nation'], $srcNation['name'], $srcNation['color'], $me['icon']);
|
||||
$dest = new MessageTarget(0, '', $destNation['nation'], $destNation['name'], $destNation['color']);
|
||||
|
||||
$now = new \DateTime();
|
||||
$unlimited = new \DateTime('9999-12-31');
|
||||
|
||||
$josaYi = JosaUtil::pick($newLetterNo, '이');
|
||||
if($prevNo){
|
||||
$msgText = "문서 #{$prevNo}의 새로운 외교 문서 #{$newLetterNo}{$josaYi} 준비되었습니다. 외교부에서 확인해주세요.";
|
||||
}
|
||||
else{
|
||||
$msgText = "새로운 외교 문서 #{$newLetterNo}{$josaYi} 준비되었습니다. 외교부에서 확인해주세요.";
|
||||
}
|
||||
|
||||
|
||||
$msg = new Message(
|
||||
Message::MSGTYPE_DIPLOMACY,
|
||||
$src,
|
||||
$dest,
|
||||
$msgText,
|
||||
$now,
|
||||
$unlimited,
|
||||
['invalid' => true]
|
||||
);
|
||||
$msgID = $msg->send();
|
||||
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'reason'=>'success',
|
||||
'row_id'=>$db->insertId()
|
||||
]);
|
||||
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
// $btn, $level, $genlist, $outlist
|
||||
|
||||
//TODO: 변경이 완료되면 항상 공지되어야함
|
||||
|
||||
$isAmbassador = Util::getReq('isAmbassador', bool);
|
||||
$genlist = Util::getReq('genlist', 'array_int');
|
||||
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin([])->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
|
||||
$me = $db->queryFirstRow('SELECT no, level, nation FROM general WHERE owner = %i', $userID);
|
||||
|
||||
if(!$me || $me['level'] != 12){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'군주가 아닙니다',
|
||||
'tmp'=>$me
|
||||
]);
|
||||
}
|
||||
|
||||
$nationID = $me['nation'];
|
||||
|
||||
if($isAmbassador){
|
||||
$targetType = 'ambassador';
|
||||
$targetLevel = 4;
|
||||
if(count($genlist) > 2){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'외교권자는 최대 둘까지만 설정 가능합니다.'
|
||||
]);
|
||||
}
|
||||
}
|
||||
else{
|
||||
$targetType = 'auditor';
|
||||
$targetLevel = 3;
|
||||
}
|
||||
|
||||
$db->update('general', [
|
||||
'permission'=>'normal'
|
||||
], 'nation = %i AND permission = %s', $nationID, $targetType);
|
||||
|
||||
if(!$genlist){
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'reason'=>'success'
|
||||
]);
|
||||
}
|
||||
$realCandidates = [];
|
||||
foreach($db->query('SELECT no, nation, level, penalty, permission FROM general WHERE nation = %i AND level != 12 AND permission = \'normal\' AND no IN %li', $nationID, $genlist) as $candidate){
|
||||
$maxPermission = checkSecretMaxPermission($candidate);
|
||||
if($maxPermission < $targetLevel){
|
||||
continue;
|
||||
}
|
||||
$realCandidates[] = $candidate['no'];
|
||||
}
|
||||
|
||||
if(!$realCandidates){
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'reason'=>'success'
|
||||
]);
|
||||
}
|
||||
|
||||
$db->update('general', [
|
||||
'permission'=>$targetType,
|
||||
], 'no IN %li', $realCandidates);
|
||||
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'reason'=>'success'
|
||||
]);
|
||||
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include('lib.php');
|
||||
include('func.php');
|
||||
|
||||
$session = Session::requireGameLogin([]);
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$msgID = Util::getReq('msgID', 'int');
|
||||
if($msgID === null){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'올바르지 않은 범위 입니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$lastMsgGet = Json::decode($session->lastMsgGet)??[];
|
||||
$now = new \DateTime();
|
||||
$delayTime = false;
|
||||
if(count($lastMsgGet) >= 10){
|
||||
try{
|
||||
if($lastMsgGet[0] !== 'string'){
|
||||
throw new \Exception('Why not string?');
|
||||
}
|
||||
$first = new \DateTime($lastMsgGet[0]);
|
||||
$diff = $first->diff($now);
|
||||
if($diff->days == 0 && $diff->h > 0 && $diff->i == 0 && $diff->s <= 5){
|
||||
$delayTime = true;
|
||||
}
|
||||
array_shift($lastMsgGet);
|
||||
}
|
||||
catch(\Exception $e){
|
||||
$lastMsgGet = [];
|
||||
}
|
||||
}
|
||||
$lastMsgGet[] = $now;
|
||||
$session->lastMsgGet = Json::encode($lastMsgGet);
|
||||
|
||||
if($delayTime){
|
||||
sleep(1);
|
||||
}
|
||||
$session->setReadOnly();
|
||||
|
||||
list($generalID, $nationID, $generalName) = DB::db()->queryFirstList(
|
||||
'select `no`, `nation`, `name` from `general` where owner = %i',
|
||||
$userID
|
||||
);
|
||||
|
||||
if($nationID === null){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'장수가 사망했습니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$reason = Message::deleteMsg($msgID, $generalID);
|
||||
if($reason === null){
|
||||
$result = [
|
||||
'result'=>true,
|
||||
'reason'=>'success'
|
||||
];
|
||||
}
|
||||
else{
|
||||
$result = [
|
||||
'result'=>false,
|
||||
'reason'=>$reason
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
Json::die($result);
|
||||
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include('lib.php');
|
||||
include('func.php');
|
||||
|
||||
$session = Session::requireGameLogin([]);
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$reqTo = Util::getReq('to', 'int');
|
||||
$reqType = Util::getReq('type', 'string');
|
||||
|
||||
if($reqTo === null){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'올바르지 않은 범위 입니다.'
|
||||
]);
|
||||
}
|
||||
if($reqType === null || !in_array($reqType, ['private', 'public', 'national', 'diplomacy'])){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'올바르지 않은 타입입니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$lastMsgGet = Json::decode($session->lastMsgGet)??[];
|
||||
$now = new \DateTime();
|
||||
$delayTime = false;
|
||||
if(count($lastMsgGet) >= 10){
|
||||
try{
|
||||
if($lastMsgGet[0] !== 'string'){
|
||||
throw new \Exception('Why not string?');
|
||||
}
|
||||
$first = new \DateTime($lastMsgGet[0]);
|
||||
$diff = $first->diff($now);
|
||||
if($diff->days == 0 && $diff->h > 0 && $diff->i == 0 && $diff->s <= 1){
|
||||
$delayTime = true;
|
||||
}
|
||||
array_shift($lastMsgGet);
|
||||
}
|
||||
catch(\Exception $e){
|
||||
$lastMsgGet = [];
|
||||
}
|
||||
}
|
||||
$lastMsgGet[] = $now;
|
||||
$session->lastMsgGet = Json::encode($lastMsgGet);
|
||||
|
||||
if($delayTime){
|
||||
sleep(1);
|
||||
}
|
||||
$session->setReadOnly();
|
||||
|
||||
$me = DB::db()->queryFirstRow('SELECT `no`,`name`,`nation`,`level`,`con`,`picture`,`imgsvr`,penalty,permission FROM general WHERE `owner`=%i', $userID);
|
||||
|
||||
if($me === null){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'장수가 사망했습니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
[$generalID, $nationID, $generalName] = [$me['no'], $me['nation'], $me['name']];
|
||||
$permission = checkSecretPermission($me, false);
|
||||
|
||||
$result = [
|
||||
'private'=>[],
|
||||
'public'=>[],
|
||||
'national'=>[],
|
||||
'diplomacy'=>[],
|
||||
'result'=>true,
|
||||
'keepRecent'=>true,
|
||||
'sequence'=>0,
|
||||
'nationID'=>$nationID,
|
||||
'generalName'=>$generalName,
|
||||
];
|
||||
$result['result'] = true;
|
||||
|
||||
$nextSequence = $reqTo;
|
||||
|
||||
if($reqType == 'private'){
|
||||
$result['private'] = array_map(function(Message $msg) use (&$nextSequence){
|
||||
if($msg->id > $nextSequence){
|
||||
$nextSequence = $msg->id;
|
||||
}
|
||||
return $msg->toArray();
|
||||
}, Message::getMessagesFromMailBoxOld($generalID, Message::MSGTYPE_PRIVATE, $reqTo, 20));
|
||||
}
|
||||
else if($reqType == 'public'){
|
||||
$result['public'] = array_map(function(Message $msg)use (&$nextSequence){
|
||||
if($msg->id > $nextSequence){
|
||||
$nextSequence = $msg->id;
|
||||
}
|
||||
return $msg->toArray();
|
||||
}, Message::getMessagesFromMailBoxOld(Message::MAILBOX_PUBLIC, Message::MSGTYPE_PUBLIC, $reqTo, 20));
|
||||
}
|
||||
else if($reqType == 'national'){
|
||||
$result['national'] = array_map(function(Message $msg)use (&$nextSequence){
|
||||
if($msg->id > $nextSequence){
|
||||
$nextSequence = $msg->id;
|
||||
}
|
||||
return $msg->toArray();
|
||||
}, Message::getMessagesFromMailBoxOld(Message::MAILBOX_NATIONAL + $nationID, Message::MSGTYPE_NATIONAL, $reqTo, 20));
|
||||
}
|
||||
else{
|
||||
$result['diplomacy'] = array_map(function(Message $msg)use (&$nextSequence, $permission){
|
||||
if($msg->id > $nextSequence){
|
||||
$nextSequence = $msg->id;
|
||||
}
|
||||
$values = $msg->toArray();
|
||||
if($msg->dest->nationID != 0 && $permission < 3){
|
||||
$values['text'] = '(외교 메시지입니다)';//TODO: 외교서신이라 읽을 수 없음을 보여줘야함
|
||||
$values['option']['invalid'] = true;
|
||||
}
|
||||
return $values;
|
||||
}, Message::getMessagesFromMailBoxOld(Message::MAILBOX_NATIONAL + $nationID, Message::MSGTYPE_DIPLOMACY, $reqTo, 20));
|
||||
}
|
||||
|
||||
Json::die($result);
|
||||
+75
-17
@@ -4,57 +4,115 @@ namespace sammo;
|
||||
include('lib.php');
|
||||
include('func.php');
|
||||
|
||||
$session = Session::requireGameLogin([])->setReadOnly();
|
||||
$session = Session::requireGameLogin([]);
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$reqSequence = Util::getReq('sequence', 'int', 0);
|
||||
$reqSequence = Util::getReq('sequence', 'int', -1);
|
||||
|
||||
$lastMsgGet = Json::decode($session->lastMsgGet)??[];
|
||||
$now = new \DateTime();
|
||||
$delayTime = false;
|
||||
if(count($lastMsgGet) >= 10){
|
||||
try{
|
||||
if($lastMsgGet[0] !== 'string'){
|
||||
throw new \Exception('Why not string?');
|
||||
}
|
||||
$first = new \DateTime($lastMsgGet[0]);
|
||||
$diff = $first->diff($now);
|
||||
if($diff->days == 0 && $diff->h > 0 && $diff->i == 0 && $diff->s <= 1){
|
||||
$delayTime = true;
|
||||
}
|
||||
array_shift($lastMsgGet);
|
||||
}
|
||||
catch(\Exception $e){
|
||||
$lastMsgGet = [];
|
||||
}
|
||||
}
|
||||
$lastMsgGet[] = $now;
|
||||
$session->lastMsgGet = Json::encode($lastMsgGet);
|
||||
|
||||
if($delayTime){
|
||||
sleep(0.2);
|
||||
}
|
||||
$session->setReadOnly();
|
||||
|
||||
|
||||
list($generalID, $nationID, $generalName) = DB::db()->queryFirstList(
|
||||
'select `no`, `nation`, `name` from `general` where owner = %i',
|
||||
$userID
|
||||
);
|
||||
$db = DB::db();
|
||||
$me = $db->queryFirstRow('SELECT `no`,`name`,`nation`,`level`,`con`,`picture`,`imgsvr`,penalty,permission FROM general WHERE `owner`=%i', $userID);
|
||||
|
||||
|
||||
if($nationID === null){
|
||||
if($me === null){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'장수가 사망했습니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
[$generalID, $nationID, $generalName] = [$me['no'], $me['nation'], $me['name']];
|
||||
$permission = checkSecretPermission($me, false);
|
||||
|
||||
$result = [];
|
||||
$result['result'] = true;
|
||||
|
||||
$result['keepRecent'] = false;
|
||||
$nextSequence = $reqSequence;
|
||||
$minSequence = $reqSequence;
|
||||
$lastType = null;
|
||||
|
||||
$result['private'] = array_map(function(Message $msg) use (&$nextSequence){
|
||||
$result['private'] = array_map(function(Message $msg) use (&$nextSequence, &$minSequence, &$lastType){
|
||||
if($msg->id > $nextSequence){
|
||||
$nextSequence = $msg->id;
|
||||
}
|
||||
if($msg->id <= $minSequence){
|
||||
$minSequence = $msg->id;
|
||||
$lastType = 'private';
|
||||
}
|
||||
return $msg->toArray();
|
||||
}, Message::getMessagesFromMailBox($generalID, Message::MSGTYPE_PRIVATE, 10, $reqSequence));
|
||||
}, Message::getMessagesFromMailBox($generalID, Message::MSGTYPE_PRIVATE, 20, $reqSequence));
|
||||
|
||||
$result['public'] = array_map(function(Message $msg)use (&$nextSequence){
|
||||
$result['public'] = array_map(function(Message $msg)use (&$nextSequence, &$minSequence, &$lastType){
|
||||
if($msg->id > $nextSequence){
|
||||
$nextSequence = $msg->id;
|
||||
}
|
||||
if($msg->id <= $minSequence){
|
||||
$minSequence = $msg->id;
|
||||
$lastType = 'public';
|
||||
}
|
||||
return $msg->toArray();
|
||||
}, Message::getMessagesFromMailBox(Message::MAILBOX_PUBLIC, Message::MSGTYPE_PUBLIC, 10, $reqSequence));
|
||||
}, Message::getMessagesFromMailBox(Message::MAILBOX_PUBLIC, Message::MSGTYPE_PUBLIC, 20, $reqSequence));
|
||||
|
||||
$result['national'] = array_map(function(Message $msg)use (&$nextSequence){
|
||||
$result['national'] = array_map(function(Message $msg)use (&$nextSequence, &$minSequence, &$lastType){
|
||||
if($msg->id > $nextSequence){
|
||||
$nextSequence = $msg->id;
|
||||
}
|
||||
if($msg->id <= $minSequence){
|
||||
$minSequence = $msg->id;
|
||||
$lastType = 'national';
|
||||
}
|
||||
return $msg->toArray();
|
||||
}, Message::getMessagesFromMailBox(Message::MAILBOX_NATIONAL + $nationID, Message::MSGTYPE_NATIONAL, 20, $reqSequence));
|
||||
|
||||
$result['diplomacy']= array_map(function(Message $msg)use (&$nextSequence){
|
||||
$result['diplomacy']= array_map(function(Message $msg)use (&$nextSequence, &$minSequence, &$lastType, $permission){
|
||||
if($msg->id > $nextSequence){
|
||||
$nextSequence = $msg->id;
|
||||
}
|
||||
return $msg->toArray();
|
||||
}, Message::getMessagesFromMailBox(Message::MAILBOX_NATIONAL + $nationID, Message::MSGTYPE_DIPLOMACY, 10, 0));
|
||||
if($msg->id <= $minSequence){
|
||||
$minSequence = $msg->id;
|
||||
$lastType = 'diplomacy';
|
||||
}
|
||||
$values = $msg->toArray();
|
||||
if($msg->dest->nationID != 0 && $permission < 3){
|
||||
$values['text'] = '(외교 메시지입니다)';//TODO: 외교서신이라 읽을 수 없음을 보여줘야함
|
||||
$values['option']['invalid'] = true;
|
||||
}
|
||||
return $values;
|
||||
}, Message::getMessagesFromMailBox(Message::MAILBOX_NATIONAL + $nationID, Message::MSGTYPE_DIPLOMACY, 20, $reqSequence));
|
||||
|
||||
if($lastType !== null){
|
||||
array_pop($result[$lastType]);
|
||||
$result['keepRecent'] = true;
|
||||
}
|
||||
else if($reqSequence <= 0){
|
||||
$result['keepRecent'] = true;
|
||||
}
|
||||
|
||||
$result['sequence'] = $nextSequence;
|
||||
$result['nationID'] = $nationID;
|
||||
|
||||
+22
-6
@@ -49,7 +49,7 @@ $now = new \DateTime();
|
||||
$unlimited = new \DateTime('9999-12-31');
|
||||
|
||||
$db = DB::db();
|
||||
$me = $db->queryFirstRow('SELECT `no`,`name`,`nation`,`level`,`con`,`picture`,`imgsvr` FROM general WHERE `owner`=%i', $userID);
|
||||
$me = $db->queryFirstRow('SELECT `no`,`name`,`nation`,`level`,`con`,`picture`,`imgsvr`,penalty,permission,belong FROM general WHERE `owner`=%i', $userID);
|
||||
|
||||
if(!$me){
|
||||
$session->logoutGame();
|
||||
@@ -70,7 +70,7 @@ if($con >= 2) {
|
||||
}
|
||||
|
||||
$me['icon'] = GetImageURL($me['imgsvr'], $me['picture']);
|
||||
|
||||
$permission = checkSecretPermission($me);
|
||||
$srcNation = getNationStaticInfo($me['nation']);
|
||||
|
||||
$src = new MessageTarget($me['no'], $me['name'], $srcNation['nation'], $srcNation['name'], $srcNation['color'], $me['icon']);
|
||||
@@ -99,19 +99,26 @@ if($mailbox == Message::MAILBOX_PUBLIC) {
|
||||
// 국가 메세지
|
||||
if($mailbox >= Message::MAILBOX_NATIONAL) {
|
||||
|
||||
if($me['level'] < 5){
|
||||
if($permission < 4){
|
||||
$destNationID = $me['nation'];
|
||||
}
|
||||
else{
|
||||
$destNationID = $mailbox - Message::MAILBOX_NATIONAL;
|
||||
}
|
||||
|
||||
if($destNationID == $me['nation']){
|
||||
$msgType = Message::MSGTYPE_NATIONAL;
|
||||
}
|
||||
else{
|
||||
$msgType = Message::MSGTYPE_DIPLOMACY;
|
||||
}
|
||||
|
||||
$destNation = getNationStaticInfo($destNationID);
|
||||
|
||||
$dest = new MessageTarget(0, '', $destNation['nation'], $destNation['name'], $destNation['color']);
|
||||
|
||||
$msg = new Message(
|
||||
Message::MSGTYPE_NATIONAL,
|
||||
$msgType,
|
||||
$src,
|
||||
$dest,
|
||||
$text,
|
||||
@@ -143,8 +150,8 @@ if($mailbox > 0) {
|
||||
|
||||
$session->lastMsg = $now->format('Y-m-d H:i:s');
|
||||
|
||||
$destUser = $db->queryFirstRow('SELECT `no`,`name`,`nation`,`con`,`picture`,`imgsvr` FROM general WHERE `no`=%i',$mailbox);
|
||||
|
||||
$destUser = $db->queryFirstRow('SELECT `no`,`name`,`nation`,`level`,`con`,`picture`,`imgsvr`,permission,penalty FROM general WHERE `no`=%i',$mailbox);
|
||||
|
||||
if(!$destUser){
|
||||
Json::die([
|
||||
'result' => false,
|
||||
@@ -153,6 +160,15 @@ if($mailbox > 0) {
|
||||
]);
|
||||
}
|
||||
|
||||
$destPermission = checkSecretPermission($destUser, false);
|
||||
if($permission == 4 && $destPermission == 4 && $destUser['nation'] != $me['nation']){
|
||||
Json::die([
|
||||
'result' => false,
|
||||
'reason' => '외교권자끼리는 메시지를 보낼 수 없습니다.',
|
||||
'msgID' => null
|
||||
]);
|
||||
}
|
||||
|
||||
$destNation = getNationStaticInfo($destUser['nation']);
|
||||
|
||||
$dest = new MessageTarget(
|
||||
|
||||
@@ -77,6 +77,7 @@ $db->update('general', [
|
||||
'npc'=>1,
|
||||
'killturn'=>6,
|
||||
'mode'=>2,
|
||||
'permission'=>'normal',
|
||||
'owner'=>$userID,
|
||||
], 'owner <= 0 AND npc = 2 AND no = %i', $pick);
|
||||
|
||||
|
||||
+181
@@ -0,0 +1,181 @@
|
||||
|
||||
|
||||
function submitArticle(){
|
||||
var $article = $('#newArticle');
|
||||
var $title = $article.find('.titleInput');
|
||||
var $text = $article.find('.contentInput');
|
||||
var title = $.trim($title.val());
|
||||
var text = $.trim($text.val());
|
||||
|
||||
|
||||
if(!text && !title){
|
||||
return false;
|
||||
}
|
||||
|
||||
$title.val('');
|
||||
$text.val('');
|
||||
|
||||
$.post({
|
||||
url:'j_board_article_add.php',
|
||||
dataType:'json',
|
||||
data:{
|
||||
isSecret:isSecretBoard,
|
||||
title:title,
|
||||
text:text
|
||||
}
|
||||
}).then(function(data){
|
||||
if(!data){
|
||||
$title.val(title);
|
||||
$text.val(text);
|
||||
alert()
|
||||
return quickReject('글을 올리는데 실패했습니다.');
|
||||
}
|
||||
if(!data.result){
|
||||
$title.val(title);
|
||||
$text.val(text);
|
||||
return quickReject('글을 올리는데 실패했습니다. : '+data.reason);
|
||||
}
|
||||
|
||||
return loadArticles().done(drawArticles);
|
||||
|
||||
}, errUnknown)
|
||||
.fail(function(reason){
|
||||
alert(reason);
|
||||
});
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function submitComment(){
|
||||
var $this = $(this);
|
||||
|
||||
var $article = $this.closest('.articleObj').eq(0);
|
||||
var articleNo = $article.data('no');
|
||||
var $text = $article.find('input.commentText');
|
||||
var text = $.trim($text.val());
|
||||
|
||||
if(!text){
|
||||
return false;
|
||||
}
|
||||
|
||||
$text.val('');
|
||||
|
||||
$.post({
|
||||
url:'j_board_comment_add.php',
|
||||
dataType:'json',
|
||||
data:{
|
||||
articleNo:articleNo,
|
||||
text:text
|
||||
}
|
||||
}).then(function(data){
|
||||
if(!data){
|
||||
$text.val(text);
|
||||
alert()
|
||||
return quickReject('댓글을 다는데 실패했습니다.');
|
||||
}
|
||||
if(!data.result){
|
||||
$text.val(text);
|
||||
return quickReject('댓글을 다는데 실패했습니다. : '+data.reason);
|
||||
}
|
||||
|
||||
return loadArticles().done(drawArticles);
|
||||
|
||||
}, errUnknown)
|
||||
.fail(function(reason){
|
||||
alert(reason);
|
||||
});
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function drawArticle(idx, articleObj){
|
||||
var $articleFrame = $('#articleTemplate > .articleFrame');
|
||||
var $commentFrame = $($('#commentTemplate').prop('content'));
|
||||
|
||||
var $article = $articleFrame.clone();
|
||||
$article.addClass('articleObj')
|
||||
.data('no', articleObj.no)
|
||||
.data('author', articleObj.general_no);
|
||||
|
||||
|
||||
$article.find('.articleNo').text(articleObj.no);
|
||||
$article.find('.authorName').text(articleObj.author);
|
||||
$article.find('.articleTitle').text(articleObj.title);
|
||||
$article.find('.date').text(articleObj.date);
|
||||
if(articleObj.author_icon){
|
||||
$article.find('.authorIcon').attr('src', articleObj.author_icon);
|
||||
}
|
||||
//$article.find('.text').text(articleObj.text);
|
||||
$article.find('.text').html(nl2br(escapeHtml(articleObj.text)));
|
||||
//TODO: 바꿀 것
|
||||
|
||||
var $articleComment = $article.find('.commentList');
|
||||
|
||||
$.each(articleObj.comment, function(_, commentObj){
|
||||
var $comment = $commentFrame.clone();
|
||||
$comment.find('.author').text(commentObj.author);
|
||||
//$comment.find('.text').text(commentObj.text);
|
||||
$comment.find('.text').html(nl2br(escapeHtml(commentObj.text)));
|
||||
$comment.find('.date').text(commentObj.date);
|
||||
$articleComment.append($comment);
|
||||
});
|
||||
|
||||
$article.find('.submitComment').click(submitComment);
|
||||
$article.find('.commentText').on('keypress', function (e) {
|
||||
if(e.which === 13){
|
||||
$article.find('.submitComment').click();
|
||||
}
|
||||
});
|
||||
$article.find('.inputCommentHeader').click(function(){
|
||||
$article.find('.commentText').focus();
|
||||
})
|
||||
|
||||
var $board = $('#board');
|
||||
|
||||
$board.prepend($article);
|
||||
}
|
||||
|
||||
function drawArticles(articlesObj){
|
||||
var deferred = $.Deferred();
|
||||
if(!articlesObj){
|
||||
return quickReject('받아오는데 실패했습니다.');
|
||||
}
|
||||
if(!articlesObj.result){
|
||||
return quickReject('에러가 발생했습니다. : '+articlesObj.reason);
|
||||
}
|
||||
|
||||
$('.articleObj').detach();//첫 버전이니까 일괄 삭제 일괄 로드
|
||||
$.each(articlesObj.articles, drawArticle);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
function loadArticles(){
|
||||
return $.post({
|
||||
url:'j_board_get_articles.php',
|
||||
dataType:'json',
|
||||
data:{
|
||||
isSecret:isSecretBoard, //첫 버전이니까 전체 다 불러오자
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function resizeTextarea($obj){
|
||||
$obj.height(1).height($obj.prop('scrollHeight')+12 );
|
||||
}
|
||||
|
||||
$(function(){
|
||||
$('textarea.autosize').on('keydown keyup', function(){
|
||||
resizeTextarea($(this));
|
||||
})
|
||||
|
||||
$('#submitArticle').click(submitArticle);
|
||||
|
||||
loadArticles()
|
||||
.then(drawArticles, errUnknown)
|
||||
.fail(function(reason){
|
||||
alert(reason);
|
||||
});
|
||||
|
||||
});
|
||||
@@ -0,0 +1,81 @@
|
||||
function changePermission(isAmbassador, rawGeneralList){
|
||||
console.log(isAmbassador);
|
||||
console.log(rawGeneralList);
|
||||
|
||||
var generalList = [];
|
||||
$.each(rawGeneralList, function(idx, value){
|
||||
generalList.push(parseInt(value.id));
|
||||
})
|
||||
|
||||
$.post({
|
||||
url:'j_general_set_permission.php',
|
||||
dataType:'json',
|
||||
data:{
|
||||
isAmbassador:isAmbassador,
|
||||
genlist:generalList
|
||||
},
|
||||
}).then(function(data){
|
||||
if(!data){
|
||||
alert('변경하지 못했습니다.');
|
||||
return false;
|
||||
}
|
||||
if(!data.result){
|
||||
alert('변경하지 못했습니다. : '+data.reason);
|
||||
return false;
|
||||
}
|
||||
alert('변경했습니다.');
|
||||
location.reload();
|
||||
}, errUnknown);
|
||||
}
|
||||
|
||||
$(function(){
|
||||
$('#selectAmbassador').select2({
|
||||
theme: 'bootstrap4',
|
||||
placeholder: "",
|
||||
allowClear: true,
|
||||
language: "ko",
|
||||
width:300,
|
||||
maximumSelectionLength: 2,
|
||||
containerCss: {
|
||||
display: "inline-block !important;",
|
||||
color: 'white !important'
|
||||
},
|
||||
data:candidateAmbassadors,
|
||||
//containerCssClass: 'simple-select2-align-center bg-secondary text-secondary',
|
||||
dropdownCssClass: 'simple-select2-align-center bg-secondary text-secondary',
|
||||
});
|
||||
|
||||
$('#selectAuditor').select2({
|
||||
theme: 'bootstrap4',
|
||||
placeholder: "",
|
||||
allowClear: true,
|
||||
language: "ko",
|
||||
width:300,
|
||||
maximumSelectionLength: 2,
|
||||
containerCss: {
|
||||
display: "inline-block !important;",
|
||||
color: 'white !important'
|
||||
},
|
||||
data:candidateAuditors,
|
||||
//containerCssClass: 'simple-select2-align-center bg-secondary text-secondary',
|
||||
dropdownCssClass: 'simple-select2-align-center bg-secondary text-secondary',
|
||||
});
|
||||
|
||||
$('#changeAmbassador').click(function(){
|
||||
if(!confirm('외교권자를 변경할까요?')){
|
||||
return false;
|
||||
}
|
||||
|
||||
changePermission(true, $('#selectAmbassador').select2('data'));
|
||||
return false;
|
||||
});
|
||||
|
||||
$('#changeAuditor').click(function(){
|
||||
if(!confirm('조언자를 변경할까요?')){
|
||||
return false;
|
||||
}
|
||||
|
||||
changePermission(false, $('#selectAuditor').select2('data'));
|
||||
return false;
|
||||
})
|
||||
})
|
||||
@@ -70,6 +70,27 @@ String.prototype.format = function() {
|
||||
};
|
||||
|
||||
|
||||
function hexToRgb(hex) {
|
||||
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
||||
return result ? {
|
||||
r: parseInt(result[1], 16),
|
||||
g: parseInt(result[2], 16),
|
||||
b: parseInt(result[3], 16)
|
||||
} : null;
|
||||
}
|
||||
|
||||
|
||||
function isBrightColor(color){
|
||||
color = hexToRgb(color);
|
||||
if ((color.r*0.299 + color.g*0.587 + color.b*0.114) > 140){
|
||||
return true;
|
||||
}
|
||||
else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 게임내에서 지원하는 color type만 선택할 수 있도록 해주는 함수
|
||||
* @param {string} color #AAAAAA 또는 AAAAAA 형태로 작성된 RGB hex color string
|
||||
@@ -102,6 +123,10 @@ function numberWithCommas(x) {
|
||||
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
||||
}
|
||||
|
||||
function linkifyStrWithOpt(text){
|
||||
return linkifyStr(text, {});
|
||||
}
|
||||
|
||||
/**
|
||||
* 단순한 Template 함수. <%변수명%>으로 template 가능
|
||||
* @see https://github.com/krasimir/absurd/blob/master/lib/processors/html/helpers/TemplateEngine.js
|
||||
@@ -122,6 +147,7 @@ var TemplateEngine = function (html, options) {
|
||||
return add;
|
||||
}
|
||||
options.e = escapeHtml;
|
||||
options.linkifyStr = linkifyStrWithOpt;
|
||||
while (match = re.exec(html)) {
|
||||
add(html.slice(cursor, match.index))(match[1], true);
|
||||
cursor = match.index + match[0].length;
|
||||
@@ -216,3 +242,26 @@ jQuery(function($){
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
function errUnknown(){
|
||||
alert('작업을 실패했습니다.');
|
||||
}
|
||||
|
||||
function quickReject(errMsg){
|
||||
if(errMsg === undefined){
|
||||
errMsg = '작업을 실패했습니다.';
|
||||
}
|
||||
var deferred = $.Deferred();
|
||||
deferred.reject(errMsg);
|
||||
return deferred.promise();
|
||||
}
|
||||
|
||||
function nl2br(text){
|
||||
return text.replace(/\n/g,"<br>");
|
||||
}
|
||||
/*
|
||||
function br2nl (text) {
|
||||
return text.replace(/<\s*\/?br\s*[\/]?>/gi, '\n');
|
||||
}
|
||||
*/
|
||||
@@ -0,0 +1,425 @@
|
||||
|
||||
|
||||
function submitLetter(){
|
||||
var $brief = $('#inputBrief');
|
||||
var $detail = $('#inputDetail');
|
||||
var $prevNo = $('#inputPrevNo');
|
||||
var $destNation = $('#inputDestNation');
|
||||
var brief = $.trim($brief.val());
|
||||
var detail = $.trim($detail.val());
|
||||
var prevNo = parseInt($prevNo.val());
|
||||
var destNation = parseInt($destNation.val());
|
||||
|
||||
if(prevNo !== null && prevNo < 1){
|
||||
prevNo = null;
|
||||
}
|
||||
|
||||
console.log(brief);
|
||||
if(!brief){
|
||||
return false;
|
||||
}
|
||||
|
||||
$brief.val('');
|
||||
$detail.val('');
|
||||
|
||||
$.post({
|
||||
url:'j_diplomacy_send_letter.php',
|
||||
dataType:'json',
|
||||
data:{
|
||||
brief:brief,
|
||||
detail:detail,
|
||||
destNation:destNation,
|
||||
prevNo:prevNo
|
||||
}
|
||||
}).then(function(data){
|
||||
if(!data){
|
||||
$brief.val(brief);
|
||||
$detail.val(detail);
|
||||
return quickReject('외교 서신을 보내는데 실패했습니다.');
|
||||
}
|
||||
if(!data.result){
|
||||
$brief.val(brief);
|
||||
$detail.val(detail);
|
||||
return quickReject('외교 서신을 보내는데 실패했습니다. : '+data.reason);
|
||||
}
|
||||
|
||||
alert('전송했습니다.');
|
||||
location.reload();
|
||||
|
||||
}, errUnknown)
|
||||
.fail(function(reason){
|
||||
alert(reason);
|
||||
});
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function repondLetter(letterNo, isAgree, reason){
|
||||
$.post({
|
||||
url:'j_diplomacy_respond_letter.php',
|
||||
dataType:'json',
|
||||
data:{
|
||||
letterNo:letterNo,
|
||||
isAgree:isAgree,
|
||||
reason:reason,
|
||||
}
|
||||
}).then(function(data){
|
||||
if(!data){
|
||||
alert()
|
||||
return quickReject('응답을 실패했습니다.');
|
||||
}
|
||||
if(!data.result){
|
||||
return quickReject('응답을 실패했습니다. : '+data.reason);
|
||||
}
|
||||
|
||||
if(isAgree){
|
||||
alert('승인했습니다.');
|
||||
}
|
||||
else{
|
||||
alert('거부했습니다.');
|
||||
}
|
||||
|
||||
location.reload();
|
||||
return false;
|
||||
|
||||
}, errUnknown)
|
||||
.fail(function(reason){
|
||||
alert(reason);
|
||||
});
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function rollbackLetter(letterNo){
|
||||
$.post({
|
||||
url:'j_diplomacy_rollback_letter.php',
|
||||
dataType:'json',
|
||||
data:{
|
||||
letterNo:letterNo,
|
||||
}
|
||||
}).then(function(data){
|
||||
if(!data){
|
||||
alert()
|
||||
return quickReject('회수를 실패했습니다.');
|
||||
}
|
||||
if(!data.result){
|
||||
return quickReject('회수를 실패했습니다. : '+data.reason);
|
||||
}
|
||||
|
||||
alert('회수 했습니다.');
|
||||
|
||||
location.reload();
|
||||
return false;
|
||||
|
||||
}, errUnknown)
|
||||
.fail(function(reason){
|
||||
alert(reason);
|
||||
});
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function destroyLetter(letterNo){
|
||||
$.post({
|
||||
url:'j_diplomacy_destroy_letter.php',
|
||||
dataType:'json',
|
||||
data:{
|
||||
letterNo:letterNo,
|
||||
}
|
||||
}).then(function(data){
|
||||
if(!data){
|
||||
alert()
|
||||
return quickReject('파기를 실패했습니다.');
|
||||
}
|
||||
if(!data.result){
|
||||
return quickReject('파기를 실패했습니다. : '+data.reason);
|
||||
}
|
||||
|
||||
if(data.state == 'activated'){
|
||||
alert('파기를 요청 했습니다.');
|
||||
}
|
||||
else{
|
||||
alert('파기 되었습니다.');
|
||||
}
|
||||
|
||||
location.reload();
|
||||
return false;
|
||||
|
||||
}, errUnknown)
|
||||
.fail(function(reason){
|
||||
alert(reason);
|
||||
});
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function drawLetter(idx, letterObj){
|
||||
|
||||
if(letterObj.state == 'cancelled'){
|
||||
//TODO: 취소되거나, 대체된 문서도 보여줄 방법을 찾아볼 것
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(letterObj);
|
||||
|
||||
var $letterFrame = $('#letterTemplate > .letterFrame');
|
||||
|
||||
var srcColorFormat = {
|
||||
'background-color':letterObj.src.nationColor,
|
||||
'color':isBrightColor(letterObj.src.nationColor)?'#000000':'#ffffff'
|
||||
};
|
||||
|
||||
var destColorFormat = {
|
||||
'background-color':letterObj.dest.nationColor,
|
||||
'color':isBrightColor(letterObj.dest.nationColor)?'#000000':'#ffffff'
|
||||
};
|
||||
|
||||
var targetNation = letterObj.src.nationID==myNationID?letterObj.dest:letterObj.src;
|
||||
var targetColor = letterObj.src.nationID==myNationID?destColorFormat:srcColorFormat;
|
||||
|
||||
var $letter = $letterFrame.clone();
|
||||
|
||||
if(letterObj.state == 'replaced'){
|
||||
$letter.hide();
|
||||
}
|
||||
|
||||
$letter.addClass('letterObj')
|
||||
.data('no', letterObj.no)
|
||||
.data('brief', letterObj.brief)
|
||||
.data('detail', letterObj.detail)
|
||||
.attr('id', 'letter_'+letterObj.no);
|
||||
|
||||
$letter.find('.letterHeader').css(targetColor);
|
||||
$letter.find('.letterNationName').text(targetNation.nationName);
|
||||
$letter.find('.letterDate').text(letterObj.date);
|
||||
$letter.find('.letterNo').text('#'+letterObj.no);
|
||||
|
||||
var stateText = {
|
||||
'proposed':'제안됨',
|
||||
'activated':'승인됨',
|
||||
'cancelled':'거부됨',
|
||||
'replaced':'대체됨',
|
||||
};
|
||||
|
||||
var stateOptionText = {
|
||||
'try_destroy_src':'송신측의 파기 요청',
|
||||
'try_destroy_dest':'수신측의 파기 요청',
|
||||
}
|
||||
$letter.find('.letterStatus').text(stateText[letterObj.state]);
|
||||
|
||||
if(letterObj.state_opt !== null){
|
||||
$letter.find('.letterStatusOpt').text('('+stateOptionText[letterObj.state_opt]+')');
|
||||
}
|
||||
if(letterObj.prev_no !== null){
|
||||
var $showPrev = $('<a href="#">#{0}</a>'.format(letterObj.prev_no));
|
||||
$showPrev.click(function(){
|
||||
$('#letter_'+letterObj.prev_no).toggle();
|
||||
})
|
||||
$letter.find('.letterPrevNo').html($showPrev);
|
||||
}
|
||||
else{
|
||||
$letter.find('.letterPrevNo').text('신규');
|
||||
}
|
||||
$letter.find('.letterBrief').html(nl2br(escapeHtml(letterObj.brief)));
|
||||
$letter.find('.letterDetail').html(nl2br(escapeHtml(letterObj.detail)));
|
||||
|
||||
$letter.find('.letterSrc .signerImg img.generalIcon').attr('src', letterObj.src.generalIcon);
|
||||
$letter.find('.letterSrc .signerNation').text(letterObj.src.nationName).css(srcColorFormat);
|
||||
$letter.find('.letterSrc .signerName').text(letterObj.src.generalName).css(srcColorFormat);
|
||||
|
||||
if(letterObj.dest.generalName){
|
||||
$letter.find('.letterDest .signerImg img.generalIcon').attr('src', letterObj.dest.generalIcon);
|
||||
$letter.find('.letterDest .signerNation').text(letterObj.dest.nationName).css(destColorFormat);
|
||||
$letter.find('.letterDest .signerName').text(letterObj.dest.generalName).css(destColorFormat);
|
||||
}
|
||||
|
||||
if(letterObj.state == 'proposed' && letterObj.src.nationID != myNationID){
|
||||
$letter.find('.btnAgree').show().click(function(){
|
||||
if(!confirm('승인하시겠습니까?')){
|
||||
return false;
|
||||
}
|
||||
return repondLetter(letterObj.no, true, null);
|
||||
});
|
||||
$letter.find('.btnDisagree').show().click(function(){
|
||||
var reason = prompt('거부하시겠습니까? (이유 [최대 50자])');
|
||||
if(reason === null){
|
||||
return false;
|
||||
}
|
||||
reason = substr.substr(0, 50);
|
||||
return repondLetter(letterObj.no, false, reason);
|
||||
});
|
||||
}
|
||||
|
||||
if(letterObj.state == 'proposed' && letterObj.src.nationID == myNationID){
|
||||
$letter.find('.btnRollback').show().click(function(){
|
||||
if(!confirm('회수하시겠습니까?')){
|
||||
return false;
|
||||
}
|
||||
return rollbackLetter(letterObj.no);
|
||||
});
|
||||
}
|
||||
|
||||
if(letterObj.state == 'activated'){
|
||||
var $btnDestroy = $letter.find('.btnDestroy');
|
||||
if((letterObj.src.nationID==myNationID && letterObj.state_opt == 'try_destroy_src') ||
|
||||
(letterObj.dest.nationID==myNationID && letterObj.state_opt == 'try_destroy_dest')){
|
||||
$btnDestroy.show().prop('disabled', true);
|
||||
}
|
||||
else{
|
||||
$btnDestroy.show().click(function(){
|
||||
if(!confirm('본 문서를 파기하겠습니까? (상호 동의 필요)')){
|
||||
return false;
|
||||
}
|
||||
return destroyLetter(letterObj.no);
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$letter.find('.btnRenew').click(function(){
|
||||
var $inputPrevNo = $('#inputPrevNo');
|
||||
$inputPrevNo.val(letterObj.no);
|
||||
$inputPrevNo.trigger('change');
|
||||
})
|
||||
|
||||
|
||||
$('#letters').prepend($letter);
|
||||
}
|
||||
|
||||
function initNewLetterForm(lettersObj){
|
||||
console.log(lettersObj);
|
||||
var nationList = [];
|
||||
$.each(lettersObj.nations, function(idx, nation){
|
||||
nation.id = nation.nation;
|
||||
nation.text = nation.name;
|
||||
nationList.push(nation);
|
||||
})
|
||||
|
||||
var $destNation = $('#inputDestNation').select2({
|
||||
theme: 'bootstrap4',
|
||||
placeholder: "",
|
||||
language: "ko",
|
||||
width:300,
|
||||
containerCss: {
|
||||
display: "inline-block !important;",
|
||||
color: 'white !important'
|
||||
},
|
||||
data:nationList,
|
||||
templateResult: colorNation,
|
||||
containerCssClass: 'simple-select2-align-center bg-secondary text-secondary',
|
||||
dropdownCssClass: 'simple-select2-align-center bg-secondary text-secondary',
|
||||
});
|
||||
|
||||
|
||||
var prevNoList = [{
|
||||
id:0,
|
||||
text:'-새 문서-',
|
||||
nation:null,
|
||||
}];
|
||||
|
||||
$.each(lettersObj.letters, function(idx, letterObj){
|
||||
if(letterObj.state == 'replaced' || letterObj.state == 'cancelled'){
|
||||
return true;
|
||||
}
|
||||
var targetNation = letterObj.src.nationID==myNationID?letterObj.dest:letterObj.src;
|
||||
prevNoList.push({
|
||||
id:letterObj.no,
|
||||
text:'#{0} <{1}>'.format(letterObj.no, targetNation.nationName),
|
||||
nation:targetNation.nationID
|
||||
});
|
||||
});
|
||||
|
||||
var $inputPrevNo = $('#inputPrevNo').select2({
|
||||
theme: 'bootstrap4',
|
||||
placeholder: "",
|
||||
language: "ko",
|
||||
width:300,
|
||||
containerCss: {
|
||||
display: "inline-block !important;",
|
||||
color: 'white !important'
|
||||
},
|
||||
data:prevNoList,
|
||||
containerCssClass: 'simple-select2-align-center bg-secondary text-secondary',
|
||||
dropdownCssClass: 'simple-select2-align-center bg-secondary text-secondary',
|
||||
});
|
||||
$inputPrevNo.on('change', function(e){
|
||||
var data = $inputPrevNo.select2('data')[0];
|
||||
console.log(data);
|
||||
if(data.nation == null){
|
||||
$destNation.prop("disabled", false);
|
||||
}
|
||||
else{
|
||||
$destNation.val(data.nation).prop("disabled", true);
|
||||
var $targetLetter = $('#letter_'+data.id);
|
||||
resizeTextarea($('#inputBrief').val($targetLetter.data('brief')));
|
||||
resizeTextarea($('#inputDetail').val($targetLetter.data('detail')));
|
||||
}
|
||||
});
|
||||
|
||||
$('#btnSend').click(submitLetter);
|
||||
|
||||
$('#newLetter').show();
|
||||
}
|
||||
|
||||
function drawLetters(lettersObj){
|
||||
var deferred = $.Deferred();
|
||||
if(!lettersObj){
|
||||
return quickReject('받아오는데 실패했습니다.');
|
||||
}
|
||||
|
||||
if(!lettersObj.result){
|
||||
return quickReject('에러가 발생했습니다. : '+lettersObj.reason);
|
||||
}
|
||||
|
||||
window.myNationID = lettersObj.myNationID;
|
||||
|
||||
if(permissionLevel == 4){
|
||||
initNewLetterForm(lettersObj);
|
||||
$('.letterActionPlate').show();
|
||||
}
|
||||
|
||||
$('.letterObj').detach();//첫 버전이니까 일괄 삭제 일괄 로드
|
||||
$.each(lettersObj.letters, drawLetter);
|
||||
return true;
|
||||
}
|
||||
|
||||
function loadLetters(){
|
||||
return $.post({
|
||||
url:'j_diplomacy_get_letter.php',
|
||||
dataType:'json', //첫 버전이니까 전체 다 불러오자
|
||||
data:{
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function colorNation(nationInfo){
|
||||
if(!nationInfo.color){
|
||||
return nationInfo.text;
|
||||
}
|
||||
|
||||
var fgColor = isBrightColor(nationInfo.color)?'#000000':'#ffffff';
|
||||
var $nationForm = $('<div>'+nationInfo.text+'</div>').css({
|
||||
'color':fgColor,
|
||||
'background-color':nationInfo.color
|
||||
});
|
||||
return $nationForm;
|
||||
}
|
||||
|
||||
function resizeTextarea($obj){
|
||||
$obj.height(1).height($obj.prop('scrollHeight')+12 );
|
||||
}
|
||||
|
||||
$(function(){
|
||||
|
||||
$('textarea.autosize').on('keydown keyup', function(){
|
||||
resizeTextarea($(this));
|
||||
})
|
||||
|
||||
loadLetters()
|
||||
.then(drawLetters, errUnknown)
|
||||
.fail(function(reason){
|
||||
alert(reason);
|
||||
});
|
||||
|
||||
});
|
||||
+26
-35
@@ -81,13 +81,13 @@ $(function() {
|
||||
|
||||
var $win = $('<div id="ext_win" style="padding:0;" title="관직 임명"><table style="padding:0;margin:0;" cellspacing="0" cellpadding="0" border="0"><tr><td width="700px" style="padding:0;"><iframe id="in_frame" src="map.php?type=1&graphic=1" width="700" height="520" frameborder="0" marginwidth="0" marginheight="0" topmargin="0" scrolling="no"></iframe></td>'+
|
||||
'<td width="305px" style="padding:0;vertical-align:top;height:520px;"><div style="height:520px;width:305px;overflow-y:scroll;overflow-x:hidden;">'+
|
||||
'<table id="inner_table"><thead><tr><th width="35">도시</th><th width="85">태수</th><th width="85">군사</th><th width="85">시중</th></tr></thead><tbody class="content">'+
|
||||
'<table id="inner_table"><thead><tr><th width="35">도시</th><th width="85">태수</th><th width="85">군사</th><th width="85">종사</th></tr></thead><tbody class="content">'+
|
||||
'</tbody></table></div></td></tr></table>'+
|
||||
'<form name="form1" id="fake_form"><span id="user_name"></span> : <select name="double" id="city_select"></select>'+
|
||||
'<div id="duty_radio" style="display:inline;">'+
|
||||
'<input type="radio" id="duty_type1" value="4" name="duty_radio"><label for="duty_type1">태수</label>'+
|
||||
'<input type="radio" id="duty_type2" value="3" name="duty_radio"><label for="duty_type2">군사</label>'+
|
||||
'<input type="radio" id="duty_type3" value="2" name="duty_radio"><label for="duty_type3">시중</label>'+
|
||||
'<input type="radio" id="duty_type3" value="2" name="duty_radio"><label for="duty_type3">종사</label>'+
|
||||
'</div></form></div>');
|
||||
$win.hide();
|
||||
|
||||
@@ -135,17 +135,17 @@ $(function() {
|
||||
|
||||
var p태수 = cityInfo.p태수 && currUser.p태수;
|
||||
var p군사 = cityInfo.p군사 && currUser.p군사;
|
||||
var p시중 = cityInfo.p시중 && currUser.p시중;
|
||||
var p종사 = cityInfo.p종사 && currUser.p종사;
|
||||
|
||||
//console.log(p태수,p군사,p시중);
|
||||
//console.log(p태수,p군사,p종사);
|
||||
|
||||
$('#duty_type1').button({disabled:!p태수});
|
||||
$('#duty_type2').button({disabled:!p군사});
|
||||
$('#duty_type3').button({disabled:!p시중});
|
||||
$('#duty_type3').button({disabled:!p종사});
|
||||
|
||||
var $태수 = cityInfo.$태수;
|
||||
var $군사 = cityInfo.$군사;
|
||||
var $시중 = cityInfo.$시중;
|
||||
var $종사 = cityInfo.$종사;
|
||||
|
||||
|
||||
|
||||
@@ -222,7 +222,7 @@ $(function() {
|
||||
|
||||
var p태수 = cityInfo.p태수 && currUser.p태수;
|
||||
var p군사 = cityInfo.p군사 && currUser.p군사;
|
||||
var p시중 = cityInfo.p시중 && currUser.p시중;
|
||||
var p종사 = cityInfo.p종사 && currUser.p종사;
|
||||
|
||||
var newInfo = {
|
||||
지역 : 지역,
|
||||
@@ -232,12 +232,12 @@ $(function() {
|
||||
city : cityInfo,
|
||||
p태수 : p태수,
|
||||
p군사 : p군사,
|
||||
p시중 : p시중
|
||||
p종사 : p종사
|
||||
};
|
||||
|
||||
//console.log(newInfo);
|
||||
|
||||
if(p태수 || p군사 || p시중){
|
||||
if(p태수 || p군사 || p종사){
|
||||
if(typeof subCityGroupList[지역] == 'undefined'){
|
||||
subCityGroupList[지역] = [];
|
||||
}
|
||||
@@ -296,11 +296,11 @@ $(function() {
|
||||
}).css('cursor','pointer');
|
||||
}
|
||||
|
||||
var $시중 = cityInfo.$시중.clone();
|
||||
$city.append($시중);
|
||||
if(!newInfo.p시중)$시중.css('color','red');
|
||||
var $종사 = cityInfo.$종사.clone();
|
||||
$city.append($종사);
|
||||
if(!newInfo.p종사)$종사.css('color','red');
|
||||
else{
|
||||
$시중.click(function(){
|
||||
$종사.click(function(){
|
||||
$('#duty_radio :radio:eq(2)').attr('checked','checked');
|
||||
$('#duty_radio :radio').button('refresh');
|
||||
}).css('cursor','pointer');
|
||||
@@ -330,16 +330,7 @@ $(function() {
|
||||
//window.$html = $html;
|
||||
|
||||
var cnt =0;
|
||||
var $tmpTable = null;
|
||||
$html.each(function(idx){
|
||||
if(this.tagName == "TABLE"){
|
||||
cnt+=1;
|
||||
if(cnt==5){
|
||||
$tmpTable = $(this);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
var $tmpTable = $html.filter('#officer_list').eq(0);
|
||||
|
||||
$selects = $tmpTable.find("select");
|
||||
if($selects.length == 0){
|
||||
@@ -389,22 +380,22 @@ $(function() {
|
||||
$.each(cityList,function(idx,cityInfo){
|
||||
cityInfo.p태수=false;
|
||||
cityInfo.p군사=false;
|
||||
cityInfo.p시중=false;
|
||||
cityInfo.p종사=false;
|
||||
});
|
||||
|
||||
$.each(userList,function(idx,userInfo){
|
||||
userInfo.p태수=false;
|
||||
userInfo.p군사=false;
|
||||
userInfo.p시중=false;
|
||||
userInfo.p종사=false;
|
||||
});
|
||||
|
||||
setUserAvailable($selects.eq(1).find("option"),"p태수");
|
||||
setUserAvailable($selects.eq(3).find("option"),"p군사");
|
||||
setUserAvailable($selects.eq(5).find("option"),"p시중");
|
||||
setUserAvailable($selects.eq(5).find("option"),"p종사");
|
||||
|
||||
setCityAvailiable($selects.eq(0).find("option"),"p태수");
|
||||
setCityAvailiable($selects.eq(2).find("option"),"p군사");
|
||||
setCityAvailiable($selects.eq(4).find("option"),"p시중");
|
||||
setCityAvailiable($selects.eq(4).find("option"),"p종사");
|
||||
|
||||
|
||||
$.each(cityList,function(idx,cityInfo){
|
||||
@@ -484,10 +475,10 @@ $(function() {
|
||||
|
||||
addBtn($name,cityInfo,userInfo,4,'태수');
|
||||
addBtn($name,cityInfo,userInfo,3,'군사');
|
||||
addBtn($name,cityInfo,userInfo,2,'시중');
|
||||
addBtn($name,cityInfo,userInfo,2,'종사');
|
||||
|
||||
//특수 버튼!
|
||||
if(userInfo.p태수||userInfo.p군사||userInfo.p시중){
|
||||
if(userInfo.p태수||userInfo.p군사||userInfo.p종사){
|
||||
var $btn = $('<button>...</button>');
|
||||
$btn.addClass('for_duty');
|
||||
if(userInfo.is수뇌){
|
||||
@@ -594,8 +585,8 @@ $(function() {
|
||||
if(cityList[cityName].$군사.text() == name){
|
||||
cityList[cityName].$군사.css('color','lightgreen');
|
||||
}
|
||||
if(cityList[cityName].$시중.text() == name){
|
||||
cityList[cityName].$시중.css('color','lightgreen');
|
||||
if(cityList[cityName].$종사.text() == name){
|
||||
cityList[cityName].$종사.css('color','lightgreen');
|
||||
}
|
||||
|
||||
userList[name]={
|
||||
@@ -606,7 +597,7 @@ $(function() {
|
||||
val:'-1',
|
||||
p태수:false,
|
||||
p군사:false,
|
||||
p시중:false,
|
||||
p종사:false,
|
||||
is수뇌:is수뇌
|
||||
};
|
||||
|
||||
@@ -680,7 +671,7 @@ $(function() {
|
||||
|
||||
cityInfo.p태수 = false;
|
||||
cityInfo.p군사 = false;
|
||||
cityInfo.p시중 = false;
|
||||
cityInfo.p종사 = false;
|
||||
|
||||
}
|
||||
|
||||
@@ -777,12 +768,12 @@ $(function() {
|
||||
|
||||
}
|
||||
|
||||
//태수,군사,시중
|
||||
//태수,군사,종사
|
||||
{
|
||||
var $baseTr = $this.find('tr:eq(2)');
|
||||
cityInfo.$태수 = $baseTr.find('td:eq(7)');
|
||||
cityInfo.$군사 = $baseTr.find('td:eq(9)');
|
||||
cityInfo.$시중 = $baseTr.find('td:eq(11)');
|
||||
cityInfo.$종사 = $baseTr.find('td:eq(11)');
|
||||
}
|
||||
|
||||
//기타
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"typeAcquisition": {
|
||||
"include": [
|
||||
"jquery"
|
||||
]
|
||||
}
|
||||
|
||||
}
|
||||
+1
-22
@@ -27,7 +27,6 @@ function refreshing(obj, arg1, arg2) {
|
||||
// if(term <= 0) {
|
||||
switch(arg1) {
|
||||
case 0: location.reload(); break;
|
||||
case 1: go(arg2); break;
|
||||
case 2: turn(arg2); break;
|
||||
case 3: arg2.submit(); break;
|
||||
case 4:
|
||||
@@ -37,6 +36,7 @@ function refreshing(obj, arg1, arg2) {
|
||||
message.msg.focus();
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function moveProcessing(commandtype, turn){
|
||||
@@ -44,27 +44,6 @@ function moveProcessing(commandtype, turn){
|
||||
$.redirect("processing.php",{ commandtype: commandtype, turn: turn}, 'post');
|
||||
}
|
||||
|
||||
function go(type) {
|
||||
if(type == 1) location.replace('b_nationboard.php');
|
||||
else if(type == 2) location.replace('b_troop.php');
|
||||
else if(type == 3) location.replace('b_nationrule.php');
|
||||
else if(type == 4) location.replace('b_chiefboard.php');
|
||||
else if(type == 5) location.replace('b_chiefcenter.php');
|
||||
else if(type == 6) window.open('b_genList.php');
|
||||
else if(type == 7) location.replace('b_myKingdomInfo.php');
|
||||
else if(type == 8) location.replace('b_myCityInfo.php');
|
||||
else if(type == 9) location.replace('b_myGenInfo.php');
|
||||
else if(type == 10) location.replace('b_myBossInfo.php');
|
||||
else if(type == 11) location.replace('b_currentCity.php');
|
||||
else if(type == 12) location.replace('b_myPage.php');
|
||||
else if(type == 13) location.replace('b_dipcenter.php');
|
||||
else if(type == 14) location.replace('b_diplomacy.php');
|
||||
else if(type == 15) window.open('b_tournament.php');
|
||||
else if(type == 16) window.open('b_betting.php');
|
||||
else if(type == 17) window.open('b_auction.php');
|
||||
else if(type == 18) window.open('b_battleCenter.php');
|
||||
}
|
||||
|
||||
function turn(type) {
|
||||
num = form2.sel.value;
|
||||
commandlist.location.replace('turn.php?type=' + type + '&sel=' + num);
|
||||
|
||||
+143
-45
@@ -1,31 +1,17 @@
|
||||
|
||||
|
||||
function hexToRgb(hex) {
|
||||
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
||||
return result ? {
|
||||
r: parseInt(result[1], 16),
|
||||
g: parseInt(result[2], 16),
|
||||
b: parseInt(result[3], 16)
|
||||
} : null;
|
||||
}
|
||||
|
||||
|
||||
function isBrightColor(color){
|
||||
color = hexToRgb(color);
|
||||
if ((color.r*0.299 + color.g*0.587 + color.b*0.114) > 140){
|
||||
return true;
|
||||
}
|
||||
else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
var messageTemplate = '';
|
||||
var myGeneralID=null;
|
||||
var isChief = false;
|
||||
var sequence =null;
|
||||
var lastSequence = 0;
|
||||
var myNation = null;
|
||||
var lastMsg = null;
|
||||
var minMsgSeq = {
|
||||
'private':0x7fffffff,
|
||||
'public':0x7fffffff,
|
||||
'national':0x7fffffff,
|
||||
'diplomacy':0x7fffffff,
|
||||
}
|
||||
|
||||
var generalList = {};
|
||||
|
||||
@@ -43,32 +29,93 @@ function responseMessage(msgID, response){
|
||||
}).then(refreshMsg);
|
||||
}
|
||||
|
||||
function deleteMessage(msgID){
|
||||
$.ajax({
|
||||
url: 'j_msg_delete.php',
|
||||
type: 'post',
|
||||
dataType:'json',
|
||||
data: {
|
||||
msgID:msgID
|
||||
}
|
||||
}).then(refreshMsg);
|
||||
}
|
||||
|
||||
function refreshMsg(result){
|
||||
if(result && !result.result){
|
||||
alert(result.reason);
|
||||
}
|
||||
return redrawMsg(fetchMsg());
|
||||
return redrawMsg(fetchRecentMsg(), true);
|
||||
}
|
||||
|
||||
function fetchMsg(){
|
||||
function fetchRecentMsg(){
|
||||
return $.ajax({
|
||||
url: 'j_msg_get_recent.php',
|
||||
type: 'post',
|
||||
dataType:'json',
|
||||
data: {
|
||||
sequence:sequence
|
||||
sequence:lastSequence
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function redrawMsg(deferred){
|
||||
function showOldMsg(msgType){
|
||||
var oldMsg = $.ajax({
|
||||
url: 'j_msg_get_old.php',
|
||||
type: 'post',
|
||||
dataType:'json',
|
||||
data: {
|
||||
to:minMsgSeq[msgType],
|
||||
type:msgType,
|
||||
}
|
||||
});
|
||||
redrawMsg(oldMsg, false);
|
||||
}
|
||||
|
||||
function redrawMsg(deferred, addFront){
|
||||
function checkErasable(obj){
|
||||
|
||||
var now = moment().format('YYYY-MM-DD HH:mm:ss');
|
||||
$('.btn-delete-msg').each(function(){
|
||||
var $btn = $(this);
|
||||
var eraseUntil = $btn.data('erase_until');
|
||||
if(eraseUntil < now){
|
||||
$btn.detach();
|
||||
}
|
||||
})
|
||||
return obj;
|
||||
}
|
||||
function checkClear(obj){
|
||||
if(!obj.result){
|
||||
var t = $.Deferred();
|
||||
t.reject();
|
||||
return t;
|
||||
}
|
||||
if(!obj.keepRecent){
|
||||
var t = $.Deferred();
|
||||
$('.msg_plate').detach();
|
||||
lastSequence = null;
|
||||
console.log('refresh!');
|
||||
redrawMsg(fetchRecentMsg(), true);
|
||||
t.reject();
|
||||
return t;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
function registerSequence(obj){
|
||||
if(!obj.result){
|
||||
deferred.reject();
|
||||
return;
|
||||
var t = $.Deferred();
|
||||
t.reject();
|
||||
return t;
|
||||
}
|
||||
sequence = obj.sequence;
|
||||
lastSequence = Math.max(lastSequence, obj.sequence);
|
||||
$.each(['public', 'private', 'national', 'diplomacy'], function (_, msgType) {
|
||||
var msgList = obj[msgType];
|
||||
if(msgList === undefined || msgList.length == 0){
|
||||
return true;
|
||||
}
|
||||
var lastMsg = msgList[msgList.length - 1];
|
||||
minMsgSeq[msgType] = Math.min(minMsgSeq[msgType], lastMsg.id);
|
||||
});
|
||||
return obj;
|
||||
}
|
||||
|
||||
@@ -116,14 +163,10 @@ function redrawMsg(deferred){
|
||||
return true;
|
||||
}
|
||||
|
||||
if(msgType == 'diplomacy'){
|
||||
//외교는 항상 새로 그린다
|
||||
$msgBoard.empty();
|
||||
}
|
||||
|
||||
|
||||
var needRefreshLastContact = (msgType == 'private');
|
||||
|
||||
var now = moment().format('YYYY-MM-DD HH:mm:ss');
|
||||
//list의 맨 앞이 가장 최신 메시지임.
|
||||
var $msgs = msgSource.map(function(msg){
|
||||
|
||||
@@ -151,11 +194,20 @@ function redrawMsg(deferred){
|
||||
|
||||
msg.defaultIcon = pathConfig.sharedIcon+'/default.jpg';
|
||||
if(msgType == 'diplomacy'){
|
||||
msg.allowButton = myGeneralLevel>4;
|
||||
msg.allowButton = permissionLevel>=4;
|
||||
}
|
||||
else{
|
||||
msg.allowButton = true;
|
||||
}
|
||||
msg.myGeneralID = myGeneralID;
|
||||
msg.last5min = moment(msg.time).add(5, 'minute').format('YYYY-MM-DD HH:mm:ss');
|
||||
msg.now = now;
|
||||
if(msg.option && msg.option.invalid){
|
||||
msg.invalidType = 'msg_invalid';
|
||||
}
|
||||
else{
|
||||
msg.invalidType = 'msg_valid';
|
||||
}
|
||||
var msgHtml = TemplateEngine(messageTemplate, msg);
|
||||
|
||||
|
||||
@@ -169,11 +221,37 @@ function redrawMsg(deferred){
|
||||
$msg = $existMsg;
|
||||
}
|
||||
|
||||
if(msg.option && msg.option.parent){
|
||||
//parent는 삭제.
|
||||
$('#msg_{0}'.format(msg.option.parent)).detach();
|
||||
var hideMsg = false;
|
||||
if(msg.option){
|
||||
if(msg.option.delete !== undefined){
|
||||
//delete는 삭제.
|
||||
$('#msg_{0}'.format(msg.option.delete)).detach();
|
||||
}
|
||||
if(msg.option.overwrite !== undefined){
|
||||
//overwrite는 숨기기.
|
||||
$.map(msg.option.overwrite, function (overwriteID) {
|
||||
var $msg = $('#msg_{0}'.format(overwriteID));
|
||||
$msg.find('.btn-delete-msg').detach();
|
||||
$msg.find('.msg_content').html('삭제된 메시지입니다.').removeClass('msg_valid').addClass('msg_invalid');
|
||||
});
|
||||
|
||||
}
|
||||
if(msg.option.hide){
|
||||
hideMsg = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(hideMsg){
|
||||
return null;
|
||||
}
|
||||
|
||||
$msg.find('.btn-delete-msg').click(function(){
|
||||
if(!confirm("삭제하시겠습니까?")){
|
||||
return false;
|
||||
}
|
||||
deleteMessage(msg.id);
|
||||
});
|
||||
|
||||
$msg.find('button.prompt_yes').click(function(){
|
||||
if(!confirm("수락하시겠습니까?")){
|
||||
return false;
|
||||
@@ -198,12 +276,20 @@ function redrawMsg(deferred){
|
||||
|
||||
});
|
||||
|
||||
$msgBoard.prepend($msgs);
|
||||
if(addFront){
|
||||
$msgBoard.prepend($msgs);
|
||||
}
|
||||
else{
|
||||
$msgBoard.find('.load_old_message').before($msgs);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
deferred
|
||||
.then(checkErasable)
|
||||
.then(checkClear)
|
||||
.then(registerSequence)
|
||||
.then(refineMessageObjs)
|
||||
.then(printTemplate);
|
||||
@@ -272,6 +358,7 @@ function refreshMailboxList(obj){
|
||||
var generalName = this[1];
|
||||
var isNPC = !!(this[2] & 0x2);
|
||||
var isRuler = !!(this[2] & 0x1);
|
||||
var isAmbassador = !!(this[2] & 0x4);
|
||||
|
||||
|
||||
|
||||
@@ -283,6 +370,9 @@ function refreshMailboxList(obj){
|
||||
if(isRuler){
|
||||
textName = '*{0}*'.format(textName);
|
||||
}
|
||||
else if(isAmbassador){
|
||||
textName = '#{0}#'.format(textName);
|
||||
}
|
||||
|
||||
generalList[generalID] = {
|
||||
id:generalID,
|
||||
@@ -294,6 +384,10 @@ function refreshMailboxList(obj){
|
||||
};
|
||||
|
||||
var $item = $('<option value="{0}">{1}</option>'.format(generalID, textName));
|
||||
|
||||
if(permissionLevel == 4 && isAmbassador && myNation.mailbox != nation.mailbox){
|
||||
$item.prop('disabled', true);
|
||||
}
|
||||
$optgroup.append($item);
|
||||
});
|
||||
|
||||
@@ -316,7 +410,7 @@ function refreshMailboxList(obj){
|
||||
$favorite.append($lastContact);
|
||||
//TODO:운영자를 추가하는 코드도 넣을 것.
|
||||
|
||||
if(myGeneralLevel >= 5){
|
||||
if(permissionLevel >= 4){
|
||||
$.each(obj.nation, function(){
|
||||
var nation = this;
|
||||
//console.log(nation);
|
||||
@@ -353,12 +447,10 @@ function registerGlobal(basicInfo){
|
||||
'color':'#000000',
|
||||
'nation':'재야'
|
||||
};
|
||||
window.lastMsg = {
|
||||
id : basicInfo.lastContact
|
||||
};
|
||||
window.myGeneralID = basicInfo.generalID;
|
||||
window.isChief = basicInfo.isChief;
|
||||
window.myGeneralLevel = basicInfo.generalLevel;
|
||||
window.permissionLevel = basicInfo.permission;
|
||||
}
|
||||
|
||||
function activateMessageForm(){
|
||||
@@ -412,7 +504,7 @@ function activateMessageForm(){
|
||||
jQuery(function($){
|
||||
|
||||
//tmp_template.html은 추후 msg.js에 통합될 수 있음
|
||||
var getTemplate = $.get('js/templates/message.html?3',function(obj){
|
||||
var getTemplate = $.get('js/templates/message.html?11',function(obj){
|
||||
messageTemplate = obj;
|
||||
});
|
||||
|
||||
@@ -430,7 +522,7 @@ jQuery(function($){
|
||||
dataType:'json',
|
||||
});
|
||||
|
||||
var MessageList = fetchMsg();
|
||||
var MessageList = fetchRecentMsg();
|
||||
|
||||
senderList = $.when(senderList, basicInfo)
|
||||
.then(refreshMailboxList)
|
||||
@@ -438,6 +530,12 @@ jQuery(function($){
|
||||
|
||||
$.when(MessageList, getTemplate, basicInfo, senderList)
|
||||
.then(function(){
|
||||
redrawMsg(MessageList);
|
||||
redrawMsg(MessageList, true);
|
||||
}).then(function(){
|
||||
$('.load_old_message').click(function(){
|
||||
var $this = $(this);
|
||||
var msgType = $this.data('msg_type');
|
||||
showOldMsg(msgType);
|
||||
})
|
||||
});
|
||||
});
|
||||
@@ -12,6 +12,9 @@
|
||||
</div>
|
||||
<div class="msg_body">
|
||||
<div class="msg_header">
|
||||
<%if(!this.option.action && src.id == myGeneralID && now <= last5min && invalidType == 'msg_valid'){%>
|
||||
<button type="button" data-erase_until="<%last5min%>" class="btn btn btn-outline-warning btn-sm btn-delete-msg" style='float:right'>❌</button>
|
||||
<%}%>
|
||||
<%if(msgType == 'private') {%>
|
||||
<%if(src.name == generalName){%>
|
||||
<span class="msg_target msg_<%src.colorType%>" style="background-color:<%src.color%>;">나</span
|
||||
@@ -37,9 +40,8 @@
|
||||
<span class="msg_target msg_<%src.colorType%>" style="background-color:<%src.color%>;"><%e(src.name)%>:<%src.nation%></span>
|
||||
<%} %>
|
||||
<span class="msg_time"><<%e(time)%>></span>
|
||||
</div>
|
||||
|
||||
<div class="msg_content"><%e(text)%></div>
|
||||
</div>
|
||||
<div class="msg_content <%invalidType%>"><%linkifyStr(text)%></div>
|
||||
<%if(this.option && this.option.action) {%>
|
||||
<div class="msg_prompt">
|
||||
<button class="prompt_yes btn_prompt" <%allowButton?'':'disabled="disabled"'%>>>수락</button> <button class="prompt_no btn_prompt" <%allowButton?'':'disabled="disabled"'%>>거절</button>
|
||||
|
||||
+4
-4
@@ -663,7 +663,7 @@ function ConquerCity($admin, $general, $city, $nation, $destnation) {
|
||||
$renewFront = true;
|
||||
// 멸망이 아니면
|
||||
} else {
|
||||
// 태수,군사,시중은 일반으로...
|
||||
// 태수,군사,종사은 일반으로...
|
||||
$db->update('general',[
|
||||
'level'=>1
|
||||
], 'no IN %li',[$city['gen1'], $city['gen2'], $city['gen3']]);
|
||||
@@ -710,11 +710,11 @@ function ConquerCity($admin, $general, $city, $nation, $destnation) {
|
||||
$query = "update general set city='{$city['city']}' where no='{$general['no']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
if($city['level'] > 3) {
|
||||
// 도시 소속 변경, 태수,군사,시중 초기화
|
||||
// 도시 소속 변경, 태수,군사,종사 초기화
|
||||
$query = "update city set supply=1,conflict='{}',term=0,agri=agri*0.7,comm=comm*0.7,secu=secu*0.7,def=1000,wall=1000,nation='{$general['nation']}',gen1=0,gen2=0,gen3=0 where city='{$city['city']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
} else {
|
||||
// 도시 소속 변경, 태수,군사,시중 초기화
|
||||
// 도시 소속 변경, 태수,군사,종사 초기화
|
||||
$query = "update city set supply=1,conflict='{}',term=0,agri=agri*0.7,comm=comm*0.7,secu=secu*0.7,def=def2/2,wall=wall2/2,nation='{$general['nation']}',gen1=0,gen2=0,gen3=0 where city='{$city['city']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
}
|
||||
@@ -748,7 +748,7 @@ function ConquerCity($admin, $general, $city, $nation, $destnation) {
|
||||
$query['def'] = 1000;
|
||||
$query['wall'] = 1000;
|
||||
} else {
|
||||
// 도시 소속 변경, 태수,군사,시중 초기화
|
||||
// 도시 소속 변경, 태수,군사,종사 초기화
|
||||
$query['def'] = $db->sqleval('def2/2');
|
||||
$query['wall'] = $db->sqleval('wall2/2');
|
||||
}
|
||||
|
||||
@@ -1739,7 +1739,6 @@ function command_61($turn, $command) {
|
||||
타국에게 불가침을 제의합니다.<br>
|
||||
제의할 국가를 목록에서 선택하세요.<br>
|
||||
배경색은 현재 제의가 불가능한 국가는 <font color=red>붉은색</font>, 현재 불가침중인 국가는 <font color=blue>푸른색</font>으로 표시됩니다.<br>
|
||||
비고는 불가침시 세부 조건등을 지정하는 곳입니다.(최대 45자) <font color=magenta>※유저 편의를 위한 것일뿐 시스템적으로 보장하지는 않습니다.</font><br>
|
||||
<form name=form1 action=c_double.php method=post>
|
||||
대상 국가 <select name=double size=1 style=color:white;background-color:black>";
|
||||
|
||||
@@ -1796,7 +1795,6 @@ function command_61($turn, $command) {
|
||||
<option value=20>20</option>
|
||||
</select>
|
||||
년<br>
|
||||
비고 : <input type=text name=note size=45 maxlength=45 style=text-align:left;color:white;background-color:black>
|
||||
<input type=submit value=불가침>
|
||||
<input type=hidden name=command value=$command>";
|
||||
for($i=0; $i < count($turn); $i++) {
|
||||
|
||||
@@ -64,8 +64,10 @@ class DiplomaticMessage extends Message{
|
||||
return [self::INVALID, '송신자가 외교서신을 처리할 수 없습니다.'];
|
||||
}
|
||||
|
||||
if(!$general || $general['level'] < 5){
|
||||
return [self::INVALID, '해당 국가의 수뇌가 아닙니다.'];
|
||||
$permission = checkSecretPermission($general, false);
|
||||
|
||||
if(!$general || $permission < 4){
|
||||
return [self::INVALID, '해당 국가의 외교권자 아닙니다.'];
|
||||
}
|
||||
|
||||
return [self::ACCEPTED, ''];
|
||||
@@ -73,7 +75,6 @@ class DiplomaticMessage extends Message{
|
||||
|
||||
protected function noAggression(){
|
||||
$year = Util::array_get($this->msgOption['year']);
|
||||
$option = Util::array_get($this->msgOption['option'])??'';
|
||||
if($year < 1 || $year > 30){
|
||||
return [self::INVALID, '올바르지 않은 불가침 서신입니다.'];
|
||||
}
|
||||
@@ -81,7 +82,7 @@ class DiplomaticMessage extends Message{
|
||||
$this->diplomacyDetail = "{$year}년";
|
||||
|
||||
$helper = new Engine\Diplomacy($this->src->nationID, $this->dest->nationID);
|
||||
$chk = $helper->noAggression($year, $option);
|
||||
$chk = $helper->noAggression($year);
|
||||
if($chk[0] !== self::ACCEPTED){
|
||||
return $chk;
|
||||
}
|
||||
@@ -272,7 +273,7 @@ class DiplomaticMessage extends Message{
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
|
||||
$general = $db->queryFirstRow(
|
||||
'SELECT `name`, `level` FROM general WHERE `no`=%i AND nation=%i',
|
||||
'SELECT `name`, nation, `level`, `permission`, `penalty` FROM general WHERE `no`=%i AND nation=%i',
|
||||
$receiverID,
|
||||
$this->dest->nationID
|
||||
);
|
||||
@@ -284,13 +285,6 @@ class DiplomaticMessage extends Message{
|
||||
|
||||
|
||||
list($result, $reason) = $this->checkDiplomaticMessageValidation($general);
|
||||
$db->update('diplomacy', [
|
||||
'reserved'=>'',
|
||||
'showing'=>null
|
||||
], '(me=%s AND you=%s) OR (you=%s AND me=%s)',
|
||||
$this->src->nationID, $this->dest->nationID,
|
||||
$this->src->nationID, $this->dest->nationID
|
||||
);
|
||||
if($result !== self::ACCEPTED){
|
||||
pushGenLog(['no'=>$receiverID], ["<C>●</>{$reason} {$this->diplomacyName} 실패."]);
|
||||
if($result === self::DECLINED){
|
||||
@@ -333,7 +327,6 @@ class DiplomaticMessage extends Message{
|
||||
$this->dest->generalID = $receiverID;
|
||||
$this->dest->generalName = $general['name'];
|
||||
$this->msgOption['used'] = true;
|
||||
$this->invalidate();
|
||||
$this->validDiplomacy = false;
|
||||
|
||||
$josaYi = JosaUtil::pick($this->src->nationName, '이');
|
||||
@@ -345,7 +338,23 @@ class DiplomaticMessage extends Message{
|
||||
new \DateTime(),
|
||||
new \DateTime('9999-12-31'),
|
||||
[
|
||||
'delete'=>$this->id
|
||||
'delete'=>$this->id,
|
||||
'silence'=>true,
|
||||
]
|
||||
);
|
||||
$this->invalidate();
|
||||
$newMsg->send();
|
||||
|
||||
$newMsg = new Message(
|
||||
self::MSGTYPE_DIPLOMACY,
|
||||
$this->dest,
|
||||
$this->src,
|
||||
"【외교】{$year}년 {$month}월: {$this->src->nationName}{$josaYi} {$this->dest->nationName}에게 제안한 {$this->diplomacyDetail}{$this->diplomacyName} 동의.",
|
||||
new \DateTime(),
|
||||
new \DateTime('9999-12-31'),
|
||||
[
|
||||
'delete'=>$this->id,
|
||||
'silence'=>true,
|
||||
]
|
||||
);
|
||||
$newMsg->send();
|
||||
|
||||
@@ -273,7 +273,7 @@ class Diplomacy{
|
||||
return $prev;
|
||||
}
|
||||
|
||||
public function noAggression(int $when, string $option){
|
||||
public function noAggression(int $when){
|
||||
$chk = $this->checkValidNation();
|
||||
$chk = $this->checkNotWar($chk);
|
||||
$chk = $this->checkAlreadyMerging($chk);
|
||||
@@ -286,8 +286,7 @@ class Diplomacy{
|
||||
$db = DB::db();
|
||||
$db->update('diplomacy',[
|
||||
'state'=>7,
|
||||
'term'=>$when*12,
|
||||
'fixed'=>$option
|
||||
'term'=>$when*12
|
||||
],
|
||||
'(me=%i AND you=%i) OR (you=%i AND me=%i)',
|
||||
$this->srcNation['nation'], $this->destNation['nation'],
|
||||
@@ -308,8 +307,7 @@ class Diplomacy{
|
||||
$db = DB::db();
|
||||
$db->update('diplomacy',[
|
||||
'state'=>2,
|
||||
'term'=>0,
|
||||
'fixed'=>''
|
||||
'term'=>0
|
||||
],
|
||||
'(me=%i AND you=%i) OR (you=%i AND me=%i)',
|
||||
$this->srcNation['nation'], $this->destNation['nation'],
|
||||
@@ -330,8 +328,7 @@ class Diplomacy{
|
||||
$db = DB::db();
|
||||
$db->update('diplomacy',[
|
||||
'state'=>2,
|
||||
'term'=>0,
|
||||
'fixed'=>''
|
||||
'term'=>0
|
||||
],
|
||||
'(me=%i AND you=%i) OR (you=%i AND me=%i)',
|
||||
$this->srcNation['nation'], $this->destNation['nation'],
|
||||
@@ -356,16 +353,14 @@ class Diplomacy{
|
||||
$db = DB::db();
|
||||
$db->update('diplomacy',[
|
||||
'state'=>4,
|
||||
'term'=>24,
|
||||
'fixed'=>''
|
||||
'term'=>24
|
||||
],
|
||||
'me=%i AND you=%i',
|
||||
$this->srcNation['nation'], $this->destNation['nation']);
|
||||
|
||||
$db->update('diplomacy',[
|
||||
'state'=>3,
|
||||
'term'=>24,
|
||||
'fixed'=>''
|
||||
'term'=>24
|
||||
],
|
||||
'you=%i AND me=%i',
|
||||
$this->srcNation['nation'], $this->destNation['nation']);
|
||||
@@ -389,16 +384,14 @@ class Diplomacy{
|
||||
$db = DB::db();
|
||||
$db->update('diplomacy',[
|
||||
'state'=>6,
|
||||
'term'=>24,
|
||||
'fixed'=>''
|
||||
'term'=>24
|
||||
],
|
||||
'me=%i AND you=%i',
|
||||
$this->srcNation['nation'], $this->destNation['nation']);
|
||||
|
||||
$db->update('diplomacy',[
|
||||
'state'=>5,
|
||||
'term'=>24,
|
||||
'fixed'=>''
|
||||
'term'=>24
|
||||
],
|
||||
'you=%i AND me=%i',
|
||||
$this->srcNation['nation'], $this->destNation['nation']);
|
||||
|
||||
@@ -177,9 +177,9 @@ class Personnel{
|
||||
$setOriginalCityValues['gen3'] = 0;
|
||||
}
|
||||
|
||||
$setValues['betray'] = $db->sqleval('betray + 1');
|
||||
$setValues['experience'] = $db->sqleval('experience * (1 - 0.1 * betray)');//XXX: 상수
|
||||
$setValues['dedication'] = $db->sqleval('dedication * (1 - 0.1 * betray)');//XXX: 상수
|
||||
$setValues['betray'] = $db->sqleval('betray + 1');
|
||||
}
|
||||
else{
|
||||
//재야이면 100 100 증가
|
||||
@@ -191,6 +191,8 @@ class Personnel{
|
||||
$setValues['killturn'] = $this->killturn;
|
||||
}
|
||||
|
||||
$setValues['permission'] = 'normal';
|
||||
|
||||
$db->update('general', $setValues, 'no=%i', $generalID);
|
||||
$db->update('general', $setSenderValues, 'no=%i', $this->senderID);
|
||||
$db->update('nation', $setOriginalNationValues, 'nation=%i', $general['nation']);
|
||||
|
||||
+140
-25
@@ -149,7 +149,7 @@ class Message
|
||||
];
|
||||
|
||||
$action = Util::array_get($option['action'], null);
|
||||
if ($msgType === self::MSGTYPE_DIPLOMACY) {
|
||||
if ($msgType === self::MSGTYPE_DIPLOMACY && $action !== null) {
|
||||
$objMessage = new DiplomaticMessage(...$args);
|
||||
} elseif ($action === 'scout') {
|
||||
$objMessage = new ScoutMessage(...$args);
|
||||
@@ -184,7 +184,7 @@ class Message
|
||||
return false;
|
||||
}
|
||||
|
||||
public static function getMessageByID(int $messageID) : Message
|
||||
public static function getMessageByID(int $messageID) : ?Message
|
||||
{
|
||||
$db = DB::db();
|
||||
$now = new \DateTime();
|
||||
@@ -217,7 +217,7 @@ class Message
|
||||
$where->add('type = %s', $msgType);
|
||||
$where->add('valid_until > %s', $date);
|
||||
if ($fromSeq > 0) {
|
||||
$where->add('id > %i', $fromSeq);
|
||||
$where->add('id >= %i', $fromSeq);
|
||||
}
|
||||
|
||||
if ($limit > 0) {
|
||||
@@ -231,6 +231,95 @@ class Message
|
||||
}, $db->query('SELECT * FROM `message` WHERE %l ORDER BY id DESC %? ', $where, $limitSql));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $mailbox 메일 사서함.
|
||||
* @param string $msgType 메일 타입. MSGTYPE 중 하나.
|
||||
* @param int $toSeq 가져오고자 하는 위치. $toSeq보다 '작은' seq만 가져온다.
|
||||
* @param int $limit 가져오고자 하는 수.
|
||||
* @return Message[]
|
||||
*/
|
||||
public static function getMessagesFromMailBoxOld(int $mailbox, string $msgType, int $toSeq, int $limit = 20)
|
||||
{
|
||||
$db = DB::db();
|
||||
|
||||
if (!static::isValidMsgType($msgType)) {
|
||||
throw new \InvalidArgumentException('올바르지 않은 $msgType');
|
||||
}
|
||||
|
||||
$date = (new \DateTime())->format('Y-m-d H:i:s');
|
||||
|
||||
$where = new \WhereClause('and');
|
||||
$where->add('mailbox = %i', $mailbox);
|
||||
$where->add('type = %s', $msgType);
|
||||
$where->add('valid_until > %s', $date);
|
||||
$where->add('id < %i', $toSeq);
|
||||
|
||||
if ($limit > 0) {
|
||||
$limitSql = $db->sqleval('LIMIT %i', $limit);
|
||||
} else {
|
||||
$limitSql = new \MeekroDBEval('');
|
||||
}
|
||||
|
||||
return array_map(function ($row) {
|
||||
return static::buildFromArray($row);
|
||||
}, $db->query('SELECT * FROM `message` WHERE %l ORDER BY id DESC %? ', $where, $limitSql));
|
||||
}
|
||||
|
||||
public static function deleteMsg(int $msgID, int $generalID):?string{
|
||||
$msgObj = static::getMessageByID($msgID);
|
||||
if($msgObj=== null){
|
||||
return '메시지가 없습니다';
|
||||
}
|
||||
|
||||
if($msgObj->src->generalID != $generalID){
|
||||
return '본인의 메시지만 삭제할 수 있습니다.';
|
||||
}
|
||||
|
||||
if($msgObj instanceof DiplomaticMessage){
|
||||
return '시스템 외교 메시지는 삭제할 수 없습니다.';
|
||||
}
|
||||
|
||||
$prev5min = new \DateTime();
|
||||
$prev5min->sub(new \DateInterval('PT5M'));
|
||||
|
||||
if($msgObj->date < $prev5min){
|
||||
return '5분 이내의 메시지만 삭제할 수 있습니다.';
|
||||
}
|
||||
|
||||
$msgOption = [
|
||||
'hide'=>true,
|
||||
'silence'=>true,
|
||||
'overwrite'=>[$msgObj->id]
|
||||
];
|
||||
|
||||
if($msgObj->msgType == Message::MSGTYPE_PRIVATE || $msgObj->msgType == Message::MSGTYPE_NATIONAL){
|
||||
$receiveID = $msgObj->msgOption['receiverMessageID']??null;
|
||||
if($receiveID !== null){
|
||||
$msgObj2 = static::getMessageByID($receiveID);
|
||||
if($msgObj2 !== null){
|
||||
$msgObj2->invalidate(null, false);
|
||||
$msgOption['overwrite'][] = [$msgObj2->id];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$in1min = new \DateTime();
|
||||
$in1min->add(new \DateInterval('PT1M'));
|
||||
$newMsg = new Message(
|
||||
$msgObj->msgType,
|
||||
$msgObj->src,
|
||||
$msgObj->dest,
|
||||
"req_del_msg",
|
||||
new \DateTime(),
|
||||
$in1min,
|
||||
$msgOption
|
||||
);
|
||||
$msgObj->invalidate(null, false);
|
||||
$newMsg->send(false);
|
||||
return null;
|
||||
}
|
||||
|
||||
protected function sendRaw(int $mailbox):array{
|
||||
//NOTE:: 여기선 검증하지 않는다.
|
||||
|
||||
@@ -268,7 +357,7 @@ class Message
|
||||
}
|
||||
|
||||
private function sendToSender():array{
|
||||
if($this->sendCnt > 0){
|
||||
if($this->sendCnt > 1){
|
||||
throw new \RuntimeException('이미 전송한 메일입니다.');
|
||||
}
|
||||
if($this->msgType === self::MSGTYPE_PRIVATE && $this->src->generalID !== $this->dest->generalID){
|
||||
@@ -277,23 +366,38 @@ class Message
|
||||
if($this->msgType === self::MSGTYPE_NATIONAL && $this->src->nationID !== $this->dest->nationID){
|
||||
return $this->sendRaw($this->src->nationID + self::MAILBOX_NATIONAL);
|
||||
}
|
||||
if($this->msgType === self::MSGTYPE_DIPLOMACY && !key_exists('action', $this->msgOption)){
|
||||
return $this->sendRaw($this->src->nationID + self::MAILBOX_NATIONAL);
|
||||
}
|
||||
return [0, 0];
|
||||
}
|
||||
|
||||
private function sendToReceiver() : array{
|
||||
if($this->sendCnt > 1 || $this->isInboxMail){
|
||||
if($this->sendCnt > 0 || $this->isInboxMail){
|
||||
throw new \RuntimeException('이미 전송한 메일입니다.');
|
||||
}
|
||||
|
||||
if($this->msgType === self::MSGTYPE_PRIVATE){
|
||||
//XXX: 알림을 이런식으로 보내는게 맞는가에 대한 의문 있음
|
||||
DB::db()->update('general', [
|
||||
'newmsg'=>1
|
||||
], 'no=%i',$this->dest->generalID);
|
||||
if(!($this->msgOption['silence']??false)){
|
||||
//XXX: 알림을 이런식으로 보내는게 맞는가에 대한 의문 있음
|
||||
DB::db()->update('general', [
|
||||
'newmsg'=>1
|
||||
], 'no=%i',$this->dest->generalID);
|
||||
}
|
||||
return $this->sendRaw($this->dest->generalID);
|
||||
}
|
||||
|
||||
if($this->msgType === self::MSGTYPE_NATIONAL || $this->msgType === self::MSGTYPE_DIPLOMACY){
|
||||
if($this->msgType === self::MSGTYPE_NATIONAL){
|
||||
return $this->sendRaw($this->dest->nationID + self::MAILBOX_NATIONAL);
|
||||
}
|
||||
|
||||
if($this->msgType === self::MSGTYPE_DIPLOMACY){
|
||||
if(!($this->msgOption['silence']??false)){
|
||||
//XXX: 알림을 이런식으로 보내는게 맞는가에 대한 의문 있음
|
||||
DB::db()->update('general', [
|
||||
'newmsg'=>1
|
||||
], 'nation = %i AND (level = 12 OR permission IN (\'ambassador\', \'auditor\')) ',$this->dest->nationID);
|
||||
}
|
||||
return $this->sendRaw($this->dest->nationID + self::MAILBOX_NATIONAL);
|
||||
}
|
||||
|
||||
@@ -305,18 +409,7 @@ class Message
|
||||
}
|
||||
|
||||
public function send(bool $sendDestOnly=false):int{
|
||||
if(!$sendDestOnly){
|
||||
list($senderMailbox, $sendID) = $this->sendToSender();
|
||||
if($sendID){
|
||||
$this->mailbox = $senderMailbox;
|
||||
$this->isInboxMail = false;
|
||||
$this->id = $sendID;
|
||||
$this->msgOption['senderMessageID'] = $sendID;
|
||||
$this->sendCnt = 1;
|
||||
}
|
||||
}
|
||||
|
||||
list($receiverMailbox, $receiveID) = $this->sendToReceiver();
|
||||
[$receiverMailbox, $receiveID] = $this->sendToReceiver();
|
||||
if(!$receiveID && !$sendDestOnly){
|
||||
return $sendID;
|
||||
}
|
||||
@@ -324,17 +417,39 @@ class Message
|
||||
$this->isInboxMail = true;
|
||||
$this->id = $receiveID;
|
||||
$this->msgOption['receiverMessageID'] = $receiveID;
|
||||
$this->sendCnt = 2;
|
||||
$this->sendCnt = 1;
|
||||
|
||||
if(!$sendDestOnly){
|
||||
[$senderMailbox, $sendID] = $this->sendToSender();
|
||||
if($sendID){
|
||||
$this->mailbox = $senderMailbox;
|
||||
$this->isInboxMail = false;
|
||||
$this->id = $sendID;
|
||||
$this->msgOption['senderMessageID'] = $sendID;
|
||||
$this->sendCnt = 2;
|
||||
}
|
||||
}
|
||||
|
||||
return $receiveID;
|
||||
}
|
||||
|
||||
public function invalidate(array $newMsgOption=null){
|
||||
public function invalidate(?array $newMsgOption=null, bool $hideMsg=true){
|
||||
if($newMsgOption !== null){
|
||||
$this->msgOption = $newMsgOption;
|
||||
}
|
||||
|
||||
$this->validUntil = new \DateTime('2000-12-31');
|
||||
$this->msgOption['invalid'] = true;
|
||||
|
||||
if($hideMsg){
|
||||
$this->validUntil = new \DateTime('2000-12-31');
|
||||
}
|
||||
else{
|
||||
if(key_exists('receiverMessageID', $this->msgOption)){
|
||||
$this->msgOption['originalText'] = $this->msg;
|
||||
}
|
||||
$this->msg = '삭제된 메시지입니다.';
|
||||
}
|
||||
|
||||
|
||||
$db = DB::db();
|
||||
$db->update('message', [
|
||||
|
||||
@@ -14,24 +14,24 @@
|
||||
"npcMax":95
|
||||
},
|
||||
"general":[
|
||||
[0, "아이유", null, 0, null, 90, 56, 100, 0, 160, 250, null, null],
|
||||
[0, "걸스데이민아", null, 0, null, 96, 52, 95, 0, 160, 250, null, null],
|
||||
[0, "구하라", null, 0, null, 95, 91, 57, 0, 160, 250, null, null],
|
||||
[0, "손나은", null, 0, null, 92, 54, 92, 0, 160, 250, null, null],
|
||||
[0, "윤아", null, 0, null, 94, 94, 62, 0, 160, 250, null, null],
|
||||
[0, "걸스데이소진", null, 0, null, 86, 94, 70, 0, 160, 250, null, null],
|
||||
[0, "수지", null, 0, null, 100, 58, 95, 0, 160, 250, null, null],
|
||||
[0, "정예인", null, 0, null, 90, 90, 65, 0, 160, 250, null, null],
|
||||
[0, "혜리", null, 0, null, 90, 68, 90, 0, 160, 250, null, null],
|
||||
[0, "은하", null, 0, null, 88, 69, 87, 0, 160, 250, null, null],
|
||||
[0, "슈", null, 0, null, 92, 54, 80, 0, 160, 250, null, null],
|
||||
[0, "소원", null, 0, null, 90, 85, 60, 0, 160, 250, null, null],
|
||||
[0, "보아", null, 0, null, 95, 99, 96, 0, 160, 250, null, null],
|
||||
[0, "김세정", null, 0, null, 100, 92, 100, 0, 160, 250, null, null],
|
||||
[0, "나라", null, 0, null, 94, 97, 65, 0, 160, 250, null, null],
|
||||
[0, "서지수", null, 0, null, 90, 89, 63, 0, 160, 250, null, null],
|
||||
[0, "양파", null, 0, null, 85, 54, 92, 0, 160, 250, null, null],
|
||||
[0, "앨리스", null, 0, null, 90, 90, 67, 0, 160, 250, null, null],
|
||||
[0, "아이유", null, 0, null, 90, 56, 100, 0, 160, 250, "의협", "집중"],
|
||||
[0, "걸스데이 민아", null, 0, null, 96, 52, 95, 0, 160, 250, "대의", "환술"],
|
||||
[0, "구하라", null, 0, null, 95, 91, 57, 0, 160, 250, "출세", "무쌍"],
|
||||
[0, "손나은", null, 0, null, 92, 54, 92, 0, 160, 250, "안전", "귀병"],
|
||||
[0, "윤아", null, 0, null, 94, 94, 62, 0, 160, 250, "출세", "위압"],
|
||||
[0, "걸스데이 소진", null, 0, null, 86, 94, 70, 0, 160, 250, "할거", "무쌍"],
|
||||
[0, "수지", null, 0, null, 100, 58, 95, 0, 160, 250, "정복", "신중"],
|
||||
[0, "정예인", null, 0, null, 90, 90, 65, 0, 160, 250, "패권", "위압"],
|
||||
[0, "혜리", null, 0, null, 90, 68, 90, 0, 160, 250, "유지", "환술"],
|
||||
[0, "은하", null, 0, null, 88, 69, 87, 0, 160, 250, "안전", "환술"],
|
||||
[0, "슈", null, 0, null, 92, 54, 80, 0, 160, 250, "패권", "신중"],
|
||||
[0, "소원", null, 0, null, 90, 85, 60, 0, 160, 250, "왕좌", "필살"],
|
||||
[0, "보아", null, 0, null, 95, 99, 96, 0, 160, 250, "왕좌", "위압"],
|
||||
[0, "김세정", null, 0, null, 100, 92, 100, 0, 160, 250, "의협", "집중"],
|
||||
[0, "나라", null, 0, null, 94, 97, 65, 0, 160, 250, "대의", "무쌍"],
|
||||
[0, "서지수", null, 0, null, 90, 89, 63, 0, 160, 250, "할거", "필살"],
|
||||
[0, "양파", null, 0, null, 85, 54, 92, 0, 160, 250, "대의", "환술"],
|
||||
[0, "앨리스", null, 0, null, 90, 90, 67, 0, 160, 250, "유지", "위압"],
|
||||
[0, "효린", null, 0, null, 40, 72, 97, 0, 160, 250, null, null],
|
||||
[0, "보라", null, 0, null, 82, 81, 68, 0, 160, 250, null, null],
|
||||
[0, "소유", null, 0, null, 70, 68, 81, 0, 160, 250, null, null],
|
||||
@@ -41,11 +41,11 @@
|
||||
[0, "은정", null, 0, null, 70, 60, 72, 0, 160, 250, null, null],
|
||||
[0, "큐리", null, 0, null, 70, 61, 58, 0, 160, 250, null, null],
|
||||
[0, "보람", null, 0, null, 72, 60, 60, 0, 160, 250, null, null],
|
||||
[0, "티아라소연", null, 0, null, 71, 58, 77, 0, 160, 250, null, null],
|
||||
[0, "티아라 소연", null, 0, null, 71, 58, 77, 0, 160, 250, null, null],
|
||||
[0, "라임", null, 0, null, 78, 70, 74, 0, 160, 250, null, null],
|
||||
[0, "유영", null, 0, null, 70, 53, 64, 0, 160, 250, null, null],
|
||||
[0, "서영", null, 0, null, 65, 67, 62, 0, 160, 250, null, null],
|
||||
[0, "헬비여름", null, 0, null, 63, 62, 63, 0, 160, 250, null, null],
|
||||
[0, "헬로비너스 여름", null, 0, null, 63, 62, 63, 0, 160, 250, null, null],
|
||||
[0, "남지현", null, 0, null, 80, 62, 74, 0, 160, 250, null, null],
|
||||
[0, "허가윤", null, 0, null, 70, 64, 82, 0, 160, 250, null, null],
|
||||
[0, "전지윤", null, 0, null, 69, 61, 69, 0, 160, 250, null, null],
|
||||
@@ -59,12 +59,12 @@
|
||||
[0, "한나", null, 0, null, 40, 43, 41, 0, 160, 250, null, null],
|
||||
[0, "김한별", null, 0, null, 60, 41, 57, 0, 160, 250, null, null],
|
||||
[0, "김한샘", null, 0, null, 31, 41, 40, 0, 160, 250, null, null],
|
||||
[0, "블랙핑크지수", null, 0, null, 83, 73, 80, 0, 160, 250, null, null],
|
||||
[0, "블랙핑크제니", null, 0, null, 84, 70, 82, 0, 160, 250, null, null],
|
||||
[0, "블랙핑크 지수", null, 0, null, 83, 73, 80, 0, 160, 250, null, null],
|
||||
[0, "블랙핑크 제니", null, 0, null, 84, 70, 82, 0, 160, 250, null, null],
|
||||
[0, "로제", null, 0, null, 80, 70, 87, 0, 160, 250, null, null],
|
||||
[0, "리사", null, 0, null, 80, 74, 84, 0, 160, 250, null, null],
|
||||
[0, "수민", null, 0, null, 66, 62, 72, 0, 160, 250, null, null],
|
||||
[0, "소나무민재", null, 0, null, 60, 61, 80, 0, 160, 250, null, null],
|
||||
[0, "소나무 민재", null, 0, null, 60, 61, 80, 0, 160, 250, null, null],
|
||||
[0, "디애나", null, 0, null, 68, 73, 64, 0, 160, 250, null, null],
|
||||
[0, "나현", null, 0, null, 71, 79, 57, 0, 160, 250, null, null],
|
||||
[0, "의진", null, 0, null, 76, 80, 61, 0, 160, 250, null, null],
|
||||
@@ -72,20 +72,20 @@
|
||||
[0, "뉴썬", null, 0, null, 60, 61, 59, 0, 160, 250, null, null],
|
||||
[0, "유라", null, 0, null, 80, 70, 61, 0, 160, 250, null, null],
|
||||
[0, "지민", null, 0, null, 69, 66, 72, 0, 160, 250, null, null],
|
||||
[0, "AOA유나", null, 0, null, 74, 54, 68, 0, 160, 250, null, null],
|
||||
[0, "AOA 유나", null, 0, null, 74, 54, 68, 0, 160, 250, null, null],
|
||||
[0, "혜정", null, 0, null, 74, 57, 65, 0, 160, 250, null, null],
|
||||
[0, "AOA민아", null, 0, null, 75, 62, 58, 0, 160, 250, null, null],
|
||||
[0, "AOA 민아", null, 0, null, 75, 62, 58, 0, 160, 250, null, null],
|
||||
[0, "설현", null, 0, null, 90, 78, 59, 0, 160, 250, null, null],
|
||||
[0, "찬미", null, 0, null, 68, 62, 60, 0, 160, 250, null, null],
|
||||
[0, "AOA초아", null, 0, null, 80, 58, 74, 0, 160, 250, null, null],
|
||||
[0, "AOA 초아", null, 0, null, 80, 58, 74, 0, 160, 250, null, null],
|
||||
[0, "솔빈", null, 0, null, 80, 66, 62, 0, 160, 250, null, null],
|
||||
[0, "해인", null, 0, null, 67, 63, 60, 0, 160, 250, null, null],
|
||||
[0, "라붐유정", null, 0, null, 66, 61, 71, 0, 160, 250, null, null],
|
||||
[0, "라붐소연", null, 0, null, 80, 58, 70, 0, 160, 250, null, null],
|
||||
[0, "라붐 유정", null, 0, null, 66, 61, 71, 0, 160, 250, null, null],
|
||||
[0, "라붐 소연", null, 0, null, 80, 58, 70, 0, 160, 250, null, null],
|
||||
[0, "지엔", null, 0, null, 61, 60, 62, 0, 160, 250, null, null],
|
||||
[0, "율희", null, 0, null, 60, 54, 60, 0, 160, 250, null, null],
|
||||
[0, "효정", null, 0, null, 78, 54, 59, 0, 160, 250, null, null],
|
||||
[0, "오마이걸미미", null, 0, null, 51, 57, 55, 0, 160, 250, null, null],
|
||||
[0, "오마이걸 미미", null, 0, null, 51, 57, 55, 0, 160, 250, null, null],
|
||||
[0, "유아", null, 0, null, 73, 81, 70, 0, 160, 250, null, null],
|
||||
[0, "승희", null, 0, null, 69, 76, 78, 0, 160, 250, null, null],
|
||||
[0, "지호", null, 0, null, 69, 67, 62, 0, 160, 250, null, null],
|
||||
@@ -104,8 +104,8 @@
|
||||
[0, "정윤혜", null, 0, null, 75, 59, 60, 0, 160, 250, null, null],
|
||||
[0, "조현영", null, 0, null, 79, 60, 63, 0, 160, 250, null, null],
|
||||
[0, "경리", null, 0, null, 80, 82, 64, 0, 160, 250, null, null],
|
||||
[0, "나뮤혜미", null, 0, null, 72, 67, 60, 0, 160, 250, null, null],
|
||||
[0, "나뮤소진", null, 0, null, 73, 63, 59, 0, 160, 250, null, null],
|
||||
[0, "나인뮤지스 혜미", null, 0, null, 72, 67, 60, 0, 160, 250, null, null],
|
||||
[0, "나인뮤지스 소진", null, 0, null, 73, 63, 59, 0, 160, 250, null, null],
|
||||
[0, "금조", null, 0, null, 70, 60, 54, 0, 160, 250, null, null],
|
||||
[0, "손성아", null, 0, null, 69, 63, 60, 0, 160, 250, null, null],
|
||||
[0, "박민하", null, 0, null, 90, 73, 57, 0, 160, 250, null, null],
|
||||
@@ -123,7 +123,7 @@
|
||||
[0, "모모", null, 0, null, 80, 88, 63, 0, 160, 250, null, null],
|
||||
[0, "사나", null, 0, null, 83, 83, 64, 0, 160, 250, null, null],
|
||||
[0, "지효", null, 0, null, 73, 63, 86, 0, 160, 250, null, null],
|
||||
[0, "트와이스미나", null, 0, null, 79, 87, 66, 0, 160, 250, null, null],
|
||||
[0, "트와이스 미나", null, 0, null, 79, 87, 66, 0, 160, 250, null, null],
|
||||
[0, "다현", null, 0, null, 78, 66, 68, 0, 160, 250, null, null],
|
||||
[0, "채영", null, 0, null, 70, 68, 67, 0, 160, 250, null, null],
|
||||
[0, "쯔위", null, 0, null, 100, 72, 61, 0, 160, 250, null, null],
|
||||
@@ -132,13 +132,13 @@
|
||||
[0, "미료", null, 0, null, 60, 57, 82, 0, 160, 250, null, null],
|
||||
[0, "가인", null, 0, null, 67, 77, 80, 0, 160, 250, null, null],
|
||||
[0, "하나", null, 0, null, 66, 62, 64, 0, 160, 250, null, null],
|
||||
[0, "구구단미미", null, 0, null, 69, 60, 63, 0, 160, 250, null, null],
|
||||
[0, "구구단나영", null, 0, null, 80, 62, 83, 0, 160, 250, null, null],
|
||||
[0, "구구단 미미", null, 0, null, 69, 60, 63, 0, 160, 250, null, null],
|
||||
[0, "구구단 나영", null, 0, null, 80, 62, 83, 0, 160, 250, null, null],
|
||||
[0, "해빈", null, 0, null, 70, 60, 86, 0, 160, 250, null, null],
|
||||
[0, "소이", null, 0, null, 66, 61, 64, 0, 160, 250, null, null],
|
||||
[0, "샐리", null, 0, null, 68, 66, 67, 0, 160, 250, null, null],
|
||||
[0, "구구단미나", null, 0, null, 80, 70, 63, 0, 160, 250, null, null],
|
||||
[0, "구구단혜연", null, 0, null, 63, 64, 66, 0, 160, 250, null, null],
|
||||
[0, "구구단 미나", null, 0, null, 80, 70, 63, 0, 160, 250, null, null],
|
||||
[0, "구구단 혜연", null, 0, null, 63, 64, 66, 0, 160, 250, null, null],
|
||||
[0, "최유정", null, 0, null, 70, 80, 67, 0, 160, 250, null, null],
|
||||
[0, "김도연", null, 0, null, 81, 81, 68, 0, 160, 250, null, null],
|
||||
[0, "지수연", null, 0, null, 64, 62, 74, 0, 160, 250, null, null],
|
||||
@@ -160,14 +160,14 @@
|
||||
[0, "은서", null, 0, null, 68, 63, 60, 0, 160, 250, null, null],
|
||||
[0, "다영", null, 0, null, 71, 60, 62, 0, 160, 250, null, null],
|
||||
[0, "다원", null, 0, null, 65, 60, 60, 0, 160, 250, null, null],
|
||||
[0, "우주소녀수빈", null, 0, null, 66, 61, 61, 0, 160, 250, null, null],
|
||||
[0, "우주소녀 수빈", null, 0, null, 66, 61, 61, 0, 160, 250, null, null],
|
||||
[0, "선의", null, 0, null, 70, 62, 59, 0, 160, 250, null, null],
|
||||
[0, "우주소녀여름", null, 0, null, 58, 60, 60, 0, 160, 250, null, null],
|
||||
[0, "우주소녀 여름", null, 0, null, 58, 60, 60, 0, 160, 250, null, null],
|
||||
[0, "미기", null, 0, null, 63, 63, 61, 0, 160, 250, null, null],
|
||||
[0, "루다", null, 0, null, 81, 67, 66, 0, 160, 250, null, null],
|
||||
[0, "연정", null, 0, null, 68, 58, 83, 0, 160, 250, null, null],
|
||||
[0, "윤채경", null, 0, null, 80, 64, 70, 0, 160, 250, null, null],
|
||||
[0, "김채원", null, 0, null, 67, 60, 63, 0, 160, 250, null, null],
|
||||
[0, "에이프릴 김채원", null, 0, null, 67, 60, 63, 0, 160, 250, null, null],
|
||||
[0, "양예나", null, 0, null, 70, 61, 68, 0, 160, 250, null, null],
|
||||
[0, "레이첼", null, 0, null, 68, 62, 62, 0, 160, 250, null, null],
|
||||
[0, "이진솔", null, 0, null, 69, 56, 70, 0, 160, 250, null, null],
|
||||
@@ -183,7 +183,7 @@
|
||||
[0, "가은", null, 0, null, 60, 59, 63, 0, 160, 250, null, null],
|
||||
[0, "가희", null, 0, null, 67, 90, 62, 0, 160, 250, null, null],
|
||||
[0, "전효성", null, 0, null, 88, 87, 84, 0, 160, 250, null, null],
|
||||
[0, "송가은", null, 0, null, 80, 68, 77, 0, 160, 250, null, null],
|
||||
[0, "송지은", null, 0, null, 80, 68, 77, 0, 160, 250, null, null],
|
||||
[0, "정하나", null, 0, null, 68, 63, 70, 0, 160, 250, null, null],
|
||||
[0, "한선화", null, 0, null, 79, 59, 71, 0, 160, 250, null, null],
|
||||
[0, "베이비소울", null, 0, null, 71, 60, 70, 0, 160, 250, null, null],
|
||||
@@ -207,7 +207,7 @@
|
||||
[0, "혜린", null, 0, null, 86, 60, 86, 0, 160, 250, null, null],
|
||||
[0, "유니스", null, 0, null, 75, 58, 73, 0, 160, 250, null, null],
|
||||
[0, "기희현", null, 0, null, 86, 66, 70, 0, 160, 250, null, null],
|
||||
[0, "다이아제니", null, 0, null, 71, 66, 68, 0, 160, 250, null, null],
|
||||
[0, "다이아 제니", null, 0, null, 71, 66, 68, 0, 160, 250, null, null],
|
||||
[0, "정채연", null, 0, null, 79, 63, 66, 0, 160, 250, null, null],
|
||||
[0, "은진", null, 0, null, 66, 67, 63, 0, 160, 250, null, null],
|
||||
[0, "예빈", null, 0, null, 68, 65, 67, 0, 160, 250, null, null],
|
||||
@@ -221,21 +221,21 @@
|
||||
[0, "세리", null, 0, null, 74, 73, 80, 0, 160, 250, null, null],
|
||||
[0, "아영", null, 0, null, 78, 76, 64, 0, 160, 250, null, null],
|
||||
[0, "우희", null, 0, null, 77, 77, 63, 0, 160, 250, null, null],
|
||||
[0, "달샤벳수빈", null, 0, null, 79, 74, 67, 0, 160, 250, null, null],
|
||||
[0, "달샤벳 수빈", null, 0, null, 79, 74, 67, 0, 160, 250, null, null],
|
||||
[0, "효은", null, 0, null, 72, 71, 69, 0, 160, 250, null, null],
|
||||
[0, "민희", null, 0, null, 69, 73, 66, 0, 160, 250, null, null],
|
||||
[0, "소영", null, 0, null, 64, 70, 65, 0, 160, 250, null, null],
|
||||
[0, "혜빈", null, 0, null, 62, 59, 66, 0, 160, 250, null, null],
|
||||
[0, "연우", null, 0, null, 76, 61, 63, 0, 160, 250, null, null],
|
||||
[0, "연우", null, 0, null, 82, 79, 63, 0, 160, 250, null, null],
|
||||
[0, "제인", null, 0, null, 72, 67, 61, 0, 160, 250, null, null],
|
||||
[0, "모모랜드태하", null, 0, null, 60, 60, 60, 0, 160, 250, null, null],
|
||||
[0, "모모랜드 태하", null, 0, null, 60, 64, 66, 0, 160, 250, null, null],
|
||||
[0, "나윤", null, 0, null, 62, 61, 63, 0, 160, 250, null, null],
|
||||
[0, "데이지", null, 0, null, 68, 63, 59, 0, 160, 250, null, null],
|
||||
[0, "데이지", null, 0, null, 68, 63, 68, 0, 160, 250, null, null],
|
||||
[0, "아인", null, 0, null, 72, 57, 69, 0, 160, 250, null, null],
|
||||
[0, "주이", null, 0, null, 40, 74, 56, 0, 160, 250, null, null],
|
||||
[0, "낸시", null, 0, null, 80, 69, 67, 0, 160, 250, null, null],
|
||||
[0, "낸시", null, 0, null, 86, 74, 67, 0, 160, 250, null, null],
|
||||
[0, "선예", null, 0, null, 80, 61, 78, 0, 160, 250, null, null],
|
||||
[0, "선미", null, 0, null, 80, 82, 70, 0, 160, 250, null, null],
|
||||
[0, "선미", null, 0, null, 80, 86, 70, 0, 160, 250, null, null],
|
||||
[0, "유빈", null, 0, null, 76, 69, 77, 0, 160, 250, null, null],
|
||||
[0, "혜림", null, 0, null, 69, 63, 67, 0, 160, 250, null, null],
|
||||
[0, "예은", null, 0, null, 70, 61, 80, 0, 160, 250, null, null],
|
||||
@@ -247,14 +247,14 @@
|
||||
[0, "재이", null, 0, null, 80, 70, 70, 0, 160, 250, null, null],
|
||||
[0, "린지", null, 0, null, 69, 68, 71, 0, 160, 250, null, null],
|
||||
[0, "예지", null, 0, null, 58, 63, 78, 0, 160, 250, null, null],
|
||||
[0, "피에스타혜미", null, 0, null, 66, 54, 59, 0, 160, 250, null, null],
|
||||
[0, "피에스타 혜미", null, 0, null, 66, 54, 59, 0, 160, 250, null, null],
|
||||
[0, "차오루", null, 0, null, 78, 73, 67, 0, 160, 250, null, null],
|
||||
[0, "민영", null, 0, null, 76, 72, 81, 0, 160, 250, null, null],
|
||||
[0, "브브걸유정", null, 0, null, 64, 73, 67, 0, 160, 250, null, null],
|
||||
[0, "브레이브걸스 유정", null, 0, null, 64, 73, 67, 0, 160, 250, null, null],
|
||||
[0, "은지", null, 0, null, 70, 73, 68, 0, 160, 250, null, null],
|
||||
[0, "브브걸유나", null, 0, null, 66, 76, 66, 0, 160, 250, null, null],
|
||||
[0, "브레브브걸스 유나", null, 0, null, 66, 76, 66, 0, 160, 250, null, null],
|
||||
[0, "하윤", null, 0, null, 71, 78, 69, 0, 160, 250, null, null],
|
||||
[0, "베리굿태하", null, 0, null, 78, 75, 78, 0, 160, 250, null, null],
|
||||
[0, "베리굿 태하", null, 0, null, 78, 75, 78, 0, 160, 250, null, null],
|
||||
[0, "조현", null, 0, null, 79, 78, 72, 0, 160, 250, null, null],
|
||||
[0, "서율", null, 0, null, 68, 63, 62, 0, 160, 250, null, null],
|
||||
[0, "다예", null, 0, null, 70, 62, 64, 0, 160, 250, null, null],
|
||||
@@ -267,7 +267,7 @@
|
||||
[0, "이희진", null, 0, null, 63, 54, 78, 0, 160, 250, null, null],
|
||||
[0, "유지", null, 0, null, 72, 59, 73, 0, 160, 250, null, null],
|
||||
[0, "다혜", null, 0, null, 70, 67, 63, 0, 160, 250, null, null],
|
||||
[0, "베스티혜연", null, 0, null, 64, 63, 70, 0, 160, 250, null, null],
|
||||
[0, "베스티 혜연", null, 0, null, 64, 63, 70, 0, 160, 250, null, null],
|
||||
[0, "해령", null, 0, null, 81, 70, 76, 0, 160, 250, null, null],
|
||||
[0, "김보아", null, 0, null, 69, 63, 86, 0, 160, 250, null, null],
|
||||
[0, "박시현", null, 0, null, 73, 62, 66, 0, 160, 250, null, null],
|
||||
@@ -291,7 +291,7 @@
|
||||
[0, "김예원", null, 0, null, 62, 57, 58, 0, 160, 250, null, null],
|
||||
[0, "서인영", null, 0, null, 73, 78, 68, 0, 160, 250, null, null],
|
||||
[0, "차희", null, 0, null, 71, 59, 80, 0, 160, 250, null, null],
|
||||
[0, "멜로디유민", null, 0, null, 79, 55, 78, 0, 160, 250, null, null],
|
||||
[0, "멜로디 유민", null, 0, null, 79, 55, 78, 0, 160, 250, null, null],
|
||||
[0, "예인", null, 0, null, 78, 63, 78, 0, 160, 250, null, null],
|
||||
[0, "여은", null, 0, null, 70, 57, 80, 0, 160, 250, null, null],
|
||||
[0, "오승희", null, 0, null, 73, 60, 69, 0, 160, 250, null, null],
|
||||
@@ -301,7 +301,7 @@
|
||||
[0, "장예은", null, 0, null, 70, 76, 66, 0, 160, 250, null, null],
|
||||
[0, "엘키", null, 0, null, 78, 71, 60, 0, 160, 250, null, null],
|
||||
[0, "권은빈", null, 0, null, 76, 73, 68, 0, 160, 250, null, null],
|
||||
[0, "프리스틴나영", null, 0, null, 73, 75, 70, 0, 160, 250, null, null],
|
||||
[0, "프리스틴 나영", null, 0, null, 73, 75, 70, 0, 160, 250, null, null],
|
||||
[0, "로아", null, 0, null, 68, 71, 61, 0, 160, 250, null, null],
|
||||
[0, "유하", null, 0, null, 70, 68, 65, 0, 160, 250, null, null],
|
||||
[0, "은우", null, 0, null, 72, 67, 63, 0, 160, 250, null, null],
|
||||
@@ -312,9 +312,9 @@
|
||||
[0, "시연", null, 0, null, 66, 62, 66, 0, 160, 250, null, null],
|
||||
[0, "카일라", null, 0, null, 60, 69, 60, 0, 160, 250, null, null],
|
||||
[0, "지유", null, 0, null, 72, 63, 66, 0, 160, 250, null, null],
|
||||
[0, "라니아혜미", null, 0, null, 66, 63, 61, 0, 160, 250, null, null],
|
||||
[0, "라니아 혜미", null, 0, null, 66, 63, 61, 0, 160, 250, null, null],
|
||||
[0, "지은", null, 0, null, 61, 60, 56, 0, 160, 250, null, null],
|
||||
[0, "라니아유민", null, 0, null, 68, 63, 66, 0, 160, 250, null, null],
|
||||
[0, "라니아 유민", null, 0, null, 68, 63, 66, 0, 160, 250, null, null],
|
||||
[0, "따보", null, 0, null, 58, 60, 57, 0, 160, 250, null, null],
|
||||
[0, "제니", null, 0, null, 62, 51, 81, 0, 160, 250, null, null],
|
||||
[0, "건지", null, 0, null, 72, 53, 84, 0, 160, 250, null, null],
|
||||
@@ -322,17 +322,17 @@
|
||||
[0, "나리", null, 0, null, 84, 86, 80, 0, 160, 250, null, null],
|
||||
[0, "지애", null, 0, null, 63, 81, 72, 0, 160, 250, null, null],
|
||||
[0, "우주", null, 0, null, 67, 86, 69, 0, 160, 250, null, null],
|
||||
[0, "와썹수진", null, 0, null, 64, 80, 73, 0, 160, 250, null, null],
|
||||
[0, "타히티민재", null, 0, null, 62, 63, 66, 0, 160, 250, null, null],
|
||||
[0, "와썹 수진", null, 0, null, 64, 80, 73, 0, 160, 250, null, null],
|
||||
[0, "타히티 민재", null, 0, null, 62, 63, 66, 0, 160, 250, null, null],
|
||||
[0, "미소", null, 0, null, 63, 60, 61, 0, 160, 250, null, null],
|
||||
[0, "타히티지수", null, 0, null, 61, 57, 67, 0, 160, 250, null, null],
|
||||
[0, "타히티 지수", null, 0, null, 61, 57, 67, 0, 160, 250, null, null],
|
||||
[0, "아리", null, 0, null, 72, 69, 64, 0, 160, 250, null, null],
|
||||
[0, "제리", null, 0, null, 66, 61, 68, 0, 160, 250, null, null],
|
||||
[0, "아유미", null, 0, null, 80, 68, 69, 0, 160, 250, null, null],
|
||||
[0, "혜승", null, 0, null, 68, 57, 71, 0, 160, 250, null, null],
|
||||
[0, "하린", null, 0, null, 70, 60, 66, 0, 160, 250, null, null],
|
||||
[0, "황정음", null, 0, null, 79, 55, 72, 0, 160, 250, null, null],
|
||||
[0, "슈가수진", null, 0, null, 83, 54, 63, 0, 160, 250, null, null],
|
||||
[0, "슈가 수진", null, 0, null, 83, 54, 63, 0, 160, 250, null, null],
|
||||
[0, "산다라박", null, 0, null, 80, 66, 64, 0, 160, 250, null, null],
|
||||
[0, "씨엘", null, 0, null, 40, 88, 77, 0, 160, 250, null, null],
|
||||
[0, "박봄", null, 0, null, 55, 60, 73, 0, 160, 250, null, null],
|
||||
@@ -351,14 +351,32 @@
|
||||
[0, "엘린", null, 0, null, 71, 61, 63, 0, 160, 250, null, null],
|
||||
[0, "소율", null, 0, null, 70, 66, 64, 0, 160, 250, null, null],
|
||||
[0, "금미", null, 0, null, 73, 63, 61, 0, 160, 250, null, null],
|
||||
[0, "크레용팝초아", null, 0, null, 72, 67, 65, 0, 160, 250, null, null],
|
||||
[0, "크레용팝 초아", null, 0, null, 72, 67, 65, 0, 160, 250, null, null],
|
||||
[0, "웨이", null, 0, null, 70, 65, 60, 0, 160, 250, null, null],
|
||||
[0, "쥬니엘", null, 0, null, 80, 46, 81, 0, 160, 250, null, null],
|
||||
[0, "이민", null, 0, null, 64, 50, 83, 0, 160, 250, null, null],
|
||||
[0, "크리스탈채", null, 0, null, 72, 51, 84, 0, 160, 250, null, null],
|
||||
[0, "윤미래", null, 0, null, 57, 80, 102, 0, 160, 250, null, null],
|
||||
[0, "애니", null, 0, null, 58, 92, 88, 0, 160, 250, null, null],
|
||||
[0, "NS윤지", null, 0, null, 86, 84, 78, 0, 160, 250, null, null]
|
||||
[0, "NS윤지", null, 0, null, 86, 84, 78, 0, 160, 250, null, null],
|
||||
[0, "미연", null, 0, null, 89, 69, 88, 0, 160, 250, null, null],
|
||||
[0, "민니", null, 0, null, 73, 59, 66, 0, 160, 250, null, null],
|
||||
[0, "여자아이들 수진", null, 0, null, 70, 66, 71, 0, 160, 250, null, null],
|
||||
[0, "여자아이들 소연", null, 0, null, 74, 81, 90, 0, 160, 250, null, null],
|
||||
[0, "우기", null, 0, null, 67, 70, 66, 0, 160, 250, null, null],
|
||||
[0, "슈화", null, 0, null, 71, 59, 78, 0, 160, 250, null, null],
|
||||
[0, "장원영", null, 0, null, 88, 79, 78, 0, 160, 250, null, null],
|
||||
[0, "미야와키 사쿠라", null, 0, null, 84, 69, 64, 0, 160, 250, null, null],
|
||||
[0, "조유리", null, 0, null, 81, 64, 87, 0, 160, 250, null, null],
|
||||
[0, "최예나", null, 0, null, 79, 74, 68, 0, 160, 250, null, null],
|
||||
[0, "안유진", null, 0, null, 78, 66, 70, 0, 160, 250, null, null],
|
||||
[0, "야부키 나코", null, 0, null, 75, 63, 82, 0, 160, 250, null, null],
|
||||
[0, "권은비", null, 0, null, 79, 77, 70, 0, 160, 250, null, null],
|
||||
[0, "강혜원", null, 0, null, 73, 70, 68, 0, 160, 250, null, null],
|
||||
[0, "혼다 히토미", null, 0, null, 70, 71, 70, 0, 160, 250, null, null],
|
||||
[0, "아이즈원 김채원", null, 0, null, 72, 65, 73, 0, 160, 250, null, null],
|
||||
[0, "김민주", null, 0, null, 80, 66, 74, 0, 160, 250, null, null],
|
||||
[0, "이채연", null, 0, null, 71, 87, 65, 0, 160, 250, null, null]
|
||||
],
|
||||
"general_ex":[
|
||||
],
|
||||
|
||||
+94
-119
@@ -3,59 +3,55 @@
|
||||
"startYear": 180,
|
||||
"history": [
|
||||
"<C>●</>180년 1월:<L><b>【이벤트】</b></>제작자: 강서유서.",
|
||||
"<C>●</>180년 1월:<L><b>【가상모드15】</b>애니집결!</>",
|
||||
"<C>●</>180년 1월:<L><b>【이벤트】</b></>애니의 등장인물들이 한곳에서 자웅을 겨룬다!"
|
||||
"<C>●</>180년 1월:<L><b>【가상모드16】</b>애니집결</>",
|
||||
"<C>●</>180년 1월:<L><b>【이벤트】</b></>더더욱 많아진 애니 캐릭터들이 삼국지에서 자웅을 겨룬다"
|
||||
],
|
||||
"stat": {
|
||||
"total": 220,
|
||||
"min": 40,
|
||||
"max": 95,
|
||||
"npcMax": 95
|
||||
},
|
||||
"iconPath": "애니집결",
|
||||
"map": {
|
||||
"mapName": "miniche"
|
||||
"max": 90
|
||||
},
|
||||
"iconPath": ".",
|
||||
"fiction": 1,
|
||||
"nation":[
|
||||
|
||||
],
|
||||
"diplomacy":[],
|
||||
"general":[
|
||||
[0, "기타노시오리", null, 0, null, 96, 92, 93, 0, 160, 333, "왕좌", null],
|
||||
[0, "기타노시오리", null, 0, null, 96, 92, 93, 0, 160, 333, null, "위압", "언니는 내가 지켜….!"],
|
||||
[0, "카나메 마도카", null, 0, null, 86, 50, 77, 0, 160, 300, null, "집중", "친구들에겐 비밀이야★"],
|
||||
[0, "토모에 마미", null, 0, null, 70, 74, 60, 0, 165, 240, null, null, "이젠 아무것도 두렵지 않아"],
|
||||
[0, "아케미 호무라", null, 0, null, 76, 64, 80, 0, 160, 333, null, "집중", "이게바로…사랑이야..♥"],
|
||||
[0, "사쿠라 쿄코", null, 0, null, 68, 77, 54, 0, 160, 240, null, null],
|
||||
[0, "미키 사야카", null, 0, null, 80, 77, 62, 0, 160, 240, null, null, "나는 정말…바보"],
|
||||
[0, "토모에 마미", null, 0, null, 70, 74, 60, 0, 165, 240, null, null, "마법소녀가 마녀가 된다면 죽을수밖에 없잖아..!! 너도! 나도!"],
|
||||
[0, "아케미 호무라", null, 0, null, 76, 64, 80, 0, 160, 333, null, "집중", "원래 기적이라는건 인간의 생명으로도 사고팔수 있는게 아니야"],
|
||||
[0, "사쿠라 쿄코", null, 0, null, 68, 77, 54, 0, 160, 240, null, null, "이제 겨우…친구가 되었는데…."],
|
||||
[0, "미키 사야카", null, 0, null, 80, 77, 62, 0, 160, 240, null, null, "이거 실례네~? 나는 네가 알고 있는 그대로의 나야 전.학.,생~?"],
|
||||
[0, "모모에 나기사", null, 0, null, 72, 80, 70, 0, 160, 240, null, null, "나기사는 단지 치즈가 먹고싶엇던것 뿐이에요!"],
|
||||
[0, "미쿠니 오리코", null, 0, null, 65, 33, 94, 0, 160, 240, null, null, "이세계에 최악의 절망을."],
|
||||
[0, "미쿠니 오리코", null, 0, null, 65, 33, 94, 0, 160, 240, null, null, "당신에게 제대로 말하고 싶었어 미안해. 그리고 고마워."],
|
||||
[0, "쿠레 키리카", null, 0, null, 50, 80, 50, 0, 160, 240, null, null],
|
||||
[0, "치토세 유마", null, 0, null, 69, 74, 70, 0, 160, 333, null, null],
|
||||
[0, "치토세 유마", null, 0, null, 69, 74, 70, 0, 160, 333, null, null, "언젠가 모두 마녀가 되지만. 그건 지금이 아니야."],
|
||||
[0, "큐베", null, 0, null, 22, 14, 64, 0, 160, 333, null, null, "나랑 계약해서 마녀가 되어줘!"],
|
||||
[0, "사사", null, 0, null, 64, 78, 72, 0, 160, 333, null, null],
|
||||
[0, "코이토", null, 0, null, 65, 70, 74, 0, 160, 333, null, null],
|
||||
[0, "코마키", null, 0, null, 80, 75, 49, 0, 160, 333, null, null],
|
||||
[0, "유키 사사", null, 0, null, 64, 78, 72, 0, 160, 333, null, null],
|
||||
[0, "코이토", null, 0, null, 65, 70, 74, 0, 160, 333, null, null, "미쿠니 선배가 증오해야할 적인가 구세주인가 그답이 나오질 않아."],
|
||||
[0, "코마키", null, 0, null, 80, 75, 49, 0, 160, 333, null, null, "너 말이야 냉담한 주제에 이상한 곳에서 사려 깊구나"],
|
||||
[0, "파브", null, 0, null, 40, 3, 32, 0, 160, 300, null, null, "지금부터 마을의 마법소녀를 반으로 줄여야 한다퐁!"],
|
||||
[0, "스노우화이트", null, 0, null, 86, 84, 79, 0, 160, 333, null, "돌격", "사람들을 도울수 있는게 기뻐서!"],
|
||||
[0, "프흐레", null, 0, null, 84, 25, 100, 0, 160, 333, null, "집중", "괜찮아...... 그리고 데류지 에게 전달해 줘...... 원하는 나의 요구"],
|
||||
[0, "섀도게일", null, 0, null, 52, 75, 74, 0, 160, 333, null, null],
|
||||
[0, "7753.0", null, 0, null, 64, 19, 84, 0, 160, 333, null, null, "전 인사부문소속의 7753이라고 합니다"],
|
||||
[0, "나나코상", null, 0, null, 64, 19, 84, 0, 160, 333, null, null, "전 인사부문소속의 7753이라고 합니다"],
|
||||
[0, "인페르노", null, 0, null, 82, 85, 60, 0, 160, 399, null, null, "저녀석..해버려줘,,,,마법소녀…사냥….그럼….가.."],
|
||||
[0, "룰러", null, 0, null, 70, 30, 80, 0, 160, 333, null, null, "룰러의 이름으로 명한다"],
|
||||
[0, "네무링", null, 0, null, 71, 63, 58, 0, 160, 333, null, null, "공주님이 되어버리면 되는거야."],
|
||||
[0, "크랑테일", null, 0, null, 75, 86, 72, 0, 160, 333, null, null, "라즐리느와 페치카가 살려준 난...... 못 죽어"],
|
||||
[0, "리플", null, 0, null, 59, 81, 70, 0, 160, 299, null, null],
|
||||
[0, "리플", null, 0, null, 59, 81, 70, 0, 160, 299, null, null, "톱스피드를 그런식으로 말하지마…!!!"],
|
||||
[0, "글라시아네", null, 0, null, 42, 20, 85, 0, 160, 333, null, null, "죽이지마! 죽고싶지 않아!!"],
|
||||
[0, "페치카", null, 0, null, 71, 33, 75, 0, 160, 333, null, null, "그래도…이번엔 누군가를 구할수있어서..행복해요…"],
|
||||
[0, "하무엘", null, 0, null, 73, 23, 65, 0, 160, 333, null, null, "푸크푹이 유적안으로..윽…들어가고…있습니다…"],
|
||||
[0, "타마", null, 0, null, 76, 88, 27, 0, 160, 300, null, null],
|
||||
[0, "이누보자키 타마", null, 0, null, 76, 88, 27, 0, 160, 300, null, null, "어디서 부터 잘못된걸까…."],
|
||||
[0, "파르", null, 0, null, 30, 10, 82, 0, 160, 300, null, null, "여기서 벌어진 일들을 모두 마법나라에 고발했퐁!"],
|
||||
[0, "타카마치 나노하", null, 0, null, 85, 105, 85, 0, 160, 300, "패권", "위압", "잠깐 머리좀 식힐까?"],
|
||||
[0, "페이트", null, 0, null, 75, 89, 73, 0, 160, 300, null, null],
|
||||
[0, "페이트t,h,t", null, 0, null, 75, 89, 73, 0, 160, 300, null, null],
|
||||
[0, "타카마치 비비오", null, 0, null, 75, 70, 70, 0, 160, 300, null, null, "엄마를 돌려줘!!"],
|
||||
[0, "린디", null, 0, null, 78, 50, 50, 0, 160, 300, null, null],
|
||||
[0, "크로노", null, 0, null, 73, 27, 58, 0, 160, 300, null, null],
|
||||
[0, "린디 하라오운", null, 0, null, 78, 50, 50, 0, 160, 300, null, null],
|
||||
[0, "크로노 하라오운", null, 0, null, 73, 27, 58, 0, 160, 300, null, null, "시공관리국 소속의 집무관 크로노 하라오운이다!!"],
|
||||
[0, "스바루 나카지마", null, 0, null, 53, 50, 64, 0, 160, 300, null, null],
|
||||
[0, "긴카 나카지마", null, 0, null, 73, 80, 52, 0, 160, 300, null, null],
|
||||
[0, "캐로", null, 0, null, 71, 63, 74, 0, 160, 300, null, null],
|
||||
@@ -79,7 +75,7 @@
|
||||
[0, "루비아", null, 0, null, 56, 40, 50, 0, 160, 300, null, "상재"],
|
||||
[0, "에미야 시로", null, 0, null, 78, 40, 70, 0, 160, 300, null, null],
|
||||
[0, "타이가", null, 0, null, 55, 50, 40, 0, 160, 300, null, null],
|
||||
[0, "루비", null, 0, null, 49, 20, 70, 0, 160, 300, null, "척사"],
|
||||
[0, "루비", null, 0, null, 49, 20, 70, 0, 160, 300, null, null],
|
||||
[0, "사파이어", null, 0, null, 49, 55, 86, 0, 160, 300, null, null],
|
||||
[0, "세라", null, 0, null, 50, 77, 30, 0, 160, 300, null, null],
|
||||
[0, "리즈", null, 0, null, 50, 80, 30, 0, 160, 300, null, null],
|
||||
@@ -89,28 +85,28 @@
|
||||
[0, "로드 엘멜로이", null, 0, null, 75, 43, 90, 0, 160, 300, null, null, "아니,나는 그의 신하다"],
|
||||
[0, "후루카와 나기사", null, 0, null, 85, 30, 85, 0, 160, 300, null, null, "경단~ 경단~ 경단 경단 경단 경단 대가족~"],
|
||||
[0, "오카자키 토모야", null, 0, null, 85, 84, 75, 0, 160, 300, null, null],
|
||||
[0, "후지바야시쿄", null, 0, null, 80, 85, 82, 0, 160, 300, null, "무쌍", "요헤이! 또 그러는 거야??"],
|
||||
[0, "후지바야시쿄", null, 0, null, 80, 85, 82, 0, 160, 300, null, "무쌍"],
|
||||
[0, "후지바야시료", null, 0, null, 74, 30, 77, 0, 160, 300, null, null],
|
||||
[0, "사카가미 토모요", null, 0, null, 80, 92, 87, 0, 160, 300, null, "무쌍"],
|
||||
[0, "히이라기 캇페이", null, 0, null, 75, 55, 18, 0, 160, 300, null, null],
|
||||
[0, "스노하라 요헤이", null, 0, null, 69, 60, 30, 0, 160, 300, null, "견고", "그리고 변기커버!"],
|
||||
[0, "스노하라 메이", null, 0, null, 70, 70, 70, 0, 160, 300, null, null, "저희 못난 오빠떔에 고생이 많으십니다"],
|
||||
[0, "후루카와 사나에", null, 0, null, 80, 40, 75, 0, 160, 300, null, null],
|
||||
[0, "후루카와 아키오", null, 0, null, 76, 86, 70, 0, 160, 300, null, "무쌍"],
|
||||
[0, "오카자키 나오유키", null, 0, null, 70, 20, 55, 0, 160, 300, null, null, "토모야.. 고맙다."],
|
||||
[0, "후루카와 사나에", null, 0, null, 80, 40, 75, 0, 160, 300, null, null, "제빵은…제빵은…xx하는데나 써야되는군요…!"],
|
||||
[0, "후루카와 아키오", null, 0, null, 76, 86, 70, 0, 160, 300, null, "무쌍", "꿈을 이뤄라!! 나기사!!!!!!!!!!!"],
|
||||
[0, "오카자키나오유키", null, 0, null, 70, 20, 55, 0, 160, 300, null, null, "토모야.. 고맙다."],
|
||||
[0, "이치노세 코토미", null, 0, null, 74, 52, 78, 0, 160, 300, null, null],
|
||||
[0, "오카자키 우시오", null, 0, null, 82, 55, 83, 0, 160, 300, null, null, "안녕.. 아빠…"],
|
||||
[0, "니시나 리에", null, 0, null, 77, 37, 82, 0, 160, 300, null, null],
|
||||
[0, "미야자와 유키네", null, 0, null, 78, 30, 85, 0, 160, 300, null, null],
|
||||
[0, "시마 카츠키", null, 0, null, 72, 49, 63, 0, 160, 300, null, null],
|
||||
[0, "사가라 미사에", null, 0, null, 85, 87, 85, 0, 160, 300, null, "위압"],
|
||||
[0, "코즈키 미유", null, 0, null, 77, 73, 64, 0, 160, 300, null, null, "혹시 루에게 고백이라도 한거니?"],
|
||||
[0, "사이온지 카나타", null, 0, null, 75, 70, 69, 0, 160, 300, null, null],
|
||||
[0, "사이온지 미우", null, 0, null, 75, 49, 76, 0, 160, 300, null, null, "엄마! 쉿! 쉬잇!!"],
|
||||
[0, "하나코마치 크리스", null, 0, null, 67, 80, 60, 0, 160, 300, null, "무쌍", "미유랑 카나타가 붙어있어…."],
|
||||
[0, "하나코마치 모모카", null, 0, null, 80, 60, 55, 0, 160, 300, null, null, "마이 달링! 루!"],
|
||||
[0, "시마 카츠키", null, 0, null, 72, 49, 63, 0, 160, 300, null, null, "주인님 주인님 지금의 주인님은 그날의 주인님과는 다른 사람이지만 너무나 상냥한 사람이에요"],
|
||||
[0, "사가라 미사에", null, 0, null, 85, 87, 85, 0, 160, 300, null, "위압", "언제까지나 나를 사랑해줘. 시마 카츠키."],
|
||||
[0, "코즈키 미유", null, 0, null, 77, 73, 64, 0, 160, 300, null, null, "이제는 알거같아… 자식을 싫어하는 부모는 없다는걸,"],
|
||||
[0, "사이온지 카나타", null, 0, null, 75, 70, 69, 0, 160, 300, null, null, "내가 먼저 말할께 좋아해 미유."],
|
||||
[0, "사이온지 미우", null, 0, null, 41, 11, 19, 0, 160, 300, null, null, "엄마도 아빠도 우리들도 모두, 모든것은… 이곳에서 시작됫어."],
|
||||
[0, "하나코마치크리스", null, 0, null, 67, 90, 60, 0, 160, 300, null, "무쌍", "미유랑 카나타가 붙어있어…."],
|
||||
[0, "하나코마치모모카", null, 0, null, 80, 60, 55, 0, 160, 300, null, null, "마이 달링! 루!"],
|
||||
[0, "쿠로스 산타", null, 0, null, 54, 10, 30, 0, 160, 300, "유지", null],
|
||||
[0, "하나코마치 쿠리타", null, 0, null, 46, 14, 10, 0, 160, 300, null, null],
|
||||
[0, "하나코마치쿠리타", null, 0, null, 46, 14, 10, 0, 160, 300, null, null, "미유씨는 제가 싫으신가요?"],
|
||||
[0, "고니시 아야", null, 0, null, 67, 15, 77, 0, 160, 300, null, null],
|
||||
[0, "루", null, 0, null, 81, 50, 73, 0, 160, 300, null, null, "다아!★"],
|
||||
[0, "완냐", null, 0, null, 69, 48, 75, 0, 160, 300, null, null],
|
||||
@@ -118,11 +114,11 @@
|
||||
[0, "야보시 세이야", null, 0, null, 70, 50, 70, 0, 160, 300, null, null],
|
||||
[0, "야보시 루이", null, 0, null, 75, 73, 71, 0, 160, 300, null, null],
|
||||
[0, "도리안", null, 0, null, 65, 49, 86, 0, 160, 300, null, "발명"],
|
||||
[0, "키위", null, 0, null, 66, 33, 70, 0, 160, 300, null, "상재"],
|
||||
[0, "키위", null, 0, null, 66, 33, 70, 0, 160, 300, null, "상재", "와…왕자님…."],
|
||||
[0, "구아바", null, 0, null, 45, 49, 51, 0, 160, 300, null, null],
|
||||
[0, "히카리가오카", null, 0, null, 70, 49, 77, 0, 160, 300, null, null],
|
||||
[0, "코즈키유우", null, 0, null, 85, 33, 75, 0, 160, 300, null, "발명"],
|
||||
[0, "코즈키미키", null, 0, null, 88, 33, 80, 0, 160, 300, null, null],
|
||||
[0, "코즈키미키", null, 0, null, 88, 33, 80, 0, 160, 300, null, null, "그래도 이래뵈도 걱정되서 온거라고..?"],
|
||||
[0, "란", null, 0, null, 80, 72, 40, 0, 160, 300, null, null],
|
||||
[0, "하루네 아이라", null, 0, null, 84, 45, 74, 0, 160, 300, null, null, "오로라~~~~~~~~~라이징~ 드리임!"],
|
||||
[0, "아마미야 리즈무", null, 0, null, 80, 25, 82, 0, 160, 300, null, null],
|
||||
@@ -167,7 +163,7 @@
|
||||
[0, "모리 란", null, 0, null, 67, 100, 82, 0, 160, 300, null, "돌격"],
|
||||
[0, "스즈키 소노코", null, 0, null, 66, 55, 86, 0, 160, 300, null, "상재"],
|
||||
[0, "쿄고쿠 마코토", null, 0, null, 79, 108, 52, 0, 160, 300, null, "무쌍"],
|
||||
[0, "진", null, 0, null, 79, 87, 90, 0, 160, 300, null, "돌격"],
|
||||
[0, "진", null, 0, null, 79, 87, 90, 0, 160, 300, null, "돌격", "시체가 없다는건 죽지 않았다는 거지"],
|
||||
[0, "베르무트", null, 0, null, 75, 67, 96, 0, 160, 300, null, null, "A secret makes a woman woman…"],
|
||||
[0, "키얀티", null, 0, null, 56, 80, 49, 0, 160, 300, null, "저격"],
|
||||
[0, "코른", null, 0, null, 57, 84, 55, 0, 160, 300, null, "저격"],
|
||||
@@ -214,7 +210,7 @@
|
||||
[0, "후우란", null, 0, null, 82, 30, 90, 0, 160, 300, null, null],
|
||||
[0, "파이렌", null, 0, null, 84, 85, 64, 0, 160, 300, null, "기병"],
|
||||
[0, "파이탄", null, 0, null, 19, 10, 67, 0, 160, 300, null, null],
|
||||
[0, "쿠탄", null, 0, null, 7, 3, 31, 0, 160, 300, null, null],
|
||||
[999, "쿠우탄", null, 0, null, 1, 1, 1, 0, 160, 300, null, null],
|
||||
[0, "엔야", null, 0, null, 79, 91, 38, 0, 160, 300, null, null],
|
||||
[0, "키쿄우", null, 0, null, 86, 90, 72, 0, 160, 300, null, null],
|
||||
[0, "유도", null, 0, null, 19, 11, 52, 0, 160, 300, null, null],
|
||||
@@ -223,10 +219,10 @@
|
||||
[0, "이이셰", null, 0, null, 87, 94, 41, 0, 160, 300, null, null, "지력 36이 지력100을 이겼다!"],
|
||||
[0, "마치", null, 0, null, 77, 23, 94, 0, 160, 300, null, null],
|
||||
[0, "카린", null, 0, null, 96, 75, 92, 0, 160, 300, null, "반계"],
|
||||
[0, "슌란", null, 0, null, 85, 89, 20, 0, 160, 300, null, "돌격"],
|
||||
[0, "슌란", null, 0, null, 85, 89, 10, 0, 160, 300, null, "돌격"],
|
||||
[0, "슈란", null, 0, null, 87, 92, 75, 0, 160, 300, null, "저격"],
|
||||
[0, "케이파", null, 0, null, 51, 14, 95, 0, 160, 300, null, "집중", "아아…카린님…!"],
|
||||
[0, "곽가린", null, 0, null, 67, 19, 97, 0, 160, 300, null, "신산"],
|
||||
[0, "케이파", null, 0, null, 62, 14, 95, 0, 160, 300, null, "집중", "아아…카린님…!"],
|
||||
[0, "곽가린", null, 0, null, 88, 19, 96, 0, 160, 300, null, "신산"],
|
||||
[0, "정욱후우", null, 0, null, 80, 35, 92, 0, 160, 300, null, null, "Zzzzz,,,,"],
|
||||
[0, "나기", null, 0, null, 80, 84, 53, 0, 160, 300, null, null],
|
||||
[0, "사와", null, 0, null, 83, 78, 63, 0, 160, 300, null, null],
|
||||
@@ -291,22 +287,22 @@
|
||||
[0, "츄츄", null, 0, null, 64, 70, 30, 0, 160, 300, null, null],
|
||||
[0, "모모", null, 0, null, 78, 70, 75, 0, 160, 300, null, null],
|
||||
[0, "쥐선인", null, 0, null, 90, 43, 94, 0, 160, 300, null, "환술", "고양이들에게 속지마라..!"],
|
||||
[0, "로리 로로나", null, 0, null, 86, 80, 78, 0, 160, 300, null, null, "토토리짱 나 모르겟어? 로로나야 로로나!"],
|
||||
[0, "토토리", null, 0, null, 85, 86, 93, 0, 160, 300, null, null, "역시.. 키가 작으시네요 쿠데리아상"],
|
||||
[0, "메루루", null, 0, null, 87, 75, 92, 0, 160, 300, null, null],
|
||||
[0, "쿠데리아", null, 0, null, 75, 68, 79, 0, 160, 300, null, "상재", "그렇게 부르지 말랬지!!"],
|
||||
[0, "스테르크", null, 0, null, 80, 102, 81, 0, 160, 300, null, "무쌍", "자 따라해봐 로.로.나"],
|
||||
[0, "아스트리드", null, 0, null, 39, 78, 96, 0, 160, 300, "유지", null, "난 아스트리드 젝시드. 너의 스승의 스승의 스승이다."],
|
||||
[0, "로리 로로나", null, 0, null, 85, 65, 70, 0, 160, 300, null, null, "토토리짱 나 모르겟어? 로로나야 로로나!"],
|
||||
[0, "토토리", null, 0, null, 86, 86, 90, 0, 160, 300, null, null, "역시.. 키가 작으시네요 쿠데리아상"],
|
||||
[0, "메루루", null, 0, null, 82, 75, 85, 0, 160, 300, null, null],
|
||||
[0, "쿠데리아", null, 0, null, 75, 81, 79, 0, 160, 300, null, "상재", "그렇게 부르지 말랬지!!"],
|
||||
[0, "스테르크", null, 0, null, 80, 104, 81, 0, 160, 300, null, "무쌍", "자 따라해봐 로.로.나"],
|
||||
[0, "아스트리드", null, 0, null, 39, 75, 96, 0, 160, 300, "유지", null, "난 아스트리드 젝시드. 너의 스승의 스승의 스승이다."],
|
||||
[0, "미미", null, 0, null, 78, 82, 76, 0, 160, 300, null, null],
|
||||
[0, "지노 크나프", null, 0, null, 72, 84, 70, 0, 160, 300, null, null],
|
||||
[0, "에스카", null, 0, null, 84, 75, 91, 0, 160, 300, null, null],
|
||||
[0, "에스카", null, 0, null, 84, 75, 90, 0, 160, 300, null, null],
|
||||
[0, "로직스", null, 0, null, 80, 85, 79, 0, 160, 300, null, null],
|
||||
[0, "소피", null, 0, null, 97, 82, 102, 0, 160, 300, null, "집중", "피리스, 연금술 해보지 않을래?"],
|
||||
[0, "플라흐타", null, 0, null, 84, 72, 106, 0, 160, 300, null, "환술"],
|
||||
[0, "피리스", null, 0, null, 86, 66, 87, 0, 160, 300, null, "반계", "소피선생님..! 플라흐타상!!"],
|
||||
[0, "일메리아", null, 0, null, 90, 58, 85, 0, 160, 300, null, null],
|
||||
[0, "리디", null, 0, null, 77, 79, 82, 0, 160, 300, null, null],
|
||||
[0, "수르", null, 0, null, 79, 77, 84, 0, 160, 300, null, null],
|
||||
[0, "소피", null, 0, null, 97, 82, 98, 0, 160, 300, null, "집중", "피리스, 연금술 해보지 않을래?"],
|
||||
[0, "플라흐타", null, 0, null, 84, 72, 101, 0, 160, 300, null, "환술"],
|
||||
[0, "피리스", null, 0, null, 86, 66, 85, 0, 160, 300, null, "반계", "소피선생님..! 플라흐타상!!"],
|
||||
[0, "일메리아", null, 0, null, 88, 58, 87, 0, 160, 300, null, null],
|
||||
[0, "리디", null, 0, null, 77, 76, 80, 0, 160, 300, null, null],
|
||||
[0, "수르", null, 0, null, 79, 70, 84, 0, 160, 300, null, null],
|
||||
[0, "리아나", null, 0, null, 72, 78, 67, 0, 160, 300, null, null],
|
||||
[0, "이츠카시도", null, 0, null, 94, 82, 80, 0, 160, 300, null, "환술", "린~~~~네~~~!!!!!!!!!!!!!!!!!!!"],
|
||||
[0, "이츠카코토리", null, 0, null, 87, 91, 78, 0, 160, 300, null, null],
|
||||
@@ -380,7 +376,7 @@
|
||||
[0, "큐어 하트", null, 0, null, 93, 90, 95, 0, 160, 300, null, "위압"],
|
||||
[0, "큐어 다이아몬드", null, 0, null, 86, 88, 90, 0, 160, 300, null, null],
|
||||
[0, "큐어 로제타", null, 0, null, 80, 80, 85, 0, 160, 300, null, "상재"],
|
||||
[0, "큐어소드", null, 0, null, 79, 87, 82, 0, 160, 300, null, "착사"],
|
||||
[0, "큐어소드", null, 0, null, 79, 87, 82, 0, 160, 300, null, "척사"],
|
||||
[0, "큐어에이스", null, 0, null, 75, 83, 77, 0, 160, 300, null, null],
|
||||
[0, "하세가와스바루", null, 0, null, 86, 77, 80, 0, 160, 300, null, null, "정말 초등학생은 최고야!!"],
|
||||
[0, "토모카", null, 0, null, 70, 64, 82, 0, 160, 300, null, null, "잘부탁 드려요 하세가와 코치님!"],
|
||||
@@ -419,23 +415,23 @@
|
||||
[0, "메어리", null, 0, null, 70, 88, 78, 0, 160, 300, null, null],
|
||||
[0, "유우키유우나", null, 0, null, 88, 91, 78, 0, 160, 300, null, null, "유우키 유우나! 용자부소속이야!"],
|
||||
[0, "토고미모리", null, 0, null, 88, 92, 95, 0, 160, 300, null, null],
|
||||
[0, "후우", null, 0, null, 85, 90, 80, 0, 160, 300, null, null],
|
||||
[0, "이츠키", null, 0, null, 87, 80, 70, 0, 160, 300, null, null],
|
||||
[0, "이누보자키 후우", null, 0, null, 85, 90, 80, 0, 160, 300, null, null],
|
||||
[0, "이누보자키이츠키", null, 0, null, 87, 80, 70, 0, 160, 300, null, null],
|
||||
[0, "미요시카린", null, 0, null, 85, 88, 80, 0, 160, 300, null, null],
|
||||
[0, "노기소노코", null, 0, null, 81, 81, 78, 0, 160, 300, null, null],
|
||||
[0, "미노와긴", null, 0, null, 83, 87, 67, 0, 160, 300, null, null],
|
||||
[0, "아키선생님", null, 0, null, 85, 39, 88, 0, 160, 300, null, "귀모"],
|
||||
[0, "신수", null, 0, null, 97, 69, 99, 0, 160, 300, null, "집증"],
|
||||
[0, "신수", null, 0, null, 97, 69, 99, 0, 160, 300, null, "집중"],
|
||||
[0, "노기와카바", null, 0, null, 87, 85, 79, 0, 160, 300, null, null],
|
||||
[0, "우에사토히나타", null, 0, null, 80, 19, 85, 0, 160, 300, null, "귀모"],
|
||||
[0, "이요지마안즈", null, 0, null, 76, 88, 86, 0, 160, 295, null, "저격"],
|
||||
[0, "도이타마코", null, 0, null, 72, 89, 37, 0, 160, 300, null, "견고"],
|
||||
[0, "이요지마 안즈", null, 0, null, 76, 88, 86, 0, 160, 295, null, "궁병"],
|
||||
[0, "도이 타마코", null, 0, null, 72, 89, 37, 0, 160, 300, null, "견고"],
|
||||
[0, "코오리치카게", null, 0, null, 67, 90, 83, 0, 160, 300, null, null],
|
||||
[0, "타카시마유우나", null, 0, null, 72, 88, 75, 0, 160, 300, null, null, "군짱, 그러면 안되."],
|
||||
[0, "우타노", null, 0, null, 71, 83, 67, 0, 160, 300, null, "농업"],
|
||||
[0, "시라토리우타노", null, 0, null, 71, 83, 67, 0, 160, 300, null, "경작"],
|
||||
[0, "후지모리미토", null, 0, null, 70, 15, 81, 0, 160, 300, null, null],
|
||||
[0, "키리토", null, 0, null, 85, 91, 80, 0, 160, 300, null, "무쌍", "스타…버스트!!!...스트림!!!!!"],
|
||||
[0, "아스나", null, 0, null, 94, 89, 87, 0, 160, 300, null, "무쌍", "내…이름…어떻게 안거야??"],
|
||||
[0, "유우키아스나", null, 0, null, 94, 89, 87, 0, 160, 300, null, "무쌍", "내…이름…어떻게 안거야??"],
|
||||
[0, "린드", null, 0, null, 81, 72, 69, 0, 160, 300, null, null, "왜 디어벨 상을 죽게 내버려 뒀어!!"],
|
||||
[0, "키바오", null, 0, null, 88, 75, 80, 0, 160, 300, null, "통찰", "잠껀 기다려 보그레이!"],
|
||||
[0, "에길", null, 0, null, 75, 91, 73, 0, 160, 300, null, "상재", "싸게 사서 싸게 제공하는것이 우리가게의 모토지"],
|
||||
@@ -491,21 +487,21 @@
|
||||
[0, "키라츠바사", null, 0, null, 87, 33, 72, 0, 160, 300, null, null],
|
||||
[0, "유우키안쥬", null, 0, null, 80, 35, 77, 0, 160, 300, null, null],
|
||||
[0, "토노에레나", null, 0, null, 78, 39, 84, 0, 160, 300, null, null],
|
||||
[0, "타이요아카리", null, 0, null, 80, 80, 81, 0, 160, 300, null, null, "나 잊지 않을테니까! 후유나에대해 절대로 잊지 않을테니까!"],
|
||||
[0, "타이요 아카리", null, 0, null, 80, 80, 81, 0, 160, 300, null, null, "나 잊지 않을테니까! 휴우대해 절대로 잊지 않을테니까!"],
|
||||
[0, "츠쿠요미루나", null, 0, null, 72, 53, 82, 0, 160, 300, null, null],
|
||||
[0, "시로카네긴카", null, 0, null, 76, 85, 81, 0, 160, 300, null, "상재"],
|
||||
[0, "호시카와세이라", null, 0, null, 83, 86, 75, 0, 160, 300, null, "저격"],
|
||||
[0, "신자키휴우나", null, 0, null, 70, 90, 55, 0, 160, 300, null, "신중", "안녕 아카리. 아카리와 만나 행복했어…"],
|
||||
[0, "에티아", null, 0, null, 80, 72, 71, 0, 160, 300, null, null],
|
||||
[0, "아라벨", null, 0, null, 54, 60, 92, 0, 160, 300, null, null],
|
||||
[0, "신자키 휴우나", null, 0, null, 84, 65, 89, 0, 160, 300, null, "신중", "안녕 아카리. 아카리와 만나 행복했어…"],
|
||||
[0, "에티아 비스콘티", null, 0, null, 80, 72, 71, 0, 160, 300, null, null],
|
||||
[0, "아라엘웨스트코트", null, 0, null, 54, 60, 92, 0, 160, 300, null, null],
|
||||
[0, "프리실라", null, 0, null, 76, 83, 56, 0, 160, 300, null, null],
|
||||
[0, "멜티나", null, 0, null, 71, 82, 65, 0, 160, 300, null, null],
|
||||
[0, "하나에", null, 0, null, 74, 80, 65, 0, 160, 300, null, null],
|
||||
[0, "도레미", null, 0, null, 86, 75, 42, 0, 160, 300, null, null, "프리티 윗치 도레미치!"],
|
||||
[0, "하루카제 도레미", null, 0, null, 86, 75, 42, 0, 160, 300, null, null, "프리티 윗치 도레미치!"],
|
||||
[0, "하즈키", null, 0, null, 78, 61, 80, 0, 160, 300, null, null, "프리티 윗치 하즈키치!"],
|
||||
[0, "아이코", null, 0, null, 78, 61, 75, 0, 160, 300, null, null, "프리티 윗치 아이코치!"],
|
||||
[0, "폿프", null, 0, null, 70, 70, 79, 0, 160, 300, null, null, "프리티 윗치 폿프치!"],
|
||||
[0, "세가와온푸", null, 0, null, 82, 60, 88, 0, 160, 300, null, null, "프리티 윗치 온푸치!"],
|
||||
[0, "하루카제 폿프", null, 0, null, 70, 70, 79, 0, 160, 300, null, null, "프리티 윗치 폿프치!"],
|
||||
[0, "세가와 온푸", null, 0, null, 82, 60, 88, 0, 160, 300, null, null, "프리티 윗치 온푸치!"],
|
||||
[0, "모모코", null, 0, null, 65, 75, 78, 0, 160, 300, null, null, "프리티 윗치 모모코치!"],
|
||||
[0, "마죠리카", null, 0, null, 86, 33, 83, 0, 160, 300, null, "상재"],
|
||||
[0, "유키선생님", null, 0, null, 86, 67, 89, 0, 160, 300, null, null],
|
||||
@@ -523,7 +519,7 @@
|
||||
[1, "사토시", null, 0, null, 51, 95, 13, 0, 160, 300, null, null],
|
||||
[0, "타케시", null, 0, null, 80, 32, 92, 0, 160, 300, null, null],
|
||||
[1, "카스미", null, 0, null, 80, 44, 70, 0, 160, 300, null, null],
|
||||
[0, "그린", null, 0, null, 76, 55, 82, 0, 160, 222, null, null],
|
||||
[0, "그린", null, 0, null, 22, 22, 22, 0, 160, 222, null, null],
|
||||
[0, "관철", null, 0, null, 79, 33, 83, 0, 160, 300, null, null],
|
||||
[0, "오키드 박사", null, 0, null, 70, 31, 95, 0, 160, 300, null, null],
|
||||
[0, "하루카", null, 0, null, 87, 67, 81, 0, 160, 300, null, null],
|
||||
@@ -540,9 +536,9 @@
|
||||
[0, "이즈미코시로", null, 0, null, 67, 39, 95, 0, 160, 300, null, null],
|
||||
[0, "타치카와미미", null, 0, null, 81, 62, 60, 0, 160, 300, null, null],
|
||||
[0, "키도죠", null, 0, null, 76, 50, 89, 0, 160, 300, null, "의술"],
|
||||
[0, "타케루", null, 0, null, 87, 91, 75, 0, 160, 300, null, "위압", "파타몬~~~~!!!!!!!!"],
|
||||
[0, "타케루", null, 0, null, 87, 91, 75, 0, 160, 300, null, null, "파타몬~~~~!!!!!!!!"],
|
||||
[0, "야가미히카리", null, 0, null, 84, 39, 89, 0, 160, 300, null, null],
|
||||
[0, "반데몬", null, 0, null, 55, 80, 80, 0, 160, 300, null, null],
|
||||
[0, "반데몬", null, 0, null, 52, 87, 80, 0, 160, 300, null, null],
|
||||
[0, "다이스케", null, 0, null, 74, 79, 65, 0, 160, 300, null, null],
|
||||
[0, "미야코", null, 0, null, 80, 60, 75, 0, 160, 300, null, null],
|
||||
[0, "히다 이오리", null, 0, null, 70, 64, 80, 0, 160, 300, null, null],
|
||||
@@ -557,11 +553,11 @@
|
||||
[0, "타카이시유키", null, 0, null, 74, 72, 69, 0, 160, 300, null, null],
|
||||
[0, "미츠루", null, 0, null, 70, 69, 60, 0, 160, 300, null, null],
|
||||
[0, "코지로", null, 0, null, 76, 64, 79, 0, 160, 300, null, "상재"],
|
||||
[0, "무사시", null, 0, null, 75, 80, 60, 0, 160, 300, null, "무쌍"],
|
||||
[0, "무사시", null, 0, null, 75, 85, 60, 0, 160, 300, null, "무쌍"],
|
||||
[0, "에비스자와쿠루미", null, 0, null, 72, 88, 59, 0, 160, 300, null, "무쌍"],
|
||||
[0, "타케야유키", null, 0, null, 73, 39, 29, 0, 160, 300, null, null],
|
||||
[0, "타케야유키", null, 0, null, 73, 39, 29, 0, 160, 300, null, null, "학교생활부는 언제나 함께야!"],
|
||||
[0, "와카사유리", null, 0, null, 77, 33, 90, 0, 160, 300, null, null],
|
||||
[0, "이케다미키", null, 0, null, 74, 66, 75, 0, 160, 300, null, null],
|
||||
[0, "나오키 미키", null, 0, null, 74, 66, 75, 0, 160, 300, null, null],
|
||||
[0, "사쿠라메구미", null, 0, null, 77, 32, 80, 0, 160, 300, null, null, "언니가 아니라 사쿠라 선생님!"],
|
||||
[0, "다이몬마사루", null, 0, null, 56, 99, 42, 0, 160, 300, null, null],
|
||||
[0, "히나모리아무", null, 0, null, 83, 70, 67, 0, 160, 300, null, null, "네거티브 하트 록온! 오픈 하트!!"],
|
||||
@@ -586,8 +582,8 @@
|
||||
[0, "마키노 루키", null, 0, null, 77, 63, 77, 0, 160, 300, null, null],
|
||||
[0, "리젠랴", null, 0, null, 72, 70, 77, 0, 160, 300, null, null],
|
||||
[0, "리슈촌", null, 0, null, 67, 43, 52, 0, 160, 300, null, null],
|
||||
[0, "쿠도타이키", null, 0, null, 82, 55, 80, 0, 160, 300, null, null],
|
||||
[0, "히노모토아카리", null, 0, null, 77, 50, 84, 0, 160, 300, null, null],
|
||||
[0, "쿠도 타이키", null, 0, null, 82, 55, 80, 0, 160, 300, null, null, "정말 위험한 순간에 네가 근처에 있으면 네가 날 기다려 준다면 나는 무슨일이 있어도 내 곁으로 돌아올게."],
|
||||
[0, "히노모토 아카리", null, 0, null, 77, 50, 84, 0, 160, 300, null, null, "먹은뒤에 양치질도 안하고 상처가 나도 침만 바르고 놔두거나 감기에 걸려도 금새 밖에 뛰어나가 놀거나…!! 그렇지만… 반드시..! 반드시…돌아와줘..!!"],
|
||||
[0, "유메노우타", null, 0, null, 83, 49, 80, 0, 160, 300, null, null, "코구레!!!(빡침)"],
|
||||
[0, "코구레카게루", null, 0, null, 80, 78, 60, 0, 160, 300, null, null, "널 좋아해 우타."],
|
||||
[0, "히이라기케이이치", null, 0, null, 86, 72, 88, 0, 160, 300, null, null],
|
||||
@@ -622,18 +618,6 @@
|
||||
[0, "타카미치카", null, 0, null, 80, 40, 76, 0, 160, 300, null, null],
|
||||
[0, "사쿠라우치리코", null, 0, null, 80, 44, 84, 0, 160, 300, null, null],
|
||||
[0, "큐어에코", null, 0, null, 83, 62, 74, 0, 160, 300, null, null],
|
||||
[0, "큐어러블리", null, 0, null, 80, 83, 47, 0, 160, 300, null, null],
|
||||
[0, "큐어프린세스", null, 0, null, 76, 85, 55, 0, 160, 300, null, null],
|
||||
[0, "큐어허니", null, 0, null, 83, 86, 67, 0, 160, 300, null, null],
|
||||
[0, "큐어포춘", null, 0, null, 82, 90, 80, 0, 160, 300, null, null],
|
||||
[0, "블루", null, 0, null, 41, 29, 17, 0, 160, 210, null, null],
|
||||
[0, "큐어텐더", null, 0, null, 82, 94, 77, 0, 160, 300, null, null],
|
||||
[0, "큐어플로라", null, 0, null, 81, 87, 69, 0, 160, 300, null, null],
|
||||
[0, "큐어머메이드", null, 0, null, 88, 80, 93, 0, 160, 300, null, null],
|
||||
[0, "큐어트윙클", null, 0, null, 88, 84, 80, 0, 160, 300, null, null],
|
||||
[0, "큐어미라클", null, 0, null, 80, 86, 74, 0, 160, 300, null, null],
|
||||
[0, "큐어매지컬", null, 0, null, 78, 83, 70, 0, 160, 300, null, null],
|
||||
[0, "큐어펠리체", null, 0, null, 80, 77, 62, 0, 160, 300, null, null],
|
||||
[0, "키쿠오카세이지로", null, 0, null, 83, 42, 78, 0, 160, 300, null, null],
|
||||
[0, "히가타케루", null, 0, null, 70, 27, 90, 0, 160, 300, null, null],
|
||||
[0, "코지코린코", null, 0, null, 75, 40, 89, 0, 160, 300, null, null],
|
||||
@@ -642,14 +626,10 @@
|
||||
[0, "크라미 첼", null, 0, null, 72, 42, 82, 0, 160, 300, null, null],
|
||||
[0, "필 닐바렌", null, 0, null, 75, 32, 90, 0, 160, 300, null, null],
|
||||
[0, "플럼스토커", null, 0, null, 78, 52, 89, 0, 160, 300, null, null],
|
||||
[0, "테토", null, 0, null, 75, 39, 95, 0, 160, 300, null, null],
|
||||
[0, "키리야마카즈오", null, 0, null, 92, 99, 97, 0, 160, 300, "패권", "위압", "앞이 나오면 너말대로 분교로가서 다죽이고 뒤가 나오면…. 이살인게임을 받아들이기로."],
|
||||
[0, "스기무라히로키", null, 0, null, 85, 90, 50, 0, 160, 300, null, null, "코토히키…넌 내가 지킬거야…"],
|
||||
[0, "미무라신지", null, 0, null, 89, 35, 93, 0, 160, 300, null, null],
|
||||
[0, "카와다소교", null, 0, null, 72, 58, 85, 0, 160, 300, null, null, "이 게임은 아직 끝나지 않았어…"],
|
||||
[0, "아마쿠사카나데", null, 0, null, 80, 20, 75, 0, 160, 300, null, null],
|
||||
[0, "테토", null, 0, null, 75, 39, 95, 0, 160, 300, null, null, "제 10조! 모두들 사이좋게 플레이 합시다~"],
|
||||
[0, "아마쿠사카나데", null, 0, null, 80, 20, 75, 0, 160, 300, null, null, "도라쿠짱 날아라~ 날아라~"],
|
||||
[0, "나레이션", null, 0, null, 50, 50, 50, 0, 160, 300, null, null, "에라베!"],
|
||||
[0, "도라쿠우타케", null, 0, null, 79, 31, 85, 0, 160, 300, null, null],
|
||||
[0, "도라쿠우타케", null, 0, null, 79, 31, 85, 0, 160, 300, null, null, "너도 참 고생이 많구나.,"],
|
||||
[0, "아마가미소라", null, 0, null, 67, 17, 92, 0, 160, 300, null, null],
|
||||
[0, "코우사카쿄우스케", null, 0, null, 70, 19, 30, 0, 160, 300, null, null],
|
||||
[0, "코우사카키리노", null, 0, null, 60, 60, 19, 0, 160, 300, null, null, "나한테 우리오빠 뺏긴 기분이 어떄?"],
|
||||
@@ -672,7 +652,6 @@
|
||||
[0, "사카키바라요코", null, 0, null, 85, 35, 77, 0, 160, 300, null, null],
|
||||
[0, "혼다미카", null, 0, null, 83, 40, 80, 0, 160, 300, null, null],
|
||||
[0, "미도리카와리에", null, 0, null, 87, 33, 82, 0, 160, 300, null, null],
|
||||
[0, "소마미츠코", null, 0, null, 85, 75, 80, 0, 160, 300, null, null, "뭐. 나도 살려둘 마음은 없었으니까."],
|
||||
[0, "코코", null, 0, null, 77, 19, 80, 0, 160, 300, null, null],
|
||||
[0, "너츠", null, 0, null, 77, 32, 85, 0, 160, 300, null, null],
|
||||
[0, "트리오더마이너", null, 0, null, 52, 84, 45, 0, 160, 300, null, null],
|
||||
@@ -694,33 +673,29 @@
|
||||
[0, "큐어써니", null, 0, null, 80, 80, 72, 0, 160, 300, null, null],
|
||||
[0, "큐어마치", null, 0, null, 83, 82, 75, 0, 160, 300, null, null],
|
||||
[0, "큐어뷰티", null, 0, null, 80, 76, 82, 0, 160, 300, null, null],
|
||||
[0, "큐어휩", null, 0, null, 82, 78, 50, 0, 160, 300, null, null],
|
||||
[0, "큐어커스터드", null, 0, null, 74, 65, 83, 0, 160, 300, null, null],
|
||||
[0, "큐어젤라토", null, 0, null, 82, 78, 83, 0, 160, 300, null, null],
|
||||
[0, "큐어마카롱", null, 0, null, 83, 76, 89, 0, 160, 300, null, null],
|
||||
[0, "큐어파르페", null, 0, null, 81, 80, 80, 0, 160, 300, null, null],
|
||||
[0, "유메노코토", null, 0, null, 81, 39, 80, 0, 160, 300, null, null],
|
||||
[0, "쿠로미", null, 0, null, 80, 49, 80, 0, 160, 300, null, null],
|
||||
[0, "유메노코토", null, 0, null, 81, 39, 80, 0, 160, 300, null, null, "혼노~ 스코시~ 이지와루나~ 뎅와노 키리카타오~ 시타노~ 다앗테 큐우니 신켄~나오에데하나시 다스노~ 즈루이~ 스키타요토~ 이와세테아 게나이 다앗테 히카세테아게나이"],
|
||||
[0, "쿠로미", null, 0, null, 80, 49, 80, 0, 160, 300, null, null, "쿠로미 사건일지 XXX호!!"],
|
||||
[0, "바쿠", null, 0, null, 55, 55, 50, 0, 160, 300, null, null],
|
||||
[0, "쿠로미파이브", null, 0, null, 59, 67, 60, 0, 160, 300, null, null],
|
||||
[0, "나빛나", null, 0, null, 87, 49, 83, 0, 160, 300, null, null, "혼노~ 스코시~ 이지와루나~ 뎅와노 키리카타오~ 시타노~ 다앗테 큐우니 신켄~나오에데하나시 다스노~ 즈루이~ 스키타요토~ 이와세테아 게나이 다앗테 히카세테아게나이"],
|
||||
[0, "아이리스", null, 0, null, 83, 50, 86, 0, 160, 300, null, null, "쿠로미 사건일지 XXX호!!"],
|
||||
[0, "포켓몬 세레나", null, 0, null, 85, 50, 82, 0, 160, 300, null, null],
|
||||
[0, "나빛나", null, 0, null, 87, 49, 83, 0, 160, 300, null, null, "xxx 멋지게~ 등장~!"],
|
||||
[0, "아이리스", null, 0, null, 83, 50, 86, 0, 160, 300, null, null, "어서오세요 도전자여. 기다리고 있엇습니다."],
|
||||
[0, "세레나", null, 0, null, 85, 50, 82, 0, 160, 300, null, null],
|
||||
[0, "시트론", null, 0, null, 79, 41, 92, 0, 160, 300, null, "발명"],
|
||||
[0, "난천", null, 0, null, 84, 53, 87, 0, 160, 300, null, null],
|
||||
[0, "루자미네", null, 0, null, 80, 40, 92, 0, 160, 300, null, null],
|
||||
[0, "릴리에", null, 0, null, 82, 64, 69, 0, 160, 300, null, null],
|
||||
[0, "나카가와노리코", null, 0, null, 81, 19, 72, 0, 160, 300, null, null],
|
||||
[0, "오다토시노리", null, 0, null, 56, 40, 81, 0, 160, 300, null, null],
|
||||
[0, "나나하라슈야", null, 0, null, 85, 55, 74, 0, 160, 300, null, null],
|
||||
[0, "어른로로나", null, 0, null, 92, 89, 94, 0, 160, 300, null, null, "에… 여러분들은???"],
|
||||
[0, "푸크푹", null, 0, null, 92, 79, 80, 0, 160, 300, null, null, "어서와 섀도게일 언니."],
|
||||
[0, "그림하트", null, 0, null, 77, 51, 49, 0, 160, 300, null, null, "목을 쳐라.."],
|
||||
[0, "마왕팜", null, 0, null, 72, 94, 50, 0, 160, 300, null, null],
|
||||
[0, "피티프레데리카", null, 0, null, 84, 33, 86, 0, 160, 300, null, null],
|
||||
[0, "웨딘", null, 0, null, 86, 40, 85, 0, 160, 300, null, null, "마법나라잖아요! 꿈과 판타지잖아요! 당신들, 바보 아녜요? 어떻게 일이 잘 안 풀린다고 남까지 말려들게 해서 몽땅 죽여 버리겠다는 결론을 낼 수 있죠?"]
|
||||
],
|
||||
"general_ex":[
|
||||
|
||||
[0, "마왕팜", null, 0, null, 72, 94, 50, 0, 160, 300, null, null, "무지개…? 어째서…."],
|
||||
[0, "피티프레데리카", null, 0, null, 84, 33, 86, 0, 160, 300, null, null, "저같은건 믿을만한 상대가 아니랍니다 분명 불쾌한 기분이 들거에요."],
|
||||
[0, "웨딘", null, 0, null, 86, 40, 85, 0, 160, 300, null, null, "마법나라잖아요! 꿈과 판타지잖아요! 당신들, 바보 아녜요? 어떻게 일이 잘 안 풀린다고 남까지 말려들게 해서 몽땅 죽여 버리겠다는 결론을 낼 수 있죠? 그런 걸 납득할 사람이 어"],
|
||||
[0, "벨 크라넬", null, 0, null, 84, 85, 76, 0, 160, 300, null, null],
|
||||
[0, "아이즈발렌슈타인", null, 0, null, 81, 90, 77, 0, 160, 300, null, null],
|
||||
[0, "프레이 마이어", null, 0, null, 92, 101, 67, 0, 160, 300, null, "위압", "내기도….들어줬어… 내 친구야 내가 태어난 의미가 여기있어"],
|
||||
[0, "앤 마이어", null, 0, null, 88, 90, 86, 0, 160, 300, null, null, "그런거 당연하잖아 이세상 그누구보다도 프레이를 좋아해…"],
|
||||
[0, "릴리루카 아데", null, 0, null, 77, 65, 81, 0, 160, 300, null, null],
|
||||
[0, "에테몽키", null, 0, null, 78, 51, 91, 0, 160, 300, null, null, "인간이란 정말 대단해 타이치도 그렇지만 항상 계산이상의 무언가를 만들어내지. 녀석들의 배틀은 솔직히 즐거웠어."],
|
||||
[0, "에테몬", null, 0, null, 65, 81, 55, 0, 160, 300, null, null, "사라지고 싶지 않아!! 난 이세상의 스타라고! 스타는 영원한 거란 말이야~~~~~~~~~~~~~~~~~~~~~~~~~~~~"]
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,781 @@
|
||||
{
|
||||
"title": "【가상모드18】 고대무장 신대륙가다!",
|
||||
"startYear": 180,
|
||||
"history": [
|
||||
"<C>●</>180년 1월:<L><b>【가상모드18】</b>고대무장 신대륙가다!</>",
|
||||
"<C>●</>180년 1월:<L><b>【이벤트】</b></>춘추전국+초한지+삼국지+체삼모 모두 모였다! 근데 여긴 어디...?"
|
||||
],
|
||||
"stat": {
|
||||
"total": 265,
|
||||
"min": 75,
|
||||
"max": 95
|
||||
},
|
||||
"iconPath": ".",
|
||||
"fiction": 1,
|
||||
"nation":[
|
||||
|
||||
],
|
||||
"map":{
|
||||
"mapName":"ludo_rathowm",
|
||||
"unitSet":"ludo_rathowm"
|
||||
},
|
||||
"diplomacy":[],
|
||||
"general":[
|
||||
[0, "아회남", null, 0, null, 65, 74, 26, 0, 160, 300, null, null],
|
||||
[0, "이적", null, 0, null, 40, 24, 84, 0, 160, 300, null, null],
|
||||
[0, "윤상", null, 0, null, 51, 44, 62, 0, 160, 300, null, null],
|
||||
[0, "윤묵", null, 0, null, 26, 15, 66, 0, 160, 300, null, null],
|
||||
[0, "우금", null, 0, null, 85, 78, 78, 0, 160, 300, null, null],
|
||||
[0, "위관", null, 0, null, 69, 46, 79, 0, 160, 300, null, null],
|
||||
[0, "원윤", null, 0, null, 32, 14, 39, 0, 160, 300, null, null],
|
||||
[0, "원희", null, 0, null, 66, 51, 63, 0, 160, 300, null, null],
|
||||
[0, "염행", null, 0, null, 79, 90, 61, 0, 160, 300, null, null],
|
||||
[0, "염유", null, 0, null, 71, 57, 71, 0, 160, 300, null, null],
|
||||
[0, "원술", null, 0, null, 76, 65, 75, 0, 160, 300, null, null],
|
||||
[0, "원상", null, 0, null, 63, 75, 42, 0, 160, 300, null, null],
|
||||
[0, "원소", null, 0, null, 89, 69, 78, 0, 160, 300, null, null, "사세삼공의 명문가 하북의 주인"],
|
||||
[0, "염상", null, 0, null, 40, 27, 71, 0, 160, 300, null, null],
|
||||
[0, "원담", null, 0, null, 60, 78, 30, 0, 160, 300, null, null],
|
||||
[0, "염포", null, 0, null, 40, 25, 82, 0, 160, 300, null, null],
|
||||
[0, "왕위", null, 0, null, 60, 70, 62, 0, 160, 300, null, null],
|
||||
[0, "왕윤", null, 0, null, 26, 6, 68, 0, 160, 300, null, null],
|
||||
[0, "왕항", null, 0, null, 76, 60, 61, 0, 160, 300, null, null],
|
||||
[0, "왕찬", null, 0, null, 15, 3, 79, 0, 160, 300, null, null],
|
||||
[0, "왕수", null, 0, null, 54, 27, 77, 0, 160, 300, null, null],
|
||||
[0, "왕숙", null, 0, null, 36, 22, 76, 0, 160, 300, null, null],
|
||||
[0, "왕준", null, 0, null, 85, 73, 80, 0, 160, 300, null, null],
|
||||
[0, "왕쌍", null, 0, null, 67, 88, 19, 0, 160, 300, null, null],
|
||||
[0, "왕창", null, 0, null, 74, 64, 79, 0, 160, 300, null, null],
|
||||
[0, "왕평", null, 0, null, 86, 81, 76, 0, 160, 300, null, null],
|
||||
[0, "왕보", null, 0, null, 62, 41, 79, 0, 160, 300, null, null],
|
||||
[0, "왕문", null, 0, null, 65, 64, 31, 0, 160, 300, null, null],
|
||||
[0, "왕릉", null, 0, null, 74, 64, 71, 0, 160, 300, null, null],
|
||||
[0, "왕루", null, 0, null, 28, 30, 79, 0, 160, 300, null, null],
|
||||
[0, "왕랑", null, 0, null, 47, 35, 79, 0, 160, 300, null, null],
|
||||
[0, "온회", null, 0, null, 62, 36, 74, 0, 160, 300, null, null],
|
||||
[0, "하안", null, 0, null, 15, 30, 72, 0, 160, 300, null, null],
|
||||
[0, "괴월", null, 0, null, 50, 27, 85, 0, 160, 300, null, null],
|
||||
[0, "괴량", null, 0, null, 68, 33, 88, 0, 160, 300, null, null],
|
||||
[0, "가화", null, 0, null, 49, 65, 41, 0, 160, 300, null, null],
|
||||
[0, "가규", null, 0, null, 78, 61, 84, 0, 160, 300, null, null],
|
||||
[0, "하의", null, 0, null, 56, 69, 36, 0, 160, 300, null, null],
|
||||
[0, "화흠", null, 0, null, 51, 33, 88, 0, 160, 300, null, null],
|
||||
[0, "가후", null, 0, null, 71, 40, 98, 0, 160, 300, null, null, "이기기 위한 전략만 내드리겠습니다"],
|
||||
[0, "곽가", null, 0, null, 70, 41, 97, 0, 160, 300, null, null, "조공을 위한 명이 조금만 더 남았다면..."],
|
||||
[0, "악환", null, 0, null, 65, 82, 42, 0, 160, 300, null, null],
|
||||
[0, "곽사", null, 0, null, 64, 76, 13, 0, 160, 300, null, null],
|
||||
[0, "악취", null, 0, null, 53, 66, 61, 0, 160, 300, null, null],
|
||||
[0, "곽준", null, 0, null, 73, 66, 73, 0, 160, 300, null, null],
|
||||
[0, "학소", null, 0, null, 88, 79, 82, 0, 160, 300, null, null],
|
||||
[0, "악진", null, 0, null, 80, 85, 56, 0, 160, 300, null, null],
|
||||
[0, "곽도", null, 0, null, 62, 50, 82, 0, 160, 300, null, null],
|
||||
[0, "학맹", null, 0, null, 62, 67, 42, 0, 160, 300, null, null],
|
||||
[0, "곽유지", null, 0, null, 28, 9, 69, 0, 160, 300, null, null],
|
||||
[0, "곽익", null, 0, null, 73, 69, 69, 0, 160, 300, null, null],
|
||||
[0, "곽회", null, 0, null, 90, 78, 85, 0, 160, 300, null, null],
|
||||
[0, "하후위", null, 0, null, 71, 73, 49, 0, 160, 300, null, null],
|
||||
[0, "하후연", null, 0, null, 95, 91, 74, 0, 160, 300, null, null, "궁술로 날 당해낼 자가 있을까?"],
|
||||
[0, "하후은", null, 0, null, 63, 72, 53, 0, 160, 300, null, null],
|
||||
[0, "하후화", null, 0, null, 48, 51, 71, 0, 160, 300, null, null],
|
||||
[0, "하후혜", null, 0, null, 50, 44, 76, 0, 160, 300, null, null],
|
||||
[0, "하후현", null, 0, null, 54, 39, 76, 0, 160, 300, null, null],
|
||||
[0, "하후상", null, 0, null, 79, 72, 75, 0, 160, 300, null, null],
|
||||
[0, "하후덕", null, 0, null, 69, 73, 32, 0, 160, 300, null, null],
|
||||
[0, "하후돈", null, 0, null, 92, 88, 68, 0, 160, 300, null, null, "여포 네이놈...! (꿀꺽)"],
|
||||
[0, "하후패", null, 0, null, 79, 85, 77, 0, 160, 300, null, null],
|
||||
[0, "하후무", null, 0, null, 20, 7, 4, 0, 160, 300, null, null],
|
||||
[0, "가충", null, 0, null, 54, 31, 89, 0, 160, 300, null, null],
|
||||
[0, "하진", null, 0, null, 68, 54, 75, 0, 160, 300, null, null],
|
||||
[0, "화웅", null, 0, null, 78, 90, 55, 0, 160, 300, null, null],
|
||||
[0, "한윤", null, 0, null, 26, 29, 65, 0, 160, 300, null, null],
|
||||
[0, "관우", null, 0, null, 93, 99, 79, 0, 160, 300, null, null, "차가 식기 전에 적장의 목을 베어 오겠소!"],
|
||||
[0, "환계", null, 0, null, 25, 26, 68, 0, 160, 300, null, null],
|
||||
[0, "관해", null, 0, null, 70, 82, 10, 0, 160, 300, null, null],
|
||||
[0, "관구검", null, 0, null, 84, 86, 62, 0, 160, 300, null, null],
|
||||
[0, "한현", null, 0, null, 22, 33, 7, 0, 160, 300, null, null],
|
||||
[0, "한호", null, 0, null, 73, 72, 84, 0, 160, 300, null, null],
|
||||
[0, "관흥", null, 0, null, 76, 85, 67, 0, 160, 300, null, null],
|
||||
[0, "관색", null, 0, null, 74, 86, 56, 0, 160, 300, null, null],
|
||||
[0, "한수", null, 0, null, 78, 75, 79, 0, 160, 300, null, null],
|
||||
[0, "한숭", null, 0, null, 25, 15, 71, 0, 160, 300, null, null],
|
||||
[0, "관정", null, 0, null, 36, 52, 73, 0, 160, 300, null, null],
|
||||
[0, "한섬", null, 0, null, 69, 66, 36, 0, 160, 300, null, null],
|
||||
[0, "감택", null, 0, null, 51, 49, 83, 0, 160, 300, null, null],
|
||||
[0, "한충", null, 0, null, 64, 67, 18, 0, 160, 300, null, null],
|
||||
[0, "한당", null, 0, null, 76, 85, 61, 0, 160, 300, null, null],
|
||||
[0, "한덕", null, 0, null, 63, 76, 25, 0, 160, 300, null, null],
|
||||
[0, "감녕", null, 0, null, 92, 95, 76, 0, 160, 300, null, null],
|
||||
[0, "한복", null, 0, null, 28, 3, 27, 0, 160, 300, null, null],
|
||||
[0, "관평", null, 0, null, 78, 82, 72, 0, 160, 300, null, null],
|
||||
[0, "간옹", null, 0, null, 20, 32, 75, 0, 160, 300, null, null],
|
||||
[0, "안량", null, 0, null, 88, 96, 43, 0, 160, 300, null, null],
|
||||
[0, "위연", null, 0, null, 91, 90, 78, 0, 160, 300, null, null],
|
||||
[0, "국의", null, 0, null, 84, 78, 51, 0, 160, 300, null, null],
|
||||
[0, "희지재", null, 0, null, 63, 35, 90, 0, 160, 300, null, null],
|
||||
[0, "위속", null, 0, null, 67, 78, 31, 0, 160, 300, null, null],
|
||||
[0, "위유", null, 0, null, 46, 29, 74, 0, 160, 300, null, null],
|
||||
[0, "우금2", null, 0, null, 72, 79, 38, 0, 160, 300, null, null],
|
||||
[0, "우보", null, 0, null, 38, 60, 21, 0, 160, 300, null, null],
|
||||
[0, "강유", null, 0, null, 92, 88, 91, 0, 160, 300, null, null],
|
||||
[0, "공지", null, 0, null, 43, 53, 62, 0, 160, 300, null, null],
|
||||
[0, "교유", null, 0, null, 64, 69, 38, 0, 160, 300, null, null],
|
||||
[0, "공도", null, 0, null, 59, 70, 23, 0, 160, 300, null, null],
|
||||
[0, "허공", null, 0, null, 44, 66, 64, 0, 160, 300, null, null],
|
||||
[0, "허정", null, 0, null, 23, 5, 68, 0, 160, 300, null, null],
|
||||
[0, "허저", null, 0, null, 74, 97, 36, 0, 160, 300, null, null],
|
||||
[0, "허유", null, 0, null, 36, 21, 80, 0, 160, 300, null, null],
|
||||
[0, "기령", null, 0, null, 85, 84, 51, 0, 160, 300, null, null],
|
||||
[0, "김의", null, 0, null, 32, 38, 65, 0, 160, 300, null, null],
|
||||
[0, "김배삼결", null, 0, null, 64, 76, 19, 0, 160, 300, null, null],
|
||||
[0, "김선", null, 0, null, 52, 68, 13, 0, 160, 300, null, null],
|
||||
[0, "우번", null, 0, null, 46, 46, 87, 0, 160, 300, null, null],
|
||||
[0, "형도영", null, 0, null, 69, 79, 41, 0, 160, 300, null, null],
|
||||
[0, "엄안", null, 0, null, 82, 83, 72, 0, 160, 300, null, null],
|
||||
[0, "엄망", null, 0, null, 68, 71, 40, 0, 160, 300, null, null],
|
||||
[0, "엄준", null, 0, null, 41, 12, 71, 0, 160, 300, null, null],
|
||||
[0, "엄정", null, 0, null, 50, 55, 39, 0, 160, 300, null, null],
|
||||
[0, "엄백호", null, 0, null, 67, 70, 42, 0, 160, 300, null, null],
|
||||
[0, "엄여", null, 0, null, 61, 78, 44, 0, 160, 300, null, null],
|
||||
[0, "오의", null, 0, null, 79, 73, 70, 0, 160, 300, null, null],
|
||||
[0, "황개", null, 0, null, 80, 86, 70, 0, 160, 300, null, null],
|
||||
[0, "고간", null, 0, null, 74, 56, 48, 0, 160, 300, null, null],
|
||||
[0, "황권", null, 0, null, 75, 59, 88, 0, 160, 300, null, null],
|
||||
[0, "고유", null, 0, null, 57, 43, 72, 0, 160, 300, null, null],
|
||||
[0, "고순", null, 0, null, 86, 89, 60, 0, 160, 300, null, null],
|
||||
[0, "고상", null, 0, null, 68, 68, 53, 0, 160, 300, null, null],
|
||||
[0, "고승", null, 0, null, 67, 73, 41, 0, 160, 300, null, null],
|
||||
[0, "후성", null, 0, null, 74, 75, 68, 0, 160, 300, null, null],
|
||||
[0, "후선", null, 0, null, 63, 66, 34, 0, 160, 300, null, null],
|
||||
[0, "황조", null, 0, null, 81, 66, 62, 0, 160, 300, null, null],
|
||||
[0, "공손월", null, 0, null, 74, 72, 47, 0, 160, 300, null, null],
|
||||
[0, "공손연", null, 0, null, 65, 70, 60, 0, 160, 300, null, null],
|
||||
[0, "공손공", null, 0, null, 39, 17, 69, 0, 160, 300, null, null],
|
||||
[0, "공손강", null, 0, null, 72, 66, 65, 0, 160, 300, null, null],
|
||||
[0, "공손찬", null, 0, null, 86, 82, 75, 0, 160, 300, null, null],
|
||||
[0, "공손속", null, 0, null, 63, 68, 57, 0, 160, 300, null, null],
|
||||
[0, "공손도", null, 0, null, 67, 71, 66, 0, 160, 300, null, null],
|
||||
[0, "공손범", null, 0, null, 73, 69, 66, 0, 160, 300, null, null],
|
||||
[0, "황충", null, 0, null, 88, 96, 65, 0, 160, 300, null, null],
|
||||
[0, "고정", null, 0, null, 55, 63, 43, 0, 160, 300, null, null],
|
||||
[0, "고패", null, 0, null, 66, 61, 69, 0, 160, 300, null, null],
|
||||
[0, "황보숭", null, 0, null, 91, 61, 82, 0, 160, 300, null, null],
|
||||
[0, "공융", null, 0, null, 30, 5, 73, 0, 160, 300, null, null],
|
||||
[0, "고람", null, 0, null, 76, 82, 68, 0, 160, 300, null, null],
|
||||
[0, "오경", null, 0, null, 69, 66, 52, 0, 160, 300, null, null],
|
||||
[0, "호거아", null, 0, null, 70, 82, 41, 0, 160, 300, null, null],
|
||||
[0, "호진", null, 0, null, 65, 74, 12, 0, 160, 300, null, null],
|
||||
[0, "올돌골", null, 0, null, 79, 86, 11, 0, 160, 300, null, null],
|
||||
[0, "호반", null, 0, null, 55, 55, 59, 0, 160, 300, null, null],
|
||||
[0, "오반", null, 0, null, 74, 71, 59, 0, 160, 300, null, null],
|
||||
[0, "고옹", null, 0, null, 52, 18, 81, 0, 160, 300, null, null],
|
||||
[0, "오란", null, 0, null, 68, 80, 35, 0, 160, 300, null, null],
|
||||
[0, "채화", null, 0, null, 39, 50, 1, 0, 160, 300, null, null],
|
||||
[0, "채중", null, 0, null, 40, 54, 2, 0, 160, 300, null, null],
|
||||
[0, "채모", null, 0, null, 70, 70, 77, 0, 160, 300, null, null],
|
||||
[0, "착융", null, 0, null, 60, 69, 38, 0, 160, 300, null, null],
|
||||
[0, "사마의", null, 0, null, 99, 63, 98, 0, 160, 300, null, null],
|
||||
[0, "사마염", null, 0, null, 69, 59, 77, 0, 160, 300, null, null],
|
||||
[0, "사마사", null, 0, null, 84, 64, 89, 0, 160, 300, null, null],
|
||||
[0, "사마소", null, 0, null, 85, 57, 88, 0, 160, 300, null, null],
|
||||
[0, "사마부", null, 0, null, 70, 37, 77, 0, 160, 300, null, null],
|
||||
[0, "사마랑", null, 0, null, 20, 21, 72, 0, 160, 300, null, null],
|
||||
[0, "사마가", null, 0, null, 66, 84, 25, 0, 160, 300, null, null],
|
||||
[0, "주흔", null, 0, null, 65, 62, 73, 0, 160, 300, null, null],
|
||||
[0, "주앙", null, 0, null, 74, 65, 65, 0, 160, 300, null, null],
|
||||
[0, "주지", null, 0, null, 73, 85, 41, 0, 160, 300, null, null],
|
||||
[0, "주창", null, 0, null, 68, 77, 42, 0, 160, 300, null, null],
|
||||
[0, "주태", null, 0, null, 84, 91, 48, 0, 160, 300, null, null],
|
||||
[0, "주방", null, 0, null, 52, 41, 80, 0, 160, 300, null, null],
|
||||
[0, "주유", null, 0, null, 96, 75, 97, 0, 160, 300, null, null, "미주랑 주유 공근이 왔습니다"],
|
||||
[0, "주환", null, 0, null, 87, 84, 77, 0, 160, 300, null, null],
|
||||
[0, "주거", null, 0, null, 77, 57, 72, 0, 160, 300, null, null],
|
||||
[0, "축융", null, 0, null, 72, 75, 35, 0, 160, 300, null, null],
|
||||
[0, "주준", null, 0, null, 89, 65, 76, 0, 160, 300, null, null],
|
||||
[0, "주연", null, 0, null, 86, 75, 74, 0, 160, 300, null, null],
|
||||
[0, "주치", null, 0, null, 71, 56, 72, 0, 160, 300, null, null],
|
||||
[0, "주포", null, 0, null, 68, 73, 34, 0, 160, 300, null, null],
|
||||
[0, "주령", null, 0, null, 78, 73, 67, 0, 160, 300, null, null],
|
||||
[0, "순욱", null, 0, null, 80, 38, 97, 0, 160, 300, null, null],
|
||||
[0, "순우경", null, 0, null, 78, 66, 29, 0, 160, 300, null, null],
|
||||
[0, "순심", null, 0, null, 45, 25, 78, 0, 160, 300, null, null],
|
||||
[0, "순유", null, 0, null, 81, 35, 95, 0, 160, 300, null, null],
|
||||
[0, "장완", null, 0, null, 78, 34, 89, 0, 160, 300, null, null],
|
||||
[0, "종회", null, 0, null, 88, 62, 93, 0, 160, 300, null, null],
|
||||
[0, "장간", null, 0, null, 19, 6, 66, 0, 160, 300, null, null],
|
||||
[0, "장의거", null, 0, null, 71, 58, 59, 0, 160, 300, null, null],
|
||||
[0, "장흠", null, 0, null, 78, 85, 54, 0, 160, 300, null, null],
|
||||
[0, "위나라장제", null, 0, null, 62, 43, 85, 0, 160, 300, null, null],
|
||||
[0, "초주", null, 0, null, 16, 3, 67, 0, 160, 300, null, null],
|
||||
[0, "초촉", null, 0, null, 65, 76, 33, 0, 160, 300, null, null],
|
||||
[0, "향총", null, 0, null, 76, 61, 77, 0, 160, 300, null, null],
|
||||
[0, "종요", null, 0, null, 79, 24, 90, 0, 160, 300, null, null],
|
||||
[0, "향랑", null, 0, null, 28, 18, 74, 0, 160, 300, null, null],
|
||||
[0, "서영", null, 0, null, 92, 80, 62, 0, 160, 300, null, null],
|
||||
[0, "제갈각", null, 0, null, 72, 47, 90, 0, 160, 300, null, null],
|
||||
[0, "제갈근", null, 0, null, 75, 34, 85, 0, 160, 300, null, null],
|
||||
[0, "제갈균", null, 0, null, 29, 25, 52, 0, 160, 300, null, null],
|
||||
[0, "제갈탄", null, 0, null, 72, 72, 76, 0, 160, 300, null, null],
|
||||
[0, "제갈량", null, 0, null, 98, 38, 100, 0, 160, 300, null, null],
|
||||
[0, "서황", null, 0, null, 95, 94, 78, 0, 160, 300, null, null],
|
||||
[0, "서서", null, 0, null, 85, 64, 93, 0, 160, 300, null, null],
|
||||
[0, "서성", null, 0, null, 86, 81, 78, 0, 160, 300, null, null],
|
||||
[0, "서막", null, 0, null, 55, 32, 68, 0, 160, 300, null, null],
|
||||
[0, "신의", null, 0, null, 55, 59, 60, 0, 160, 300, null, null],
|
||||
[0, "신탐", null, 0, null, 56, 62, 54, 0, 160, 300, null, null],
|
||||
[0, "심배", null, 0, null, 80, 60, 84, 0, 160, 300, null, null],
|
||||
[0, "신비", null, 0, null, 42, 24, 79, 0, 160, 300, null, null],
|
||||
[0, "신평", null, 0, null, 69, 43, 77, 0, 160, 300, null, null],
|
||||
[0, "진복", null, 0, null, 31, 7, 73, 0, 160, 300, null, null],
|
||||
[0, "진랑", null, 0, null, 58, 70, 35, 0, 160, 300, null, null],
|
||||
[0, "휴고", null, 0, null, 63, 71, 38, 0, 160, 300, null, null],
|
||||
[0, "추단", null, 0, null, 61, 64, 34, 0, 160, 300, null, null],
|
||||
[0, "성의", null, 0, null, 74, 72, 41, 0, 160, 300, null, null],
|
||||
[0, "성공영", null, 0, null, 73, 71, 80, 0, 160, 300, null, null],
|
||||
[0, "설종", null, 0, null, 34, 16, 73, 0, 160, 300, null, null],
|
||||
[0, "단경", null, 0, null, 71, 68, 43, 0, 160, 300, null, null],
|
||||
[0, "전종", null, 0, null, 78, 72, 75, 0, 160, 300, null, null],
|
||||
[0, "조예", null, 0, null, 72, 52, 82, 0, 160, 300, null, null],
|
||||
[0, "조휴", null, 0, null, 80, 78, 62, 0, 160, 300, null, null],
|
||||
[0, "송헌", null, 0, null, 68, 77, 38, 0, 160, 300, null, null],
|
||||
[0, "조앙", null, 0, null, 78, 67, 69, 0, 160, 300, null, null],
|
||||
[0, "조홍", null, 0, null, 84, 77, 55, 0, 160, 300, null, null],
|
||||
[0, "조순", null, 0, null, 85, 81, 63, 0, 160, 300, null, null],
|
||||
[0, "조창", null, 0, null, 86, 91, 40, 0, 160, 300, null, null],
|
||||
[0, "조식", null, 0, null, 45, 22, 86, 0, 160, 300, null, null],
|
||||
[0, "조진", null, 0, null, 86, 74, 70, 0, 160, 300, null, null],
|
||||
[0, "조인", null, 0, null, 94, 89, 72, 0, 160, 300, null, null],
|
||||
[0, "조성", null, 0, null, 54, 74, 38, 0, 160, 300, null, null],
|
||||
[0, "조조", null, 0, null, 100, 72, 94, 0, 160, 300, null, null, "미망인이 더 매력적이란 말이야... 후후"],
|
||||
[0, "조충", null, 0, null, 43, 21, 74, 0, 160, 300, null, null],
|
||||
[0, "장패", null, 0, null, 78, 86, 53, 0, 160, 300, null, null],
|
||||
[0, "조비", null, 0, null, 75, 71, 87, 0, 160, 300, null, null, "새로운 왕조를 열겠다..."],
|
||||
[0, "조표", null, 0, null, 54, 69, 32, 0, 160, 300, null, null],
|
||||
[0, "저수", null, 0, null, 85, 46, 95, 0, 160, 300, null, null],
|
||||
[0, "소비", null, 0, null, 69, 63, 66, 0, 160, 300, null, null],
|
||||
[0, "조무", null, 0, null, 70, 71, 66, 0, 160, 300, null, null],
|
||||
[0, "손환", null, 0, null, 82, 73, 76, 0, 160, 300, null, null],
|
||||
[0, "손견", null, 0, null, 94, 95, 79, 0, 160, 300, null, null, "강동의 호랑이, 손문대다!"],
|
||||
[0, "손건", null, 0, null, 44, 33, 79, 0, 160, 300, null, null],
|
||||
[0, "손권", null, 0, null, 84, 73, 80, 0, 160, 300, null, null],
|
||||
[0, "손교", null, 0, null, 77, 72, 67, 0, 160, 300, null, null],
|
||||
[0, "손책", null, 0, null, 93, 94, 74, 0, 160, 300, null, null],
|
||||
[0, "손소", null, 0, null, 82, 79, 76, 0, 160, 300, null, null],
|
||||
[0, "손정", null, 0, null, 66, 53, 73, 0, 160, 300, null, null],
|
||||
[0, "손중", null, 0, null, 62, 71, 36, 0, 160, 300, null, null],
|
||||
[0, "손등", null, 0, null, 62, 37, 79, 0, 160, 300, null, null],
|
||||
[0, "손유", null, 0, null, 77, 70, 68, 0, 160, 300, null, null],
|
||||
[0, "손익", null, 0, null, 67, 83, 27, 0, 160, 300, null, null],
|
||||
[0, "손례", null, 0, null, 78, 81, 67, 0, 160, 300, null, null],
|
||||
[0, "태사자", null, 0, null, 93, 94, 72, 0, 160, 300, null, null],
|
||||
[0, "대래동주", null, 0, null, 51, 53, 54, 0, 160, 300, null, null],
|
||||
[0, "대릉", null, 0, null, 70, 75, 39, 0, 160, 300, null, null],
|
||||
[0, "타사대왕", null, 0, null, 62, 59, 70, 0, 160, 300, null, null],
|
||||
[0, "담웅", null, 0, null, 58, 73, 14, 0, 160, 300, null, null],
|
||||
[0, "장윤", null, 0, null, 72, 67, 42, 0, 160, 300, null, null],
|
||||
[0, "조운", null, 0, null, 89, 96, 75, 0, 160, 300, null, null, "상산의 조운 자룡, 길을 뚫겠다!"],
|
||||
[0, "장위", null, 0, null, 74, 66, 45, 0, 160, 300, null, null],
|
||||
[0, "장영", null, 0, null, 75, 74, 41, 0, 160, 300, null, null],
|
||||
[0, "장연", null, 0, null, 76, 81, 57, 0, 160, 300, null, null],
|
||||
[0, "장횡", null, 0, null, 59, 70, 23, 0, 160, 300, null, null],
|
||||
[0, "장온", null, 0, null, 32, 10, 72, 0, 160, 300, null, null],
|
||||
[0, "장개", null, 0, null, 34, 66, 8, 0, 160, 300, null, null],
|
||||
[0, "장각", null, 0, null, 87, 35, 90, 0, 160, 300, null, null],
|
||||
[0, "장기", null, 0, null, 74, 35, 76, 0, 160, 300, null, null],
|
||||
[0, "장의", null, 0, null, 79, 72, 75, 0, 160, 300, null, null],
|
||||
[0, "장훈", null, 0, null, 72, 68, 41, 0, 160, 300, null, null],
|
||||
[0, "장굉", null, 0, null, 24, 22, 86, 0, 160, 300, null, null],
|
||||
[0, "장합", null, 0, null, 92, 89, 73, 0, 160, 300, null, null],
|
||||
[0, "조홍2", null, 0, null, 66, 72, 28, 0, 160, 300, null, null],
|
||||
[0, "장제2", null, 0, null, 70, 66, 55, 0, 160, 300, null, null],
|
||||
[0, "장수", null, 0, null, 80, 73, 64, 0, 160, 300, null, null],
|
||||
[0, "장소", null, 0, null, 41, 13, 87, 0, 160, 300, null, null],
|
||||
[0, "장송", null, 0, null, 40, 6, 85, 0, 160, 300, null, null],
|
||||
[0, "장임", null, 0, null, 85, 84, 78, 0, 160, 300, null, null],
|
||||
[0, "장제", null, 0, null, 67, 43, 80, 0, 160, 300, null, null],
|
||||
[0, "장막", null, 0, null, 52, 53, 71, 0, 160, 300, null, null],
|
||||
[0, "조범", null, 0, null, 28, 21, 32, 0, 160, 300, null, null],
|
||||
[0, "장비", null, 0, null, 87, 98, 52, 0, 160, 300, null, null, "만인적 연인 장비가 왔다 목숨을 내놓거라!"],
|
||||
[0, "장포", null, 0, null, 78, 84, 48, 0, 160, 300, null, null],
|
||||
[0, "장보", null, 0, null, 83, 71, 81, 0, 160, 300, null, null],
|
||||
[0, "장만성", null, 0, null, 75, 81, 45, 0, 160, 300, null, null],
|
||||
[0, "장양", null, 0, null, 72, 70, 66, 0, 160, 300, null, null],
|
||||
[0, "장익", null, 0, null, 75, 74, 76, 0, 160, 300, null, null],
|
||||
[0, "장료", null, 0, null, 95, 94, 78, 0, 160, 300, null, null],
|
||||
[0, "장량", null, 0, null, 78, 80, 74, 0, 160, 300, null, null],
|
||||
[0, "조루", null, 0, null, 70, 43, 68, 0, 160, 300, null, null],
|
||||
[0, "장로", null, 0, null, 65, 42, 81, 0, 160, 300, null, null],
|
||||
[0, "진횡", null, 0, null, 64, 63, 26, 0, 160, 300, null, null],
|
||||
[0, "진응", null, 0, null, 62, 72, 45, 0, 160, 300, null, null],
|
||||
[0, "진기", null, 0, null, 58, 65, 43, 0, 160, 300, null, null],
|
||||
[0, "진궁", null, 0, null, 84, 55, 90, 0, 160, 300, null, null],
|
||||
[0, "진교", null, 0, null, 61, 27, 77, 0, 160, 300, null, null],
|
||||
[0, "진군", null, 0, null, 32, 14, 75, 0, 160, 300, null, null],
|
||||
[0, "진규", null, 0, null, 30, 4, 82, 0, 160, 300, null, null],
|
||||
[0, "진식", null, 0, null, 70, 71, 25, 0, 160, 300, null, null],
|
||||
[0, "진진", null, 0, null, 46, 46, 69, 0, 160, 300, null, null],
|
||||
[0, "진태", null, 0, null, 86, 77, 89, 0, 160, 300, null, null],
|
||||
[0, "진등", null, 0, null, 79, 64, 81, 0, 160, 300, null, null],
|
||||
[0, "진도", null, 0, null, 82, 78, 67, 0, 160, 300, null, null],
|
||||
[0, "진무", null, 0, null, 76, 87, 43, 0, 160, 300, null, null],
|
||||
[0, "진란", null, 0, null, 66, 69, 40, 0, 160, 300, null, null],
|
||||
[0, "진림", null, 0, null, 25, 9, 75, 0, 160, 300, null, null],
|
||||
[0, "정욱", null, 0, null, 76, 49, 94, 0, 160, 300, null, null],
|
||||
[0, "정원지", null, 0, null, 69, 74, 17, 0, 160, 300, null, null],
|
||||
[0, "정은", null, 0, null, 69, 73, 40, 0, 160, 300, null, null],
|
||||
[0, "정원", null, 0, null, 70, 76, 35, 0, 160, 300, null, null],
|
||||
[0, "정보", null, 0, null, 84, 79, 79, 0, 160, 300, null, null],
|
||||
[0, "정봉", null, 0, null, 81, 92, 75, 0, 160, 300, null, null],
|
||||
[0, "전위", null, 0, null, 79, 98, 42, 0, 160, 300, null, null],
|
||||
[0, "전해", null, 0, null, 68, 65, 58, 0, 160, 300, null, null],
|
||||
[0, "전주", null, 0, null, 66, 66, 73, 0, 160, 300, null, null],
|
||||
[0, "전풍", null, 0, null, 82, 43, 96, 0, 160, 300, null, null],
|
||||
[0, "전예", null, 0, null, 90, 85, 86, 0, 160, 300, null, null],
|
||||
[0, "동윤", null, 0, null, 47, 28, 79, 0, 160, 300, null, null],
|
||||
[0, "동화", null, 0, null, 57, 34, 75, 0, 160, 300, null, null],
|
||||
[0, "등애", null, 0, null, 93, 82, 92, 0, 160, 300, null, null],
|
||||
[0, "도겸", null, 0, null, 51, 27, 64, 0, 160, 300, null, null],
|
||||
[0, "등현", null, 0, null, 61, 73, 45, 0, 160, 300, null, null],
|
||||
[0, "등지", null, 0, null, 73, 52, 81, 0, 160, 300, null, null],
|
||||
[0, "동습", null, 0, null, 72, 85, 50, 0, 160, 300, null, null],
|
||||
[0, "동승", null, 0, null, 56, 53, 65, 0, 160, 300, null, null],
|
||||
[0, "동소", null, 0, null, 34, 25, 80, 0, 160, 300, null, null],
|
||||
[0, "동탁", null, 0, null, 91, 87, 72, 0, 160, 300, null, null],
|
||||
[0, "동도나", null, 0, null, 68, 73, 31, 0, 160, 300, null, null],
|
||||
[0, "동민", null, 0, null, 49, 60, 25, 0, 160, 300, null, null],
|
||||
[0, "등무", null, 0, null, 61, 75, 29, 0, 160, 300, null, null],
|
||||
[0, "두기", null, 0, null, 74, 43, 78, 0, 160, 300, null, null],
|
||||
[0, "두예", null, 0, null, 94, 63, 91, 0, 160, 300, null, null],
|
||||
[0, "배원소", null, 0, null, 49, 65, 25, 0, 160, 300, null, null],
|
||||
[0, "마완", null, 0, null, 71, 74, 16, 0, 160, 300, null, null],
|
||||
[0, "마휴", null, 0, null, 68, 73, 48, 0, 160, 300, null, null],
|
||||
[0, "파재", null, 0, null, 74, 74, 55, 0, 160, 300, null, null],
|
||||
[0, "마준", null, 0, null, 38, 52, 31, 0, 160, 300, null, null],
|
||||
[0, "마속", null, 0, null, 61, 67, 84, 0, 160, 300, null, null],
|
||||
[0, "마대", null, 0, null, 79, 85, 62, 0, 160, 300, null, null],
|
||||
[0, "마충", null, 0, null, 78, 72, 68, 0, 160, 300, null, null],
|
||||
[0, "마초", null, 0, null, 86, 97, 44, 0, 160, 300, null, null, "서량의 금마초 나가신다!"],
|
||||
[0, "마철", null, 0, null, 70, 62, 58, 0, 160, 300, null, null],
|
||||
[0, "마등", null, 0, null, 85, 80, 52, 0, 160, 300, null, null],
|
||||
[0, "마량", null, 0, null, 53, 23, 85, 0, 160, 300, null, null],
|
||||
[0, "반준", null, 0, null, 61, 46, 82, 0, 160, 300, null, null],
|
||||
[0, "반장", null, 0, null, 76, 80, 69, 0, 160, 300, null, null],
|
||||
[0, "번조", null, 0, null, 66, 73, 31, 0, 160, 300, null, null],
|
||||
[0, "번능", null, 0, null, 69, 61, 36, 0, 160, 300, null, null],
|
||||
[0, "반봉", null, 0, null, 56, 77, 4, 0, 160, 300, null, null],
|
||||
[0, "비의", null, 0, null, 82, 56, 88, 0, 160, 300, null, null],
|
||||
[0, "비연", null, 0, null, 60, 66, 21, 0, 160, 300, null, null],
|
||||
[0, "비시", null, 0, null, 18, 28, 65, 0, 160, 300, null, null],
|
||||
[0, "미축", null, 0, null, 33, 29, 78, 0, 160, 300, null, null],
|
||||
[0, "미방", null, 0, null, 54, 61, 32, 0, 160, 300, null, null],
|
||||
[0, "비요", null, 0, null, 70, 66, 73, 0, 160, 300, null, null],
|
||||
[0, "무안국", null, 0, null, 70, 79, 34, 0, 160, 300, null, null],
|
||||
[0, "풍습", null, 0, null, 72, 71, 39, 0, 160, 300, null, null],
|
||||
[0, "부사인", null, 0, null, 46, 63, 37, 0, 160, 300, null, null],
|
||||
[0, "부첨", null, 0, null, 73, 85, 76, 0, 160, 300, null, null],
|
||||
[0, "부손", null, 0, null, 29, 13, 70, 0, 160, 300, null, null],
|
||||
[0, "문앙", null, 0, null, 76, 96, 65, 0, 160, 300, null, null],
|
||||
[0, "문흠", null, 0, null, 74, 80, 43, 0, 160, 300, null, null],
|
||||
[0, "문추", null, 0, null, 87, 95, 49, 0, 160, 300, null, null],
|
||||
[0, "문빙", null, 0, null, 88, 85, 69, 0, 160, 300, null, null],
|
||||
[0, "변희", null, 0, null, 56, 70, 62, 0, 160, 300, null, null],
|
||||
[0, "망아장", null, 0, null, 45, 79, 3, 0, 160, 300, null, null],
|
||||
[0, "봉기", null, 0, null, 56, 48, 84, 0, 160, 300, null, null],
|
||||
[0, "방희", null, 0, null, 60, 38, 69, 0, 160, 300, null, null],
|
||||
[0, "법정", null, 0, null, 82, 47, 94, 0, 160, 300, null, null],
|
||||
[0, "방통", null, 0, null, 79, 34, 97, 0, 160, 300, null, null],
|
||||
[0, "방덕", null, 0, null, 89, 94, 72, 0, 160, 300, null, null],
|
||||
[0, "포륭", null, 0, null, 58, 76, 49, 0, 160, 300, null, null],
|
||||
[0, "목순", null, 0, null, 52, 77, 11, 0, 160, 300, null, null],
|
||||
[0, "목록대왕", null, 0, null, 65, 71, 39, 0, 160, 300, null, null],
|
||||
[0, "보즐", null, 0, null, 83, 51, 84, 0, 160, 300, null, null],
|
||||
[0, "만총", null, 0, null, 88, 64, 87, 0, 160, 300, null, null],
|
||||
[0, "모개", null, 0, null, 63, 39, 60, 0, 160, 300, null, null],
|
||||
[0, "맹획", null, 0, null, 81, 88, 42, 0, 160, 300, null, null],
|
||||
[0, "맹체", null, 0, null, 75, 73, 75, 0, 160, 300, null, null],
|
||||
[0, "맹우", null, 0, null, 50, 68, 22, 0, 160, 300, null, null],
|
||||
[0, "유섭", null, 0, null, 62, 79, 24, 0, 160, 300, null, null],
|
||||
[0, "양부", null, 0, null, 62, 68, 68, 0, 160, 300, null, null],
|
||||
[0, "옹개", null, 0, null, 73, 75, 57, 0, 160, 300, null, null],
|
||||
[0, "양의", null, 0, null, 68, 40, 82, 0, 160, 300, null, null],
|
||||
[0, "양호", null, 0, null, 92, 69, 90, 0, 160, 300, null, null],
|
||||
[0, "양홍", null, 0, null, 33, 15, 77, 0, 160, 300, null, null],
|
||||
[0, "양앙", null, 0, null, 68, 72, 38, 0, 160, 300, null, null],
|
||||
[0, "양추", null, 0, null, 52, 65, 40, 0, 160, 300, null, null],
|
||||
[0, "양수", null, 0, null, 46, 23, 83, 0, 160, 300, null, null],
|
||||
[0, "양추2", null, 0, null, 67, 64, 60, 0, 160, 300, null, null],
|
||||
[0, "양송", null, 0, null, 17, 5, 28, 0, 160, 300, null, null],
|
||||
[0, "양임", null, 0, null, 70, 78, 56, 0, 160, 300, null, null],
|
||||
[0, "양조", null, 0, null, 53, 61, 36, 0, 160, 300, null, null],
|
||||
[0, "양백", null, 0, null, 44, 45, 19, 0, 160, 300, null, null],
|
||||
[0, "양부2", null, 0, null, 67, 50, 83, 0, 160, 300, null, null],
|
||||
[0, "양봉", null, 0, null, 66, 65, 31, 0, 160, 300, null, null],
|
||||
[0, "양봉2", null, 0, null, 54, 62, 53, 0, 160, 300, null, null],
|
||||
[0, "뇌동", null, 0, null, 69, 78, 51, 0, 160, 300, null, null],
|
||||
[0, "뇌박", null, 0, null, 62, 70, 36, 0, 160, 300, null, null],
|
||||
[0, "이이", null, 0, null, 63, 77, 19, 0, 160, 300, null, null],
|
||||
[0, "이회", null, 0, null, 79, 65, 79, 0, 160, 300, null, null],
|
||||
[0, "이각", null, 0, null, 69, 72, 24, 0, 160, 300, null, null],
|
||||
[0, "육항", null, 0, null, 93, 63, 92, 0, 160, 300, null, null],
|
||||
[0, "육적", null, 0, null, 20, 7, 72, 0, 160, 300, null, null],
|
||||
[0, "육손", null, 0, null, 95, 71, 96, 0, 160, 300, null, null],
|
||||
[0, "이엄", null, 0, null, 83, 84, 76, 0, 160, 300, null, null],
|
||||
[0, "이유", null, 0, null, 61, 26, 93, 0, 160, 300, null, null],
|
||||
[0, "이숙", null, 0, null, 46, 69, 61, 0, 160, 300, null, null],
|
||||
[0, "이통", null, 0, null, 73, 81, 62, 0, 160, 300, null, null],
|
||||
[0, "이전", null, 0, null, 78, 80, 79, 0, 160, 300, null, null],
|
||||
[0, "이풍", null, 0, null, 69, 74, 50, 0, 160, 300, null, null],
|
||||
[0, "유언", null, 0, null, 61, 38, 80, 0, 160, 300, null, null],
|
||||
[0, "유괴", null, 0, null, 71, 73, 67, 0, 160, 300, null, null],
|
||||
[0, "유기", null, 0, null, 52, 12, 63, 0, 160, 300, null, null],
|
||||
[0, "유우", null, 0, null, 62, 33, 75, 0, 160, 300, null, null],
|
||||
[0, "유훈", null, 0, null, 47, 63, 35, 0, 160, 300, null, null],
|
||||
[0, "유현", null, 0, null, 54, 66, 51, 0, 160, 300, null, null],
|
||||
[0, "유순", null, 0, null, 63, 46, 41, 0, 160, 300, null, null],
|
||||
[0, "유장", null, 0, null, 31, 5, 34, 0, 160, 300, null, null],
|
||||
[0, "유심", null, 0, null, 60, 62, 70, 0, 160, 300, null, null],
|
||||
[0, "유선", null, 0, null, 3, 5, 9, 0, 160, 300, null, null],
|
||||
[0, "유종", null, 0, null, 24, 22, 65, 0, 160, 300, null, null],
|
||||
[0, "유도", null, 0, null, 25, 23, 26, 0, 160, 300, null, null],
|
||||
[0, "유파", null, 0, null, 29, 22, 75, 0, 160, 300, null, null],
|
||||
[0, "유반", null, 0, null, 69, 76, 47, 0, 160, 300, null, null],
|
||||
[0, "유비", null, 0, null, 87, 78, 75, 0, 160, 300, null, null, "한왕실은 중산정왕의 후손인 내가 이어받겠다...!"],
|
||||
[0, "유표", null, 0, null, 48, 31, 72, 0, 160, 300, null, null],
|
||||
[0, "유복", null, 0, null, 64, 49, 74, 0, 160, 300, null, null],
|
||||
[0, "유벽", null, 0, null, 70, 72, 47, 0, 160, 300, null, null],
|
||||
[0, "유봉", null, 0, null, 75, 79, 44, 0, 160, 300, null, null],
|
||||
[0, "유엽", null, 0, null, 56, 32, 92, 0, 160, 300, null, null],
|
||||
[0, "유요", null, 0, null, 62, 67, 46, 0, 160, 300, null, null],
|
||||
[0, "여위황", null, 0, null, 58, 63, 29, 0, 160, 300, null, null],
|
||||
[0, "요화", null, 0, null, 73, 76, 69, 0, 160, 300, null, null],
|
||||
[0, "양흥", null, 0, null, 61, 65, 19, 0, 160, 300, null, null],
|
||||
[0, "양습", null, 0, null, 73, 40, 74, 0, 160, 300, null, null],
|
||||
[0, "양서", null, 0, null, 56, 62, 66, 0, 160, 300, null, null],
|
||||
[0, "능조", null, 0, null, 75, 81, 42, 0, 160, 300, null, null],
|
||||
[0, "능통", null, 0, null, 83, 89, 60, 0, 160, 300, null, null],
|
||||
[0, "여개", null, 0, null, 53, 30, 67, 0, 160, 300, null, null],
|
||||
[0, "여건", null, 0, null, 57, 70, 62, 0, 160, 300, null, null],
|
||||
[0, "여광", null, 0, null, 56, 70, 13, 0, 160, 300, null, null],
|
||||
[0, "여상", null, 0, null, 54, 71, 12, 0, 160, 300, null, null],
|
||||
[0, "여대", null, 0, null, 80, 71, 70, 0, 160, 300, null, null],
|
||||
[0, "여범", null, 0, null, 73, 63, 75, 0, 160, 300, null, null],
|
||||
[0, "여포", null, 0, null, 88, 100, 36, 0, 160, 300, null, null, "다 덤비거라! 하하하하"],
|
||||
[0, "여몽", null, 0, null, 91, 81, 90, 0, 160, 300, null, null],
|
||||
[0, "윤직", null, 0, null, 46, 42, 73, 0, 160, 300, null, null],
|
||||
[0, "냉포", null, 0, null, 71, 82, 61, 0, 160, 300, null, null],
|
||||
[0, "누규", null, 0, null, 52, 13, 87, 0, 160, 300, null, null],
|
||||
[0, "노숙", null, 0, null, 89, 56, 93, 0, 160, 300, null, null],
|
||||
[0, "노식", null, 0, null, 86, 63, 82, 0, 160, 300, null, null],
|
||||
[0, "범강", null, 0, null, 49, 50, 36, 0, 160, 300, null, null],
|
||||
[0, "장달", null, 0, null, 43, 56, 34, 0, 160, 300, null, null],
|
||||
[0, "규람", null, 0, null, 55, 70, 58, 0, 160, 300, null, null],
|
||||
[0, "대원", null, 0, null, 38, 32, 68, 0, 160, 300, null, null],
|
||||
[0, "왕기", null, 0, null, 81, 72, 86, 0, 160, 300, null, null],
|
||||
[0, "왕상", null, 0, null, 23, 19, 68, 0, 160, 300, null, null],
|
||||
[0, "왕돈", null, 0, null, 60, 66, 46, 0, 160, 300, null, null],
|
||||
[0, "악침", null, 0, null, 73, 75, 43, 0, 160, 300, null, null],
|
||||
[0, "하제", null, 0, null, 83, 70, 82, 0, 160, 300, null, null],
|
||||
[0, "환범", null, 0, null, 40, 11, 78, 0, 160, 300, null, null],
|
||||
[0, "견초", null, 0, null, 72, 79, 73, 0, 160, 300, null, null],
|
||||
[0, "고당륭", null, 0, null, 35, 24, 76, 0, 160, 300, null, null],
|
||||
[0, "오찬", null, 0, null, 68, 41, 78, 0, 160, 300, null, null],
|
||||
[0, "호질", null, 0, null, 73, 46, 74, 0, 160, 300, null, null],
|
||||
[0, "오질", null, 0, null, 16, 29, 68, 0, 160, 300, null, null],
|
||||
[0, "호준", null, 0, null, 79, 76, 62, 0, 160, 300, null, null],
|
||||
[0, "고담", null, 0, null, 53, 23, 77, 0, 160, 300, null, null],
|
||||
[0, "최림", null, 0, null, 32, 22, 66, 0, 160, 300, null, null],
|
||||
[0, "사마망", null, 0, null, 78, 58, 83, 0, 160, 300, null, null],
|
||||
[0, "주이", null, 0, null, 70, 73, 61, 0, 160, 300, null, null],
|
||||
[0, "전단", null, 0, null, 67, 64, 39, 0, 160, 300, null, null],
|
||||
[0, "조우", null, 0, null, 50, 43, 37, 0, 160, 300, null, null],
|
||||
[0, "조상", null, 0, null, 39, 33, 30, 0, 160, 300, null, null],
|
||||
[0, "조방", null, 0, null, 20, 14, 27, 0, 160, 300, null, null],
|
||||
[0, "태사향", null, 0, null, 57, 66, 48, 0, 160, 300, null, null],
|
||||
[0, "장휴", null, 0, null, 63, 27, 74, 0, 160, 300, null, null],
|
||||
[0, "장호", null, 0, null, 75, 74, 51, 0, 160, 300, null, null],
|
||||
[0, "조광", null, 0, null, 67, 71, 53, 0, 160, 300, null, null],
|
||||
[0, "장집", null, 0, null, 76, 29, 80, 0, 160, 300, null, null],
|
||||
[0, "장승", null, 0, null, 77, 70, 75, 0, 160, 300, null, null],
|
||||
[0, "장소2", null, 0, null, 23, 56, 31, 0, 160, 300, null, null],
|
||||
[0, "조통", null, 0, null, 68, 67, 61, 0, 160, 300, null, null],
|
||||
[0, "진표", null, 0, null, 66, 42, 74, 0, 160, 300, null, null],
|
||||
[0, "정무", null, 0, null, 56, 35, 75, 0, 160, 300, null, null],
|
||||
[0, "정봉2", null, 0, null, 66, 66, 53, 0, 160, 300, null, null],
|
||||
[0, "전만", null, 0, null, 51, 73, 39, 0, 160, 300, null, null],
|
||||
[0, "마균", null, 0, null, 22, 17, 71, 0, 160, 300, null, null],
|
||||
[0, "방회", null, 0, null, 69, 75, 49, 0, 160, 300, null, null],
|
||||
[0, "낙통", null, 0, null, 76, 58, 75, 0, 160, 300, null, null],
|
||||
[0, "육개", null, 0, null, 65, 61, 79, 0, 160, 300, null, null],
|
||||
[0, "유찬", null, 0, null, 78, 81, 64, 0, 160, 300, null, null],
|
||||
[0, "유소", null, 0, null, 68, 53, 74, 0, 160, 300, null, null],
|
||||
[0, "요립", null, 0, null, 32, 15, 76, 0, 160, 300, null, null],
|
||||
[0, "여거", null, 0, null, 78, 69, 71, 0, 160, 300, null, null],
|
||||
[0, "제갈첨", null, 0, null, 70, 57, 76, 0, 160, 300, null, null],
|
||||
[0, "손휴", null, 0, null, 57, 42, 78, 0, 160, 300, null, null],
|
||||
[0, "극정", null, 0, null, 42, 23, 68, 0, 160, 300, null, null],
|
||||
[0, "호분", null, 0, null, 71, 76, 50, 0, 160, 300, null, null],
|
||||
[0, "손량", null, 0, null, 32, 26, 70, 0, 160, 300, null, null],
|
||||
[0, "마막", null, 0, null, 34, 12, 44, 0, 160, 300, null, null],
|
||||
[0, "손호", null, 0, null, 41, 73, 71, 0, 160, 300, null, null],
|
||||
[0, "조모", null, 0, null, 54, 61, 59, 0, 160, 300, null, null],
|
||||
[0, "조환", null, 0, null, 30, 28, 30, 0, 160, 300, null, null],
|
||||
[0, "사마유", null, 0, null, 71, 68, 75, 0, 160, 300, null, null],
|
||||
[0, "제갈상", null, 0, null, 64, 79, 62, 0, 160, 300, null, null],
|
||||
[0, "손화", null, 0, null, 31, 39, 68, 0, 160, 300, null, null],
|
||||
[0, "염우", null, 0, null, 52, 61, 51, 0, 160, 300, null, null],
|
||||
[0, "왕경", null, 0, null, 67, 63, 71, 0, 160, 300, null, null],
|
||||
[0, "왕혼", null, 0, null, 74, 71, 63, 0, 160, 300, null, null],
|
||||
[0, "곽혁", null, 0, null, 33, 29, 70, 0, 160, 300, null, null],
|
||||
[0, "가범", null, 0, null, 60, 62, 73, 0, 160, 300, null, null],
|
||||
[0, "서질", null, 0, null, 68, 83, 24, 0, 160, 300, null, null],
|
||||
[0, "손준", null, 0, null, 64, 70, 65, 0, 160, 300, null, null],
|
||||
[0, "손침", null, 0, null, 58, 55, 65, 0, 160, 300, null, null],
|
||||
[0, "우사", null, 0, null, 61, 34, 74, 0, 160, 300, null, null],
|
||||
[0, "진건", null, 0, null, 72, 71, 65, 0, 160, 300, null, null],
|
||||
[0, "동궐", null, 0, null, 65, 59, 76, 0, 160, 300, null, null],
|
||||
[0, "당자", null, 0, null, 61, 71, 50, 0, 160, 300, null, null],
|
||||
[0, "등충", null, 0, null, 76, 80, 69, 0, 160, 300, null, null],
|
||||
[0, "황숭", null, 0, null, 67, 63, 72, 0, 160, 300, null, null],
|
||||
[0, "화핵", null, 0, null, 20, 24, 71, 0, 160, 300, null, null],
|
||||
[0, "허의", null, 0, null, 51, 74, 15, 0, 160, 300, null, null],
|
||||
[0, "송겸", null, 0, null, 66, 78, 42, 0, 160, 300, null, null],
|
||||
[0, "호제", null, 0, null, 57, 39, 68, 0, 160, 300, null, null],
|
||||
[0, "나헌", null, 0, null, 86, 70, 82, 0, 160, 300, null, null],
|
||||
[0, "노숙2", null, 0, null, 73, 53, 74, 0, 160, 300, null, null],
|
||||
[0, "구성", null, 0, null, 63, 70, 38, 0, 160, 300, null, null],
|
||||
[0, "어부라", null, 0, null, 72, 68, 21, 0, 160, 300, null, null],
|
||||
[0, "아하소과", null, 0, null, 61, 76, 13, 0, 160, 300, null, null],
|
||||
[0, "가비능", null, 0, null, 77, 69, 52, 0, 160, 300, null, null],
|
||||
[0, "구력거", null, 0, null, 80, 68, 56, 0, 160, 300, null, null],
|
||||
[0, "강단", null, 0, null, 65, 83, 48, 0, 160, 300, null, null],
|
||||
[0, "황란", null, 0, null, 63, 75, 44, 0, 160, 300, null, null],
|
||||
[0, "호주천", null, 0, null, 70, 71, 40, 0, 160, 300, null, null],
|
||||
[0, "종리목", null, 0, null, 84, 72, 82, 0, 160, 300, null, null],
|
||||
[0, "제갈교", null, 0, null, 62, 27, 75, 0, 160, 300, null, null],
|
||||
[0, "답돈", null, 0, null, 84, 82, 61, 0, 160, 300, null, null],
|
||||
[0, "반임", null, 0, null, 66, 79, 38, 0, 160, 300, null, null],
|
||||
[0, "보도근", null, 0, null, 64, 73, 50, 0, 160, 300, null, null],
|
||||
[0, "미당대왕", null, 0, null, 59, 69, 21, 0, 160, 300, null, null],
|
||||
[0, "유표2", null, 0, null, 73, 74, 48, 0, 160, 300, null, null],
|
||||
[0, "루반", null, 0, null, 65, 76, 39, 0, 160, 300, null, null],
|
||||
[0, "손관", null, 0, null, 72, 78, 51, 0, 160, 300, null, null],
|
||||
[0, "곽석", null, 0, null, 59, 71, 48, 0, 160, 300, null, null],
|
||||
[0, "주조", null, 0, null, 63, 68, 26, 0, 160, 300, null, null],
|
||||
[0, "장거", null, 0, null, 79, 75, 56, 0, 160, 300, null, null],
|
||||
[0, "장순", null, 0, null, 73, 81, 60, 0, 160, 300, null, null],
|
||||
[0, "철리길", null, 0, null, 77, 70, 52, 0, 160, 300, null, null],
|
||||
[0, "주삭", null, 0, null, 54, 60, 50, 0, 160, 300, null, null],
|
||||
[0, "황월영", null, 0, null, 46, 33, 78, 0, 160, 300, null, null],
|
||||
[0, "채염", null, 0, null, 42, 26, 82, 0, 160, 300, null, null],
|
||||
[0, "소교", null, 0, null, 23, 15, 78, 0, 160, 300, null, null],
|
||||
[0, "신헌영", null, 0, null, 65, 35, 90, 0, 160, 300, null, null, "내가 남자로 태어났더라면..."],
|
||||
[0, "손상향", null, 0, null, 75, 79, 55, 0, 160, 300, null, null],
|
||||
[0, "대교", null, 0, null, 22, 30, 78, 0, 160, 300, null, null],
|
||||
[0, "초선", null, 0, null, 12, 22, 71, 0, 160, 300, null, null],
|
||||
[0, "교모", null, 0, null, 54, 45, 69, 0, 160, 300, null, null],
|
||||
[0, "관구수", null, 0, null, 58, 62, 33, 0, 160, 300, null, null],
|
||||
[0, "관구전", null, 0, null, 63, 60, 69, 0, 160, 300, null, null],
|
||||
[0, "원유", null, 0, null, 56, 40, 73, 0, 160, 300, null, null],
|
||||
[0, "왕광", null, 0, null, 65, 55, 61, 0, 160, 300, null, null],
|
||||
[0, "신창", null, 0, null, 50, 26, 42, 0, 160, 300, null, null],
|
||||
[0, "사마주", null, 0, null, 61, 52, 61, 0, 160, 300, null, null],
|
||||
[0, "양제", null, 0, null, 67, 68, 71, 0, 160, 300, null, null],
|
||||
[0, "성만", null, 0, null, 61, 68, 66, 0, 160, 300, null, null],
|
||||
[0, "오연", null, 0, null, 66, 73, 42, 0, 160, 300, null, null],
|
||||
[0, "맹충", null, 0, null, 47, 28, 72, 0, 160, 300, null, null],
|
||||
[0, "잠혼", null, 0, null, 1, 1, 22, 0, 160, 300, null, null],
|
||||
[0, "사정", null, 0, null, 64, 76, 34, 0, 160, 300, null, null],
|
||||
[0, "심영", null, 0, null, 70, 77, 61, 0, 160, 300, null, null],
|
||||
[0, "도준", null, 0, null, 65, 66, 46, 0, 160, 300, null, null],
|
||||
[0, "만욱", null, 0, null, 21, 25, 71, 0, 160, 300, null, null],
|
||||
[0, "오언", null, 0, null, 76, 72, 77, 0, 160, 300, null, null],
|
||||
[0, "위막", null, 0, null, 57, 62, 59, 0, 160, 300, null, null],
|
||||
[0, "시삭", null, 0, null, 38, 65, 47, 0, 160, 300, null, null],
|
||||
[0, "전속", null, 0, null, 47, 60, 55, 0, 160, 300, null, null],
|
||||
[0, "장화", null, 0, null, 36, 27, 78, 0, 160, 300, null, null],
|
||||
[0, "오거", null, 0, null, 49, 61, 23, 0, 160, 300, null, null],
|
||||
[0, "추정", null, 0, null, 70, 64, 66, 0, 160, 300, null, null],
|
||||
[0, "장특", null, 0, null, 73, 54, 75, 0, 160, 300, null, null],
|
||||
[0, "곽마", null, 0, null, 68, 71, 47, 0, 160, 300, null, null],
|
||||
[0, "석포", null, 0, null, 69, 71, 56, 0, 160, 300, null, null],
|
||||
[0, "견홍", null, 0, null, 70, 74, 66, 0, 160, 300, null, null],
|
||||
[0, "한거자", null, 0, null, 51, 59, 51, 0, 160, 300, null, null],
|
||||
[0, "휴원진", null, 0, null, 52, 68, 45, 0, 160, 300, null, null],
|
||||
[0, "곽원", null, 0, null, 66, 73, 36, 0, 160, 300, null, null],
|
||||
[0, "계옹", null, 0, null, 63, 52, 41, 0, 160, 300, null, null],
|
||||
[0, "이부", null, 0, null, 31, 36, 74, 0, 160, 300, null, null],
|
||||
[0, "왕업", null, 0, null, 33, 6, 35, 0, 160, 300, null, null],
|
||||
[0, "좌혁", null, 0, null, 62, 66, 51, 0, 160, 300, null, null],
|
||||
[0, "화타", null, 0, null, 57, 25, 73, 0, 160, 300, null, null, "아픈 사람들 모두 내게 오시오~"],
|
||||
[0, "사마휘", null, 0, null, 55, 26, 82, 0, 160, 300, null, null, "좋지 좋아~"],
|
||||
[0, "우길", null, 0, null, 23, 15, 90, 0, 160, 300, null, null, "길조로다"],
|
||||
[0, "헌제", null, 0, null, 22, 18, 68, 0, 160, 300, null, null, "한왕실은 정녕 여기서 끝이란 말인가.."],
|
||||
[0, "백기", null, 0, null, 100, 88, 82, 0, 160, 300, null, null],
|
||||
[0, "한신", null, 0, null, 100, 74, 94, 0, 160, 300, null, null],
|
||||
[0, "악비", null, 0, null, 99, 91, 86, 0, 160, 300, null, null],
|
||||
[0, "항적", null, 0, null, 98, 100, 65, 0, 160, 300, null, null, "내가 바로 초패왕 항우다!!"],
|
||||
[0, "악의", null, 0, null, 98, 75, 93, 0, 160, 300, null, null],
|
||||
[0, "영정", null, 0, null, 97, 55, 90, 0, 160, 300, null, null],
|
||||
[0, "강상", null, 0, null, 95, 49, 100, 0, 160, 300, null, null],
|
||||
[0, "제나라전단", null, 0, null, 96, 75, 95, 0, 160, 300, null, null],
|
||||
[0, "이목", null, 0, null, 96, 78, 88, 0, 160, 300, null, null],
|
||||
[0, "염파", null, 0, null, 95, 96, 75, 0, 160, 300, null, null],
|
||||
[0, "왕전", null, 0, null, 94, 72, 83, 0, 160, 300, null, null],
|
||||
[0, "오기", null, 0, null, 94, 66, 95, 0, 160, 300, null, null],
|
||||
[0, "곽거병", null, 0, null, 93, 91, 53, 0, 160, 300, null, null],
|
||||
[0, "영포", null, 0, null, 82, 91, 54, 0, 160, 300, null, null],
|
||||
[0, "이신", null, 0, null, 81, 88, 63, 0, 160, 300, null, null],
|
||||
[0, "몽념", null, 0, null, 87, 86, 71, 0, 160, 300, null, null],
|
||||
[0, "제나라전기", null, 0, null, 80, 85, 44, 0, 160, 300, null, null],
|
||||
[0, "극신", null, 0, null, 76, 83, 42, 0, 160, 300, null, null],
|
||||
[0, "항연", null, 0, null, 89, 80, 77, 0, 160, 300, null, null],
|
||||
[0, "인상여", null, 0, null, 69, 38, 96, 0, 160, 300, null, null],
|
||||
[0, "장자방", null, 0, null, 72, 40, 100, 0, 160, 300, null, null],
|
||||
[0, "관이오", null, 0, null, 85, 64, 99, 0, 160, 300, null, null],
|
||||
[0, "손빈", null, 0, null, 83, 22, 98, 0, 160, 300, null, null],
|
||||
[0, "소진", null, 0, null, 90, 47, 96, 0, 160, 300, null, null],
|
||||
[0, "범증", null, 0, null, 68, 24, 94, 0, 160, 300, null, null],
|
||||
[0, "위나라장의", null, 0, null, 75, 23, 93, 0, 160, 300, null, null],
|
||||
[0, "공구", null, 0, null, 68, 70, 91, 0, 160, 300, null, null],
|
||||
[0, "소하", null, 0, null, 56, 27, 97, 0, 160, 300, null, null],
|
||||
[0, "한비", null, 0, null, 49, 18, 97, 0, 160, 300, null, null],
|
||||
[0, "이사", null, 0, null, 48, 24, 95, 0, 160, 300, null, null],
|
||||
[0, "전문", null, 0, null, 79, 67, 89, 0, 160, 300, null, null],
|
||||
[0, "황헐", null, 0, null, 81, 68, 88, 0, 160, 300, null, null],
|
||||
[0, "방난", null, 0, null, 88, 95, 66, 0, 160, 300, null, null],
|
||||
[0, "개섭", null, 0, null, 43, 97, 54, 0, 160, 300, null, null],
|
||||
[0, "형가", null, 0, null, 42, 89, 43, 0, 160, 300, null, null],
|
||||
[0, "유방", null, 0, null, 90, 75, 85, 0, 160, 300, null, null, "나는 사람을 쓰는 재주로 천하를 얻었다"],
|
||||
[0, "하리", null, 0, null, 99, 99, 89, 0, 160, 300, null, null, "내 업적을 따라올 사람이 있을까?"],
|
||||
[0, "헹이", null, 0, null, 97, 72, 90, 0, 160, 300, null, null, "맛있다 'ㅅ'"],
|
||||
[0, "나나", null, 0, null, 96, 71, 86, 0, 160, 300, null, null, "이번 전쟁을 계산해보면 말이죠..."],
|
||||
[0, "장임2", null, 0, null, 90, 87, 85, 0, 160, 300, null, null, "으리!"],
|
||||
[0, "하야미", null, 0, null, 94, 85, 92, 0, 160, 300, null, null, "흑막이 되어볼까요"],
|
||||
[0, "이시리스", null, 0, null, 96, 80, 94, 0, 160, 300, null, null],
|
||||
[0, "연채홍", null, 0, null, 90, 81, 88, 0, 160, 300, null, null, "엄마도 천통할수 있다!"],
|
||||
[0, "임사영", null, 0, null, 75, 75, 75, 0, 160, 300, null, null, "일반인 양민입니다"],
|
||||
[0, "장군보", null, 0, null, 84, 90, 68, 0, 160, 300, null, null],
|
||||
[0, "크렌스", null, 0, null, 92, 80, 76, 0, 160, 300, null, null],
|
||||
[0, "콘", null, 0, null, 88, 96, 85, 0, 160, 300, null, null],
|
||||
[0, "리즈나", null, 0, null, 93, 65, 75, 0, 160, 300, null, null, "내가 다 했다"],
|
||||
[0, "오티누스", null, 0, null, 92, 89, 88, 0, 160, 300, null, null],
|
||||
[0, "네시", null, 0, null, 87, 85, 92, 0, 160, 300, null, null, "안 자고 싸우면 이겨요"]
|
||||
],
|
||||
"general_ex":[
|
||||
[0, "복양흥", null, 0, null, 37, 32, 70, 0, 160, 300, null, null],
|
||||
[0, "왕충", null, 0, null, 39, 57, 21, 0, 160, 300, null, null],
|
||||
[0, "구건", null, 0, null, 39, 52, 65, 0, 160, 300, null, null],
|
||||
[0, "등윤", null, 0, null, 29, 41, 71, 0, 160, 300, null, null],
|
||||
[0, "국연", null, 0, null, 50, 19, 71, 0, 160, 300, null, null],
|
||||
[0, "양흔", null, 0, null, 61, 68, 61, 0, 160, 300, null, null],
|
||||
[0, "이감", null, 0, null, 58, 69, 33, 0, 160, 300, null, null],
|
||||
[0, "마운록", null, 0, null, 72, 78, 53, 0, 160, 300, null, null],
|
||||
[0, "황호", null, 0, null, 1, 1, 19, 0, 160, 300, null, null],
|
||||
[0, "왕융", null, 0, null, 57, 36, 72, 0, 160, 300, null, null],
|
||||
[0, "설영", null, 0, null, 49, 18, 64, 0, 160, 300, null, null],
|
||||
[0, "설후", null, 0, null, 17, 15, 68, 0, 160, 300, null, null],
|
||||
[0, "정의", null, 0, null, 15, 5, 64, 0, 160, 300, null, null],
|
||||
[0, "누현", null, 0, null, 23, 22, 67, 0, 160, 300, null, null],
|
||||
[0, "당빈", null, 0, null, 67, 74, 59, 0, 160, 300, null, null],
|
||||
[0, "위풍", null, 0, null, 52, 23, 72, 0, 160, 300, null, null],
|
||||
[0, "초이", null, 0, null, 62, 69, 63, 0, 160, 300, null, null],
|
||||
[0, "장반", null, 0, null, 63, 73, 62, 0, 160, 300, null, null],
|
||||
[0, "장구", null, 0, null, 69, 72, 44, 0, 160, 300, null, null],
|
||||
[0, "보협", null, 0, null, 71, 49, 69, 0, 160, 300, null, null],
|
||||
[0, "보천", null, 0, null, 71, 60, 71, 0, 160, 300, null, null],
|
||||
[0, "번건", null, 0, null, 41, 24, 71, 0, 160, 300, null, null],
|
||||
[0, "부융", null, 0, null, 66, 72, 46, 0, 160, 300, null, null],
|
||||
[0, "사찬", null, 0, null, 60, 72, 54, 0, 160, 300, null, null],
|
||||
[0, "당균", null, 0, null, 33, 24, 77, 0, 160, 300, null, null],
|
||||
[0, "공주", null, 0, null, 26, 16, 68, 0, 160, 300, null, null],
|
||||
[0, "소유", null, 0, null, 50, 59, 49, 0, 160, 300, null, null],
|
||||
[0, "오강", null, 0, null, 48, 38, 65, 0, 160, 300, null, null],
|
||||
[0, "정병", null, 0, null, 16, 15, 71, 0, 160, 300, null, null],
|
||||
[0, "원요", null, 0, null, 41, 50, 41, 0, 160, 300, null, null],
|
||||
[0, "하만", null, 0, null, 66, 77, 12, 0, 160, 300, null, null],
|
||||
[0, "장빈", null, 0, null, 27, 23, 64, 0, 160, 300, null, null],
|
||||
[0, "손이", null, 0, null, 69, 71, 55, 0, 160, 300, null, null],
|
||||
[0, "손수", null, 0, null, 55, 51, 53, 0, 160, 300, null, null],
|
||||
[0, "우전", null, 0, null, 64, 76, 40, 0, 160, 300, null, null],
|
||||
[0, "손광", null, 0, null, 52, 46, 44, 0, 160, 300, null, null],
|
||||
[0, "위소", null, 0, null, 16, 19, 65, 0, 160, 300, null, null],
|
||||
[0, "전역", null, 0, null, 60, 63, 38, 0, 160, 300, null, null],
|
||||
[0, "손기", null, 0, null, 60, 67, 51, 0, 160, 300, null, null],
|
||||
[0, "전기", null, 0, null, 49, 69, 61, 0, 160, 300, null, null],
|
||||
[0, "전상", null, 0, null, 2, 4, 12, 0, 160, 300, null, null],
|
||||
[0, "유성", null, 0, null, 45, 65, 33, 0, 160, 300, null, null],
|
||||
[0, "이성", null, 0, null, 12, 22, 61, 0, 160, 300, null, null],
|
||||
[0, "양강", null, 0, null, 60, 69, 40, 0, 160, 300, null, null],
|
||||
[0, "양령", null, 0, null, 57, 61, 21, 0, 160, 300, null, null],
|
||||
[0, "부하", null, 0, null, 44, 35, 81, 0, 160, 300, null, null],
|
||||
[0, "유화", null, 0, null, 21, 16, 59, 0, 160, 300, null, null],
|
||||
[0, "포신", null, 0, null, 77, 67, 81, 0, 160, 300, null, null],
|
||||
[0, "유대", null, 0, null, 53, 65, 32, 0, 160, 300, null, null],
|
||||
[0, "문호", null, 0, null, 66, 72, 45, 0, 160, 300, null, null],
|
||||
[0, "방열", null, 0, null, 68, 78, 44, 0, 160, 300, null, null],
|
||||
[0, "배수", null, 0, null, 8, 9, 70, 0, 160, 300, null, null],
|
||||
[0, "여령기", null, 0, null, 67, 79, 55, 0, 160, 300, null, null],
|
||||
[0, "성렴", null, 0, null, 79, 78, 40, 0, 160, 300, null, null],
|
||||
[0, "구본", null, 0, null, 50, 40, 67, 0, 160, 300, null, null],
|
||||
[0, "영수", null, 0, null, 67, 69, 72, 0, 160, 300, null, null],
|
||||
[0, "호열", null, 0, null, 73, 67, 72, 0, 160, 300, null, null],
|
||||
[0, "최염", null, 0, null, 42, 55, 70, 0, 160, 300, null, null],
|
||||
[0, "차주", null, 0, null, 49, 49, 40, 0, 160, 300, null, null],
|
||||
[0, "제갈정", null, 0, null, 58, 63, 66, 0, 160, 300, null, null],
|
||||
[0, "제갈서", null, 0, null, 41, 40, 29, 0, 160, 300, null, null],
|
||||
[0, "장서", null, 0, null, 55, 76, 35, 0, 160, 300, null, null],
|
||||
[0, "유략", null, 0, null, 71, 66, 59, 0, 160, 300, null, null],
|
||||
[0, "동조", null, 0, null, 17, 13, 56, 0, 160, 300, null, null],
|
||||
[0, "유평", null, 0, null, 70, 71, 68, 0, 160, 300, null, null],
|
||||
[0, "경무", null, 0, null, 21, 34, 53, 0, 160, 300, null, null],
|
||||
[0, "민순", null, 0, null, 42, 41, 61, 0, 160, 300, null, null],
|
||||
[0, "유준", null, 0, null, 65, 67, 42, 0, 160, 300, null, null],
|
||||
[0, "마한", null, 0, null, 62, 69, 41, 0, 160, 300, null, null],
|
||||
[0, "설례", null, 0, null, 31, 42, 71, 0, 160, 300, null, null],
|
||||
[0, "우미", null, 0, null, 62, 61, 28, 0, 160, 300, null, null],
|
||||
[0, "여공", null, 0, null, 74, 65, 38, 0, 160, 300, null, null],
|
||||
[0, "진생", null, 0, null, 59, 55, 44, 0, 160, 300, null, null],
|
||||
[0, "허사", null, 0, null, 27, 23, 78, 0, 160, 300, null, null],
|
||||
[0, "왕해", null, 0, null, 22, 11, 75, 0, 160, 300, null, null],
|
||||
[0, "양표", null, 0, null, 20, 17, 74, 0, 160, 300, null, null],
|
||||
[0, "채옹", null, 0, null, 21, 16, 76, 0, 160, 300, null, null],
|
||||
[0, "송과", null, 0, null, 61, 56, 48, 0, 160, 300, null, null],
|
||||
[0, "왕방", null, 0, null, 62, 57, 41, 0, 160, 300, null, null],
|
||||
[0, "이몽", null, 0, null, 58, 65, 47, 0, 160, 300, null, null],
|
||||
[0, "최용", null, 0, null, 64, 67, 43, 0, 160, 300, null, null],
|
||||
[0, "복호적아", null, 0, null, 61, 65, 36, 0, 160, 300, null, null],
|
||||
[0, "동백", null, 0, null, 76, 55, 86, 0, 160, 300, null, null],
|
||||
[0, "석도", null, 0, null, 62, 32, 82, 0, 160, 300, null, null],
|
||||
[0, "맹건", null, 0, null, 73, 31, 80, 0, 160, 300, null, null],
|
||||
[0, "공손수", null, 0, null, 66, 56, 47, 0, 160, 300, null, null],
|
||||
[0, "유보", null, 0, null, 42, 32, 61, 0, 160, 300, null, null],
|
||||
[0, "장환", null, 0, null, 81, 79, 44, 0, 160, 300, null, null],
|
||||
[0, "이명", null, 0, null, 77, 74, 41, 0, 160, 300, null, null],
|
||||
[0, "유식", null, 0, null, 42, 23, 72, 0, 160, 300, null, null],
|
||||
[0, "이붕", null, 0, null, 62, 70, 38, 0, 160, 300, null, null],
|
||||
[0, "전장", null, 0, null, 66, 64, 42, 0, 160, 300, null, null],
|
||||
[0, "진준", null, 0, null, 67, 65, 69, 0, 160, 300, null, null],
|
||||
[0, "황보개", null, 0, null, 62, 62, 70, 0, 160, 300, null, null],
|
||||
[0, "장교", null, 0, null, 68, 65, 68, 0, 160, 300, null, null],
|
||||
[0, "장상", null, 0, null, 62, 76, 42, 0, 160, 300, null, null],
|
||||
[0, "이흠", null, 0, null, 65, 68, 49, 0, 160, 300, null, null],
|
||||
[0, "충예", null, 0, null, 33, 36, 72, 0, 160, 300, null, null],
|
||||
[0, "장엄", null, 0, null, 38, 27, 79, 0, 160, 300, null, null],
|
||||
[0, "충리비", null, 0, null, 75, 77, 56, 0, 160, 300, null, null],
|
||||
[0, "채공", null, 0, null, 67, 71, 52, 0, 160, 300, null, null],
|
||||
[0, "호충", null, 0, null, 19, 17, 55, 0, 160, 300, null, null],
|
||||
[0, "마연", null, 0, null, 71, 75, 43, 0, 160, 300, null, null],
|
||||
[0, "윤해", null, 0, null, 62, 63, 37, 0, 160, 300, null, null],
|
||||
[0, "원소조예", null, 0, null, 61, 63, 36, 0, 160, 300, null, null],
|
||||
[0, "한맹", null, 0, null, 74, 78, 43, 0, 160, 300, null, null],
|
||||
[0, "등룡", null, 0, null, 64, 67, 49, 0, 160, 300, null, null],
|
||||
[0, "송충", null, 0, null, 23, 19, 51, 0, 160, 300, null, null],
|
||||
[0, "이규", null, 0, null, 28, 24, 61, 0, 160, 300, null, null],
|
||||
[0, "진취", null, 0, null, 62, 71, 45, 0, 160, 300, null, null],
|
||||
[0, "육울생", null, 0, null, 22, 33, 71, 0, 160, 300, null, null],
|
||||
[0, "장성채", null, 0, null, 26, 22, 67, 0, 160, 300, null, null],
|
||||
[0, "충보", null, 0, null, 64, 69, 47, 0, 160, 300, null, null],
|
||||
[0, "장선", null, 0, null, 72, 71, 48, 0, 160, 300, null, null],
|
||||
[0, "뇌서", null, 0, null, 76, 74, 61, 0, 160, 300, null, null],
|
||||
[0, "번궁", null, 0, null, 71, 67, 58, 0, 160, 300, null, null]
|
||||
]
|
||||
}
|
||||
@@ -4,6 +4,10 @@ DROP TABLE IF EXISTS general;
|
||||
# 국가 테이블 삭제
|
||||
DROP TABLE IF EXISTS nation;
|
||||
|
||||
# 회의실 테이블 삭제
|
||||
DROP TABLE IF EXISTS board;
|
||||
DROP TABLE IF EXISTS comment;
|
||||
|
||||
# 도시 테이블 삭제
|
||||
DROP TABLE IF EXISTS city;
|
||||
|
||||
@@ -21,6 +25,7 @@ DROP TABLE IF EXISTS message;
|
||||
|
||||
# 외교 테이블 삭제
|
||||
DROP TABLE IF EXISTS diplomacy;
|
||||
DROP TABLE IF EXISTS ng_diplomacy;
|
||||
|
||||
# 토너먼트 테이블 삭제
|
||||
DROP TABLE IF EXISTS tournament;
|
||||
|
||||
+52
-126
@@ -41,6 +41,7 @@ CREATE TABLE `general` (
|
||||
`dex30` INT(8) NULL DEFAULT '0',
|
||||
`dex40` INT(8) NULL DEFAULT '0',
|
||||
`level` INT(2) NULL DEFAULT '0',
|
||||
`permission` ENUM('normal','auditor','ambassador') NULL DEFAULT 'normal',
|
||||
`gold` INT(6) NULL DEFAULT '1000',
|
||||
`rice` INT(6) NULL DEFAULT '1000',
|
||||
`crew` INT(5) NULL DEFAULT '0',
|
||||
@@ -150,6 +151,7 @@ CREATE TABLE `general` (
|
||||
`turn23` VARCHAR(50) NULL DEFAULT '[0,0,0,0]',
|
||||
`recturn` VARCHAR(50) NULL DEFAULT '[0,0,0,0]',
|
||||
`resturn` VARCHAR(30) NULL DEFAULT '',
|
||||
`penalty` TEXT NULL DEFAULT '',
|
||||
PRIMARY KEY (`no`),
|
||||
INDEX `nation` (`nation`, `npc`),
|
||||
INDEX `city` (`city`),
|
||||
@@ -203,130 +205,7 @@ CREATE TABLE `nation` (
|
||||
`spy` CHAR(255) NOT NULL DEFAULT '{}',
|
||||
`level` INT(1) NULL DEFAULT '0',
|
||||
`type` INT(2) NULL DEFAULT '0',
|
||||
`rule` TEXT NULL DEFAULT '',
|
||||
`history` MEDIUMTEXT NULL DEFAULT '',
|
||||
`board0` TEXT NULL DEFAULT '',
|
||||
`board0_who` INT(6) NULL DEFAULT '0',
|
||||
`board0_when` DATETIME NULL DEFAULT NULL,
|
||||
`board1` TEXT NULL DEFAULT '',
|
||||
`board1_who` INT(6) NULL DEFAULT '0',
|
||||
`board1_when` DATETIME NULL DEFAULT NULL,
|
||||
`board2` TEXT NULL DEFAULT '',
|
||||
`board2_who` INT(6) NULL DEFAULT '0',
|
||||
`board2_when` DATETIME NULL DEFAULT NULL,
|
||||
`board3` TEXT NULL DEFAULT '',
|
||||
`board3_who` INT(6) NULL DEFAULT '0',
|
||||
`board3_when` DATETIME NULL DEFAULT NULL,
|
||||
`board4` TEXT NULL DEFAULT '',
|
||||
`board4_who` INT(6) NULL DEFAULT '0',
|
||||
`board4_when` DATETIME NULL DEFAULT NULL,
|
||||
`board5` TEXT NULL DEFAULT '',
|
||||
`board5_who` INT(6) NULL DEFAULT '0',
|
||||
`board5_when` DATETIME NULL DEFAULT NULL,
|
||||
`board6` TEXT NULL DEFAULT '',
|
||||
`board6_who` INT(6) NULL DEFAULT '0',
|
||||
`board6_when` DATETIME NULL DEFAULT NULL,
|
||||
`board7` TEXT NULL DEFAULT '',
|
||||
`board7_who` INT(6) NULL DEFAULT '0',
|
||||
`board7_when` DATETIME NULL DEFAULT NULL,
|
||||
`board8` TEXT NULL DEFAULT '',
|
||||
`board8_who` INT(6) NULL DEFAULT '0',
|
||||
`board8_when` DATETIME NULL DEFAULT NULL,
|
||||
`board9` TEXT NULL DEFAULT '',
|
||||
`board9_who` INT(6) NULL DEFAULT '0',
|
||||
`board9_when` DATETIME NULL DEFAULT NULL,
|
||||
`board10` TEXT NULL DEFAULT '',
|
||||
`board10_who` INT(6) NULL DEFAULT '0',
|
||||
`board10_when` DATETIME NULL DEFAULT NULL,
|
||||
`board11` TEXT NULL DEFAULT '',
|
||||
`board11_who` INT(6) NULL DEFAULT '0',
|
||||
`board11_when` DATETIME NULL DEFAULT NULL,
|
||||
`board12` TEXT NULL DEFAULT '',
|
||||
`board12_who` INT(6) NULL DEFAULT '0',
|
||||
`board12_when` DATETIME NULL DEFAULT NULL,
|
||||
`board13` TEXT NULL DEFAULT '',
|
||||
`board13_who` INT(6) NULL DEFAULT '0',
|
||||
`board13_when` DATETIME NULL DEFAULT NULL,
|
||||
`board14` TEXT NULL DEFAULT '',
|
||||
`board14_who` INT(6) NULL DEFAULT '0',
|
||||
`board14_when` DATETIME NULL DEFAULT NULL,
|
||||
`board15` TEXT NULL DEFAULT '',
|
||||
`board15_who` INT(6) NULL DEFAULT '0',
|
||||
`board15_when` DATETIME NULL DEFAULT NULL,
|
||||
`board16` TEXT NULL DEFAULT '',
|
||||
`board16_who` INT(6) NULL DEFAULT '0',
|
||||
`board16_when` DATETIME NULL DEFAULT NULL,
|
||||
`board17` TEXT NULL DEFAULT '',
|
||||
`board17_who` INT(6) NULL DEFAULT '0',
|
||||
`board17_when` DATETIME NULL DEFAULT NULL,
|
||||
`board18` TEXT NULL DEFAULT '',
|
||||
`board18_who` INT(6) NULL DEFAULT '0',
|
||||
`board18_when` DATETIME NULL DEFAULT NULL,
|
||||
`board19` TEXT NULL DEFAULT '',
|
||||
`board19_who` INT(6) NULL DEFAULT '0',
|
||||
`board19_when` DATETIME NULL DEFAULT NULL,
|
||||
`coreboard0` TEXT NULL DEFAULT '',
|
||||
`coreboard0_who` INT(6) NULL DEFAULT '0',
|
||||
`coreboard0_when` DATETIME NULL DEFAULT NULL,
|
||||
`coreboard1` TEXT NULL DEFAULT '',
|
||||
`coreboard1_who` INT(6) NULL DEFAULT '0',
|
||||
`coreboard1_when` DATETIME NULL DEFAULT NULL,
|
||||
`coreboard2` TEXT NULL DEFAULT '',
|
||||
`coreboard2_who` INT(6) NULL DEFAULT '0',
|
||||
`coreboard2_when` DATETIME NULL DEFAULT NULL,
|
||||
`coreboard3` TEXT NULL DEFAULT '',
|
||||
`coreboard3_who` INT(6) NULL DEFAULT '0',
|
||||
`coreboard3_when` DATETIME NULL DEFAULT NULL,
|
||||
`coreboard4` TEXT NULL DEFAULT '',
|
||||
`coreboard4_who` INT(6) NULL DEFAULT '0',
|
||||
`coreboard4_when` DATETIME NULL DEFAULT NULL,
|
||||
`coreboard5` TEXT NULL DEFAULT '',
|
||||
`coreboard5_who` INT(6) NULL DEFAULT '0',
|
||||
`coreboard5_when` DATETIME NULL DEFAULT NULL,
|
||||
`coreboard6` TEXT NULL DEFAULT '',
|
||||
`coreboard6_who` INT(6) NULL DEFAULT '0',
|
||||
`coreboard6_when` DATETIME NULL DEFAULT NULL,
|
||||
`coreboard7` TEXT NULL DEFAULT '',
|
||||
`coreboard7_who` INT(6) NULL DEFAULT '0',
|
||||
`coreboard7_when` DATETIME NULL DEFAULT NULL,
|
||||
`coreboard8` TEXT NULL DEFAULT '',
|
||||
`coreboard8_who` INT(6) NULL DEFAULT '0',
|
||||
`coreboard8_when` DATETIME NULL DEFAULT NULL,
|
||||
`coreboard9` TEXT NULL DEFAULT '',
|
||||
`coreboard9_who` INT(6) NULL DEFAULT '0',
|
||||
`coreboard9_when` DATETIME NULL DEFAULT NULL,
|
||||
`coreboard10` TEXT NULL DEFAULT '',
|
||||
`coreboard10_who` INT(6) NULL DEFAULT '0',
|
||||
`coreboard10_when` DATETIME NULL DEFAULT NULL,
|
||||
`coreboard11` TEXT NULL DEFAULT '',
|
||||
`coreboard11_who` INT(6) NULL DEFAULT '0',
|
||||
`coreboard11_when` DATETIME NULL DEFAULT NULL,
|
||||
`coreboard12` TEXT NULL DEFAULT '',
|
||||
`coreboard12_who` INT(6) NULL DEFAULT '0',
|
||||
`coreboard12_when` DATETIME NULL DEFAULT NULL,
|
||||
`coreboard13` TEXT NULL DEFAULT '',
|
||||
`coreboard13_who` INT(6) NULL DEFAULT '0',
|
||||
`coreboard13_when` DATETIME NULL DEFAULT NULL,
|
||||
`coreboard14` TEXT NULL DEFAULT '',
|
||||
`coreboard14_who` INT(6) NULL DEFAULT '0',
|
||||
`coreboard14_when` DATETIME NULL DEFAULT NULL,
|
||||
`coreboard15` TEXT NULL DEFAULT '',
|
||||
`coreboard15_who` INT(6) NULL DEFAULT '0',
|
||||
`coreboard15_when` DATETIME NULL DEFAULT NULL,
|
||||
`coreboard16` TEXT NULL DEFAULT '',
|
||||
`coreboard16_who` INT(6) NULL DEFAULT '0',
|
||||
`coreboard16_when` DATETIME NULL DEFAULT NULL,
|
||||
`coreboard17` TEXT NULL DEFAULT '',
|
||||
`coreboard17_who` INT(6) NULL DEFAULT '0',
|
||||
`coreboard17_when` DATETIME NULL DEFAULT NULL,
|
||||
`coreboard18` TEXT NULL DEFAULT '',
|
||||
`coreboard18_who` INT(6) NULL DEFAULT '0',
|
||||
`coreboard18_when` DATETIME NULL DEFAULT NULL,
|
||||
`coreboard19` TEXT NULL DEFAULT '',
|
||||
`coreboard19_who` INT(6) NULL DEFAULT '0',
|
||||
`coreboard19_when` DATETIME NULL DEFAULT NULL,
|
||||
`boardindex` INT(2) NULL DEFAULT '19',
|
||||
`coreindex` INT(2) NULL DEFAULT '19',
|
||||
`l12term` INT(4) NULL DEFAULT '0',
|
||||
`l11term` INT(4) NULL DEFAULT '0',
|
||||
`l10term` INT(4) NULL DEFAULT '0',
|
||||
@@ -436,6 +315,37 @@ CREATE TABLE `nation` (
|
||||
)
|
||||
ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
##회의실
|
||||
CREATE TABLE `board` (
|
||||
`no` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`nation_no` INT(11) NOT NULL,
|
||||
`is_secret` TINYINT(1) NOT NULL,
|
||||
`date` DATETIME NOT NULL,
|
||||
`general_no` INT(11) NOT NULL,
|
||||
`author` VARCHAR(32) NOT NULL,
|
||||
`author_icon` VARCHAR(128) NULL DEFAULT NULL,
|
||||
`title` TEXT NOT NULL,
|
||||
`text` TEXT NOT NULL,
|
||||
PRIMARY KEY (`no`),
|
||||
INDEX `nation_no` (`nation_no`, `is_secret`, `date`)
|
||||
)
|
||||
ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE `comment` (
|
||||
`no` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`nation_no` INT(11) NOT NULL,
|
||||
`is_secret` TINYINT(1) NOT NULL,
|
||||
`date` DATETIME NOT NULL,
|
||||
`document_no` INT(11) NOT NULL,
|
||||
`general_no` INT(11) NOT NULL,
|
||||
`author` VARCHAR(32) NOT NULL,
|
||||
`text` TEXT NOT NULL,
|
||||
PRIMARY KEY (`no`),
|
||||
INDEX `nation_no` (`nation_no`, `is_secret`, `date`),
|
||||
INDEX `document_no` (`document_no`, `date`)
|
||||
)
|
||||
ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
###########################################################################
|
||||
## 도시 테이블
|
||||
###########################################################################
|
||||
@@ -645,14 +555,30 @@ create table diplomacy (
|
||||
`state` INT(6) NULL DEFAULT '0',
|
||||
`term` INT(6) NULL DEFAULT '0',
|
||||
`dead` INT(8) NULL DEFAULT '0',
|
||||
`fixed` CHAR(128) NULL DEFAULT '',
|
||||
`reserved` CHAR(128) NULL DEFAULT '',
|
||||
`showing` DATETIME NULL DEFAULT NULL,
|
||||
|
||||
PRIMARY KEY (`no`),
|
||||
UNIQUE INDEX `me` (`me`, `you`)
|
||||
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE `ng_diplomacy` (
|
||||
`no` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`src_nation_id` INT(11) NOT NULL,
|
||||
`dest_nation_id` INT(11) NOT NULL,
|
||||
`prev_no` INT(11) NULL DEFAULT NULL,
|
||||
`state` ENUM('proposed','activated','cancelled','replaced') NOT NULL DEFAULT 'proposed',
|
||||
`text_brief` TEXT NOT NULL,
|
||||
`text_detail` TEXT NOT NULL,
|
||||
`date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`src_signer` INT(11) NOT NULL,
|
||||
`dest_signer` INT(11) NULL DEFAULT NULL,
|
||||
`aux` TEXT NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`no`),
|
||||
INDEX `by_nation_src` (`src_nation_id`, `dest_nation_id`, `state`, `date`),
|
||||
INDEX `by_nation_dest` (`dest_nation_id`, `src_nation_id`, `state`, `date`)
|
||||
)
|
||||
ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
###########################################################################
|
||||
## 토너먼트 테이블
|
||||
###########################################################################
|
||||
@@ -819,4 +745,4 @@ CREATE TABLE IF NOT EXISTS `storage` (
|
||||
UNIQUE INDEX `key` (`namespace`, `key`)
|
||||
)
|
||||
COLLATE='utf8mb4_general_ci'
|
||||
ENGINE=MyISAM
|
||||
ENGINE=MyISAM
|
||||
+128
@@ -0,0 +1,128 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
|
||||
$isSecretBoard = Util::getReq('isSecret', 'bool', false);
|
||||
|
||||
//increaseRefresh("회의실", 1);
|
||||
|
||||
$me = $db->queryFirstRow('SELECT no, nation, level, permission, con, turntime, belong, penalty FROM general WHERE owner=%i', $userID);
|
||||
|
||||
|
||||
$con = checkLimit($me['con']);
|
||||
if ($con >= 2) {
|
||||
printLimitMsg($me['turntime']);
|
||||
exit();
|
||||
}
|
||||
|
||||
$permission = checkSecretPermission($me);
|
||||
if($permission < 0){
|
||||
echo '국가에 소속되어있지 않습니다.';
|
||||
die();
|
||||
}
|
||||
else if ($isSecretBoard && $permission < 2) {
|
||||
echo "권한이 부족합니다. 수뇌부가 아닙니다.";
|
||||
die();
|
||||
}
|
||||
|
||||
$boardName = $isSecretBoard?'기밀실':'회의실';
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title><?=UniqueConst::$serverName?>: <?=$boardName?></title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=1024" />
|
||||
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
|
||||
<!--<?=WebUtil::printCSS('../e_lib/tui.editor/tui-editor.min.css')?>-->
|
||||
<!--<?=WebUtil::printCSS('../e_lib/tui.editor/tui-editor-contents.min.css')?>-->
|
||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
||||
<?=WebUtil::printCSS('../css/config.css')?>
|
||||
<?=WebUtil::printCSS('css/common.css')?>
|
||||
<?=WebUtil::printCSS('css/board.css')?>
|
||||
<script>
|
||||
var isSecretBoard = <?=($isSecretBoard?'true':'false')?>; //
|
||||
</script>
|
||||
<?=WebUtil::printJS('../d_shared/common_path.js')?>
|
||||
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
|
||||
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
|
||||
<!--<?=WebUtil::printJS('../e_lib/tui.editor/tui-editor-Editor-all.min.js')?>-->
|
||||
<?=WebUtil::printJS('js/common.js')?>
|
||||
<?=WebUtil::printJS('js/board.js')?>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
<div style='width:1000px;margin:auto;' class='tb_layout bg0'>
|
||||
<?=$boardName?><br>
|
||||
<?=backButton()?>
|
||||
</div>
|
||||
|
||||
|
||||
<table id='newArticle' class='bg0'>
|
||||
<thead>
|
||||
<tr><td colspan='2' class='newArticleHeader bg2'>새 게시물 작성</td>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><th class='bg1' style='width:66px;'><span class='articleTitle'>제목</span></th><td><input class='titleInput' type='text' maxlength='250' placeholder='제목'></input></td></tr>
|
||||
<tr><th class='bg1'>내용</th><td class='boardArticle'>
|
||||
<textarea class="contentInput autosize" placeholder='내용'></textarea>
|
||||
</td></tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr><td colspan="2">
|
||||
<button type='button' id='submitArticle'>등록</button>
|
||||
</td></tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
|
||||
<div id="board">
|
||||
</div>
|
||||
|
||||
<!-- 설계미스. template와 shadowdom으로 변경 -->
|
||||
<div id='articleTemplate' style='display:none;'>
|
||||
<table class='articleFrame bg0'>
|
||||
<thead>
|
||||
<tr class='bg1'>
|
||||
<th class='authorName'></th><th class='articleTitle'></th><th class='date'></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><img class='authorIcon generalIcon' width='64' height='64'></td>
|
||||
<td class='text' colspan='2'></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody class='commentList'>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr><td class='bg2 inputCommentHeader'>댓글 달기</td><td><input class='commentText' type='text' maxlength='250' placeholder='새 댓글 내용'></td><td><button type='button' class='submitComment'>등록</button></td></tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<template id='commentTemplate' style='display:none;'>
|
||||
<tr class='comment'>
|
||||
<th class='author'></th>
|
||||
<td class='text'></td>
|
||||
<td class='date'></td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<div style='width:1000px;margin:auto;' class='tb_layout bg0'>
|
||||
<?=backButton()?><br>
|
||||
<?=banner()?>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,126 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
|
||||
increaseRefresh("내무부", 1);
|
||||
|
||||
$me = $db->queryFirstRow('SELECT no, nation, level, permission, con, turntime, belong, penalty FROM general WHERE owner=%i', $userID);
|
||||
|
||||
|
||||
$con = checkLimit($me['con']);
|
||||
if ($con >= 2) {
|
||||
printLimitMsg($me['turntime']);
|
||||
exit();
|
||||
}
|
||||
|
||||
$permission = checkSecretPermission($me);
|
||||
if ($permission < 1) {
|
||||
echo "권한이 부족합니다. 수뇌부가 아니거나 사관년도가 부족합니다.";
|
||||
exit();
|
||||
}
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title><?=UniqueConst::$serverName?>: 외교부</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=1024" />
|
||||
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
|
||||
<?=WebUtil::printCSS('../e_lib/select2/select2.min.css')?>
|
||||
<?=WebUtil::printCSS('../e_lib/select2/select2-bootstrap4.css')?>
|
||||
<!--<?=WebUtil::printCSS('../e_lib/tui.editor/tui-editor.min.css')?>-->
|
||||
<!--<?=WebUtil::printCSS('../e_lib/tui.editor/tui-editor-contents.min.css')?>-->
|
||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
||||
<?=WebUtil::printCSS('../css/config.css')?>
|
||||
<?=WebUtil::printCSS('css/common.css')?>
|
||||
<?=WebUtil::printCSS('css/diplomacy.css')?>
|
||||
<script>
|
||||
var permissionLevel = <?=$permission?>; //
|
||||
</script>
|
||||
<?=WebUtil::printJS('../d_shared/common_path.js')?>
|
||||
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
|
||||
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
|
||||
<?=WebUtil::printJS('../e_lib/select2/select2.full.min.js')?>
|
||||
<!--<?=WebUtil::printJS('../e_lib/tui.editor/tui-editor-Editor-all.min.js')?>-->
|
||||
<?=WebUtil::printJS('js/common.js')?>
|
||||
<?=WebUtil::printJS('js/diplomacy.js')?>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<table style='width:1000px;margin:auto;' class='tb_layout bg0'>
|
||||
<tr><td style='text-align:left;'>외 교 부<br><?=backButton()?></td></tr>
|
||||
</table>
|
||||
|
||||
<table id='newLetter' class='bg0' style='display:none;'>
|
||||
<thead>
|
||||
<tr><td colspan='2' class='newLetterHeader'>새 외교문서 작성</td>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><th class='bg1'>이전 문서</th><td><select id='inputPrevNo'></select></td></tr>
|
||||
<tr><th class='bg1'>대상 국가</th><td><select id='inputDestNation'></select></td></tr>
|
||||
<tr><th class='bg1'>내용(국가 내 공개)</th><td><textarea id='inputBrief' class='autosize'></textarea></td></tr>
|
||||
<tr><th class='bg1'>내용(외교권자 전용)</th><td><textarea id='inputDetail' class='autosize'></textarea></td></tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr class='letterActionPlate'><th class='bg1'>동작</th><td>
|
||||
<button type='button' id='btnSend'>전송</button>
|
||||
</td></tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
|
||||
<div id='letters'></div>
|
||||
|
||||
<!-- 설계미스. template와 shadowdom으로 변경 -->
|
||||
<div id='letterTemplate' style='display:none;'>
|
||||
<table class='letterFrame bg0'>
|
||||
<thead>
|
||||
<tr><td colspan='2' class='letterHeader'><span class='letterNationName'></span>국과의 외교 문서<span class='letterDate'>2099-12-31 23:59:59</span></td>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><th class='bg1'>문서 번호</th><td><span class='letterNo'></span></td></tr>
|
||||
<tr><th class='bg1'>이전 문서</th><td><span class='letterPrevNo'></span></td></tr>
|
||||
<tr><th class='bg1'>상태</th><td><span class='letterStatus'></span><span class='letterStatusOpt'></span></td></tr>
|
||||
<tr><th class='bg1'>내용(국가 내 공개)</th><td><div class='letterBrief'></div></td></tr>
|
||||
<tr><th class='bg1'>내용(외교권자 전용)</th><td><div class='letterDetail'></div></td></tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr><th class='bg1'>서명인</th><td class='letterSignerPlate'>
|
||||
<div class='letterSrc'>
|
||||
<div class="signerImg"><img class='generalIcon' width='64px' height='64px'></div>
|
||||
<div class="signerNation"> </div>
|
||||
<div class="signerName"> </div>
|
||||
</div><div class='letterDest'>
|
||||
<div class="signerImg"><img class='generalIcon' width='64px' height='64px'></div>
|
||||
<div class="signerNation"> </div>
|
||||
<div class="signerName"> </div>
|
||||
</div>
|
||||
</td></tr>
|
||||
<tr class='letterActionPlate' style='display:none;'><th class='bg1'>동작</th><td>
|
||||
<button type='button' class='btnAgree' style='display:none;'>승인</button>
|
||||
<button type='button' class='btnDisagree' style='display:none;'>거부</button>
|
||||
<button type='button' class='btnRollback' style='display:none;'>회수</button>
|
||||
<button type='button' class='btnDestroy' style='display:none;'>파기</button>
|
||||
<button type='button' class='btnRenew'>추가 문서 작성</button>
|
||||
</td></tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<table style='width:1000px;margin:auto;' class='tb_layout bg0'>
|
||||
<tr><td style='text-align:left;'>
|
||||
<?=backButton()?><br>
|
||||
<?=banner()?>
|
||||
</td></tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,14 +1,15 @@
|
||||
<div class='buttonPlate bg2'>
|
||||
<div>
|
||||
<a href='b_nationboard.php'><button class='commandButton' <?=$meLevel>=1?'':'disabled'?> style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>회 의 실</button></a>
|
||||
<a href='b_chiefboard.php'><button class='commandButton' <?=$meLevel>=5?'':'disabled'?> style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>기 밀 실</button></a>
|
||||
<a href='t_board.php'><button class='commandButton' <?=$meLevel>=1?'':'disabled'?> style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>회 의 실</button></a>
|
||||
<a href='t_board.php?isSecret=true'><button class='commandButton' <?=$permission>=2?'':'disabled'?> style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>기 밀 실</button></a>
|
||||
<a href='b_troop.php'><button class='commandButton' <?=($meLevel>=1&&$nationLevel>=1)?'':'disabled'?> style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>부대 편성</button></a>
|
||||
<a href='t_diplomacy.php'><button class='commandButton' <?=$showSecret?'':'disabled'?> style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>외 교 부</button></a>
|
||||
<a href='b_myBossInfo.php'><button class='commandButton' <?=$meLevel>=1?'':'disabled'?> style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>인 사 부</button></a>
|
||||
<a href='b_dipcenter.php'><button class='commandButton' <?=$showSecret?'':'disabled'?> style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>내 무 부</button></a>
|
||||
<a href='b_chiefcenter.php'><button class='commandButton' <?=$showSecret?'':'disabled'?> style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>사 령 부</button></a>
|
||||
<a href='b_genList.php' target='_blank'><button class='commandButton' <?=$showSecret?'':'disabled'?> style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>암 행 부</button></a>
|
||||
<a href='b_tournament.php' target='_blank'><button class='commandButton' style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>토 너 먼 트</button></a>
|
||||
<a href='b_betting.php' target='_blank'><button class='commandButton' style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>베 팅 장</button></a>
|
||||
|
||||
|
||||
</div>
|
||||
<div>
|
||||
@@ -16,12 +17,12 @@
|
||||
<a href='b_myKingdomInfo.php'><button class='commandButton' <?=$meLevel>=1?'':'disabled'?> style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>세력 정보</button></a>
|
||||
<a href='b_myCityInfo.php'><button class='commandButton' <?=($meLevel>=1&&$nationLevel>=1)?'':'disabled'?> style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>세력 도시</button></a>
|
||||
<a href='b_myGenInfo.php'><button class='commandButton' <?=$meLevel>=1?'':'disabled'?> style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>세력 장수</button></a>
|
||||
<a href='b_nationrule.php'><button class='commandButton' <?=$meLevel>=1?'':'disabled'?> style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>국 법</button></a>
|
||||
<a href='b_diplomacy.php'><button class='commandButton' style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>중원 정보</button></a>
|
||||
<a href='b_currentCity.php'><button class='commandButton' style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>현재 도시</button></a>
|
||||
<a href='b_battleCenter.php' target='_blank'><button class='commandButton' <?=$showSecret?'':'disabled'?> style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>감 찰 부</button></a>
|
||||
<a href='b_myPage.php'><button class='commandButton' style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>내 정보 & 설정</button></a>
|
||||
<a href='b_auction.php' target='_blank'><button class='commandButton' style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>거 래 장</button></a>
|
||||
<a href='b_betting.php' target='_blank'><button class='commandButton' style='background-color:<?=$bgColor?>;color:<?=$fgColor?>;'>베 팅 장</button></a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
+8
-8
@@ -534,7 +534,7 @@ if ($category == 0) {
|
||||
<font class=bullet>☞</font> 군주와 참모의 작위와 이름<br>
|
||||
<font class=bullet>☞</font> 국가 총주민수와 총병사수<br>
|
||||
<font class=bullet>☞</font> 국가소유 자금과 병량<br>
|
||||
<font class=bullet>☞</font> 지급율 : 1월과 7월에 지급하는 봉록의 정도입니다.<br>
|
||||
<font class=bullet>☞</font> 지급률 : 1월과 7월에 지급하는 봉록의 정도입니다.<br>
|
||||
<font class=bullet>☞</font> 세율 : 1월과 7월에 백성들에게서 거두어 들이는 세금의 정도입니다.<br>
|
||||
<font class=bullet>☞</font> 속령 : 아국이 소유한 거점의 개수입니다.<br>
|
||||
<font class=bullet>☞</font> 장수 : 아국 소속의 장수수입니다.<br>
|
||||
@@ -551,7 +551,7 @@ if ($category == 0) {
|
||||
<font class=bullet>☞</font> 인사부 : 아국내의 각 직위를 볼 수 있습니다.<br>
|
||||
<font class=bullet>☞</font> 내무부 : 아국의 외교상황과 예산 정보 등을 볼 수 있습니다. 아국이 어디와 전쟁중인지 누구와 동맹인지, 가난한지 부유한지 알 수 있겠죠?<br>
|
||||
<font class=bullet>☞</font> 사령부 : 아국의 수뇌부들의 수뇌명령들을 볼 수 있습니다. 무슨 전략을 수행하는지, 자신이 어디로 발령되는지, 언제 포상을 받을지 확인할 수 있겠죠?<br>
|
||||
<font class=bullet>☞</font> 암행부 : 아국 장수들의 일제 실행정보와 병력정보등을 볼 수 있습니다. 시중 이상의 관직 또는 국가에 설정된 사관년도 이상 장수만 볼 수 있습니다.<br>
|
||||
<font class=bullet>☞</font> 암행부 : 아국 장수들의 일제 실행정보와 병력정보등을 볼 수 있습니다. 종사 이상의 관직 또는 국가에 설정된 사관년도 이상 장수만 볼 수 있습니다.<br>
|
||||
<font class=bullet>☞</font> 세력정보 : 아국의 간략 정보와 역사 등을 볼 수 있습니다.<br>
|
||||
<font class=bullet>☞</font> 세력도시 : 아국 소유의 거점들의 일제 정보를 볼 수 있습니다.<br>
|
||||
<font class=bullet>☞</font> 세력장수 : 아국 소속 장수들의 일제 저오를 볼 수 있습니다.<br>
|
||||
@@ -681,16 +681,16 @@ if ($category == 0) {
|
||||
<font class=bullet>☞</font> 세율이 낮으면 인구가 늘고 내정이 증가해요. 다만 거두어 들이는 자금이 적어요.<br>
|
||||
<font class=bullet>☞</font> 세율이 높으면 인구가 줄고 내정이 감소해요. 다만 거두어 들이는 자금이 늘어나요. 군주라면 세율을 적절히 잘 조절해야겠죠?<br>
|
||||
<br>
|
||||
<font class=title>지급율이 뭐지요?</font><br>
|
||||
<font class=bullet>☞</font> 지급율은 국가 수뇌부가 결정하는건데요. 100%일때 자기 자신의 제대로된 봉급을 받을 수 있어요.<br>
|
||||
<font class=title>지급률이 뭐지요?</font><br>
|
||||
<font class=bullet>☞</font> 지급률은 국가 수뇌부가 결정하는건데요. 100%일때 자기 자신의 제대로된 봉급을 받을 수 있어요.<br>
|
||||
<font class=bullet>☞</font> 예를 들어 200%로 정해져 있다면 보너스를 받아서 봉급의 2배를 받게 되는거죠!<br>
|
||||
<font class=bullet>☞</font> 군주라면 장수들의 사기진작과 충성을 위해 재정이 충분할때는 지급율을 높여야겠죠!<br>
|
||||
<font class=bullet>☞</font> 반대로 재정이 어렵다면 안타깝지만 국고를 유지하기 위해 지급율을 낮춰야 해요ㅠㅠ<br>
|
||||
<font class=bullet>☞</font> 군주라면 장수들의 사기진작과 충성을 위해 재정이 충분할때는 지급률을 높여야겠죠!<br>
|
||||
<font class=bullet>☞</font> 반대로 재정이 어렵다면 안타깝지만 국고를 유지하기 위해 지급률을 낮춰야 해요ㅠㅠ<br>
|
||||
<br>
|
||||
<font class=title>수지와 예산이 뭐지요?</font><br>
|
||||
<font class=bullet>☞</font> 예산은 국가정보나 사령부에 들어가면 볼 수 있어요. 우리나라의 총 수입과 지출을 나타내는것이 수지에요.<br>
|
||||
<font class=bullet>☞</font> 총 수입은 도시에서 거둬들이는 금이나 쌀의 양을 나타내구요, 총 지출은 장수들의 봉급으로 나가는 금이나 쌀의 양을 뜻해요.<br>
|
||||
<font class=bullet>☞</font> 예산이 +라면 장수들의 봉급을 주고도 남아서 국고로 쌓이게 되는 것이지요! 이럴땐 지급율을 늘려서 장수들에게 고루 나누어줄수도 있을거에요!<br>
|
||||
<font class=bullet>☞</font> 예산이 +라면 장수들의 봉급을 주고도 남아서 국고로 쌓이게 되는 것이지요! 이럴땐 지급률을 늘려서 장수들에게 고루 나누어줄수도 있을거에요!<br>
|
||||
<br>
|
||||
<font class=title>전쟁에 대해 알고 싶어요.</font><br>
|
||||
<font class=bullet>☞</font> 전쟁에 영향을 미치는 요소는 아주 많답니다. 1번의 전투는 총6~9페이즈로 이루어진답니다.<br>
|
||||
@@ -721,7 +721,7 @@ if ($category == 0) {
|
||||
<font class=bullet>☞</font> 이동: 인접 도시로 이동합니다.<br>
|
||||
<!--<font class=bullet>☞</font> 등용: 재야나 타국의 장수를 등용합니다. 서신은 개인메세지로 도착하며 상대 장수가 수락,거절을 하게 됩니다.<br>--> <!--xxx:등용장 일단 끔-->
|
||||
<font class=bullet>☞</font> 집합: 현재 도시로 부대원들을 집합합니다. 부대장만 가능합니다.<br>
|
||||
<font class=bullet>☞</font> 귀환: 태수, 군사, 시중인 경우 자신의 도시로 귀환합니다.<br>
|
||||
<font class=bullet>☞</font> 귀환: 태수, 군사, 종사인 경우 자신의 도시로 귀환합니다.<br>
|
||||
<font class=bullet>☞</font> 임관: 국가에 사관을 합니다. 대상 국가의 군주가 있는 장소로 바로 이동합니다. 재야만 가능합니다.<br>
|
||||
---------- 계 략 ----------<br>
|
||||
<font class=bullet>☞</font> 첩보: 어느 도시든지 첩보를 수행하여 정보를 얻을 수 있습니다. 거리가 먼 도시라면 정확한 정보를 얻을 수 없습니다.<br>
|
||||
|
||||
@@ -128,4 +128,17 @@ function getIconPath(imgsvr, picture){
|
||||
else{
|
||||
return pathConfig.root+'/d_pic/'+picture;
|
||||
}
|
||||
}
|
||||
|
||||
function errUnknown(){
|
||||
alert('작업을 실패했습니다.');
|
||||
}
|
||||
|
||||
function quickReject(errMsg){
|
||||
if(errMsg === undefined){
|
||||
errMsg = '작업을 실패했습니다.';
|
||||
}
|
||||
var deferred = $.Deferred();
|
||||
deferred.reject(errMsg);
|
||||
return deferred.promise();
|
||||
}
|
||||
@@ -184,6 +184,8 @@ def extractGeneralList(generalSheet, nationList={}, nationChiefInfo={}):
|
||||
if len(row) < 13:
|
||||
row.append('')
|
||||
row[12] = row[12].strip()
|
||||
if len(row[12]) > 99:
|
||||
row[12] = row[12][:99]
|
||||
if row[12] == '':
|
||||
row.pop()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user