Merge branch 'devel' of ssh://storage.hided.net:2525/devsam/core into devel
This commit is contained in:
File diff suppressed because one or more lines are too long
+35
-2
@@ -18,21 +18,24 @@ if($tnmt < 0 || $tnmt > 1){
|
||||
$tnmt = 1;
|
||||
}
|
||||
|
||||
$showDieImmediatelyBtn = false;
|
||||
$availableDieImmediately = false;
|
||||
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
$gameStor->cacheValues(['turnterm', 'opentime', 'turntime']);
|
||||
$connect=$db->get();
|
||||
|
||||
increaseRefresh("내정보", 1);
|
||||
|
||||
$query = "select no,npc,mode,tnmt,myset,train,atmos from general where owner='{$userID}'";
|
||||
$query = "select no,npc,mode,tnmt,myset,train,atmos,lastrefresh from general where owner='{$userID}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
$me = MYDB_fetch_array($result);
|
||||
|
||||
|
||||
if ($me['myset'] > 0) {
|
||||
$submit = 'submit';
|
||||
} else {
|
||||
@@ -91,6 +94,16 @@ if (($btn == "설정저장" || $detachNPC) && $me['myset'] > 0) {
|
||||
}
|
||||
}
|
||||
|
||||
if($gameStor->turntime <= $gameStor->opentime){
|
||||
//서버 가오픈시 할 수 있는 행동
|
||||
|
||||
if($me['npc'] == 0){
|
||||
$showDieImmediatelyBtn = true;
|
||||
if(addTurn($me['lastrefresh'], $gameStor->turnterm, 2) <= TimeUtil::DatetimeNow()){
|
||||
$availableDieImmediately = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
@@ -106,7 +119,21 @@ if (($btn == "설정저장" || $detachNPC) && $me['myset'] > 0) {
|
||||
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
|
||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
||||
<?=WebUtil::printCSS('css/common.css')?>
|
||||
<script>
|
||||
var availableDieImmediately = <?=$availableDieImmediately?'true':'false'?>;
|
||||
jQuery(function($){
|
||||
|
||||
$('#die_immediately').click(function(){
|
||||
if(!availableDieImmediately){
|
||||
alert('삭제를 위해서는 생성 후 2턴 가량의 시간이 필요합니다.');
|
||||
location.reload();
|
||||
return false;
|
||||
}
|
||||
return confirm('정말로 삭제하시겠습니까?');
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@@ -138,6 +165,12 @@ if (($btn == "설정저장" || $detachNPC) && $me['myset'] > 0) {
|
||||
<a href="c_vacation.php"><button type="button" style=background-color:<?=GameConst::$basecolor2?>;color:white;width:160px;height:30px;font-size:13px;>휴가 신청</button></a><br><br>
|
||||
<!--빙의 해제용 삭턴 조절<br>
|
||||
<a href="b_myPage.php?detachNPC=1"><button type="button" style=background-color:<?=GameConst::$basecolor2?>;color:white;width:160px;height:30px;font-size:13px;>빙의 해체 요청</button></a>-->
|
||||
|
||||
<?php if($showDieImmediatelyBtn): ?>
|
||||
가오픈 기간 내 장수 삭제<br>
|
||||
<a href="c_die_immediately.php" id='die_immediately'><button type="button" style=background-color:<?=GameConst::$basecolor2?>;color:white;width:160px;height:30px;font-size:13px;>장수 삭제</button></a><br><br>
|
||||
<?php endif; ?>
|
||||
|
||||
개인용 CSS<br>
|
||||
<textarea id='custom_css' style='color:white;background-color:black;width:420px;height:150px;'></textarea>
|
||||
</td>
|
||||
|
||||
+52
-10
@@ -81,6 +81,48 @@ uasort($troops, function($lhs, $rhs){
|
||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
||||
<?=WebUtil::printCSS('css/common.css')?>
|
||||
<?=WebUtil::printCSS('css/troops.css')?>
|
||||
<script>
|
||||
jQuery(function($){
|
||||
|
||||
$('#form1').submit(function(){
|
||||
return false;
|
||||
});
|
||||
$('#leaveTroop').click(function(e){
|
||||
return confirm("정말 부대를 탈퇴하시겠습니까?");
|
||||
})
|
||||
$('.submitBtn').click(function(event){
|
||||
if(event.isPropagationStopped()){
|
||||
return false;
|
||||
}
|
||||
console.log('b');
|
||||
var $this=$(this);
|
||||
|
||||
$.post({
|
||||
url:'j_troop.php',
|
||||
dataType:'json',
|
||||
data:{
|
||||
action:$this.val().replace(/\s/g, ''),
|
||||
troop:$('input.troopId:checked').val(),
|
||||
name:$('#troopName').val(),
|
||||
gen:$('#genNo').val()
|
||||
}
|
||||
}).then(function(data){
|
||||
console.log(data);
|
||||
if(!data.result){
|
||||
alert(data.reason);
|
||||
location.reload();
|
||||
}
|
||||
|
||||
location.reload();
|
||||
|
||||
}, function(){
|
||||
alert('알 수 없는 에러가 발생했습니다.');
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@@ -88,7 +130,7 @@ uasort($troops, function($lhs, $rhs){
|
||||
<table width=1000 class='tb_layout bg0'>
|
||||
<tr><td>부 대 편 성<br><?=backButton()?></td></tr>
|
||||
</table>
|
||||
<form name=form1 method=post action=c_troop.php>
|
||||
<form id=form1 name=form1 method=post>
|
||||
<table id="troop_list" class='tb_layout bg0'>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -102,9 +144,9 @@ uasort($troops, function($lhs, $rhs){
|
||||
<tfoot><tr><td colspan='5'>
|
||||
<?php if(!$troops): ?>
|
||||
<?php elseif($me['troop'] == 0): ?>
|
||||
<input type=submit name=btn value='부 대 가 입'>
|
||||
<input type=submit class='submitBtn' value='부 대 가 입'>
|
||||
<?php else: ?>
|
||||
<input type=submit name=btn value='부 대 탈 퇴' onclick='return confirm("정말 부대를 탈퇴하시겠습니까?")'>
|
||||
<input type=submit id="leaveTroop" class='submitBtn' value='부 대 탈 퇴'>
|
||||
<?php endif;?>
|
||||
</td></tr></tfoot>
|
||||
<tbody>
|
||||
@@ -133,7 +175,7 @@ foreach ($troops as $troopNo=>$troop) {
|
||||
|
||||
<?php if ($me['troop'] == 0): ?>
|
||||
<tr>
|
||||
<td align=center rowspan=2><input type='radio' name='troop' value='<?=$troop['troop']?>'></td>
|
||||
<td align=center rowspan=2><input type='radio' class='troopId' name='troop' value='<?=$troop['troop']?>'></td>
|
||||
<td align=center><?=$troop['name']?><br>【 <?=$cityText?> 】</td>
|
||||
<td height=64 class='generalIcon' style='background:no-repeat center url("<?=$troopLeader['pictureFullPath']?>");background-size:64px;'> </td>
|
||||
<td rowspan=2 width=62><?=$genlistText?></td>
|
||||
@@ -152,15 +194,15 @@ foreach ($troops as $troopNo=>$troop) {
|
||||
<td rowspan=2 width=62><?=$genlistText?></td>
|
||||
<td rowspan=2>
|
||||
<?php if ($me['no'] == $troopLeader['no']): ?>
|
||||
<select name=gen size=3 style=color:white;background-color:black;font-size:13px;width:128px;>";
|
||||
<select id='genNo' name=gen size=3 style=color:white;background-color:black;font-size:13px;width:128px;>";
|
||||
<?php foreach ($troop['users'] as $troopUser): ?>
|
||||
<?php if ($troopUser['no'] == $me['no']) {
|
||||
continue;
|
||||
} ?>
|
||||
<option value='<?=$troopUser['no']?>'><?=$troopUser['name']?></option>
|
||||
<option value='<?=$troopUser['no']?>'><?=$troopUser['name']?></option>
|
||||
<?php endforeach; ?>
|
||||
</select><br>
|
||||
<input type=submit name=btn value='부 대 추 방' style=width:130px;height:25px;>
|
||||
<input type=submit class='submitBtn' value='부 대 추 방' style=width:130px;height:25px;>
|
||||
<?php else: ?>
|
||||
<?=$troopLeader['turnText']?>
|
||||
<?php endif; ?>
|
||||
@@ -181,11 +223,11 @@ foreach ($troops as $troopNo=>$troop) {
|
||||
<table width=1000 class='tb_layout bg0'>
|
||||
<tr>
|
||||
<td width=80 id=bg1>부 대 명</td>
|
||||
<td width=130><input type=text style=color:white;background-color:black; size=18 maxlength=9 name=name></td>
|
||||
<td width=130><input id='troopName' type=text style=color:white;background-color:black; size=18 maxlength=9 name=name></td>
|
||||
<?php if($me['troop'] == 0): ?>
|
||||
<td><input type=submit name=btn value='부 대 창 설'></td>
|
||||
<td><input type=submit class='submitBtn' value='부 대 창 설'></td>
|
||||
<?php else: ?>
|
||||
<td><input type=submit name=btn value='부 대 변 경'></td>
|
||||
<td><input type=submit class='submitBtn' value='부 대 변 경'></td>
|
||||
<?php endif; ?>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
|
||||
$availableDieImmediately = false;
|
||||
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
|
||||
$general = $db->queryFirstRow('SELECT no,name,name2,npc,lastrefresh FROM general WHERE owner=%i AND npc = 0', $userID);
|
||||
|
||||
if(!$general){
|
||||
header('location:b_myPage.php');
|
||||
die();
|
||||
}
|
||||
|
||||
increaseRefresh("장수 삭제", 1);
|
||||
$gameStor->cacheValues(['turnterm', 'opentime', 'turntime', 'year', 'month']);
|
||||
|
||||
if($gameStor->turntime <= $gameStor->opentime){
|
||||
//서버 가오픈시 할 수 있는 행동
|
||||
if(addTurn($general['lastrefresh'], $gameStor->turnterm, 2) <= TimeUtil::DatetimeNow()){
|
||||
$availableDieImmediately = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(!$availableDieImmediately){
|
||||
header('location:b_myPage.php');
|
||||
die();
|
||||
}
|
||||
|
||||
|
||||
if(!$db->query('DELETE FROM general WHERE owner=%i AND npc=0', $userID)){
|
||||
trigger_error("올바르지 않은 삭제 프로세스 $userID", E_USER_WARNING);
|
||||
}
|
||||
$generalName = $general['name'];
|
||||
$josaYi = JosaUtil::pick($generalName, '이');
|
||||
pushGeneralPublicRecord(["<C>●</>{$gameStor->month}월:<Y>{$generalName}</>{$josaYi} 이 홀연히 모습을 <R>감추었습니다</>"], $gameStor->year, $gameStor->month);
|
||||
|
||||
|
||||
|
||||
$session->logoutGame();
|
||||
header('location:..');
|
||||
@@ -1,66 +0,0 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
// $btn, $name, $troop
|
||||
$btn = Util::getReq('btn');
|
||||
$name = Util::getReq('name');
|
||||
$gen = Util::getReq('gen', 'int');
|
||||
$troop = Util::getReq('troop', 'int');
|
||||
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = $session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
|
||||
$me = $db->queryFirstRow('SELECT `no`, nation, troop FROM general WHERE `owner`=%i', $userID);
|
||||
|
||||
$name = trim($name);
|
||||
if($btn == "부 대 창 설" && $name != "" && $me['troop'] == 0) {
|
||||
$db->insert('troop',[
|
||||
'name'=>$name,
|
||||
'nation'=>$me['nation'],
|
||||
'no'=>$me['no']
|
||||
]);
|
||||
$troopID = $db->insertId();
|
||||
|
||||
$db->update('general', [
|
||||
'troop'=>$troopID
|
||||
], 'no=%i',$me['no']);
|
||||
} elseif($btn == "부 대 변 경" && $name != "") {
|
||||
$db->update('troop', [
|
||||
'name'=>$name
|
||||
], 'no=%i',$me['no']);
|
||||
} elseif($btn == "부 대 추 방" && $gen != 0) {
|
||||
$db->update('general', [
|
||||
'troop'=>0
|
||||
], 'no=%i AND troop=(SELECT troop FROM troop WHERE no = %i)', $gen, $me['no']);
|
||||
} elseif($btn == "부 대 가 입" && $troop != 0) {
|
||||
$troopLeader = $db->queryFirstField('SELECT `no` FROM troop WHERE troop=%i', $troop);
|
||||
$troopLeaderNation = $db->queryFirstField('SELECT `nation` FROM `general` WHERE `no`=%i AND `nation`=%i', $troopLeader, $me['nation']);
|
||||
if($troopLeaderNation){
|
||||
$db->update('general', [
|
||||
'troop'=>$troop
|
||||
], 'no=%i', $me['no']);
|
||||
}
|
||||
} elseif($btn == "부 대 탈 퇴") {
|
||||
$troopLeader = $db->queryFirstField('SELECT `no` FROM troop WHERE troop=%i', $me['troop']);
|
||||
|
||||
//부대장일 경우
|
||||
if($troopLeader == $me['no']) {
|
||||
// 모두 탈퇴
|
||||
$db->update('general', [
|
||||
'troop'=>0
|
||||
], 'troop=%i',$me['troop']);
|
||||
// 부대 삭제
|
||||
$db->delete('troop', 'troop=%i', $me['troop']);
|
||||
} else {
|
||||
$db->update('general', [
|
||||
'troop'=>0
|
||||
], 'no=%i', $me['no']);
|
||||
}
|
||||
}
|
||||
|
||||
header('Location:b_troop.php', true, 303);
|
||||
+5
-66
@@ -8,66 +8,10 @@ $session = Session::getInstance()->setReadOnly();
|
||||
|
||||
$db = DB::db();
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>커맨드리스트</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')?>
|
||||
<script type="text/javascript">
|
||||
<?php
|
||||
if(!$session->isGameLoggedIn()){
|
||||
echo 'window.parent.location.href = "../";';
|
||||
if (!$session->isGameLoggedIn()) {
|
||||
die('<script>window.location.href = "../"</script>');
|
||||
}
|
||||
?>
|
||||
function myclock() {
|
||||
lastday = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
|
||||
|
||||
date = document.clock.clock.value;
|
||||
|
||||
year = parseInt(date.substr(0, 4), 10);
|
||||
month = parseInt(date.substr(5,2), 10);
|
||||
day = parseInt(date.substr(8, 2), 10);
|
||||
hour = parseInt(date.substr(11, 2), 10);
|
||||
min = parseInt(date.substr(14, 2), 10);
|
||||
sec = parseInt(date.substr(17, 2), 10);
|
||||
|
||||
//윤년계산
|
||||
if(((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { lastday[1] = 29; }
|
||||
else { lastday[1] = 28; }
|
||||
|
||||
// if(term > 0) term--;
|
||||
|
||||
sec++;
|
||||
if(sec >= 60) { sec = 0; min++; }
|
||||
if(min >= 60) { min = 0; hour++; }
|
||||
if(hour >= 24) { hour = 0; day++; }
|
||||
if(day > lastday[month-1]) { month++; day = 1; }
|
||||
if(month >= 13) { year++; month = 1; }
|
||||
if(month < 10) { month = '0' + month; }
|
||||
if(day < 10) { day = '0' + day; }
|
||||
if(hour < 10) { hour = '0' + hour; }
|
||||
if(min < 10) { min = '0' + min; }
|
||||
if(sec < 10) { sec = '0' + sec; }
|
||||
date = '' + year + '-' + month + '-' + day + ' ' + hour + ':' + min + ':' + sec;
|
||||
|
||||
document.clock.clock.value = date;
|
||||
|
||||
window.setTimeout("myclock();", 1000);
|
||||
}
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body OnLoad='myclock()'>
|
||||
<?php
|
||||
myCommandList();
|
||||
|
||||
function myCommandList() {
|
||||
@@ -76,6 +20,7 @@ function myCommandList() {
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$date = date('Y-m-d H:i:s');
|
||||
$date_precise = (new \DateTime())->format("Y-m-d H:i:s.u");
|
||||
|
||||
// 명령 목록
|
||||
$admin = $gameStor->getValues(['year','month','turnterm','turntime','opentime']);
|
||||
@@ -88,9 +33,8 @@ function myCommandList() {
|
||||
$turn = getTurn($me, 2);
|
||||
|
||||
echo "<table width=300 height=700 class='tb_layout bg2'>
|
||||
<form name=clock>
|
||||
<tr>
|
||||
<td colspan=4 align=center id=bg0><b>- 명령 목록 - <input value='$date' type=text name=clock size=19 style=background-color:black;color:white;border-style:none;></b></td>
|
||||
<td colspan=4 align=center id=bg0><b>- 명령 목록 - <input value='$date' type=text id=clock size=19 style=background-color:black;color:white;border-style:none; data-server-time='{$date_precise}'></b></td>
|
||||
</tr>";
|
||||
|
||||
$year = $admin['year'];
|
||||
@@ -120,11 +64,6 @@ function myCommandList() {
|
||||
}
|
||||
|
||||
echo "
|
||||
</form>
|
||||
</table>
|
||||
";
|
||||
}
|
||||
?>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
}
|
||||
+125
-110
@@ -1283,8 +1283,9 @@ function increaseRefresh($type="", $cnt=1) {
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
$gameStor->refresh = $gameStor->refresh+$cnt; //TODO: +로 증가하는 값은 별도로 분리
|
||||
$isunited = $gameStor->isunited;
|
||||
$opentime = $gameStor->opentime;
|
||||
|
||||
if($isunited != 2 && $generalID && $userGrade < 6) {
|
||||
if($isunited != 2 && $generalID && $userGrade < 6 && $opentime <= TimeUtil::DatetimeNow()) {
|
||||
$db->update('general', [
|
||||
'lastrefresh'=>$date,
|
||||
'con'=>$db->sqleval('con + %i', $cnt),
|
||||
@@ -2261,11 +2262,78 @@ function CheckHall($no) {
|
||||
}
|
||||
|
||||
|
||||
function guaranteedUniqueItemLottery(array $weightedArray, string $headerText='아이템'):?int{
|
||||
//NOTE: Util::choiceRandomUsingWeight 사용
|
||||
//TODO: 또 재 구현해야함.... ㅜㅜ
|
||||
|
||||
if(!$weightedArray){
|
||||
return null;
|
||||
}
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
|
||||
$targetGeneralID = Util::choiceRandomUsingWeight($weightedArray);
|
||||
|
||||
$alllog = [];
|
||||
$history = [];
|
||||
$occupied = [];
|
||||
$item = [];
|
||||
|
||||
$admin = $gameStor->getValues(['year', 'month', 'scenario']);
|
||||
|
||||
$selGroup = [
|
||||
20 - $db->queryFirstField('SELECT count(*) from general where weap > 6'),
|
||||
20 - $db->queryFirstField('SELECT count(*) from general where book > 6'),
|
||||
20 - $db->queryFirstField('SELECT count(*) from general where horse > 6'),
|
||||
20 - $db->queryFirstField('SELECT count(*) from general where item > 6')
|
||||
];
|
||||
|
||||
if(array_sum($selGroup) == 0){
|
||||
return null;
|
||||
}
|
||||
|
||||
$sel = Util::choiceRandomUsingWeight($selGroup);
|
||||
switch($sel) {
|
||||
case 0: [$type, $nameFunc] = ["weap", 'sammo\getWeapName']; break;
|
||||
case 1: [$type, $nameFunc] = ["book", 'sammo\getBookName']; break;
|
||||
case 2: [$type, $nameFunc] = ["horse", 'sammo\getHorseName']; break;
|
||||
case 3: [$type, $nameFunc] = ["item", 'sammo\getItemName']; break;
|
||||
}
|
||||
|
||||
foreach($db->queryFirstColumn('SELECT %b FROM general WHERE %b > 6', $type, $type) as $itemIdx){
|
||||
$occupied[$itemIdx] = 1;
|
||||
}
|
||||
for($i=7; $i <= 26; $i++) {
|
||||
if(!Util::array_get($occupied[$i])) {
|
||||
$item[] = $i;
|
||||
}
|
||||
}
|
||||
$it = Util::choiceRandom($item);
|
||||
|
||||
$general = $db->queryFirstRow('SELECT no, name, nation FROM general WHERE no = %i', $targetGeneralID);
|
||||
|
||||
$db->update('general', [$type=>$it], 'no=%i', $general['no']);
|
||||
|
||||
$nation = getNationStaticInfo($general['nation']);
|
||||
|
||||
|
||||
$josaUl = JosaUtil::pick(($nameFunc)($it), '을');
|
||||
$josaYi = JosaUtil::pick($general['name'], '이');
|
||||
$log[] = "<C>●</><C>".($nameFunc)($it)."</>{$josaUl} 습득했습니다!";
|
||||
$alllog[0] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <C>".($nameFunc)($it)."</>{$josaUl} 습득했습니다!";
|
||||
pushGeneralHistory($general, "<C>●</>{$admin['year']}년 {$admin['month']}월:<C>".($nameFunc)($it)."</>{$josaUl} 습득");
|
||||
$history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<C><b>【{$headerText}】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} <C>".($nameFunc)($it)."</>{$josaUl} 습득했습니다!";
|
||||
|
||||
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
|
||||
pushWorldHistory($history, $admin['year'], $admin['month']);
|
||||
pushGenLog($general, $log);
|
||||
return $targetGeneralID;
|
||||
}
|
||||
|
||||
function uniqueItem($general, $log, $vote=0) {
|
||||
//TODO: uniqueItem 재 구현
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
$connect=$db->get();
|
||||
$alllog = [];
|
||||
$history = [];
|
||||
$occupied = [];
|
||||
@@ -2276,124 +2344,71 @@ function uniqueItem($general, $log, $vote=0) {
|
||||
|
||||
$admin = $gameStor->getValues(['year', 'month', 'scenario']);
|
||||
|
||||
$query = "select count(*) as cnt from general where npc<2";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$gen = MYDB_fetch_array($result);
|
||||
$genCnt = $db->queryFirstField('SELECT count(*) FROM general WHERE npc < 2');
|
||||
|
||||
if($admin['scenario'] < 100) { $prob = $gen['cnt'] * 5; } // 5~6개월에 하나씩 등장
|
||||
else { $prob = $gen['cnt']; } // 1~2개월에 하나씩 등장
|
||||
if($admin['scenario'] < 100) { $prob = $genCnt * 5; } // 5~6개월에 하나씩 등장
|
||||
else { $prob = $genCnt; } // 1~2개월에 하나씩 등장
|
||||
|
||||
if($vote == 1) { $prob = Util::round($gen['cnt'] * 0.7 / 3); } // 투표율 70%, 투표 한번에 2~3개 등장
|
||||
elseif($vote == 2) { $prob = Util::round($gen['cnt'] / 10 / 2); } // 랜임시 2개(10%) 등장(200명중 20명 랜임시도?)
|
||||
elseif($vote == 3) { $prob = Util::round($gen['cnt'] / 10 / 4); } // 건국시 4개(20%) 등장(200명시 20국 정도 됨)
|
||||
if($vote == 1) { $prob = Util::round($genCnt * 0.7 / 3); } // 투표율 70%, 투표 한번에 2~3개 등장
|
||||
elseif($vote == 2) { $prob = Util::round($genCnt / 10 / 2); } // 랜임시 2개(10%) 등장(200명중 20명 랜임시도?)
|
||||
elseif($vote == 3) { $prob = Util::round($genCnt / 10 / 4); } // 건국시 4개(20%) 등장(200명시 20국 정도 됨)
|
||||
|
||||
if($prob < 3) { $prob = 3; }
|
||||
//아이템 습득 상황
|
||||
if(rand() % $prob == 0) {
|
||||
//셋중 선택
|
||||
$selGroup = [
|
||||
20 - $db->queryFirstField('SELECT count(*) from general where weap > 6'),
|
||||
20 - $db->queryFirstField('SELECT count(*) from general where book > 6'),
|
||||
20 - $db->queryFirstField('SELECT count(*) from general where horse > 6'),
|
||||
20 - $db->queryFirstField('SELECT count(*) from general where item > 6')
|
||||
];
|
||||
$sel = Util::choiceRandomUsingWeight($selGroup);
|
||||
switch($sel) {
|
||||
case 0: $type = "weap"; break;
|
||||
case 1: $type = "book"; break;
|
||||
case 2: $type = "horse"; break;
|
||||
case 3: $type = "item"; break;
|
||||
}
|
||||
$query = "select no,{$type} from general where {$type}>6";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$count = MYDB_num_rows($result);
|
||||
if($count < 20) {
|
||||
for($i=0; $i < $count; $i++) {
|
||||
$gen = MYDB_fetch_array($result);
|
||||
$occupied[$gen[$type]] = 1;
|
||||
}
|
||||
for($i=7; $i <= 26; $i++) {
|
||||
if(!Util::array_get($occupied[$i])) {
|
||||
$item[] = $i;
|
||||
}
|
||||
}
|
||||
$it = $item[rand() % count($item)]??0;
|
||||
if (rand() % $prob != 0) {
|
||||
return $log;
|
||||
|
||||
$query = "update general set {$type}='$it' where no='{$general['no']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
}
|
||||
//셋중 선택
|
||||
$selGroup = [
|
||||
20 - $db->queryFirstField('SELECT count(*) from general where weap > 6'),
|
||||
20 - $db->queryFirstField('SELECT count(*) from general where book > 6'),
|
||||
20 - $db->queryFirstField('SELECT count(*) from general where horse > 6'),
|
||||
20 - $db->queryFirstField('SELECT count(*) from general where item > 6')
|
||||
];
|
||||
|
||||
$nation = getNationStaticInfo($general['nation']);
|
||||
if(array_sum($selGroup) == 0){
|
||||
return $log;
|
||||
}
|
||||
|
||||
switch($sel) {
|
||||
case 0:
|
||||
$josaUl = JosaUtil::pick(getWeapName($it), '을');
|
||||
$josaYi = JosaUtil::pick($general['name'], '이');
|
||||
$log[] = "<C>●</><C>".getWeapName($it)."</>{$josaUl} 습득했습니다!";
|
||||
$alllog[0] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <C>".getWeapName($it)."</>{$josaUl} 습득했습니다!";
|
||||
pushGeneralHistory($general, "<C>●</>{$admin['year']}년 {$admin['month']}월:<C>".getWeapName($it)."</>{$josaUl} 습득");
|
||||
if($vote == 0) {
|
||||
$history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<C><b>【아이템】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} <C>".getWeapName($it)."</>{$josaUl} 습득했습니다!";
|
||||
} elseif($vote == 1) {
|
||||
$history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<C><b>【설문상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} <C>".getWeapName($it)."</>{$josaUl} 습득했습니다!";
|
||||
} elseif($vote == 2) {
|
||||
$history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<C><b>【랜덤임관상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} <C>".getWeapName($it)."</>{$josaUl} 습득했습니다!";
|
||||
} elseif($vote == 3) {
|
||||
$history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<C><b>【건국상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} <C>".getWeapName($it)."</>{$josaUl} 습득했습니다!";
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
$josaUl = JosaUtil::pick(getBookName($it), '을');
|
||||
$josaYi = JosaUtil::pick($general['name'], '이');
|
||||
$log[] = "<C>●</><C>".getBookName($it)."</>{$josaUl} 습득했습니다!";
|
||||
$alllog[0] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <C>".getBookName($it)."</>{$josaUl} 습득했습니다!";
|
||||
pushGeneralHistory($general, "<C>●</>{$admin['year']}년 {$admin['month']}월:<C>".getBookName($it)."</>{$josaUl} 습득");
|
||||
if($vote == 0) {
|
||||
$history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<C><b>【아이템】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} <C>".getBookName($it)."</>{$josaUl} 습득했습니다!";
|
||||
} elseif($vote == 1) {
|
||||
$history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<C><b>【설문상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} <C>".getBookName($it)."</>{$josaUl} 습득했습니다!";
|
||||
} elseif($vote == 2) {
|
||||
$history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<C><b>【랜덤임관상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} <C>".getBookName($it)."</>{$josaUl} 습득했습니다!";
|
||||
} elseif($vote == 3) {
|
||||
$history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<C><b>【건국상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} <C>".getBookName($it)."</>{$josaUl} 습득했습니다!";
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
$josaUl = JosaUtil::pick(getHorseName($it), '을');
|
||||
$josaYi = JosaUtil::pick($general['name'], '이');
|
||||
$log[] = "<C>●</><C>".getHorseName($it)."</>{$josaUl} 습득했습니다!";
|
||||
$alllog[0] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <C>".getHorseName($it)."</>{$josaUl} 습득했습니다!";
|
||||
pushGeneralHistory($general, "<C>●</>{$admin['year']}년 {$admin['month']}월:<C>".getHorseName($it)."</>{$josaUl} 습득");
|
||||
if($vote == 0) {
|
||||
$history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<C><b>【아이템】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} <C>".getHorseName($it)."</>{$josaUl} 습득했습니다!";
|
||||
} elseif($vote == 1) {
|
||||
$history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<C><b>【설문상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} <C>".getHorseName($it)."</>{$josaUl} 습득했습니다!";
|
||||
} elseif($vote == 2) {
|
||||
$history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<C><b>【랜덤임관상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} <C>".getHorseName($it)."</>{$josaUl} 습득했습니다!";
|
||||
} elseif($vote == 3) {
|
||||
$history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<C><b>【건국상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} <C>".getHorseName($it)."</>{$josaUl} 습득했습니다!";
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
$josaUl = JosaUtil::pick(getItemName($it), '을');
|
||||
$josaYi = JosaUtil::pick($general['name'], '이');
|
||||
$log[] = "<C>●</><C>".getItemName($it)."</>{$josaUl} 습득했습니다!";
|
||||
$alllog[0] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <C>".getItemName($it)."</>{$josaUl} 습득했습니다!";
|
||||
pushGeneralHistory($general, "<C>●</>{$admin['year']}년 {$admin['month']}월:<C>".getItemName($it)."</>{$josaUl} 습득");
|
||||
if($vote == 0) {
|
||||
$history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<C><b>【아이템】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} <C>".getItemName($it)."</>{$josaUl} 습득했습니다!";
|
||||
} elseif($vote == 1) {
|
||||
$history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<C><b>【설문상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} <C>".getItemName($it)."</>{$josaUl} 습득했습니다!";
|
||||
} elseif($vote == 2) {
|
||||
$history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<C><b>【랜덤임관상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} <C>".getItemName($it)."</>{$josaUl} 습득했습니다!";
|
||||
} elseif($vote == 3) {
|
||||
$history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<C><b>【건국상품】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} <C>".getItemName($it)."</>{$josaUl} 습득했습니다!";
|
||||
}
|
||||
break;
|
||||
}
|
||||
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
|
||||
pushWorldHistory($history, $admin['year'], $admin['month']);
|
||||
$sel = Util::choiceRandomUsingWeight($selGroup);
|
||||
switch($sel) {
|
||||
case 0: [$type, $nameFunc] = ["weap", 'sammo\getWeapName']; break;
|
||||
case 1: [$type, $nameFunc] = ["book", 'sammo\getBookName']; break;
|
||||
case 2: [$type, $nameFunc] = ["horse", 'sammo\getHorseName']; break;
|
||||
case 3: [$type, $nameFunc] = ["item", 'sammo\getItemName']; break;
|
||||
}
|
||||
|
||||
switch($vote){
|
||||
case 1: $voteTypeText = '설문상품'; break;
|
||||
case 2: $voteTypeText = '랜덤임관상품'; break;
|
||||
case 3: $voteTypeText = '건국상품'; break;
|
||||
default: $voteTypeText = '아이템'; break;
|
||||
}
|
||||
|
||||
foreach($db->queryFirstColumn('SELECT %b FROM general WHERE %b > 6', $type, $type) as $itemIdx){
|
||||
$occupied[$itemIdx] = 1;
|
||||
}
|
||||
for($i=7; $i <= 26; $i++) {
|
||||
if(!Util::array_get($occupied[$i])) {
|
||||
$item[] = $i;
|
||||
}
|
||||
}
|
||||
$it = Util::choiceRandom($item);
|
||||
|
||||
$db->update('general', [$type=>$it], 'no=%i', $general['no']);
|
||||
|
||||
$nation = getNationStaticInfo($general['nation']);
|
||||
|
||||
$josaUl = JosaUtil::pick(($nameFunc)($it), '을');
|
||||
$josaYi = JosaUtil::pick($general['name'], '이');
|
||||
$log[] = "<C>●</><C>".($nameFunc)($it)."</>{$josaUl} 습득했습니다!";
|
||||
$alllog[0] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>{$josaYi} <C>".($nameFunc)($it)."</>{$josaUl} 습득했습니다!";
|
||||
pushGeneralHistory($general, "<C>●</>{$admin['year']}년 {$admin['month']}월:<C>".($nameFunc)($it)."</>{$josaUl} 습득");
|
||||
$history[] = "<C>●</>{$admin['year']}년 {$admin['month']}월:<C><b>【{$voteTypeText}】</b></><D><b>{$nation['name']}</b></>의 <Y>{$general['name']}</>{$josaYi} <C>".($nameFunc)($it)."</>{$josaUl} 습득했습니다!";
|
||||
|
||||
pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']);
|
||||
pushWorldHistory($history, $admin['year'], $admin['month']);
|
||||
return $log;
|
||||
}
|
||||
|
||||
|
||||
+23
-31
@@ -720,8 +720,11 @@ where nation='{$general['nation']}'
|
||||
|
||||
function command_Single($turn, $command) {
|
||||
if(!$turn){
|
||||
header('location:commandlist.php', true, 303);
|
||||
return;
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'nextPage'=>null,
|
||||
'reason'=>'invalid turn'
|
||||
]);
|
||||
}
|
||||
|
||||
$db = DB::db();
|
||||
@@ -735,7 +738,11 @@ function command_Single($turn, $command) {
|
||||
}
|
||||
$db->update('general', $setValues, 'owner=%i',$userID);
|
||||
|
||||
header('location:commandlist.php', true, 303);
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'nextPage'=>null,
|
||||
'reason'=>'success'
|
||||
]);
|
||||
}
|
||||
|
||||
function command_Chief($turn, $command) {
|
||||
@@ -762,37 +769,22 @@ function command_Chief($turn, $command) {
|
||||
}
|
||||
|
||||
function command_Other($turn, $commandtype) {
|
||||
|
||||
$target = "processing.php?commandtype={$commandtype}";
|
||||
foreach($turn as $turnItem){
|
||||
$target.="&turn[]={$turnItem}";
|
||||
if(!$turn){
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'nextPage'=>null,
|
||||
'reason'=>'invalid turn'
|
||||
]);
|
||||
}
|
||||
$target.="&".mt_rand();
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=1024" />
|
||||
<script>
|
||||
parent.moveProcessing(<?=$commandtype?>, <?=Json::encode($turn)?>);
|
||||
</script>
|
||||
</head>
|
||||
<body style="background-color:black;">
|
||||
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
$unixNow = time();
|
||||
$turnArg = join('&turn[]=', $turn);
|
||||
|
||||
/*
|
||||
<form name='form1' action='processing.php' method='post' target=_parent>
|
||||
<?php foreach($turn as $turnItem): ?>
|
||||
<input type='hidden' name='turn[]' value='<?=$turnItem?>'>
|
||||
<?php endforeach; ?>
|
||||
<input type=hidden name=commandtype value=<?=$commandtype?>>
|
||||
</form>
|
||||
<script>*/
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'nextPage'=>"processing.php?commandtype={$commandtype}&turn[]={$turnArg}&t={$unixNow}",
|
||||
'reason'=>'success'
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+31
-1
@@ -973,7 +973,7 @@ function updateNationState() {
|
||||
$connect=$db->get();
|
||||
|
||||
$history = array();
|
||||
$admin = $gameStor->getValues(['year', 'month', 'fiction', 'startyear', 'show_img_level', 'turnterm', 'turntime']);
|
||||
$admin = $gameStor->getValues(['year', 'month', 'fiction', 'startyear', 'show_img_level', 'turnterm', 'turntime', 'killturn']);
|
||||
|
||||
$query = "select nation,name,level,gennum,tech from nation";
|
||||
$nationresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
@@ -1005,8 +1005,10 @@ function updateNationState() {
|
||||
}
|
||||
|
||||
if($nationlevel > $nation['level']) {
|
||||
$levelDiff = $nationlevel - $nation['level'];
|
||||
$oldLevel = $nation['level'];
|
||||
$nation['level'] = $nationlevel;
|
||||
|
||||
|
||||
switch($nationlevel) {
|
||||
case 7:
|
||||
@@ -1031,6 +1033,34 @@ function updateNationState() {
|
||||
}
|
||||
|
||||
|
||||
foreach(range(1, $levelDiff) as $idx){
|
||||
//유니크 아이템 하나 돌리자
|
||||
$targetKillTurn = $admin['killturn'];
|
||||
$targetKillTurn -= 24 * 60 / $admin['turnterm'];
|
||||
$nationGenList = $db->query('SELECT no, level, belong, horse, weap, book, item FROM general WHERE nation = %i AND killturn >= %i AND npc < 2', $nation['nation'], $targetKillTurn);
|
||||
$uniqueLotteryWeightList = [];
|
||||
|
||||
foreach($nationGenList as $nationGen){
|
||||
if($nationGen['horse'] > 6 || $nationGen['weap'] > 6 || $nationGen['book'] > 6 || $nationGen['item'] > 6){
|
||||
continue;
|
||||
}
|
||||
$score = $nationGen['belong'] + 5; //임관 년도 + 5
|
||||
if($nationGen['level'] == 12){
|
||||
$score += 200; //NOTE: 꼬우면 군주하세요.
|
||||
}
|
||||
else if($nationGen['level'] == 11){
|
||||
$score += 70;
|
||||
}
|
||||
else if($nationGen['level'] > 4){
|
||||
$score += 35;
|
||||
}
|
||||
$uniqueLotteryWeightList[$nationGen['no']] = $score;
|
||||
}
|
||||
guaranteedUniqueItemLottery($uniqueLotteryWeightList, '작위보상');
|
||||
}
|
||||
|
||||
|
||||
|
||||
$lastAssemblerID = $gameStor->assembler_id??0;
|
||||
for($levelGen = max(1, $oldLevel) + 1; $levelGen <= $nationlevel; $levelGen+=1){
|
||||
if(in_array($levelGen, [3, 5, 7])){
|
||||
|
||||
+7
-4
@@ -5,6 +5,9 @@ function SetDevelop($genType, $no, $city, $tech) {
|
||||
$db = DB::db();
|
||||
$connect=$db->get();
|
||||
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
[$startyear, $year] = $gameStor->getValuesAsArray(['startyear', 'year']);
|
||||
|
||||
$query = "select rate,pop/pop2*100 as po,comm/comm2*100 as co,def/def2*100 as de,wall/wall2*100 as wa,secu/secu2*100 as se,agri/agri2*100 as ag from city where city='$city'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$city = MYDB_fetch_array($result);
|
||||
@@ -43,20 +46,20 @@ function SetDevelop($genType, $no, $city, $tech) {
|
||||
case 3: //지내정장
|
||||
if($prob < 40) {
|
||||
if($city['ag'] < 99) { $command = EncodeCommand(0, 0, 0, 1); } //농업
|
||||
elseif($tech < 10000) { $command = EncodeCommand(0, 0, 0, 3); } //기술
|
||||
elseif(!TechLimit($startyear, $year, $tech)) { $command = EncodeCommand(0, 0, 0, 3); } //기술
|
||||
elseif($city['po'] < 99) { $command = EncodeCommand(0, 0, 0, 7); } //정장
|
||||
else { $command = EncodeCommand(0, 0, 0, 9); } //조달
|
||||
} elseif($prob < 80) {
|
||||
if($city['co'] < 99) { $command = EncodeCommand(0, 0, 0, 2); } //상업
|
||||
elseif($tech < 10000) { $command = EncodeCommand(0, 0, 0, 3); } //기술
|
||||
elseif(!TechLimit($startyear, $year, $tech)) { $command = EncodeCommand(0, 0, 0, 3); } //기술
|
||||
elseif($city['po'] < 99) { $command = EncodeCommand(0, 0, 0, 7); } //정장
|
||||
else { $command = EncodeCommand(0, 0, 0, 9); } //조달
|
||||
} elseif($prob < 90) {
|
||||
if($tech < 10000) { $command = EncodeCommand(0, 0, 0, 3); } //기술
|
||||
if(!TechLimit($startyear, $year, $tech)) { $command = EncodeCommand(0, 0, 0, 3); } //기술
|
||||
elseif($city['po'] < 99) { $command = EncodeCommand(0, 0, 0, 7); } //정장
|
||||
else { $command = EncodeCommand(0, 0, 0, 9); } //조달
|
||||
} else {
|
||||
if($tech < 10000) { $command = EncodeCommand(0, 0, 0, 3 + (rand() % 2) * 6); } //기술, 조달
|
||||
if(!TechLimit($startyear, $year, $tech)) { $command = EncodeCommand(0, 0, 0, 3 + (rand() % 2) * 6); } //기술, 조달
|
||||
else { $command = EncodeCommand(0, 0, 0, 29); }
|
||||
}
|
||||
break;
|
||||
|
||||
+4
-2
@@ -111,6 +111,8 @@ $(function(){
|
||||
setInterval(function(){
|
||||
refreshMsg();
|
||||
}, 5000);
|
||||
|
||||
reloadCommandList();
|
||||
});
|
||||
</script>
|
||||
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
|
||||
@@ -241,9 +243,9 @@ else if($session->userGrade == 4){
|
||||
<td style='width:700px;height:520px;' colspan=2>
|
||||
<?=getMapHtml($mapTheme)?>
|
||||
</td>
|
||||
<td style='width:300px;' rowspan=4><iframe seamless="seamless" name=commandlist src='commandlist.php' style='width:300px;height:700px;' frameborder=0 marginwidth=0 marginheight=0 topmargin=0 scrolling=no></iframe></td>
|
||||
<td style='width:300px;' rowspan=4 id='commandlist'></td>
|
||||
</tr>
|
||||
<form name=form2 action=preprocessing.php method=post target=commandlist>
|
||||
<form id='form2' name=form2>
|
||||
<tr>
|
||||
<td rowspan=3 width=50 valign=top><?=turnTable()?></td>
|
||||
<td style="width:650px;border:none;text-align:center;"><?php cityInfo(); ?></td>
|
||||
|
||||
@@ -4,7 +4,7 @@ namespace sammo;
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$session = Session::requireGameLogin([])->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
@@ -17,8 +17,10 @@ $commandtype = Util::getReq('commandtype', 'int');
|
||||
increaseRefresh("턴입력", 1);
|
||||
|
||||
if(!$turn || $commandtype === null || $sel === null){
|
||||
header('location:commandlist.php', true, 303);
|
||||
die();
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'reason'=>'empty command'
|
||||
]);
|
||||
}
|
||||
|
||||
$count = count($turn);
|
||||
+18
-7
@@ -22,6 +22,13 @@ $rootDB = RootDB::db();
|
||||
$oNow = new \DateTimeImmutable();
|
||||
$now = $oNow->format('Y-m-d H:i:s');
|
||||
|
||||
list(
|
||||
$year,
|
||||
$month,
|
||||
$maxgeneral,
|
||||
$npcmode
|
||||
) = $gameStor->getValuesAsArray(['year', 'month', 'maxgeneral', 'npcmode']);
|
||||
|
||||
$userNick = RootDB::db()->queryFirstField('SELECT `NAME` FROM member WHERE `NO`=%i',$userID);
|
||||
if(!$userNick){
|
||||
Json::die([
|
||||
@@ -30,6 +37,8 @@ if(!$userNick){
|
||||
]);
|
||||
}
|
||||
|
||||
$db->query("lock tables general write, select_npc_token write");
|
||||
|
||||
$pickResult = $db->queryFirstField('SELECT pick_result FROM select_npc_token WHERE `owner`=%i AND `valid_until`>=%s', $userID, $now);
|
||||
if(!$pickResult){
|
||||
Json::die([
|
||||
@@ -38,7 +47,6 @@ if(!$pickResult){
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
$pickResult = Json::decode($pickResult);
|
||||
if(!key_exists($pick, $pickResult)){
|
||||
Json::die([
|
||||
@@ -50,14 +58,9 @@ $pickedNPC = $pickResult[$pick];
|
||||
|
||||
|
||||
$gencount = $db->queryFirstField('SELECT count(`no`) FROM general WHERE npc<2');
|
||||
list(
|
||||
$year,
|
||||
$month,
|
||||
$maxgeneral,
|
||||
$npcmode
|
||||
) = $gameStor->getValuesAsArray(['year', 'month', 'maxgeneral', 'npcmode']);
|
||||
|
||||
if(!$npcmode){
|
||||
$db->query("unlock tables");
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'빙의 가능한 서버가 아닙니다'
|
||||
@@ -65,12 +68,15 @@ if(!$npcmode){
|
||||
}
|
||||
|
||||
if ($gencount >= $maxgeneral) {
|
||||
$db->query("unlock tables");
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'더 이상 등록 할 수 없습니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//등록 시작
|
||||
$db->update('general', [
|
||||
'name2'=>$userNick,
|
||||
@@ -81,7 +87,10 @@ $db->update('general', [
|
||||
'owner'=>$userID,
|
||||
], 'owner <= 0 AND npc = 2 AND no = %i', $pick);
|
||||
|
||||
|
||||
|
||||
if(!$db->affectedRows()){
|
||||
$db->query("unlock tables");
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'장수 등록에 실패했습니다.'
|
||||
@@ -90,6 +99,8 @@ if(!$db->affectedRows()){
|
||||
|
||||
$db->delete('select_npc_token', 'owner=%i or valid_until < %s', $userID, $now);
|
||||
|
||||
$db->query("unlock tables");
|
||||
|
||||
$josaYi = JosaUtil::pick($userNick, '이');
|
||||
pushGeneralHistory($pickedNPC, "<C>●</>{$year}년 {$month}월:<Y>{$pickedNPC['name']}</>의 육체에 <Y>{$userNick}</>{$josaYi} 빙의되다.");
|
||||
//pushGenLog($me, $mylog);
|
||||
|
||||
@@ -64,7 +64,7 @@ if(file_exists(__dir__.'/.htaccess')){
|
||||
|
||||
//TODO: 천통시에도 예약 오픈 알림이 필요..?
|
||||
|
||||
$admin = $gameStor->getValues(['isunited', 'npcmode', 'year', 'month', 'scenario', 'scenario_text', 'maxgeneral', 'turnterm', 'opentime', 'turntime']);
|
||||
$admin = $gameStor->getValues(['isunited', 'npcmode', 'year', 'month', 'scenario', 'scenario_text', 'maxgeneral', 'turnterm', 'opentime', 'turntime', 'join_mode', 'fiction']);
|
||||
$admin['maxUserCnt'] = $admin['maxgeneral'];
|
||||
$admin['npcMode'] = $admin['npcmode'];
|
||||
$admin['turnTerm'] = $admin['turnterm'];
|
||||
@@ -85,6 +85,23 @@ $admin['userCnt'] = $genCnt;
|
||||
$admin['npcCnt'] = $npcCnt;
|
||||
$admin['nationCnt'] = $nationCnt;
|
||||
|
||||
$admin['npcMode'] = $admin['npcMode']?'가능':'불가';
|
||||
$admin['fictionMode'] = $admin['fiction']?'가상':'사실';
|
||||
|
||||
$otherTextInfo = [];
|
||||
|
||||
if($admin['join_mode'] == 'onlyRandom'){
|
||||
$otherTextInfo[] = '랜덤 임관 전용';
|
||||
}
|
||||
|
||||
if(!$otherTextInfo){
|
||||
$otherTextInfo = '표준';
|
||||
}
|
||||
else{
|
||||
$otherTextInfo = join(', ', $otherTextInfo);
|
||||
}
|
||||
$admin['otherTextInfo'] = $otherTextInfo;
|
||||
$admin['defaultStatTotal'] = GameConst::$defaultStatTotal;
|
||||
$me = [];
|
||||
|
||||
$general = $db->queryFirstRow('SELECT name, picture, imgsvr from general where owner=%i', $userID);
|
||||
|
||||
+165
@@ -0,0 +1,165 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
// $btn, $name, $troop
|
||||
$action = Util::getReq('action');
|
||||
$name = Util::getReq('name');
|
||||
$gen = Util::getReq('gen', 'int');
|
||||
$troop = Util::getReq('troop', 'int');
|
||||
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin([])->setReadOnly();
|
||||
$userID = $session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
|
||||
$me = $db->queryFirstRow('SELECT `no`, name, nation, troop FROM general WHERE `owner`=%i', $userID);
|
||||
|
||||
|
||||
|
||||
if($action == '부대창설'){
|
||||
$name = trim($name);
|
||||
if(!$name){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'부대 이름이 없습니다.'
|
||||
]);
|
||||
}
|
||||
if($me['troop'] != 0){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'이미 부대에 가입해있습니다.'
|
||||
]);
|
||||
}
|
||||
$db->insert('troop',[
|
||||
'name'=>$name,
|
||||
'nation'=>$me['nation'],
|
||||
'no'=>$me['no']
|
||||
]);
|
||||
$troopID = $db->insertId();
|
||||
|
||||
$db->update('general', [
|
||||
'troop'=>$troopID
|
||||
], 'no=%i',$me['no']);
|
||||
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'reason'=>'success'
|
||||
]);
|
||||
}
|
||||
|
||||
if($action == '부대변경'){
|
||||
$name = trim($name);
|
||||
if(!$name){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'부대 이름이 없습니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$db->update('troop', [
|
||||
'name'=>$name
|
||||
], 'no=%i',$me['no']);
|
||||
|
||||
if($db->affectedRows() == 0){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'부대장이 아닙니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'reason'=>'success'
|
||||
]);
|
||||
}
|
||||
|
||||
if($action == '부대추방'){
|
||||
if (!$gen){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'장수를 지정해야 합니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$db->update('general', [
|
||||
'troop'=>0
|
||||
], 'no=%i AND troop=(SELECT troop FROM troop WHERE no = %i)', $gen, $me['no']);
|
||||
|
||||
if($db->affectedRows() == 0){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'부대장이 아니거나, 장수를 잘못 지정했습니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'reason'=>'success'
|
||||
]);
|
||||
}
|
||||
|
||||
if ($action == '부대가입') {
|
||||
if(!$troop){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'부대를 지정해야 합니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$troopLeader = $db->queryFirstField('SELECT `no` FROM troop WHERE troop=%i', $troop)?:0;
|
||||
$troopLeaderNation = $db->queryFirstField('SELECT `nation` FROM `general` WHERE `no`=%i AND `nation`=%i', $troopLeader, $me['nation']);
|
||||
|
||||
if (!$troopLeaderNation) {
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'올바른 부대장이 아닙니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$db->update('general', [
|
||||
'troop'=>$troop
|
||||
], 'no=%i', $me['no']);
|
||||
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'reason'=>'success'
|
||||
]);
|
||||
}
|
||||
|
||||
if($action == "부대탈퇴") {
|
||||
|
||||
if($me['troop'] == 0){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'부대에 속해있지 않습니다.'
|
||||
]);
|
||||
}
|
||||
$troopLeader = $db->queryFirstField('SELECT `no` FROM troop WHERE troop=%i', $me['troop']);
|
||||
|
||||
//부대장일 경우
|
||||
if($troopLeader == $me['no']) {
|
||||
// 모두 탈퇴
|
||||
$db->update('general', [
|
||||
'troop'=>0
|
||||
], 'troop=%i',$me['troop']);
|
||||
// 부대 삭제
|
||||
$db->delete('troop', 'troop=%i', $me['troop']);
|
||||
} else {
|
||||
$db->update('general', [
|
||||
'troop'=>0
|
||||
], 'no=%i', $me['no']);
|
||||
}
|
||||
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'reason'=>'success'
|
||||
]);
|
||||
}
|
||||
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'올바르지 않은 명령입니다.'
|
||||
]);
|
||||
+63
-1
@@ -6,4 +6,66 @@ include "func.php";
|
||||
|
||||
|
||||
|
||||
$session = Session::requireGameLogin([])->setReadOnly();
|
||||
$session = Session::requireGameLogin([])->setReadOnly();
|
||||
|
||||
$type = Util::getReq('type', 'int', 0);
|
||||
$sel = Util::getReq('sel', 'int', 1);
|
||||
|
||||
if($sel <= 0 || $sel > 12){
|
||||
$sel = 1;
|
||||
}
|
||||
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
|
||||
increaseRefresh("턴반복", 1);
|
||||
|
||||
$myActionCnt = $db->queryFirstField('SELECT con FROM general WHERE `owner`=%i', $userID);
|
||||
|
||||
$con = checkLimit($myActionCnt);
|
||||
if($con >= 2) {
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'result'=>'접속 제한입니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
switch($type) {
|
||||
case 0://반복
|
||||
$valueMap = [];
|
||||
foreach(range($sel, GameConst::$maxTurn - 1) as $idx){
|
||||
$src = $idx % $sel;
|
||||
$valueMap['turn'.$idx] = $db->sqleval('%b', 'turn'.$src);
|
||||
}
|
||||
$db->update('general', $valueMap, 'owner=%i', $userID);
|
||||
break;
|
||||
case 1:
|
||||
$valueMap = [];
|
||||
foreach(range(GameConst::$maxTurn -1, $sel, -1) as $idx){
|
||||
$src = $idx - $sel;
|
||||
$valueMap['turn'.$idx] = $db->sqleval('%b', 'turn'.$src);
|
||||
}
|
||||
foreach(range($sel -1, 0, -1) as $idx){
|
||||
$valueMap['turn'.$idx] = EncodeCommand(0, 0, 0, 0);
|
||||
}
|
||||
$db->update('general', $valueMap, 'owner=%i', $userID);
|
||||
break;
|
||||
case 2:
|
||||
$valueMap = [];
|
||||
foreach(range(0, GameConst::$maxTurn - $sel - 1) as $idx){
|
||||
$src = $idx + $sel;
|
||||
$valueMap['turn'.$idx] = $db->sqleval('%b', 'turn'.$src);
|
||||
}
|
||||
foreach(range(GameConst::$maxTurn - $sel, GameConst::$maxTurn - 1) as $idx){
|
||||
$valueMap['turn'.$idx] = EncodeCommand(0, 0, 0, 0);
|
||||
}
|
||||
$db->update('general', $valueMap, 'owner=%i', $userID);
|
||||
break;
|
||||
}
|
||||
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'result'=>'success'
|
||||
]);
|
||||
+14
-3
@@ -71,6 +71,8 @@ $gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
$gameStor->cacheValues(['year','month','maxgeneral','scenario','show_img_level','turnterm','turntime','genius','npcmode']);
|
||||
########## 동일 정보 존재여부 확인. ##########
|
||||
|
||||
$db->query("lock tables general write, city read, storage read");
|
||||
|
||||
$gencount = $db->queryFirstField('SELECT count(`no`) FROM general WHERE npc<2');
|
||||
$oldGeneral = $db->queryFirstField('SELECT `no` FROM general WHERE `owner`=%i', $userID);
|
||||
$oldName = $db->queryFirstField('SELECT `no` FROM general WHERE `name`=%s', $name);
|
||||
@@ -80,6 +82,7 @@ if ($oldGeneral) {
|
||||
window.alert('이미 등록하셨습니다!')
|
||||
history.go(-1)
|
||||
</script>");
|
||||
$db->query("unlock tables");
|
||||
exit;
|
||||
}
|
||||
if ($oldName) {
|
||||
@@ -87,6 +90,7 @@ if ($oldName) {
|
||||
window.alert('이미 있는 장수입니다. 다른 이름으로 등록해 주세요!')
|
||||
history.go(-1)
|
||||
</script>");
|
||||
$db->query("unlock tables");
|
||||
exit;
|
||||
}
|
||||
if ($gameStor->maxgeneral <= $gencount) {
|
||||
@@ -94,6 +98,7 @@ if ($gameStor->maxgeneral <= $gencount) {
|
||||
window.alert('더이상 등록할 수 없습니다!')
|
||||
history.go(-1)
|
||||
</script>");
|
||||
$db->query("unlock tables");
|
||||
exit;
|
||||
}
|
||||
if (mb_strlen($name) < 1) {
|
||||
@@ -101,6 +106,7 @@ if (mb_strlen($name) < 1) {
|
||||
window.alert('이름이 짧습니다. 다시 가입해주세요!')
|
||||
history.go(-1)
|
||||
</script>");
|
||||
$db->query("unlock tables");
|
||||
exit;
|
||||
}
|
||||
if (mb_strlen($name) > 9) {
|
||||
@@ -108,6 +114,7 @@ if (mb_strlen($name) > 9) {
|
||||
window.alert('이름이 유효하지 않습니다. 다시 가입해주세요!')
|
||||
history.go(-1)
|
||||
</script>");
|
||||
$db->query("unlock tables");
|
||||
exit;
|
||||
}
|
||||
if ($leader + $power + $intel > GameConst::$defaultStatTotal) {
|
||||
@@ -115,6 +122,7 @@ if ($leader + $power + $intel > GameConst::$defaultStatTotal) {
|
||||
window.alert('능력치가 ".GameConst::$defaultStatTotal."을 넘어섰습니다. 다시 가입해주세요!')
|
||||
history.go(-1)
|
||||
</script>");
|
||||
$db->query("unlock tables");
|
||||
exit;
|
||||
}
|
||||
|
||||
@@ -189,8 +197,8 @@ else{
|
||||
|
||||
$turntime = getRandTurn($admin['turnterm'], new \DateTimeImmutable($admin['turntime']));
|
||||
|
||||
$lastconnect = date('Y-m-d H:i:s');
|
||||
if ($lastconnect >= $turntime) {
|
||||
$now = date('Y-m-d H:i:s');
|
||||
if ($now >= $turntime) {
|
||||
$turntime = addTurn($turntime, $admin['turnterm']);
|
||||
}
|
||||
|
||||
@@ -233,7 +241,8 @@ $db->insert('general', [
|
||||
'level' => 0,
|
||||
'turntime' => $turntime,
|
||||
'killturn' => 6,
|
||||
'lastconnect' => $lastconnect,
|
||||
'lastconnect' => $now,
|
||||
'lastrefresh' => $now,
|
||||
'crewtype'=>GameUnitConst::DEFAULT_CREWTYPE,
|
||||
'makelimit' => 0,
|
||||
'age' => $age,
|
||||
@@ -246,6 +255,8 @@ $db->insert('general', [
|
||||
]);
|
||||
$generalID = $db->insertId();
|
||||
|
||||
$db->query("unlock tables");
|
||||
|
||||
$cityname = CityConst::byID($city)->name;
|
||||
|
||||
$me = [
|
||||
|
||||
+71
-8
@@ -28,7 +28,7 @@ function refreshing(obj, arg1, arg2) {
|
||||
switch(arg1) {
|
||||
case 0: document.location.reload(); break;
|
||||
case 2: turn(arg2); break;
|
||||
case 3: arg2.submit(); break;
|
||||
case 3: $(arg2).submit(); break;
|
||||
case 4:
|
||||
arg2.submit();
|
||||
message.msg.value = "";
|
||||
@@ -39,14 +39,48 @@ function refreshing(obj, arg1, arg2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
function moveProcessing(commandtype, turn){
|
||||
console.log(commandtype, turn);
|
||||
$.redirect("processing.php",{ commandtype: commandtype, turn: turn}, 'post');
|
||||
function turn(type) {
|
||||
$.post({
|
||||
url:'j_turn.php',
|
||||
dataType:'json',
|
||||
data:{
|
||||
type:type,
|
||||
sel:form2.sel.value
|
||||
}
|
||||
}).then(function(data){
|
||||
if(!data.result){
|
||||
alert(data.reason);
|
||||
}
|
||||
reloadCommandList();
|
||||
});
|
||||
}
|
||||
|
||||
function turn(type) {
|
||||
num = form2.sel.value;
|
||||
commandlist.location.replace('turn.php?type=' + type + '&sel=' + num);
|
||||
function reloadCommandList(){
|
||||
$.get({
|
||||
url:'commandlist.php',
|
||||
cache: false,
|
||||
}).then(function(rdata){
|
||||
$('#commandlist').html(rdata);
|
||||
});
|
||||
}
|
||||
|
||||
function myclock() {
|
||||
|
||||
var $clock = $('#clock');
|
||||
var now_clock = moment();
|
||||
|
||||
if(!$clock.attr('data-time-diff')){
|
||||
var base_clock = moment($clock.attr('data-server-time'));
|
||||
$clock.attr('data-time-diff', base_clock.diff(now_clock));
|
||||
}
|
||||
|
||||
var game_clock = now_clock.add(parseInt($clock.attr('data-time-diff')), 'milliseconds');
|
||||
|
||||
$('#clock').val(game_clock.format('YYYY-MM-DD HH:mm:ss'));
|
||||
|
||||
window.setTimeout(function(){
|
||||
myclock();
|
||||
}, 500);
|
||||
}
|
||||
|
||||
jQuery(function($){
|
||||
@@ -54,11 +88,40 @@ jQuery(function($){
|
||||
var $this = $(this);
|
||||
var target = $('[name="genlist"]').val();
|
||||
var msg = $('#msg').val();
|
||||
console.log(target, msg);
|
||||
return false;
|
||||
});
|
||||
|
||||
$('#mainBtnSubmit').click(function(){
|
||||
|
||||
});
|
||||
|
||||
$('#form2').submit(function(){
|
||||
var values = $(this).serializeArray();
|
||||
console.log(values);
|
||||
$.post({
|
||||
url:'j_preprocessing.php',
|
||||
dataType:'json',
|
||||
data:values
|
||||
}).then(function(data){
|
||||
if(!data.result){
|
||||
alert(data.reason);
|
||||
reloadCommandList();
|
||||
return;
|
||||
}
|
||||
|
||||
if(!data.nextPage){
|
||||
reloadCommandList();
|
||||
return;
|
||||
}
|
||||
|
||||
document.location = data.nextPage;
|
||||
return;
|
||||
}, function(){
|
||||
alert('알 수 없는 에러');
|
||||
location.reload();
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
myclock();
|
||||
});
|
||||
@@ -237,7 +237,7 @@ class ResetHelper{
|
||||
'msg'=>'공지사항',//TODO:공지사항
|
||||
'maxgeneral'=>GameConst::$defaultMaxGeneral,
|
||||
'maxnation'=>GameConst::$defaultMaxNation,
|
||||
'conlimit'=>300,
|
||||
'conlimit'=>30000,
|
||||
'gold_rate'=>100,
|
||||
'rice_rate'=>100,
|
||||
'develcost'=>$develcost,
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
//로그인 검사
|
||||
|
||||
$type = Util::getReq('type', 'int', 0);
|
||||
$sel = Util::getReq('sel', 'int', 1);
|
||||
|
||||
if($sel <= 0 || $sel > 12){
|
||||
$sel = 1;
|
||||
}
|
||||
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
$connect=$db->get();
|
||||
|
||||
increaseRefresh("턴반복", 1);
|
||||
|
||||
$myActionCnt = $db->queryFirstField('SELECT con FROM general WHERE `owner`=%i', $userID);
|
||||
|
||||
$con = checkLimit($myActionCnt);
|
||||
if($con >= 2) {
|
||||
header('location:commandlist.php', true, 303);
|
||||
exit();
|
||||
}
|
||||
|
||||
switch($type) {
|
||||
case 0://반복
|
||||
$valueMap = [];
|
||||
foreach(range($sel, GameConst::$maxTurn - 1) as $idx){
|
||||
$src = $idx % $sel;
|
||||
$valueMap['turn'.$idx] = $db->sqleval('%b', 'turn'.$src);
|
||||
}
|
||||
$db->update('general', $valueMap, 'owner=%i', $userID);
|
||||
break;
|
||||
case 1:
|
||||
$valueMap = [];
|
||||
foreach(range(GameConst::$maxTurn -1, $sel, -1) as $idx){
|
||||
$src = $idx - $sel;
|
||||
$valueMap['turn'.$idx] = $db->sqleval('%b', 'turn'.$src);
|
||||
}
|
||||
foreach(range($sel -1, 0, -1) as $idx){
|
||||
$valueMap['turn'.$idx] = EncodeCommand(0, 0, 0, 0);
|
||||
}
|
||||
$db->update('general', $valueMap, 'owner=%i', $userID);
|
||||
break;
|
||||
case 2:
|
||||
$valueMap = [];
|
||||
foreach(range(0, GameConst::$maxTurn - $sel - 1) as $idx){
|
||||
$src = $idx + $sel;
|
||||
$valueMap['turn'.$idx] = $db->sqleval('%b', 'turn'.$src);
|
||||
}
|
||||
foreach(range(GameConst::$maxTurn - $sel, GameConst::$maxTurn - 1) as $idx){
|
||||
$valueMap['turn'.$idx] = EncodeCommand(0, 0, 0, 0);
|
||||
}
|
||||
$db->update('general', $valueMap, 'owner=%i', $userID);
|
||||
break;
|
||||
}
|
||||
|
||||
header('location:commandlist.php', true, 303);
|
||||
@@ -32,6 +32,7 @@ $acl = $session->acl;
|
||||
<!-- 액션 -->
|
||||
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
|
||||
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
|
||||
<?=WebUtil::printJS('../e_lib/moment.min.js')?>
|
||||
<?=WebUtil::printJS('../js/common.js')?>
|
||||
<?=WebUtil::printJS('../js/func.js')?>
|
||||
<?=WebUtil::printJS('../js/entrance.js')?>
|
||||
|
||||
+31
-7
@@ -12,7 +12,17 @@ var serverListTemplate = "\
|
||||
var serverTextInfo = "\
|
||||
<td>\
|
||||
서기 <%year%>년 <%month%>월 (<span style='color:orange;'><%scenario%></span>)<br>\
|
||||
유저 : <%userCnt%> / <%maxUserCnt%>명 <span style='color:cyan;'>NPC : <%npcCnt%>명</span> (<span style='color:limegreen;'><%turnTerm%>분 턴 서버</span>)\
|
||||
유저 : <%userCnt%> / <%maxUserCnt%>명 <span style='color:cyan;'>NPC : <%npcCnt%>명</span> (<span style='color:limegreen;'><%turnTerm%>분 턴 서버</span>)<br>\
|
||||
(상성 설정:<%fictionMode%>), (기타 설정:<%otherTextInfo%>)\
|
||||
</td>\
|
||||
";
|
||||
|
||||
var serverProvisionalInfo = "\
|
||||
<td>\
|
||||
- 오픈 일시 : <%opentime%> -<br>\
|
||||
서기 <%year%>년 <%month%>월 (<span style='color:orange;'><%scenario%></span>)<br>\
|
||||
유저 : <%userCnt%> / <%maxUserCnt%>명 <span style='color:cyan;'>NPC : <%npcCnt%>명</span> (<span style='color:limegreen;'><%turnTerm%>분 턴 서버</span>)<br>\
|
||||
(상성 설정:<%fictionMode%>), (기타 설정:<%otherTextInfo%>)\
|
||||
</td>\
|
||||
";
|
||||
|
||||
@@ -49,7 +59,8 @@ var serverReservedTemplate = "\
|
||||
<%openDatetime==starttime?'':'- 가오픈 일시 : '+openDatetime+ '- <br>'%>\
|
||||
- 오픈 일시 : <%starttime%> - <br>\
|
||||
<span style='color:orange;'><%scenarioName%></span> <span style='color:limegreen;'><%turnterm%>분 턴 서버</span><br>\
|
||||
(상성 설정:<%fictionMode%>), (빙의 여부:<%npcMode%>), (최대 스탯:<%gameConf.defaultStatTotal%>), (기타 설정:<%otherTextInfo%>)</td>\
|
||||
(상성 설정:<%fictionMode%>), (빙의 여부:<%npcMode%>), (최대 스탯:<%gameConf.defaultStatTotal%>), (기타 설정:<%otherTextInfo%>)\
|
||||
</td>\
|
||||
";
|
||||
|
||||
$(function(){
|
||||
@@ -71,6 +82,7 @@ function Entrance_UpdateServer() {
|
||||
|
||||
function Entrance_drawServerList(serverInfos){
|
||||
var $serverList = $('#server_list');
|
||||
var now = moment().format('YYYY-MM-DD HH:mm:ss');
|
||||
$.each(serverInfos, function(idx, serverInfo){
|
||||
var $serverHtml = $(TemplateEngine(serverListTemplate, serverInfo));
|
||||
$serverList.append($serverHtml);
|
||||
@@ -104,14 +116,26 @@ function Entrance_drawServerList(serverInfos){
|
||||
$serverHtml.find('.n_country').html('§천하통일§');
|
||||
$serverHtml.find('.server_date').html('{0} <br>~ {1}'.format(game.starttime, game.turntime));
|
||||
}
|
||||
else{
|
||||
else if(game.opentime <= now){
|
||||
$serverHtml.find('.n_country').html('<{0}국 경쟁중>'.format(game.nationCnt));
|
||||
$serverHtml.find('.server_date').html('{0} ~'.format(game.starttime));
|
||||
}
|
||||
else{
|
||||
$serverHtml.find('.n_country').html('-가오픈 중-');
|
||||
$serverHtml.find('.server_date').html('{0} ~'.format(game.starttime));
|
||||
}
|
||||
|
||||
$serverHtml.append(
|
||||
TemplateEngine(serverTextInfo, game)
|
||||
);
|
||||
if(game.opentime <= now){
|
||||
$serverHtml.append(
|
||||
TemplateEngine(serverTextInfo, game)
|
||||
);
|
||||
}
|
||||
else{
|
||||
$serverHtml.append(
|
||||
TemplateEngine(serverProvisionalInfo, game)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
if(result.me && result.me.name){
|
||||
var me = result.me;
|
||||
@@ -125,7 +149,7 @@ function Entrance_drawServerList(serverInfos){
|
||||
TemplateEngine(serverFullTemplate, {})
|
||||
);
|
||||
}
|
||||
else if(game.npcMode == 1){
|
||||
else if(game.npcMode == '가능'){
|
||||
$serverHtml.append(
|
||||
TemplateEngine(serverCreateAndSelectTemplate, {serverPath:serverPath})
|
||||
).addClass('server_create_and_select');
|
||||
|
||||
Reference in New Issue
Block a user