등용장 처리 코드 리팩토링

This commit is contained in:
2018-03-02 02:55:29 +09:00
parent bebc7580bd
commit f66238bb38
2 changed files with 235 additions and 39 deletions
+221
View File
@@ -0,0 +1,221 @@
<?php
require_once(__dir__.'/d_setting/conf.php');
require(__dir__.'/../vendor/autoload.php');
use utilphp\util as util;
function checkScoutAvailable($messageInfo, $general, $srcGeneral, $startyear, $year){
$nationID = $messageInfo['src']['nationID'];
$srcNation = getDB()->queryFirstRow('SELECT `level`, `scout` FROM `nation` WHERE `nation` = %i', $nationID);
$realNationID = $srcGeneral['nation'];
if($general['level'] == 12) {
return [false, "군주입니다."];
}
if(!$srcNation || $srcNation['level'] == 0) {
return [false, "없는 국가이거나 방랑군입니다."];
}
if($realNationID != $nationID){
return [false, "권유자의 소속이 바뀌었습니다."];
}
if($srcNation['scout'] != 0) {
return [false, "임관 금지중입니다."];
}
if($year < $startyear+3) {
return [false, "초반 제한중입니다."];
}
if(strpos($general['nations'], ",{$nationID},") > 0) {
return [false, "이미 임관했었던 국가입니다."];
}
return [true, null];
}
function acceptScout($messageInfo, $general, $msgResponse){
$me = $general;
$you = getDB()->queryFirstRow('SELECT `no`, `name`, `nation` FROM `general` WHERE `no` = %i', $messageInfo['src']['id']);
list($startyear, $year, $month, $killturn) = dictToArray(getDB()->queryFirstRow('SELECT `startyear`, `year`, `month`, `killturn` FROM `game` LIMIT 1'), ['startyear', 'year', 'month', `killturn`]);
list($avaliableScout, $reason) = checkScoutAvailable($messageInfo, $general, $you, $startyear, $year);
if(!$msgResponse || !$avaliableScout){
return declineScout($messageInfo, $reason);
}
$nation = getNationStaticInfo($messageInfo['src']['nationID']);
$generalID = $me['no'];
$nationID = $nation['nation'];
$nationName = $nation['name'];
$myName = $me['name'];
$mylog = [];
$youlog = [];
$alllog = [];
$youlog[] = "<C>●</><Y>{$myName}</> 등용에 성공했습니다.";
$alllog[] = "<C>●</>{$month}월:<Y>{$myName}</>(이)가 <D><b>{$nationName}</b></>(으)로 <S>망명</>하였습니다.";
$mylog[] = "<C>●</><D>{$nationName}</>(으)로 망명하여 수도로 이동합니다.";
addHistory($you, "<C>●</>{$year}{$month}월:<Y>{$myName}</> 등용에 성공");
addHistory($me, "<C>●</>{$year}{$month}월:<D>{$nationName}</>(으)로 망명");
$me['nations'] .= "{$nationID},";
$updateMe = [
'belong'=>1,
'nation'=>$nationID,
'level'=>1,
'city'=>$nation['capital'],
'troop'=>0
];
//처리가 조금 다름.
$db = getDB();
if($me['level'] > 0){
$updateOldNation = [
'totaltech' => $db->sqleval('`tech`*greatest(10, `gennum`-1)'),
'gennum' => $db->sqleval('greatest(10, `gennum`-1)')
];
if($me['gold'] > 1000){
$updateOldNation['gold'] = $db->sqleval('`gold` + %i', $me['gold'] - 1000);
$updateMe['gold'] = 1000;
}
if($me['rice'] > 1000){
$updateOldNation['rice'] = $db->sqleval('`rice` + %i', $me['rice'] - 1000);
$updateMe['rice'] = 1000;
}
$updateMe['betray'] = $db->sqleval('`betray` + 1');
$updateMe['dedication'] = $db->sqleval('dedication*(1-0.1*betray)');
$updateMe['experience'] = $db->sqleval('experience*(1-0.1*betray)');
$db->update('nation', $updateOldNation, 'nation = %i', $messageInfo['dest']['nationID']);
}
else{
$updateMe['dedication'] = $db->sqleval('dedication + 100');
$updateMe['experience'] = $db->sqleval('experience + 100');
}
if($me['npc'] < 2){
$updateMe['killturn'] = $killturn;
}
$db->update('general', $updateMe, 'no = %i', $generalID);
$db->query('UPDATE nation set '.
'gennum = greatest(10, (SELECT count(`id`) from general where `nation` = %i_nation)), '.
'totaltech = tech * greatest(10, (SELECT count(`id`) from general where `nation` = %i_nation)) '.
'where nation=%i_nation', ['nation'=>$nationID]);
//태수 군사 시중 해제
switch($me['level']) {
case 4:
$db->query('update city set gen1=0 where gen1=%i', $generalID);
break;
case 3:
$db->query('update city set gen3=0 where gen2=%i', $generalID);
break;
case 2:
$db->query('update city set gen3=0 where gen2=%i', $generalID);
break;
}
$db->query('UPDATE general left join troop on troop.troop = general.troop set general.troop = 0 where troop.no = %i', $generalID);
$db->query('delete from troop where no = %i', $generalID);
$db->query('UPDATE `message` SET `valid_until`=\'1234-11-22 11:22:33\' WHERE `id` = %i', $messageInfo['id']);
$msg = "{$nationName}(으)로 등용 제의 수락";
sendRawMessage('private', false, $general['no'], $messageInfo['src'], $messageInfo['dest'], $msg, null, null, ['parent'=>$messageInfo['id']]);
pushGenLog($me, $mylog);
pushGenLog($you, $youlog);
pushAllLog($alllog);
pushHistory($alllog);
return [true, 'success'];
}
function declineScout($messageInfo, $reason=null){
$me = [
'no'=>$messageInfo['dest']['id'],
'name'=>$messageInfo['dest']['name']
];
$you = ['no'=>$messageInfo['src']['id']];
$mylog = [];
$youlog = [];
$nationName = $messageInfo['src']['nation'];
if($reason){
$mylog[] = "<C>●</>{$reason} 등용 수락 불가.";
$msg = "{$nationName}(으)로 등용 제의 수락 불가";
}
else{
$youlog[] = "<C>●</><Y>{$me['name']}</>(이)가 등용을 거부했습니다.";
$mylog[] = "<C>●</><D>{$nationName}</>(으)로 망명을 거부했습니다.";
$msg = "{$nationName}(으)로 등용 제의 거부";
}
$db = getDB();
$db->query('UPDATE `message` SET `valid_until`=\'1234-11-22 11:22:33\' WHERE `id` = %i', $messageInfo['id']);
sendRawMessage('private', false, $general['no'], $messageInfo['src'], $messageInfo['dest'], $msg, null, null, ['parent'=>$messageInfo['id']]);
pushGenLog($me, $mylog);
pushGenLog($you, $youlog);
return [true, 'success'];
}
function acceptAlly($messageInfo, $general){
}
function declineAlly($messageInfo, $general){
}
function acceptBreakAlly($messageInfo, $general){
}
function declineBreakAlly($messageInfo, $general){
}
function acceptStopWar($messageInfo, $general){
}
function declineStopWar($messageInfo, $general){
}
function acceptMergeNations($messageInfo, $general){
}
function declineMergeNations($messageInfo, $general){
}
function acceptSurrender($messageInfo, $general){
}
function declineSurrender($messageInfo, $general){
}
+14 -39
View File
@@ -30,7 +30,15 @@ if ($msgID === null || !is_bool($msgResponse)) {
}
$result = getSingleMessage($msgID, $generalID);
$general = getDB()->queryFirstRow('select `no`, `name`, `nation`, `nations`, `level`, `npc`, `gold`, `rice`, `troop` from `general` where `no` = %i', $generalID);
if(!$general){
returnJson([
'result'=>false,
'reason'=>'존재하지 않는 장수'
]);
}
$result = getSingleMessage($msgID, $general);
if (!$result[0]) {
returnJson([
@@ -77,19 +85,12 @@ if ($msgType == 'diplomacy' && $msgSrc['nation_id'] != $msgDest['nation_id']) {
}
if($msgType == 'diplomacy'){
if(!getNationStaticInfo($msgSrc['nation_id'])){
if($general['level'] < 6){
returnJson([
'result'=>false,
'reason'=>'발신 국가 없음'
'reason'=>'외교 권한 없음'
]);
}
if(!getNationStaticInfo($msgDest['nation_id'])){
returnJson([
'result'=>false,
'reason'=>'수신 국가 없음'
]);
}
}
if($general['nation'] != $msgDest['nation_id']){
returnJson([
@@ -97,41 +98,15 @@ if($msgType == 'diplomacy'){
'reason'=>'올바르지 않은 소속 국가'
]);
}
if($general['level'] < 6){
returnJson([
'result'=>false,
'reason'=>'외교 권한 없음'
]);
}
}
if(!$msgResponse){
switch($msgAction){
case 'scout':
$result = declineScout($messageInfo);
break;
case 'ally':
$result = declineAlly($messageInfo);
break;
//TODO:기타 등등
default:
$result = [false, '처리 대상 아님'];
}
returnJson([
'result' => $result[0],
'reason' => $result[1]
]);
}
switch ($msgAction) {
case 'scout':
//TODO: 등용장 받음. 함수 호출
$result = acceptScout($messageInfo);
$result = acceptScout($messageInfo, $general, $msgResponse);
break;
case 'ally':
$result = acceptAlly($messageInfo);
$result = acceptAlly($messageInfo, $general, $msgResponse);
break;
//TODO:기타 등등
case '':