diff --git a/hwe/func.php b/hwe/func.php index 683174cb..0ae5a6af 100644 --- a/hwe/func.php +++ b/hwe/func.php @@ -1697,174 +1697,6 @@ function PreprocessCommand($no) { } - -function updateTurntime($no) { - $db = DB::db(); - $gameStor = KVStorage::getStorage($db, 'game_env'); - $connect=$db->get(); - $alllog = []; - $log = []; - - $admin = $gameStor->getValues(['year', 'month', 'isunited', 'turnterm']); - - $query = "select no,name,name2,nation,troop,age,turntime,killturn,level,deadyear,npc,npc_org,affinity,npcid from general where no='$no'"; - $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $general = MYDB_fetch_array($result); - - // 삭턴장수 삭제처리 - if($general['killturn'] <= 0) { - // npc유저 삭턴시 npc로 전환 - if($general['npc'] == 1 && $general['deadyear'] > $admin['year']) { - $general['killturn'] = ($general['deadyear'] - $admin['year']) * 12; - $general['npc'] = $general['npc_org']; - - $db->update('general', [ - 'owner'=>-1, - 'npc'=>$general['npc_org'], - 'killturn'=>$general['killturn'], - 'mode'=>2, - 'name2'=>null - ], 'no=%i',$no); - - $josaYi = JosaUtil::pick($general['name2'], '이'); - $alllog[0] = "●{$admin['month']}월:{$general['name2']}{$josaYi} {$general['name']}의 육체에서 유체이탈합니다!"; - pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']); - } else { - - storeOldGeneral($general['no'], $admin['year'], $admin['month']); - - // 군주였으면 유지 이음 - if($general['level'] == 12) { - nextRuler($general); - } - - //도시의 태수, 군사, 시중직도 초기화 - $query = "update city set gen1='0' where gen1='{$general['no']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $query = "update city set gen2='0' where gen2='{$general['no']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $query = "update city set gen3='0' where gen3='{$general['no']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - - // 부대 처리 - $query = "select no from troop where troop='{$general['troop']}'"; - $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $troop = MYDB_fetch_array($result); - - //부대장일 경우 - if($troop['no'] == $general['no']) { - // 모두 탈퇴 - $query = "update general set troop='0' where troop='{$general['troop']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - // 부대 삭제 - $query = "delete from troop where troop='{$general['troop']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - } else { - $query = "update general set troop='0' where no='{$general['no']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - } - // 장수 삭제 - $query = "delete from general where no='{$general['no']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - - $db->update('nation', [ - 'gennum'=>$db->sqleval('gennum - 1') - ], 'nation=%i', $general['nation']); - - // 병, 요절, 객사, 번개, 사채, 일확천금, 호랑이, 곰, 수영, 처형, 발견 - $josaYi = JosaUtil::pick($general['name'], '이'); - switch(rand()%42) { - case 0: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 역병에 걸려 죽고 말았습니다."; break; - case 1: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 요절하고 말았습니다."; break; - case 2: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 거리에서 갑자기 객사하고 말았습니다."; break; - case 3: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 안타깝게도 번개에 맞아 죽고 말았습니다."; break; - case 4: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 고리대금에 시달리다가 자살하고 말았습니다."; break; - case 5: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 일확천금에 놀라 심장마비로 죽고 말았습니다."; break; - case 6: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 산속에서 호랑이에게 물려 죽고 말았습니다."; break; - case 7: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 산책중 곰에게 할퀴어 죽고 말았습니다."; break; - case 8: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 수영을 하다 익사하고 말았습니다."; break; - case 9: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 황제를 모독하다가 처형당하고 말았습니다."; break; - case 10: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 이튿날 침실에서 죽은채로발견되었습니다."; break; - case 11: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 색에 빠져 기력이 쇠진해 죽고말았습니다."; break; - case 12: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 미녀를 보고 심장마비로 죽고말았습니다."; break; - case 13: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 우울증에 걸려 자살하고 말았습니다."; break; - case 14: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 천하 정세를 비관하며 분신하고 말았습니다."; break; - case 15: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 어떤 관심도 못받고 쓸쓸히 죽고말았습니다."; break; - case 16: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 유산 상속 문제로 다투다가 살해당했습니다."; break; - case 17: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 누군가의 사주로 자객에게 암살당했습니다."; break; - case 18: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 바람난 배우자에게 독살당하고 말았습니다."; break; - case 19: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 농약을 술인줄 알고 마셔 죽고말았습니다."; break; - case 20: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 아무 이유 없이 죽고말았습니다."; break; - case 21: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 전재산을 잃고 화병으로 죽고말았습니다."; break; - case 22: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 단식운동을 하다가 굶어 죽고말았습니다."; break; - case 23: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 귀신에게 홀려 시름 앓다가 죽고말았습니다."; break; - case 24: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 사람들에게 집단으로 맞아서 죽고말았습니다."; break; - case 25: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 갑자기 성벽에서 뛰어내려 죽고말았습니다."; break; - case 26: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 농사중 호미에 머리를 맞아 죽고말았습니다."; break; - case 27: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 저세상이 궁금하다며 자살하고 말았습니다."; break; - case 28: $alllog[0] = "●{$admin['month']}월:운좋기로 소문난 {$general['name']}{$josaYi} 불운하게도 죽고말았습니다."; break; - case 29: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 무리하게 단련을 하다가 죽고말았습니다."; break; - case 30: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 생활고를 비관하며 자살하고 말았습니다."; break; - case 31: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 평생 결혼도 못해보고 죽고 말았습니다."; break; - case 32: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 과식하다 배가 터져 죽고 말았습니다."; break; - case 33: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 웃다가 숨이 넘어가 죽고 말았습니다."; break; - case 34: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 추녀를 보고 놀라서 죽고 말았습니다."; break; - case 35: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 물에 빠진 사람을 구하려다 같이 죽고 말았습니다."; break; - case 36: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 독살을 준비하다 독에 걸려 죽고 말았습니다."; break; - case 37: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 뒷간에서 너무 힘을 주다가 죽고 말았습니다."; break; - case 38: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 돌팔이 의사에게 치료받다가 죽고 말았습니다."; break; - case 39: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 남의 보약을 훔쳐먹다 부작용으로 죽고 말았습니다."; break; - case 40: $alllog[0] = "●{$admin['month']}월:희대의 사기꾼 {$general['name']}{$josaYi} 사망했습니다."; break; - case 41: $alllog[0] = "●{$admin['month']}월:희대의 호색한 {$general['name']}{$josaYi} 사망했습니다."; break; - default: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 사망했습니다."; break; - } - // 엔피씨,엠피씨,의병 사망로그 - if($general['npc'] == 2 || $general['npc'] == 6) { - $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 사망했습니다."; - } elseif($general['npc'] >= 3) { - switch(rand()%10) { - case 0: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 푸대접에 실망하여 떠났습니다."; break; - case 1: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 갑자기 화를 내며 떠났습니다."; break; - case 2: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 의견차이를 좁히지 못하고 떠났습니다."; break; - case 3: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 판단 착오였다며 떠났습니다."; break; - case 4: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 생활고가 나아지지 않는다며 떠났습니다."; break; - case 5: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 기대가 너무 컸다며 떠났습니다."; break; - case 6: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 아무 이유 없이 떠났습니다."; break; - case 7: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 자기 목적은 달성했다며 떠났습니다."; break; - case 8: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 자기가 없어도 될것 같다며 떠났습니다."; break; - case 9: $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 처자식이 그립다며 떠났습니다."; break; - } - } - - pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']); - - return; - } - } - - if($general['age'] >= 80 && $general['npc'] == 0) { - if($admin['isunited'] == 0) { - CheckHall($no); - } - - $query = "update general set leader=leader*0.85,power=power*0.85,intel=intel*0.85,injury=0,experience=experience*0.5,dedication=dedication*0.5,firenum=0,warnum=0,killnum=0,deathnum=0,killcrew=0,deathcrew=0,age=20,specage=0,specage2=0,crew=crew*0.85,dex0=dex0*0.5,dex10=dex10*0.5,dex20=dex20*0.5,dex30=dex30*0.5,dex40=dex40*0.5 where no='$no'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - - $josaYi = JosaUtil::pick($general['name'], '이'); - $alllog[0] = "●{$admin['month']}월:{$general['name']}{$josaYi} 은퇴하고 그 자손이 유지를 이어받았습니다."; - pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']); - - $log[0] = "●나이가 들어 은퇴하고 자손에게 자리를 물려줍니다."; - pushGenLog($general, $log); - pushGeneralHistory($general, "●{$admin['year']}년 {$admin['month']}월:나이가 들어 은퇴하고, 자손에게 관직을 물려줌"); - } - - $turntime = addTurn($general['turntime'], $admin['turnterm']); - - $query = "update general set turntime='$turntime' where no='$no'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); -} - function CheckHall($no) { $db = DB::db(); $gameStor = KVStorage::getStorage($db, 'game_env'); @@ -2440,7 +2272,8 @@ function deleteNation($general) { refreshNationStaticInfo(); } -function nextRuler($general) { +function nextRuler(General $general) { + //TODO: General로 변경 $db = DB::db(); $gameStor = KVStorage::getStorage($db, 'game_env'); $connect=$db->get(); diff --git a/hwe/sammo/ActionLogger.php b/hwe/sammo/ActionLogger.php index f55b68d0..ae016594 100644 --- a/hwe/sammo/ActionLogger.php +++ b/hwe/sammo/ActionLogger.php @@ -306,4 +306,12 @@ class ActionLogger{ $this->pushGeneralActionLog($res, self::EVENT_YEAR_MONTH); } + public function getYear():int{ + return $this->year; + } + + public function getMonth():int{ + return $this->month; + } + } \ No newline at end of file diff --git a/hwe/sammo/TurnExecutionHelper.php b/hwe/sammo/TurnExecutionHelper.php index 3b7d3b7f..a1957b84 100644 --- a/hwe/sammo/TurnExecutionHelper.php +++ b/hwe/sammo/TurnExecutionHelper.php @@ -16,6 +16,16 @@ class TurnExecutionHelper $this->turn = $turn; } + public function __destruct() + { + $this->applyDB(); + } + + public function applyDB(){ + $db = DB::db(); + $this->generalObj->applyDB($db); + } + public function getGeneral():General{ return $this->generalObj; } @@ -56,17 +66,63 @@ class TurnExecutionHelper } function updateTurnTime(){ + $db = DB::db(); + $gameStor = KVStorage::getStorage($db, 'game_env'); + + $general = $this->generalObj; + $generalID = $general->getRaw('no'); + $logger = $general->getLogger(); + + $generalName = $general->getName(); + + // 삭턴장수 삭제처리 + if($general->getVar('killturn') <= 0){ + // npc유저 삭턴시 npc로 전환 + if($general->getVar('npc') == 1 && $general->getVar('deadyear') > $gameStor->year){ + + $ownerName = $general->getVar('name2'); + $josaYi = JosaUtil::pick($ownerName, '이'); + + $logger->pushGlobalActionLog("{$ownerName}{$josaYi} {$generalName}의 육체에서 유체이탈합니다!"); + + $general->setVar('killturn', ($general->getVar('deadyear') - $gameStor->year) * 12); + $general->setVar('npc', $general->getVar('npc_org')); + $general->setVar('owner', 1); + $general->setVar('mode', 2); + $general->setVar('name2', null); + } + else{ + $general->applyDB($db); + storeOldGeneral($generalID, $gameStor->year, $gameStor->month); + $general->kill($db); + return; + } + } + + //은퇴 + if($general->getVar('age') >= 80 && $general->getVar('npc') == 0) { + if($gameStor->isunited == 0) { + $general->applyDB($db); + CheckHall($generalID); + } + + $general->rebirth(); + } + + $turntime = addTurn($general->getRaw('turntime'), $gameStor->turnterm); + $general->setVar('turntime', $turntime); } static public function executeGeneralCommandUntil(string $date, \DateTimeInterface $limitActionTime, int $year, int $month){ $generalsTodo = $db->queryFirstRow( - 'SELECT npc,no,name,picture,imgsvr,nation,nations,city,troop,injury,affinity, + 'SELECT no,name,name2,picture,imgsvr,nation,nations,city,troop,injury,affinity, leader,leader2,power,power2,intel,intel2,weap,book,horse,item, experience,dedication,level,gold,rice,crew,crewtype,train,atmos, turntime,makenation,makelimit,killturn,block,dedlevel,explevel, age,belong,personal,special,special2,term, +npc,npc_org,npcid,deadyear, dex0,dex10,dex20,dex30,dex40, warnum,killnum,deathnum,killcrew,deathcrew,recwar, general_turn.`action` AS `action`, general_turn.arg AS arg @@ -99,6 +155,7 @@ WHERE turntime < %s AND general_turn.turn_idx = 0 ORDER BY turntime ASC, `no` AS $turnObj->processCommand(); $turnObj->updateCommand(); $turnObj->updateTurntime(); + $turnObj->applyDB(); $currentTurn = $generalWork['turntime']; }