전투 시뮬레이터 모두 저장/모두 불러오기 구현

This commit is contained in:
Hide_D committed 2018-08-27 03:08:35 +09:00
1 parent 44c59f2236
commit 434468ca65
5 files changed
+165 -11

No files matched your search

+1
View File
@@ -0,0 +1 @@
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){"use strict";var e,i;function c(){return e.apply(null,arguments)}function o(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function u(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function l(e){return void 0===e}function d(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function h(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function f(e,t){var n,s=[];for(n=0;n<e.length;++n)s.push(t(e[n],n));return s}function m(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function _(e,t){for(var n in t)m(t,n)&&(e[n]=t[n]);return m(t,"toString")&&(e.toString=t.toString),m(t,"valueOf")&&(e.valueOf=t.valueOf),e}function y(e,t,n,s){return Ot(e,t,n,s,!0).utc()}function g(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function p(e){if(null==e._isValid){var t=g(e),n=i.call(t.parsedDateParts,function(e){return null!=e}),s=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n);Line truncated
+7 -9
View File
@@ -24,6 +24,7 @@ $startYear = $gameStor->getValue('startyear');
<?=WebUtil::printCSS('css/battle_simulator.css')?> <?=WebUtil::printCSS('css/battle_simulator.css')?>
<?=WebUtil::printJS('../d_shared/common_path.js')?> <?=WebUtil::printJS('../d_shared/common_path.js')?>
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?> <?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
<?=WebUtil::printJS('../e_lib/moment.min.js')?>
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?> <?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
<?=WebUtil::printJS('../e_lib/download2.js')?> <?=WebUtil::printJS('../e_lib/download2.js')?>
<?=WebUtil::printJS('js/common.js')?> <?=WebUtil::printJS('js/common.js')?>
@@ -35,7 +36,7 @@ $startYear = $gameStor->getValue('startyear');
<div class="card-header"> <div class="card-header">
전역 설정 전역 설정
</div> </div>
<div class="card-body"> <div class="card-body dragpad_battle">
<div class="row"> <div class="row">
<div class="col-sm-6"> <div class="col-sm-6">
<div class="input-group"> <div class="input-group">
@@ -68,9 +69,9 @@ $startYear = $gameStor->getValue('startyear');
<button type="button" class="btn btn-danger btn-begin_battle">전투</button> <button type="button" class="btn btn-danger btn-begin_battle">전투</button>
</div> </div>
<div class="btn-group mr-2" role="group"> <div class="btn-group mr-2" role="group">
<button type="button" class="btn btn-info">모두 저장</button> <button type="button" class="btn btn-info btn-battle-save">모두 저장</button>
<input type="file" class="form_load_battle_file" style="display: none;" /> <input type="file" class="form_load_battle_file" style="display: none;" />
<button type="button" class="btn btn-primary">모두 불러오기</button> <button type="button" class="btn btn-primary btn-battle-load">모두 불러오기</button>
</div> </div>
</div> </div>
</div> </div>
@@ -83,7 +84,7 @@ $startYear = $gameStor->getValue('startyear');
<div class="card-header"> <div class="card-header">
출병국 설정 출병국 설정
</div> </div>
<div class="card-body nation_detail"> <div class="card-body nation_detail dragpad_battle">
<div class="input-group mb-1"> <div class="input-group mb-1">
<div class="input-group-prepend"> <div class="input-group-prepend">
<span class="input-group-text">국가 성향</span> <span class="input-group-text">국가 성향</span>
@@ -154,7 +155,7 @@ $startYear = $gameStor->getValue('startyear');
<div class="card-header"> <div class="card-header">
수비국 설정 수비국 설정
</div> </div>
<div class="card-body"> <div class="card-body dragpad_battle">
<div class="input-group mb-1"> <div class="input-group mb-1">
<div class="input-group-prepend"> <div class="input-group-prepend">
<span class="input-group-text">국가 성향</span> <span class="input-group-text">국가 성향</span>
@@ -220,10 +221,6 @@ $startYear = $gameStor->getValue('startyear');
<div class="btn-group btn-group-sm mr-2" role="group"> <div class="btn-group btn-group-sm mr-2" role="group">
<button type="button" class="btn btn-dark btn-reorder_defender">수비 순서대로 정렬</button> <button type="button" class="btn btn-dark btn-reorder_defender">수비 순서대로 정렬</button>
</div> </div>
<div class="btn-group btn-group-sm mr-2" role="group">
<input type="file" class="form_load_general_file" style="display: none;" />
<button type="button" class="btn btn-primary btn-general-load-new">불러오기</button>
</div>
<div class="btn-group btn-group-sm" role="group"> <div class="btn-group btn-group-sm" role="group">
<button type="button" class="btn btn-success add-defender">추가</button> <button type="button" class="btn btn-success add-defender">추가</button>
</div> </div>
@@ -367,6 +364,7 @@ $startYear = $gameStor->getValue('startyear');
<span class="input-group-text">전특</span> <span class="input-group-text">전특</span>
</div> </div>
<select class="custom-select form_general_special_war"> <select class="custom-select form_general_special_war">
<option value="0">-</option>
<?php foreach(SpecialityConst::WAR as $specialWarID => [$name,$buff,$cond]): ?> <?php foreach(SpecialityConst::WAR as $specialWarID => [$name,$buff,$cond]): ?>
<option value="<?=$specialWarID?>"><?=$name?></option> <option value="<?=$specialWarID?>"><?=$name?></option>
<?php endforeach; ?> <?php endforeach; ?>
+1 -1
View File
@@ -20,7 +20,6 @@ function NationCharCall($call) {
function getCharacterList(){ function getCharacterList(){
$infoText = [ $infoText = [
10=>['은둔', '명성 -10%, 계급 -10%, 사기 -5, 훈련 -5, 단련 성공률 +10%'],
9=>['안전', '사기 -5, 징·모병 비용 -20%'], 9=>['안전', '사기 -5, 징·모병 비용 -20%'],
8=>['유지', '훈련 -5, 징·모병 비용 -20%'], 8=>['유지', '훈련 -5, 징·모병 비용 -20%'],
7=>['재간', '명성 -10%, 징·모병 비용 -20%'], 7=>['재간', '명성 -10%, 징·모병 비용 -20%'],
@@ -31,6 +30,7 @@ function getCharacterList(){
2=>['의협', '사기 +5, 징·모병 비용 +20%'], 2=>['의협', '사기 +5, 징·모병 비용 +20%'],
1=>['대의', '명성 +10%, 훈련 -5'], 1=>['대의', '명성 +10%, 훈련 -5'],
0=>['왕좌', '명성 +10%, 사기 -5'], 0=>['왕좌', '명성 +10%, 사기 -5'],
10=>['은둔', '명성 -10%, 계급 -10%, 사기 -5, 훈련 -5, 단련 성공률 +10%'],
]; ];
return $infoText; return $infoText;
} }
+1 -1
View File
@@ -121,7 +121,7 @@ $generalCheck = [
], ],
'in'=>[ 'in'=>[
['personal', array_keys(getCharacterList())], ['personal', array_keys(getCharacterList())],
['special2', array_keys(SpecialityConst::WAR)], ['special2', array_merge(array_keys(SpecialityConst::WAR), [0])],
['crewtype', array_keys(GameUnitConst::all())], ['crewtype', array_keys(GameUnitConst::all())],
] ]
]; ];
+155
View File
@@ -89,6 +89,31 @@ jQuery(function($){
download(saveData, filename, 'application/json'); download(saveData, filename, 'application/json');
}); });
$('.btn-battle-load').click(function(){
var $file = $(this).prev();
$file[0].click();
})
$('.form_load_battle_file').on('change', function(e){
e.preventDefault();
var $this = $(this);
var files = e.target.files;
importBattleInfoByFile(files);
return false;
});
$('.btn-battle-save').click(function(){
var battleData = exportAllData();
var filename = "battle_{0}.json".format(moment().format('YYYYMMDD_hhmmss'));
var saveData = JSON.stringify({
objType:'battle',
data:battleData
}, null, 4);
download(saveData, filename, 'application/json');
})
var $generals = $('.general_detail'); var $generals = $('.general_detail');
$generals.bind('dragover dragleave', function(e) { $generals.bind('dragover dragleave', function(e) {
e.stopPropagation() e.stopPropagation()
@@ -104,6 +129,20 @@ jQuery(function($){
importGeneralInfoByFile(files, $card); importGeneralInfoByFile(files, $card);
return false; return false;
}); });
var $battlePad = $('.dragpad_battle');
$battlePad.bind('dragover dragleave', function(e) {
e.stopPropagation()
e.preventDefault()
})
$battlePad.bind('drop', function(e){
e.preventDefault();
var files = e.originalEvent.dataTransfer.files;
importBattleInfoByFile(files);
return false;
});
} }
var importGeneralInfo = function($general, data){ var importGeneralInfo = function($general, data){
@@ -193,6 +232,64 @@ jQuery(function($){
}; };
} }
var importBattleInfoByFile = function(files){
if(files === null){
alert('파일 에러!');
return false;
}
if(files.length < 1){
alert("파일 에러!");
return false;
}
var file = files[0];
if(file.size > 1024*1024){
alert('파일이 너무 큽니다!');
return false;
}
if(file.type === ''){
alert('폴더를 업로드할 수 없습니다!');
return false;
}
var reader = new FileReader();
reader.onload = function(){
var battleData = {};
try {
battleData = JSON.parse(reader.result);
} catch(e) {
alert('올바르지 않은 파일 형식입니다');
return false;
}
if(!('objType' in battleData)){
alert('파일 형식을 확인할 수 없습니다');
return false;
}
if(battleData.objType != 'battle'){
alert('전투 데이터가 아닙니다');
return false;
}
importBattleInfo(battleData.data);
return true;
};
try {
reader.readAsText(file);
}
catch(e) {
alert('파일을 읽는데 실패했습니다.');
return false;
}
return true;
}
var importGeneralInfoByFile = function(files, $card){ var importGeneralInfoByFile = function(files, $card){
if($card === undefined){ if($card === undefined){
$card = addDefender(); $card = addDefender();
@@ -234,6 +331,10 @@ jQuery(function($){
return false; return false;
} }
if(generalData.objType == 'battle'){
importBattleInfo(generalData.data);
return true;
}
if(generalData.objType != 'general'){ if(generalData.objType != 'general'){
alert('장수 데이터가 아닙니다'); alert('장수 데이터가 아닙니다');
return false; return false;
@@ -362,6 +463,60 @@ jQuery(function($){
importGeneralInfo(getGeneralDetail($newObj), generalData); importGeneralInfo(getGeneralDetail($newObj), generalData);
} }
var importBattleInfo = function(battleData){
$('.form_load_battle_file').val('');
console.log(battleData);
var $attackerNation = $('.attacker_nation');
var $defenderNation = $('.defender_nation');
var attackerGeneral = battleData.attackerGeneral;
var attackerCity = battleData.attackerCity;
var attackerNation = battleData.attackerNation;
var defenderGenerals = battleData.defenderGenerals;
var defenderCity = battleData.defenderCity;
var defenderNation = battleData.defenderNation;
$('#year').val(battleData.year);
$('#month').val(battleData.month);
$('#repeat_cnt').val(battleData.repeatCnt);
$('.delete-defender').click();
$attackerNation.find('.form_nation_type').val(attackerNation.type);
$attackerNation.find('.form_tech').val(Math.floor(attackerNation.tech/1000));
$attackerNation.find('.form_nation_level').val(attackerNation.level);
if(attackerNation.capital == 1){
$attackerNation.find('.form_is_capital:first').click();
}
else{
$attackerNation.find('.form_is_capital:last').click();
}
$attackerNation.find('.form_city_level').val(attackerCity.level);
importGeneralInfo($('.attacker_form'), attackerGeneral);
$defenderNation.find('.form_nation_type').val(defenderNation.type);
$defenderNation.find('.form_tech').val(Math.floor(defenderNation.tech/1000));
$defenderNation.find('.form_nation_level').val(defenderNation.level);
if(defenderNation.capital == 1){
$defenderNation.find('.form_is_capital:first').click();
}
else{
$defenderNation.find('.form_is_capital:last').click();
}
$defenderNation.find('.form_city_level').val(defenderCity.level);
$('#city_def').val(defenderCity.def);
$('#city_wall').val(defenderCity.wall);
$.each(defenderGenerals, function(idx, defenderGeneral){
var $card = addDefender();
importGeneralInfo($card, defenderGeneral);
});
}
var exportAllData = function(){ var exportAllData = function(){
var $attackerNation = $('.attacker_nation'); var $attackerNation = $('.attacker_nation');
var $defenderNation = $('.defender_nation'); var $defenderNation = $('.defender_nation');