From 39b65284bdc5107057a6d0b4ab5c7cd79086e3d7 Mon Sep 17 00:00:00 2001 From: hide_d Date: Wed, 15 Apr 2020 05:34:27 +0900 Subject: [PATCH] =?UTF-8?q?experience,=20dedication=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=20expereince,=20dedication=20=EB=B3=80=EA=B2=BD=EC=9D=84=20add?= =?UTF-8?q?=20=ED=95=A8=EC=88=98=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20=EA=B2=BD?= =?UTF-8?q?=ED=97=98=EC=B9=98,=EA=B3=84=EA=B8=89=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=EC=9D=84=20'=EC=A6=89=EC=8B=9C'=20=ED=95=98=EB=8F=84=EB=A1=9D?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD(=EB=82=A8=EC=9D=80=20=EB=B6=80=EB=B6=84?= =?UTF-8?q?=20=EC=9E=88=EC=9D=8C)=20=EA=B4=80=EC=A7=81=20=EC=9E=84?= =?UTF-8?q?=EB=AA=85=EC=9D=84=20c=EC=97=90=EC=84=9C=20j=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/c_myBossInfo.php | 351 ------------------ hwe/func.php | 42 --- hwe/func_converter.php | 15 +- hwe/func_gamerule.php | 157 ++++---- hwe/func_process_chief.php | 1 + hwe/func_tournament.php | 1 + hwe/j_myBossInfo.php | 394 +++++++++++++++++++++ hwe/process_war.php | 1 + hwe/sammo/Command/General/che_강행.php | 4 +- hwe/sammo/Command/General/che_거병.php | 7 +- hwe/sammo/Command/General/che_건국.php | 7 +- hwe/sammo/Command/General/che_견문.php | 4 +- hwe/sammo/Command/General/che_군량매매.php | 9 +- hwe/sammo/Command/General/che_귀환.php | 6 +- hwe/sammo/Command/General/che_기술연구.php | 8 +- hwe/sammo/Command/General/che_단련.php | 3 +- hwe/sammo/Command/General/che_등용.php | 7 +- hwe/sammo/Command/General/che_등용수락.php | 12 +- hwe/sammo/Command/General/che_랜덤임관.php | 3 +- hwe/sammo/Command/General/che_물자조달.php | 7 +- hwe/sammo/Command/General/che_사기진작.php | 7 +- hwe/sammo/Command/General/che_상업투자.php | 7 +- hwe/sammo/Command/General/che_소집해제.php | 9 +- hwe/sammo/Command/General/che_요양.php | 7 +- hwe/sammo/Command/General/che_이동.php | 3 +- hwe/sammo/Command/General/che_인재탐색.php | 14 +- hwe/sammo/Command/General/che_임관.php | 3 +- hwe/sammo/Command/General/che_장비매매.php | 3 +- hwe/sammo/Command/General/che_전투태세.php | 7 +- hwe/sammo/Command/General/che_정착장려.php | 9 +- hwe/sammo/Command/General/che_주민선정.php | 7 +- hwe/sammo/Command/General/che_증여.php | 7 +- hwe/sammo/Command/General/che_집합.php | 7 +- hwe/sammo/Command/General/che_징병.php | 7 +- hwe/sammo/Command/General/che_첩보.php | 7 +- hwe/sammo/Command/General/che_하야.php | 4 +- hwe/sammo/Command/General/che_헌납.php | 7 +- hwe/sammo/Command/General/che_화계.php | 14 +- hwe/sammo/Command/General/che_훈련.php | 7 +- hwe/sammo/Command/Nation/che_감축.php | 12 +- hwe/sammo/Command/Nation/che_물자원조.php | 4 +- hwe/sammo/Command/Nation/che_백성동원.php | 12 +- hwe/sammo/Command/Nation/che_수몰.php | 12 +- hwe/sammo/Command/Nation/che_의병모집.php | 12 +- hwe/sammo/Command/Nation/che_증축.php | 12 +- hwe/sammo/Command/Nation/che_천도.php | 12 +- hwe/sammo/Command/Nation/che_피장파장.php | 12 +- hwe/sammo/Command/Nation/che_필사즉생.php | 12 +- hwe/sammo/Command/Nation/che_허보.php | 12 +- hwe/sammo/GameConstBase.php | 2 + hwe/sammo/General.php | 75 +++- hwe/sammo/GeneralAI.php | 4 +- hwe/sammo/WarUnitGeneral.php | 6 +- 53 files changed, 653 insertions(+), 721 deletions(-) delete mode 100644 hwe/c_myBossInfo.php create mode 100644 hwe/j_myBossInfo.php diff --git a/hwe/c_myBossInfo.php b/hwe/c_myBossInfo.php deleted file mode 100644 index cecc32b0..00000000 --- a/hwe/c_myBossInfo.php +++ /dev/null @@ -1,351 +0,0 @@ -setReadOnly(); -$userID = Session::getUserID(); - -$db = DB::db(); -$gameStor = KVStorage::getStorage($db, 'game_env'); -$connect=$db->get(); - -$admin = $gameStor->getValues(['startyear','year','month','scenario']); - -$query = "select no,nation,level from general where owner='{$userID}'"; -$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); -$me = MYDB_fetch_array($result); -$meLevel = $me['level']; - -$query = "select no from general where nation='{$me['nation']}' and level=12"; -$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); -$ruler = MYDB_fetch_array($result); - -//수뇌가 아니면 아무것도 할 수 없음 -if($meLevel < 5){ - header('location:b_myBossInfo.php', true, 303); - exit(); -} - -if($btn == "임명") { - if($genlist==0){ - $general = []; - } - else{ - $general = $db->queryFirstRow('SELECT `no`,nation,`level`,leadership,`strength`,intel FROM general WHERE no = %i', $genlist); - } - - if($genlist != 0 && !$general){ - header('location:b_myBossInfo.php', true, 303); - exit(); - } - - //임명할사람이 군주이면 불가, 내가 수뇌부이어야함, 공석아닌때는 국가가 같아야함 - if($meLevel < 5 || ($genlist != 0 && $general['nation'] != $me['nation']) || ($genlist != 0 && $general['level'] == 12)) { - header('location:b_myBossInfo.php', true, 303); - exit(); - } -} elseif($btn == "추방") { - if(!$outlist){ - header('location:b_myBossInfo.php', true, 303); - exit(); - } - $query = "select no,name,gold,rice,nation,troop,level,npc,picture,imgsvr,permission,penalty,belong from general where no='$outlist'"; - $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $general = MYDB_fetch_array($result); - - if(!$general){ - header('location:b_myBossInfo.php', true, 303); - exit(); - } - - //추방할사람이 군주이면 불가, 내가 수뇌부이어야함, 공석아닌때는 국가가 같아야함 - if($general['level'] == 12 || $meLevel < 5 || ($general['nation'] != $me['nation'] && $outlist != 0)) { - header('location:b_myBossInfo.php', true, 303); - exit(); - } - - //추방할사람이 외교권자이면 불가 - $permission = checkSecretPermission($general); - if($permission == 4){ - header('location:b_myBossInfo.php', true, 303); - exit(); - } - - //NPC 부대장 추방 불가 - if($general['npc'] == 5){ - header('location:b_myBossInfo.php', true, 303); - exit(); - } -} - -//나와 대상 장수는 국가가 같아야 함 -if($genlist != 0 && $me['nation'] != $general['nation']){ - header('location:b_myBossInfo.php', true, 303); - exit(); -} - -if($btn == "추방") { - $query = "select name,l{$meLevel}set,color from nation where nation='{$me['nation']}'"; - $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $nation = MYDB_fetch_array($result); - - $alllog = []; - - //이미 지정했다면 무시 - if($nation["l{$meLevel}set"] == 0 && $general['level'] > 0 && $general['level'] < 12) { - $dipcount1 = $db->queryFirstField('SELECT count(no) FROM diplomacy WHERE me=%i AND state>=3 AND state<=4', $general['nation']); - $dipcount2 = $db->queryFirstField('SELECT count(no) FROM diplomacy WHERE me=%i AND state>=5 AND state<=6', $general['nation']); - - $gold = 0; - $rice = 0; - // 금쌀1000이상은 남김 - if($general['gold'] > GameConst::$defaultGold) { - $gold = $general['gold'] - GameConst::$defaultGold; - $general['gold'] = GameConst::$defaultGold; - } - if($general['rice'] > GameConst::$defaultRice) { - $rice = $general['rice'] - GameConst::$defaultRice; - $general['rice'] = GameConst::$defaultRice; - } - - if($dipcount1 > 0) { - $josaYi = JosaUtil::pick($general['name'], '이'); - $alllog[] = "●{$admin['month']}월:통합에 반대하던 {$general['name']}{$josaYi} {$nation['name']}에서 숙청당했습니다."; - $log[] = "●통합에 반대하다가 {$nation['name']}에서 숙청당했습니다."; - - // 재야로, 국가 무소속으로 - $query = "update general set level=0,nation=0,belong=0,makelimit='12',gold='{$general['gold']}',rice='{$general['rice']}' where no='{$general['no']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - } elseif($dipcount2 > 0) { - $josaYi = JosaUtil::pick($general['name'], '이'); - $alllog[] = "●{$admin['month']}월:합병에 반대하던 {$general['name']}{$josaYi} {$nation['name']}에서 숙청당했습니다."; - $log[] = "●합병에 반대하다가 {$nation['name']}에서 숙청당했습니다."; - - // 재야로, 국가 무소속으로 - $query = "update general set level=0,nation=0,belong=0,makelimit='12',gold='{$general['gold']}',rice='{$general['rice']}' where no='{$general['no']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - } else { - $josaYi = JosaUtil::pick($general['name'], '이'); - $alllog[] = "●{$admin['month']}월:{$general['name']}{$josaYi} {$nation['name']}에서 추방당하였습니다."; - $log[] = "{$nation['name']}에서 추방당하였습니다."; - - // 재야로, 국가 무소속으로, 명성/공헌 N*10%감소 - if($admin['year'] <= $admin['startyear'] && $general['npc'] < 2){ - $db->update('general', [ - 'level'=>0, - 'nation'=>0, - 'belong'=>0, - 'permission'=>'normal', - ], 'no=%i', $general['no']); - } - else{ - $db->update('general', [ - 'level'=>0, - 'permission'=>'normal', - 'nation'=>0, - 'belong'=>0, - 'makelimit'=>12, - 'gold'=>$general['gold'], - 'rice'=>$general['rice'], - 'experience'=>$db->sqleval('experience * (1 - 0.1*betray)'), - 'dedication'=>$db->sqleval('dedication * (1 - 0.1*betray)'), - 'betray'=>$db->sqleval('betray + 1'), - ], 'no=%i', $general['no']); - } - } - - //부대장일 경우 - if($general['troop'] == $general['no']){ - // 모두 탈퇴 - $db->update('general', [ - 'troop'=>0, - ], 'troop = %i', $general['no']); - $db->delete('troop', 'troop_leader=%i', $general['no']); - } - else { - $db->update('general', [ - 'troop'=>0, - ], 'no=%i', $general['no']); - } - - // 도시관직해제 - if(2 <= $general['level'] && $general['level'] <= 4){ - $db->update('city', [ - 'officer'.$general['level']=>0 - ], "officer{$general['level']} = %i", $general['no']); - } - - if($general['npc'] >= 2 && ($admin['scenario'] < 100 || rand()%100 == 0)) { - switch(rand()%5) { - case 0: $str = "날 버리다니... 곧 전장에서 복수해주겠다..."; break; - case 1: $str = "추방이라... 내가 무얼 잘못했단 말인가..."; break; - case 2: $str = "어디 추방해가면서 잘되나 보자... 꼭 복수하겠다..."; break; - case 3: $str = "인덕이 제일이거늘... 추방이 웬말인가... 저주한다!"; break; - case 4: $str = "날 추방했으니 그 복수로 적국에 정보를 팔아 넘겨야겠군요. 그럼 이만."; break; - } - - $src = new MessageTarget( - $general['no'], - $general['name'], - $general['nation'], - $nation['name'], - $nation['color'], - GetImageURL($general['imgsvr'], $general['picture']) - ); - $msg = new Message( - Message::MSGTYPE_PUBLIC, - $src, - $src, - $str, - new \DateTime(), - new \DateTime('9999-12-31'), - [] - ); - $msg->send(); - } - - if($admin['year'] < $admin['startyear']+3) { - //초반엔 군주 부상 증가(엔장 임관지양) - $db->update('general', [ - 'injury'=>$db->sqleval('least(injury + 1, %i)', 80), - ], 'no=%i', $ruler['no']); - - $db->update('nation', [ - 'gennum'=>$db->sqleval('gennum - 1'), - 'gold'=>$db->sqleval('gold + %i', $gold), - 'rice'=>$db->sqleval('rice + %i', $rice), - ], 'nation = %i', $general['nation']); - } else { - //이번분기는 추방불가(초반 제외) - $db->update('nation', [ - "l{$meLevel}set"=>1, - 'gennum'=>$db->sqleval('gennum - 1'), - 'gold'=>$db->sqleval('gold + %i', $gold), - 'rice'=>$db->sqleval('rice + %i', $rice), - ], 'nation = %i', $general['nation']); - } - - list($year, $month) = $gameStor->getValuesAsArray(['year','month']); - pushGeneralHistory($general, "●{$year}년 {$month}월:{$nation['name']}에서 추방됨"); - - pushGenLog($general, $log); - pushGeneralPublicRecord($alllog, $year, $month); - } - header('location:b_myBossInfo.php', true, 303); - die(); -} - -if($btn == "임명" && $level >= 5 && $level <= 11) { - $query = "select l{$level}set,level from nation where nation='{$me['nation']}'"; - $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $nation = MYDB_fetch_array($result); - - // 임명가능 레벨 - $lv = getNationChiefLevel($nation['level']); - - //이미 지정했다면 무시 - if($nation["l{$level}set"] == 0 && $lv <= $level) { - //기존 장수 일반으로 - $query = "update general set level=1 where nation='{$me['nation']}' and level='$level'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - if($genlist != 0) { - $valid = 0; - switch($level) { - case 10: if($general['strength'] >= GameConst::$chiefStatMin) { $valid = 1; } break; - case 9: if($general['intel'] >= GameConst::$chiefStatMin) { $valid = 1; } break; - case 8: if($general['strength'] >= GameConst::$chiefStatMin) { $valid = 1; } break; - case 7: if($general['intel'] >= GameConst::$chiefStatMin) { $valid = 1; } break; - case 6: if($general['strength'] >= GameConst::$chiefStatMin) { $valid = 1; } break; - case 5: if($general['intel'] >= GameConst::$chiefStatMin) { $valid = 1; } break; - default: $valid = 1; break; - } - if($valid == 1) { - // 신임 장수의 원래 자리 해제 - if(2 <= $general['level'] && $general['level'] <= 4){ - $db->update('city', [ - 'officer'.$general['level']=>0 - ], "officer{$general['level']} = %i", $general['no']); - } - //신임 장수 - $query = "update general set level='$level' where no='$genlist'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - //이번분기는 불가 - $query = "update nation set l{$level}set=1 where nation='{$me['nation']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - } - } - } - header('location:b_myBossInfo.php', true, 303); - die(); -} - - -if($btn == "임명" && $level >= 2 && $level <= 4 && $citylist > 0) { - $genlv = 'officer'.$level; - $genlvset = 'officer'.$level.'set'; - - $query = "select {$genlv} from city where nation='{$me['nation']}' and city='$citylist'"; - $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $city = MYDB_fetch_array($result); - if(!$city){ - header('location:b_myBossInfo.php', true, 303); - die(); - } - $oldlist = $city[$genlv]; - - if($oldlist != 0) { - //기존 장수 일반으로 - $db->update('general', [ - 'level'=>1 - ], 'no=%i', $oldlist); - //기존 자리 공석으로 - $db->update('city', [ - $genlv=>0 - ], 'city = %i AND nation = %i', $citylist , $me['nation']); - } - if($genlist != 0) { - $valid = 0; - switch($level) { - case 4: if($general['strength'] >= GameConst::$chiefStatMin) { $valid = 1; } break; - case 3: if($general['intel'] >= GameConst::$chiefStatMin) { $valid = 1; } break; - default: $valid = 1; break; - } - - if($valid == 1) { - // 신임 장수의 원래 자리 해제 - if(2 <= $general['level'] && $general['level'] <= 4){ - $db->update('city', [ - 'officer'.$general['level']=>0 - ], "officer{$general['level']} = %i", $general['no']); - } - - //신임 장수 - $db->update('city', [ - $genlv=>$genlist, - $genlvset=>1 - ], 'city=%i AND nation=%i', $citylist, $general['nation']); - if($db->affectedRows() > 0){ - $db->update('general',[ - 'level'=>$level - ], 'no=%i', $genlist); - } - } - } - header('location:b_myBossInfo.php', true, 303); - die(); -} - - -header('location:b_myBossInfo.php', true, 303); - - diff --git a/hwe/func.php b/hwe/func.php index ba00fc87..af9a2c1e 100644 --- a/hwe/func.php +++ b/hwe/func.php @@ -1612,48 +1612,6 @@ function tryUniqueItemLottery(General $general, string $acquireType='아이템') return true; } -function checkDedication($general, $log) { - $db = DB::db(); - $connect=$db->get(); - - $dedlevel = getDedLevel($general['dedication']); - - $query = "update general set dedlevel='$dedlevel' where no='{$general['no']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - - // 승급했다면 - $josaRoDed = JosaUtil::pick(getDed($general['dedication']), '로'); - $josaRoBill = JosaUtil::pick(getBill($general['dedication']), '로'); - if($general['dedlevel'] < $dedlevel) { - $log[] = "".getDed($general['dedication'])."{$josaRoDed} 승급하여 봉록이 ".getBill($general['dedication'])."{$josaRoBill} 상승했습니다!"; - // 강등했다면 - } elseif($general['dedlevel'] > $dedlevel) { - $log[] = "".getDed($general['dedication'])."{$josaRoDed} 강등되어 봉록이 ".getBill($general['dedication'])."{$josaRoBill} 하락했습니다!"; - } - - return $log; -} - -function checkExperience($general, $log) { - $db = DB::db(); - $connect=$db->get(); - - $explevel = getExpLevel($general['experience']); - - $query = "update general set explevel='$explevel' where no='{$general['no']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - - // 승급했다면 - if($general['explevel'] < $explevel) { - $log[] = "Lv $explevel로 레벨업!"; - // 강등했다면 - } elseif($general['explevel'] > $explevel) { - $log[] = "Lv $explevel로 레벨다운!"; - } - - return $log; -} - function getAdmin() { $db = DB::db(); $gameStor = KVStorage::getStorage($db, 'game_env'); diff --git a/hwe/func_converter.php b/hwe/func_converter.php index a75f3e05..c17e5992 100644 --- a/hwe/func_converter.php +++ b/hwe/func_converter.php @@ -435,11 +435,13 @@ function getCall($leadership, $strength, $intel) { } function getDed($dedication) { - $dedLevel = getDedLevel($dedication); - if($dedLevel == 0){ + return getDedLevelText(getDedLevel($dedication)); +} + +function getDedLevelText(int $dedLevel):string{ + if($dedLevel === 0){ return '무품관'; } - //{$maxDedLevel}품관 ~ 1품관 $dedInvLevel = GameConst::$maxDedLevel - $dedLevel + 1; return "{$dedInvLevel}품관"; @@ -497,8 +499,11 @@ function getLevelPer($exp, $level) { } function getBill(int $dedication) : int{ - $level = getDedLevel($dedication); - return ($level * 200 + 400); + return getBillByLevel(getDedLevel($dedication)); +} + +function getBillByLevel(int $dedLevel) : int{ + return ($dedLevel * 200 + 400); } function getCost(int $armtype) : int { diff --git a/hwe/func_gamerule.php b/hwe/func_gamerule.php index c6fd306b..51de772f 100644 --- a/hwe/func_gamerule.php +++ b/hwe/func_gamerule.php @@ -254,62 +254,86 @@ function preUpdateMonthly() { //연감 월결산 $result = LogHistory(); - $history = array(); if($result == false) { return false; } + $admin = $gameStor->getValues(['startyear', 'year', 'month']); - - //배신 횟수 최대 10회 미만 - $query = "update general set betray=9 where betray>9"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); + $logger = new ActionLogger(0, 0, $admin['year'], $admin['month']); //보급선 체크 checkSupply(); //미보급도시 10% 감소 - $query = "update city set pop=pop*0.9,trust=trust*0.9,agri=agri*0.9,comm=comm*0.9,secu=secu*0.9,def=def*0.9,wall=wall*0.9 where supply='0'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - //미보급도시 장수 5% 감소 - $query = "select city,nation from city where supply='0'"; - $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $cityCount = MYDB_num_rows($result); - for($i=0; $i < $cityCount; $i++) { - $city = MYDB_fetch_array($result); - //병 훈 사 5%감소 - $query = "update general set crew=crew*0.95,atmos=atmos*0.95,train=train*0.95 where city='{$city['city']}' and nation='{$city['nation']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); + $db->update('city', [ + 'pop'=>$db->sqleval('pop * 0.9'), + 'trust'=>$db->sqleval('trust * 0.9'), + 'agri'=>$db->sqleval('agri * 0.9'), + 'comm'=>$db->sqleval('comm * 0.9'), + 'secu'=>$db->sqleval('secu * 0.9'), + 'def'=>$db->sqleval('def * 0.9'), + 'wall'=>$db->sqleval('wall * 0.9'), + ], 'supply = 0'); + //미보급도시 장수 병 훈 사 5%감소 + //NOTE: update inner join도 가능하지만, meekrodb 기준으로 깔끔하게. + $unsuppliedCities = $db->query('SELECT city, nation, trust, name, officer4, officer3, officer2 FROM city WHERE supply = 0'); + foreach(Util::arrayGroupBy($unsuppliedCities, 'nation') as $nationID => $cityList){ + $cityIDList = Util::squeezeFromArray($cityList, 'city'); + $db->update('general', [ + 'crew'=>$db->sqleval('crew*0.95'), + 'atmos'=>$db->sqleval('atmos*0.95'), + 'train'=>$db->sqleval('train*0.95'), + ], 'city IN %li AND nation = %i', $cityIDList, $nationID); } + //민심30이하 공백지 처리 - $query = "select city,name,officer4,officer3,officer2 from city where trust<=30 and supply='0'"; - $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $cityCount = MYDB_num_rows($result); - for($i=0; $i < $cityCount; $i++) { - $city = MYDB_fetch_array($result); - - $query = "update general set level=1 where no='{$city['officer4']}' or no='{$city['officer3']}' or no='{$city['officer2']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - - $josaYi = JosaUtil::pick($city['name'], '이'); - $history[] = "●{$admin['year']}년 {$admin['month']}월:【고립】{$city['name']}{$josaYi} 보급이 끊겨 미지배 도시가 되었습니다."; + $lostCityGenerals = []; + $lostCities = []; + foreach($unsuppliedCities as $unsuppliedCity){ + if($unsuppliedCity['trust'] >= 30){ + continue; + } + $lostCities[$unsuppliedCity['city']] = $unsuppliedCity; + $lostCityGenerals[$unsuppliedCity['officer4']] = true; + $lostCityGenerals[$unsuppliedCity['officer3']] = true; + $lostCityGenerals[$unsuppliedCity['officer2']] = true; + } + if(key_exists(0, $lostCityGenerals)){ + unset($lostCityGenerals[0]); } - pushWorldHistory($history, $admin['year'], $admin['month']); - //민심30이하 공백지 처리 - $query = "update city set nation='0',officer4='0',officer3='0',officer2='0',conflict='{}',term=0,front=0 where trust<=30 and supply='0'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - //접률감소 - $query = "update general set connect=floor(connect*0.99)"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - //건국제한, 전략제한, 외교제한-1 - $query = "update general set makelimit=makelimit-1 where makelimit>'0'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $query = "update nation set strategic_cmd_limit=strategic_cmd_limit-1 where strategic_cmd_limit>'0'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $query = "update nation set surlimit=surlimit-1 where surlimit>'0'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - //세율 동기화 목적 - $query = "update nation set rate_tmp=rate"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); + if($lostCityGenerals){ + $db->update('general', [ + 'level'=>1 + ], 'no IN %li', array_keys($lostCityGenerals)); + } + if($lostCities){ + $history = []; + foreach($lostCities as $lostCity){ + $josaYi = JosaUtil::pick($lostCity['name'], '이'); + $logger->pushGlobalHistoryLog("【고립】{$lostCity['name']}{$josaYi} 보급이 끊겨 미지배 도시가 되었습니다."); + } + $db->update('city', [ + 'nation'=>0, + 'officer4'=>0, + 'officer3'=>0, + 'officer2'=>0, + 'conflict'=>'{}', + 'term'=>0, + 'front'=>0 + ], 'city IN %li', array_keys($lostCities)); + } + + //접률감소, 건국제한-1 + $db->update('general', [ + 'connect'=>$db->sqleval('floor(connect*0.99)'), + 'makelimit'=>$db->sqleval('greatest(0, makelimit - 1)'), + ], true); + //전략제한-1, 외교제한-1, 세율동기화 + $db->update('nation', [ + 'strategic_cmd_limit'=>$db->sqleval('greatest(0, strategic_cmd_limit - 1)'), + 'surlimit'=>$db->sqleval('greatest(0, surlimit - 1)'), + 'rate_tmp'=>$db->sqleval('rate') + ], true); //도시훈사 180년 60, 220년 87, 240년 100 $rate = Util::round(($admin['year'] - $admin['startyear']) / 1.5) + 60; @@ -327,34 +351,21 @@ function preUpdateMonthly() { processWarIncome($ratio); //계략, 전쟁표시 해제 - $query = "update city set state=0 where state=31 or state=33"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $query = "update city set state=state-1 where state=32 or state=34"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $query = "update city set term=term-1 where term>0"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $query = "update city set conflict='{}' where term=0"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $query = "update city set state=0 where state=41"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $query = "update city set state=41 where state=42"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $query = "update city set state=42 where state=43"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - - // 계급 검사 및 승,강급 - $query = "select no,name,dedication,dedlevel,experience,explevel from general"; - $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $gencount = MYDB_num_rows($result); - - for($i=0; $i < $gencount; $i++) { - $general = MYDB_fetch_array($result); - - $log = []; - $log = checkDedication($general, $log); - $log = checkExperience($general, $log); - pushGenLog($general, $log); - } + $db->update('city', [ + 'state'=>$db->sqleval(<<$db->sqleval('greatest(0, term - 1'), + 'conflict'=>$db->sqleval('if(term = 0,%s,conflict)', '{}'), + ], true); //첩보-1 foreach($db->queryAllLists("SELECT nation, spy FROM nation WHERE spy!='' AND spy!='{}'") as [$nationNo, $rawSpy]){ @@ -681,6 +692,7 @@ function checkMerge() { $query = "update general set belong=1,level=1,nation='{$you['nation']}' where nation='{$me['nation']}'"; MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); // 공헌도0.9, 명성0.9 + //TODO:experience General 객체로 이동 $query = "update general set dedication=dedication*0.9,experience=experience*0.9 where nation='{$you['nation']}'"; MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); // 부대도 모두 국가 소속 변경 @@ -840,6 +852,7 @@ function checkSurrender() { $query = "update city set nation='{$you['nation']}',officer4='0',officer3='0',officer2='0',conflict='{}' where nation='{$me['nation']}'"; MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); // 제의국 모든 장수들 공헌도0.95, 명성0.95 + //TODO: experience를 General로 $query = "update general set dedication=dedication*0.95,experience=experience*0.95 where nation='{$you['nation']}'"; MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); // 아국 모든 장수들 일반으로 하고 상대국 소속으로, 수도로 이동, 공헌도1.1, 명성0.9 diff --git a/hwe/func_process_chief.php b/hwe/func_process_chief.php index 7a5fbc1e..5616fc57 100644 --- a/hwe/func_process_chief.php +++ b/hwe/func_process_chief.php @@ -370,6 +370,7 @@ function process_65(&$general) { MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); //전장수 10% 삭감 + //experience를 General로 $query = "update general set experience=experience*0.9,dedication=dedication*0.9 where nation='{$general['nation']}'"; MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); } diff --git a/hwe/func_tournament.php b/hwe/func_tournament.php index 43fcfbb3..94b7029f 100644 --- a/hwe/func_tournament.php +++ b/hwe/func_tournament.php @@ -652,6 +652,7 @@ function setGift($tnmt_type, $tnmt, $phase) { //16강자 명성 돈 $cost = $admin['develcost']; + //experience를 General로 foreach($db->query('SELECT no, name, grp, grp_no FROM tournament WHERE grp>=20 AND grp<30 AND no > 0') as $general){ $generalID = $general['no']; $db->update('general', [ diff --git a/hwe/j_myBossInfo.php b/hwe/j_myBossInfo.php new file mode 100644 index 00000000..ae6c17fc --- /dev/null +++ b/hwe/j_myBossInfo.php @@ -0,0 +1,394 @@ +setReadOnly(); +$userID = Session::getUserID(); + +$db = DB::db(); +$gameStor = KVStorage::getStorage($db, 'game_env'); +$gameStor->cacheValues(['startyear','year','month','scenario']); + +$me = $db->queryFirstRow('SELECT no,nation,level from general where owner=%i', $userID); +$myLevel = $me['level']; +$nationID = $nationID; + +//수뇌가 아니면 아무것도 할 수 없음 +if($myLevel < 5){ + Json::die([ + 'result'=>false, + 'reason'=>'수뇌가 아닙니다.' + ]); +} + +if($btn === '추방' && $destGeneralID==0){ + Json::die([ + 'result'=>false, + 'reason'=>'장수가 지정되지 않았습니다.' + ]); +} + +if($destGeneralID==0){ + $general = new DummyGeneral(true); +} +else{ + $general = General::createGeneralObjFromDB($destGeneralID, ['name', 'leadership', 'strength', 'intel', 'gold','rice','troop','level','npc','picture','imgsvr','permission','penalty','belong'], 1); + + if($general instanceof DummyGeneral){ + Json::die([ + 'result'=>false, + 'reason'=>'올바릦 않은 장수입니다.' + ]); + } + + if($nationID != $general->getNationID()){ + Json::die([ + 'result'=>false, + 'reason'=>'아국 장수가 아닙니다' + ]); + } +} + +if($generalLevel == 12){ + Json::die([ + 'result'=>false, + 'reason'=>'군주를 대상으로 할 수 없습니다.' + ]); +} + +function do수뇌임명(General $general, int $targetLevel):?string{ + global $myLevel; + $generalID = $general->getID(); + $generalLevel = $general->getVar('level'); + $generalName = $general->getVar('name'); + $nationID = $general->getNationID(); + + $db = DB::db(); + + [$levelSet, $nationLevel] = $db->queryFirstList('SELECT $b,level FROM nation WHERE nation = %i', "l{$targetLevel}set", $nationID); + + // 임명가능 레벨 + $lv = getNationChiefLevel($nationLevel); + + if($targetLevel < $lv){ + return '임명불가능한 관직입니다.'; + } + + if($levelSet){ + return '지금은 임명할 수 없습니다.'; + } + + //기존 장수 일반으로 + $db->update('general', [ + 'level'=>1, + ], 'nation=%i AND level=%i', $nationID, $targetLevel); + + if($targetLevel === 11){ + + } + else if($targetLevel % 2 == 0){ + if($general->getVar('strength') < GameConst::$chiefStatMin){ + return '무력이 부족합니다.'; + } + + } + else{ + if($general->getVar('intel') < GameConst::$chiefStatMin){ + return '지력이 부족합니다.'; + } + } + + // 신임 장수의 원래 자리 해제 + if(2 <= $generalLevel && $generalLevel <= 4){ + $db->update('city', [ + 'officer'.$generalLevel=>0 + ], "officer{$generalLevel} = %i", $generalID); + } + //신임 장수 + $general->setVar('level', $targetLevel); + $db->update('nation', [ + "l{$targetLevel}set"=>1, + ], 'nation=%i', $nationID); + + return null; +} + +function do도시임명(General $general, int $cityID, int $targetLevel):?string{ + $generalID = $general->getID(); + $generalLevel = $general->getVar('level'); + $nationID = $general->getNationID(); + + $genlv = 'officer'.$targetLevel; + $genlvset = 'officer'.$targetLevel.'set'; + + $db = DB::db(); + + $oldOfficerID = $db->queryFirstField('SELECT %b FROM city WHERE nation=%i AND city=%i', $genlv, $nationID, $cityID); + + if($oldOfficerID === null){ + return '올바르지 않은 도시입니다'; + } + + if($oldOfficerID !== 0) { + //기존 장수 일반으로 + $db->update('general', [ + 'level'=>1 + ], 'no=%i', $oldOfficerID); + //기존 자리 공석으로 + $db->update('city', [ + $genlv=>0 + ], 'city = %i AND nation = %i', $cityID , $nationID); + } + + if($general instanceof DummyGeneral){ + return null; + } + + if($targetLevel === 4 && $general->getVar('strength') < GameConst::$chiefStatMin){ + return '무력이 부족합니다.'; + } + + if($targetLevel === 3 && $general->getVar('intel') < GameConst::$chiefStatMin){ + return '지력이 부족합니다.'; + } + + // 신임 장수의 원래 자리 해제 + if(2 <= $generalLevel && $generalLevel <= 4){ + $db->update('city', [ + 'officer'.$generalLevel=>0 + ], "officer{$generalLevel} = %i", $generalID); + } + + //신임 장수 + $db->update('city', [ + $genlv=>$generalID, + $genlvset=>1 + ], 'city=%i AND nation=%i', $cityID, $nationID); + $general->setVar('level', $targetLevel); + + return null; +} + +function do추방(General $general, int $myLevel):?string{ + $generalID = $general->getID(); + $generalLevel = $general->getVar('level'); + $generalName = $general->getVar('name'); + $nationID = $general->getNationID(); + + + + //추방할사람이 외교권자이면 불가 + $permission = checkSecretPermission($general->getRaw()); + if($permission == 4){ + return '외교권자는 추방할 수 없습니다.'; + } + + //NPC 부대장 추방 불가 + if($general->getVar('npc') == 5){ + return '부대장은 추방할 수 없습니다.'; + } + + $db = DB::db(); + $gameStor = KVStorage::getStorage($db, 'game_env'); + $env = $gameStor->getValues(['startyear','year','month','scenario']); + + $nation = $db->queryFirstRow('SELECT name,%b,color FROM nation WHERE nation=%i',"l{$myLevel}set", $nationID); + $nationName = $nation['name']; + + $logger = $general->getLogger(); + + //이미 지정했다면 무시 + if($nation["l{$myLevel}set"] == 1 || $generalLevel == 0 && $generalLevel == 12) { + header('location:b_myBossInfo.php', true, 303); + die(); + } + $dipcount1 = $db->queryFirstField('SELECT count(no) FROM diplomacy WHERE me=%i AND state>=3 AND state<=4', $nationID); + $dipcount2 = $db->queryFirstField('SELECT count(no) FROM diplomacy WHERE me=%i AND state>=5 AND state<=6', nationID); + + $gold = 0; + $rice = 0; + // 금쌀1000이상은 남김 + if($general->getVar('gold') > GameConst::$defaultGold) { + $gold = $general->getVar('gold') - GameConst::$defaultGold; + $general->setVar('gold', GameConst::$defaultGold); + } + if($general->getVar('rice') > GameConst::$defaultRice) { + $rice = $general->getVar('rice') - GameConst::$defaultRice; + $general->setVar('rice', GameConst::$defaultRice); + } + + $general->setVar('nation', 0); + $general->setVar('level', 0); + $general->setVar('belong', 0); + $oldMakeLimit = $general->getVar('makelimit'); + $general->setVar('makelimit', 12); + $general->setVar('permission', 'normal'); + + if($dipcount1 > 0) { + $josaYi = JosaUtil::pick($generalName, '이'); + $logger->pushGlobalActionLog("통합에 반대하던 {$generalName}{$josaYi} {$nationName}에서 숙청당했습니다."); + $logger->pushGeneralActionLog("통합에 반대하다가 {$nationName}에서 숙청당했습니다.", ActionLogger::PLAIN); + } elseif($dipcount2 > 0) { + $josaYi = JosaUtil::pick($generalName, '이'); + $logger->pushGlobalActionLog("합병에 반대하던 {$generalName}{$josaYi} {$nationName}에서 숙청당했습니다."); + $logger->pushGeneralActionLog("합병에 반대하다가 {$nationName}에서 숙청당했습니다.", ActionLogger::PLAIN); + } else { + $josaYi = JosaUtil::pick($generalName, '이'); + $logger->pushGlobalActionLog("{$generalName}{$josaYi} {$nationName}에서 추방당했습니다."); + $logger->pushGeneralActionLog("{$nationName}에서 추방당했습니다.", ActionLogger::PLAIN); + + // 명성/공헌 N*10%감소 + if($env['year'] <= $env['startyear'] && $general->getVar('npc') < 2){ + $general->setVar('makelimit', $oldMakeLimit); + } + else{ + $betrayCnt = $general->getVar('betray'); + $general->addExperience(-$general->getVar('experience')*0.1*$betrayCnt); + $general->addDedication(-$general->getVar('dedication')*0.1*$betrayCnt); + $general->increaseVarWithLimit('betray', 1, null, GameConst::$maxBetrayCnt); + } + } + + //부대장일 경우 + if($general->getVar('troop') == $generalID){ + // 모두 탈퇴 + $db->update('general', [ + 'troop'=>0, + ], 'troop = %i', $generalID); + $db->delete('troop', 'troop_leader=%i', $generalID); + } + $general->setVar('troop', 0); + + // 도시관직해제 + if(2 <= $generalLevel && $generalLevel <= 4){ + $db->update('city', [ + 'officer'.$generalLevel=>0 + ], "officer{$generalLevel} = %i", $general->getID()); + } + + if($general->getVar('npc') >= 2 && ($env['scenario'] < 100 || Util::randBool(0.01))) { + + $str = Util::choiceRandom([ + '날 버리다니... 곧 전장에서 복수해주겠다...', + '추방이라... 내가 무얼 잘못했단 말인가...', + '어디 추방해가면서 잘되나 보자... 꼭 복수하겠다...', + '인덕이 제일이거늘... 추방이 웬말인가... 저주한다!', + '날 추방했으니 그 복수로 적국에 정보를 팔아 넘겨야겠군요. 그럼 이만.' + ]); + + $src = new MessageTarget( + $generalID, + $generalName, + $nationID, + $nation['name'], + $nation['color'], + GetImageURL($general->getVar('imgsvr'), $general->getVar('picture')) + ); + $msg = new Message( + Message::MSGTYPE_PUBLIC, + $src, + $src, + $str, + new \DateTime(), + new \DateTime('9999-12-31'), + [] + ); + $msg->send(); + } + + if($env['year'] < $env['startyear']+3) { + //초반엔 군주 부상 증가(엔장 임관지양) + $db->update('general', [ + 'injury'=>$db->sqleval('least(injury + 1, %i)', 80), + ], 'nation=%i AND level=12', $nationID); + + $db->update('nation', [ + 'gennum'=>$db->sqleval('gennum - 1'), + 'gold'=>$db->sqleval('gold + %i', $gold), + 'rice'=>$db->sqleval('rice + %i', $rice), + ], 'nation = %i', $nationID); + } else { + //이번분기는 추방불가(초반 제외) + $db->update('nation', [ + "l{$myLevel}set"=>1, + 'gennum'=>$db->sqleval('gennum - 1'), + 'gold'=>$db->sqleval('gold + %i', $gold), + 'rice'=>$db->sqleval('rice + %i', $rice), + ], 'nation = %i', $nationID); + } + + $logger->pushGeneralHistoryLog("{$nation['name']}에서 추방됨"); + + return null; +} + + + +if($btn == "임명") { + if(2 <= $level && $level <= 4){ + if(!$destCityID){ + Json::die([ + 'result'=>false, + 'reason'=>'도시가 지정되지 않았습니다.' + ]); + } + $result = do도시임명($general, $destCityID, $level); + if($result !== null){ + Json::die([ + 'result'=>false, + 'reason'=>$result + ]); + } + Json::die([ + 'result'=>true, + 'reason'=>'success' + ]); + } + + if(5 <= $level && $level < 12){ + $result = do수뇌임명($general, $level); + if($result !== null){ + Json::die([ + 'result'=>false, + 'reason'=>$result + ]); + } + Json::die([ + 'result'=>true, + 'reason'=>'success' + ]); + } + + Json::die([ + 'result'=>false, + 'reason'=>'올바르지 않은 지정입니다.' + ]); +} + +if($btn == "추방") { + $result = do추방($general, $myLevel); + if($result !== null){ + Json::die([ + 'result'=>false, + 'reason'=>$result + ]); + } + Json::die([ + 'result'=>true, + 'reason'=>'success' + ]); +} + +Json::die([ + 'result'=>false, + 'reason'=>'올바르지 않은 명령입니다.' +]); \ No newline at end of file diff --git a/hwe/process_war.php b/hwe/process_war.php index ef85a314..e1a49904 100644 --- a/hwe/process_war.php +++ b/hwe/process_war.php @@ -596,6 +596,7 @@ function ConquerCity($admin, $general, $city, $nation, $destnation) { //분쟁기록 모두 지움 DeleteConflict($city['nation']); // 전 장수 공헌 명성치 깎음 + //TODO: experience를 General에 $query = "update general set dedication=dedication*0.5,experience=experience*0.9 where nation='{$city['nation']}'"; MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); // 전 도시 공백지로 diff --git a/hwe/sammo/Command/General/che_강행.php b/hwe/sammo/Command/General/che_강행.php index a27b5a40..287b0b75 100644 --- a/hwe/sammo/Command/General/che_강행.php +++ b/hwe/sammo/Command/General/che_강행.php @@ -126,8 +126,6 @@ class che_강행 extends Command\GeneralCommand{ $logger->pushGeneralActionLog("{$destCityName}{$josaRo} 강행했습니다. <1>$date"); $exp = 100; - - $exp = $general->onCalcStat($general, 'experience', $exp); $general->setVar('city', $destCityID); if($general->getVar('level') == 12 && $this->nation['level'] == 0){ @@ -148,7 +146,7 @@ class che_강행 extends Command\GeneralCommand{ [$reqGold, $reqRice] = $this->getCost(); $general->increaseVarWithLimit('gold', -$reqGold, 0); - $general->increaseVar('experience', $exp); + $general->addExperience($exp); $general->increaseVar('leadership_exp', 1); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); diff --git a/hwe/sammo/Command/General/che_거병.php b/hwe/sammo/Command/General/che_거병.php index 79e65398..1e6bc5da 100644 --- a/hwe/sammo/Command/General/che_거병.php +++ b/hwe/sammo/Command/General/che_거병.php @@ -157,12 +157,9 @@ class che_거병 extends Command\GeneralCommand{ $exp = 100; $ded = 100; - - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->setVar('belong', 1); $general->setVar('level', 12); $general->setVar('nation', $nationID); diff --git a/hwe/sammo/Command/General/che_건국.php b/hwe/sammo/Command/General/che_건국.php index f800a1fa..a09e8aaa 100644 --- a/hwe/sammo/Command/General/che_건국.php +++ b/hwe/sammo/Command/General/che_건국.php @@ -150,12 +150,9 @@ class che_건국 extends Command\GeneralCommand{ $exp = 1000; $ded = 1000; - - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $db->update('city', [ 'nation'=>$general->getNationID(), diff --git a/hwe/sammo/Command/General/che_견문.php b/hwe/sammo/Command/General/che_견문.php index 5b050ee5..ab82b52d 100644 --- a/hwe/sammo/Command/General/che_견문.php +++ b/hwe/sammo/Command/General/che_견문.php @@ -112,9 +112,7 @@ class che_견문 extends Command\GeneralCommand{ $logger->pushGeneralActionLog("{$text} <1>$date"); - $exp = $general->onCalcStat($general, 'experience', $exp); - - $general->increaseVar('experience', $exp); + $general->addExperience($exp); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); $general->applyDB($db); diff --git a/hwe/sammo/Command/General/che_군량매매.php b/hwe/sammo/Command/General/che_군량매매.php index 0626566e..3896a324 100644 --- a/hwe/sammo/Command/General/che_군량매매.php +++ b/hwe/sammo/Command/General/che_군량매매.php @@ -153,18 +153,15 @@ class che_군량매매 extends Command\GeneralCommand{ $exp = 30; $ded = 50; - - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); - + $incStat = Util::choiceRandomUsingWeight([ 'leadership_exp'=>$general->getLeadership(false, false, false, false), 'strength_exp'=>$general->getStrength(false, false, false, false), 'intel_exp'=>$general->getIntel(false, false, false, false) ]); - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->increaseVar($incStat, 1); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); diff --git a/hwe/sammo/Command/General/che_귀환.php b/hwe/sammo/Command/General/che_귀환.php index 26afc62e..0c29bf0f 100644 --- a/hwe/sammo/Command/General/che_귀환.php +++ b/hwe/sammo/Command/General/che_귀환.php @@ -95,13 +95,11 @@ class che_귀환 extends Command\GeneralCommand{ $exp = 70; $ded = 100; - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); $general->setVar('city', $cityID); - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->increaseVar('leadership_exp', 1); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); diff --git a/hwe/sammo/Command/General/che_기술연구.php b/hwe/sammo/Command/General/che_기술연구.php index 97205c68..00d23c50 100644 --- a/hwe/sammo/Command/General/che_기술연구.php +++ b/hwe/sammo/Command/General/che_기술연구.php @@ -105,10 +105,6 @@ class che_기술연구 extends che_상업투자{ $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 하여 $scoreText 상승했습니다. <1>$date"); } - - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); - if(TechLimit($this->env['startyear'], $this->env['year'], $this->nation['tech'])){ $score /= 4; } @@ -124,8 +120,8 @@ class che_기술연구 extends che_상업투자{ $db->update('nation', $nationUpdated, 'nation=%i', $general->getVar('nation')); $general->increaseVarWithLimit('gold', -$this->reqGold, 0); - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->increaseVar(static::$statKey.'_exp', 1); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); diff --git a/hwe/sammo/Command/General/che_단련.php b/hwe/sammo/Command/General/che_단련.php index 39857d24..acf3d877 100644 --- a/hwe/sammo/Command/General/che_단련.php +++ b/hwe/sammo/Command/General/che_단련.php @@ -111,7 +111,6 @@ class che_단련 extends Command\GeneralCommand{ } $exp = $general->getVar('crew') / 400; - $exp = $general->onCalcStat($general, 'experience', $exp); $general->addDex($general->getCrewTypeObj(), $score, false); @@ -124,7 +123,7 @@ class che_단련 extends Command\GeneralCommand{ $general->increaseVarWithLimit('gold', -$reqGold, 0); $general->increaseVarWithLimit('rice', -$reqRice, 0); - $general->increaseVar('experience', $exp); + $general->addExperience($exp); $general->increaseVar($incStat, 1); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); diff --git a/hwe/sammo/Command/General/che_등용.php b/hwe/sammo/Command/General/che_등용.php index 770b10f4..bde8751c 100644 --- a/hwe/sammo/Command/General/che_등용.php +++ b/hwe/sammo/Command/General/che_등용.php @@ -140,13 +140,10 @@ class che_등용 extends Command\GeneralCommand{ $exp = 100; $ded = 200; - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); - [$reqGold, $reqRice] = $this->getCost(); - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->increaseVar('leadership_exp', 1); $general->increaseVarWithLimit('gold', -$reqGold, 0); diff --git a/hwe/sammo/Command/General/che_등용수락.php b/hwe/sammo/Command/General/che_등용수락.php index 653e0c6f..931b4fd8 100644 --- a/hwe/sammo/Command/General/che_등용수락.php +++ b/hwe/sammo/Command/General/che_등용수락.php @@ -135,8 +135,8 @@ class che_등용수락 extends Command\GeneralCommand{ $isTroopLeader = ($generalID == $general->getVar('troop')); - $destGeneral->increaseVar('experience', $destGeneral->onCalcStat($general, 'experience', 100)); - $destGeneral->increaseVar('dedication', $destGeneral->onCalcStat($general, 'dedication', 100)); + $destGeneral->addExperience(100); + $destGeneral->addDedication(100); $setOriginalCityValues = []; $setOriginalNationValues = [ @@ -169,12 +169,14 @@ class che_등용수락 extends Command\GeneralCommand{ // 재야가 아니면 명성N*10% 공헌N*10%감소 $general->setVar('experience', $general->getVar('experience') * (1 - 0.1 * $general->getVar('betray'))); + $general->addExperience(0, false); $general->setVar('dedication', $general->getVar('dedication') * (1 - 0.1 * $general->getVar('betray'))); - $general->increaseVar('betray', 1); + $general->addDedication(0, false); + $general->increaseVarWithLimit('betray', 1, null, GameConst::$maxBetrayCnt); } else{ - $general->increaseVar('experience', $general->onCalcStat($general, 'experience', 100)); - $general->increaseVar('dedication', $general->onCalcStat($general, 'dedication', 100)); + $general->addExperience(100); + $general->addDedication(100); } if($general->getVar('npc') < 2){ diff --git a/hwe/sammo/Command/General/che_랜덤임관.php b/hwe/sammo/Command/General/che_랜덤임관.php index 46fe88c9..3aef59ed 100644 --- a/hwe/sammo/Command/General/che_랜덤임관.php +++ b/hwe/sammo/Command/General/che_랜덤임관.php @@ -238,7 +238,6 @@ class che_랜덤임관 extends Command\GeneralCommand{ $exp = 100; } - $exp = $general->onCalcStat($general, 'experience', $exp); $general->setVar('nation', $destNationID); $general->setVar('level', 1); $general->setVar('belong', 1); @@ -262,7 +261,7 @@ class che_랜덤임관 extends Command\GeneralCommand{ $general->setAuxVar('joinedNations', $joinedNations); } - $general->increaseVar('experience', $exp); + $general->addExperience($exp); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); tryUniqueItemLottery($general, '랜덤 임관'); diff --git a/hwe/sammo/Command/General/che_물자조달.php b/hwe/sammo/Command/General/che_물자조달.php index 7e52e202..117a1a75 100644 --- a/hwe/sammo/Command/General/che_물자조달.php +++ b/hwe/sammo/Command/General/che_물자조달.php @@ -107,17 +107,14 @@ class che_물자조달 extends Command\GeneralCommand{ $exp = $score * 0.7 / 3; $ded = $score * 1.0 / 3; - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); - $incStat = Util::choiceRandomUsingWeight([ 'leadership_exp'=>$general->getLeadership(false, false, false, false), 'strength_exp'=>$general->getStrength(false, false, false, false), 'intel_exp'=>$general->getIntel(false, false, false, false) ]); - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->increaseVar($incStat, 1); $db->update('nation', [ diff --git a/hwe/sammo/Command/General/che_사기진작.php b/hwe/sammo/Command/General/che_사기진작.php index bc16caad..12742e64 100644 --- a/hwe/sammo/Command/General/che_사기진작.php +++ b/hwe/sammo/Command/General/che_사기진작.php @@ -90,16 +90,13 @@ class che_사기진작 extends Command\GeneralCommand{ $exp = 100; $ded = 70; - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); - $general->increaseVarWithLimit('atmos', $score, 0, GameConst::$maxAtmosByCommand); $general->setVar('train', $sideEffect); $general->addDex($general->getCrewTypeObj(), $score, false); - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->increaseVar('leadership_exp', 1); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); diff --git a/hwe/sammo/Command/General/che_상업투자.php b/hwe/sammo/Command/General/che_상업투자.php index e0773197..7d785607 100644 --- a/hwe/sammo/Command/General/che_상업투자.php +++ b/hwe/sammo/Command/General/che_상업투자.php @@ -178,9 +178,6 @@ class che_상업투자 extends Command\GeneralCommand{ $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 하여 $scoreText 상승했습니다. <1>$date"); } - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); - if(in_array($this->city['front'], [1, 3]) && $this->nation['capital'] != $this->city['city']){ $score *= static::$debuffFront; } @@ -196,8 +193,8 @@ class che_상업투자 extends Command\GeneralCommand{ $db->update('city', $cityUpdated, 'city=%i', $general->getVar('city')); $general->increaseVarWithLimit('gold', -$this->reqGold, 0); - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->increaseVar(static::$statKey.'_exp', 1); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); diff --git a/hwe/sammo/Command/General/che_소집해제.php b/hwe/sammo/Command/General/che_소집해제.php index db14b2f6..89b1b177 100644 --- a/hwe/sammo/Command/General/che_소집해제.php +++ b/hwe/sammo/Command/General/che_소집해제.php @@ -75,17 +75,14 @@ class che_소집해제 extends Command\GeneralCommand{ $exp = 70; $ded = 100; - - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); - + $db->update('city', [ 'pop'=>$db->sqleval('pop + %i', $crew) ], 'city=%i', $general->getCityID()); $general->setVar('crew', 0); - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); $general->applyDB($db); diff --git a/hwe/sammo/Command/General/che_요양.php b/hwe/sammo/Command/General/che_요양.php index 6d08fafb..2a7dfa5e 100644 --- a/hwe/sammo/Command/General/che_요양.php +++ b/hwe/sammo/Command/General/che_요양.php @@ -71,12 +71,9 @@ class che_요양 extends Command\GeneralCommand{ $exp = 10; $ded = 7; - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); - $general->setVar('injury', 0); - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); $general->applyDB($db); diff --git a/hwe/sammo/Command/General/che_이동.php b/hwe/sammo/Command/General/che_이동.php index 18319034..6931be8d 100644 --- a/hwe/sammo/Command/General/che_이동.php +++ b/hwe/sammo/Command/General/che_이동.php @@ -127,7 +127,6 @@ class che_이동 extends Command\GeneralCommand{ $exp = 50; - $exp = $general->onCalcStat($general, 'experience', $exp); $general->setVar('city', $destCityID); if($general->getVar('level') == 12 && $this->nation['level'] == 0){ @@ -146,7 +145,7 @@ class che_이동 extends Command\GeneralCommand{ [$reqGold, $reqRice] = $this->getCost(); $general->increaseVarWithLimit('gold', -$reqGold, 0); - $general->increaseVar('experience', $exp); + $general->addExperience($exp); $general->increaseVar('leadership_exp', 1); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); diff --git a/hwe/sammo/Command/General/che_인재탐색.php b/hwe/sammo/Command/General/che_인재탐색.php index 034675a2..56eda7fb 100644 --- a/hwe/sammo/Command/General/che_인재탐색.php +++ b/hwe/sammo/Command/General/che_인재탐색.php @@ -138,13 +138,10 @@ class che_인재탐색 extends Command\GeneralCommand{ $exp = 100; $ded = 70; - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); - $general->increaseVarWithLimit('gold', -$reqGold, 0); $general->increaseVarWithLimit('rice', -$reqRice, 0); - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->increaseVar($incStat, 1); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); @@ -299,13 +296,10 @@ class che_인재탐색 extends Command\GeneralCommand{ $exp = 200; $ded = 300; - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); - $general->increaseVarWithLimit('gold', -$reqGold, 0); $general->increaseVarWithLimit('rice', -$reqRice, 0); - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->increaseVar($incStat, 3); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); diff --git a/hwe/sammo/Command/General/che_임관.php b/hwe/sammo/Command/General/che_임관.php index f818a77d..80707726 100644 --- a/hwe/sammo/Command/General/che_임관.php +++ b/hwe/sammo/Command/General/che_임관.php @@ -153,7 +153,6 @@ class che_임관 extends Command\GeneralCommand{ $exp = 100; } - $exp = $general->onCalcStat($general, 'experience', $exp); $general->setVar('nation', $destNationID); $general->setVar('level', 1); $general->setVar('belong', 1); @@ -178,7 +177,7 @@ class che_임관 extends Command\GeneralCommand{ $general->setAuxVar('joinedNations', $joinedNations); } - $general->increaseVar('experience', $exp); + $general->addExperience($exp); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); tryUniqueItemLottery($general); diff --git a/hwe/sammo/Command/General/che_장비매매.php b/hwe/sammo/Command/General/che_장비매매.php index cc319601..e6916d4d 100644 --- a/hwe/sammo/Command/General/che_장비매매.php +++ b/hwe/sammo/Command/General/che_장비매매.php @@ -168,9 +168,8 @@ class che_장비매매 extends Command\GeneralCommand{ } $exp = 10; - $exp = $general->onCalcStat($general, 'experience', $exp); - $general->increaseVar('experience', $exp); + $general->addExperience($exp); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); $general->applyDB($db); diff --git a/hwe/sammo/Command/General/che_전투태세.php b/hwe/sammo/Command/General/che_전투태세.php index 499ede32..9458505d 100644 --- a/hwe/sammo/Command/General/che_전투태세.php +++ b/hwe/sammo/Command/General/che_전투태세.php @@ -113,11 +113,8 @@ class che_전투태세 extends Command\GeneralCommand{ $exp = 100 * 3; $ded = 70 * 3; - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); - - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $crew = $general->getVar('crew'); diff --git a/hwe/sammo/Command/General/che_정착장려.php b/hwe/sammo/Command/General/che_정착장려.php index 629ffa39..cfec8340 100644 --- a/hwe/sammo/Command/General/che_정착장려.php +++ b/hwe/sammo/Command/General/che_정착장려.php @@ -165,11 +165,6 @@ class che_정착장려 extends Command\GeneralCommand{ $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 하여 주민이 $scoreText명 증가했습니다. <1>$date"); } - - - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); - //NOTE: 내정량 상승시 초과 가능? $cityUpdated = [ static::$cityKey => Util::valueFit( @@ -181,8 +176,8 @@ class che_정착장려 extends Command\GeneralCommand{ $db->update('city', $cityUpdated, 'city=%i', $general->getVar('city')); $general->increaseVarWithLimit('rice', -$this->reqRice, 0); - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->increaseVar(static::$statKey.'_exp', 1); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); diff --git a/hwe/sammo/Command/General/che_주민선정.php b/hwe/sammo/Command/General/che_주민선정.php index 7261b8c3..b7b00741 100644 --- a/hwe/sammo/Command/General/che_주민선정.php +++ b/hwe/sammo/Command/General/che_주민선정.php @@ -165,9 +165,6 @@ class che_주민선정 extends Command\GeneralCommand{ $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 하여 $scoreText 상승했습니다. <1>$date"); } - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); - //NOTE: 내정량 상승시 초과 가능? $cityUpdated = [ static::$cityKey => Util::valueFit( @@ -179,8 +176,8 @@ class che_주민선정 extends Command\GeneralCommand{ $db->update('city', $cityUpdated, 'city=%i', $general->getVar('city')); $general->increaseVarWithLimit('rice', -$this->reqRice, 0); - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->increaseVar(static::$statKey.'_exp', 1); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); diff --git a/hwe/sammo/Command/General/che_증여.php b/hwe/sammo/Command/General/che_증여.php index a0ea870f..1b00dbd9 100644 --- a/hwe/sammo/Command/General/che_증여.php +++ b/hwe/sammo/Command/General/che_증여.php @@ -148,11 +148,8 @@ class che_증여 extends Command\GeneralCommand{ $exp = 70; $ded = 100; - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); - - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->increaseVar('leadership_exp', 1); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); diff --git a/hwe/sammo/Command/General/che_집합.php b/hwe/sammo/Command/General/che_집합.php index 2fd11c46..f0e5d74d 100644 --- a/hwe/sammo/Command/General/che_집합.php +++ b/hwe/sammo/Command/General/che_집합.php @@ -101,11 +101,8 @@ class che_집합 extends Command\GeneralCommand{ $exp = 70; $ded = 100; - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); - - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->increaseVar('leadership_exp', 1); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); diff --git a/hwe/sammo/Command/General/che_징병.php b/hwe/sammo/Command/General/che_징병.php index a0a03789..1815afe6 100644 --- a/hwe/sammo/Command/General/che_징병.php +++ b/hwe/sammo/Command/General/che_징병.php @@ -196,15 +196,12 @@ class che_징병 extends Command\GeneralCommand{ $exp = Util::round($reqCrew / 100); $ded = Util::round($reqCrew / 100); - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); - $general->addDex($general->getCrewTypeObj(), $reqCrew / 100, false); [$reqGold, $reqRice] = $this->getCost(); - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->increaseVarWithLimit('gold', -$reqGold, 0); $general->increaseVarWithLimit('rice', -$reqRice, 0); $general->increaseVar('leadership_exp', 1); diff --git a/hwe/sammo/Command/General/che_첩보.php b/hwe/sammo/Command/General/che_첩보.php index ab0a4dbd..cf225cfa 100644 --- a/hwe/sammo/Command/General/che_첩보.php +++ b/hwe/sammo/Command/General/che_첩보.php @@ -186,15 +186,12 @@ class che_첩보 extends Command\GeneralCommand{ $exp = Util::randRangeInt(1, 100); $ded = Util::randRangeInt(1, 70); - - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); [$reqGold, $reqRice] = $this->getCost(); $general->increaseVarWithLimit('gold', -$reqGold, 0); $general->increaseVarWithLimit('rice', -$reqRice, 0); - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->increaseVar('leadership_exp', 1); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); diff --git a/hwe/sammo/Command/General/che_하야.php b/hwe/sammo/Command/General/che_하야.php index acfc3195..5005953a 100644 --- a/hwe/sammo/Command/General/che_하야.php +++ b/hwe/sammo/Command/General/che_하야.php @@ -93,8 +93,10 @@ class che_하야 extends Command\GeneralCommand{ $logger->pushGeneralHistoryLog("{$nationName}에서 하야"); $logger->pushGlobalActionLog("{$generalName}{$josaYi} {$nationName}에서 하야했습니다."); $general->setVar('experience', $general->getVar('experience') * (1 - 0.1 * $general->getVar('betray'))); + $general->addExperience(0, false); $general->setVar('dedication', $general->getVar('dedication') * (1 - 0.1 * $general->getVar('betray'))); - $general->increaseVar('betray', 1); + $general->addDedication(0, false); + $general->increaseVarWithLimit('betray', 1, null, GameConst::$maxBetrayCnt); } diff --git a/hwe/sammo/Command/General/che_헌납.php b/hwe/sammo/Command/General/che_헌납.php index 047f7461..424da5a3 100644 --- a/hwe/sammo/Command/General/che_헌납.php +++ b/hwe/sammo/Command/General/che_헌납.php @@ -128,11 +128,8 @@ class che_헌납 extends Command\GeneralCommand{ $exp = 70; $ded = 100; - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); - - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->increaseVar('leadership_exp', 1); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); diff --git a/hwe/sammo/Command/General/che_화계.php b/hwe/sammo/Command/General/che_화계.php index e7defd92..9e6717f9 100644 --- a/hwe/sammo/Command/General/che_화계.php +++ b/hwe/sammo/Command/General/che_화계.php @@ -265,14 +265,11 @@ class che_화계 extends Command\GeneralCommand{ $exp = Util::randRangeInt(1, 100); $ded = Util::randRangeInt(1, 70); - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); - [$reqGold, $reqRice] = $this->getCost(); $general->increaseVarWithLimit('gold', -$reqGold, 0); $general->increaseVarWithLimit('rice', -$reqRice, 0); - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->increaseVar($statType.'_exp', 1); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); @@ -301,15 +298,12 @@ class che_화계 extends Command\GeneralCommand{ $exp = Util::randRangeInt(201, 300); $ded = Util::randRangeInt(141, 210); - - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); [$reqGold, $reqRice] = $this->getCost(); $general->increaseVarWithLimit('gold', -$reqGold, 0); $general->increaseVarWithLimit('rice', -$reqRice, 0); - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->increaseVar($statType.'_exp', 1); $general->increaseRankVar('firenum', 1); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); diff --git a/hwe/sammo/Command/General/che_훈련.php b/hwe/sammo/Command/General/che_훈련.php index d67e4ae0..3c79a5a2 100644 --- a/hwe/sammo/Command/General/che_훈련.php +++ b/hwe/sammo/Command/General/che_훈련.php @@ -94,16 +94,13 @@ class che_훈련 extends Command\GeneralCommand{ $exp = 100; $ded = 70; - $exp = $general->onCalcStat($general, 'experience', $exp); - $ded = $general->onCalcStat($general, 'dedication', $ded); - $general->increaseVarWithLimit('train', $score, 0, GameConst::$maxTrainByCommand); $general->setVar('atmos', $sideEffect); $general->addDex($general->getCrewTypeObj(), $score, false); - $general->increaseVar('experience', $exp); - $general->increaseVar('dedication', $ded); + $general->addExperience($exp); + $general->addDedication($ded); $general->increaseVar('leadership_exp', 1); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); diff --git a/hwe/sammo/Command/Nation/che_감축.php b/hwe/sammo/Command/Nation/che_감축.php index c3be1dd1..a35707c4 100644 --- a/hwe/sammo/Command/Nation/che_감축.php +++ b/hwe/sammo/Command/Nation/che_감축.php @@ -162,16 +162,8 @@ class che_감축 extends Command\NationCommand{ $logger = $general->getLogger(); - $general->increaseVar( - 'experience', - $general->onCalcStat($general, - 'experience', 5 * ($this->getPreReqTurn() + 1) - )); - $general->increaseVar( - 'dedication', - $general->onCalcStat($general, - 'dedication', 5 * ($this->getPreReqTurn() + 1) - )); + $general->addExperience(5 * ($this->getPreReqTurn() + 1)); + $general->addDedication(5 * ($this->getPreReqTurn() + 1)); $josaUl = JosaUtil::pick($destCityName, '을'); $josaYi = JosaUtil::pick($generalName, '이'); diff --git a/hwe/sammo/Command/Nation/che_물자원조.php b/hwe/sammo/Command/Nation/che_물자원조.php index 953c6cd0..4f729b13 100644 --- a/hwe/sammo/Command/Nation/che_물자원조.php +++ b/hwe/sammo/Command/Nation/che_물자원조.php @@ -217,8 +217,8 @@ class che_물자원조 extends Command\NationCommand{ 'rice'=>$db->sqleval('rice + %i', $riceAmount), ], 'nation = %i', $destNationID); - $general->increaseVar('experience', $general->onCalcStat($general, 'experience', 5)); - $general->increaseVar('dedication', $general->onCalcStat($general, 'dedication', 5)); + $general->addExperience(5); + $general->addDedication(5); $general->applyDB($db); diff --git a/hwe/sammo/Command/Nation/che_백성동원.php b/hwe/sammo/Command/Nation/che_백성동원.php index cf5762f9..e810b58c 100644 --- a/hwe/sammo/Command/Nation/che_백성동원.php +++ b/hwe/sammo/Command/Nation/che_백성동원.php @@ -125,16 +125,8 @@ class che_백성동원 extends Command\NationCommand{ $logger = $general->getLogger(); $logger->pushGeneralActionLog("백성동원 발동! <1>$date"); - $general->increaseVar( - 'experience', - $general->onCalcStat($general, - 'experience', 5 * ($this->getPreReqTurn() + 1) - )); - $general->increaseVar( - 'dedication', - $general->onCalcStat($general, - 'dedication', 5 * ($this->getPreReqTurn() + 1) - )); + $general->addExperience(5 * ($this->getPreReqTurn() + 1)); + $general->addDedication(5 * ($this->getPreReqTurn() + 1)); $josaYi = JosaUtil::pick($generalName, '이'); diff --git a/hwe/sammo/Command/Nation/che_수몰.php b/hwe/sammo/Command/Nation/che_수몰.php index d7f94a03..6061ba59 100644 --- a/hwe/sammo/Command/Nation/che_수몰.php +++ b/hwe/sammo/Command/Nation/che_수몰.php @@ -125,16 +125,8 @@ class che_수몰 extends Command\NationCommand{ $logger = $general->getLogger(); $logger->pushGeneralActionLog("수몰 발동! <1>$date"); - $general->increaseVar( - 'experience', - $general->onCalcStat($general, - 'experience', 5 * ($this->getPreReqTurn() + 1) - )); - $general->increaseVar( - 'dedication', - $general->onCalcStat($general, - 'dedication', 5 * ($this->getPreReqTurn() + 1) - )); + $general->addExperience(5 * ($this->getPreReqTurn() + 1)); + $general->addDedication(5 * ($this->getPreReqTurn() + 1)); $josaYi = JosaUtil::pick($generalName, '이'); diff --git a/hwe/sammo/Command/Nation/che_의병모집.php b/hwe/sammo/Command/Nation/che_의병모집.php index 6d47db18..cc98838c 100644 --- a/hwe/sammo/Command/Nation/che_의병모집.php +++ b/hwe/sammo/Command/Nation/che_의병모집.php @@ -125,16 +125,8 @@ class che_의병모집 extends Command\NationCommand{ $logger->pushGlobalHistoryLog("【전략】{$nationName}{$josaYiNation} {$commandName}{$josaUl} 발동하였습니다."); - $general->increaseVar( - 'experience', - $general->onCalcStat($general, - 'experience', 5 * ($this->getPreReqTurn() + 1) - )); - $general->increaseVar( - 'dedication', - $general->onCalcStat($general, - 'dedication', 5 * ($this->getPreReqTurn() + 1) - )); + $general->addExperience(5 * ($this->getPreReqTurn() + 1)); + $general->addDedication(5 * ($this->getPreReqTurn() + 1)); $gameStor = KVStorage::getStorage($db, 'game_env'); //TODO: 차라리 env가 이거여야..? diff --git a/hwe/sammo/Command/Nation/che_증축.php b/hwe/sammo/Command/Nation/che_증축.php index ef50cb38..27995f1a 100644 --- a/hwe/sammo/Command/Nation/che_증축.php +++ b/hwe/sammo/Command/Nation/che_증축.php @@ -161,16 +161,8 @@ class che_증축 extends Command\NationCommand{ $logger = $general->getLogger(); - $general->increaseVar( - 'experience', - $general->onCalcStat($general, - 'experience', 5 * ($this->getPreReqTurn() + 1) - )); - $general->increaseVar( - 'dedication', - $general->onCalcStat($general, - 'dedication', 5 * ($this->getPreReqTurn() + 1) - )); + $general->addExperience(5 * ($this->getPreReqTurn() + 1)); + $general->addDedication(5 * ($this->getPreReqTurn() + 1)); $josaUl = JosaUtil::pick($destCityName, '을'); $josaYi = JosaUtil::pick($generalName, '이'); diff --git a/hwe/sammo/Command/Nation/che_천도.php b/hwe/sammo/Command/Nation/che_천도.php index ddca37de..7dad39ee 100644 --- a/hwe/sammo/Command/Nation/che_천도.php +++ b/hwe/sammo/Command/Nation/che_천도.php @@ -194,16 +194,8 @@ class che_천도 extends Command\NationCommand{ $logger = $general->getLogger(); - $general->increaseVar( - 'experience', - $general->onCalcStat($general, - 'experience', 5 * ($this->getPreReqTurn() + 1) - )); - $general->increaseVar( - 'dedication', - $general->onCalcStat($general, - 'dedication', 5 * ($this->getPreReqTurn() + 1) - )); + $general->addExperience(5 * ($this->getPreReqTurn() + 1)); + $general->addDedication(5 * ($this->getPreReqTurn() + 1)); $josaYi = JosaUtil::pick($generalName, '이'); $josaYiNation = JosaUtil::pick($nationName, '이'); diff --git a/hwe/sammo/Command/Nation/che_피장파장.php b/hwe/sammo/Command/Nation/che_피장파장.php index b7c3f598..a61d74ae 100644 --- a/hwe/sammo/Command/Nation/che_피장파장.php +++ b/hwe/sammo/Command/Nation/che_피장파장.php @@ -138,16 +138,8 @@ class che_피장파장 extends Command\NationCommand{ $logger = $general->getLogger(); $logger->pushGeneralActionLog("{$commandName} 발동! <1>$date"); - $general->increaseVar( - 'experience', - $general->onCalcStat($general, - 'experience', 5 * ($this->getPreReqTurn() + 1) - )); - $general->increaseVar( - 'dedication', - $general->onCalcStat($general, - 'dedication', 5 * ($this->getPreReqTurn() + 1) - )); + $general->addExperience(5 * ($this->getPreReqTurn() + 1)); + $general->addDedication(5 * ($this->getPreReqTurn() + 1)); $broadcastMessage = "{$generalName}{$josaYi} {$destNationName}{$commandName}{$josaUl} 발동하였습니다."; diff --git a/hwe/sammo/Command/Nation/che_필사즉생.php b/hwe/sammo/Command/Nation/che_필사즉생.php index fb979e6d..62db26c0 100644 --- a/hwe/sammo/Command/Nation/che_필사즉생.php +++ b/hwe/sammo/Command/Nation/che_필사즉생.php @@ -94,16 +94,8 @@ class che_필사즉생 extends Command\NationCommand{ $logger = $general->getLogger(); $logger->pushGeneralActionLog("필사즉생 발동! <1>$date"); - $general->increaseVar( - 'experience', - $general->onCalcStat($general, - 'experience', 5 * ($this->getPreReqTurn() + 1) - )); - $general->increaseVar( - 'dedication', - $general->onCalcStat($general, - 'dedication', 5 * ($this->getPreReqTurn() + 1) - )); + $general->addExperience(5 * ($this->getPreReqTurn() + 1)); + $general->addDedication(5 * ($this->getPreReqTurn() + 1)); $josaYi = JosaUtil::pick($generalName, '이'); diff --git a/hwe/sammo/Command/Nation/che_허보.php b/hwe/sammo/Command/Nation/che_허보.php index 6482115f..f76ccd32 100644 --- a/hwe/sammo/Command/Nation/che_허보.php +++ b/hwe/sammo/Command/Nation/che_허보.php @@ -127,16 +127,8 @@ class che_허보 extends Command\NationCommand{ $logger = $general->getLogger(); $logger->pushGeneralActionLog("허보 발동! <1>$date"); - $general->increaseVar( - 'experience', - $general->onCalcStat($general, - 'experience', 5 * ($this->getPreReqTurn() + 1) - )); - $general->increaseVar( - 'dedication', - $general->onCalcStat($general, - 'dedication', 5 * ($this->getPreReqTurn() + 1) - )); + $general->addExperience(5 * ($this->getPreReqTurn() + 1)); + $general->addDedication(5 * ($this->getPreReqTurn() + 1)); $josaYi = JosaUtil::pick($generalName, '이'); diff --git a/hwe/sammo/GameConstBase.php b/hwe/sammo/GameConstBase.php index 009553af..48ddea33 100644 --- a/hwe/sammo/GameConstBase.php +++ b/hwe/sammo/GameConstBase.php @@ -77,6 +77,8 @@ class GameConstBase public static $maxDedLevel = 30; /** @var int 최대 기술 레벨 */ public static $maxTechLevel = 12; + /** @var int 최대 하야 패널티 수 */ + public static $maxBetrayCnt = 9; /** @var int 최소 인구 증가량 */ public static $basePopIncreaseAmount = 5000; diff --git a/hwe/sammo/General.php b/hwe/sammo/General.php index b47631be..a9fdeab6 100644 --- a/hwe/sammo/General.php +++ b/hwe/sammo/General.php @@ -444,6 +444,57 @@ class General implements iAction{ $this->increaseVar($dexType, $exp); } + function addExperience(float $experience, bool $affectTrigger=true){ + if($affectTrigger){ + $experience = $this->onCalcStat($this, 'experience', $experience); + } + + $this->increaseVar('experience', $experience); + $nextExpLevel = getExpLevel($this->getVar('experience')); + $comp = $nextExpLevel <=> $this->getVar('explevel'); + if($comp === 0){ + return; + } + + $this->updateVar('explevel', $nextExpLevel); + + $josaRo = JosaUtil::pick($nextExpLevel, '로'); + if($comp > 0){ + $this->getLogger()->pushGeneralActionLog("Lv {$nextExpLevel}{$josaRo} 레벨업!", ActionLogger::PLAIN); + } + else{ + $this->getLogger()->pushGeneralActionLog("Lv {$nextExpLevel}{$josaRo} 레벨다운!", ActionLogger::PLAIN); + } + + } + + function addDedication(float $dedication, bool $affectTrigger=true){ + if($affectTrigger){ + $dedication = $this->onCalcStat($this, 'dedication', $dedication); + } + + $this->increaseVar('dedication', $dedication); + $nextDedLevel = getDedLevel($this->getVar('dedication')); + $comp = $nextDedLevel <=> $this->getVar('dedlevel'); + if($comp === 0){ + return; + } + + $this->updateVar('dedlevel', $nextDedLevel); + + $dedLevelText = getDedLevelText($nextDedLevel); + $billText = number_format(getBillByLevel($nextDedLevel)); + $josaRoDed = JosaUtil::pick($dedLevelText, '로'); + $josaRoBill = JosaUtil::pick($billText, '로'); + if($comp > 0){ + $this->getLogger()->pushGeneralActionLog("{$dedLevelText}{$josaRoDed} 승급하여 봉록이 {$billText}{$josaRoBill} 상승했습니다!", ActionLogger::PLAIN); + } + else{ + $this->getLogger()->pushGeneralActionLog("{$dedLevelText}{$josaRoDed} 강등되어 봉록이 {$billText}{$josaRoBill} 하락했습니다!", ActionLogger::PLAIN); + } + + } + function updateVar(string $key, $value){ if($this->raw[$key] === $value){ return; @@ -866,14 +917,14 @@ class General implements iAction{ } /** - * @param int[] $generalIDList + * @param ?int[] $generalIDList * @param null|string[] $column * @param int $constructMode * @return \sammo\General[] * @throws MustNotBeReachedException */ - static public function createGeneralObjListFromDB(array $generalIDList, ?array $column=null, int $constructMode=2):array{ - if(!$generalIDList){ + static public function createGeneralObjListFromDB(?array $generalIDList, ?array $column=null, int $constructMode=2):array{ + if($generalIDList === []){ return []; } @@ -889,10 +940,20 @@ class General implements iAction{ [$column, $rankColumn] = static::mergeQueryColumn($column, $constructMode); - $rawGenerals = Util::convertArrayToDict( - $db->queryFirstRow('SELECT %l FROM general WHERE no IN %li', Util::formatListOfBackticks($column), $generalIDList), - 'no' - ); + if($generalIDList === null){ + $rawGenerals = Util::convertArrayToDict( + $db->queryFirstRow('SELECT %l FROM general WHERE 1', Util::formatListOfBackticks($column)), + 'no' + ); + $generalIDList = array_keys($rawGenerals); + } + else{ + $rawGenerals = Util::convertArrayToDict( + $db->queryFirstRow('SELECT %l FROM general WHERE no IN %li', Util::formatListOfBackticks($column), $generalIDList), + 'no' + ); + } + $rawRanks = []; if($rankColumn){ diff --git a/hwe/sammo/GeneralAI.php b/hwe/sammo/GeneralAI.php index 3f0c3438..40f2b49d 100644 --- a/hwe/sammo/GeneralAI.php +++ b/hwe/sammo/GeneralAI.php @@ -1701,7 +1701,7 @@ class GeneralAI $city = $this->city; - if($city['trust'] < 0.4 && Util::randBool($leadership / GameConst::$chiefStatMin)){ + if($city['trust'] < 40 && Util::randBool($leadership / GameConst::$chiefStatMin)){ $cmd = buildGeneralCommandClass('che_주민선정', $general, $env); if($cmd->isRunnable()){ return $cmd; @@ -3123,7 +3123,7 @@ class GeneralAI protected function calcCityDevelRate(array $city){ return [ - 'trust' => [$city['trust'], self::t통솔장], + 'trust' => [$city['trust'] / 100, self::t통솔장], 'pop' => [$city['pop'] / $city['pop_max'], self::t통솔장], 'agri' => [$city['agri'] / $city['agri_max'], self::t통솔장], 'comm' => [$city['comm'] / $city['comm_max'], self::t통솔장], diff --git a/hwe/sammo/WarUnitGeneral.php b/hwe/sammo/WarUnitGeneral.php index fe519b94..21833978 100644 --- a/hwe/sammo/WarUnitGeneral.php +++ b/hwe/sammo/WarUnitGeneral.php @@ -135,14 +135,12 @@ class WarUnitGeneral extends WarUnit{ if(!$this->isAttacker){ $value *= 0.8; } - $value = $general->onCalcStat($general, 'experience', $value); - $general->increaseVar('experience', $value); + $general->addExperience($value); } function addDedication(float $value){ $general = $this->general; - $value = $general->onCalcStat($general, 'dedication', $value); - $general->increaseVar('dedication', $value); + $general->addDedication($value); } function addLose(){