발령,몰수,포상 활성화, 사령턴 턴 입력 활성화

This commit is contained in:
2020-03-07 19:52:33 +09:00
parent 28c3ebb5f9
commit 29c7e3696a
10 changed files with 241 additions and 108 deletions
+7 -6
View File
@@ -6,7 +6,7 @@ include "func.php";
//로그인 검사
$session = Session::requireGameLogin()->setReadOnly();
$userID = Session::getUserID();
$generalObj = General::createGeneralObjFromDB($session->generalID);
?>
<!DOCTYPE html>
<html>
@@ -17,6 +17,7 @@ $userID = Session::getUserID();
<title><?=UniqueConst::$serverName?>: 사령부</title>
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
<?=WebUtil::printJS('../e_lib/jquery.redirect.js')?>
<?=WebUtil::printJS('../e_lib/moment.min.js')?>
<?=WebUtil::printJS('js/common.js')?>
<?=WebUtil::printJS('js/chiefCenter.js')?>
@@ -47,8 +48,8 @@ var maxChiefTurn = <?=GameConst::$maxChiefTurn?>;
><div class='bg1 chiefNamePlate'><span class='chiefLevelText'>-</span> : <span class='chiefName'>&nbsp;</span></div
<?php foreach(range(1, GameConst::$maxChiefTurn) as $turnIdx): ?>
><div class='chiefTurnBox turn<?=$turnIdx?>'
><div class='chiefTurnTime level<?=$chiefIdx?>'>&nbsp;</div
><div class='chiefTurnText level<?=$chiefIdx?>'>&nbsp;</div
><div class='chiefTurnTime'>&nbsp;</div
><div class='chiefTurnText'>&nbsp;</div
></div
<?php endforeach; ?>
></div
@@ -70,7 +71,7 @@ var maxChiefTurn = <?=GameConst::$maxChiefTurn?>;
><input type='button' id='turnPull' style='visibility:hidden;background-color:<?=GameConst::$basecolor2?>;color:white;font-size:13px;' value='▲당기기' onclick='turn(1)'
></div
><div
><?=chiefCommandTable()
><?=chiefCommandTable($generalObj)
?><input type='button' id='setCommand' style='visibility:hidden;background-color:<?=GameConst::$basecolor2?>;color:white;font-size:13px;' value='실 행'
></div
></div
@@ -87,8 +88,8 @@ var maxChiefTurn = <?=GameConst::$maxChiefTurn?>;
><div class='bg1 chiefNamePlate'><span class='chiefLevelText'>-</span> : <span class='chiefName'>&nbsp;</span></div
<?php foreach(range(1, GameConst::$maxChiefTurn) as $turnIdx): ?>
><div class='chiefTurnBox turn<?=$turnIdx?>'
><div class='chiefTurnTime level<?=$chiefIdx?>'>&nbsp;</div
><div class='chiefTurnText level<?=$chiefIdx?>'>&nbsp;</div
><div class='chiefTurnTime'>&nbsp;</div
><div class='chiefTurnText'>&nbsp;</div
></div
<?php endforeach; ?>
></div
+54 -1
View File
@@ -472,7 +472,60 @@ function printCommandTable(General $generalObj) {
<?php
}
function chiefCommandTable() {
function chiefCommandTable(General $generalObj) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$userID = Session::getUserID();
$gameStor->turnOnCache();
$env = $gameStor->getAll();
?>
<select id='chiefCommandList' name='commandtype' size=1 style='height:20px;color:white;background-color:black;font-size:13px;display:inline-block;'>";
<?php
//보정(Pros,Cons) 여부.
$getCompensateClassName = function($value){
if($value > 0){
return 'compensatePositive';
}
else if($value < 0){
return 'compensateNegative';
}
return 'compensateNeutral';
};
foreach(GameConst::$availableChiefCommand as $commandCategory => $commandList){
if($commandCategory){
commandGroup("======= {$commandCategory} =======");
}
foreach($commandList as $commandClassName){
$commandObj = buildNationCommandClass($commandClassName, $generalObj, $env, new LastTurn());
if(!$commandObj->canDisplay()){
continue;
}
?>
<option
class='commandBasic <?=$getCompensateClassName($commandObj->getCompensationStyle())?> <?=$commandObj->isReservable()?'':'commandImpossible'?>'
value='<?=Util::getClassNameFromObj($commandObj)?>'
data-reqArg='<?=($commandObj::$reqArg)?'true':'false'?>'
><?=$commandObj->getCommandDetailTitle()?><?=$commandObj->isReservable()?'':'(불가)'?></option>
<?php
}
if($commandCategory){
commandGroup('', 1);
}
}
?>
</select>
<?php
}
function chiefCommandTable_old() {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$userID = Session::getUserID();
+5 -5
View File
@@ -57,18 +57,18 @@ $nationTurnList = [];
foreach(
$db->queryAllLists(
'SELECT level, turn_idx, action, arg FROM nation_turn WHERE nation_id = %i ORDER BY level DESC, turn_idx ASC',
'SELECT level, turn_idx, action, arg, brief FROM nation_turn WHERE nation_id = %i ORDER BY level DESC, turn_idx ASC',
$me['nation']
) as [$level, $turn_idx, $action, $arg]
) as [$level, $turn_idx, $action, $arg, $brief]
){
if(!key_exists($level, $nationTurnList)){
$nationTurnList[$level] = [];
}
$nationTurnList[$level][$turn_idx] = [$action, Json::decode($arg)];
$nationTurnList[$level][$turn_idx] = $brief;
}
$nationTurnBrief = [];
foreach($nationTurnList as $level=>$turnList){
foreach($nationTurnList as $level=>$turnBrief){
if(!key_exists($level, $generals)){
$general = Util::array_first($generals);
}
@@ -80,7 +80,7 @@ foreach($nationTurnList as $level=>$turnList){
'turnTime'=>$general->getTurnTime($general::TURNTIME_FULL),
'levelText'=>getLevelText($general->getVar('level'), $nationLevel),
'npcType'=>$general->getVar('npc'),
'turn'=>getNationTurnBrief($general, $turnList)
'turn'=>$turnBrief
];
}
@@ -11,26 +11,41 @@ $generalID = $session->generalID;
$action = Util::getReq('action', 'string');
$arg = Json::decode(Util::getReq('arg', 'string'));
$turnList = Json::decode(Util::getReq('turnList', 'string'));
$turnList = Util::getReq('turnList', 'array_int');
if(!is_array($turnList) || !$turnList){
Json::die([
'result'=>false,
'reason'=>'턴이 입력되지 않았습니다.'
'reason'=>'턴이 입력되지 않았습니다.',
'test'=>'post',
]);
}
if(!$action){
Json::die([
'result'=>false,
'reason'=>'action이 입력되지 않았습니다.'
'reason'=>'action이 입력되지 않았습니다.',
'test'=>'post'
]);
}
if($arg === null || !is_array($arg)){
if(!in_array($action, Util::array_flatten(GameConst::$availableChiefCommand))){
Json::die([
'result'=>false,
'reason'=>'올바른 arg 형태가 아닙니다.'
'reason'=>'사용할 수 없는 커맨드입니다.',
'test'=>'post'
]);
}
if($arg === null){
$arg = [];
}
if(!is_array($arg)){
Json::die([
'result'=>false,
'reason'=>'올바른 arg 형태가 아닙니다.',
'test'=>'post'
]);
}
+1 -1
View File
@@ -16,7 +16,7 @@ if(!is_array($turnList) || !$turnList){
Json::die([
'result'=>false,
'reason'=>'턴이 입력되지 않았습니다.',
'test'=>'post'
'test'=>'post',
]);
}
+37 -3
View File
@@ -94,9 +94,43 @@ function reloadTable(){
}, errUnknown);
}
function reserveTurn(turnList, command){
console.log(turnList, command);
$.post({
url:'j_set_chief_command.php',
dataType:'json',
data:{
action:command,
turnList:turnList
}
}).then(function(data){
if(!data.result){
alert(data.reason);
}
reloadTable();
}, errUnknown);
}
jQuery(function($){
chiefTableObj= genChiefTableObj();
$('#reloadTable').click(reloadTable);
reloadTable();
chiefTableObj= genChiefTableObj();
reloadTable();
$('#reloadTable').click(reloadTable);
$('#setCommand').click(function(){
var turnList = $('#chiefTurnSelector').val().map(function(v){return parseInt(v);});
var $command = $('#chiefCommandList option:selected');
if($command.data('reqarg')){
$.redirect(
"b_processing.php", {
command: $command.val(),
turnList: turnList.join('_'),
is_chief: true
}, "GET");
}
else{
reserveTurn(turnList, $command.val());
}
return false;
});
})
+9 -3
View File
@@ -1,6 +1,13 @@
function reserveTurn(turnList, command, arg){
var target;
if(isChiefTurn){
target = 'j_set_chief_command.php';
}
else{
target = 'j_set_general_command.php';
}
$.post({
url:'j_set_general_command.php',
url:target,
dataType:'json',
data:{
action:command,
@@ -35,8 +42,7 @@ window.submitAction = function(){
'int':[
'crewType', 'destGeneralID', 'destCityID', 'destNationID',
'amount', 'colorType',
'month',
'year', 'destGeneralID', 'destCityID', 'destNationID', 'amount', 'crewType',
'year', 'month',
],
'boolean':[
'isGold', 'buyRice',
+39 -34
View File
@@ -101,6 +101,16 @@ class che_몰수 extends Command\NationCommand{
return 0;
}
public function getBrief():string{
$isGold = $this->arg['isGold'];
$amount = $this->arg['amount'];
$amountText = number_format($amount, 0);
$resName = $isGold?'금':'쌀';
$destGeneral = $this->destGeneralObj;
$commandName = $this->getName();
return "{$destGeneral->getName()}{$resName} $amountText {$commandName}";
}
public function run():bool{
if(!$this->isRunnable()){
@@ -174,14 +184,9 @@ class che_몰수 extends Command\NationCommand{
{
//TODO: 암행부처럼 보여야...
$db = DB::db();
$form = [];
$form[] = <<<EOT
장수의 자금이나 군량을 몰수합니다.<br>
몰수한것은 국가재산으로 귀속됩니다.<br>
<select class='formInput' name="destGeneralID" id="destGeneralID" size='1' style='color:white;background-color:black;'>
EOT;
$destRawGenerals = $db->query('SELECT no,name,level,npc,gold,rice FROM general WHERE nation = %i AND no != %i ORDER BY npc,binary(name)',$this->generalObj->getNationID(), $this->generalObj->getID());
$destGeneralList = [];
foreach($destRawGenerals as $destGeneral){
$nameColor = \sammo\getNameColor($destGeneral['npc']);
if($nameColor){
@@ -193,9 +198,28 @@ EOT;
$name = "*{$name}*";
}
$form[] = "<option value='{$destGeneral['no']}' {$nameColor}>{$name}(금:{$destGeneral['gold']}, 쌀:{$destGeneral['rice']})</option>";
$destGeneralList[] = [
'no'=>$destGeneral['no'],
'color'=>$nameColor,
'name'=>$name,
'gold'=>$destGeneral['gold'],
'rice'=>$destGeneral['rice']
];
}
$form[] = <<<EOT
$amountList = [
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
12, 15, 20, 25,
30, 40, 50, 60, 70, 80, 90, 100
];
ob_start();
?>
장수의 자금이나 군량을 몰수합니다.<br>
몰수한것은 국가재산으로 귀속됩니다.<br>
<select class='formInput' name="destGeneralID" id="destGeneralID" size='1' style='color:white;background-color:black;'>
<?php foreach($destGeneralList as $destGeneral): ?>
<option value='<?=$destGeneral['no']?>' <?=$destGeneral['color']?>><?=$destGeneral['name']?>(금:<?=$destGeneral['gold']?>, 쌀:<?=$destGeneral['rice']?>)</option>
<?php endforeach; ?>
</select>
<select class='formInput' name="isGold" id="isGold" size='1' style='color:white;background-color:black;'>
<option value="true">금</option>
@@ -203,31 +227,12 @@ EOT;
</select>
</select>
<select class='formInput' name="amount" id="amount" size='1' style='color:white;background-color:black;'>
<option value=1>100</option>
<option value=2>200</option>
<option value=3>300</option>
<option value=4>400</option>
<option value=5>500</option>
<option value=6>600</option>
<option value=7>700</option>
<option value=8>800</option>
<option value=9>900</option>
<option value=10>1000</option>
<option value=12>1200</option>
<option value=15>1500</option>
<option value=20>2000</option>
<option value=25>2500</option>
<option value=30>3000</option>
<option value=40>4000</option>
<option value=50>5000</option>
<option value=60>6000</option>
<option value=70>7000</option>
<option value=80>8000</option>
<option value=90>9000</option>
<option value=100>10000</option>
</select>
<input type="submit" value="몰수">
EOT;
return join("\n",$form);
<?php foreach($amountList as $amount): ?>
<option value='<?=$amount?>'><?=$amount?>00</option>
<?php endforeach; ?>
</select> <input type=button id="commonSubmit" value="<?=$this->getName()?>"><br>
<br>
<?php
return ob_get_clean();
}
}
+31 -17
View File
@@ -94,6 +94,14 @@ class che_발령 extends Command\NationCommand{
return 0;
}
public function getBrief():string{
$commandName = $this->getName();
$destGeneralName = $this->destGeneralObj->getName();
$destCityName = CityConst::byID($this->arg['destCityID'])->name;
$josaRo = JosaUtil::pick($destCityName, '로');
return "{$destGeneralName}】【{$destCityName}{$josaRo} {$commandName}";
}
public function run():bool{
if(!$this->isRunnable()){
@@ -138,18 +146,10 @@ class che_발령 extends Command\NationCommand{
public function getForm(): string
{
$form = [];
$form[] = \sammo\getMapHtml();
$db = DB::db();
$form[] = <<<EOT
선택된 도시로 아국 장수를 발령합니다.<br>
아국 도시로만 발령이 가능합니다.<br>
목록을 선택하거나 도시를 클릭하세요.<br>
<select class='formInput' name="destGeneralID" id="destGeneralID" size='1' style='color:white;background-color:black;'>
EOT;
$destRawGenerals = $db->query('SELECT no,name,level,npc,gold,rice FROM general WHERE nation = %i AND no != %i ORDER BY npc,binary(name)',$this->generalObj->getNationID(), $this->generalObj->getID());
$destGeneralList = [];
foreach($destRawGenerals as $destGeneral){
$nameColor = \sammo\getNameColor($destGeneral['npc']);
if($nameColor){
@@ -161,16 +161,30 @@ EOT;
$name = "*{$name}*";
}
$form[] = "<option value='{$destGeneral['no']}' {$nameColor}>{$name}(금:{$destGeneral['gold']}, 쌀:{$destGeneral['rice']})</option>";
$destGeneralList[] = [
'no'=>$destGeneral['no'],
'color'=>$nameColor,
'name'=>$name,
'gold'=>$destGeneral['gold'],
'rice'=>$destGeneral['rice']
];
}
$form[] = <<<EOT
ob_start();
?>
<?=\sammo\getMapHtml()?><br>
선택된 도시로 아국 장수를 발령합니다.<br>
아국 도시로만 발령이 가능합니다.<br>
목록을 선택하거나 도시를 클릭하세요.<br>
<select class='formInput' name="destGeneralID" id="destGeneralID" size='1' style='color:white;background-color:black;'>
<?php foreach($destGeneralList as $destGeneral): ?>
<option value='<?=$destGeneral['no']?>' <?=$destGeneral['color']?>><?=$destGeneral['name']?>(금:<?=$destGeneral['gold']?>, 쌀:<?=$destGeneral['rice']?>)</option>
<?php endforeach; ?>
</select>
<select class='formInput' name="destCityID" id="destCityID" size='1' style='color:white;background-color:black;'>
EOT;
$form[] = \sammo\optionsForCities();
$form[] = '</select>';
$form[] = '<input type=submit value="발령">';
return join("\n",$form);
<?=\sammo\optionsForCities()?><br>
</select> <input type=button id="commonSubmit" value="<?=$this->getName()?>"><br>
<br>
<?php
return ob_get_clean();
}
}
+38 -33
View File
@@ -99,6 +99,16 @@ class che_포상 extends Command\NationCommand{
return 0;
}
public function getBrief():string{
$isGold = $this->arg['isGold'];
$amount = $this->arg['amount'];
$amountText = number_format($amount, 0);
$resName = $isGold?'금':'쌀';
$destGeneral = $this->destGeneralObj;
$commandName = $this->getName();
return "{$destGeneral->getName()}{$resName} $amountText {$commandName}";
}
public function run():bool{
if(!$this->isRunnable()){
@@ -148,13 +158,9 @@ class che_포상 extends Command\NationCommand{
{
//TODO: 암행부처럼 보여야...
$db = DB::db();
$form = [];
$form[] = <<<EOT
국고로 장수에게 자금이나 군량을 지급합니다.
<select class='formInput' name="destGeneralID" id="destGeneralID" size='1' style='color:white;background-color:black;'>
EOT;
$destRawGenerals = $db->query('SELECT no,name,level,npc,gold,rice FROM general WHERE nation = %i AND no != %i ORDER BY npc,binary(name)',$this->generalObj->getNationID(), $this->generalObj->getID());
$destGeneralList = [];
foreach($destRawGenerals as $destGeneral){
$nameColor = \sammo\getNameColor($destGeneral['npc']);
if($nameColor){
@@ -166,9 +172,27 @@ EOT;
$name = "*{$name}*";
}
$form[] = "<option value='{$destGeneral['no']}' {$nameColor}>{$name}(금:{$destGeneral['gold']}, 쌀:{$destGeneral['rice']})</option>";
$destGeneralList[] = [
'no'=>$destGeneral['no'],
'color'=>$nameColor,
'name'=>$name,
'gold'=>$destGeneral['gold'],
'rice'=>$destGeneral['rice']
];
}
$form[] = <<<EOT
$amountList = [
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
12, 15, 20, 25,
30, 40, 50, 60, 70, 80, 90, 100
];
ob_start();
?>
국고로 장수에게 자금이나 군량을 지급합니다.<br>
<select class='formInput' name="destGeneralID" id="destGeneralID" size='1' style='color:white;background-color:black;'>
<?php foreach($destGeneralList as $destGeneral): ?>
<option value='<?=$destGeneral['no']?>' <?=$destGeneral['color']?>><?=$destGeneral['name']?>(금:<?=$destGeneral['gold']?>, 쌀:<?=$destGeneral['rice']?>)</option>
<?php endforeach; ?>
</select>
<select class='formInput' name="isGold" id="isGold" size='1' style='color:white;background-color:black;'>
<option value="true">금</option>
@@ -176,31 +200,12 @@ EOT;
</select>
</select>
<select class='formInput' name="amount" id="amount" size='1' style='color:white;background-color:black;'>
<option value=1>100</option>
<option value=2>200</option>
<option value=3>300</option>
<option value=4>400</option>
<option value=5>500</option>
<option value=6>600</option>
<option value=7>700</option>
<option value=8>800</option>
<option value=9>900</option>
<option value=10>1000</option>
<option value=12>1200</option>
<option value=15>1500</option>
<option value=20>2000</option>
<option value=25>2500</option>
<option value=30>3000</option>
<option value=40>4000</option>
<option value=50>5000</option>
<option value=60>6000</option>
<option value=70>7000</option>
<option value=80>8000</option>
<option value=90>9000</option>
<option value=100>10000</option>
</select>
<input type="submit" value="포상">
EOT;
return join("\n",$form);
<?php foreach($amountList as $amount): ?>
<option value='<?=$amount?>'><?=$amount?>00</option>
<?php endforeach; ?>
</select> <input type=button id="commonSubmit" value="<?=$this->getName()?>"><br>
<br>
<?php
return ob_get_clean();
}
}