특기 획득 구조 변경

This commit is contained in:
2020-04-26 22:31:49 +09:00
parent 2bb6ef8efb
commit 724c7388af
50 changed files with 545 additions and 543 deletions
+2 -2
View File
@@ -115,12 +115,12 @@ switch($btn) {
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($general['no']), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
$msg->send(true);
$specialWar = SpecialityConst::pickSpecialWar($general);
$specialWar = SpecialityHelper::pickSpecialWar($general);
$db->update('general', [
'specage2'=>$db->sqleval('age'),
'special2'=>$specialWar
], 'no=%i', $general['no']);
$specialWarName = SpecialityConst::WAR[$specialWar][0];
$specialWarName = buildGeneralSpecialWarClass($specialWar)->getName();
$josaUl = JosaUtil::pick($specialWarName, '을');
pushGeneralHistory($general['no'], ["<C>●</>{$year}{$month}월:특기 【<b><C>{$specialWarName}</></b>】{$josaUl} 습득"]);
pushGenLog($general['no'], ["<C>●</>특기 【<b><L>{$specialWarName}</></b>】{$josaUl} 익혔습니다!"]);
+1 -1
View File
@@ -280,7 +280,7 @@ foreach($generals as $general){
if($ourGeneral && !$isNPC){
$turnText = [];
$generalObj = new General($general, null, null, null, false);
$generalObj = new General($general, null, null, null, null, false);
foreach($generalTurnList[$generalObj->getID()] as $turnRawIdx=>$turn){
$turnIdx = $turnRawIdx+1;
$turnText[] = "{$turnIdx} : $turn";
+6 -7
View File
@@ -29,7 +29,7 @@ $startYear = $gameStor->getValue('startyear');
<?=WebUtil::printJS('../e_lib/download2.js')?>
<?=WebUtil::printJS('js/common.js')?>
<script>
var defaultSpecialDomestic = <?=GameConst::$defaultSpecialDomestic?>;
var defaultSpecialDomestic = '<?=GameConst::$defaultSpecialDomestic?>';
</script>
<?=WebUtil::printJS('js/battle_simulator.js')?>
</head>
@@ -167,7 +167,7 @@ var defaultSpecialDomestic = <?=GameConst::$defaultSpecialDomestic?>;
<select class="custom-select form_nation_type" style="width:25ch;">
<?php foreach(GameConst::$availableNationType as $typeID): ?>
<?php $nationTypeObj = buildNationTypeClass($typeID) ?>
<option value="<?=$typeID?>"><?=$nationTypeObj->name?> (<?=$nationTypeClass::$pros?>, <?=$nationTypeClass::$cons?>)</option>
<option value="<?=$typeID?>"><?=$nationTypeObj->getName()?> (<?=$nationTypeObj::$pros?>, <?=$nationTypeObj::$cons?>)</option>
<?php endforeach; ?>
</select>
<div class="input-group-prepend">
@@ -339,7 +339,7 @@ var defaultSpecialDomestic = <?=GameConst::$defaultSpecialDomestic?>;
</div>
<select class="custom-select form_crewtype">
<?php foreach(GameUnitConst::all() as $crewTypeID => $crewType): ?>
<?php if($crewTypeID < 0){ continue; } ?>
<?php if($crewType->armType === GameUnitConst::T_CASTLE){ continue; } ?>
<option value="<?=$crewTypeID?>"><?=$crewType->name?></option>
<?php endforeach; ?>
</select>
@@ -351,7 +351,7 @@ var defaultSpecialDomestic = <?=GameConst::$defaultSpecialDomestic?>;
<span class="input-group-text">성격</span>
</div>
<select class="custom-select form_general_character">
<?php foreach(getCharacterList() as $characterID => [$name,$info]): ?>
<?php foreach(getCharacterList(false) as $characterID => [$name,$info]): ?>
<option value="<?=$characterID?>"><?=$name?></option>
<?php endforeach; ?>
</select>
@@ -369,9 +369,8 @@ var defaultSpecialDomestic = <?=GameConst::$defaultSpecialDomestic?>;
<span class="input-group-text">전특</span>
</div>
<select class="custom-select form_general_special_war">
<option value="0">-</option>
<?php foreach(SpecialityConst::WAR as $specialWarID => [$name,$buff,$cond]): ?>
<option value="<?=$specialWarID?>"><?=$name?></option>
<?php foreach(SpecialityHelper::getSpecialWarList(false) as $specialWarID =>$specialObj): ?>
<option value="<?=$specialWarID?>"><?=$specialObj->getName()?></option>
<?php endforeach; ?>
</select>
</div>
+2 -2
View File
@@ -1203,7 +1203,7 @@ function addAge() {
if($year >= $startYear+3) {
foreach($db->query('SELECT no,name,nation,leadership,strength,intel from general where specage<=age and special=%s', GameConst::$defaultSpecialDomestic) as $general){
$generalID = $general['no'];
$special = SpecialityConst::pickSpecialDomestic($general);
$special = SpecialityHelper::pickSpecialDomestic($general);
$specialClass = buildGeneralSpecialDomesticClass($special);
$specialText = $specialClass->getName();
$db->update('general', [
@@ -1219,7 +1219,7 @@ function addAge() {
foreach($db->query('SELECT no,name,nation,leadership,strength,intel,npc,dex1,dex2,dex3,dex4,dex5 from general where specage2<=age and special2=%s', GameConst::$defaultSpecialWar) as $general){
$generalID = $general['no'];
$special2 = SpecialityConst::pickSpecialWar($general);
$special2 = SpecialityHelper::pickSpecialWar($general);
$specialClass = buildGeneralSpecialWarClass($special2);
$specialText = $specialClass->getName();
+14 -4
View File
@@ -9,12 +9,22 @@ namespace sammo;
* (단, autoload, 정적 변수 초기화는 허용)
*/
function getCharacterList(){
function getCharacterList(bool $onlyAvailable=true){
$infoText = [];
foreach(GameConst::$allPersonality as $personalityID){
if(!$onlyAvailable){
$class = buildPersonalityClass(GameConst::$neutralPersonality);
$infoText[GameConst::$neutralPersonality] = [$class->getName(), $class->getInfo()];
}
foreach(GameConst::$availablePersonality as $personalityID){
$class = buildPersonalityClass($personalityID);
$infoText[$personalityID] = [$class->getName(), $class->getInfo()];
}
if(!$onlyAvailable){
foreach(GameConst::$optionalPersonality as $personalityID){
$class = buildPersonalityClass($personalityID);
$infoText[$personalityID] = [$class->getName(), $class->getInfo()];
}
}
return $infoText;
}
@@ -247,7 +257,7 @@ function getGeneralSpecialDomesticClass(?string $type){
throw new \InvalidArgumentException("{$type}은 올바른 내정 특기가 아님");
}
function buildGeneralSpecialDomesticClass(?string $type):iAction{
function buildGeneralSpecialDomesticClass(?string $type):BaseSpecial{
static $cache = [];
if($type === null){
$type = 'None';
@@ -282,7 +292,7 @@ function getGeneralSpecialWarClass(?string $type){
throw new \InvalidArgumentException("{$type}은 올바른 전투 특기가 아님");
}
function buildGeneralSpecialWarClass(?string $type):iAction{
function buildGeneralSpecialWarClass(?string $type):BaseSpecial{
static $cache = [];
if($type === null){
$type = 'None';
-21
View File
@@ -21,27 +21,6 @@ function getNationLevelList():array{
return $table;
}
function getNationTypeList():array{
return GameConst::$availableNationType;
$table = [
13=>['명가', '기술↑ 인구↑', '쌀수입↓ 수성↓'],
12=>['음양가', '내정↑ 인구↑', '기술↓ 전략↓'],
11=>['종횡가', '전략↑ 수성↑', '금수입↓ 내정↓'],
10=>['불가', '민심↑ 수성↑', '금수입↓'],
9=>['도적', '계략↑', '금수입↓ 치안↓ 민심↓'],
8=>['오두미도', '쌀수입↑ 인구↑', '기술↓ 수성↓ 내정↓'],
7=>['태평도', '인구↑ 민심↑', '기술↓ 수성↓'],
6=>['도가', '인구↑', '기술↓ 치안↓'],
5=>['묵가', '수성↑', '기술↓'],
4=>['덕가', '치안↑인구↑ 민심↑', '쌀수입↓ 수성↓'],
3=>['병가', '기술↑ 수성↑', '인구↓ 민심↓'],
2=>['유가', '내정↑ 민심↑', '쌀수입↓'],
1=>['법가', '금수입↑ 치안↑', '인구↓ 민심↓'],
];
return $table;
}
function getCityLevelList():array{
return [
1 => '수',
+3 -3
View File
@@ -94,7 +94,7 @@ function processGoldIncome() {
// 각 장수들에게 지급
foreach ($generalRawList as $rawGeneral) {
$generalObj = new General($rawGeneral, null, null, $year, $month, false);
$generalObj = new General($rawGeneral, null, null, null, $year, $month, false);
$gold = Util::round(getBill($generalObj->getVar('dedication'))*$ratio);
$generalObj->increaseVar('gold', $gold);
@@ -369,7 +369,7 @@ function processRiceIncome() {
// 각 장수들에게 지급
foreach ($generalRawList as $rawGeneral) {
$generalObj = new General($rawGeneral, null, null, $year, $month, false);
$generalObj = new General($rawGeneral, null, null, null, $year, $month, false);
$rice = Util::round(getBill($generalObj->getVar('dedication'))*$ratio);
$generalObj->increaseVar('rice', $rice);
@@ -589,7 +589,7 @@ function disaster() {
$generalList = array_map(
function($rawGeneral) use ($city, $year, $month){
return new General($rawGeneral, null, $city, $year, $month, false);
return new General($rawGeneral, null, $city, null, $year, $month, false);
},
$generalListByCity[$city['city']]??[]
);
+1 -1
View File
@@ -50,7 +50,7 @@ $turn = [];
$generals = [];
foreach($db->query('SELECT no,name,turntime,npc,city,nation,officer_level FROM general WHERE nation = %i AND officer_level >= 5',$nationID) as $rawGeneral){
$generals[$rawGeneral['officer_level']] = new General($rawGeneral, null, null, $year, $month, false);
$generals[$rawGeneral['officer_level']] = new General($rawGeneral, null, null, null, $year, $month, false);
}
$nationTurnList = [];
+26 -22
View File
@@ -31,6 +31,7 @@ if($query === null){
]);
}
LogText('simulate', $query);
$defaultCheck = [
'required'=>[
@@ -74,7 +75,7 @@ $rawAttacker['turntime'] = TimeUtil::now();
$rawAttackerCity = $query['attackerCity'];
$rawAttackerNation = $query['attackerNation'];
$rawdefenderList = $query['defenderGenerals'];
$rawDefenderList = $query['defenderGenerals'];
$rawDefenderCity = $query['defenderCity'];
$rawDefenderNation = $query['defenderNation'];
@@ -83,13 +84,13 @@ $generalCheck = [
'required'=>[
'no', 'name', 'nation', 'turntime', 'personal', 'special2', 'crew', 'crewtype', 'atmos', 'train',
'intel', 'intel_exp', 'book', 'strength', 'strength_exp', 'weapon', 'injury', 'leadership', 'leadership_exp', 'horse', 'item',
'explevel', 'experience', 'dedication', 'officer_level', 'gold', 'rice', 'dex1', 'dex2', 'dex3', 'dex4', 'dex5',
'explevel', 'experience', 'dedication', 'officer_level', 'officer_city', 'gold', 'rice', 'dex1', 'dex2', 'dex3', 'dex4', 'dex5',
'recent_war'
],
'integer'=>[
'no', 'nation', 'personal', 'special2', 'crew', 'crewtype', 'atmos', 'train',
'intel', 'intel_exp', 'book', 'strength', 'strength_exp', 'weapon', 'injury', 'leadership', 'leadership_exp', 'horse', 'item',
'explevel', 'experience', 'dedication', 'officer_level', 'gold', 'rice', 'dex1', 'dex2', 'dex3', 'dex4', 'dex5',
'no', 'nation', 'crew', 'crewtype', 'atmos', 'train',
'intel', 'intel_exp', 'strength', 'strength_exp', 'injury', 'leadership', 'leadership_exp',
'explevel', 'experience', 'dedication', 'officer_level', 'officer_city', 'gold', 'rice', 'dex1', 'dex2', 'dex3', 'dex4', 'dex5',
],
'min'=>[
['no', 1],
@@ -115,8 +116,8 @@ $generalCheck = [
['officer_level', [1, 12]]
],
'in'=>[
['personal', array_keys(getCharacterList())],
['special2', array_merge(array_keys(SpecialityConst::WAR), ['None'])],
['personal', array_merge(GameConst::$availablePersonality, GameConst::$optionalPersonality)],
['special2', array_merge(GameConst::$availableSpecialWar, GameConst::$optionalSpecialWar)],
['crewtype', array_keys(GameUnitConst::all())],
['horse', array_keys(GameConst::$allItems['horse'])],
['weapon', array_keys(GameConst::$allItems['weapon'])],
@@ -135,7 +136,6 @@ if(!$v->validate()){
}
$defenderList = [];
foreach($rawDefenderList as $idx=>$rawDefenderGeneral){
$v = new Validator($rawDefenderGeneral);
$v->rules($generalCheck);
@@ -146,7 +146,7 @@ foreach($rawDefenderList as $idx=>$rawDefenderGeneral){
'reason'=>"[수비자{$idx}]".$v->errorStr()
]);
}
$defenderList[] = new General($rawDefenderGeneral, null, $rawDefenderCity, $year, $month, true);
$defenderList[] = new General($rawDefenderGeneral, null, $rawDefenderCity, $rawAttackerNation, $year, $month, true);
}
@@ -205,7 +205,7 @@ $nationCheck = [
'nation', 'name', 'gold', 'rice', 'gennum'
],
'integer'=>[
'type', 'level', 'capital', 'nation', 'gennum',
'level', 'capital', 'nation', 'gennum',
],
'numeric'=>[
'tech', 'gold', 'rice'
@@ -217,7 +217,7 @@ $nationCheck = [
['gennum', 1],
],
'in'=>[
['type', array_keys(getNationTypeList())],
['type', GameConst::$availableNationType],
['level', array_keys(getNationLevelList())]
]
];
@@ -246,8 +246,8 @@ if($action == 'reorder'){
});
$order = [];
foreach($defenderList as $rawDefenderGeneral){
$order[] = $rawDefenderGeneral['no'];
foreach($defenderList as $defenderGeneral){
$order[] = $defenderGeneral->getID();
}
Json::die([
@@ -261,6 +261,11 @@ usort($defenderList, function(General $lhs, General $rhs){
return -(extractBattleOrder($lhs) <=> extractBattleOrder($rhs));
});
$rawDefenderList = array_map(function(General $general){
return $general->getRaw();
}, $defenderList);
unset($defenderList);
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$startYear = $gameStor->startyear;
@@ -269,18 +274,17 @@ $cityRate = Util::round(($year - $startYear) / 1.5) + 60;
function simulateBattle(
$rawAttacker, $rawAttackerCity, $rawAttackerNation,
$defenderList, $rawDefenderCity, $rawDefenderNation,
$rawDefenderList, $rawDefenderCity, $rawDefenderNation,
$startYear, $year, $month, $cityRate
){
$attacker = new WarUnitGeneral(
new General($rawAttacker, null, $rawAttackerCity, $year, $month),
new General($rawAttacker, null, $rawAttackerCity, $rawAttackerNation, $year, $month),
$rawAttackerNation,
true
);
$city = new WarUnitCity($rawDefenderCity, $rawDefenderNation, $year, $month, $cityRate);
$iterDefender = new \ArrayIterator($defenderList);
$iterDefender = new \ArrayIterator($rawDefenderList);
$iterDefender->rewind();
$battleResult = [];
@@ -306,15 +310,15 @@ function simulateBattle(
return null;
}
$rawGeneral = $iterDefender->current();
if(extractBattleOrder($rawGeneral) <= 0){
$defenderObj = new General($iterDefender->current(), null, $rawDefenderCity, $rawDefenderNation, $year, $month);
if(extractBattleOrder($defenderObj) <= 0){
return null;
}
$defenderRice += $rawGeneral['rice'];
$defenderRice += $defenderObj->getVar('rice');
$retVal = new WarUnitGeneral(
new General($rawGeneral, null, $rawDefenderCity, $year, $month),
$defenderObj,
$rawDefenderNation,
false
);
@@ -371,7 +375,7 @@ $defendersActivatedSkills = [];
foreach(Util::range($repeatCnt) as $repeatIdx){
[$attacker, $city, $battleResult, $conquerCity, $attackerRice, $defenderRice] = simulateBattle(
$rawAttacker, $rawAttackerCity, $rawAttackerNation,
$defenderList, $rawDefenderCity, $rawDefenderNation,
$rawDefenderList, $rawDefenderCity, $rawDefenderNation,
$startYear, $year, $month, $cityRate
);
$lastWarLog = Util::mapWithKey(function($key, $values){
+1 -1
View File
@@ -158,7 +158,7 @@ $age = 20 + ($pleadership + $pstrength + $pintel) * 2 - (mt_rand(0, 1));
// 아직 남았고 천재등록상태이면 특기 부여
if ($genius) {
$specage2 = $age;
$special2 = SpecialityConst::pickSpecialWar([
$special2 = SpecialityHelper::pickSpecialWar([
'leadership'=>$leadership,
'strength'=>$strength,
'intel'=>$intel,
+17 -10
View File
@@ -204,19 +204,19 @@ jQuery(function($){
explevel:getInt('.form_exp_level'),
leadership:getInt('.form_leadership'),
horse:getInt('.form_general_horse'),
horse:getVal('.form_general_horse'),
strength:getInt('.form_strength'),
weapon:getInt('.form_general_weap'),
weapon:getVal('.form_general_weap'),
intel:getInt('.form_intel'),
book:getInt('.form_general_book'),
item:getInt('.form_general_item'),
book:getVal('.form_general_book'),
item:getVal('.form_general_item'),
injury:getInt('.form_injury'),
rice:getInt('.form_rice'),
personal:getInt('.form_general_character'),
special2:getInt('.form_general_special_war'),
personal:getVal('.form_general_character'),
special2:getVal('.form_general_special_war'),
crew:getInt('.form_crew'),
crewtype:getInt('.form_crewtype'),
@@ -523,7 +523,7 @@ jQuery(function($){
};
var attackerNation = {
type:parseInt($attackerNation.find('.form_nation_type').val()),
type:$attackerNation.find('.form_nation_type').val(),
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,
@@ -540,7 +540,7 @@ jQuery(function($){
};
var defenderNation = {
type:parseInt($defenderNation.find('.form_nation_type').val()),
type:$defenderNation.find('.form_nation_type').val(),
tech:parseInt($defenderNation.find('.form_tech').val()) * 1000,
level:parseInt($defenderNation.find('.form_nation_level').val()),
capital:$defenderNation.find('.form_is_capital:checked').val()=='1'?3:4,
@@ -573,7 +573,7 @@ jQuery(function($){
level:0,
gold:0,
rice:2000,
type:0,
type:'None',
tech:0,
gennum:200,
};
@@ -616,7 +616,10 @@ jQuery(function($){
var attackerGeneral = extendGeneralInfoForDB(allData.attackerGeneral);
if(2 <= attackerGeneral.officer_level && attackerGeneral.officer_level <= 4){
attackerCity.officer_city = 1;
attackerGeneral.officer_city = 1;
}
else{
attackerGeneral.officer_city = 0;
}
var defenderNation = $.extend({}, defaultNation, allData.defenderNation);
@@ -635,6 +638,9 @@ jQuery(function($){
if(2 <= defenderGeneral.officer_level && defenderGeneral.officer_level <= 4){
defenderGeneral.officer_city = 3;
}
else{
defenderGeneral.officer_city = 0;
}
defenderGenerals.push(defenderGeneral);
});
@@ -763,6 +769,7 @@ jQuery(function($){
type:'post',
url:'j_simulate_battle.php',
dataType:'json',
contentType: "application/json",
data:{
action:'reorder',
query:JSON.stringify(data),
+4 -5
View File
@@ -2,19 +2,18 @@
namespace sammo\ActionSpecialDomestic;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
class None implements iAction{
use \sammo\DefaultAction;
class None extends \sammo\BaseSpecial{
protected $id = 0;
protected $name = '-';
protected $info = '';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 0;
static $type = [
SpecialityConst::DISABLED
SpecialityHelper::DISABLED
];
}
@@ -2,16 +2,15 @@
namespace sammo\ActionSpecialDomestic;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
class che_거상 implements iAction{
use \sammo\DefaultAction;
class che_거상 extends \sammo\BaseSpecial{
protected $id = 999;
protected $name = '거상';
protected $info = '<비활성화>';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 0;
static $type = [];
@@ -2,19 +2,18 @@
namespace sammo\ActionSpecialDomestic;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
class che_경작 implements iAction{
use \sammo\DefaultAction;
class che_경작 extends \sammo\BaseSpecial{
protected $id = 1;
protected $name = '경작';
protected $info = '[내정] 농지 개간 : 기본 보정 +10%, 성공률 +10%p, 비용 -20%';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_INTEL
SpecialityHelper::STAT_INTEL
];
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
@@ -2,21 +2,20 @@
namespace sammo\ActionSpecialDomestic;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
class che_귀모 implements iAction{
use \sammo\DefaultAction;
class che_귀모 extends \sammo\BaseSpecial{
protected $id = 31;
protected $name = '귀모';
protected $info = '[계략] 화계·탈취·파괴·선동 : 성공률 +20%p';
static $selectWeightType = SpecialityConst::WEIGHT_PERCENT;
static $selectWeightType = SpecialityHelper::WEIGHT_PERCENT;
static $selectWeight = 2.5;
static $type = [
SpecialityConst::STAT_LEADERSHIP,
SpecialityConst::STAT_STRENGTH,
SpecialityConst::STAT_INTEL
SpecialityHelper::STAT_LEADERSHIP,
SpecialityHelper::STAT_STRENGTH,
SpecialityHelper::STAT_INTEL
];
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
@@ -2,19 +2,18 @@
namespace sammo\ActionSpecialDomestic;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
class che_발명 implements iAction{
use \sammo\DefaultAction;
class che_발명 extends \sammo\BaseSpecial{
protected $id = 3;
protected $name = '발명';
protected $info = '[내정] 기술 연구 : 기본 보정 +10%, 성공률 +10%p, 비용 -20%';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_INTEL
SpecialityHelper::STAT_INTEL
];
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
@@ -2,19 +2,18 @@
namespace sammo\ActionSpecialDomestic;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
class che_상재 implements iAction{
use \sammo\DefaultAction;
class che_상재 extends \sammo\BaseSpecial{
protected $id = 2;
protected $name = '상재';
protected $info = '[내정] 상업 투자 : 기본 보정 +10%, 성공률 +10%p, 비용 -20%';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_INTEL
SpecialityHelper::STAT_INTEL
];
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
@@ -2,19 +2,18 @@
namespace sammo\ActionSpecialDomestic;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
class che_수비 implements iAction{
use \sammo\DefaultAction;
class che_수비 extends \sammo\BaseSpecial{
protected $id = 11;
protected $name = '수비';
protected $info = '[내정] 수비 강화 : 기본 보정 +10%, 성공률 +10%p, 비용 -20%';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_STRENGTH
SpecialityHelper::STAT_STRENGTH
];
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
@@ -2,19 +2,18 @@
namespace sammo\ActionSpecialDomestic;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
class che_인덕 implements iAction{
use \sammo\DefaultAction;
class che_인덕 extends \sammo\BaseSpecial{
protected $id = 20;
protected $name = '인덕';
protected $info = '[내정] 주민 선정·정착 장려 : 기본 보정 +10%, 성공률 +10%p, 비용 -20%';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_LEADERSHIP
SpecialityHelper::STAT_LEADERSHIP
];
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
@@ -2,19 +2,18 @@
namespace sammo\ActionSpecialDomestic;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
class che_축성 implements iAction{
use \sammo\DefaultAction;
class che_축성 extends \sammo\BaseSpecial{
protected $id = 10;
protected $name = '축성';
protected $info = '[내정] 기술 연구 : 기본 보정 +10%, 성공률 +10%p, 비용 -20%';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_STRENGTH
SpecialityHelper::STAT_STRENGTH
];
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
@@ -2,19 +2,18 @@
namespace sammo\ActionSpecialDomestic;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
class che_통찰 implements iAction{
use \sammo\DefaultAction;
class che_통찰 extends \sammo\BaseSpecial{
protected $id = 12;
protected $name = '통찰';
protected $info = '[내정] 치안 강화 : 기본 보정 +10%, 성공률 +10%p, 비용 -20%';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_STRENGTH
SpecialityHelper::STAT_STRENGTH
];
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
+4 -5
View File
@@ -2,19 +2,18 @@
namespace sammo\ActionSpecialWar;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
class None implements iAction{
use \sammo\DefaultAction;
class None extends \sammo\BaseSpecial{
protected $id = 0;
protected $name = '-';
protected $info = '';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 0;
static $type = [
SpecialityConst::DISABLED
SpecialityHelper::DISABLED
];
}
+6 -7
View File
@@ -2,25 +2,24 @@
namespace sammo\ActionSpecialWar;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
use \sammo\WarUnit;
use sammo\WarUnitTriggerCaller;
use sammo\WarUnitTrigger\che_격노시도;
use sammo\WarUnitTrigger\che_격노발동;
class che_격노 implements iAction{
use \sammo\DefaultAction;
class che_격노 extends \sammo\BaseSpecial{
protected $id = 74;
protected $name = '격노';
protected $info = '[전투] 상대방 필살 및 회피 시도시 일정 확률로 격노(필살) 발동, 공격 시 일정 확률로 진노(1페이즈 추가)';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_LEADERSHIP,
SpecialityConst::STAT_STRENGTH,
SpecialityConst::STAT_INTEL
SpecialityHelper::STAT_LEADERSHIP,
SpecialityHelper::STAT_STRENGTH,
SpecialityHelper::STAT_INTEL
];
public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
+5 -6
View File
@@ -2,24 +2,23 @@
namespace sammo\ActionSpecialWar;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
use \sammo\WarUnit;
use sammo\WarUnitTriggerCaller;
use sammo\BaseWarUnitTrigger;
use sammo\WarUnitTrigger\WarActivateSkills;
class che_견고 implements iAction{
use \sammo\DefaultAction;
class che_견고 extends \sammo\BaseSpecial{
protected $id = 62;
protected $name = '견고';
protected $info = '[전투] 상대 필살 불가, 상대 계략 시도시 성공 확률 -10%p';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_LEADERSHIP,
SpecialityConst::STAT_STRENGTH
SpecialityHelper::STAT_LEADERSHIP,
SpecialityHelper::STAT_STRENGTH
];
public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
+6 -7
View File
@@ -2,24 +2,23 @@
namespace sammo\ActionSpecialWar;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
use \sammo\GameUnitConst;
use \sammo\WarUnit;
use \sammo\WarUnitCity;
class che_공성 implements iAction{
use \sammo\DefaultAction;
class che_공성 extends \sammo\BaseSpecial{
protected $id = 53;
protected $name = '공성';
protected $info = '[군사] 차병 계통 징·모병비 -10%<br>[전투] 성벽 공격 시 대미지 +100%';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_LEADERSHIP | SpecialityConst::REQ_DEXTERITY | SpecialityConst::ARMY_SIEGE,
SpecialityConst::STAT_STRENGTH | SpecialityConst::REQ_DEXTERITY | SpecialityConst::ARMY_SIEGE,
SpecialityConst::STAT_INTEL | SpecialityConst::REQ_DEXTERITY | SpecialityConst::ARMY_SIEGE,
SpecialityHelper::STAT_LEADERSHIP | SpecialityHelper::REQ_DEXTERITY | SpecialityHelper::ARMY_SIEGE,
SpecialityHelper::STAT_STRENGTH | SpecialityHelper::REQ_DEXTERITY | SpecialityHelper::ARMY_SIEGE,
SpecialityHelper::STAT_INTEL | SpecialityHelper::REQ_DEXTERITY | SpecialityHelper::ARMY_SIEGE,
];
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
+5 -6
View File
@@ -2,22 +2,21 @@
namespace sammo\ActionSpecialWar;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
use \sammo\GameUnitConst;
class che_궁병 implements iAction{
use \sammo\DefaultAction;
class che_궁병 extends \sammo\BaseSpecial{
protected $id = 51;
protected $name = '궁병';
protected $info = '[군사] 궁병 계통 징·모병비 -10%<br>[전투] 회피 확률 +20%p';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_LEADERSHIP | SpecialityConst::REQ_DEXTERITY | SpecialityConst::ARMY_ARCHER,
SpecialityConst::STAT_STRENGTH | SpecialityConst::REQ_DEXTERITY | SpecialityConst::ARMY_ARCHER
SpecialityHelper::STAT_LEADERSHIP | SpecialityHelper::REQ_DEXTERITY | SpecialityHelper::ARMY_ARCHER,
SpecialityHelper::STAT_STRENGTH | SpecialityHelper::REQ_DEXTERITY | SpecialityHelper::ARMY_ARCHER
];
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
+4 -5
View File
@@ -2,21 +2,20 @@
namespace sammo\ActionSpecialWar;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
use \sammo\GameUnitConst;
use \sammo\WarUnit;
class che_귀병 implements iAction{
use \sammo\DefaultAction;
class che_귀병 extends \sammo\BaseSpecial{
protected $id = 40;
protected $name = '귀병';
protected $info = '[군사] 귀병 계통 징·모병비 -10%<br>[전투] 계략 성공 확률 +20%p';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_INTEL | SpecialityConst::ARMY_WIZARD | SpecialityConst::REQ_DEXTERITY
SpecialityHelper::STAT_INTEL | SpecialityHelper::ARMY_WIZARD | SpecialityHelper::REQ_DEXTERITY
];
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
+5 -6
View File
@@ -2,22 +2,21 @@
namespace sammo\ActionSpecialWar;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
use \sammo\GameUnitConst;
use \sammo\WarUnit;
class che_기병 implements iAction{
use \sammo\DefaultAction;
class che_기병 extends \sammo\BaseSpecial{
protected $id = 52;
protected $name = '기병';
protected $info = '[군사] 기병 계통 징·모병비 -10%<br>[전투] 수비 시 대미지 +10%, 공격 시 대미지 +20%';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_LEADERSHIP | SpecialityConst::REQ_DEXTERITY | SpecialityConst::ARMY_CAVALRY,
SpecialityConst::STAT_STRENGTH | SpecialityConst::REQ_DEXTERITY | SpecialityConst::ARMY_CAVALRY
SpecialityHelper::STAT_LEADERSHIP | SpecialityHelper::REQ_DEXTERITY | SpecialityHelper::ARMY_CAVALRY,
SpecialityHelper::STAT_STRENGTH | SpecialityHelper::REQ_DEXTERITY | SpecialityHelper::ARMY_CAVALRY
];
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
+5 -6
View File
@@ -2,24 +2,23 @@
namespace sammo\ActionSpecialWar;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
use \sammo\WarUnit;
use \sammo\BaseWarUnitTrigger;
use \sammo\WarUnitTriggerCaller;
use sammo\WarUnitTrigger\WarActivateSkills;
class che_돌격 implements iAction{
use \sammo\DefaultAction;
class che_돌격 extends \sammo\BaseSpecial{
protected $id = 60;
protected $name = '돌격';
protected $info = '[전투] 상대 회피 불가, 공격 시 전투 페이즈 +1, 공격 시 대미지 +10%';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_LEADERSHIP,
SpecialityConst::STAT_STRENGTH
SpecialityHelper::STAT_LEADERSHIP,
SpecialityHelper::STAT_STRENGTH
];
public function onCalcStat(General $general, string $statName, $value, $aux=null){
+5 -6
View File
@@ -2,21 +2,20 @@
namespace sammo\ActionSpecialWar;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
use \sammo\WarUnit;
class che_무쌍 implements iAction{
use \sammo\DefaultAction;
class che_무쌍 extends \sammo\BaseSpecial{
protected $id = 61;
protected $name = '무쌍';
protected $info = '[전투] 대미지 +10%, 공격 시 필살 확률 +10%p';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_LEADERSHIP,
SpecialityConst::STAT_STRENGTH
SpecialityHelper::STAT_LEADERSHIP,
SpecialityHelper::STAT_STRENGTH
];
public function onCalcStat(General $general, string $statName, $value, $aux=null){
+4 -5
View File
@@ -2,7 +2,7 @@
namespace sammo\ActionSpecialWar;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
use \sammo\WarUnit;
use sammo\WarUnitTriggerCaller;
use \sammo\BaseWarUnitTrigger;
@@ -10,17 +10,16 @@ use \sammo\WarUnitTrigger\WarActivateSkills;
use \sammo\WarUnitTrigger\che_반계시도;
use \sammo\WarUnitTrigger\che_반계발동;
class che_반계 implements iAction{
use \sammo\DefaultAction;
class che_반계 extends \sammo\BaseSpecial{
protected $id = 45;
protected $name = '반계';
protected $info = '[전투] 상대의 계략 성공 확률 -10%p, 상대의 계략을 40% 확률로 되돌림, 반목 성공시 대미지 추가(+60% → +100%)';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_INTEL,
SpecialityHelper::STAT_INTEL,
];
public function onCalcStat(General $general, string $statName, $value, $aux=null){
+5 -6
View File
@@ -2,22 +2,21 @@
namespace sammo\ActionSpecialWar;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
use \sammo\GameUnitConst;
use \sammo\WarUnit;
class che_보병 implements iAction{
use \sammo\DefaultAction;
class che_보병 extends \sammo\BaseSpecial{
protected $id = 50;
protected $name = '보병';
protected $info = '[군사] 보병 계통 징·모병비 -10%<br>[전투] 공격 시 아군 피해 -10%, 수비 시 아군 피해 -20%';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_LEADERSHIP | SpecialityConst::REQ_DEXTERITY | SpecialityConst::ARMY_FOOTMAN,
SpecialityConst::STAT_STRENGTH | SpecialityConst::REQ_DEXTERITY | SpecialityConst::ARMY_FOOTMAN
SpecialityHelper::STAT_LEADERSHIP | SpecialityHelper::REQ_DEXTERITY | SpecialityHelper::ARMY_FOOTMAN,
SpecialityHelper::STAT_STRENGTH | SpecialityHelper::REQ_DEXTERITY | SpecialityHelper::ARMY_FOOTMAN
];
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
+4 -5
View File
@@ -2,20 +2,19 @@
namespace sammo\ActionSpecialWar;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
use \sammo\WarUnit;
class che_신산 implements iAction{
use \sammo\DefaultAction;
class che_신산 extends \sammo\BaseSpecial{
protected $id = 41;
protected $name = '신산';
protected $info = '[계략] 화계·탈취·파괴·선동 : 성공률 +10%p<br>[전투] 계략 시도 확률 +20%p, 계략 성공 확률 +20%p';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_INTEL,
SpecialityHelper::STAT_INTEL,
];
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
+4 -5
View File
@@ -2,20 +2,19 @@
namespace sammo\ActionSpecialWar;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
use \sammo\WarUnit;
class che_신중 implements iAction{
use \sammo\DefaultAction;
class che_신중 extends \sammo\BaseSpecial{
protected $id = 44;
protected $name = '신중';
protected $info = '[전투] 계략 성공 확률 100%';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_INTEL,
SpecialityHelper::STAT_INTEL,
];
public function onCalcStat(General $general, string $statName, $value, $aux=null){
+5 -6
View File
@@ -2,24 +2,23 @@
namespace sammo\ActionSpecialWar;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
use \sammo\WarUnit;
use sammo\WarUnitTriggerCaller;
use \sammo\WarUnitTrigger\che_위압시도;
use \sammo\WarUnitTrigger\che_위압발동;
class che_위압 implements iAction{
use \sammo\DefaultAction;
class che_위압 extends \sammo\BaseSpecial{
protected $id = 63;
protected $name = '위압';
protected $info = '[전투] 훈련/사기≥90, 병력≥1,000 일 때 첫 페이즈 위압 발동(적 공격 불가)';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_LEADERSHIP,
SpecialityConst::STAT_STRENGTH
SpecialityHelper::STAT_LEADERSHIP,
SpecialityHelper::STAT_STRENGTH
];
public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
+6 -7
View File
@@ -2,7 +2,7 @@
namespace sammo\ActionSpecialWar;
use \sammo\iAction;
use sammo\BaseGeneralTrigger;
use sammo\SpecialityConst;
use sammo\SpecialityHelper;
use \sammo\General;
use \sammo\GeneralTrigger;
use \sammo\GeneralTriggerCaller;
@@ -11,19 +11,18 @@ use sammo\WarUnitTrigger\che_전투치료발동;
use sammo\WarUnitTrigger\che_전투치료시도;
use sammo\WarUnitTriggerCaller;
class che_의술 implements iAction{
use \sammo\DefaultAction;
class che_의술 extends \sammo\BaseSpecial{
protected $id = 73;
protected $name = '의술';
protected $info = '[군사] 매 턴마다 자신(100%)과 소속 도시 장수(적 포함 50%) 부상 회복<br>[전투] 페이즈마다 20% 확률로 치료 발동(아군 피해 1/3 감소)';
static $selectWeightType = SpecialityConst::WEIGHT_PERCENT;
static $selectWeightType = SpecialityHelper::WEIGHT_PERCENT;
static $selectWeight = 2;
static $type = [
SpecialityConst::STAT_LEADERSHIP,
SpecialityConst::STAT_STRENGTH,
SpecialityConst::STAT_INTEL
SpecialityHelper::STAT_LEADERSHIP,
SpecialityHelper::STAT_STRENGTH,
SpecialityHelper::STAT_INTEL
];
public function getPreTurnExecuteTriggerList(General $general):?GeneralTriggerCaller{
+6 -7
View File
@@ -2,25 +2,24 @@
namespace sammo\ActionSpecialWar;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
use \sammo\WarUnit;
use sammo\WarUnitTriggerCaller;
use \sammo\WarUnitTrigger\che_저격시도;
use \sammo\WarUnitTrigger\che_저격발동;
class che_저격 implements iAction{
use \sammo\DefaultAction;
class che_저격 extends \sammo\BaseSpecial{
protected $id = 70;
protected $name = '저격';
protected $info = '[전투] 전투 개시 시 1/3 확률로 저격 발동';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_LEADERSHIP,
SpecialityConst::STAT_STRENGTH,
SpecialityConst::STAT_INTEL
SpecialityHelper::STAT_LEADERSHIP,
SpecialityHelper::STAT_STRENGTH,
SpecialityHelper::STAT_INTEL
];
public function getBattleInitSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{
+4 -5
View File
@@ -2,20 +2,19 @@
namespace sammo\ActionSpecialWar;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
use \sammo\WarUnit;
class che_집중 implements iAction{
use \sammo\DefaultAction;
class che_집중 extends \sammo\BaseSpecial{
protected $id = 43;
protected $name = '집중';
protected $info = '[전투] 계략 성공 시 대미지 +50%';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_INTEL,
SpecialityHelper::STAT_INTEL,
];
public function onCalcStat(General $general, string $statName, $value, $aux=null){
+6 -7
View File
@@ -2,22 +2,21 @@
namespace sammo\ActionSpecialWar;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
use \sammo\WarUnit;
class che_징병 implements iAction{
use \sammo\DefaultAction;
class che_징병 extends \sammo\BaseSpecial{
protected $id = 72;
protected $name = '징병';
protected $info = '[군사] 징·모병비 -50%, 통솔 순수 능력치 보정 +15%';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_LEADERSHIP,
SpecialityConst::STAT_STRENGTH,
SpecialityConst::STAT_INTEL
SpecialityHelper::STAT_LEADERSHIP,
SpecialityHelper::STAT_STRENGTH,
SpecialityHelper::STAT_INTEL
];
public function onCalcDomestic(string $turnType, string $varType, float $value, $aux=null):float{
+6 -7
View File
@@ -2,22 +2,21 @@
namespace sammo\ActionSpecialWar;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
use \sammo\WarUnit;
class che_척사 implements iAction{
use \sammo\DefaultAction;
class che_척사 extends \sammo\BaseSpecial{
protected $id = 75;
protected $name = '척사';
protected $info = '[전투] 지역·도시 병종 상대로 대미지 +10%, 아군 피해 -10%';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_LEADERSHIP,
SpecialityConst::STAT_STRENGTH,
SpecialityConst::STAT_INTEL
SpecialityHelper::STAT_LEADERSHIP,
SpecialityHelper::STAT_STRENGTH,
SpecialityHelper::STAT_INTEL
];
public function getWarPowerMultiplier(WarUnit $unit):array{
+6 -7
View File
@@ -2,22 +2,21 @@
namespace sammo\ActionSpecialWar;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
use \sammo\WarUnit;
class che_필살 implements iAction{
use \sammo\DefaultAction;
class che_필살 extends \sammo\BaseSpecial{
protected $id = 71;
protected $name = '필살';
protected $info = '[전투] 필살 확률 +20%p';
static $selectWeightType = SpecialityConst::WEIGHT_NORM;
static $selectWeightType = SpecialityHelper::WEIGHT_NORM;
static $selectWeight = 1;
static $type = [
SpecialityConst::STAT_LEADERSHIP,
SpecialityConst::STAT_STRENGTH,
SpecialityConst::STAT_INTEL
SpecialityHelper::STAT_LEADERSHIP,
SpecialityHelper::STAT_STRENGTH,
SpecialityHelper::STAT_INTEL
];
public function onCalcStat(General $general, string $statName, $value, $aux=null){
+4 -5
View File
@@ -2,20 +2,19 @@
namespace sammo\ActionSpecialWar;
use \sammo\iAction;
use \sammo\General;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
use \sammo\WarUnit;
class che_환술 implements iAction{
use \sammo\DefaultAction;
class che_환술 extends \sammo\BaseSpecial{
protected $id = 42;
protected $name = '환술';
protected $info = '[전투] 계략 성공 확률 +10%p, 계략 성공 시 대미지 +30%';
static $selectWeightType = SpecialityConst::WEIGHT_PERCENT;
static $selectWeightType = SpecialityHelper::WEIGHT_PERCENT;
static $selectWeight = 5;
static $type = [
SpecialityConst::STAT_INTEL,
SpecialityHelper::STAT_INTEL,
];
public function onCalcStat(General $general, string $statName, $value, $aux=null){
+19
View File
@@ -0,0 +1,19 @@
<?php
namespace sammo;
use \sammo\iAction;
use \sammo\General;
abstract class BaseSpecial implements iAction{
use \sammo\DefaultAction;
protected $id = 0;
protected $name = '-';
protected $info = '';
/** @var int */
static $selectWeightType;
/** @var int */
static $selectWeight;
/** @var int[] */
static $type;
}
@@ -38,7 +38,7 @@ class ReqGeneralCrewMargin extends Constraint{
$reqCrewType = GameUnitConst::byID($this->arg);
//XXX: 왜 General -> obj -> General 변환을 하고 있나?
$generalObj = new General($this->general, null, null, null, false);
$generalObj = new General($this->general, null, null, null, null, false);
if($reqCrewType->id != $generalObj->getCrewTypeObj()->id){
return true;
+14 -7
View File
@@ -148,25 +148,33 @@ class GameConstBase
/** @var array 기본 국가 성향 */
public static $neutralNationType = 'che_중립';
/** @var array 기본 내정 특기 */
/** @var string 기본 내정 특기 */
public static $defaultSpecialDomestic = 'None';
/** @var array 선택 가능한 장수 내정 특기 */
public static $availableSpecialDomestic = [
'che_경작', 'che_상재', 'che_발명', 'che_축성', 'che_수비', 'che_통찰', 'che_인덕', 'che_귀모',
];
/** @var array 선택할 수 없으나 게임 내에 유효한 장수 내정 특기 */
public static $optionalSpecialDomestic = [
'None',
];
/** @var array 기본 전투 특기 */
/** @var string 기본 전투 특기 */
public static $defaultSpecialWar = 'None';
/** @var array 선택 가능한 장수 내정 특기 */
/** @var array 선택 가능한 장수 전투 특기 */
public static $availableSpecialWar = [
'che_귀병', 'che_신산', 'che_환술', 'che_집중', 'che_신중', 'che_반계',
'che_보병', 'che_궁병', 'che_기병', 'che_공성',
'che_돌격', 'che_무쌍', 'che_견고', 'che_위압',
'che_저격', 'che_필살', 'che_징병', 'che_의술', 'che_격노', 'che_척사',
];
/** @var array 선택할 수 없으나 게임 내에 유효한 장수 전투 특기 */
public static $optionalSpecialWar = [
'None',
];
/** @var array 기본 성향(공용) */
/** @var string 기본 성향(공용) */
public static $neutralPersonality = 'None';
/** @var array 선택 가능한 성향 */
public static $availablePersonality = [
@@ -174,9 +182,8 @@ class GameConstBase
'che_패권', 'che_의협', 'che_대의', 'che_왕좌'
];
/** @var array 존재하는 모든 성향 */
public static $allPersonality = [
'che_안전', 'che_유지', 'che_재간', 'che_출세', 'che_할거', 'che_정복',
'che_패권', 'che_의협', 'che_대의', 'che_왕좌', 'che_은둔', 'None'
public static $optionalPersonality = [
'che_은둔', 'None'
];
public static $allItems = [
+7 -4
View File
@@ -83,10 +83,13 @@ class General implements iAction{
* @param int $month 게임 월
* @param bool $fullConstruct iAction, 및 ActionLogger 초기화 여부, false인 경우 no, name, city, nation, officer_level 정도로 초기화 가능
*/
public function __construct(array $raw, ?array $rawRank, ?array $city, ?int $year, ?int $month, bool $fullConstruct=true){
public function __construct(array $raw, ?array $rawRank, ?array $city, ?array $nation, ?int $year, ?int $month, bool $fullConstruct=true){
//TODO: 밖에서 가져오도록 하면 버그 확률이 높아짐. 필요한 raw 값을 직접 구해야함.
$staticNation = getNationStaticInfo($raw['nation']);
if($nation === null){
$nation = getNationStaticInfo($raw['nation']);
}
$this->raw = $raw;
$this->rawCity = $city;
@@ -107,8 +110,8 @@ class General implements iAction{
return;
}
$this->nationType = buildNationTypeClass($staticNation['type']);
$this->officerLevelObj = new TriggerOfficerLevel($this->raw, $staticNation['level']);
$this->nationType = buildNationTypeClass($nation['type']);
$this->officerLevelObj = new TriggerOfficerLevel($this->raw, $nation['level']);
$this->specialDomesticObj = buildGeneralSpecialDomesticClass($raw['special']);
$this->specialWarObj = buildGeneralSpecialWarClass($raw['special2']);
+7 -9
View File
@@ -7,7 +7,7 @@ use \sammo\CityHelper;
use \sammo\GameUnitConst;
use \sammo\CityConst;
use \sammo\GameConst;
use \sammo\SpecialityConst;
use \sammo\SpecialityHelper;
class NPC{
@@ -101,17 +101,17 @@ class NPC{
$this->charWar = GameConst::$defaultSpecialWar;
if($char === '랜덤전특'){
$this->charWar = SpecialityConst::pickSpecialWar($general);
$this->charWar = SpecialityHelper::pickSpecialWar($general);
}
else if($char === '랜덤내특'){
$this->charDomestic = SpecialityConst::pickSpecialDomestic($general);
$this->charDomestic = SpecialityHelper::pickSpecialDomestic($general);
}
else if($char === '랜덤'){
if(Util::randBool(2/3)){
$this->charWar = SpecialityConst::pickSpecialWar($general);
$this->charWar = SpecialityHelper::pickSpecialWar($general);
}
else{
$this->charDomestic = SpecialityConst::pickSpecialDomestic($general);
$this->charDomestic = SpecialityHelper::pickSpecialDomestic($general);
}
}
else if($char === null){
@@ -120,12 +120,10 @@ class NPC{
//TODO: 내특, 전특 구분 필요
try{
$domesticClass = \sammo\getGeneralSpecialDomesticClass($char);
$this->charDomestic = Util::getClassName($domesticClass);
$this->charDomestic = SpecialityHelper::getDomesticClassByName($char);
}
catch (\Exception $e) {
$warClass = \sammo\getGeneralSpecialWarClass($char);
$this->charWar = Util::getClassName($warClass);
$this->charWar = SpecialityHelper::getWarClassByName($char);
}
}
}
-262
View File
@@ -1,262 +0,0 @@
<?php
namespace sammo;
//TODO: 나중에는 각 내특, 전특이 클래스로 가야함
class SpecialityConst{
//const GENERIC = 0x0;
const DISABLED = 0x1;
const STAT_LEADERSHIP = 0x2;
const STAT_STRENGTH = 0x4;
const STAT_INTEL = 0x8;
const ARMY_FOOTMAN = 0x100;
const ARMY_ARCHER = 0x200;
const ARMY_CAVALRY = 0x400;
const ARMY_WIZARD = 0x800;
const ARMY_SIEGE = 0x1000;
const REQ_DEXTERITY = 0x4000;
const WEIGHT_NORM = 1;
const WEIGHT_PERCENT = 2;
private $invDomestic = null;
private $invWar = null;
private function __construct(){
}
//음수 : 절대값 %, 양수 : 상대적 비중
const DOMESTIC = [
'che_경작' => ['경작', 1, [self::STAT_INTEL]],
'che_상재' => ['상재', 1, [self::STAT_INTEL]],
'che_발명' => ['발명', 1, [self::STAT_INTEL]],
'che_축성' => ['축성', 1, [self::STAT_STRENGTH]],
'che_수비' => ['수비', 1, [self::STAT_STRENGTH]],
'che_통찰' => ['통찰', 1, [self::STAT_STRENGTH]],
'che_인덕' => ['인덕', 1, [self::STAT_LEADERSHIP]],
'che_귀모' => ['귀모', -2.5, [self::STAT_LEADERSHIP, self::STAT_STRENGTH, self::STAT_INTEL]],
];
const WAR = [
'che_귀병' => ['귀병', 1, [self::STAT_INTEL | self::ARMY_WIZARD | self::REQ_DEXTERITY]],
'che_신산' => ['신산', 1, [self::STAT_INTEL]],
'che_환술' => ['환술', -5, [self::STAT_INTEL]],
'che_집중' => ['집중', 1, [self::STAT_INTEL]],
'che_신중' => ['신중', 1, [self::STAT_INTEL]],
'che_반계' => ['반계', 1, [self::STAT_INTEL]],
'che_보병' => ['보병', 1, [
self::STAT_LEADERSHIP | self::REQ_DEXTERITY | self::ARMY_FOOTMAN,
self::STAT_STRENGTH | self::REQ_DEXTERITY | self::ARMY_FOOTMAN
]],
'che_궁병' => ['궁병', 1, [
self::STAT_LEADERSHIP | self::REQ_DEXTERITY | self::ARMY_ARCHER,
self::STAT_STRENGTH | self::REQ_DEXTERITY | self::ARMY_ARCHER
]],
'che_기병' => ['기병', 1, [
self::STAT_LEADERSHIP | self::REQ_DEXTERITY | self::ARMY_CAVALRY,
self::STAT_STRENGTH | self::REQ_DEXTERITY | self::ARMY_CAVALRY
]],
'che_공성' => ['공성', 1, [
self::STAT_LEADERSHIP | self::REQ_DEXTERITY | self::ARMY_SIEGE,
self::STAT_STRENGTH | self::REQ_DEXTERITY | self::ARMY_SIEGE,
self::STAT_INTEL | self::REQ_DEXTERITY | self::ARMY_SIEGE
]],
'che_돌격' => ['돌격', 1, [self::STAT_LEADERSHIP, self::STAT_STRENGTH]],
'che_무쌍' => ['무쌍', 1, [self::STAT_LEADERSHIP, self::STAT_STRENGTH]],
'che_견고' => ['견고', 1, [self::STAT_LEADERSHIP, self::STAT_STRENGTH]],
'che_위압' => ['위압', 1, [self::STAT_LEADERSHIP, self::STAT_STRENGTH]],
'che_저격' => ['저격', 1, [self::STAT_LEADERSHIP, self::STAT_STRENGTH, self::STAT_INTEL]],
'che_필살' => ['필살', 1, [self::STAT_LEADERSHIP, self::STAT_STRENGTH, self::STAT_INTEL]],
'che_징병' => ['징병', 1, [self::STAT_LEADERSHIP, self::STAT_STRENGTH, self::STAT_INTEL]],
'che_의술' => ['의술', -2, [self::STAT_LEADERSHIP, self::STAT_STRENGTH, self::STAT_INTEL]],
'che_격노' => ['격노', 1, [self::STAT_LEADERSHIP, self::STAT_STRENGTH, self::STAT_INTEL]],
'che_척사' => ['척사', 1, [self::STAT_LEADERSHIP, self::STAT_STRENGTH, self::STAT_INTEL]],
];
public static function getInvDomestic(string $name){
if(static::$invDomestic !== null){
return static::$invDomestic[$name]??null;
}
$invDomestic = [];
foreach(static::DOMESTIC as $key=>$val){
$nameKey = $val[0];
$val[0] = $key;
$invDomestic[$nameKey] = $val;
}
static::$invDomestic = $invDomestic;
return static::$invDomestic[$name]??null;
}
public static function getInvWar(string $name){
if(static::$invWar !== null){
return static::$invWar[$name]??null;
}
$invWar = [];
foreach(static::WAR as $key=>$val){
$nameKey = $val[0];
$val[0] = $key;
$invWar[$nameKey] = $val;
}
static::$invWar = $invWar;
return static::$invWar[$name]??null;
}
private static function calcCondGeneric(array $general) : int {
$myCond = 0;
$leadership = $general['leadership']??50;
$strength = $general['strength']??50;
$intel = $general['intel']??50;
if ($leadership * 0.95 > $strength && $leadership * 0.95 > $intel) {
$myCond |= self::STAT_LEADERSHIP;
}
else if($strength >= $intel){
$myCond |= self::STAT_STRENGTH;
}
else {
$myCond |= self::STAT_INTEL;
}
return $myCond;
}
private static function calcCondDexterity(array $general) : int {
$dex = [
static::ARMY_FOOTMAN => $general['dex1']??0,
static::ARMY_ARCHER => $general['dex2']??0,
static::ARMY_CAVALRY => $general['dex3']??0,
static::ARMY_WIZARD => $general['dex4']??0,
static::ARMY_SIEGE => $general['dex5']??0,
];
$dexSum = array_sum($dex);
$dexBase = Util::round(sqrt($dexSum) / 4);
if(Util::randBool(0.8)){
return 0;
}
if(mt_rand(0, 99) < $dexBase){
return 0;
}
if(!$dexSum){
return array_rand($dex);
}
return array_keys($dex, max($dex))[0];
}
public static function pickSpecialDomestic(array $general) : string{
$pAbs = [];
$pRel = [];
$myCond = static::calcCondGeneric($general);
foreach(self::DOMESTIC as $id=>list($name, $weight, $conds)){
$valid = false;
foreach($conds as $cond){
if($cond === ($cond & $myCond)){
$valid = true;
break;
}
}
if(!$valid){
continue;
}
if($weight < 0){
$pAbs[$id] = -$weight;
}
else{
$pRel[$id] = $weight;
}
}
if($pAbs){
if($pRel){
$pAbs[0] = max(0, 100 - array_sum($pAbs));
}
$id = Util::choiceRandomUsingWeight($pAbs);
if($id){
return $id;
}
}
$id = Util::choiceRandomUsingWeight($pRel);
if($id){
return $id;
}
throw new MustNotBeReachedException();
}
public static function pickSpecialWar(array $general) : string{
$reqDex = [];
$pAbs = [];
$pRel = [];
$myCond = static::calcCondGeneric($general);
$myCond |= static::calcCondDexterity($general);
foreach(self::WAR as $id=>list($name, $weight, $conds)){
$valid = false;
foreach($conds as $cond){
if($cond === ($cond & $myCond)){
$valid = true;
break;
}
}
if(!$valid){
continue;
}
if($cond & self::REQ_DEXTERITY){
$reqDex[$id] = $weight;
}
else if($weight < 0){
$pAbs[$id] = -$weight;
}
else{
$pRel[$id] = $weight;
}
}
if($reqDex){
return Util::choiceRandomUsingWeight($reqDex);
}
if($pAbs){
if($pRel){
$pAbs[0] = max(0, 100 - array_sum($pAbs));
}
$id = Util::choiceRandomUsingWeight($pAbs);
if($id){
return $id;
}
}
$id = Util::choiceRandomUsingWeight($pRel);
if($id){
return $id;
}
throw new MustNotBeReachedException();
}
}
+270
View File
@@ -0,0 +1,270 @@
<?php
namespace sammo;
class SpecialityHelper{
//const GENERIC = 0x0;
const DISABLED = 0x1;
const STAT_LEADERSHIP = 0x2;
const STAT_STRENGTH = 0x4;
const STAT_INTEL = 0x8;
const ARMY_FOOTMAN = 0x100;
const ARMY_ARCHER = 0x200;
const ARMY_CAVALRY = 0x400;
const ARMY_WIZARD = 0x800;
const ARMY_SIEGE = 0x1000;
const REQ_DEXTERITY = 0x4000;
const WEIGHT_NORM = 1;
const WEIGHT_PERCENT = 2;
static $domesticInv = null;
static $warInv = null;
private function __construct(){
}
public static function getDomesticClassByName(?string $type):string{
if($type === null || $type === ''){
$type = GameConst::$defaultSpecialDomestic;
}
if(static::$domesticInv){
if(!key_exists($type, static::$domesticInv)){
throw new \InvalidArgumentException('올바르지 않은 특기명:',$type);
}
return static::$domesticInv[$type];
}
$cache = [];
foreach(static::getSpecialDomesticList(false) as $className=>$classObj){
$cache[$classObj->getName()] = $className;
}
static::$domesticInv = $cache;
return $cache[$type];
}
public static function getWarClassByName(?string $type):string{
if($type === null || $type === ''){
$type = GameConst::$defaultSpecialWar;
}
if(static::$warInv){
if(!key_exists($type, static::$warInv)){
throw new \InvalidArgumentException('올바르지 않은 특기명:',$type);
}
return static::$warInv[$type];
}
$cache = [];
foreach(static::getSpecialWarList(false) as $className=>$classObj){
$cache[$classObj->getName()] = $className;
}
static::$warInv = $cache;
return $cache[$type];
}
private static function calcCondGeneric(array $general) : int {
$myCond = 0;
$leadership = $general['leadership']??50;
$strength = $general['strength']??50;
$intel = $general['intel']??50;
if ($leadership * 0.95 > $strength && $leadership * 0.95 > $intel) {
$myCond |= self::STAT_LEADERSHIP;
}
else if($strength >= $intel){
$myCond |= self::STAT_STRENGTH;
}
else {
$myCond |= self::STAT_INTEL;
}
return $myCond;
}
private static function calcCondDexterity(array $general) : int {
$dex = [
static::ARMY_FOOTMAN => $general['dex1']??0,
static::ARMY_ARCHER => $general['dex2']??0,
static::ARMY_CAVALRY => $general['dex3']??0,
static::ARMY_WIZARD => $general['dex4']??0,
static::ARMY_SIEGE => $general['dex5']??0,
];
$dexSum = array_sum($dex);
$dexBase = Util::round(sqrt($dexSum) / 4);
if(Util::randBool(0.8)){
return 0;
}
if(mt_rand(0, 99) < $dexBase){
return 0;
}
if(!$dexSum){
return array_rand($dex);
}
return array_keys($dex, max($dex))[0];
}
/** @return BaseSpecial[] */
public static function getSpecialDomesticList(bool $onlyAvailable=true):array{
$result = [];
if(!$onlyAvailable){
$specialObj = buildGeneralSpecialDomesticClass(GameConst::$defaultSpecialDomestic);
$result[GameConst::$defaultSpecialDomestic] = $specialObj;
}
foreach(GameConst::$availableSpecialDomestic as $specialID){
$specialObj = buildGeneralSpecialDomesticClass($specialID);
$result[$specialID] = $specialObj;
}
if(!$onlyAvailable){
foreach(GameConst::$availableSpecialDomestic as $specialID){
$specialObj = buildGeneralSpecialDomesticClass($specialID);
$result[$specialID] = $specialObj;
}
}
return $result;
}
/** @return BaseSpecial[] */
public static function getSpecialWarList(bool $onlyAvailable=true):array{
$result = [];
if(!$onlyAvailable){
$specialObj = buildGeneralSpecialDomesticClass(GameConst::$defaultSpecialDomestic);
$result[GameConst::$defaultSpecialDomestic] = $specialObj;
}
foreach(GameConst::$availableSpecialDomestic as $specialID){
$specialObj = buildGeneralSpecialDomesticClass($specialID);
$result[$specialID] = $specialObj;
}
if(!$onlyAvailable){
foreach(GameConst::$availableSpecialDomestic as $specialID){
$specialObj = buildGeneralSpecialDomesticClass($specialID);
$result[$specialID] = $specialObj;
}
}
return $result;
}
public static function pickSpecialDomestic(array $general) : string{
$pAbs = [];
$pRel = [];
$myCond = static::calcCondGeneric($general);
foreach(static::getSpecialDomesticList() as $specialID=>$specialObj){
$conds = $specialObj::$type;
$name = $specialObj->getName();
$weightType = $specialObj::$selectWeightType;
$weight = $specialObj::$selectWeight;
$valid = false;
foreach($conds as $cond){
if($cond === ($cond & $myCond)){
$valid = true;
break;
}
}
if(!$valid){
continue;
}
if($weightType === static::WEIGHT_PERCENT){
$pAbs[$specialID] = $weight;
}
else{
$pRel[$specialID] = $weight;
}
}
if($pAbs){
if($pRel){
$pAbs[0] = max(0, 100 - array_sum($pAbs));
}
$id = Util::choiceRandomUsingWeight($pAbs);
if($id){
return $id;
}
}
$id = Util::choiceRandomUsingWeight($pRel);
if($id){
return $id;
}
throw new MustNotBeReachedException();
}
public static function pickSpecialWar(array $general) : string{
$reqDex = [];
$pAbs = [];
$pRel = [];
$myCond = static::calcCondGeneric($general);
$myCond |= static::calcCondDexterity($general);
foreach(static::getSpecialWarList() as $specialID=>$specialObj){
$conds = $specialObj::$type;
$name = $specialObj->getName();
$weightType = $specialObj::$selectWeightType;
$weight = $specialObj::$selectWeight;
$valid = false;
foreach($conds as $cond){
if($cond === ($cond & $myCond)){
$valid = true;
break;
}
}
if(!$valid){
continue;
}
if($cond & self::REQ_DEXTERITY){
$reqDex[$specialID] = $weight;
}
else if($weightType === static::WEIGHT_PERCENT){
$pAbs[$specialID] = $weight;
}
else{
$pRel[$specialID] = $weight;
}
}
if($reqDex){
return Util::choiceRandomUsingWeight($reqDex);
}
if($pAbs){
if($pRel){
$pAbs[0] = max(0, 100 - array_sum($pAbs));
}
$id = Util::choiceRandomUsingWeight($pAbs);
if($id){
return $id;
}
}
$id = Util::choiceRandomUsingWeight($pRel);
if($id){
return $id;
}
throw new MustNotBeReachedException();
}
}
+8 -9
View File
@@ -37,16 +37,15 @@ $nationList = $db->query('SELECT nation,`name`,color,scout,scoutmsg FROM nation
var specialInfo =
<?php
$specialAll = [];
foreach (GameConst::$availableSpecialDomestic as $id) {
$domesticClass = buildGeneralSpecialDomesticClass($id);
$name = $domesticClass->getName();
$info = $domesticClass->getInfo();
foreach(SpecialityHelper::getSpecialDomesticList() as $specialID=>$specialObj){
$name = $specialObj->getName();
$info = $specialObj->getInfo();
$specialAll[$name] = $info;
}
foreach (SpecialityConst::WAR as $id=>$values) {
$name = $values[0];
$text = getSpecialInfo($id);
$specialAll[$name] = $text;
foreach(SpecialityHelper::getSpecialWarList() as $specialID=>$specialObj){
$name = $specialObj->getName();
$info = $specialObj->getInfo();
$specialAll[$name] = $info;
}
$specialAll['-'] = '없음';
echo Json::encode($specialAll);
@@ -55,7 +54,7 @@ echo Json::encode($specialAll);
var characterInfo =
<?php
$characterAll = [];
foreach(getCharacterList() as $id=>[$name, $info]){
foreach(getCharacterList(false) as $id=>[$name, $info]){
$characterAll[$name] = $info;
}
echo Json::encode($characterAll);