v0.10.1까지 merge

This commit is contained in:
2019-04-07 23:35:54 +09:00
46 changed files with 482 additions and 228 deletions
+2 -2
View File
@@ -40,10 +40,10 @@ case "분당김":
$gameStor->tnmt_time = $tnmt_time->format('Y-m-d H:i:s');
$db->update('general', [
'turntime'=>$db->sqleval('DATE_ADD(turntime, INTERVAL %i MINUTE)', $minute)
'turntime'=>$db->sqleval('DATE_SUB(turntime, INTERVAL %i MINUTE)', $minute)
], true);
$db->update('auction', [
'expire'=>$db->sqleval('DATE_ADD(expire, INTERVAL %i MINUTE)', $minute)
'expire'=>$db->sqleval('DATE_SUB(expire, INTERVAL %i MINUTE)', $minute)
], true);
break;
case "분지연":
+13 -3
View File
@@ -49,6 +49,12 @@ increaseRefresh("명장일람", 1);
<div style="margin:auto;width=1000px;">
<?php
$ownerNameList = [];
if($gameStor->isunited){
foreach(RootDB::db()->queryAllLists('SELECT no, name FROM member') as [$ownerID, $ownerName]){
$ownerNameList[$ownerID] = $ownerName;
}
}
$nationName = [0=>'재야'];
$nationColor = [0=>'#000000'];
@@ -60,8 +66,11 @@ foreach (getAllNationStaticInfo() as $nation) {
$types = [
["명 성", "int", function($v){$v['value'] = $v['experience']; return $v; }],
["계 급", "int", function($v){$v['value'] = $v['dedication']; return $v; }],
["계 략 성 공", "int", function($v){
["계 략 성 공", "int", function($v) use ($gameStor){
$v['value'] = $v['firenum'];
if($gameStor->isunited){
return $v;
}
$v['nationName'] = '???';
$v['pictureFullPath'] = GetImageURL(0)."/default.jpg";
$v['name'] = '???';
@@ -166,7 +175,7 @@ $generals = array_map(function($general) use($nationColor, $nationName) {
return $general;
}, $db->query(
"SELECT nation,no,name,name2 as owner_name, picture, imgsvr,
"SELECT nation,no,name,name2 as owner_name, owner, picture, imgsvr,
experience, dedication, firenum, warnum, killnum, killcrew, deathcrew,
dex0, dex10, dex20, dex30, dex40,
ttw, ttd, ttl, tlw, tld, tll, tpw, tpd, tpl, tiw, tid, til,
@@ -179,7 +188,8 @@ $templates = new \League\Plates\Engine('templates');
foreach($types as $idx=>[$typeName, $typeValue, $typeFunc]){
$validCnt = 0;
$typeGenerals = array_map(function($general) use($typeValue, $typeFunc, &$validCnt){
$typeGenerals = array_map(function($general) use($typeValue, $typeFunc, &$validCnt, $ownerNameList){
$general['owner_name'] = $ownerNameList[$general['owner']]??null;
$general = ($typeFunc)($general);
$value = $general['value'];
+11 -1
View File
@@ -92,12 +92,22 @@ $types = [
$templates = new \League\Plates\Engine('templates');
$ownerNameList = [];
foreach(RootDB::db()->queryAllLists('SELECT no, name FROM member') as [$ownerID, $ownerName]){
$ownerNameList[$ownerID] = $ownerName;
}
foreach($types as $idx=>[$typeName, $typeValue]) {
$hallResult = $db->query('SELECT * FROM ng_hall WHERE `type`=%i AND %? ORDER BY `value` DESC LIMIT 10', $idx, $searchFilter);
$hallResult = array_map(function($general)use($typeValue){
$hallResult = array_map(function($general)use($typeValue, $ownerNameList){
$aux = Json::decode($general['aux']);
$general += $aux;
if(key_exists($general['owner'], $ownerNameList)){
$general['owner_name'] = $ownerNameList[$general['owner']];
}
if(!key_exists('bgColor', $general)){
if(!key_exists('color', $general)){
$general['bgColor'] = GameConst::$basecolor4;
+24 -7
View File
@@ -28,7 +28,7 @@ $connect=$db->get();
increaseRefresh("내정보", 1);
$query = "select no,npc,mode,tnmt,myset from general where owner='{$userID}'";
$query = "select no,npc,mode,tnmt,myset,train,atmos from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
$me = MYDB_fetch_array($result);
@@ -46,13 +46,30 @@ if (($btn == "설정저장" || $detachNPC) && $me['myset'] > 0) {
$submit = 'hidden';
}
$me['myset'] -= 1;
if($mode == 0){
$db->update('general', [
'myset'=>$db->sqleval('myset-1'),
'mode'=>$mode,
'train'=>max(0, $me['train'] - 3),
'atmos'=>max(0, $me['atmos'] - 3),
], 'owner=%i AND mode!=%i', $userID, $mode);
}
else{
$db->update('general', [
'myset'=>$db->sqleval('myset-1'),
'mode'=>$mode
], 'owner=%i AND mode!=%i', $userID, $mode);
}
$db->update('general', [
'myset'=>$db->sqleval('myset-1'),
'mode'=>$mode,
'tnmt'=>$tnmt
], 'owner=%i', $userID);
if($db->affectedRows()){
$me['myset'] -= 1;
}
if($me['tnmt'] != $tnmt){
$db->update('general', [
'tnmt'=>$tnmt
], 'owner=%i', $userID);
}
$me['mode'] = $mode;
$me['tnmt'] = $tnmt;
+13
View File
@@ -63,6 +63,7 @@
position:absolute;
right:0;
bottom:0;
text-align:right;
}
.map_body .map_toggle_cityname::after{
@@ -73,6 +74,18 @@
content: "켜기"
}
.map_body .map_toggle_single_tap{
display:none;
}
.map_body .map_toggle_single_tap::after{
content: "끄기"
}
.map_body .map_toggle_single_tap.active::after{
content: "켜기"
}
.world_map .city_tooltip{
position: absolute;
z-index:6;
+14 -9
View File
@@ -464,20 +464,20 @@ function addCommand($typename, $value, $valid = 1, $color=0) {
switch($color) {
case 0:
echo "
<option style=color:white;background-color:black; value={$value}>{$typename}</option>";
<option style='color:white;background-color:black;' value='{$value}'>{$typename}</option>";
break;
case 1:
echo "
<option style=color:skyblue;background-color:black; value={$value}>{$typename}</option>";
<option style='color:skyblue;background-color:black;' value='{$value}'>{$typename}</option>";
break;
case 2:
echo "
<option style=color:orange;background-color:black; value={$value}>{$typename}</option>";
<option style='color:orange;background-color:black;' value='{$value}'>{$typename}</option>";
break;
}
} else {
echo "
<option style=color:white;background-color:red; value={$value}>{$typename}(불가)</option>";
<option style='color:white;background-color:red;' value='{$value}'>{$typename}(불가)</option>";
}
}
@@ -707,8 +707,8 @@ function generalInfo($no) {
if($nation['color'] == "") { $nation['color'] = "#000000"; }
if($general['age'] < 60) { $general['age'] = "<font color=limegreen>{$general['age']} 세</font>"; }
elseif($general['age'] < 80) { $general['age'] = "<font color=yellow>{$general['age']} 세</font>"; }
if($general['age'] < GameConst::$retirementYear*0.75) { $general['age'] = "<font color=limegreen>{$general['age']} 세</font>"; }
elseif($general['age'] < GameConst::$retirementYear) { $general['age'] = "<font color=yellow>{$general['age']} 세</font>"; }
else { $general['age'] = "<font color=red>{$general['age']} 세</font>"; }
$general['connect'] = Util::round($general['connect'] / 10) * 10;
@@ -1232,10 +1232,10 @@ function checkDelay() {
$threshold = 1;
}
else if($term >= 10){
$threshold = 2;
$threshold = 3;
}
else{
$threshold = 3;
$threshold = 6;
}
//지연 해야할 밀린 턴 횟수
$iter = intdiv($timeMinDiff, $term);
@@ -1438,6 +1438,11 @@ function CheckHall($no) {
[$scenarioIdx, $scenarioName, $startTime] = $gameStor->getValuesAsArray(['scenario', 'scenario_text', 'starttime']);
$ownerName = $general['name2'];
if($general['owner']){
$ownerName = RootDB::db()->queryFirstField('SELECT name FROM member WHERE no = %i', $general['owner']);
}
foreach($types as $idx=>$typeName) {
@@ -1467,7 +1472,7 @@ function CheckHall($no) {
'imgsvr'=>$general['imgsvr'],
'startTime'=>$startTime,
'unitedTime'=>$unitedDate,
'owner_name'=>$general['name2'],
'owner_name'=>$ownerName,
'serverID'=>UniqueConst::$serverID,
'serverIdx'=>$serverCnt,
'serverName'=>UniqueConst::$serverName,
+25 -20
View File
@@ -1472,31 +1472,36 @@ function process_76(&$general) {
$avgGenNum = $db->queryFirstField('SELECT avg(gennum) FROM nation');
$addGenCount = 5 + Util::round($avgGenNum / 10);
$query = "select avg(age) as age, max(leader+power+intel) as lpi, avg(dedication) as ded,avg(experience) as exp, avg(dex0) as dex0, avg(dex10) as dex10, avg(dex20) as dex20, avg(dex30) as dex30, avg(dex40) as dex40 from general where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$avgGen = MYDB_fetch_array($result);
$avgGen = $db->queryFirstRow('SELECT max(leader+power+intel) as lpi, avg(dedication) as ded,avg(experience) as exp, avg(dex0+dex10+dex20+dex30) / 4 as dex_t, avg(age) as age, avg(dex40) as dex40 from general where npc < 5 and nation = %i', $general['nation']);
//의병추가
$npc = 4;
$npcid = Util::randRangeInt(0, 9999999);
for($i=0; $i < $addGenCount; $i++) {
// 무장 40%, 지장 40%, 무지장 20%
$type = rand() % 10;
switch($type) {
case 0: case 1: case 2: case 3:
$leader = GameConst::$defaultStatMax - 10 + rand()%11;
$intel = GameConst::$defaultStatMin + rand()%6;
$power = GameConst::$defaultStatTotal - $leader - $intel;
//무장 50%, 지장 50%, 무지장 0%
$stat_tier1 = GameConst::$defaultStatMax - 10 + rand()%11;
$stat_tier3 = GameConst::$defaultStatMin + rand()%6;
$stat_tier2 = GameConst::$defaultStatTotal - $stat_tier1 - $stat_tier3;
$type = Util::choiceRandomUsingWeight([
'power'=>5,
'intel'=>5,
'neutral'=>0
]);
switch($type){
case 'power':
$leader = $stat_tier1;
$power = $stat_tier2;
$intel = $stat_tier3;
break;
case 4: case 5: case 6: case 7:
$leader = GameConst::$defaultStatMax - 10 + rand()%11;
$power = GameConst::$defaultStatMin + rand()%6;
$intel = GameConst::$defaultStatTotal - $leader - $power;
case 'intel':
$leader = $stat_tier1;
$power = $stat_tier3;
$intel = $stat_tier2;
break;
case 8: case 9:
$leader = GameConst::$defaultStatMin + rand()%6;
$power = GameConst::$defaultStatMax - 10 + rand()%11;
$intel = GameConst::$defaultStatTotal - $leader - $power;
case 'neutral':
$leader = $stat_tier3;
$power = $stat_tier1;
$intel = $stat_tier2;
break;
}
// 국내 최고능치 기준으로 랜덤성 스케일링
@@ -1530,7 +1535,7 @@ function process_76(&$general) {
$intel -= $over3;
}
// 낮은 능치쪽으로 합산
if($type == 0) {
if($type == 'power') {
$intel = $intel + $over1 + $over2 + $over3;
} else {
$power = $power + $over1 + $over2 + $over3;
@@ -1569,7 +1574,7 @@ function process_76(&$general) {
'1','100','100','0','".GameUnitConst::DEFAULT_CREWTYPE."','0','0','0',
'0','0','0','$turntime','$killturn','{$avgGen['age']}','1','$personal','0','0','0','0','',
'0','$bornyear','$deadyear',
'{$avgGen['dex0']}','{$avgGen['dex10']}','{$avgGen['dex20']}','{$avgGen['dex30']}','{$avgGen['dex40']}'
'{$avgGen['dex_t']}','{$avgGen['dex_t']}','{$avgGen['dex_t']}','{$avgGen['dex_t']}','{$avgGen['dex40']}'
)",
$connect
) or Error(__LINE__.MYDB_error($connect),"");
+86 -108
View File
@@ -131,6 +131,16 @@ function process_25(&$general) {
$generals[$nation] = $cnt;
}
foreach($db->queryAllLists('SELECT count(no), nation FROM general WHERE 3 <= npc and npc <= 4 AND nation > 0 GROUP BY nation') as list($cnt, $nation)){
//의병, 인탐장은 1/3로 카운트
if(key_exists($nation, $generals)){
$generals[$nation] += $cnt / 3;
}
else{
$generals[$nation] = $cnt / 3;
}
}
$allGen = array_sum($generals);
$genLimit = GameConst::$defaultMaxGeneral;
@@ -274,7 +284,7 @@ function process_29(&$general) {
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['startyear','year','month','develcost','npccount','turnterm','scenario']);
$admin = $gameStor->getValues(['startyear','year','month','develcost','npccount','turnterm','scenario','maxgeneral']);
$query = "select nation,name,level,gennum,scout from nation where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
@@ -290,25 +300,32 @@ function process_29(&$general) {
} elseif($general['gold'] < $admin['develcost']) {
$log[] = "<C>●</>{$admin['month']}월:자금이 모자랍니다. 인재탐색 실패. <1>$date</>";
} else {
$query = "select no from general where nation='{$general['nation']}' and npc<2";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gencount = MYDB_num_rows($result);
$query = "select no from general where nation='{$general['nation']}' and npc=3";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$npccount = MYDB_num_rows($result);
$max_gen_cnt = $admin['maxgeneral'];
$query = "select no from general where nation!='{$general['nation']}' and npc=3";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$otherNpccount = MYDB_num_rows($result);
$otherNpccount = Util::round(sqrt($otherNpccount + 1)) - 1;
if($gencount <= 0) { $gencount = 1; }
if($npccount <= 0) { $npccount = 1; }
$criteria = $gencount * $npccount + $otherNpccount;
$total_gen_cnt = $db->queryFirstField('SELECT count(`no`) FROM general WHERE npc <= 2');
$total_npc_cnt = $db->queryFirstField('SELECT count(`no`) FROM general WHERE 3 <= npc AND npc <= 4');
$gen_cnt = $db->queryFirstField('SELECT count(`no`) FROM general WHERE npc <= 2 AND nation = %i', $general['nation']);
$npc_cnt = $db->queryFirstField('SELECT count(`no`) FROM general WHERE 3 <= npc AND npc <= 4 AND nation = %i', $general['nation']);
$curr_cnt = Util::toInt($total_gen_cnt + $total_npc_cnt / 2);
$remain_slot = $max_gen_cnt - $curr_cnt;
$found_prop_main = pow($remain_slot / $max_gen_cnt, 6);
$found_prop_small = 1 / ($total_npc_cnt / 3 + 1);
$found_prop_big = 1 / $max_gen_cnt;
if($total_npc_cnt < 50){
$found_prop = max($found_prop_main, $found_prop_small);
}
else{
$found_prop = max($found_prop_main, $found_prop_big);
}
$found_npc = Util::randBool($found_prop);
// 탐색 실패
if(rand() % $criteria > 0) {
if(!$found_npc) {
$exp = 100;
$ded = 70;
switch(Util::choiceRandomUsingWeight([$general['leader'], $general['power'], $general['intel']])) {
@@ -338,7 +355,9 @@ function process_29(&$general) {
$name = "{$name}{$count}";
}
if($nation['scout'] != 0) {
$join_prop = 0.3 + 0.7 * (($gen_cnt + $npc_cnt / 2) / $curr_cnt);
if($nation['scout'] != 0 || !Util::randBool($join_prop)) {
$scoutType = "발견";
$scoutLevel = 0;
$scoutNation = 0;
@@ -354,50 +373,35 @@ function process_29(&$general) {
$alllog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <Y>$name</>{$josaRa}는 <C>인재</>를 {$scoutType}하였습니다!";
pushGeneralHistory($general, "<C>●</>{$admin['year']}{$admin['month']}월:<Y>$name</>{$josaRa}는 <C>인재</>를 {$scoutType}");
$query = "select max(leader+power+intel) as lpi, avg(dedication) as ded,avg(experience) as exp, avg(dex0) as dex0, avg(dex10) as dex10, avg(dex20) as dex20, avg(dex30) as dex30, avg(dex40) as dex40 from general where nation='{$general['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$avgGen = MYDB_fetch_array($result);
$avgGen = $db->queryFirstRow('SELECT max(leader+power+intel) as lpi, avg(dedication) as ded,avg(experience) as exp, avg(dex0+dex10+dex20+dex30) / 4 as dex_t, avg(dex40) as dex40 from general where npc < 5 and nation = %i', $general['nation']);
// 체섭시 무장 20%, 지장 20%, 무지장 60%
// 마이너 무장 40%, 지장 40%, 무지장 20%
$type = rand() % 10;
if($admin['scenario'] < 100) {
switch($type) {
case 0: case 1:
$leader = GameConst::$defaultStatMax - 10 + rand()%11;
$intel = GameConst::$defaultStatMin + rand()%6;
$power = GameConst::$defaultStatTotal - $leader - $intel;
break;
case 2: case 3:
$leader = GameConst::$defaultStatMax - 10 + rand()%11;
$power = GameConst::$defaultStatMin + rand()%6;
$intel = GameConst::$defaultStatTotal - $leader - $power;
break;
case 4: case 5: case 6: case 7: case 8: case 9:
$leader = GameConst::$defaultStatMin + rand()%6;
$power = GameConst::$defaultStatMax - 10 + rand()%11;
$intel = GameConst::$defaultStatTotal - $leader - $power;
break;
}
} else {
switch($type) {
case 0: case 1: case 2: case 3:
$leader = GameConst::$defaultStatMax - 10 + rand()%11;
$intel = GameConst::$defaultStatMin + rand()%6;
$power = GameConst::$defaultStatTotal - $leader - $intel;
break;
case 4: case 5: case 6: case 7:
$leader = GameConst::$defaultStatMax - 10 + rand()%11;
$power = GameConst::$defaultStatMin + rand()%6;
$intel = GameConst::$defaultStatTotal - $leader - $power;
break;
case 8: case 9:
$leader = GameConst::$defaultStatMin + rand()%6;
$power = GameConst::$defaultStatMax - 10 + rand()%11;
$intel = GameConst::$defaultStatTotal - $leader - $power;
break;
}
//무장 40%, 지장 40%, 무지장 20%
$stat_tier1 = GameConst::$defaultStatMax - 10 + rand()%11;
$stat_tier3 = GameConst::$defaultStatMin + rand()%6;
$stat_tier2 = GameConst::$defaultStatTotal - $stat_tier1 - $stat_tier3;
$type = Util::choiceRandomUsingWeight([
'power'=>4,
'intel'=>4,
'neutral'=>2
]);
switch($type){
case 'power':
$leader = $stat_tier1;
$power = $stat_tier2;
$intel = $stat_tier3;
break;
case 'intel':
$leader = $stat_tier1;
$power = $stat_tier3;
$intel = $stat_tier2;
break;
case 'neutral':
$leader = $stat_tier3;
$power = $stat_tier1;
$intel = $stat_tier2;
break;
}
// 국내 최고능치 기준으로 랜덤성 스케일링
if($avgGen['lpi'] > 210) {
$leader = Util::round($leader * $avgGen['lpi'] / GameConst::$defaultStatTotal * (60+rand()%31)/100);
@@ -429,7 +433,7 @@ function process_29(&$general) {
$intel -= $over3;
}
// 낮은 능치쪽으로 합산
if($type == 0) {
if($type == 'power') {
$intel = $intel + $over1 + $over2 + $over3;
} else {
$power = $power + $over1 + $over2 + $over3;
@@ -456,57 +460,31 @@ function process_29(&$general) {
$bornyear = $admin['year'];
$deadyear = $admin['year'] + 3;
$age = 20;
$specage = Util::round((80 - $age)/12) + $age;
$specage2 = Util::round((80 - $age)/3) + $age;
$specage = Util::round((GameConst::$retirementYear - $age)/12) + $age;
$specage2 = Util::round((GameConst::$retirementYear - $age)/3) + $age;
//$specage = $age + 1 + rand() % 3;
//$specage2 = $age + 5 + rand() % 5;
// 10년 ~ 50년
$killturn = rand()%480 + 120;
// 20년 ~ 50년
$killturn = Util::randRangeInt(20, 50) * 12;
$db->insert('general', [
'npcid'=>$npccount,
'npc'=>$npc,
'npc_org'=>$npc,
'affinity'=>$affinity,
'name'=>$name,
'picture'=>$picture,
'nation'=>$scoutNation,
'city'=>$general['city'],
'leader'=>$leader,
'power'=>$power,
'intel'=>$intel,
'experience'=>$experience,
'dedication'=>$dedication,
'level'=>$scoutLevel,
'gold'=>100,
'rice'=>100,
'crew'=>0,
'crewtype'=>GameUnitConst::DEFAULT_CREWTYPE,
'train'=>0,
'atmos'=>0,
'tnmt'=>0,
'weap'=>0,
'book'=>0,
'horse'=>0,
'turntime'=>$turntime,
'killturn'=>$killturn,
'age'=>$age,
'belong'=>1,
'personal'=>$personal,
'special'=>0,
'specage'=>$specage,
'special2'=>0,
'specage2'=>$specage2,
'npcmsg'=>'',
'makelimit'=>0,
'bornyear'=>$bornyear,
'deadyear'=>$deadyear,
'dex0'=>$avgGen['dex0'],
'dex10'=>$avgGen['dex10'],
'dex20'=>$avgGen['dex20'],
'dex30'=>$avgGen['dex30'],
'dex40'=>$avgGen['dex40'],
]);
@MYDB_query("
insert into general (
npcid,npc,npc_org,affinity,name,picture,nation,
city,leader,power,intel,experience,dedication,
level,gold,rice,crew,crewtype,train,atmos,tnmt,
weap,book,horse,turntime,killturn,age,belong,personal,special,specage,special2,specage2,npcmsg,
makelimit,bornyear,deadyear,
dex0, dex10, dex20, dex30, dex40
) values (
'$npccount','$npc','$npc','$affinity','$name','$picture','$scoutNation',
'{$general['city']}','$leader','$power','$intel','{$avgGen['exp']}','{$avgGen['ded']}',
'$scoutLevel','100','100','0','".GameUnitConst::DEFAULT_CREWTYPE."','0','0','0',
'0','0','0','$turntime','$killturn','$age','1','$personal','0','$specage','0','$specage2','',
'0','$bornyear','$deadyear',
'{$avgGen['dex_t']}','{$avgGen['dex_t']}','{$avgGen['dex_t']}','{$avgGen['dex_t']}','{$avgGen['dex40']}'
)",
$connect
) or Error(__LINE__.MYDB_error($connect),"");
$npcid++;
+18 -4
View File
@@ -235,6 +235,8 @@ function startTournament($auto, $type) {
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$prevWinner = $gameStor->prev_winner;
eraseTnmtFightLogAll();
switch($auto) {
@@ -279,12 +281,24 @@ function startTournament($auto, $type) {
], true);
$db->query('TRUNCATE TABLE tournament');
$opener = $db->queryFirstField('SELECT `general`.`name` FROM `general` JOIN `nation` ON `general`.`nation` = `nation`.`nation` WHERE `general`.`level` = 12 AND `nation`.`level` = 7 ORDER BY rand() LIMIT 1');
if(!$opener){
$opener = $gameStor->prev_winner;
}
if($opener){
$openerText = "황제 <Y>{$opener}</>의 명으로 ";
}
else{
$openerText = '';
}
$history = [];
switch($type) {
case 0: $history[] = "<S>◆</>{$admin['year']}{$admin['month']}월: <C>전력전</> 대회가 개최됩니다! 천하의 <span class='ev_highlight'>영웅</span>들을 모집하고 있습니다!"; break;
case 1: $history[] = "<S>◆</>{$admin['year']}{$admin['month']}월: <C>통솔전</> 대회가 개최됩니다! 천하의 <span class='ev_highlight'>명사</span>들을 모집하고 있습니다!"; break;
case 2: $history[] = "<S>◆</>{$admin['year']}{$admin['month']}월: <C>일기토</> 대회가 개최됩니다! 천하의 <span class='ev_highlight'>용사</span>들을 모집하고 있습니다!"; break;
case 3: $history[] = "<S>◆</>{$admin['year']}{$admin['month']}월: <C>설전</> 대회가 개최됩니다! 천하의 <span class='ev_highlight'>책사</span>들을 모집하고 있습니다!"; break;
case 0: $history[] = "<S>◆</>{$admin['year']}{$admin['month']}월: $openerText<C>전력전</> 대회가 개최됩니다! 천하의 <span class='ev_highlight'>영웅</span>들을 모집하고 있습니다!"; break;
case 1: $history[] = "<S>◆</>{$admin['year']}{$admin['month']}월: $openerText<C>통솔전</> 대회가 개최됩니다! 천하의 <span class='ev_highlight'>명사</span>들을 모집하고 있습니다!"; break;
case 2: $history[] = "<S>◆</>{$admin['year']}{$admin['month']}월: $openerText<C>일기토</> 대회가 개최됩니다! 천하의 <span class='ev_highlight'>용사</span>들을 모집하고 있습니다!"; break;
case 3: $history[] = "<S>◆</>{$admin['year']}{$admin['month']}월: $openerText<C>설전</> 대회가 개최됩니다! 천하의 <span class='ev_highlight'>책사</span>들을 모집하고 있습니다!"; break;
}
pushWorldHistory($history, $admin['year'], $admin['month']);
}
+1 -1
View File
@@ -7,7 +7,7 @@ include "func.php";
//TODO: 변경이 완료되면 항상 공지되어야함
$isAmbassador = Util::getReq('isAmbassador', bool);
$isAmbassador = Util::getReq('isAmbassador', 'bool');
$genlist = Util::getReq('genlist', 'array_int');
//로그인 검사
+2 -2
View File
@@ -162,11 +162,11 @@ if ($genius) {
$specage2 = $age;
$special2 = getSpecial2($leader, $power, $intel);
} else {
$specage2 = Util::valueFit(Util::round((80 - $age)/4 - $relYear / 2), 3) + $age;
$specage2 = Util::valueFit(Util::round((GameConst::$retirementYear - $age)/4 - $relYear / 2), 3) + $age;
$special2 = 0;
}
//내특
$specage = Util::valueFit(Util::round((80 - $age)/12 - $relYear / 2), 3) + $age;
$specage = Util::valueFit(Util::round((GameConst::$retirementYear - $age)/12 - $relYear / 2), 3) + $age;
$special = GameConst::$defaultSpecialDomestic;
if ($admin['scenario'] >= 1000) {
+126 -2
View File
@@ -1,5 +1,20 @@
function is_touch_device() {
var prefixes = ' -webkit- -moz- -o- -ms- '.split(' ');
var mq = function(query) {
return window.matchMedia(query).matches;
}
if (('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch) {
return true;
}
// include the 'heartz' as a way to have a non matching MQ to help terminate the join
// https://git.io/vznFH
var query = ['(', prefixes.join('touch-enabled),('), 'heartz', ')'].join('');
return mq(query);
}
function reloadWorldMap(option){
var $world_map = $('.world_map');
@@ -368,8 +383,76 @@ function reloadWorldMap(option){
var $map_body = $('.world_map .map_body');
//터치스크린 탭
if(is_touch_device()){
$objs.on('touchstart', function(e){
if(window.sam_toggleSingleTap){
return true;
}
var $this = $(this);
var touchMode = $this.data('touchMode');
if($tooltip_city.data('target') != $this.data('id')){
$this.data('touchMode', 1);
}
else if(touchMode === undefined){
$this.data('touchMode', 1);
}
else{
$this.data('touchMode', touchMode + 1);
}
$map_body.data('touchMode', 1);
$tooltip_city.data('target', $this.data('id'));
});
$objs.on('touchend', function(e){
if(window.sam_toggleSingleTap){
return true;
}
var $this = $(this);
var position = $this.parent().position();
$tooltip_city.html($this.data('text'));
var nation_text = $this.data('nation');
if(nation_text){
$tooltip_nation.html(nation_text).show();
}
else{
$tooltip_nation.html('').hide();
}
$tooltip.css({'top': position.top + 25, 'left': position.left + 35}).show();
var touchMode = $this.data('touchMode');
if(touchMode <= 1){
return false;
}
//xxx: touchend 다음 click 이벤트가 갈 수도 있고, 안 갈 수도 있다.
$this.data('touchMode', 0);
});
$map_body.on('touchend',function(e){
if(window.sam_toggleSingleTap){
return true;
}
//위의 touchend bind에 해당하지 않는 경우 -> 빈 지도 터치
$tooltip.hide();
});
}
//Mouse over 모드 작동
$map_body.on('mousemove', function(e){
if($(this).data('touchMode')){
return true;
}
var parentOffset = $map_body.offset();
var relX = e.pageX - parentOffset.left;
var relY = e.pageY - parentOffset.top;
@@ -378,6 +461,10 @@ function reloadWorldMap(option){
});
$objs.on('mouseenter', function(e){
if($map_body.data('touchMode')){
return true;
}
var $this = $(this);
$tooltip_city.data('target', $this.data('id'));
@@ -398,7 +485,15 @@ function reloadWorldMap(option){
});
$objs.on('click', function(e){
return;
//xxx: touchend 다음 click 이벤트가 갈 수도 있고, 안 갈 수도 있다.
var touchMode = $(this).data('touchMode');
if(touchMode === undefined){
return;
}
if(touchMode === 1){
return false;
}
});
@@ -448,6 +543,31 @@ function reloadWorldMap(option){
}
});
var $toggleSingleTapBtn = $world_map.find('.map_toggle_single_tap');
if(localStorage.getItem('sam.toggleSingleTap') == 'yes'){
window.sam_toggleSingleTap = true;
$toggleSingleTapBtn.addClass('active').attr('aria-pressed', 'true');
}
else{
window.sam_toggleSingleTap = false;
}
var $map_body = $('.world_map .map_body');
$toggleSingleTapBtn.click(function(){
//이전 상태 확인
var state = !$toggleSingleTapBtn.hasClass('active');
if(state){
$map_body.removeData('touchMode');
localStorage.setItem('sam.toggleSingleTap', 'yes');
window.sam_toggleSingleTap = true;
}
else{
localStorage.setItem('sam.toggleSingleTap', 'no');
window.sam_toggleSingleTap = false;
}
});
if(isDetailMap){
$world_map.addClass('map_detail');
}
@@ -527,4 +647,8 @@ function reloadWorldMap(option){
}
}
$(function(){
if(is_touch_device()){
$('.map_body .map_toggle_single_tap').show();
}
})
+42 -50
View File
@@ -210,7 +210,7 @@ function extractBattleOrder($general){
getGeneralIntel($general, false, true, true, true);
$totalStat = ($realStat + $fullStat) / 2;
$totalCrew = $general['crew'] / 10000 * $general['train'] * $general['atmos'];
$totalCrew = $general['crew'] / 1000000 * (($general['train'] * $general['atmos']) ** 1.5);
return $totalStat + $totalCrew / 100;
}
@@ -697,59 +697,47 @@ function ConquerCity($admin, $general, $city, $nation, $destnation) {
$conquerNation = getConquerNation($city);
if($conquerNation == $general['nation']) {
if ($conquerNation == $general['nation']) {
// 이동
$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),"");
}
//전방설정
SetNationFront($nation['nation']);
SetNationFront($destnation['nation']);
} else {
$query = "select name,nation from nation where nation='$conquerNation'";
$conquerResult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$conquerNationArray = MYDB_fetch_array($conquerResult);
$db->update('general', [
'city'=>$city['city']
], 'no=%i', $general['no']);
}
else{
$conquerNationName = $db->queryFirstField('SELECT `name` FROM nation WHERE nation=%i', $conquerNation);
$josaUl = JosaUtil::pick($city['name'], '을');
$josaYi = JosaUtil::pick($conquerNationArray['name'], '이');
$history[] = "<C>●</>{$year}{$month}월:<Y><b>【분쟁협상】</b></><D><b>{$conquerNationArray['name']}</b></>{$josaYi} 영토분쟁에서 우위를 점하여 <G><b>{$city['name']}</b></>{$josaUl} 양도받았습니다.";
pushNationHistory($nation, "<C>●</>{$year}{$month}월:<G><b>{$city['name']}</b></>{$josaUl} <D><b>{$conquerNationArray['name']}</b></>에 <Y>양도</>");
pushNationHistory($conquerNationArray, "<C>●</>{$year}{$month}월:<D><b>{$nation['name']}</b></>에서 <G><b>{$city['name']}</b></>{$josaUl} <S>양도</> 받음");
$query = [
'supply'=>1,
'term'=>0,
'conflict'=>'{}',
'agri'=>$db->sqleval('agri*0.7'),
'comm'=>$db->sqleval('comm*0.7'),
'secu'=>$db->sqleval('secu*0.7'),
'nation'=>$conquerNation,
'gen1'=>0,
'gen2'=>0,
'gen3'=>0
];
if($city['level'] > 3) {
$query['def'] = 1000;
$query['wall'] = 1000;
} else {
// 도시 소속 변경, 태수,군사,종사 초기화
$query['def'] = $db->sqleval('def2/2');
$query['wall'] = $db->sqleval('wall2/2');
}
$db->update('city', $query, 'city=%i', (int)$city['city']);
//전방설정
SetNationFront($destnation['nation']);
SetNationFront($conquerNation);
$josaYi = JosaUtil::pick($conquerNationName, '이');
$history[] = "<C>●</>{$year}{$month}월:<Y><b>【분쟁협상】</b></><D><b>{$conquerNationName}</b></>{$josaYi} 영토분쟁에서 우위를 점하여 <G><b>{$city['name']}</b></>{$josaUl} 양도받았습니다.";
pushNationHistory($nation, "<C>●</>{$year}{$month}월:<G><b>{$city['name']}</b></>{$josaUl} <D><b>{$conquerNationName}</b></>에 <Y>양도</>");
pushNationHistory(['nation'=>$conquerNation], "<C>●</>{$year}{$month}월:<D><b>{$nation['name']}</b></>에서 <G><b>{$city['name']}</b></>{$josaUl} <S>양도</> 받음");
}
$query = [
'supply'=>1,
'term'=>0,
'conflict'=>'{}',
'agri'=>$db->sqleval('agri*0.7'),
'comm'=>$db->sqleval('comm*0.7'),
'secu'=>$db->sqleval('secu*0.7'),
'nation'=>$conquerNation,
'gen1'=>0,
'gen2'=>0,
'gen3'=>0,
'gen1set'=>0,
'gen2set'=>0,
'gen3set'=>0
];
if($city['level'] > 3) {
$query['def'] = 1000;
$query['wall'] = 1000;
} else {
$query['def'] = $db->sqleval('def2/2');
$query['wall'] = $db->sqleval('wall2/2');
}
$db->update('city', $query, 'city=%i', (int)$city['city']);
//전방설정
if($renewFront){
foreach(getAllNationStaticInfo() as $nation){
if($nation['level'] <= 0){
@@ -758,6 +746,10 @@ function ConquerCity($admin, $general, $city, $nation, $destnation) {
SetNationFront($nation['nation']);
}
}
else{
SetNationFront($destnation['nation']);
SetNationFront($conquerNation);
}
pushGenLog($general, $log);
pushGeneralPublicRecord($alllog, $year, $month);
+13 -13
View File
@@ -490,7 +490,7 @@ function command_22($turn, $command) {
}
foreach(getAllNationStaticInfo() as $nation){
echo "<option style=color:{$nation['color']}>【 {$nation['name']} 】</option>";
echo "<option style='color:{$nation['color']}'>【 {$nation['name']} 】</option>";
$query = "select no,name,npc from general where nation='{$nation['nation']}' and level!='12' and npc<2 order by npc,binary(name)";
$genresult = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
@@ -1492,9 +1492,9 @@ function command_51($turn, $command) {
$nation = MYDB_fetch_array($result);
if($myNation['power'] <= $nation['power'] * 3 || !isNeighbor($me['nation'], $nation['nation'])) {
echo "<option style=color:{$nation['color']};background-color:red; value={$nation['nation']}>【 {$nation['name']} 】</option>";
echo "<option style='color:{$nation['color']};background-color:red;' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
} else {
echo "<option style=color:{$nation['color']} value={$nation['nation']}>【 {$nation['name']} 】</option>";
echo "<option style='color:{$nation['color']}' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
}
}
echo "
@@ -1545,7 +1545,7 @@ function command_52($turn, $command) {
foreach(getAllNationStaticInfo() as $nation) {
echo "<option style=color:{$nation['color']} value={$nation['nation']}>【 {$nation['name']} 】</option>";
echo "<option style='color:{$nation['color']}' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
}
echo "
</select>
@@ -1636,9 +1636,9 @@ function command_53($turn, $command) {
$nation = MYDB_fetch_array($result);
if(($myNation['power']+$nation['power'])/2 > $cond1 || ($myNation['gennum']+$nation['gennum'])/2 > $cond2 || !isNeighbor($me['nation'], $nation['nation'])) {
echo "<option style=color:{$nation['color']};background-color:red; value={$nation['nation']}>【 {$nation['name']} 】</option>";
echo "<option style='color:{$nation['color']};background-color:red;' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
} else {
echo "<option style=color:{$nation['color']} value={$nation['nation']}>【 {$nation['name']} 】</option>";
echo "<option style='color:{$nation['color']}' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
}
}
@@ -1754,7 +1754,7 @@ function command_61($turn, $command) {
case 6: $color = "red"; break;
case 7: $color = "blue"; break;
}
echo "<option style=background-color:$color;color:{$nation['color']}; value={$nation['nation']}>【 {$nation['name']} 】</option>";
echo "<option style='background-color:$color;color:{$nation['color']};' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
}
echo "
</select>
@@ -1846,7 +1846,7 @@ function command_62($turn, $command) {
case 6: $color = "black"; break;
case 7: $color = "blue"; break;
}
echo "<option style=background-color:$color;color:{$nation['color']}; value={$nation['nation']}>【 {$nation['name']} 】</option>";
echo "<option style='background-color:$color;color:{$nation['color']};' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
}
echo "
</select>
@@ -1907,7 +1907,7 @@ function command_63($turn, $command) {
case 6: $color = "red"; break;
case 7: $color = "red"; break;
}
echo "<option style=background-color:$color;color:{$nation['color']}; value={$nation['nation']}>【 {$nation['name']} 】</option>";
echo "<option style='background-color:$color;color:{$nation['color']};' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
}
echo "
</select>
@@ -1968,7 +1968,7 @@ function command_64($turn, $command) {
case 6: $color = "red"; break;
case 7: $color = "blue"; break;
}
echo "<option style=background-color:$color;color:{$nation['color']}; value={$nation['nation']}>【 {$nation['name']} 】</option>";
echo "<option style='background-color:$color;color:{$nation['color']};' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
}
echo "
</select>
@@ -2316,7 +2316,7 @@ function command_75($turn, $command) {
case 6: $color = "red"; break;
case 7: $color = "blue"; break;
}
echo "<option style=background-color:$color;color:{$nation['color']}; value={$nation['nation']}>【 {$nation['name']} 】</option>";
echo "<option style='background-color:$color;color:{$nation['color']};' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
}
echo "
</select>
@@ -2378,7 +2378,7 @@ function command_77($turn, $command) {
case 6: $color = "red"; break;
case 7: $color = "blue"; break;
}
echo "<option style=background-color:$color;color:{$nation['color']}; value={$nation['nation']}>【 {$nation['name']} 】</option>";
echo "<option style='background-color:$color;color:{$nation['color']};' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
}
echo "
</select>
@@ -2440,7 +2440,7 @@ function command_78($turn, $command) {
case 6: $color = "red"; break;
case 7: $color = "blue"; break;
}
echo "<option style=background-color:$color;color:{$nation['color']}; value={$nation['nation']}>【 {$nation['name']} 】</option>";
echo "<option style='background-color:$color;color:{$nation['color']};' value='{$nation['nation']}'>【 {$nation['name']} 】</option>";
}
echo "
</select>
+2 -2
View File
@@ -70,7 +70,7 @@ class CityConstBase{
[11, '수춘', '대', 5143, 99, 96, 80, 99, 95, '중원', 395, 270, ['서주', '여남', '초', '합비']],
[12, '서주', '대', 4853,101, 98, 80,102, 97, '중원', 440, 250, ['수춘', '하비', '초', '패']],
[13, '강릉', '대', 4850,105, 96, 80, 95, 96, '초', 245, 335, ['장사', '무릉', '이릉', '장판']],
[14, '장사', '대', 4710, 97, 99, 80,100,105, '초', 255, 375, ['강릉', '시상', '계양', '무릉', '영릉']],
[14, '장사', '대', 4710, 97, 99, 80,100,105, '초', 255, 375, ['강릉', '시상', '계양', '무릉']],
[15, '시상', '대', 5252, 98,100,100, 99, 96, '오월', 360, 360, ['장사', '여강', '고창', '적벽', '파양']],
[16, '위례', '대', 4926,100, 93, 80, 98,103, '동이', 620, 145, ['평양', '사비', '계림', '안평', '동황']],
[17, '계', '중', 3885, 75, 80, 60, 78, 81, '하북', 365, 35, ['진양', '역경']],
@@ -110,7 +110,7 @@ class CityConstBase{
[51, '신야', '소', 2786, 60, 62, 40, 58, 55, '초', 250, 260, ['양양', '완', '상용']],
[52, '강하', '소', 3074, 55, 56, 40, 57, 60, '초', 315, 295, ['장판', '적벽']],
[53, '무릉', '소', 3196, 58, 63, 40, 63, 58, '초', 195, 355, ['강릉', '장사', '영릉']],
[54, '영릉', '소', 2849, 62, 58, 40, 62, 62, '초', 190, 395, ['장사', '계양', '남영', '무릉']],
[54, '영릉', '소', 2849, 62, 58, 40, 62, 62, '초', 190, 395, ['계양', '남영', '무릉']],
[55, '상동', '소', 2767, 58, 59, 40, 62, 58, '초', 210, 435, ['남해', '계양', '고창']],
[56, '여강', '소', 2905, 56, 58, 40, 60, 55, '오월', 380, 315, ['시상', '합비', '적벽', '파양']],
[57, '회계', '소', 3005, 64, 59, 40, 62, 64, '오월', 480, 395, ['오', '산월']],
+3 -3
View File
@@ -67,7 +67,7 @@ class DiplomaticMessage extends Message{
$permission = checkSecretPermission($general, false);
if(!$general || $permission < 4){
return [self::INVALID, '해당 국가의 외교권자 아닙니다.'];
return [self::INVALID, '해당 국가의 외교권자 아닙니다.'];
}
return [self::ACCEPTED, ''];
@@ -273,7 +273,7 @@ class DiplomaticMessage extends Message{
$gameStor = KVStorage::getStorage($db, 'game_env');
$general = $db->queryFirstRow(
'SELECT `name`, nation, `level`, `permission`, `penalty` FROM general WHERE `no`=%i AND nation=%i',
'SELECT `name`, nation, `level`, `permission`, `penalty`,belong FROM general WHERE `no`=%i AND nation=%i',
$receiverID,
$this->dest->nationID
);
@@ -378,7 +378,7 @@ class DiplomaticMessage extends Message{
$db = DB::db();
$general = $db->queryFirstRow(
'SELECT `name`, `level` FROM general WHERE `no`=%i AND nation=%i',
'SELECT `name`, nation, `level`, `permission`, `penalty`,belong FROM general WHERE `no`=%i AND nation=%i',
$receiverID,
$this->dest->nationID
);
+1
View File
@@ -242,4 +242,5 @@ class GameConstBase
//'che_국기변경'
]
];
public static $retirementYear = 80;
}
+4 -1
View File
@@ -165,6 +165,8 @@ class ResetHelper{
'locktime'=>TimeUtil::now(true)
]);
$prevWinner = $db->queryFirstField('SELECT l12name FROM emperior ORDER BY `no` DESC LIMIT 1');
CityConst::build();
$cityPositions = [];
foreach(CityConst::all() as $city){
@@ -235,7 +237,8 @@ class ResetHelper{
'npcmode'=>$npcmode,
'extended_general'=>$extend,
'fiction'=>$fiction,
'tnmt_trig'=>$tournament_trig
'tnmt_trig'=>$tournament_trig,
'prev_winner'=>$prevWinner
];
foreach(RootDB::db()->query('SELECT `no`, `name`, `picture`, `imgsvr` FROM member WHERE grade >= 5') as $admin){
+1
View File
@@ -271,6 +271,7 @@ WHERE turntime < %s ORDER BY turntime ASC, `no` ASC',
pullGeneralCommand($general->getID());
$currentTurn = $general->getVar('turntime');
$general->increaseVarWithLimit('myset', 1, null, 3);
$turnObj->updateTurnTime();
$turnObj->applyDB();
+3
View File
@@ -3,6 +3,9 @@
"startYear":181,
"life":1,
"fiction":0,
"const":{
"defaultMaxGeneral":600
},
"nation":[
["후한", "#800000", 10000, 10000, "후한왕조", 1500, "유가", 7,[
"낙양","계","역경","진양","남피","호관","호로","사곡","함곡","사수","하내","장안","홍농","완"
+3
View File
@@ -3,6 +3,9 @@
"startYear":187,
"life":1,
"fiction":0,
"const":{
"defaultMaxGeneral":600
},
"nation":[
["동탁", "#A9A9A9", 10000, 10000, "천하 권력을 노리는 동탁", 1500, "법가", 5, [
"낙양", "사곡", "함곡", "호로", "호관", "사수", "안정", "장안", "홍농"
+3
View File
@@ -3,6 +3,9 @@
"startYear":191,
"life":1,
"fiction":0,
"const":{
"defaultMaxGeneral":600
},
"nation":[
["조조", "#000080", 100000, 100000, "여포에게 본거지를 빼앗긴 위기의 조조", 1000, "병가", 2, [
"진류", "정도"
+3
View File
@@ -3,6 +3,9 @@
"startYear":193,
"life":1,
"fiction":0,
"const":{
"defaultMaxGeneral":600
},
"nation":[
["조조", "#000080", 10000, 10000, "황제를 등에 업고 본격적으로 성장하는 조조", 1000, "병가", 4, [
"허창", "호로", "낙양", "진류", "복양"
+3
View File
@@ -3,6 +3,9 @@
"startYear":197,
"life":1,
"fiction":0,
"const":{
"defaultMaxGeneral":600
},
"nation":[
["조조", "#000080", 10000, 10000, "원소와의 운명의 한판을 준비하는 조조", 1000, "병가", 5, [
"허창", "호로", "사곡", "함곡", "사수", "정도", "서주", "장안", "홍농", "낙양", "진류", "패", "완"
+3
View File
@@ -3,6 +3,9 @@
"startYear":199,
"life":1,
"fiction":0,
"const":{
"defaultMaxGeneral":600
},
"nation":[
["조조", "#000080", 10000, 10000, "관도대전에 승리하고 승리를 굳히려는 조조", 1000, "병가", 5, [
"허창", "호로", "사곡", "함곡", "사수", "관도", "정도", "복양", "장안", "홍농", "낙양", "진류", "패", "초", "완", "여남"
+3
View File
@@ -3,6 +3,9 @@
"startYear":204,
"life":1,
"fiction":0,
"const":{
"defaultMaxGeneral":600
},
"nation":[
["조조", "#000080", 10000, 10000, "하북을 제패하고 대군을 이끌고 남하하는 조조", 1000, "병가", 6, [
"허창", "역경", "계교", "관도", "호관", "정도", "호로", "사곡", "함곡", "사수", "서주", "계",
+3
View File
@@ -3,6 +3,9 @@
"startYear":210,
"life":1,
"fiction":0,
"const":{
"defaultMaxGeneral":600
},
"nation":[
["조조", "#000080", 10000, 10000, "강남 정벌에 실패한 뒤 한중을 노리는 조조", 1000, "병가", 6, [
"허창", "역경", "계교", "관도", "정도", "서주", "호관", "호로", "사곡", "함곡", "사수", "계",
+3
View File
@@ -3,6 +3,9 @@
"startYear":216,
"life":1,
"fiction":0,
"const":{
"defaultMaxGeneral":600
},
"nation":[
["조조", "#000080", 10000, 10000, "한중을 잃고 퇴각한 조조", 1000, "병가", 6, [
"허창", "합비", "광릉", "역경", "계교", "관도", "정도", "서주", "호관", "호로", "사곡",
+3
View File
@@ -3,6 +3,9 @@
"startYear":222,
"life":1,
"fiction":0,
"const":{
"defaultMaxGeneral":600
},
"nation":[
["조비", "#000080", 10000, 10000, "정권을 안정시킨 조비", 1000, "병가", 6, [
"허창", "합비", "광릉", "역경", "계교", "관도", "정도", "서주", "호관", "호로", "사곡",
+3
View File
@@ -3,6 +3,9 @@
"startYear":225,
"life":1,
"fiction":0,
"const":{
"defaultMaxGeneral":600
},
"nation":[
["조예", "#000080", 10000, 10000, "제갈량의 북벌에 맞서 사마의를 내세운 조예", 1000, "병가", 6, [
"허창", "기산", "합비", "광릉", "역경", "계교", "관도", "정도", "서주", "호관", "호로", "사곡",
+3
View File
@@ -3,6 +3,9 @@
"startYear":188,
"life":1,
"fiction":0,
"const":{
"defaultMaxGeneral":600
},
"nation":[
["원소", "#FFFF00", 10000, 10000, "4세 5공 명문 혈통 기주 패자 원소", 1000, "법가", 2, [
"업", "복양", "진류", "관도", "정도"
+3
View File
@@ -6,6 +6,9 @@
],
"diplomacy":[
],
"const":{
"defaultMaxGeneral":800
},
"general":[
[ 1, "소제1",1001, 0, null, 20, 11, 48, 0, 160, 300, "유지", null],
[ 1, "헌제",1002, 0, null, 17, 13, 61, 0, 160, 300, "안전", null],
+3
View File
@@ -12,6 +12,9 @@
"max":95,
"npcMax":95
},
"const":{
"defaultMaxGeneral":800
},
"general":[
[ 1, "소제1",1001, 0, null, 20, 11, 48, 0, 160, 300, "유지", null],
[ 1, "헌제",1002, 0, null, 17, 13, 61, 0, 160, 300, "안전", null],
+3
View File
@@ -15,6 +15,9 @@
"map":{
"mapName":"miniche"
},
"const":{
"defaultMaxGeneral":800
},
"general":[
[ 1, "소제1",1001, 0, null, 20, 11, 48, 0, 160, 300, "유지", null],
[ 1, "헌제",1002, 0, null, 17, 13, 61, 0, 160, 300, "안전", null],
+3
View File
@@ -15,6 +15,9 @@
],
"diplomacy":[
],
"const":{
"defaultMaxGeneral":800
},
"general":[
[ 1, "소제1",1001, 0, null, 20, 11, 48, 0, 160, 300, "유지", null],
[ 1, "헌제",1002, 0, null, 17, 13, 61, 0, 160, 300, "안전", null],
+3
View File
@@ -6,6 +6,9 @@
],
"diplomacy":[
],
"const":{
"defaultMaxGeneral":600
},
"general":[
[ 1, "소제1",1001, 0, null, 20, 11, 48, 0, 168, 190, "유지",null],
[ 1, "헌제",1002, 0, null, 17, 13, 61, 0, 170, 250, "안전",null],
+3
View File
@@ -6,6 +6,9 @@
],
"diplomacy":[
],
"const":{
"defaultMaxGeneral":600
},
"general":[
[ 25, "이수만",9009, 0, null, 81, 20, 74, 0, 160, 300, null, null, "SM이 갑이제"],
[ 25, "강타", -1, 0, null, 83, 61, 66, 0, 160, 300, null, null],
+3
View File
@@ -10,6 +10,9 @@
"npcMax":65,
"chiefMin":55
},
"const":{
"defaultMaxGeneral":700
},
"general":[
[ 1, "소제1", 1001, 0, null, 18, 7, 48, 0, 160, 300, "유지", null],
[ 1, "헌제", 1002, 0, null, 15, 7, 61, 0, 160, 300, "안전", null],
+3
View File
@@ -13,6 +13,9 @@
"npcMax":65,
"chiefMin":55
},
"const":{
"defaultMaxGeneral":700
},
"general":[
[ 1, "소제1", 1001, 0, null, 18, 7, 48, 0, 160, 300, "유지", null],
[ 1, "헌제", 1002, 0, null, 15, 7, 61, 0, 160, 300, "안전", null],
+3
View File
@@ -16,6 +16,9 @@
"map":{
"mapName":"miniche"
},
"const":{
"defaultMaxGeneral":700
},
"general":[
[ 1, "소제1", 1001, 0, null, 18, 7, 48, 0, 160, 300, "유지", null],
[ 1, "헌제", 1002, 0, null, 15, 7, 61, 0, 160, 300, "안전", null],
+3
View File
@@ -12,6 +12,9 @@
"max":95,
"npcMax":95
},
"const":{
"defaultMaxGeneral":600
},
"general":[
[0, "김일융", null, 0, null, 88, 83, 79, 0, 160, 300, null, null],
[0, "이승엽", null, 0, null, 90, 108, 37, 0, 160, 300, null, "위압", "안녕하세요 국민타자 이승엽입니다."],
+3
View File
@@ -12,6 +12,9 @@
"max":95,
"npcMax":95
},
"const":{
"defaultMaxGeneral":800
},
"general":[
[0, "가규", -1, 0, null, 78, 61, 84, 0, 160, 250, null, null],
[0, "가범", -1, 0, null, 60, 62, 73, 0, 160, 250, null, null],
+3
View File
@@ -11,6 +11,9 @@
"min": 40,
"max": 90
},
"const":{
"defaultMaxGeneral":1000
},
"iconPath": ".",
"fiction": 1,
"nation":[
+3
View File
@@ -11,6 +11,9 @@
"min": 50,
"max": 105
},
"const":{
"defaultMaxGeneral":700
},
"iconPath": "루드라사움",
"fiction": 0,
"nation":[
+3
View File
@@ -19,6 +19,9 @@
"mapName":"ludo_rathowm",
"unitSet":"ludo_rathowm"
},
"const":{
"defaultMaxGeneral":900
},
"diplomacy":[],
"general":[
[0, "아회남", null, 0, null, 65, 74, 26, 0, 160, 300, null, null],
+3
View File
@@ -11,6 +11,9 @@
<div class="map_button_stack">
<button type="button" class="btn btn-primary map_toggle_cityname btn-xs" data-toggle="button" aria-pressed="false" autocomplete="off">
도시명 표기
</button><br>
<button type="button" class="btn btn-secondary map_toggle_single_tap btn-xs" data-toggle="button" aria-pressed="false" autocomplete="off">
두번 도시 이동
</button>
</div>
<div class="city_tooltip">