forked from devsam/core
전투 시뮬레이터 장수 불러오기 완성
This commit is contained in:
+535
-480
@@ -1,481 +1,536 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
include "lib.php";
|
include "lib.php";
|
||||||
include "func.php";
|
include "func.php";
|
||||||
|
|
||||||
$session = Session::requireLogin()->setReadOnly();
|
$session = Session::requireLogin()->setReadOnly();
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
|
|
||||||
$startYear = $gameStor->getValue('startyear');
|
$gameStor->cacheValues(['startyear', 'year']);
|
||||||
|
$startYear = $gameStor->startyear;
|
||||||
?>
|
$year = $gameStor->year;
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
$me = $db->queryFirstRow('SELECT no, nation, city FROM general WHERE owner =%i', Session::getUserID());
|
||||||
<head>
|
|
||||||
<title><?=UniqueConst::$serverName?>: 전투 시뮬레이터</title>
|
if($me){
|
||||||
<meta charset="UTF-8">
|
$generalID = $me['no'];
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
$nationID = $me['nation'];
|
||||||
<meta name="viewport" content="width=1100" />
|
$city = $db->queryFirstRow('SELECT city, level, def, wall FROM city WHERE city = %i', $me['city']);
|
||||||
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
|
}
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
else{
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
$generalID = 0;
|
||||||
<?=WebUtil::printCSS('css/battle_simulator.css')?>
|
$nationID = 0;
|
||||||
<?=WebUtil::printJS('../d_shared/common_path.js')?>
|
$city = [
|
||||||
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
|
'city'=>0,
|
||||||
<?=WebUtil::printJS('../e_lib/moment.min.js')?>
|
'level'=>5,
|
||||||
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
|
'def'=>1000,
|
||||||
<?=WebUtil::printJS('../e_lib/download2.js')?>
|
'wall'=>1000,
|
||||||
<?=WebUtil::printJS('js/common.js')?>
|
];
|
||||||
<script>
|
}
|
||||||
var defaultSpecialDomestic = '<?=GameConst::$defaultSpecialDomestic?>';
|
|
||||||
</script>
|
if($nationID){
|
||||||
<?=WebUtil::printJS('js/battle_simulator.js')?>
|
$nation = $db->queryFirstRow('SELECT level, type, tech, capital FROM nation WHERE nation = %i', $nationID);
|
||||||
</head>
|
}
|
||||||
<body>
|
else{
|
||||||
<div id="container">
|
$nation = null;
|
||||||
<div class="card mb-3">
|
}
|
||||||
<div class="card-header">
|
|
||||||
전역 설정
|
?>
|
||||||
</div>
|
<!DOCTYPE html>
|
||||||
<div class="card-body dragpad_battle">
|
<html>
|
||||||
<div class="row">
|
<head>
|
||||||
<div class="col-sm-6">
|
<title><?=UniqueConst::$serverName?>: 전투 시뮬레이터</title>
|
||||||
<div class="input-group">
|
<meta charset="UTF-8">
|
||||||
<input type="number" class="form-control" aria-describedby="text_year" value="<?=$startYear?>" disabled>
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<div class="input-group-append">
|
<meta name="viewport" content="width=1100" />
|
||||||
<span class="input-group-text">년 시작</span>
|
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
|
||||||
</div>
|
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
||||||
<input type="number" class="form-control" id="year" value="<?=$startYear+3?>" min="<?=$startYear?>">
|
<?=WebUtil::printCSS('css/common.css')?>
|
||||||
<div class="input-group-append">
|
<?=WebUtil::printCSS('css/battle_simulator.css')?>
|
||||||
<span class="input-group-text">년</span>
|
<?=WebUtil::printJS('../d_shared/common_path.js')?>
|
||||||
</div>
|
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
|
||||||
<input type="number" class="form-control" id="month" value="1" min="1" max="12">
|
<?=WebUtil::printJS('../e_lib/moment.min.js')?>
|
||||||
<div class="input-group-append">
|
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
|
||||||
<span class="input-group-text">월</span>
|
<?=WebUtil::printJS('../e_lib/download2.js')?>
|
||||||
</div>
|
<?=WebUtil::printJS('js/common.js')?>
|
||||||
</div>
|
<script>
|
||||||
</div>
|
var defaultSpecialDomestic = '<?=GameConst::$defaultSpecialDomestic?>';
|
||||||
<div class="col-sm-6">
|
var city = <?=Json::encode($city)?>;
|
||||||
<div class="btn-toolbar" role="toolbar">
|
var nation = <?=Json::encode($nation)?>;
|
||||||
<div class="input-group mr-2" role="group">
|
</script>
|
||||||
<div class="input-group-prepend">
|
<?=WebUtil::printJS('js/battle_simulator.js')?>
|
||||||
<span class="input-group-text">반복 횟수</span>
|
</head>
|
||||||
</div>
|
<body>
|
||||||
<select class="custom-select" id="repeat_cnt">
|
<div id="container">
|
||||||
<option value="1">1회 (로그 표기)</option>
|
<div class="card mb-3">
|
||||||
<option value="1000">1000회 (요약 표기)</option>
|
<div class="card-header">
|
||||||
</select>
|
전역 설정
|
||||||
</div>
|
</div>
|
||||||
<div class="btn-group mr-2" role="group">
|
<div class="card-body dragpad_battle">
|
||||||
<button type="button" class="btn btn-danger btn-begin_battle">전투</button>
|
<div class="row">
|
||||||
</div>
|
<div class="col-sm-6">
|
||||||
<div class="btn-group mr-2" role="group">
|
<div class="input-group">
|
||||||
<button type="button" class="btn btn-info btn-battle-save">모두 저장</button>
|
<input type="number" class="form-control" aria-describedby="text_year" value="<?=$startYear?>" disabled>
|
||||||
<input type="file" class="form_load_battle_file" accept=".json" style="display: none;" />
|
<div class="input-group-append">
|
||||||
<button type="button" class="btn btn-primary btn-battle-load">모두 불러오기</button>
|
<span class="input-group-text">년 시작</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<input type="number" class="form-control" id="year" value="<?=$year?>" min="<?=$startYear?>">
|
||||||
</div>
|
<div class="input-group-append">
|
||||||
</div>
|
<span class="input-group-text">년</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<input type="number" class="form-control" id="month" value="1" min="1" max="12">
|
||||||
<div class="row">
|
<div class="input-group-append">
|
||||||
<div class="col-sm">
|
<span class="input-group-text">월</span>
|
||||||
<div class="card mb-2 attacker_nation">
|
</div>
|
||||||
<div class="card-header">
|
</div>
|
||||||
출병국 설정
|
</div>
|
||||||
</div>
|
<div class="col-sm-6">
|
||||||
<div class="card-body nation_detail dragpad_battle">
|
<div class="btn-toolbar" role="toolbar">
|
||||||
<div class="input-group mb-1">
|
<div class="input-group mr-2" role="group">
|
||||||
<div class="input-group-prepend">
|
<div class="input-group-prepend">
|
||||||
<span class="input-group-text">국가 성향</span>
|
<span class="input-group-text">반복 횟수</span>
|
||||||
</div>
|
</div>
|
||||||
<select class="custom-select form_nation_type" style="width:25ch;">
|
<select class="custom-select" id="repeat_cnt">
|
||||||
<?php foreach(GameConst::$availableNationType as $typeID): ?>
|
<option value="1">1회 (로그 표기)</option>
|
||||||
<?php $nationTypeClass = buildNationTypeClass($typeID) ?>
|
<option value="1000">1000회 (요약 표기)</option>
|
||||||
<option value="<?=$typeID?>"><?=$nationTypeClass->getName()?> (<?=$nationTypeClass::$pros?>, <?=$nationTypeClass::$cons?>)</option>
|
</select>
|
||||||
<?php endforeach; ?>
|
</div>
|
||||||
</select>
|
<div class="btn-group mr-2" role="group">
|
||||||
<div class="input-group-prepend">
|
<button type="button" class="btn btn-danger btn-begin_battle">전투</button>
|
||||||
<span class="input-group-text">기술</span>
|
</div>
|
||||||
</div>
|
<div class="btn-group mr-2" role="group">
|
||||||
<input type="number" class="form-control form_tech" value="1" min="0" max="12">
|
<button type="button" class="btn btn-info btn-battle-save">모두 저장</button>
|
||||||
<div class="input-group-append">
|
<input type="file" class="form_load_battle_file" accept=".json" style="display: none;" />
|
||||||
<span class="input-group-text">등급</span>
|
<button type="button" class="btn btn-primary btn-battle-load">모두 불러오기</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-group mb-3">
|
</div>
|
||||||
<div class="input-group-prepend">
|
</div>
|
||||||
<span class="input-group-text">국가 규모</span>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<select class="custom-select form_nation_level">
|
<div class="row">
|
||||||
<?php foreach(getNationLevelList() as $nationLevel => [$name,$chiefCnt,$cityCnt]): ?>
|
<div class="col-sm">
|
||||||
<option value="<?=$nationLevel?>"><?=$name?></option>
|
<div class="card mb-2 attacker_nation">
|
||||||
<?php endforeach; ?>
|
<div class="card-header">
|
||||||
</select>
|
출병국 설정
|
||||||
<div class="input-group-prepend">
|
</div>
|
||||||
<span class="input-group-text">도시 규모</span>
|
<div class="card-body nation_detail dragpad_battle">
|
||||||
</div>
|
<div class="input-group mb-1">
|
||||||
<select class="custom-select form_city_level">
|
<div class="input-group-prepend">
|
||||||
<?php foreach(getCityLevelList() as $levelID => $name): ?>
|
<span class="input-group-text">국가 성향</span>
|
||||||
<option value="<?=$levelID?>"><?=$name?></option>
|
</div>
|
||||||
<?php endforeach; ?>
|
<select class="custom-select form_nation_type" style="width:25ch;">
|
||||||
</select>
|
<?php foreach(GameConst::$availableNationType as $typeID): ?>
|
||||||
<div class="input-group-prepend">
|
<?php $nationTypeClass = buildNationTypeClass($typeID) ?>
|
||||||
<span class="input-group-text">수도</span>
|
<option value="<?=$typeID?>"><?=$nationTypeClass->getName()?> (<?=$nationTypeClass::$pros?>, <?=$nationTypeClass::$cons?>)</option>
|
||||||
</div>
|
<?php endforeach; ?>
|
||||||
<div class="input-group-append btn-group btn-group-toggle" data-toggle="buttons">
|
</select>
|
||||||
<label class="btn btn-secondary">
|
<div class="input-group-prepend">
|
||||||
<input type="radio" name="is_attacker_capital" class="form_is_capital" value="1" autocomplete="off">Y
|
<span class="input-group-text">기술</span>
|
||||||
</label>
|
</div>
|
||||||
<label class="btn btn-secondary active">
|
<input type="number" class="form-control form_tech" value="1" min="0" max="12">
|
||||||
<input type="radio" name="is_attacker_capital" class="form_is_capital" value="2" autocomplete="off" checked>N
|
<div class="input-group-append">
|
||||||
</label>
|
<span class="input-group-text">등급</span>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
<div class="input-group mb-3">
|
||||||
<div class="input-group mb-1">
|
<div class="input-group-prepend">
|
||||||
|
<span class="input-group-text">국가 규모</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<select class="custom-select form_nation_level">
|
||||||
</div>
|
<?php foreach(getNationLevelList() as $nationLevel => [$name,$chiefCnt,$cityCnt]): ?>
|
||||||
<div class="card mb-2 attacker_form general_form" data-general_no='1'>
|
<option value="<?=$nationLevel?>"><?=$name?></option>
|
||||||
<div class="card-header">
|
<?php endforeach; ?>
|
||||||
<div class="float-sm-left" style="line-height:25px;">출병자 설정</div>
|
</select>
|
||||||
<div class="float-sm-right btn-toolbar" role="toolbar">
|
<div class="input-group-prepend">
|
||||||
<div class="btn-group btn-group-sm mr-2" role="group">
|
<span class="input-group-text">도시 규모</span>
|
||||||
<button type="button" class="btn btn-info btn-general-save">저장</button>
|
</div>
|
||||||
<input type="file" class="form_load_general_file" accept=".json" style="display: none;" />
|
<select class="custom-select form_city_level">
|
||||||
<button type="button" class="btn btn-primary btn-general-load">불러오기</button>
|
<?php foreach(getCityLevelList() as $levelID => $name): ?>
|
||||||
</div>
|
<option value="<?=$levelID?>"><?=$name?></option>
|
||||||
</div>
|
<?php endforeach; ?>
|
||||||
</div>
|
</select>
|
||||||
</div>
|
<div class="input-group-prepend">
|
||||||
</div><!-- <div class="col-sm"> -->
|
<span class="input-group-text">수도</span>
|
||||||
<div class="col-sm defender-column">
|
</div>
|
||||||
<div class="card mb-2 defender_nation">
|
<div class="input-group-append btn-group btn-group-toggle" data-toggle="buttons">
|
||||||
<div class="card-header">
|
<label class="btn btn-secondary">
|
||||||
수비국 설정
|
<input type="radio" name="is_attacker_capital" class="form_is_capital" value="1" autocomplete="off">Y
|
||||||
</div>
|
</label>
|
||||||
<div class="card-body dragpad_battle">
|
<label class="btn btn-secondary active">
|
||||||
<div class="input-group mb-1">
|
<input type="radio" name="is_attacker_capital" class="form_is_capital" value="0" autocomplete="off">N
|
||||||
<div class="input-group-prepend">
|
</label>
|
||||||
<span class="input-group-text">국가 성향</span>
|
</div>
|
||||||
</div>
|
|
||||||
<select class="custom-select form_nation_type" style="width:25ch;">
|
</div>
|
||||||
<?php foreach(GameConst::$availableNationType as $typeID): ?>
|
<div class="input-group mb-1">
|
||||||
<?php $nationTypeObj = buildNationTypeClass($typeID) ?>
|
|
||||||
<option value="<?=$typeID?>"><?=$nationTypeObj->getName()?> (<?=$nationTypeObj::$pros?>, <?=$nationTypeObj::$cons?>)</option>
|
</div>
|
||||||
<?php endforeach; ?>
|
</div>
|
||||||
</select>
|
</div>
|
||||||
<div class="input-group-prepend">
|
<div class="card mb-2 attacker_form general_form" data-general_no='1'>
|
||||||
<span class="input-group-text">기술</span>
|
<div class="card-header">
|
||||||
</div>
|
<div class="float-sm-left" style="line-height:25px;">출병자 설정</div>
|
||||||
<input type="number" class="form-control form_tech" value="1" min="0" max="12">
|
<div class="float-sm-right btn-toolbar" role="toolbar">
|
||||||
<div class="input-group-append">
|
<div class="btn-group btn-group-sm mr-2" role="group">
|
||||||
<span class="input-group-text">등급</span>
|
<button type="button" class="btn btn-success btn-general-import-server">서버에서 가져오기</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="btn-group btn-group-sm mr-2" role="group">
|
||||||
<div class="input-group mb-3">
|
<button type="button" class="btn btn-info btn-general-save">저장</button>
|
||||||
<div class="input-group-prepend">
|
<input type="file" class="form_load_general_file" accept=".json" style="display: none;" />
|
||||||
<span class="input-group-text">국가 규모</span>
|
<button type="button" class="btn btn-primary btn-general-load">불러오기</button>
|
||||||
</div>
|
</div>
|
||||||
<select class="custom-select form_nation_level">
|
</div>
|
||||||
<?php foreach(getNationLevelList() as $nationLevel => [$name,$chiefCnt,$cityCnt]): ?>
|
</div>
|
||||||
<option value="<?=$nationLevel?>"><?=$name?></option>
|
</div>
|
||||||
<?php endforeach; ?>
|
</div><!-- <div class="col-sm"> -->
|
||||||
</select>
|
<div class="col-sm defender-column">
|
||||||
<div class="input-group-prepend">
|
<div class="card mb-2 defender_nation">
|
||||||
<span class="input-group-text">도시 규모</span>
|
<div class="card-header">
|
||||||
</div>
|
수비국 설정
|
||||||
<select class="custom-select form_city_level">
|
</div>
|
||||||
<?php foreach(getCityLevelList() as $levelID => $name): ?>
|
<div class="card-body dragpad_battle">
|
||||||
<option value="<?=$levelID?>"><?=$name?></option>
|
<div class="input-group mb-1">
|
||||||
<?php endforeach; ?>
|
<div class="input-group-prepend">
|
||||||
</select>
|
<span class="input-group-text">국가 성향</span>
|
||||||
<div class="input-group-prepend">
|
</div>
|
||||||
<span class="input-group-text">수도</span>
|
<select class="custom-select form_nation_type" style="width:25ch;">
|
||||||
</div>
|
<?php foreach(GameConst::$availableNationType as $typeID): ?>
|
||||||
<div class="input-group-append btn-group btn-group-toggle" data-toggle="buttons">
|
<?php $nationTypeObj = buildNationTypeClass($typeID) ?>
|
||||||
<label class="btn btn-secondary">
|
<option value="<?=$typeID?>"><?=$nationTypeObj->getName()?> (<?=$nationTypeObj::$pros?>, <?=$nationTypeObj::$cons?>)</option>
|
||||||
<input type="radio" name="is_defender_capital" class="form_is_capital" value="1" autocomplete="off">Y
|
<?php endforeach; ?>
|
||||||
</label>
|
</select>
|
||||||
<label class="btn btn-secondary active">
|
<div class="input-group-prepend">
|
||||||
<input type="radio" name="is_defender_capital" class="form_is_capital" value="0" autocomplete="off" checked>N
|
<span class="input-group-text">기술</span>
|
||||||
</label>
|
</div>
|
||||||
</div>
|
<input type="number" class="form-control form_tech" value="1" min="0" max="12">
|
||||||
</div>
|
<div class="input-group-append">
|
||||||
<div class="input-group mb-1">
|
<span class="input-group-text">등급</span>
|
||||||
<div class="input-group-prepend">
|
</div>
|
||||||
<span class="input-group-text">수비</span>
|
</div>
|
||||||
</div>
|
<div class="input-group mb-3">
|
||||||
<input type="number" class="form-control form_def" id="city_def" value="1000" min="10" step="10">
|
<div class="input-group-prepend">
|
||||||
<div class="input-group-prepend">
|
<span class="input-group-text">국가 규모</span>
|
||||||
<span class="input-group-text">성벽</span>
|
</div>
|
||||||
</div>
|
<select class="custom-select form_nation_level">
|
||||||
<input type="number" class="form-control form_wall" id="city_wall" value="1000" min="0" step="10">
|
<?php foreach(getNationLevelList() as $nationLevel => [$name,$chiefCnt,$cityCnt]): ?>
|
||||||
</div>
|
<option value="<?=$nationLevel?>"><?=$name?></option>
|
||||||
</div>
|
<?php endforeach; ?>
|
||||||
</div>
|
</select>
|
||||||
<div class="card mb-2 defender_add_form">
|
<div class="input-group-prepend">
|
||||||
<div class="card-header">
|
<span class="input-group-text">도시 규모</span>
|
||||||
<div class="float-sm-left" style="line-height:25px;">수비자 설정</div>
|
</div>
|
||||||
<div class="float-sm-right btn-toolbar" role="toolbar">
|
<select class="custom-select form_city_level">
|
||||||
<div class="btn-group btn-group-sm mr-2" role="group">
|
<?php foreach(getCityLevelList() as $levelID => $name): ?>
|
||||||
<button type="button" class="btn btn-dark btn-reorder_defender">수비 순서대로 정렬</button>
|
<option value="<?=$levelID?>"><?=$name?></option>
|
||||||
</div>
|
<?php endforeach; ?>
|
||||||
<div class="btn-group btn-group-sm" role="group">
|
</select>
|
||||||
<button type="button" class="btn btn-success add-defender">추가</button>
|
<div class="input-group-prepend">
|
||||||
</div>
|
<span class="input-group-text">수도</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="input-group-append btn-group btn-group-toggle" data-toggle="buttons">
|
||||||
</div>
|
<label class="btn btn-secondary">
|
||||||
<div class="card mb-2 form_sample">
|
<input type="radio" name="is_defender_capital" class="form_is_capital" value="1" autocomplete="off">Y
|
||||||
<div class="card-header">
|
</label>
|
||||||
<div class="float-sm-left" style="line-height:25px;">수비자 설정</div>
|
<label class="btn btn-secondary active">
|
||||||
<div class="float-sm-right btn-toolbar" role="toolbar">
|
<input type="radio" name="is_defender_capital" class="form_is_capital" value="0" autocomplete="off">N
|
||||||
<div class="btn-group btn-group-sm mr-2" role="group">
|
</label>
|
||||||
<button type="button" class="btn btn-info btn-general-save">저장</button>
|
</div>
|
||||||
<input type="file" class="form_load_general_file" accept=".json" style="display: none;" />
|
</div>
|
||||||
<button type="button" class="btn btn-primary btn-general-load">불러오기</button>
|
<div class="input-group mb-1">
|
||||||
</div>
|
<div class="input-group-prepend">
|
||||||
<div class="btn-group btn-group-sm" role="group">
|
<span class="input-group-text">수비</span>
|
||||||
<button type="button" class="btn btn-warning copy-defender">복제</button>
|
</div>
|
||||||
<button type="button" class="btn btn-danger delete-defender">제거</button>
|
<input type="number" class="form-control form_def" id="city_def" value="1000" min="10" step="10">
|
||||||
</div>
|
<div class="input-group-prepend">
|
||||||
</div>
|
<span class="input-group-text">성벽</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body general_detail">
|
<input type="number" class="form-control form_wall" id="city_wall" value="1000" min="0" step="10">
|
||||||
<div class="input-group mb-3">
|
</div>
|
||||||
<div class="input-group-prepend">
|
</div>
|
||||||
<span class="input-group-text">이름</span>
|
</div>
|
||||||
</div>
|
<div class="card mb-2 defender_add_form">
|
||||||
<input type="text" class="form-control form_general_name" value="무명" style="width:15ch;">
|
<div class="card-header">
|
||||||
<div class="input-group-prepend">
|
<div class="float-sm-left" style="line-height:25px;">수비자 설정</div>
|
||||||
<span class="input-group-text">직위</span>
|
<div class="float-sm-right btn-toolbar" role="toolbar">
|
||||||
</div>
|
<div class="btn-group btn-group-sm mr-2" role="group">
|
||||||
<select class="custom-select form_officer_level" style="width:8ch;">
|
<button type="button" class="btn btn-dark btn-reorder_defender">수비 순서대로 정렬</button>
|
||||||
<option value="1">일반</option>
|
</div>
|
||||||
<option value="4">태수</option>
|
<div class="btn-group btn-group-sm" role="group">
|
||||||
<option value="3">군사</option>
|
<button type="button" class="btn btn-success add-defender">추가</button>
|
||||||
<option value="2">종사</option>
|
</div>
|
||||||
<option value="10">무장 수뇌</option>
|
</div>
|
||||||
<option value="9">지장 수뇌</option>
|
</div>
|
||||||
<option value="11">참모</option>
|
</div>
|
||||||
<option value="12">군주</option>
|
<div class="card mb-2 form_sample">
|
||||||
</select>
|
<div class="card-header">
|
||||||
<div class="input-group-prepend">
|
<div class="float-sm-left" style="line-height:25px;">수비자 설정</div>
|
||||||
<span class="input-group-text">Level</span>
|
<div class="float-sm-right btn-toolbar" role="toolbar">
|
||||||
</div>
|
<div class="btn-group btn-group-sm mr-2" role="group">
|
||||||
<input type="number" class="form-control form_exp_level" value="20" min="0" max="300" step="1">
|
<button type="button" class="btn btn-success btn-general-import-server">서버에서 가져오기</button>
|
||||||
|
</div>
|
||||||
</div>
|
<div class="btn-group btn-group-sm mr-2" role="group">
|
||||||
<div class="input-group mb-1">
|
<button type="button" class="btn btn-info btn-general-save">저장</button>
|
||||||
<div class="input-group-prepend">
|
<input type="file" class="form_load_general_file" accept=".json" style="display: none;" />
|
||||||
<span class="input-group-text">통솔</span>
|
<button type="button" class="btn btn-primary btn-general-load">불러오기</button>
|
||||||
</div>
|
</div>
|
||||||
<input type="number" class="form-control form_leadership" value="50" min="1" max="300" step="1">
|
<div class="btn-group btn-group-sm" role="group">
|
||||||
<div class="input-group-prepend">
|
<button type="button" class="btn btn-warning copy-defender">복제</button>
|
||||||
<span class="input-group-text">무력</span>
|
<button type="button" class="btn btn-danger delete-defender">제거</button>
|
||||||
</div>
|
</div>
|
||||||
<input type="number" class="form-control form_strength" value="50" min="1" max="300" step="1">
|
</div>
|
||||||
<div class="input-group-prepend">
|
</div>
|
||||||
<span class="input-group-text">지력</span>
|
<div class="card-body general_detail">
|
||||||
</div>
|
<div class="input-group mb-3">
|
||||||
<input type="number" class="form-control form_intel" value="50" min="1" max="300" step="1">
|
<div class="input-group-prepend">
|
||||||
</div>
|
<span class="input-group-text">이름</span>
|
||||||
<div class="input-group mb-1">
|
</div>
|
||||||
<div class="input-group-prepend">
|
<input type="text" class="form-control form_general_name" value="무명" style="width:15ch;">
|
||||||
<span class="input-group-text">명마</span>
|
<div class="input-group-prepend">
|
||||||
</div>
|
<span class="input-group-text">직위</span>
|
||||||
<select class="custom-select form_general_horse">
|
</div>
|
||||||
<option value='None'>-</option>
|
<select class="custom-select form_officer_level" style="width:8ch;">
|
||||||
<?php foreach(GameConst::$allItems['horse'] as $horseID=>$cnt): ?>
|
<option value="1">일반</option>
|
||||||
<option value="<?=$horseID?>"><?=getItemName($horseID)?></option>
|
<option value="4">태수</option>
|
||||||
<?php endforeach; ?>
|
<option value="3">군사</option>
|
||||||
</select>
|
<option value="2">종사</option>
|
||||||
<div class="input-group-prepend">
|
<option value="10">무장 수뇌</option>
|
||||||
<span class="input-group-text">무기</span>
|
<option value="9">지장 수뇌</option>
|
||||||
</div>
|
<option value="11">참모</option>
|
||||||
<select class="custom-select form_general_weap">
|
<option value="12">군주</option>
|
||||||
<option value='None'>-</option>
|
</select>
|
||||||
<?php foreach(GameConst::$allItems['weapon'] as $weaponID=>$cnt): ?>
|
<div class="input-group-prepend">
|
||||||
<option value="<?=$weaponID?>"><?=getItemName($weaponID)?></option>
|
<span class="input-group-text">Level</span>
|
||||||
<?php endforeach; ?>
|
</div>
|
||||||
</select>
|
<input type="number" class="form-control form_exp_level" value="20" min="0" max="300" step="1">
|
||||||
<div class="input-group-prepend">
|
|
||||||
<span class="input-group-text">서적</span>
|
</div>
|
||||||
</div>
|
<div class="input-group mb-1">
|
||||||
<select class="custom-select form_general_book">
|
<div class="input-group-prepend">
|
||||||
<option value='None'>-</option>
|
<span class="input-group-text">통솔</span>
|
||||||
<?php foreach(GameConst::$allItems['book'] as $bookID=>$cnt): ?>
|
</div>
|
||||||
<option value="<?=$bookID?>"><?=getItemName($bookID)?></option>
|
<input type="number" class="form-control form_leadership" value="50" min="1" max="300" step="1">
|
||||||
<?php endforeach; ?>
|
<div class="input-group-prepend">
|
||||||
</select>
|
<span class="input-group-text">무력</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-group mb-3">
|
<input type="number" class="form-control form_strength" value="50" min="1" max="300" step="1">
|
||||||
<div class="input-group-prepend">
|
<div class="input-group-prepend">
|
||||||
<span class="input-group-text">부상</span>
|
<span class="input-group-text">지력</span>
|
||||||
</div>
|
</div>
|
||||||
<input type="number" class="form-control form_injury" value="0" min="0" max="80" step="1">
|
<input type="number" class="form-control form_intel" value="50" min="1" max="300" step="1">
|
||||||
<div class="input-group-append">
|
</div>
|
||||||
<span class="input-group-text">%(<span class="injury_helptext">건강</span>)</span>
|
<div class="input-group mb-1">
|
||||||
</div>
|
<div class="input-group-prepend">
|
||||||
<div class="input-group-prepend">
|
<span class="input-group-text">명마</span>
|
||||||
<span class="input-group-text">군량</span>
|
</div>
|
||||||
</div>
|
<select class="custom-select form_general_horse">
|
||||||
<input type="number" class="form-control form_rice" value="5000" min="50" max="40000" step="50">
|
<option value='None'>-</option>
|
||||||
<div class="input-group-prepend">
|
<?php foreach(GameConst::$allItems['horse'] as $horseID=>$cnt): ?>
|
||||||
<span class="input-group-text">도구</span>
|
<option value="<?=$horseID?>"><?=getItemName($horseID)?></option>
|
||||||
</div>
|
<?php endforeach; ?>
|
||||||
<select class="custom-select form_general_item">
|
</select>
|
||||||
<option value='None'>-</option>
|
<div class="input-group-prepend">
|
||||||
<?php foreach(GameConst::$allItems['item'] as $itemID=>$cnt): ?>
|
<span class="input-group-text">무기</span>
|
||||||
<option value="<?=$itemID?>"><?=getItemName($itemID)?></option>
|
</div>
|
||||||
<?php endforeach; ?>
|
<select class="custom-select form_general_weap">
|
||||||
</select>
|
<option value='None'>-</option>
|
||||||
</div>
|
<?php foreach(GameConst::$allItems['weapon'] as $weaponID=>$cnt): ?>
|
||||||
<div class="input-group mb-1">
|
<option value="<?=$weaponID?>"><?=getItemName($weaponID)?></option>
|
||||||
<div class="input-group-prepend">
|
<?php endforeach; ?>
|
||||||
<span class="input-group-text">병종</span>
|
</select>
|
||||||
</div>
|
<div class="input-group-prepend">
|
||||||
<select class="custom-select form_crewtype">
|
<span class="input-group-text">서적</span>
|
||||||
<?php foreach(GameUnitConst::all() as $crewTypeID => $crewType): ?>
|
</div>
|
||||||
<?php if($crewType->armType === GameUnitConst::T_CASTLE){ continue; } ?>
|
<select class="custom-select form_general_book">
|
||||||
<option value="<?=$crewTypeID?>"><?=$crewType->name?></option>
|
<option value='None'>-</option>
|
||||||
<?php endforeach; ?>
|
<?php foreach(GameConst::$allItems['book'] as $bookID=>$cnt): ?>
|
||||||
</select>
|
<option value="<?=$bookID?>"><?=getItemName($bookID)?></option>
|
||||||
<div class="input-group-prepend">
|
<?php endforeach; ?>
|
||||||
<span class="input-group-text">병사</span>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<input type="number" class="form-control form_crew" value="7000" min="100" step="100">
|
<div class="input-group mb-3">
|
||||||
<div class="input-group-prepend">
|
<div class="input-group-prepend">
|
||||||
<span class="input-group-text">성격</span>
|
<span class="input-group-text">부상</span>
|
||||||
</div>
|
</div>
|
||||||
<select class="custom-select form_general_character">
|
<input type="number" class="form-control form_injury" value="0" min="0" max="80" step="1">
|
||||||
<?php foreach(getCharacterList(false) as $characterID => [$name,$info]): ?>
|
<div class="input-group-append">
|
||||||
<option value="<?=$characterID?>"><?=$name?></option>
|
<span class="input-group-text">%(<span class="injury_helptext">건강</span>)</span>
|
||||||
<?php endforeach; ?>
|
</div>
|
||||||
</select>
|
<div class="input-group-prepend">
|
||||||
</div>
|
<span class="input-group-text">군량</span>
|
||||||
<div class="input-group mb-3">
|
</div>
|
||||||
<div class="input-group-prepend">
|
<input type="number" class="form-control form_rice" value="5000" min="50" max="40000" step="50">
|
||||||
<span class="input-group-text">훈련</span>
|
<div class="input-group-prepend">
|
||||||
</div>
|
<span class="input-group-text">도구</span>
|
||||||
<input type="number" class="form-control form_train" value="100" min="40" max="<?=GameConst::$maxTrainByWar?>" step="1">
|
</div>
|
||||||
<div class="input-group-prepend">
|
<select class="custom-select form_general_item">
|
||||||
<span class="input-group-text">사기</span>
|
<option value='None'>-</option>
|
||||||
</div>
|
<?php foreach(GameConst::$allItems['item'] as $itemID=>$cnt): ?>
|
||||||
<input type="number" class="form-control form_atmos" value="100" min="40" max="<?=GameConst::$maxAtmosByWar?>" step="1">
|
<option value="<?=$itemID?>"><?=getItemName($itemID)?></option>
|
||||||
<div class="input-group-prepend">
|
<?php endforeach; ?>
|
||||||
<span class="input-group-text">전특</span>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<select class="custom-select form_general_special_war">
|
<div class="input-group mb-1">
|
||||||
<?php foreach(SpecialityHelper::getSpecialWarList(false) as $specialWarID =>$specialObj): ?>
|
<div class="input-group-prepend">
|
||||||
<option value="<?=$specialWarID?>"><?=$specialObj->getName()?></option>
|
<span class="input-group-text">병종</span>
|
||||||
<?php endforeach; ?>
|
</div>
|
||||||
</select>
|
<select class="custom-select form_crewtype">
|
||||||
</div>
|
<?php foreach(GameUnitConst::all() as $crewTypeID => $crewType): ?>
|
||||||
<div class="input-group mb-1">
|
<?php if($crewType->armType === GameUnitConst::T_CASTLE){ continue; } ?>
|
||||||
<div class="input-group-prepend">
|
<option value="<?=$crewTypeID?>"><?=$crewType->name?></option>
|
||||||
<span class="input-group-text">보병숙련</span>
|
<?php endforeach; ?>
|
||||||
</div>
|
</select>
|
||||||
<select class="custom-select form_dex1">
|
<div class="input-group-prepend">
|
||||||
<?php foreach(getDexLevelList() as $dexLevel => [$dexAmount, $color, $name]): ?>
|
<span class="input-group-text">병사</span>
|
||||||
<option value="<?=$dexAmount?>"><?="{$name} (".number_format($dexAmount).")"?></option>
|
</div>
|
||||||
<?php endforeach; ?>
|
<input type="number" class="form-control form_crew" value="7000" min="100" step="100">
|
||||||
</select>
|
<div class="input-group-prepend">
|
||||||
<div class="input-group-prepend">
|
<span class="input-group-text">성격</span>
|
||||||
<span class="input-group-text">궁병숙련</span>
|
</div>
|
||||||
</div>
|
<select class="custom-select form_general_character">
|
||||||
<select class="custom-select form_dex2">
|
<?php foreach(getCharacterList(false) as $characterID => [$name,$info]): ?>
|
||||||
<?php foreach(getDexLevelList() as $dexLevel => [$dexAmount, $color, $name]): ?>
|
<option value="<?=$characterID?>"><?=$name?></option>
|
||||||
<option value="<?=$dexAmount?>"><?="{$name} (".number_format($dexAmount).")"?></option>
|
<?php endforeach; ?>
|
||||||
<?php endforeach; ?>
|
</select>
|
||||||
</select>
|
</div>
|
||||||
<div class="input-group-prepend">
|
<div class="input-group mb-3">
|
||||||
<span class="input-group-text">기병숙련</span>
|
<div class="input-group-prepend">
|
||||||
</div>
|
<span class="input-group-text">훈련</span>
|
||||||
<select class="custom-select form_dex3">
|
</div>
|
||||||
<?php foreach(getDexLevelList() as $dexLevel => [$dexAmount, $color, $name]): ?>
|
<input type="number" class="form-control form_train" value="100" min="40" max="<?=GameConst::$maxTrainByWar?>" step="1">
|
||||||
<option value="<?=$dexAmount?>"><?="{$name} (".number_format($dexAmount).")"?></option>
|
<div class="input-group-prepend">
|
||||||
<?php endforeach; ?>
|
<span class="input-group-text">사기</span>
|
||||||
</select>
|
</div>
|
||||||
</div>
|
<input type="number" class="form-control form_atmos" value="100" min="40" max="<?=GameConst::$maxAtmosByWar?>" step="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>
|
</div>
|
||||||
</div>
|
<select class="custom-select form_general_special_war">
|
||||||
<select class="custom-select form_dex4">
|
<?php foreach(SpecialityHelper::getSpecialWarList(false) as $specialWarID =>$specialObj): ?>
|
||||||
<?php foreach(getDexLevelList() as $dexLevel => [$dexAmount, $color, $name]): ?>
|
<option value="<?=$specialWarID?>"><?=$specialObj->getName()?></option>
|
||||||
<option value="<?=$dexAmount?>"><?="{$name} (".number_format($dexAmount).")"?></option>
|
<?php endforeach; ?>
|
||||||
<?php endforeach; ?>
|
</select>
|
||||||
</select>
|
</div>
|
||||||
<div class="input-group-prepend">
|
<div class="input-group mb-1">
|
||||||
<span class="input-group-text">차병숙련</span>
|
<div class="input-group-prepend">
|
||||||
</div>
|
<span class="input-group-text">보병숙련</span>
|
||||||
<select class="custom-select form_dex5">
|
</div>
|
||||||
<?php foreach(getDexLevelList() as $dexLevel => [$dexAmount, $color, $name]): ?>
|
<select class="custom-select form_dex1">
|
||||||
<option value="<?=$dexAmount?>"><?="{$name} (".number_format($dexAmount).")"?></option>
|
<?php foreach(getDexLevelList() as $dexLevel => [$dexAmount, $color, $name]): ?>
|
||||||
<?php endforeach; ?>
|
<option value="<?=$dexAmount?>"><?="{$name} (".number_format($dexAmount).")"?></option>
|
||||||
</select>
|
<?php endforeach; ?>
|
||||||
<div class="input-group-prepend only_defender">
|
</select>
|
||||||
<span class="input-group-text">수비여부</span>
|
<div class="input-group-prepend">
|
||||||
</div>
|
<span class="input-group-text">궁병숙련</span>
|
||||||
<select class="custom-select form_defence_train only_defender">
|
</div>
|
||||||
<option value="80">훈사 80</option>
|
<select class="custom-select form_dex2">
|
||||||
<option value="60">훈사 60</option>
|
<?php foreach(getDexLevelList() as $dexLevel => [$dexAmount, $color, $name]): ?>
|
||||||
<option value="999">안함</option>
|
<option value="<?=$dexAmount?>"><?="{$name} (".number_format($dexAmount).")"?></option>
|
||||||
</select>
|
<?php endforeach; ?>
|
||||||
</div>
|
</select>
|
||||||
</div>
|
<div class="input-group-prepend">
|
||||||
</div>
|
<span class="input-group-text">기병숙련</span>
|
||||||
|
</div>
|
||||||
|
<select class="custom-select form_dex3">
|
||||||
</div><!-- <div class="col-sm"> -->
|
<?php foreach(getDexLevelList() as $dexLevel => [$dexAmount, $color, $name]): ?>
|
||||||
</div>
|
<option value="<?=$dexAmount?>"><?="{$name} (".number_format($dexAmount).")"?></option>
|
||||||
<div class="card mb-3">
|
<?php endforeach; ?>
|
||||||
<div class="card-header">
|
</select>
|
||||||
전투 요약
|
</div>
|
||||||
</div>
|
<div class="input-group mb-1">
|
||||||
<table class="table">
|
<div class="input-group-prepend">
|
||||||
<tbody id="battle_result_summary">
|
<span class="input-group-text">귀병숙련</span>
|
||||||
<tr><th style='width:18ch;'>전투 일시</th><td id='result_datetime'></td></tr>
|
</div>
|
||||||
<tr><th>전투 횟수</th><td id='result_warcnt'></td></tr>
|
<select class="custom-select form_dex4">
|
||||||
<tr><th>전투 페이즈</th><td id='result_phase'></td></tr>
|
<?php foreach(getDexLevelList() as $dexLevel => [$dexAmount, $color, $name]): ?>
|
||||||
<tr><th>준 피해</th><td><span id='result_killed'>0</span><span id='result_varKilled'> (<span id='result_minKilled'>0</span> ~ <span id='result_maxKilled'>0</span>)</span></td></tr>
|
<option value="<?=$dexAmount?>"><?="{$name} (".number_format($dexAmount).")"?></option>
|
||||||
<tr><th>받은 피해</th><td><span id='result_dead'>0</span><span id='result_varDead'> (<span id='result_minDead'>0</span> ~ <span id='result_maxDead'>0</span>)</span></td></tr>
|
<?php endforeach; ?>
|
||||||
<tr><th>출병자 군량 소모</th><td id='result_attackerRice'></td></tr>
|
</select>
|
||||||
<tr><th>수비자 군량 소모</th><td id='result_defenderRice'></td></tr>
|
<div class="input-group-prepend">
|
||||||
<tr><th>공격자 스킬</th><td id='result_attackerSkills'></td></tr>
|
<span class="input-group-text">차병숙련</span>
|
||||||
<tr class='result_defenderSkills'><th>수비자1 스킬</th><td></td></tr>
|
</div>
|
||||||
</tbody>
|
<select class="custom-select form_dex5">
|
||||||
</table>
|
<?php foreach(getDexLevelList() as $dexLevel => [$dexAmount, $color, $name]): ?>
|
||||||
</div>
|
<option value="<?=$dexAmount?>"><?="{$name} (".number_format($dexAmount).")"?></option>
|
||||||
<div class="row">
|
<?php endforeach; ?>
|
||||||
<div class="col-sm">
|
</select>
|
||||||
<div class="card mb-3">
|
<div class="input-group-prepend only_defender">
|
||||||
<div class="card-header">
|
<span class="input-group-text">수비여부</span>
|
||||||
마지막 전투 로그
|
</div>
|
||||||
</div>
|
<select class="custom-select form_defence_train only_defender">
|
||||||
<div class="card-body" id="generalBattleResultLog">
|
<option value="80">훈사 80</option>
|
||||||
|
<option value="60">훈사 60</option>
|
||||||
</div>
|
<option value="999">안함</option>
|
||||||
</div>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm">
|
</div>
|
||||||
<div class="card mb-3">
|
</div>
|
||||||
<div class="card-header">
|
|
||||||
마지막 전투 상세 로그
|
|
||||||
</div>
|
</div><!-- <div class="col-sm"> -->
|
||||||
<div class="card-body" id="generalBattleDetailLog">
|
</div>
|
||||||
|
<div class="card mb-3">
|
||||||
</div>
|
<div class="card-header">
|
||||||
</div>
|
전투 요약
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<table class="table">
|
||||||
</div>
|
<tbody id="battle_result_summary">
|
||||||
</body>
|
<tr><th style='width:18ch;'>전투 일시</th><td id='result_datetime'></td></tr>
|
||||||
|
<tr><th>전투 횟수</th><td id='result_warcnt'></td></tr>
|
||||||
|
<tr><th>전투 페이즈</th><td id='result_phase'></td></tr>
|
||||||
|
<tr><th>준 피해</th><td><span id='result_killed'>0</span><span id='result_varKilled'> (<span id='result_minKilled'>0</span> ~ <span id='result_maxKilled'>0</span>)</span></td></tr>
|
||||||
|
<tr><th>받은 피해</th><td><span id='result_dead'>0</span><span id='result_varDead'> (<span id='result_minDead'>0</span> ~ <span id='result_maxDead'>0</span>)</span></td></tr>
|
||||||
|
<tr><th>출병자 군량 소모</th><td id='result_attackerRice'></td></tr>
|
||||||
|
<tr><th>수비자 군량 소모</th><td id='result_defenderRice'></td></tr>
|
||||||
|
<tr><th>공격자 스킬</th><td id='result_attackerSkills'></td></tr>
|
||||||
|
<tr class='result_defenderSkills'><th>수비자1 스킬</th><td></td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm">
|
||||||
|
<div class="card mb-3">
|
||||||
|
<div class="card-header">
|
||||||
|
마지막 전투 로그
|
||||||
|
</div>
|
||||||
|
<div class="card-body" id="generalBattleResultLog">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm">
|
||||||
|
<div class="card mb-3">
|
||||||
|
<div class="card-header">
|
||||||
|
마지막 전투 상세 로그
|
||||||
|
</div>
|
||||||
|
<div class="card-body" id="generalBattleDetailLog">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="importModal" class="modal" tabindex="-1" role="dialog">
|
||||||
|
<div class="modal-dialog" role="document">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title">장수 목록</h5>
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
|
<span aria-hidden="true">×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<select id="modalSelector"></select>
|
||||||
|
<p>타국 장수을 선택한 경우 숙련과 아이템은 0으로 초기화됩니다.</p>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-primary" id='importFromDB'>가져오기</button>
|
||||||
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">닫기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace sammo;
|
||||||
|
|
||||||
|
include "lib.php";
|
||||||
|
include "func.php";
|
||||||
|
|
||||||
|
WebUtil::requireAJAX();
|
||||||
|
|
||||||
|
$destGeneralID = Util::getPost('destGeneralID', 'int', 0);
|
||||||
|
|
||||||
|
if(!$destGeneralID || $destGeneralID <= 0){
|
||||||
|
Json::die([
|
||||||
|
'result'=>false,
|
||||||
|
'reason'=>'올바르지 않은 장수 코드입니다'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$session = Session::requireGameLogin([])->setReadOnly();
|
||||||
|
|
||||||
|
$db = DB::db();
|
||||||
|
|
||||||
|
increaseRefresh("시뮬레이터 추출", 1);
|
||||||
|
|
||||||
|
$userID = Session::getUserID();
|
||||||
|
$me = $db->queryFirstRow('SELECT no,nation from general where owner=%i', $userID);
|
||||||
|
$nationID = $me['nation'];
|
||||||
|
|
||||||
|
$reqColumns = [
|
||||||
|
'nation',
|
||||||
|
'name', 'officer_level', 'explevel', 'injury',
|
||||||
|
'leadership', 'horse', 'strength', 'weapon', 'intel', 'book', 'item',
|
||||||
|
'rice', 'personal', 'special2',
|
||||||
|
'crew', 'crewtype',
|
||||||
|
'atmos', 'train', 'dex1', 'dex2', 'dex3', 'dex4', 'dex5', 'defence_train'
|
||||||
|
];
|
||||||
|
|
||||||
|
$dummyItems = [
|
||||||
|
'officer_level'=>1,
|
||||||
|
'weapon'=>'None',
|
||||||
|
'book'=>'None',
|
||||||
|
'item'=>'None',
|
||||||
|
'crew'=>0,
|
||||||
|
'crewtype'=>GameUnitConst::DEFAULT_CREWTYPE,
|
||||||
|
'rice'=>10000,
|
||||||
|
'train'=>GameConst::$maxTrainByCommand,
|
||||||
|
'atmos'=>GameConst::$maxTrainByCommand,
|
||||||
|
'dex1'=>0,
|
||||||
|
'dex2'=>0,
|
||||||
|
'dex3'=>0,
|
||||||
|
'dex4'=>0,
|
||||||
|
'dex5'=>0,
|
||||||
|
'defence_train'=>80
|
||||||
|
];
|
||||||
|
|
||||||
|
$rawDestGeneral = $db->queryFirstRow('SELECT %l FROM general WHERE no=%i', Util::formatListOfBackticks($reqColumns), $destGeneralID);
|
||||||
|
|
||||||
|
if($nationID == 0 || $rawDestGeneral['nation'] != $nationID){
|
||||||
|
foreach($dummyItems as $key=>$val){
|
||||||
|
$rawDestGeneral[$key] = $val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach(['dex1', 'dex2', 'dex3', 'dex4', 'dex5'] as $dexKey){
|
||||||
|
$dex = $rawDestGeneral[$dexKey];
|
||||||
|
$rawDestGeneral[$dexKey] = getDexLevelList()[getDexLevel($dex)][0];
|
||||||
|
}
|
||||||
|
|
||||||
|
Json::die([
|
||||||
|
'result'=>true,
|
||||||
|
'reason'=>'success',
|
||||||
|
'general'=>$rawDestGeneral,
|
||||||
|
]);
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
namespace sammo;
|
||||||
|
|
||||||
|
include "lib.php";
|
||||||
|
include "func.php";
|
||||||
|
|
||||||
|
//로그인 검사
|
||||||
|
$session = Session::requireGameLogin([]);
|
||||||
|
$generalID = Session::getGeneralID();
|
||||||
|
|
||||||
|
$db = DB::db();
|
||||||
|
|
||||||
|
$rawList = Util::convertArrayToDict($db->query('SELECT no, name, npc, nation FROM general'), 'no');
|
||||||
|
$nationID = $rawList[$generalID]['nation'];
|
||||||
|
|
||||||
|
|
||||||
|
$result = [
|
||||||
|
'result'=>true,
|
||||||
|
'reason'=>'success',
|
||||||
|
'nationID'=>$nationID,
|
||||||
|
'generalID'=>$generalID,
|
||||||
|
'column'=>['no', 'name', 'npc']
|
||||||
|
];
|
||||||
|
|
||||||
|
$resultItem = [];
|
||||||
|
foreach(Util::arrayGroupBy($rawList, 'nation') as $subNationID=>$generals){
|
||||||
|
$subNation = [];
|
||||||
|
foreach($generals as $general){
|
||||||
|
$subNation[] = [$general['no'], $general['name'], $general['npc']];
|
||||||
|
}
|
||||||
|
$resultItem[$subNationID] = $subNation;
|
||||||
|
}
|
||||||
|
|
||||||
|
$result['list'] = $resultItem;
|
||||||
|
$result['nation'] = Util::convertArrayToDict($db->query('SELECT nation, name, color FROM nation'), 'nation');
|
||||||
|
Json::die($result);
|
||||||
+109
-109
@@ -1,109 +1,109 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
include "lib.php";
|
include "lib.php";
|
||||||
include "func.php";
|
include "func.php";
|
||||||
|
|
||||||
|
|
||||||
//로그인 검사
|
//로그인 검사
|
||||||
$session = Session::requireLogin();
|
$session = Session::requireLogin([]);
|
||||||
$userID = Session::getUserID();
|
$userID = Session::getUserID();
|
||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$withToken = Util::getPost('with_token', 'bool', false);
|
$withToken = Util::getPost('with_token', 'bool', false);
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
|
|
||||||
if($session->isGameLoggedIn()){
|
if($session->isGameLoggedIn()){
|
||||||
increaseRefresh("장수일람", 2);
|
increaseRefresh("장수일람", 2);
|
||||||
|
|
||||||
$me = $db->queryFirstRow('SELECT con, turntime FROM general WHERE owner=%i', $userID);
|
$me = $db->queryFirstRow('SELECT con, turntime FROM general WHERE owner=%i', $userID);
|
||||||
$con = checkLimit($me['con']);
|
$con = checkLimit($me['con']);
|
||||||
if ($con >= 2) {
|
if ($con >= 2) {
|
||||||
Json::die([
|
Json::die([
|
||||||
'result'=>false,
|
'result'=>false,
|
||||||
'reason'=>'접속 제한중입니다. 1턴 이내에 너무 많은 갱신을 하셨습니다.'
|
'reason'=>'접속 제한중입니다. 1턴 이내에 너무 많은 갱신을 하셨습니다.'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$availableNextCall = $session->availableNextCallGetGeneralList??'2000-01-01 00:00:00';
|
$availableNextCall = $session->availableNextCallGetGeneralList??'2000-01-01 00:00:00';
|
||||||
$now = new \DateTimeImmutable();
|
$now = new \DateTimeImmutable();
|
||||||
|
|
||||||
if($now <= new \DateTimeImmutable($availableNextCall) && $session->userGrade < 5){
|
if($now <= new \DateTimeImmutable($availableNextCall) && $session->userGrade < 5){
|
||||||
Json::die([
|
Json::die([
|
||||||
'result'=>false,
|
'result'=>false,
|
||||||
'reason'=>"장수 리스트는 10초에 한번 갱신 가능합니다.\n다음 시간 : ".$availableNextCall
|
'reason'=>"장수 리스트는 10초에 한번 갱신 가능합니다.\n다음 시간 : ".$availableNextCall
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$availableNextCall = $now->add(new \DateInterval('PT10S'))->format('Y-m-d H:i:s');
|
$availableNextCall = $now->add(new \DateInterval('PT10S'))->format('Y-m-d H:i:s');
|
||||||
$session->availableNextCallGetGeneralList = $availableNextCall;
|
$session->availableNextCallGetGeneralList = $availableNextCall;
|
||||||
}
|
}
|
||||||
|
|
||||||
$session->setReadOnly();
|
$session->setReadOnly();
|
||||||
|
|
||||||
$rawGeneralList = $db->queryAllLists('SELECT owner,no,picture,imgsvr,npc,age,nation,special,special2,personal,name,owner_name as ownerName,injury,leadership,strength,intel,experience,dedication,officer_level,killturn,connect from general');
|
$rawGeneralList = $db->queryAllLists('SELECT owner,no,picture,imgsvr,npc,age,nation,special,special2,personal,name,owner_name as ownerName,injury,leadership,strength,intel,experience,dedication,officer_level,killturn,connect from general');
|
||||||
|
|
||||||
$ownerNameList = [];
|
$ownerNameList = [];
|
||||||
if($gameStor->isunited){
|
if($gameStor->isunited){
|
||||||
foreach(RootDB::db()->queryAllLists('SELECT no, name FROM member') as [$ownerID, $ownerName]){
|
foreach(RootDB::db()->queryAllLists('SELECT no, name FROM member') as [$ownerID, $ownerName]){
|
||||||
$ownerNameList[$ownerID] = $ownerName;
|
$ownerNameList[$ownerID] = $ownerName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$generalList = [];
|
$generalList = [];
|
||||||
foreach($rawGeneralList as $rawGeneral){
|
foreach($rawGeneralList as $rawGeneral){
|
||||||
[$owner,$no,$picture,$imgsvr,$npc,$age,$nation,$special,$special2,$personal,$name,$ownerName,$injury,$leadership,$strength,$intel,$experience,$dedication,$officerLevel,$killturn,$connectCnt] = $rawGeneral;
|
[$owner,$no,$picture,$imgsvr,$npc,$age,$nation,$special,$special2,$personal,$name,$ownerName,$injury,$leadership,$strength,$intel,$experience,$dedication,$officerLevel,$killturn,$connectCnt] = $rawGeneral;
|
||||||
|
|
||||||
if(key_exists($owner, $ownerNameList)){
|
if(key_exists($owner, $ownerNameList)){
|
||||||
$ownerName = $ownerNameList[$owner];
|
$ownerName = $ownerNameList[$owner];
|
||||||
}
|
}
|
||||||
|
|
||||||
$nationArr = getNationStaticInfo($nation);
|
$nationArr = getNationStaticInfo($nation);
|
||||||
$lbonus = calcLeadershipBonus($officerLevel, $nationArr['level']);
|
$lbonus = calcLeadershipBonus($officerLevel, $nationArr['level']);
|
||||||
|
|
||||||
$generalList[] = [
|
$generalList[] = [
|
||||||
$no,
|
$no,
|
||||||
$picture,
|
$picture,
|
||||||
$imgsvr,
|
$imgsvr,
|
||||||
$npc,
|
$npc,
|
||||||
$age,
|
$age,
|
||||||
$nationArr['name'],
|
$nationArr['name'],
|
||||||
getGeneralSpecialDomesticName($special),
|
getGeneralSpecialDomesticName($special),
|
||||||
getGeneralSpecialWarName($special2),
|
getGeneralSpecialWarName($special2),
|
||||||
getGenChar($personal),
|
getGenChar($personal),
|
||||||
$name,
|
$name,
|
||||||
$npc==1?$ownerName:null,
|
$npc==1?$ownerName:null,
|
||||||
$injury,
|
$injury,
|
||||||
$leadership,
|
$leadership,
|
||||||
$lbonus,
|
$lbonus,
|
||||||
$strength,
|
$strength,
|
||||||
$intel,
|
$intel,
|
||||||
getExpLevel($experience),
|
getExpLevel($experience),
|
||||||
getHonor($experience),
|
getHonor($experience),
|
||||||
getDed($dedication),
|
getDed($dedication),
|
||||||
getOfficerLevelText($officerLevel, $nationArr['level']),
|
getOfficerLevelText($officerLevel, $nationArr['level']),
|
||||||
$killturn,
|
$killturn,
|
||||||
$connectCnt
|
$connectCnt
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = [
|
$result = [
|
||||||
'result'=>'true',
|
'result'=>'true',
|
||||||
'list'=>$generalList,
|
'list'=>$generalList,
|
||||||
];
|
];
|
||||||
|
|
||||||
if($withToken){
|
if($withToken){
|
||||||
$now = (new \DateTimeImmutable())->format('Y-m-d H:i:s');
|
$now = (new \DateTimeImmutable())->format('Y-m-d H:i:s');
|
||||||
$tokens = [];
|
$tokens = [];
|
||||||
foreach($db->query('SELECT * FROM select_npc_token WHERE `valid_until`>=%s', $now) as $token){
|
foreach($db->query('SELECT * FROM select_npc_token WHERE `valid_until`>=%s', $now) as $token){
|
||||||
$validUntil = $token['valid_until'];
|
$validUntil = $token['valid_until'];
|
||||||
|
|
||||||
foreach(Json::decode($token['pick_result']) as $pickResult){
|
foreach(Json::decode($token['pick_result']) as $pickResult){
|
||||||
$tokens[$pickResult['no']]=$pickResult['keepCnt'];
|
$tokens[$pickResult['no']]=$pickResult['keepCnt'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$result['token'] = $tokens;
|
$result['token'] = $tokens;
|
||||||
}
|
}
|
||||||
|
|
||||||
Json::die($result);
|
Json::die($result);
|
||||||
|
|||||||
+921
-799
@@ -1,800 +1,922 @@
|
|||||||
jQuery(function($){
|
jQuery(function($) {
|
||||||
|
|
||||||
|
|
||||||
var $generalForm = $('.form_sample .general_detail');
|
var $generalForm = $('.form_sample .general_detail');
|
||||||
var $defenderHeaderForm = $('.form_sample .card-header');
|
var $defenderHeaderForm = $('.form_sample .card-header');
|
||||||
var $defenderColumn = $('.defender-column');
|
var $defenderColumn = $('.defender-column');
|
||||||
|
|
||||||
var defenderNoList = {};
|
var defenderNoList = {};
|
||||||
|
|
||||||
var $attackerCard = $('.attacker_form');
|
var $attackerCard = $('.attacker_form');
|
||||||
|
|
||||||
var initBasicEvent = function(){
|
var initBasicEvent = function() {
|
||||||
|
|
||||||
$('.form_injury').change(function(){
|
if (window.nation) {
|
||||||
var $this = $(this);
|
$('.form_city_level').val(window.city.level);
|
||||||
var $general = getGeneralDetail($this);
|
$('.form_def').val(window.city.def);
|
||||||
var $helptext = $general.find('.injury_helptext');
|
$('.form_wall').val(window.city.wall);
|
||||||
|
$('.form_nation_type').val(window.nation.type);
|
||||||
var injury = parseInt($this.val());
|
$('.form_nation_level').val(window.nation.level);
|
||||||
//FIXME: PHP 코드와 항상 일치하도록 변경
|
$('.form_tech').val(parseInt(window.nation.tech / 1000));
|
||||||
var text = '건강';
|
if (window.nation.capital == window.city.city) {
|
||||||
var color = 'white';
|
$('.attacker_nation .form_is_capital:first').click();
|
||||||
if(injury > 60){
|
$('.defender_nation .form_is_capital:first').click();
|
||||||
text = '위독';
|
} else {
|
||||||
color = 'red';
|
$('.attacker_nation .form_is_capital:second').click();
|
||||||
}
|
$('.defender_nation .form_is_capital:second').click();
|
||||||
else if(injury > 40){
|
}
|
||||||
text = '심각';
|
} else {
|
||||||
color = 'magenta';
|
$('.attacker_nation .form_is_capital:second').click();
|
||||||
}
|
$('.defender_nation .form_is_capital:second').click();
|
||||||
else if(injury > 20){
|
}
|
||||||
text = '중상';
|
|
||||||
color = 'orange';
|
$('.form_injury').change(function() {
|
||||||
}
|
var $this = $(this);
|
||||||
else if(injury > 0){
|
var $general = getGeneralDetail($this);
|
||||||
text = '경상';
|
var $helptext = $general.find('.injury_helptext');
|
||||||
color = 'yellow';
|
|
||||||
}
|
var injury = parseInt($this.val());
|
||||||
$helptext.html(text).css('color', color);
|
//FIXME: PHP 코드와 항상 일치하도록 변경
|
||||||
});
|
var text = '건강';
|
||||||
|
var color = 'white';
|
||||||
$('.export_general').click(function(){
|
if (injury > 60) {
|
||||||
var $btn = $(this);
|
text = '위독';
|
||||||
var $general = getGeneralDetail($btn);
|
color = 'red';
|
||||||
|
} else if (injury > 40) {
|
||||||
var values = exportGeneralInfo($general);
|
text = '심각';
|
||||||
console.log(values);
|
color = 'magenta';
|
||||||
});
|
} else if (injury > 20) {
|
||||||
$('.delete-defender').click(function(){
|
text = '중상';
|
||||||
var $card = getGeneralFrame($(this));
|
color = 'orange';
|
||||||
deleteDefender($card);
|
} else if (injury > 0) {
|
||||||
});
|
text = '경상';
|
||||||
$('.copy-defender').click(function(){
|
color = 'yellow';
|
||||||
var $card = getGeneralFrame($(this));
|
}
|
||||||
copyDefender($card);
|
$helptext.html(text).css('color', color);
|
||||||
});
|
});
|
||||||
|
|
||||||
$('.add-defender').click(function(){
|
$('.export_general').click(function() {
|
||||||
addDefender();
|
var $btn = $(this);
|
||||||
});
|
var $general = getGeneralDetail($btn);
|
||||||
|
|
||||||
$('.btn-general-load').click(function(){
|
var values = exportGeneralInfo($general);
|
||||||
var $file = $(this).prev();
|
console.log(values);
|
||||||
$file[0].click();
|
});
|
||||||
})
|
$('.delete-defender').click(function() {
|
||||||
|
var $card = getGeneralFrame($(this));
|
||||||
$('.form_load_general_file').on('change', function(e){
|
deleteDefender($card);
|
||||||
e.preventDefault();
|
});
|
||||||
var $this = $(this);
|
$('.copy-defender').click(function() {
|
||||||
var $card = getGeneralFrame($this);
|
var $card = getGeneralFrame($(this));
|
||||||
|
copyDefender($card);
|
||||||
var files = e.target.files;
|
});
|
||||||
|
|
||||||
importGeneralInfoByFile(files, $card);
|
$('.add-defender').click(function() {
|
||||||
return false;
|
addDefender();
|
||||||
});
|
});
|
||||||
|
|
||||||
$('.btn-general-save').click(function(){
|
$('.btn-general-load').click(function() {
|
||||||
var $this = $(this);
|
var $file = $(this).prev();
|
||||||
var $general = getGeneralDetail($this);
|
$file[0].click();
|
||||||
var generalData = exportGeneralInfo($general);
|
})
|
||||||
|
|
||||||
var filename = "general_{0}.json".format(generalData.name);
|
$('.form_load_general_file').on('change', function(e) {
|
||||||
var saveData = JSON.stringify({
|
e.preventDefault();
|
||||||
objType:'general',
|
var $this = $(this);
|
||||||
data:generalData
|
var $card = getGeneralFrame($this);
|
||||||
}, null, 4);
|
|
||||||
|
var files = e.target.files;
|
||||||
download(saveData, filename, 'application/json');
|
|
||||||
});
|
importGeneralInfoByFile(files, $card);
|
||||||
|
return false;
|
||||||
$('.btn-battle-load').click(function(){
|
});
|
||||||
var $file = $(this).prev();
|
|
||||||
$file[0].click();
|
$('.btn-general-import-server').click(function() {
|
||||||
})
|
var $this = $(this);
|
||||||
|
var $card = getGeneralFrame($this);
|
||||||
$('.form_load_battle_file').on('change', function(e){
|
|
||||||
e.preventDefault();
|
var $modal = $('#importModal');
|
||||||
var $this = $(this);
|
$modal.data('target', $card);
|
||||||
var files = e.target.files;
|
$modal.modal('show');
|
||||||
|
});
|
||||||
importBattleInfoByFile(files);
|
|
||||||
return false;
|
$('.btn-general-save').click(function() {
|
||||||
});
|
var $this = $(this);
|
||||||
|
var $general = getGeneralDetail($this);
|
||||||
$('.btn-battle-save').click(function(){
|
var generalData = exportGeneralInfo($general);
|
||||||
var battleData = exportAllData();
|
|
||||||
var filename = "battle_{0}.json".format(moment().format('YYYYMMDD_hhmmss'));
|
var filename = "general_{0}.json".format(generalData.name);
|
||||||
var saveData = JSON.stringify({
|
var saveData = JSON.stringify({
|
||||||
objType:'battle',
|
objType: 'general',
|
||||||
data:battleData
|
data: generalData
|
||||||
}, null, 4);
|
}, null, 4);
|
||||||
|
|
||||||
download(saveData, filename, 'application/json');
|
download(saveData, filename, 'application/json');
|
||||||
})
|
});
|
||||||
|
|
||||||
var $generals = $('.general_detail');
|
$('.btn-battle-load').click(function() {
|
||||||
$generals.bind('dragover dragleave', function(e) {
|
var $file = $(this).prev();
|
||||||
e.stopPropagation()
|
$file[0].click();
|
||||||
e.preventDefault()
|
})
|
||||||
})
|
|
||||||
$generals.bind('drop', function(e){
|
$('.form_load_battle_file').on('change', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
var $this = $(this);
|
var $this = $(this);
|
||||||
var $card = getGeneralFrame($this);
|
var files = e.target.files;
|
||||||
|
|
||||||
var files = e.originalEvent.dataTransfer.files;
|
importBattleInfoByFile(files);
|
||||||
|
return false;
|
||||||
importGeneralInfoByFile(files, $card);
|
});
|
||||||
return false;
|
|
||||||
});
|
$('.btn-battle-save').click(function() {
|
||||||
|
var battleData = exportAllData();
|
||||||
var $battlePad = $('.dragpad_battle');
|
var filename = "battle_{0}.json".format(moment().format('YYYYMMDD_hhmmss'));
|
||||||
$battlePad.bind('dragover dragleave', function(e) {
|
var saveData = JSON.stringify({
|
||||||
e.stopPropagation()
|
objType: 'battle',
|
||||||
e.preventDefault()
|
data: battleData
|
||||||
})
|
}, null, 4);
|
||||||
$battlePad.bind('drop', function(e){
|
|
||||||
e.preventDefault();
|
download(saveData, filename, 'application/json');
|
||||||
|
})
|
||||||
var files = e.originalEvent.dataTransfer.files;
|
|
||||||
|
var $generals = $('.general_detail');
|
||||||
importBattleInfoByFile(files);
|
$generals.bind('dragover dragleave', function(e) {
|
||||||
return false;
|
e.stopPropagation()
|
||||||
});
|
e.preventDefault()
|
||||||
}
|
})
|
||||||
|
$generals.bind('drop', function(e) {
|
||||||
var importGeneralInfo = function($general, data){
|
e.preventDefault();
|
||||||
var setVal = function(query, val){
|
var $this = $(this);
|
||||||
$general.find(query).val(val).change();
|
var $card = getGeneralFrame($this);
|
||||||
}
|
|
||||||
|
var files = e.originalEvent.dataTransfer.files;
|
||||||
setVal('.form_general_name', data.name);
|
|
||||||
|
importGeneralInfoByFile(files, $card);
|
||||||
setVal('.form_officer_level', data.officer_level);
|
return false;
|
||||||
setVal('.form_exp_level', data.explevel);
|
});
|
||||||
setVal('.form_injury', data.injury);
|
|
||||||
|
var $battlePad = $('.dragpad_battle');
|
||||||
setVal('.form_leadership', data.leadership);
|
$battlePad.bind('dragover dragleave', function(e) {
|
||||||
setVal('.form_general_horse', data.horse);
|
e.stopPropagation()
|
||||||
setVal('.form_strength', data.strength);
|
e.preventDefault()
|
||||||
setVal('.form_general_weap', data.weapon);
|
})
|
||||||
setVal('.form_intel', data.intel);
|
$battlePad.bind('drop', function(e) {
|
||||||
setVal('.form_general_book', data.book);
|
e.preventDefault();
|
||||||
setVal('.form_general_item', data.item);
|
|
||||||
|
var files = e.originalEvent.dataTransfer.files;
|
||||||
setVal('.form_injury', data.injury);
|
|
||||||
|
importBattleInfoByFile(files);
|
||||||
setVal('.form_rice', data.rice);
|
return false;
|
||||||
|
});
|
||||||
setVal('.form_general_character', data.personal);
|
}
|
||||||
setVal('.form_general_special_war', data.special2);
|
|
||||||
|
var importGeneralInfo = function($general, data) {
|
||||||
setVal('.form_crew', data.crew);
|
var setVal = function(query, val) {
|
||||||
setVal('.form_crewtype', data.crewtype);
|
$general.find(query).val(val).change();
|
||||||
setVal('.form_atmos', data.atmos);
|
}
|
||||||
setVal('.form_train', data.train);
|
|
||||||
|
setVal('.form_general_name', data.name);
|
||||||
setVal('.form_dex1', data.dex1);
|
|
||||||
setVal('.form_dex2', data.dex2);
|
setVal('.form_officer_level', data.officer_level);
|
||||||
setVal('.form_dex3', data.dex3);
|
setVal('.form_exp_level', data.explevel);
|
||||||
setVal('.form_dex4', data.dex4);
|
|
||||||
setVal('.form_dex5', data.dex5);
|
setVal('.form_leadership', data.leadership);
|
||||||
setVal('.form_defence_train', data.defence_train);
|
setVal('.form_general_horse', data.horse);
|
||||||
|
setVal('.form_strength', data.strength);
|
||||||
if(!setGeneralNo($general, data.no)){
|
setVal('.form_general_weap', data.weapon);
|
||||||
setGeneralNo($general, generateNewGeneralNo());
|
setVal('.form_intel', data.intel);
|
||||||
}
|
setVal('.form_general_book', data.book);
|
||||||
}
|
setVal('.form_general_item', data.item);
|
||||||
|
|
||||||
var exportGeneralInfo = function($general){
|
setVal('.form_injury', data.injury);
|
||||||
var getInt = function(query){
|
|
||||||
return parseInt($general.find(query).val());
|
setVal('.form_rice', data.rice);
|
||||||
}
|
|
||||||
|
setVal('.form_general_character', data.personal);
|
||||||
var getVal = function(query){
|
setVal('.form_general_special_war', data.special2);
|
||||||
return $general.find(query).val();
|
|
||||||
}
|
setVal('.form_crew', data.crew);
|
||||||
|
setVal('.form_crewtype', data.crewtype);
|
||||||
return {
|
setVal('.form_atmos', data.atmos);
|
||||||
no:getGeneralNo($general),
|
setVal('.form_train', data.train);
|
||||||
name:getVal('.form_general_name'),
|
|
||||||
officer_level:getInt('.form_officer_level'),
|
setVal('.form_dex1', data.dex1);
|
||||||
explevel:getInt('.form_exp_level'),
|
setVal('.form_dex2', data.dex2);
|
||||||
|
setVal('.form_dex3', data.dex3);
|
||||||
leadership:getInt('.form_leadership'),
|
setVal('.form_dex4', data.dex4);
|
||||||
horse:getVal('.form_general_horse'),
|
setVal('.form_dex5', data.dex5);
|
||||||
strength:getInt('.form_strength'),
|
setVal('.form_defence_train', data.defence_train);
|
||||||
weapon:getVal('.form_general_weap'),
|
|
||||||
intel:getInt('.form_intel'),
|
if (!setGeneralNo($general, data.no)) {
|
||||||
book:getVal('.form_general_book'),
|
setGeneralNo($general, generateNewGeneralNo());
|
||||||
item:getVal('.form_general_item'),
|
}
|
||||||
|
}
|
||||||
injury:getInt('.form_injury'),
|
|
||||||
|
var exportGeneralInfo = function($general) {
|
||||||
rice:getInt('.form_rice'),
|
var getInt = function(query) {
|
||||||
|
return parseInt($general.find(query).val());
|
||||||
personal:getVal('.form_general_character'),
|
}
|
||||||
special2:getVal('.form_general_special_war'),
|
|
||||||
|
var getVal = function(query) {
|
||||||
crew:getInt('.form_crew'),
|
return $general.find(query).val();
|
||||||
crewtype:getInt('.form_crewtype'),
|
}
|
||||||
atmos:getInt('.form_atmos'),
|
|
||||||
train:getInt('.form_train'),
|
return {
|
||||||
|
no: getGeneralNo($general),
|
||||||
dex1:getInt('.form_dex1'),
|
name: getVal('.form_general_name'),
|
||||||
dex2:getInt('.form_dex2'),
|
officer_level: getInt('.form_officer_level'),
|
||||||
dex3:getInt('.form_dex3'),
|
explevel: getInt('.form_exp_level'),
|
||||||
dex4:getInt('.form_dex4'),
|
|
||||||
dex5:getInt('.form_dex5'),
|
leadership: getInt('.form_leadership'),
|
||||||
defence_train:getInt('.form_defence_train'),
|
horse: getVal('.form_general_horse'),
|
||||||
};
|
strength: getInt('.form_strength'),
|
||||||
}
|
weapon: getVal('.form_general_weap'),
|
||||||
|
intel: getInt('.form_intel'),
|
||||||
var importBattleInfoByFile = function(files){
|
book: getVal('.form_general_book'),
|
||||||
if(files === null){
|
item: getVal('.form_general_item'),
|
||||||
alert('파일 에러!');
|
|
||||||
return false;
|
injury: getInt('.form_injury'),
|
||||||
}
|
|
||||||
|
rice: getInt('.form_rice'),
|
||||||
if(files.length < 1){
|
|
||||||
alert("파일 에러!");
|
personal: getVal('.form_general_character'),
|
||||||
return false;
|
special2: getVal('.form_general_special_war'),
|
||||||
}
|
|
||||||
|
crew: getInt('.form_crew'),
|
||||||
|
crewtype: getInt('.form_crewtype'),
|
||||||
var file = files[0];
|
atmos: getInt('.form_atmos'),
|
||||||
if(file.size > 1024*1024){
|
train: getInt('.form_train'),
|
||||||
alert('파일이 너무 큽니다!');
|
|
||||||
return false;
|
dex1: getInt('.form_dex1'),
|
||||||
}
|
dex2: getInt('.form_dex2'),
|
||||||
if(file.type === ''){
|
dex3: getInt('.form_dex3'),
|
||||||
alert('폴더를 업로드할 수 없습니다!');
|
dex4: getInt('.form_dex4'),
|
||||||
return false;
|
dex5: getInt('.form_dex5'),
|
||||||
}
|
defence_train: getInt('.form_defence_train'),
|
||||||
|
};
|
||||||
var reader = new FileReader();
|
}
|
||||||
reader.onload = function(){
|
|
||||||
var battleData = {};
|
var importBattleInfoByFile = function(files) {
|
||||||
try {
|
if (files === null) {
|
||||||
battleData = JSON.parse(reader.result);
|
alert('파일 에러!');
|
||||||
} catch(e) {
|
return false;
|
||||||
alert('올바르지 않은 파일 형식입니다');
|
}
|
||||||
return false;
|
|
||||||
}
|
if (files.length < 1) {
|
||||||
|
alert("파일 에러!");
|
||||||
if(!('objType' in battleData)){
|
return false;
|
||||||
alert('파일 형식을 확인할 수 없습니다');
|
}
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
var file = files[0];
|
||||||
if(battleData.objType != 'battle'){
|
if (file.size > 1024 * 1024) {
|
||||||
alert('전투 데이터가 아닙니다');
|
alert('파일이 너무 큽니다!');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (file.type === '') {
|
||||||
importBattleInfo(battleData.data);
|
alert('폴더를 업로드할 수 없습니다!');
|
||||||
return true;
|
return false;
|
||||||
};
|
}
|
||||||
|
|
||||||
try {
|
var reader = new FileReader();
|
||||||
|
reader.onload = function() {
|
||||||
reader.readAsText(file);
|
var battleData = {};
|
||||||
}
|
try {
|
||||||
catch(e) {
|
battleData = JSON.parse(reader.result);
|
||||||
alert('파일을 읽는데 실패했습니다.');
|
} catch (e) {
|
||||||
return false;
|
alert('올바르지 않은 파일 형식입니다');
|
||||||
}
|
return false;
|
||||||
|
}
|
||||||
return true;
|
|
||||||
}
|
if (!('objType' in battleData)) {
|
||||||
|
alert('파일 형식을 확인할 수 없습니다');
|
||||||
var importGeneralInfoByFile = function(files, $card){
|
return false;
|
||||||
if($card === undefined){
|
}
|
||||||
$card = addDefender();
|
|
||||||
}
|
if (battleData.objType != 'battle') {
|
||||||
|
alert('전투 데이터가 아닙니다');
|
||||||
if(files === null){
|
return false;
|
||||||
alert('파일 에러!');
|
}
|
||||||
return false;
|
|
||||||
}
|
importBattleInfo(battleData.data);
|
||||||
|
return true;
|
||||||
if(files.length < 1){
|
};
|
||||||
alert("파일 에러!");
|
|
||||||
return false;
|
try {
|
||||||
}
|
|
||||||
|
reader.readAsText(file);
|
||||||
|
} catch (e) {
|
||||||
var file = files[0];
|
alert('파일을 읽는데 실패했습니다.');
|
||||||
if(file.size > 1024*1024){
|
return false;
|
||||||
alert('파일이 너무 큽니다!');
|
}
|
||||||
return false;
|
|
||||||
}
|
return true;
|
||||||
if(file.type === ''){
|
}
|
||||||
alert('폴더를 업로드할 수 없습니다!');
|
|
||||||
return false;
|
var importGeneralInfoByFile = function(files, $card) {
|
||||||
}
|
if ($card === undefined) {
|
||||||
|
$card = addDefender();
|
||||||
var reader = new FileReader();
|
}
|
||||||
reader.onload = function(){
|
|
||||||
var generalData = {};
|
if (files === null) {
|
||||||
try {
|
alert('파일 에러!');
|
||||||
generalData = JSON.parse(reader.result);
|
return false;
|
||||||
} catch(e) {
|
}
|
||||||
alert('올바르지 않은 파일 형식입니다');
|
|
||||||
return false;
|
if (files.length < 1) {
|
||||||
}
|
alert("파일 에러!");
|
||||||
|
return false;
|
||||||
if(!('objType' in generalData)){
|
}
|
||||||
alert('파일 형식을 확인할 수 없습니다');
|
|
||||||
return false;
|
|
||||||
}
|
var file = files[0];
|
||||||
|
if (file.size > 1024 * 1024) {
|
||||||
if(generalData.objType == 'battle'){
|
alert('파일이 너무 큽니다!');
|
||||||
importBattleInfo(generalData.data);
|
return false;
|
||||||
return true;
|
}
|
||||||
}
|
if (file.type === '') {
|
||||||
if(generalData.objType != 'general'){
|
alert('폴더를 업로드할 수 없습니다!');
|
||||||
alert('장수 데이터가 아닙니다');
|
return false;
|
||||||
return false;
|
}
|
||||||
}
|
|
||||||
|
var reader = new FileReader();
|
||||||
$card.find('.form_load_general_file').val('');
|
reader.onload = function() {
|
||||||
|
var generalData = {};
|
||||||
importGeneralInfo($card, generalData.data);
|
try {
|
||||||
return true;
|
generalData = JSON.parse(reader.result);
|
||||||
};
|
} catch (e) {
|
||||||
|
alert('올바르지 않은 파일 형식입니다');
|
||||||
try {
|
return false;
|
||||||
|
}
|
||||||
reader.readAsText(file);
|
|
||||||
}
|
if (!('objType' in generalData)) {
|
||||||
catch(e) {
|
alert('파일 형식을 확인할 수 없습니다');
|
||||||
alert('파일을 읽는데 실패했습니다.');
|
return false;
|
||||||
return false;
|
}
|
||||||
}
|
|
||||||
|
if (generalData.objType == 'battle') {
|
||||||
return true;
|
importBattleInfo(generalData.data);
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
var extendGeneralInfoForDB = function(generalData){
|
if (generalData.objType != 'general') {
|
||||||
|
alert('장수 데이터가 아닙니다');
|
||||||
var dbVal = {
|
return false;
|
||||||
nation: (generalData.no)<=1 ? 1 : 2,
|
}
|
||||||
city: (generalData.no)<=1 ? 1 : 3,
|
|
||||||
turntime:'2018-08-26 12:00',
|
$card.find('.form_load_general_file').val('');
|
||||||
special:defaultSpecialDomestic,
|
|
||||||
leadership_exp:0,
|
importGeneralInfo($card, generalData.data);
|
||||||
strength_exp:0,
|
return true;
|
||||||
intel_exp:0,
|
};
|
||||||
|
|
||||||
gold:10000,
|
try {
|
||||||
|
|
||||||
dedication:0,
|
reader.readAsText(file);
|
||||||
|
} catch (e) {
|
||||||
recent_war:'2018-08-26 12:00',
|
alert('파일을 읽는데 실패했습니다.');
|
||||||
experience:Math.pow(generalData.explevel, 2),
|
return false;
|
||||||
};
|
}
|
||||||
|
|
||||||
return $.extend({}, generalData, dbVal);
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
var getGeneralFrame = function($btn){
|
var extendGeneralInfoForDB = function(generalData) {
|
||||||
var $card = $btn.closest('.general_form');
|
|
||||||
return $card;
|
var dbVal = {
|
||||||
}
|
nation: (generalData.no) <= 1 ? 1 : 2,
|
||||||
|
city: (generalData.no) <= 1 ? 1 : 3,
|
||||||
var getGeneralDetail = function($btn){
|
turntime: '2018-08-26 12:00',
|
||||||
var $card = getGeneralFrame($btn);
|
special: defaultSpecialDomestic,
|
||||||
var $general = $card.find('.general_detail');
|
leadership_exp: 0,
|
||||||
return $general;
|
strength_exp: 0,
|
||||||
}
|
intel_exp: 0,
|
||||||
|
|
||||||
var getGeneralNo = function($btn){
|
gold: 10000,
|
||||||
return parseInt(getGeneralFrame($btn).data('general_no'));
|
|
||||||
}
|
dedication: 0,
|
||||||
|
|
||||||
var setGeneralNo = function($btn, value){
|
recent_war: '2018-08-26 12:00',
|
||||||
if(value == 1){
|
experience: Math.pow(generalData.explevel, 2),
|
||||||
//1번은 무조건 공격자임
|
};
|
||||||
return false;
|
|
||||||
}
|
return $.extend({}, generalData, dbVal);
|
||||||
if(value in defenderNoList){
|
}
|
||||||
return false;
|
|
||||||
}
|
var getGeneralFrame = function($btn) {
|
||||||
var $card = getGeneralFrame($btn);
|
var $card = $btn.closest('.general_form');
|
||||||
$card.data('general_no', value);
|
return $card;
|
||||||
defenderNoList[value] = $card;
|
}
|
||||||
return true;
|
|
||||||
}
|
var getGeneralDetail = function($btn) {
|
||||||
|
var $card = getGeneralFrame($btn);
|
||||||
var generateNewGeneralNo = function(){
|
var $general = $card.find('.general_detail');
|
||||||
while(true){
|
return $general;
|
||||||
var newGeneralNo = parseInt(Math.random()*(1<<24))+2;
|
}
|
||||||
if(newGeneralNo in defenderNoList){
|
|
||||||
continue;
|
var getGeneralNo = function($btn) {
|
||||||
}
|
return parseInt(getGeneralFrame($btn).data('general_no'));
|
||||||
return newGeneralNo;
|
}
|
||||||
}
|
|
||||||
}
|
var setGeneralNo = function($btn, value) {
|
||||||
|
if (value == 1) {
|
||||||
var deleteGeneralNo = function($btn){
|
//1번은 무조건 공격자임
|
||||||
var $card = getGeneralFrame($btn);
|
return false;
|
||||||
$card.removeData('general_no');
|
}
|
||||||
var generalNo = getGeneralNo($card);
|
if (value in defenderNoList) {
|
||||||
delete defenderNoList[generalNo];
|
return false;
|
||||||
}
|
}
|
||||||
|
var $card = getGeneralFrame($btn);
|
||||||
var addDefender = function($cardAfter){
|
$card.data('general_no', value);
|
||||||
var $newCard = $('<div class="card mb-2 defender_form general_form"></div>');
|
defenderNoList[value] = $card;
|
||||||
|
return true;
|
||||||
if($cardAfter === undefined){
|
}
|
||||||
$defenderColumn.append($newCard);
|
|
||||||
}
|
var generateNewGeneralNo = function() {
|
||||||
else{
|
while (true) {
|
||||||
$cardAfter.after($newCard);
|
var newGeneralNo = parseInt(Math.random() * (1 << 24)) + 2;
|
||||||
}
|
if (newGeneralNo in defenderNoList) {
|
||||||
|
continue;
|
||||||
$newCard.append($defenderHeaderForm.clone(true,true));
|
}
|
||||||
$newCard.append($generalForm.clone(true,true));
|
return newGeneralNo;
|
||||||
|
}
|
||||||
$newGeneral = getGeneralDetail($newCard);
|
}
|
||||||
setGeneralNo($newCard, generateNewGeneralNo());
|
|
||||||
|
var deleteGeneralNo = function($btn) {
|
||||||
return $newCard;
|
var $card = getGeneralFrame($btn);
|
||||||
}
|
$card.removeData('general_no');
|
||||||
|
var generalNo = getGeneralNo($card);
|
||||||
var deleteDefender = function($card){
|
delete defenderNoList[generalNo];
|
||||||
deleteGeneralNo($card);
|
}
|
||||||
$card.detach();
|
|
||||||
}
|
var addDefender = function($cardAfter) {
|
||||||
|
var $newCard = $('<div class="card mb-2 defender_form general_form"></div>');
|
||||||
var copyDefender = function($card){
|
|
||||||
var $general = getGeneralDetail($card);
|
if ($cardAfter === undefined) {
|
||||||
|
$defenderColumn.append($newCard);
|
||||||
var generalData = exportGeneralInfo($general);
|
} else {
|
||||||
var $newObj = addDefender($card);
|
$cardAfter.after($newCard);
|
||||||
importGeneralInfo(getGeneralDetail($newObj), generalData);
|
}
|
||||||
}
|
|
||||||
|
$newCard.append($defenderHeaderForm.clone(true, true));
|
||||||
var importBattleInfo = function(battleData){
|
$newCard.append($generalForm.clone(true, true));
|
||||||
|
|
||||||
$('.form_load_battle_file').val('');
|
$newGeneral = getGeneralDetail($newCard);
|
||||||
console.log(battleData);
|
setGeneralNo($newCard, generateNewGeneralNo());
|
||||||
|
|
||||||
var $attackerNation = $('.attacker_nation');
|
return $newCard;
|
||||||
var $defenderNation = $('.defender_nation');
|
}
|
||||||
|
|
||||||
var attackerGeneral = battleData.attackerGeneral;
|
var deleteDefender = function($card) {
|
||||||
var attackerCity = battleData.attackerCity;
|
deleteGeneralNo($card);
|
||||||
var attackerNation = battleData.attackerNation;
|
$card.detach();
|
||||||
|
}
|
||||||
var defenderGenerals = battleData.defenderGenerals;
|
|
||||||
var defenderCity = battleData.defenderCity;
|
var copyDefender = function($card) {
|
||||||
var defenderNation = battleData.defenderNation;
|
var $general = getGeneralDetail($card);
|
||||||
|
|
||||||
$('#year').val(battleData.year);
|
var generalData = exportGeneralInfo($general);
|
||||||
$('#month').val(battleData.month);
|
var $newObj = addDefender($card);
|
||||||
$('#repeat_cnt').val(battleData.repeatCnt);
|
importGeneralInfo(getGeneralDetail($newObj), generalData);
|
||||||
|
}
|
||||||
$('.delete-defender').click();
|
|
||||||
|
var importBattleInfo = function(battleData) {
|
||||||
$attackerNation.find('.form_nation_type').val(attackerNation.type);
|
|
||||||
$attackerNation.find('.form_tech').val(Math.floor(attackerNation.tech/1000));
|
$('.form_load_battle_file').val('');
|
||||||
$attackerNation.find('.form_nation_level').val(attackerNation.level);
|
console.log(battleData);
|
||||||
if(attackerNation.capital == 1){
|
|
||||||
$attackerNation.find('.form_is_capital:first').click();
|
var $attackerNation = $('.attacker_nation');
|
||||||
}
|
var $defenderNation = $('.defender_nation');
|
||||||
else{
|
|
||||||
$attackerNation.find('.form_is_capital:last').click();
|
var attackerGeneral = battleData.attackerGeneral;
|
||||||
}
|
var attackerCity = battleData.attackerCity;
|
||||||
$attackerNation.find('.form_city_level').val(attackerCity.level);
|
var attackerNation = battleData.attackerNation;
|
||||||
|
|
||||||
importGeneralInfo($('.attacker_form'), attackerGeneral);
|
var defenderGenerals = battleData.defenderGenerals;
|
||||||
|
var defenderCity = battleData.defenderCity;
|
||||||
$defenderNation.find('.form_nation_type').val(defenderNation.type);
|
var defenderNation = battleData.defenderNation;
|
||||||
$defenderNation.find('.form_tech').val(Math.floor(defenderNation.tech/1000));
|
|
||||||
$defenderNation.find('.form_nation_level').val(defenderNation.level);
|
$('#year').val(battleData.year);
|
||||||
if(defenderNation.capital == 1){
|
$('#month').val(battleData.month);
|
||||||
$defenderNation.find('.form_is_capital:first').click();
|
$('#repeat_cnt').val(battleData.repeatCnt);
|
||||||
}
|
|
||||||
else{
|
$('.delete-defender').click();
|
||||||
$defenderNation.find('.form_is_capital:last').click();
|
|
||||||
}
|
$attackerNation.find('.form_nation_type').val(attackerNation.type);
|
||||||
$defenderNation.find('.form_city_level').val(defenderCity.level);
|
$attackerNation.find('.form_tech').val(Math.floor(attackerNation.tech / 1000));
|
||||||
$('#city_def').val(defenderCity.def);
|
$attackerNation.find('.form_nation_level').val(attackerNation.level);
|
||||||
$('#city_wall').val(defenderCity.wall);
|
if (attackerNation.capital == 1) {
|
||||||
|
$attackerNation.find('.form_is_capital:first').click();
|
||||||
$.each(defenderGenerals, function(idx, defenderGeneral){
|
} else {
|
||||||
var $card = addDefender();
|
$attackerNation.find('.form_is_capital:last').click();
|
||||||
importGeneralInfo($card, defenderGeneral);
|
}
|
||||||
});
|
$attackerNation.find('.form_city_level').val(attackerCity.level);
|
||||||
}
|
|
||||||
|
importGeneralInfo($('.attacker_form'), attackerGeneral);
|
||||||
var exportAllData = function(){
|
|
||||||
var $attackerNation = $('.attacker_nation');
|
$defenderNation.find('.form_nation_type').val(defenderNation.type);
|
||||||
var $defenderNation = $('.defender_nation');
|
$defenderNation.find('.form_tech').val(Math.floor(defenderNation.tech / 1000));
|
||||||
|
$defenderNation.find('.form_nation_level').val(defenderNation.level);
|
||||||
var attackerGeneral = exportGeneralInfo($('.attacker_form'));
|
if (defenderNation.capital == 1) {
|
||||||
|
$defenderNation.find('.form_is_capital:first').click();
|
||||||
var attackerCity = {
|
} else {
|
||||||
level:parseInt($attackerNation.find('.form_city_level').val()),
|
$defenderNation.find('.form_is_capital:last').click();
|
||||||
};
|
}
|
||||||
|
$defenderNation.find('.form_city_level').val(defenderCity.level);
|
||||||
var attackerNation = {
|
$('#city_def').val(defenderCity.def);
|
||||||
type:$attackerNation.find('.form_nation_type').val(),
|
$('#city_wall').val(defenderCity.wall);
|
||||||
tech:parseInt($attackerNation.find('.form_tech').val()) * 1000,
|
|
||||||
level:parseInt($attackerNation.find('.form_nation_level').val()),
|
$.each(defenderGenerals, function(idx, defenderGeneral) {
|
||||||
capital:$attackerNation.find('.form_is_capital:checked').val()=='1'?1:2,
|
var $card = addDefender();
|
||||||
}
|
importGeneralInfo($card, defenderGeneral);
|
||||||
|
});
|
||||||
var defenderGenerals = $('.defender_form').map(function(){
|
}
|
||||||
return exportGeneralInfo($(this));
|
|
||||||
}).toArray();
|
var exportAllData = function() {
|
||||||
|
var $attackerNation = $('.attacker_nation');
|
||||||
var defenderCity = {
|
var $defenderNation = $('.defender_nation');
|
||||||
def: parseInt($('#city_def').val()),
|
|
||||||
wall: parseInt($('#city_wall').val()),
|
var attackerGeneral = exportGeneralInfo($('.attacker_form'));
|
||||||
level:parseInt($defenderNation.find('.form_city_level').val()),
|
|
||||||
};
|
var attackerCity = {
|
||||||
|
level: parseInt($attackerNation.find('.form_city_level').val()),
|
||||||
var defenderNation = {
|
};
|
||||||
type:$defenderNation.find('.form_nation_type').val(),
|
|
||||||
tech:parseInt($defenderNation.find('.form_tech').val()) * 1000,
|
var attackerNation = {
|
||||||
level:parseInt($defenderNation.find('.form_nation_level').val()),
|
type: $attackerNation.find('.form_nation_type').val(),
|
||||||
capital:$defenderNation.find('.form_is_capital:checked').val()=='1'?3:4,
|
tech: parseInt($attackerNation.find('.form_tech').val()) * 1000,
|
||||||
}
|
level: parseInt($attackerNation.find('.form_nation_level').val()),
|
||||||
|
capital: $attackerNation.find('.form_is_capital:checked').val() == '1' ? 1 : 2,
|
||||||
var year = parseInt($('#year').val());
|
}
|
||||||
var month = parseInt($('#month').val());
|
|
||||||
var repeatCnt = parseInt($('#repeat_cnt').val());
|
var defenderGenerals = $('.defender_form').map(function() {
|
||||||
|
return exportGeneralInfo($(this));
|
||||||
return {
|
}).toArray();
|
||||||
attackerGeneral:attackerGeneral,
|
|
||||||
attackerCity:attackerCity,
|
var defenderCity = {
|
||||||
attackerNation:attackerNation,
|
def: parseInt($('#city_def').val()),
|
||||||
|
wall: parseInt($('#city_wall').val()),
|
||||||
defenderGenerals:defenderGenerals,
|
level: parseInt($defenderNation.find('.form_city_level').val()),
|
||||||
defenderCity:defenderCity,
|
};
|
||||||
defenderNation:defenderNation,
|
|
||||||
|
var defenderNation = {
|
||||||
year:year,
|
type: $defenderNation.find('.form_nation_type').val(),
|
||||||
month:month,
|
tech: parseInt($defenderNation.find('.form_tech').val()) * 1000,
|
||||||
repeatCnt:repeatCnt,
|
level: parseInt($defenderNation.find('.form_nation_level').val()),
|
||||||
};
|
capital: $defenderNation.find('.form_is_capital:checked').val() == '1' ? 3 : 4,
|
||||||
}
|
}
|
||||||
|
|
||||||
var extendAllDataForDB = function(allData){
|
var year = parseInt($('#year').val());
|
||||||
var defaultNation = {
|
var month = parseInt($('#month').val());
|
||||||
nation:0,
|
var repeatCnt = parseInt($('#repeat_cnt').val());
|
||||||
name:'재야',
|
|
||||||
capital:0,
|
return {
|
||||||
level:0,
|
attackerGeneral: attackerGeneral,
|
||||||
gold:0,
|
attackerCity: attackerCity,
|
||||||
rice:2000,
|
attackerNation: attackerNation,
|
||||||
type:'None',
|
|
||||||
tech:0,
|
defenderGenerals: defenderGenerals,
|
||||||
gennum:200,
|
defenderCity: defenderCity,
|
||||||
};
|
defenderNation: defenderNation,
|
||||||
|
|
||||||
var defaultCity = {
|
year: year,
|
||||||
nation:0,
|
month: month,
|
||||||
supply:1,
|
repeatCnt: repeatCnt,
|
||||||
name:'도시',
|
};
|
||||||
|
}
|
||||||
pop:500000,
|
|
||||||
agri:10000,
|
var extendAllDataForDB = function(allData) {
|
||||||
comm:10000,
|
var defaultNation = {
|
||||||
secu:10000,
|
nation: 0,
|
||||||
def:1000,
|
name: '재야',
|
||||||
wall:1000,
|
capital: 0,
|
||||||
|
level: 0,
|
||||||
trust:100,
|
gold: 0,
|
||||||
|
rice: 2000,
|
||||||
pop_max:600000,
|
type: 'None',
|
||||||
agri_max:12000,
|
tech: 0,
|
||||||
comm_max:12000,
|
gennum: 200,
|
||||||
secu_max:10000,
|
};
|
||||||
def_max:12000,
|
|
||||||
wall_max:12000,
|
var defaultCity = {
|
||||||
|
nation: 0,
|
||||||
dead:0,
|
supply: 1,
|
||||||
|
name: '도시',
|
||||||
state:0,
|
|
||||||
|
pop: 500000,
|
||||||
conflict:'{}',
|
agri: 10000,
|
||||||
};
|
comm: 10000,
|
||||||
|
secu: 10000,
|
||||||
var attackerNation = $.extend({}, defaultNation, allData.attackerNation);
|
def: 1000,
|
||||||
attackerNation.nation = 1;
|
wall: 1000,
|
||||||
attackerNation.name = '출병국';
|
|
||||||
|
trust: 100,
|
||||||
var attackerCity = $.extend({}, defaultCity, allData.attackerCity);
|
|
||||||
attackerCity.nation = 1;
|
pop_max: 600000,
|
||||||
attackerCity.city = 1;
|
agri_max: 12000,
|
||||||
|
comm_max: 12000,
|
||||||
var attackerGeneral = extendGeneralInfoForDB(allData.attackerGeneral);
|
secu_max: 10000,
|
||||||
if(2 <= attackerGeneral.officer_level && attackerGeneral.officer_level <= 4){
|
def_max: 12000,
|
||||||
attackerGeneral.officer_city = 1;
|
wall_max: 12000,
|
||||||
}
|
|
||||||
else{
|
dead: 0,
|
||||||
attackerGeneral.officer_city = 0;
|
|
||||||
}
|
state: 0,
|
||||||
|
|
||||||
var defenderNation = $.extend({}, defaultNation, allData.defenderNation);
|
conflict: '{}',
|
||||||
defenderNation.nation = 2;
|
};
|
||||||
defenderNation.name = '수비국';
|
|
||||||
|
var attackerNation = $.extend({}, defaultNation, allData.attackerNation);
|
||||||
var defenderCity = $.extend({}, defaultCity, allData.defenderCity);
|
attackerNation.nation = 1;
|
||||||
defenderCity.nation = 2;
|
attackerNation.name = '출병국';
|
||||||
defenderCity.city = 3;
|
|
||||||
defenderCity.wall_max = defenderCity.wall/5*6;
|
var attackerCity = $.extend({}, defaultCity, allData.attackerCity);
|
||||||
defenderCity.def_max = defenderCity.def/5*6;
|
attackerCity.nation = 1;
|
||||||
|
attackerCity.city = 1;
|
||||||
var defenderGenerals = [];
|
|
||||||
$.each(allData.defenderGenerals, function(){
|
var attackerGeneral = extendGeneralInfoForDB(allData.attackerGeneral);
|
||||||
var defenderGeneral = extendGeneralInfoForDB(this);
|
if (2 <= attackerGeneral.officer_level && attackerGeneral.officer_level <= 4) {
|
||||||
if(2 <= defenderGeneral.officer_level && defenderGeneral.officer_level <= 4){
|
attackerGeneral.officer_city = 1;
|
||||||
defenderGeneral.officer_city = 3;
|
} else {
|
||||||
}
|
attackerGeneral.officer_city = 0;
|
||||||
else{
|
}
|
||||||
defenderGeneral.officer_city = 0;
|
|
||||||
}
|
var defenderNation = $.extend({}, defaultNation, allData.defenderNation);
|
||||||
|
defenderNation.nation = 2;
|
||||||
defenderGenerals.push(defenderGeneral);
|
defenderNation.name = '수비국';
|
||||||
});
|
|
||||||
|
var defenderCity = $.extend({}, defaultCity, allData.defenderCity);
|
||||||
|
defenderCity.nation = 2;
|
||||||
return $.extend({}, allData, {
|
defenderCity.city = 3;
|
||||||
attackerGeneral:attackerGeneral,
|
defenderCity.wall_max = defenderCity.wall / 5 * 6;
|
||||||
attackerCity:attackerCity,
|
defenderCity.def_max = defenderCity.def / 5 * 6;
|
||||||
attackerNation:attackerNation,
|
|
||||||
|
var defenderGenerals = [];
|
||||||
defenderGenerals:defenderGenerals,
|
$.each(allData.defenderGenerals, function() {
|
||||||
defenderCity:defenderCity,
|
var defenderGeneral = extendGeneralInfoForDB(this);
|
||||||
defenderNation:defenderNation,
|
if (2 <= defenderGeneral.officer_level && defenderGeneral.officer_level <= 4) {
|
||||||
});
|
defenderGeneral.officer_city = 3;
|
||||||
}
|
} else {
|
||||||
|
defenderGeneral.officer_city = 0;
|
||||||
var parseSkillCount = function(skills){
|
}
|
||||||
var result = [];
|
|
||||||
$.each(skills, function(key, value){
|
defenderGenerals.push(defenderGeneral);
|
||||||
result.push("{0}({1}회)".format(key, toPretty(value)));
|
});
|
||||||
})
|
|
||||||
|
|
||||||
if(result.length == 0){
|
return $.extend({}, allData, {
|
||||||
return '-';
|
attackerGeneral: attackerGeneral,
|
||||||
}
|
attackerCity: attackerCity,
|
||||||
return result.join(', ');
|
attackerNation: attackerNation,
|
||||||
}
|
|
||||||
|
defenderGenerals: defenderGenerals,
|
||||||
var toPretty = function(number){
|
defenderCity: defenderCity,
|
||||||
if(isInt(number)){
|
defenderNation: defenderNation,
|
||||||
number = parseInt(number);
|
});
|
||||||
}
|
}
|
||||||
else{
|
|
||||||
number = parseFloat(number).toFixed(2);
|
var parseSkillCount = function(skills) {
|
||||||
}
|
var result = [];
|
||||||
return numberWithCommas(number);
|
$.each(skills, function(key, value) {
|
||||||
}
|
result.push("{0}({1}회)".format(key, toPretty(value)));
|
||||||
|
})
|
||||||
var showBattleResult = function(result){
|
|
||||||
$('#result_datetime').html(result.datetime);
|
if (result.length == 0) {
|
||||||
$('#result_warcnt').html(toPretty(result.avgWar));
|
return '-';
|
||||||
$('#result_phase').html(toPretty(result.phase));
|
}
|
||||||
$('#result_killed').html(toPretty(result.killed));
|
return result.join(', ');
|
||||||
if(result.minKilled != result.maxKilled){
|
}
|
||||||
$('#result_maxKilled').html(toPretty(result.maxKilled));
|
|
||||||
$('#result_minKilled').html(toPretty(result.minKilled));
|
var toPretty = function(number) {
|
||||||
$('#result_varKilled').show();
|
if (isInt(number)) {
|
||||||
}
|
number = parseInt(number);
|
||||||
else{
|
} else {
|
||||||
$('#result_varKilled').hide();
|
number = parseFloat(number).toFixed(2);
|
||||||
}
|
}
|
||||||
$('#result_dead').html(toPretty(result.dead));
|
return numberWithCommas(number);
|
||||||
if(result.minDead != result.maxDead){
|
}
|
||||||
$('#result_maxDead').html(toPretty(result.maxDead));
|
|
||||||
$('#result_minDead').html(toPretty(result.minDead));
|
var showBattleResult = function(result) {
|
||||||
$('#result_varDead').show();
|
$('#result_datetime').html(result.datetime);
|
||||||
}
|
$('#result_warcnt').html(toPretty(result.avgWar));
|
||||||
else{
|
$('#result_phase').html(toPretty(result.phase));
|
||||||
$('#result_varDead').hide();
|
$('#result_killed').html(toPretty(result.killed));
|
||||||
}
|
if (result.minKilled != result.maxKilled) {
|
||||||
|
$('#result_maxKilled').html(toPretty(result.maxKilled));
|
||||||
$('#result_attackerRice').html(toPretty(result.attackerRice));
|
$('#result_minKilled').html(toPretty(result.minKilled));
|
||||||
$('#result_defenderRice').html(toPretty(result.defenderRice));
|
$('#result_varKilled').show();
|
||||||
$('#result_attackerSkills').html(parseSkillCount(result.attackerSkills));
|
} else {
|
||||||
|
$('#result_varKilled').hide();
|
||||||
$('.result_defenderSkills').detach();
|
}
|
||||||
|
$('#result_dead').html(toPretty(result.dead));
|
||||||
var $summary = $('#battle_result_summary');
|
if (result.minDead != result.maxDead) {
|
||||||
|
$('#result_maxDead').html(toPretty(result.maxDead));
|
||||||
$.each(result.defendersSkills, function(idx, defenderSkills){
|
$('#result_minDead').html(toPretty(result.minDead));
|
||||||
console.log(defenderSkills);
|
$('#result_varDead').show();
|
||||||
var $result = $("<tr class='result_defenderSkills'><th>수비자{0} 스킬</th><td></td></tr>".format(idx + 1));
|
} else {
|
||||||
$result.find('td').html(parseSkillCount(defenderSkills));
|
$('#result_varDead').hide();
|
||||||
$summary.append($result);
|
}
|
||||||
});
|
|
||||||
|
$('#result_attackerRice').html(toPretty(result.attackerRice));
|
||||||
$('#generalBattleResultLog').html(result.lastWarLog.generalBattleResultLog);
|
$('#result_defenderRice').html(toPretty(result.defenderRice));
|
||||||
$('#generalBattleDetailLog').html(result.lastWarLog.generalBattleDetailLog);
|
$('#result_attackerSkills').html(parseSkillCount(result.attackerSkills));
|
||||||
|
|
||||||
}
|
$('.result_defenderSkills').detach();
|
||||||
|
|
||||||
var beginBattle = function(){
|
var $summary = $('#battle_result_summary');
|
||||||
var data = extendAllDataForDB(exportAllData());
|
|
||||||
console.log(data);
|
$.each(result.defendersSkills, function(idx, defenderSkills) {
|
||||||
$.ajax({
|
console.log(defenderSkills);
|
||||||
type:'post',
|
var $result = $("<tr class='result_defenderSkills'><th>수비자{0} 스킬</th><td></td></tr>".format(idx + 1));
|
||||||
url:'j_simulate_battle.php',
|
$result.find('td').html(parseSkillCount(defenderSkills));
|
||||||
dataType:'json',
|
$summary.append($result);
|
||||||
data:{
|
});
|
||||||
action:'battle',
|
|
||||||
query:JSON.stringify(data),
|
$('#generalBattleResultLog').html(result.lastWarLog.generalBattleResultLog);
|
||||||
}
|
$('#generalBattleDetailLog').html(result.lastWarLog.generalBattleDetailLog);
|
||||||
}).then(function(result){
|
|
||||||
console.log(result);
|
}
|
||||||
if(!result.result){
|
|
||||||
alert(result.reason);
|
var beginBattle = function() {
|
||||||
return;
|
var data = extendAllDataForDB(exportAllData());
|
||||||
}
|
console.log(data);
|
||||||
showBattleResult(result);
|
$.ajax({
|
||||||
|
type: 'post',
|
||||||
}, function(result){
|
url: 'j_simulate_battle.php',
|
||||||
alert('전투 개시 실패!');
|
dataType: 'json',
|
||||||
});
|
data: {
|
||||||
}
|
action: 'battle',
|
||||||
|
query: JSON.stringify(data),
|
||||||
|
}
|
||||||
var reorderDefender = function(defenderOrder){
|
}).then(function(result) {
|
||||||
$.each(defenderOrder, function(idx, generalNo){
|
console.log(result);
|
||||||
|
if (!result.result) {
|
||||||
if(!(generalNo in defenderNoList)){
|
alert(result.reason);
|
||||||
//음..?
|
return;
|
||||||
alert("{0}이 수비자 리스트에 없습니다. 버그인 듯 합니다.".format(generalNo));
|
}
|
||||||
return true;
|
showBattleResult(result);
|
||||||
}
|
|
||||||
|
}, function(result) {
|
||||||
var $defenderObj = defenderNoList[generalNo];
|
alert('전투 개시 실패!');
|
||||||
$defenderObj.detach();
|
});
|
||||||
$defenderColumn.append($defenderObj);
|
}
|
||||||
})
|
|
||||||
}
|
|
||||||
|
var reorderDefender = function(defenderOrder) {
|
||||||
var requestReorderDefender = function(){
|
$.each(defenderOrder, function(idx, generalNo) {
|
||||||
var data = extendAllDataForDB(exportAllData());
|
|
||||||
console.log(data);
|
if (!(generalNo in defenderNoList)) {
|
||||||
$.ajax({
|
//음..?
|
||||||
type:'post',
|
alert("{0}이 수비자 리스트에 없습니다. 버그인 듯 합니다.".format(generalNo));
|
||||||
url:'j_simulate_battle.php',
|
return true;
|
||||||
dataType:'json',
|
}
|
||||||
data:{
|
|
||||||
action:'reorder',
|
var $defenderObj = defenderNoList[generalNo];
|
||||||
query:JSON.stringify(data),
|
$defenderObj.detach();
|
||||||
}
|
$defenderColumn.append($defenderObj);
|
||||||
}).then(function(result){
|
})
|
||||||
console.log(result);
|
}
|
||||||
if(!result.result){
|
|
||||||
alert(result.reason);
|
var requestReorderDefender = function() {
|
||||||
return;
|
var data = extendAllDataForDB(exportAllData());
|
||||||
}
|
console.log(data);
|
||||||
reorderDefender(result.order);
|
$.ajax({
|
||||||
|
type: 'post',
|
||||||
}, function(result){
|
url: 'j_simulate_battle.php',
|
||||||
alert('재정렬 실패!');
|
dataType: 'json',
|
||||||
});
|
data: {
|
||||||
}
|
action: 'reorder',
|
||||||
|
query: JSON.stringify(data),
|
||||||
initBasicEvent();
|
}
|
||||||
$attackerCard.append($generalForm.clone(true,true));
|
}).then(function(result) {
|
||||||
addDefender();
|
console.log(result);
|
||||||
|
if (!result.result) {
|
||||||
$('.btn-begin_battle').click(function(){
|
alert(result.reason);
|
||||||
beginBattle();
|
return;
|
||||||
});
|
}
|
||||||
|
reorderDefender(result.order);
|
||||||
$('.btn-reorder_defender').click(function(){
|
|
||||||
requestReorderDefender();
|
}, function(result) {
|
||||||
})
|
alert('재정렬 실패!');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var initGeneralList = false;
|
||||||
|
|
||||||
|
$('#importFromDB').click(function() {
|
||||||
|
var generalID = $('#modalSelector').val();
|
||||||
|
console.log(generalID);
|
||||||
|
|
||||||
|
|
||||||
|
$.post({
|
||||||
|
url: 'j_export_simulator_object.php',
|
||||||
|
dataType: 'json',
|
||||||
|
data: {
|
||||||
|
destGeneralID: generalID
|
||||||
|
}
|
||||||
|
}).then(function(data) {
|
||||||
|
|
||||||
|
if (!data.result) {
|
||||||
|
alert(data.reason);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var $modal = $('#importModal');
|
||||||
|
var $card = $modal.data('target');
|
||||||
|
importGeneralInfo($card, data.general);
|
||||||
|
|
||||||
|
$modal.modal('hide');
|
||||||
|
}, errUnknown);
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#importModal').on('show.bs.modal', function(e) {
|
||||||
|
if (!initGeneralList) {
|
||||||
|
var $list = $('#modalSelector');
|
||||||
|
|
||||||
|
var addNation = function(generalList, nationName, color) {
|
||||||
|
|
||||||
|
generalList.sort(function(lhs, rhs) {
|
||||||
|
if (lhs.npc != rhs.npc) {
|
||||||
|
return lhs.npc - rhs.npc;
|
||||||
|
}
|
||||||
|
if (lhs.name < rhs.name) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (lhs.name > rhs.name) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
})
|
||||||
|
var $optGroup = $('<optgroup label="{0}"></optgroup>'.format(nationName));
|
||||||
|
$optGroup.css('background-color', color);
|
||||||
|
$optGroup.css('color', isBrightColor(color) ? 'black' : 'white');
|
||||||
|
|
||||||
|
$.each(generalList, function(idx, general) {
|
||||||
|
$item = $('<option value="{0}">{1}</option>'.format(general.no, general.name));
|
||||||
|
if (general.npc) {
|
||||||
|
$item.css('color', getNpcColor(general.npc));
|
||||||
|
} else {
|
||||||
|
$item.css('color', 'white');
|
||||||
|
}
|
||||||
|
$item.css('background-color', 'black');
|
||||||
|
$optGroup.append($item);
|
||||||
|
|
||||||
|
});
|
||||||
|
$list.append($optGroup);
|
||||||
|
}
|
||||||
|
$.post({
|
||||||
|
url: 'j_get_basic_general_list.php',
|
||||||
|
dataType: 'json',
|
||||||
|
data: {
|
||||||
|
req: 2,
|
||||||
|
}
|
||||||
|
}).then(function(data) {
|
||||||
|
if (!data.result) {
|
||||||
|
alert(data.reason);
|
||||||
|
$('#importModal').modal('hide');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var nations = data.nation;
|
||||||
|
var myNationID = data.nationID;
|
||||||
|
|
||||||
|
$list.empty();
|
||||||
|
//자국 먼저
|
||||||
|
|
||||||
|
if (0 in data.list) {
|
||||||
|
nations[0] = {
|
||||||
|
nation: 0,
|
||||||
|
name: '재야',
|
||||||
|
color: '#000000'
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
addNation(combineArray(data.list[myNationID], data.column), nations[myNationID].name, nations[myNationID].color);
|
||||||
|
|
||||||
|
for (var nationID in data.list) {
|
||||||
|
if (nationID == myNationID) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
addNation(combineArray(data.list[nationID], data.column), nations[nationID].name, nations[nationID].color);
|
||||||
|
}
|
||||||
|
initGeneralList = true;
|
||||||
|
}, errUnknown);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
initBasicEvent();
|
||||||
|
$attackerCard.append($generalForm.clone(true, true));
|
||||||
|
addDefender();
|
||||||
|
|
||||||
|
$('.btn-begin_battle').click(function() {
|
||||||
|
beginBattle();
|
||||||
|
});
|
||||||
|
|
||||||
|
$('.btn-reorder_defender').click(function() {
|
||||||
|
requestReorderDefender();
|
||||||
|
})
|
||||||
});
|
});
|
||||||
+129
-103
@@ -3,8 +3,8 @@
|
|||||||
* @see https://stackoverflow.com/questions/24816/escaping-html-strings-with-jquery
|
* @see https://stackoverflow.com/questions/24816/escaping-html-strings-with-jquery
|
||||||
* @param {string} string escape하고자 하는 문자열
|
* @param {string} string escape하고자 하는 문자열
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
var escapeHtml = (function (string) {
|
var escapeHtml = (function(string) {
|
||||||
var entityMap = {
|
var entityMap = {
|
||||||
'&': '&',
|
'&': '&',
|
||||||
'<': '<',
|
'<': '<',
|
||||||
@@ -32,58 +32,70 @@ function isInt(n) {
|
|||||||
return +n === n && !(n % 1);
|
return +n === n && !(n % 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
;(function(ns){
|
;
|
||||||
|
(function(ns) {
|
||||||
//https://gist.github.com/demouth/3217440
|
//https://gist.github.com/demouth/3217440
|
||||||
/**
|
/**
|
||||||
* mb_strwidth
|
* mb_strwidth
|
||||||
* @param String
|
* @param String
|
||||||
* @return int
|
* @return int
|
||||||
* @see http://php.net/manual/ja/function.mb-strwidth.php
|
* @see http://php.net/manual/ja/function.mb-strwidth.php
|
||||||
*/
|
*/
|
||||||
var mb_strwidth = function(str){
|
var mb_strwidth = function(str) {
|
||||||
var i=0,l=str.length,c='',length=0;
|
var i = 0,
|
||||||
for(;i<l;i++){
|
l = str.length,
|
||||||
c=str.charCodeAt(i);
|
c = '',
|
||||||
if(0x0000<=c&&c<=0x0019){
|
length = 0;
|
||||||
length += 0;
|
for (; i < l; i++) {
|
||||||
}else if(0x0020<=c&&c<=0x1FFF){
|
c = str.charCodeAt(i);
|
||||||
length += 1;
|
if (0x0000 <= c && c <= 0x0019) {
|
||||||
}else if(0x2000<=c&&c<=0xFF60){
|
length += 0;
|
||||||
length += 2;
|
} else if (0x0020 <= c && c <= 0x1FFF) {
|
||||||
}else if(0xFF61<=c&&c<=0xFF9F){
|
length += 1;
|
||||||
length += 1;
|
} else if (0x2000 <= c && c <= 0xFF60) {
|
||||||
}else if(0xFFA0<=c){
|
length += 2;
|
||||||
length += 2;
|
} else if (0xFF61 <= c && c <= 0xFF9F) {
|
||||||
}
|
length += 1;
|
||||||
}
|
} else if (0xFFA0 <= c) {
|
||||||
return length;
|
length += 2;
|
||||||
};
|
}
|
||||||
|
}
|
||||||
/**
|
return length;
|
||||||
* mb_strimwidth
|
};
|
||||||
* @param String
|
|
||||||
* @param int
|
/**
|
||||||
* @param int
|
* mb_strimwidth
|
||||||
* @param String
|
* @param String
|
||||||
* @return String
|
* @param int
|
||||||
* @see http://www.php.net/manual/ja/function.mb-strimwidth.php
|
* @param int
|
||||||
*/
|
* @param String
|
||||||
var mb_strimwidth = function(str,start,width,trimmarker){
|
* @return String
|
||||||
if(typeof trimmarker === 'undefined') trimmarker='';
|
* @see http://www.php.net/manual/ja/function.mb-strimwidth.php
|
||||||
var trimmakerWidth = mb_strwidth(trimmarker),i=start,l=str.length,trimmedLength=0,trimmedStr='';
|
*/
|
||||||
for(;i<l;i++){
|
var mb_strimwidth = function(str, start, width, trimmarker) {
|
||||||
var charCode=str.charCodeAt(i),c=str.charAt(i),charWidth=mb_strwidth(c),next=str.charAt(i+1),nextWidth=mb_strwidth(next);
|
if (typeof trimmarker === 'undefined') trimmarker = '';
|
||||||
trimmedLength += charWidth;
|
var trimmakerWidth = mb_strwidth(trimmarker),
|
||||||
trimmedStr += c;
|
i = start,
|
||||||
if(trimmedLength+trimmakerWidth+nextWidth>width){
|
l = str.length,
|
||||||
trimmedStr += trimmarker;
|
trimmedLength = 0,
|
||||||
break;
|
trimmedStr = '';
|
||||||
}
|
for (; i < l; i++) {
|
||||||
}
|
var charCode = str.charCodeAt(i),
|
||||||
return trimmedStr;
|
c = str.charAt(i),
|
||||||
};
|
charWidth = mb_strwidth(c),
|
||||||
ns.mb_strwidth = mb_strwidth;
|
next = str.charAt(i + 1),
|
||||||
ns.mb_strimwidth = mb_strimwidth;
|
nextWidth = mb_strwidth(next);
|
||||||
|
trimmedLength += charWidth;
|
||||||
|
trimmedStr += c;
|
||||||
|
if (trimmedLength + trimmakerWidth + nextWidth > width) {
|
||||||
|
trimmedStr += trimmarker;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return trimmedStr;
|
||||||
|
};
|
||||||
|
ns.mb_strwidth = mb_strwidth;
|
||||||
|
ns.mb_strimwidth = mb_strimwidth;
|
||||||
})(window);
|
})(window);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -93,7 +105,7 @@ function isInt(n) {
|
|||||||
*/
|
*/
|
||||||
function convertDictById(arr) {
|
function convertDictById(arr) {
|
||||||
var result = {};
|
var result = {};
|
||||||
arr.forEach(function (v, i) {
|
arr.forEach(function(v, i) {
|
||||||
result[v.id] = v;
|
result[v.id] = v;
|
||||||
});
|
});
|
||||||
return result;
|
return result;
|
||||||
@@ -106,7 +118,7 @@ function convertDictById(arr) {
|
|||||||
*/
|
*/
|
||||||
function convertSet(arr) {
|
function convertSet(arr) {
|
||||||
var result = {};
|
var result = {};
|
||||||
arr.forEach(function (v) {
|
arr.forEach(function(v) {
|
||||||
result[v] = true;
|
result[v] = true;
|
||||||
});
|
});
|
||||||
return result;
|
return result;
|
||||||
@@ -115,10 +127,10 @@ function convertSet(arr) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* {0}, {1}, {2}형태로 포맷해주는 함수
|
* {0}, {1}, {2}형태로 포맷해주는 함수
|
||||||
*/
|
*/
|
||||||
String.prototype.format = function() {
|
String.prototype.format = function() {
|
||||||
var args = arguments;
|
var args = arguments;
|
||||||
return this.replace(/{(\d+)}/g, function(match, number) {
|
return this.replace(/{(\d+)}/g, function(match, number) {
|
||||||
return (typeof args[number] != 'undefined') ? args[number] : match;
|
return (typeof args[number] != 'undefined') ? args[number] : match;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -134,12 +146,11 @@ function hexToRgb(hex) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function isBrightColor(color){
|
function isBrightColor(color) {
|
||||||
color = hexToRgb(color);
|
color = hexToRgb(color);
|
||||||
if ((color.r*0.299 + color.g*0.587 + color.b*0.114) > 140){
|
if ((color.r * 0.299 + color.g * 0.587 + color.b * 0.114) > 140) {
|
||||||
return true;
|
return true;
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -177,7 +188,7 @@ function numberWithCommas(x) {
|
|||||||
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
||||||
}
|
}
|
||||||
|
|
||||||
function linkifyStrWithOpt(text){
|
function linkifyStrWithOpt(text) {
|
||||||
return linkifyStr(text, {});
|
return linkifyStr(text, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,14 +199,14 @@ function linkifyStrWithOpt(text){
|
|||||||
* @param {object} options
|
* @param {object} options
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
var TemplateEngine = function (html, options) {
|
var TemplateEngine = function(html, options) {
|
||||||
var re = /<%(.+?)%>/g,
|
var re = /<%(.+?)%>/g,
|
||||||
reExp = /(^( )?(var|if|for|else|switch|case|break|{|}|;))(.*)?/g,
|
reExp = /(^( )?(var|if|for|else|switch|case|break|{|}|;))(.*)?/g,
|
||||||
code = 'with(obj) { var r=[];\n',
|
code = 'with(obj) { var r=[];\n',
|
||||||
cursor = 0,
|
cursor = 0,
|
||||||
result,
|
result,
|
||||||
match;
|
match;
|
||||||
var add = function (line, js) {
|
var add = function(line, js) {
|
||||||
js ? (code += line.match(reExp) ? line + '\n' : 'r.push(' + line + ');\n') :
|
js ? (code += line.match(reExp) ? line + '\n' : 'r.push(' + line + ');\n') :
|
||||||
(code += line != '' ? 'r.push("' + line.replace(/"/g, '\\"') + '");\n' : '');
|
(code += line != '' ? 'r.push("' + line.replace(/"/g, '\\"') + '");\n' : '');
|
||||||
return add;
|
return add;
|
||||||
@@ -208,82 +219,97 @@ var TemplateEngine = function (html, options) {
|
|||||||
}
|
}
|
||||||
add(html.substr(cursor, html.length - cursor));
|
add(html.substr(cursor, html.length - cursor));
|
||||||
code = (code + 'return r.join(""); }').replace(/[\r\t\n]/g, ' ');
|
code = (code + 'return r.join(""); }').replace(/[\r\t\n]/g, ' ');
|
||||||
try { result = new Function('obj', code).apply(options, [options]); }
|
try { result = new Function('obj', code).apply(options, [options]); } catch (err) { console.error("'" + err.message + "'", " in \n\nCode:\n", code, "\n"); }
|
||||||
catch (err) { console.error("'" + err.message + "'", " in \n\nCode:\n", code, "\n"); }
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getIconPath(imgsvr, picture){
|
function getIconPath(imgsvr, picture) {
|
||||||
// ../d_shared/common_path.js 필요
|
// ../d_shared/common_path.js 필요
|
||||||
if(!imgsvr){
|
if (!imgsvr) {
|
||||||
return pathConfig.sharedIcon+'/'+picture;
|
return pathConfig.sharedIcon + '/' + picture;
|
||||||
}
|
} else {
|
||||||
else{
|
return pathConfig.root + '/d_pic/' + picture;
|
||||||
return pathConfig.root+'/d_pic/'+picture;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function activeFlip($obj){
|
function activeFlip($obj) {
|
||||||
var $result;
|
var $result;
|
||||||
if($obj === undefined){
|
if ($obj === undefined) {
|
||||||
$result = $('img[data-flip]');
|
$result = $('img[data-flip]');
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$result = $obj.find('img[data-flip]');
|
$result = $obj.find('img[data-flip]');
|
||||||
}
|
}
|
||||||
|
|
||||||
$result.each(function(){
|
$result.each(function() {
|
||||||
activeFlipItem($(this));
|
activeFlipItem($(this));
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function activeFlipItem($img){
|
function combineObject(item, columnList) {
|
||||||
|
var newItem = {};
|
||||||
|
for (var columnIdx in columnList) {
|
||||||
|
var columnName = columnList[columnIdx];
|
||||||
|
newItem[columnName] = item[columnIdx];
|
||||||
|
}
|
||||||
|
return newItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
function combineArray(array, columnList) {
|
||||||
|
var result = [];
|
||||||
|
for (var key in array) {
|
||||||
|
var item = array[key];
|
||||||
|
result[key] = combineObject(item, columnList);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
function activeFlipItem($img) {
|
||||||
var imageList = [];
|
var imageList = [];
|
||||||
imageList.push($img.attr('src'));
|
imageList.push($img.attr('src'));
|
||||||
$.each($img.data('flip').split(','), function(idx, value){
|
$.each($img.data('flip').split(','), function(idx, value) {
|
||||||
var value = $.trim(value);
|
var value = $.trim(value);
|
||||||
if(!value){
|
if (!value) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
imageList.push(value);
|
imageList.push(value);
|
||||||
});
|
});
|
||||||
if(imageList.length <= 1){
|
if (imageList.length <= 1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$img.data('computed_flip_array', imageList);
|
$img.data('computed_flip_array', imageList);
|
||||||
$img.data('computed_flip_idx', 0);
|
$img.data('computed_flip_idx', 0);
|
||||||
|
|
||||||
$img.click(function(){
|
$img.click(function() {
|
||||||
var arr = $img.data('computed_flip_array');
|
var arr = $img.data('computed_flip_array');
|
||||||
var idx = $img.data('computed_flip_idx');
|
var idx = $img.data('computed_flip_idx');
|
||||||
idx = (idx + 1)%(arr.length);
|
idx = (idx + 1) % (arr.length);
|
||||||
$img.attr('src', arr[idx]);
|
$img.attr('src', arr[idx]);
|
||||||
$img.data('computed_flip_idx', idx);
|
$img.data('computed_flip_idx', idx);
|
||||||
});
|
});
|
||||||
$img.css('cursor','pointer');
|
$img.css('cursor', 'pointer');
|
||||||
}
|
}
|
||||||
|
|
||||||
jQuery(function($){
|
jQuery(function($) {
|
||||||
$('.obj_tooltip').mouseover(function(){
|
$('.obj_tooltip').mouseover(function() {
|
||||||
var $objTooltip = $(this);
|
var $objTooltip = $(this);
|
||||||
if($objTooltip.data('setObjTooltip')){
|
if ($objTooltip.data('setObjTooltip')) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
var tooltipClassText = $objTooltip.data('tooltip-class');
|
var tooltipClassText = $objTooltip.data('tooltip-class');
|
||||||
if(!tooltipClassText){
|
if (!tooltipClassText) {
|
||||||
tooltipClassText = '';
|
tooltipClassText = '';
|
||||||
}
|
}
|
||||||
var template = '<div class="tooltip {0}" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>'
|
var template = '<div class="tooltip {0}" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>'
|
||||||
.format(tooltipClassText);
|
.format(tooltipClassText);
|
||||||
|
|
||||||
$objTooltip.tooltip({
|
$objTooltip.tooltip({
|
||||||
title:function(){
|
title: function() {
|
||||||
return $.trim($(this).find('.tooltiptext').html());
|
return $.trim($(this).find('.tooltiptext').html());
|
||||||
},
|
},
|
||||||
template:template,
|
template: template,
|
||||||
html:true
|
html: true
|
||||||
}).tooltip('show');
|
}).tooltip('show');
|
||||||
|
|
||||||
$objTooltip.data('setObjTooltip', true);
|
$objTooltip.data('setObjTooltip', true);
|
||||||
@@ -297,21 +323,21 @@ jQuery(function($){
|
|||||||
activeFlip();
|
activeFlip();
|
||||||
|
|
||||||
var customCSS = localStorage.getItem('sam_customCSS');
|
var customCSS = localStorage.getItem('sam_customCSS');
|
||||||
if(customCSS){
|
if (customCSS) {
|
||||||
var $style = $('<style type="text/css"></style>');
|
var $style = $('<style type="text/css"></style>');
|
||||||
$style.text(customCSS);
|
$style.text(customCSS);
|
||||||
$style.appendTo($('head'));
|
$style.appendTo($('head'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
function errUnknown(){
|
function errUnknown() {
|
||||||
alert('작업을 실패했습니다.');
|
alert('작업을 실패했습니다.');
|
||||||
}
|
}
|
||||||
|
|
||||||
function errUnknownToast(){
|
function errUnknownToast() {
|
||||||
$.toast({
|
$.toast({
|
||||||
title: '에러!',
|
title: '에러!',
|
||||||
content: '작업을 실패했습니다.',
|
content: '작업을 실패했습니다.',
|
||||||
@@ -320,8 +346,8 @@ function errUnknownToast(){
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function quickReject(errMsg){
|
function quickReject(errMsg) {
|
||||||
if(errMsg === undefined){
|
if (errMsg === undefined) {
|
||||||
errMsg = '작업을 실패했습니다.';
|
errMsg = '작업을 실패했습니다.';
|
||||||
}
|
}
|
||||||
var deferred = $.Deferred();
|
var deferred = $.Deferred();
|
||||||
@@ -329,8 +355,8 @@ function quickReject(errMsg){
|
|||||||
return deferred.promise();
|
return deferred.promise();
|
||||||
}
|
}
|
||||||
|
|
||||||
function nl2br(text){
|
function nl2br(text) {
|
||||||
return text.replace(/\n/g,"<br>");
|
return text.replace(/\n/g, "<br>");
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
function br2nl (text) {
|
function br2nl (text) {
|
||||||
@@ -338,11 +364,11 @@ function br2nl (text) {
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function getNpcColor(npcType){
|
function getNpcColor(npcType) {
|
||||||
if(npcType >= 2){
|
if (npcType >= 2) {
|
||||||
return 'cyan';
|
return 'cyan';
|
||||||
}
|
}
|
||||||
if(npcType == 1){
|
if (npcType == 1) {
|
||||||
return 'skyblue';
|
return 'skyblue';
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
+352
-359
@@ -1,360 +1,353 @@
|
|||||||
var templateGeneralCard =
|
var templateGeneralCard =
|
||||||
'<div class="general_card">\
|
'<div class="general_card">\
|
||||||
<h4 class="bg1 with_border"><%name%></h4>\
|
<h4 class="bg1 with_border"><%name%></h4>\
|
||||||
<h4><img src="<%iconPath%>" height=64 width=64></h4>\
|
<h4><img src="<%iconPath%>" height=64 width=64></h4>\
|
||||||
<p><%leadership%> / <%strength%> / <%intel%><br>\
|
<p><%leadership%> / <%strength%> / <%intel%><br>\
|
||||||
<%nation%><br>\
|
<%nation%><br>\
|
||||||
<%personalText%><br>\
|
<%personalText%><br>\
|
||||||
<%specialText%> / <%special2Text%></p>\
|
<%specialText%> / <%special2Text%></p>\
|
||||||
<button type="subject" class="with_skin with_border select_btn" data-name="<%name%>" value="<%no%>" name="pick">빙의하기</button>\
|
<button type="subject" class="with_skin with_border select_btn" data-name="<%name%>" value="<%no%>" name="pick">빙의하기</button>\
|
||||||
<label><input <%keepCnt?"":disabled="disabled"%> type="checkbox" value="<%no%>" name="keep[]" class="keep_select">보관(<%keepCnt%>회)</label>\
|
<label><input <%keepCnt?"":disabled="disabled"%> type="checkbox" value="<%no%>" name="keep[]" class="keep_select">보관(<%keepCnt%>회)</label>\
|
||||||
</div>';
|
</div>';
|
||||||
|
|
||||||
var templateSpecial =
|
var templateSpecial =
|
||||||
'<span class="obj_tooltip" data-toggle="tooltip" data-placement="top"><%text%>\
|
'<span class="obj_tooltip" data-toggle="tooltip" data-placement="top"><%text%>\
|
||||||
<span class="tooltiptext">\
|
<span class="tooltiptext">\
|
||||||
<%info%>\
|
<%info%>\
|
||||||
</span>\
|
</span>\
|
||||||
</span>\
|
</span>\
|
||||||
';
|
';
|
||||||
|
|
||||||
var templateGeneralRow =
|
var templateGeneralRow =
|
||||||
'<tr>\
|
'<tr>\
|
||||||
<td><img class="generalIcon" width="64" height="64" src="<%iconPath%>"></td>\
|
<td><img class="generalIcon" width="64" height="64" src="<%iconPath%>"></td>\
|
||||||
<td style="<%userCSS%>"><%name%><%nameAux%></td>\
|
<td style="<%userCSS%>"><%name%><%nameAux%></td>\
|
||||||
<td><%age%>세</td>\
|
<td><%age%>세</td>\
|
||||||
<td><%personalWithTooltip%></td>\
|
<td><%personalWithTooltip%></td>\
|
||||||
<td><%specialDomesticWithTooltip%> / <%speicalWarWithTooltip%></td>\
|
<td><%specialDomesticWithTooltip%> / <%speicalWarWithTooltip%></td>\
|
||||||
<td>Lv <%explevel%></td>\
|
<td>Lv <%explevel%></td>\
|
||||||
<td><%nation%></td>\
|
<td><%nation%></td>\
|
||||||
<td><%experience%></td>\
|
<td><%experience%></td>\
|
||||||
<td><%dedication%></td>\
|
<td><%dedication%></td>\
|
||||||
<td><%officerLevel%></td>\
|
<td><%officerLevel%></td>\
|
||||||
<td><%total%></td>\
|
<td><%total%></td>\
|
||||||
<td><%leadership%></td>\
|
<td><%leadership%></td>\
|
||||||
<td><%strength%></td>\
|
<td><%strength%></td>\
|
||||||
<td><%intel%></td>\
|
<td><%intel%></td>\
|
||||||
<td><%killturn%></td>\
|
<td><%killturn%></td>\
|
||||||
</tr>';
|
</tr>';
|
||||||
|
|
||||||
function pickGeneral(){
|
function pickGeneral() {
|
||||||
$btn = $(this);
|
$btn = $(this);
|
||||||
|
|
||||||
if (!confirm('빙의할까요? : {0}'.format($btn.data('name')))) {
|
if (!confirm('빙의할까요? : {0}'.format($btn.data('name')))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$.post({
|
$.post({
|
||||||
url:'j_select_npc.php',
|
url: 'j_select_npc.php',
|
||||||
dataType:'json',
|
dataType: 'json',
|
||||||
data:{
|
data: {
|
||||||
pick:$btn.val()
|
pick: $btn.val()
|
||||||
}
|
}
|
||||||
}).then(function(result){
|
}).then(function(result) {
|
||||||
if(!result.result){
|
if (!result.result) {
|
||||||
alert(result.reason);
|
alert(result.reason);
|
||||||
location.refresh();
|
location.refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
alert('빙의에 성공했습니다.');
|
alert('빙의에 성공했습니다.');
|
||||||
location.href = './';
|
location.href = './';
|
||||||
});
|
});
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateOutdateTimer(){
|
function updateOutdateTimer() {
|
||||||
var $validUntilText = $('#valid_until_text');
|
var $validUntilText = $('#valid_until_text');
|
||||||
var now = Date.now();
|
var now = Date.now();
|
||||||
var validUntil = $validUntilText.data('until');
|
var validUntil = $validUntilText.data('until');
|
||||||
if(validUntil <= 0){
|
if (validUntil <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
} else if (validUntil < now) {
|
||||||
else if(validUntil < now){
|
$validUntilText.data('until', 0);
|
||||||
$validUntilText.data('until',0);
|
$('#valid_until').hide();
|
||||||
$('#valid_until').hide();
|
$('#outdate_token').show();
|
||||||
$('#outdate_token').show();
|
return;
|
||||||
return;
|
} else if (validUntil - now <= 30000) {
|
||||||
}
|
$validUntilText.css('color', "rgb(255, {0}, {0})".format(255 * (validUntil - now) / 30000));
|
||||||
else if(validUntil - now <= 30000){
|
}
|
||||||
$validUntilText.css('color', "rgb(255, {0}, {0})".format(255*(validUntil - now)/30000));
|
|
||||||
}
|
setTimeout(updateOutdateTimer, 1000);
|
||||||
|
}
|
||||||
setTimeout(updateOutdateTimer, 1000);
|
|
||||||
}
|
function updatePickMoreTimer() {
|
||||||
|
var $btn = $('#btn_pick_more');
|
||||||
function updatePickMoreTimer(){
|
|
||||||
var $btn = $('#btn_pick_more');
|
var now = Date.now();
|
||||||
|
var remain = ($btn.data('available') - now) / 1000;
|
||||||
var now = Date.now();
|
if (remain <= 0) {
|
||||||
var remain = ($btn.data('available') - now) / 1000;
|
$btn.prop('disabled', false)
|
||||||
if(remain <= 0){
|
$btn.html('다른 장수 보기');
|
||||||
$btn.prop('disabled', false)
|
return;
|
||||||
$btn.html('다른 장수 보기');
|
}
|
||||||
return;
|
|
||||||
}
|
$btn.html('다른 장수 보기({0}초)'.format(Math.ceil(remain)));
|
||||||
|
|
||||||
$btn.html('다른 장수 보기({0}초)'.format(Math.ceil(remain)));
|
setTimeout(updatePickMoreTimer, 250);
|
||||||
|
}
|
||||||
setTimeout(updatePickMoreTimer, 250);
|
|
||||||
}
|
function printGenerals(value) {
|
||||||
|
$('.card_holder').empty();
|
||||||
function printGenerals(value){
|
$('#valid_until').show();
|
||||||
$('.card_holder').empty();
|
$('#valid_until_text').html(value.validUntil).data('until', (new Date(value.validUntil)).getTime()).css('color', 'white');
|
||||||
$('#valid_until').show();
|
$('#outdate_token').hide();
|
||||||
$('#valid_until_text').html(value.validUntil).data('until', (new Date(value.validUntil)).getTime()).css('color','white');
|
var time = Date.now() + value.pickMoreSeconds * 1000;
|
||||||
$('#outdate_token').hide();
|
$('#btn_pick_more').data('available', time).prop('disabled', true);
|
||||||
var time = Date.now() + value.pickMoreSeconds*1000;
|
|
||||||
$('#btn_pick_more').data('available', time).prop('disabled',true);
|
var pick = $.map(value.pick, function(value, key) {
|
||||||
|
return value;
|
||||||
var pick = $.map(value.pick, function(value, key) {
|
});
|
||||||
return value;
|
|
||||||
});
|
pick.sort(function(lhs, rhs) {
|
||||||
|
var lsum = lhs.leadership + lhs.strength + lhs.intel;
|
||||||
pick.sort(function(lhs, rhs){
|
var rsum = rhs.leadership + rhs.strength + rhs.intel;
|
||||||
var lsum = lhs.leadership+lhs.strength+lhs.intel;
|
return lsum - rsum;
|
||||||
var rsum = rhs.leadership+rhs.strength+rhs.intel;
|
});
|
||||||
return lsum - rsum;
|
|
||||||
});
|
$.each(pick, function(idx, cardData) {
|
||||||
|
cardData.iconPath = getIconPath(cardData.imgsvr, cardData.picture);
|
||||||
$.each(pick, function(idx, cardData){
|
if (cardData.special in specialInfo) {
|
||||||
cardData.iconPath = getIconPath(cardData.imgsvr, cardData.picture);
|
cardData.specialText = TemplateEngine(templateSpecial, {
|
||||||
if(cardData.special in specialInfo){
|
text: cardData.special,
|
||||||
cardData.specialText = TemplateEngine(templateSpecial, {
|
info: specialInfo[cardData.special]
|
||||||
text:cardData.special,
|
});
|
||||||
info:specialInfo[cardData.special]
|
} else {
|
||||||
});
|
cardData.specialText = cardData.special;
|
||||||
}
|
}
|
||||||
else{
|
|
||||||
cardData.specialText = cardData.special;
|
if (cardData.special2 in specialInfo) {
|
||||||
}
|
cardData.special2Text = TemplateEngine(templateSpecial, {
|
||||||
|
text: cardData.special2,
|
||||||
if(cardData.special2 in specialInfo){
|
info: specialInfo[cardData.special2]
|
||||||
cardData.special2Text = TemplateEngine(templateSpecial, {
|
});
|
||||||
text:cardData.special2,
|
} else {
|
||||||
info:specialInfo[cardData.special2]
|
cardData.special2Text = cardData.special2;
|
||||||
});
|
}
|
||||||
}
|
|
||||||
else{
|
if (cardData.personal in characterInfo) {
|
||||||
cardData.special2Text = cardData.special2;
|
cardData.personalText = TemplateEngine(templateSpecial, {
|
||||||
}
|
text: cardData.personal,
|
||||||
|
info: characterInfo[cardData.personal]
|
||||||
if(cardData.personal in characterInfo){
|
});
|
||||||
cardData.personalText = TemplateEngine(templateSpecial, {
|
} else {
|
||||||
text:cardData.personal,
|
cardData.personalText = cardData.personal;
|
||||||
info:characterInfo[cardData.personal]
|
}
|
||||||
});
|
|
||||||
}
|
|
||||||
else{
|
var $card = $(TemplateEngine(templateGeneralCard, cardData));
|
||||||
cardData.personalText = cardData.personal;
|
|
||||||
}
|
$('.card_holder').append($card);
|
||||||
|
$card.find('.select_btn').click(pickGeneral);
|
||||||
|
$card.find('.obj_tooltip').tooltip({
|
||||||
var $card = $(TemplateEngine(templateGeneralCard, cardData));
|
title: function() {
|
||||||
|
return $.trim($(this).find('.tooltiptext').html());
|
||||||
$('.card_holder').append($card);
|
},
|
||||||
$card.find('.select_btn').click(pickGeneral);
|
html: true
|
||||||
$card.find('.obj_tooltip').tooltip({
|
});
|
||||||
title:function(){
|
});
|
||||||
return $.trim($(this).find('.tooltiptext').html());
|
|
||||||
},
|
updatePickMoreTimer();
|
||||||
html:true
|
updateOutdateTimer();
|
||||||
});
|
}
|
||||||
});
|
|
||||||
|
function printGeneralList(value) {
|
||||||
updatePickMoreTimer();
|
var tokenList = value.token;
|
||||||
updateOutdateTimer();
|
var generalList = $.map(value.list, function(general) {
|
||||||
}
|
general = {
|
||||||
|
no: general[0],
|
||||||
function printGeneralList(value){
|
picture: general[1],
|
||||||
var tokenList = value.token;
|
imgsvr: general[2],
|
||||||
var generalList = $.map(value.list, function(general){
|
npc: general[3],
|
||||||
general = {
|
age: general[4],
|
||||||
no:general[0],
|
nation: general[5],
|
||||||
picture:general[1],
|
special: general[6],
|
||||||
imgsvr:general[2],
|
special2: general[7],
|
||||||
npc:general[3],
|
personal: general[8],
|
||||||
age:general[4],
|
name: general[9],
|
||||||
nation:general[5],
|
ownerName: general[10],
|
||||||
special:general[6],
|
injury: general[11],
|
||||||
special2:general[7],
|
leadership: general[12],
|
||||||
personal:general[8],
|
lbonus: general[13],
|
||||||
name:general[9],
|
strength: general[14],
|
||||||
ownerName:general[10],
|
intel: general[15],
|
||||||
injury:general[11],
|
explevel: general[16],
|
||||||
leadership:general[12],
|
experience: general[17],
|
||||||
lbonus:general[13],
|
dedication: general[18],
|
||||||
strength:general[14],
|
officerLevel: general[19],
|
||||||
intel:general[15],
|
killturn: general[20],
|
||||||
explevel:general[16],
|
connect: general[21],
|
||||||
experience:general[17],
|
reserved: 0
|
||||||
dedication:general[18],
|
};
|
||||||
officerLevel:general[19],
|
if (general.npc < 2) {
|
||||||
killturn:general[20],
|
general.reserved = 2;
|
||||||
connect:general[21],
|
}
|
||||||
reserved:0
|
if (general.no in tokenList) {
|
||||||
};
|
general.reserved = 1;
|
||||||
if(general.npc < 2){
|
}
|
||||||
general.reserved = 2;
|
|
||||||
}
|
general.userCSS = "";
|
||||||
if(general.no in tokenList){
|
general.nameAux = "";
|
||||||
general.reserved = 1;
|
|
||||||
}
|
if (general.reserved == 1) {
|
||||||
|
general.userCSS = 'color:violet';
|
||||||
general.userCSS = "";
|
} else if (general.npc >= 2) {
|
||||||
general.nameAux = "";
|
general.userCSS = 'color:cyan';
|
||||||
|
} else if (general.npc == 1) {
|
||||||
if(general.reserved == 1){
|
general.userCSS = 'color:skyblue';
|
||||||
general.userCSS = 'color:violet';
|
}
|
||||||
}
|
|
||||||
else if(general.npc >= 2){
|
if (general.ownerName) {
|
||||||
general.userCSS = 'color:cyan';
|
general.nameAux += '<br><small>({0})</small>'.format(general.ownerName);
|
||||||
}
|
}
|
||||||
else if(general.npc == 1){
|
|
||||||
general.userCSS = 'color:skyblue';
|
if (general.reserved == 1) {
|
||||||
}
|
general.nameAux += '<br><small>({0}회)</small>'.format(tokenList[general.no]);
|
||||||
|
}
|
||||||
if(general.ownerName){
|
|
||||||
general.nameAux += '<br><small>({0})</small>'.format(general.ownerName);
|
|
||||||
}
|
general.total = general.leadership + general.strength + general.intel;
|
||||||
|
general.iconPath = getIconPath(general.imgsvr, general.picture);
|
||||||
if(general.reserved == 1){
|
|
||||||
general.nameAux += '<br><small>({0}회)</small>'.format(tokenList[general.no]);
|
general.specialDomesticWithTooltip = TemplateEngine(templateSpecial, {
|
||||||
}
|
text: general.special,
|
||||||
|
info: specialInfo[general.special]
|
||||||
|
});
|
||||||
general.total = general.leadership + general.strength + general.intel;
|
|
||||||
general.iconPath = getIconPath(general.imgsvr, general.picture);
|
general.speicalWarWithTooltip = TemplateEngine(templateSpecial, {
|
||||||
|
text: general.special2,
|
||||||
general.specialDomesticWithTooltip = TemplateEngine(templateSpecial, {
|
info: specialInfo[general.special2]
|
||||||
text:general.special,
|
});
|
||||||
info:specialInfo[general.special]
|
|
||||||
});
|
general.personalWithTooltip = TemplateEngine(templateSpecial, {
|
||||||
|
text: general.personal,
|
||||||
general.speicalWarWithTooltip = TemplateEngine(templateSpecial, {
|
info: characterInfo[general.personal]
|
||||||
text:general.special2,
|
});
|
||||||
info:specialInfo[general.special2]
|
|
||||||
});
|
return general;
|
||||||
|
});
|
||||||
general.personalWithTooltip = TemplateEngine(templateSpecial, {
|
|
||||||
text:general.personal,
|
generalList.sort(function(lhs, rhs) {
|
||||||
info:characterInfo[general.personal]
|
if (lhs.reserved > rhs.reserved) {
|
||||||
});
|
return -1;
|
||||||
|
}
|
||||||
return general;
|
if (lhs.reserved < rhs.reserved) {
|
||||||
});
|
return 1;
|
||||||
|
}
|
||||||
generalList.sort(function(lhs, rhs){
|
if (lhs.total != rhs.total) {
|
||||||
if(lhs.reserved > rhs.reserved){
|
return rhs.total - lhs.total;
|
||||||
return -1;
|
}
|
||||||
}
|
if (lhs.leadership != rhs.leadership) {
|
||||||
if(lhs.reserved < rhs.reserved){
|
return rhs.leadership - lhs.total;
|
||||||
return 1;
|
}
|
||||||
}
|
|
||||||
if(lhs.total != rhs.total){
|
if (lhs.name < rhs.name) {
|
||||||
return rhs.total - lhs.total;
|
return -1;
|
||||||
}
|
}
|
||||||
if(lhs.leadership != rhs.leadership){
|
if (lhs.name > rhs.name) {
|
||||||
return rhs.leadership - lhs.total;
|
return 1;
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
if(lhs.name < rhs.name){
|
});
|
||||||
return -1;
|
|
||||||
}
|
window.generalList = generalList;
|
||||||
if(lhs.name > rhs.name){
|
_printGeneralList(true);
|
||||||
return 1;
|
}
|
||||||
}
|
|
||||||
return 0;
|
function _printGeneralList(clear) {
|
||||||
});
|
var $generalTable = $('#general_list');
|
||||||
|
if (clear) {
|
||||||
window.generalList = generalList;
|
$generalTable.empty();
|
||||||
_printGeneralList(true);
|
$generalTable.data('lastIdx', 0);
|
||||||
}
|
$('#row_print_more').show();
|
||||||
|
}
|
||||||
function _printGeneralList(clear){
|
|
||||||
var $generalTable = $('#general_list');
|
generalList = window.generalList;
|
||||||
if(clear){
|
|
||||||
$generalTable.empty();
|
var idxFrom = $generalTable.data('lastIdx');
|
||||||
$generalTable.data('lastIdx', 0);
|
var idxTo = Math.min(idxFrom + 50, generalList.length);
|
||||||
$('#row_print_more').show();
|
$generalTable.data('lastIdx', idxTo);
|
||||||
}
|
|
||||||
|
for (var idx = idxFrom; idx < idxFrom + 50; idx++) {
|
||||||
generalList = window.generalList;
|
var general = generalList[idx];
|
||||||
|
$generalTable.append(TemplateEngine(templateGeneralRow, general));
|
||||||
var idxFrom = $generalTable.data('lastIdx');
|
}
|
||||||
var idxTo = Math.min(idxFrom + 50, generalList.length);
|
|
||||||
$generalTable.data('lastIdx', idxTo);
|
if (idxTo == generalList.length) {
|
||||||
|
$('#row_print_more').hide();
|
||||||
for(var idx = idxFrom; idx < idxFrom + 50; idx++){
|
}
|
||||||
var general = generalList[idx];
|
|
||||||
$generalTable.append(TemplateEngine(templateGeneralRow, general));
|
$generalTable.find('.obj_tooltip').tooltip({
|
||||||
}
|
title: function() {
|
||||||
|
return $.trim($(this).find('.tooltiptext').html());
|
||||||
if(idxTo == generalList.length){
|
},
|
||||||
$('#row_print_more').hide();
|
html: true
|
||||||
}
|
});
|
||||||
|
$('#tb_general_list').show();
|
||||||
$generalTable.find('.obj_tooltip').tooltip({
|
}
|
||||||
title:function(){
|
|
||||||
return $.trim($(this).find('.tooltiptext').html());
|
$(function($) {
|
||||||
},
|
window.generalList = [];
|
||||||
html:true
|
|
||||||
});
|
$.post('j_get_select_npc_token.php').then(function(value) {
|
||||||
$('#tb_general_list').show();
|
if (!value.result) {
|
||||||
}
|
alert(value.reason);
|
||||||
|
return;
|
||||||
$(function($){
|
}
|
||||||
window.generalList = [];
|
|
||||||
|
console.log(value);
|
||||||
$.post('j_get_select_npc_token.php').then(function(value){
|
printGenerals(value);
|
||||||
if(!value.result){
|
});
|
||||||
alert(value.reason);
|
|
||||||
return;
|
$('#btn_pick_more').click(function() {
|
||||||
}
|
var generals = $.map($('.keep_select:checked'), function(value) {
|
||||||
|
return $(value).val();
|
||||||
console.log(value);
|
});
|
||||||
printGenerals(value);
|
console.log(generals);
|
||||||
});
|
$.post({
|
||||||
|
url: 'j_get_select_npc_token.php',
|
||||||
$('#btn_pick_more').click(function(){
|
dataType: 'json',
|
||||||
var generals = $.map($('.keep_select:checked'), function(value){
|
data: {
|
||||||
return $(value).val();
|
refresh: true,
|
||||||
});
|
keep: generals
|
||||||
console.log(generals);
|
}
|
||||||
$.post({
|
}).then(function(result) {
|
||||||
url:'j_get_select_npc_token.php',
|
if (!result.result) {
|
||||||
dataType:'json',
|
alert(result.reason);
|
||||||
data:{
|
location.refresh();
|
||||||
refresh:true,
|
}
|
||||||
keep:generals
|
console.log(result);
|
||||||
}
|
printGenerals(result);
|
||||||
}).then(function(result){
|
});
|
||||||
if(!result.result){
|
});
|
||||||
alert(result.reason);
|
|
||||||
location.refresh();
|
$('#btn_load_general_list').click(function() {
|
||||||
}
|
$.post({
|
||||||
console.log(result);
|
url: 'j_get_general_list.php',
|
||||||
printGenerals(result);
|
dataType: 'json',
|
||||||
});
|
data: {
|
||||||
});
|
with_token: true
|
||||||
|
}
|
||||||
$('#btn_load_general_list').click(function(){
|
}).then(function(result) {
|
||||||
$.post({
|
if (!result.result) {
|
||||||
url:'j_get_general_list.php',
|
alert(result.reason);
|
||||||
dataType:'json',
|
return false;
|
||||||
data:{
|
}
|
||||||
with_token:true
|
printGeneralList(result);
|
||||||
}
|
});
|
||||||
}).then(function(result){
|
});
|
||||||
if(!result.result){
|
|
||||||
alert(result.reason);
|
$('#btn_print_more').click(function() {
|
||||||
return false;
|
_printGeneralList();
|
||||||
}
|
})
|
||||||
printGeneralList(result);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
$('#btn_print_more').click(function(){
|
|
||||||
_printGeneralList();
|
|
||||||
})
|
|
||||||
|
|
||||||
});
|
});
|
||||||
Reference in New Issue
Block a user