견문 추가

This commit is contained in:
2018-10-20 03:24:34 +09:00
parent 7e5c19f507
commit aecbf8ccb3
3 changed files with 231 additions and 310 deletions
-310
View File
@@ -694,316 +694,6 @@ function process_31(&$general) {
pushGenLog($general, $log);
}
function process_42(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year', 'month']);
$type = rand() % 27 + 1;
$exp = 30;
$ded = 0;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
$exp2 = $exp * 2;
switch($type) {
case 1:
$log[] = "<C>●</>{$admin['month']}월:지나가는 행인에게서 금을 <C>300</> 받았습니다. <1>$date</>";
// 자금 상승 // 명성 상승
$query = "update general set resturn='SUCCESS',gold=gold+300,experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 2:
$log[] = "<C>●</>{$admin['month']}월:지나가는 행인에게서 쌀을 <C>300</> 받았습니다. <1>$date</>";
// 군량 상승 // 명성 상승
$query = "update general set resturn='SUCCESS',rice=rice+300,experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 3:
$log[] = "<C>●</>{$admin['month']}월:어느 명사와 설전을 벌여 멋지게 이겼습니다. <1>$date</>";
// 경험치 상승 // 명성 상승
$general['intel2'] += 2;
$query = "update general set resturn='SUCCESS',intel2='{$general['intel2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 4:
$log[] = "<C>●</>{$admin['month']}월:명사와 설전을 벌였으나 망신만 당했습니다. <1>$date</>";
// 명성 상승
$query = "update general set resturn='SUCCESS',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 5:
$log[] = "<C>●</>{$admin['month']}월:동네 장사와 힘겨루기를 하여 멋지게 이겼습니다. <1>$date</>";
// 경험치 상승 // 명성 상승
$general['power2'] += 2;
$query = "update general set resturn='SUCCESS',power2='{$general['power2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 6:
$log[] = "<C>●</>{$admin['month']}월:동네 장사와 힘겨루기를 했지만 망신만 당했습니다. <1>$date</>";
// 명성 상승
$query = "update general set resturn='SUCCESS',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 7:
$log[] = "<C>●</>{$admin['month']}월:산적과 싸워 금 <C>300</>을 빼앗았습니다. <1>$date</>";
// 자금 상승 // 경험치 상승 // 명성 상승
$general['power2'] += 2;
$query = "update general set resturn='SUCCESS',gold=gold+300,power2='{$general['power2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 8:
$log[] = "<C>●</>{$admin['month']}월:산적을 만나 금 <C>200</>을 빼앗겼습니다. <1>$date</>";
$general['gold'] -= 200;
if($general['gold'] <= 0) { $general['gold'] = 0; }
// 자금 하락 // 경험 상승
$query = "update general set resturn='SUCCESS',gold='{$general['gold']}',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 9:
$log[] = "<C>●</>{$admin['month']}월:호랑이를 잡아 고기 <C>300</>을 얻었습니다. <1>$date</>";
// 군량 상승 // 경험치 상승
$general['power2'] += 2;
$query = "update general set resturn='SUCCESS',rice=rice+300,power2='{$general['power2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 10:
$log[] = "<C>●</>{$admin['month']}월:호랑이에게 물려 다쳤습니다. <1>$date</>";
// 경험치 하락 // 명성 상승
$injury = rand() % 10 + 10;
$general['power2']--;
$query = "update general set resturn='SUCCESS',injury=injury+'$injury',power2='{$general['power2']}',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 11:
$log[] = "<C>●</>{$admin['month']}월:곰을 잡아 고기 <C>300</>을 얻었습니다. <1>$date</>";
// 군량 상승 // 경험치 상승 // 명성 상승
$general['power2'] += 2;
$query = "update general set resturn='SUCCESS',rice=rice+300,power2='{$general['power2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 12:
$log[] = "<C>●</>{$admin['month']}월:곰에게 할퀴어 다쳤습니다. <1>$date</>";
// 경험치 하락 // 명성 상승
$injury = rand() % 10 + 10;
$general['power2']--;
$query = "update general set resturn='SUCCESS',injury=injury+'$injury',power2='{$general['power2']}',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 13:
$log[] = "<C>●</>{$admin['month']}월:주점에서 사람들과 어울려 술을 마셨습니다. <1>$date</>";
// 명성 상승
$query = "update general set resturn='SUCCESS',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 14:
$log[] = "<C>●</>{$admin['month']}월:위기에 빠진 사람을 구해주었습니다. <1>$date</>";
// 명성 상승
$query = "update general set resturn='SUCCESS',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 15:
$log[] = "<C>●</>{$admin['month']}월:위기에 빠진 사람을 구해주다가 다쳤습니다. <1>$date</>";
// 경험치 하락 // 명성 상승
$injury = rand() % 10 + 10;
$general['power2']--;
$query = "update general set resturn='SUCCESS',injury=injury+'$injury',power2='{$general['power2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 16:
$log[] = "<C>●</>{$admin['month']}월:돈을 빌려주었다가 이자 <C>300</>을 받았습니다. <1>$date</>";
// 경험치 상승 // 명성 상승
$general['intel2']++;
$query = "update general set resturn='SUCCESS',gold=gold+300,intel2='{$general['intel2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 17:
$log[] = "<C>●</>{$admin['month']}월:돈을 <C>200</> 빌려주었다가 떼어먹혔습니다. <1>$date</>";
$general['gold'] -= 200;
if($general['gold'] <= 0) { $general['gold'] = 0; }
// 명성 상승
$query = "update general set resturn='SUCCESS',gold='{$general['gold']}',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 18:
$log[] = "<C>●</>{$admin['month']}월:쌀을 빌려주었다가 이자 <C>300</>을 받았습니다. <1>$date</>";
// 경험치 상승 // 명성 상승
$general['intel2']++;
$query = "update general set resturn='SUCCESS',rice=rice+300,intel2='{$general['intel2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 19:
$log[] = "<C>●</>{$admin['month']}월:쌀을 <C>200</> 빌려주었다가 떼어먹혔습니다. <1>$date</>";
$general['rice'] -= 200;
if($general['rice'] <= 0) { $general['rice'] = 0; }
// 명성 상승
$query = "update general set resturn='SUCCESS',rice='{$general['rice']}',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 20:
$log[] = "<C>●</>{$admin['month']}월:거리에서 글 모르는 아이들을 모아 글을 가르쳤습니다. <1>$date</>";
// 경험치 상승 // 명성 상승
$general['intel2'] += 2;
$query = "update general set resturn='SUCCESS',intel2='{$general['intel2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 21:
$log[] = "<C>●</>{$admin['month']}월:백성들에게 현인의 가르침을 설파했습니다. <1>$date</>";
// 경험치 상승 // 명성 상승
$general['leader2'] += 2;
$query = "update general set resturn='SUCCESS',leader2='{$general['leader2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 22:
$log[] = "<C>●</>{$admin['month']}월:어느 집의 무너진 울타리를 고쳐주었습니다. <1>$date</>";
// 경험치 상승 // 명성 상승
$general['power2'] += 2;
$query = "update general set resturn='SUCCESS',power2='{$general['power2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 23:
$log[] = "<C>●</>{$admin['month']}월:어느 집의 도망친 가축을 되찾아 주었습니다. <1>$date</>";
// 경험치 상승 // 명성 상승
$general['leader2'] += 2;
$query = "update general set resturn='SUCCESS',leader2='{$general['leader2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 24:
$log[] = "<C>●</>{$admin['month']}월:호랑이에게 물려 크게 다쳤습니다. <1>$date</>";
// 경험치 하락 // 명성 상승
$injury = rand() % 30 + 20;
$general['power2']--;
$query = "update general set resturn='SUCCESS',injury=injury+'$injury',power2='{$general['power2']}',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 25:
$log[] = "<C>●</>{$admin['month']}월:곰에게 할퀴어 크게 다쳤습니다. <1>$date</>";
// 경험치 하락 // 명성 상승
$injury = rand() % 30 + 20;
$general['power2']--;
$query = "update general set resturn='SUCCESS',injury=injury+'$injury',power2='{$general['power2']}',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
case 26:
$log[] = "<C>●</>{$admin['month']}월:위기에 빠진 사람을 구하다가 죽을뻔 했습니다. <1>$date</>";
// 경험치 하락 // 명성 상승
$injury = rand() % 50 + 30;
$general['power2']--;
$query = "update general set resturn='SUCCESS',injury=injury+'$injury',power2='{$general['power2']}',experience=experience+'$exp2' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
default:
$log[] = "<C>●</>{$admin['month']}월:아무일도 일어나지 않았습니다. <1>$date</>";
// 명성 상승
$query = "update general set resturn='SUCCESS',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
break;
}
$log = checkAbility($general, $log);
pushGenLog($general, $log);
}
function process_43(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
$genlog = [];
$log = [];
$alllog = [];
$history = [];
$date = substr($general['turntime'],11,5);
$admin = $gameStor->getValues(['year', 'month']);
$command = DecodeCommand($general['turn0']);
$what = $command[3];
$who = $command[2];
$amount = $command[1];
$amount *= 100; // 100~10000까지
if($amount > 10000) { $amount = 10000; }
if($amount < 100) { $amount = 100; }
if($what == 1) { $dtype = ""; }
elseif($what == 2) { $dtype = ""; }
else { $what = 2; $dtype = ""; }
$query = "select nation,supply from city where city='{$general['city']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$city = MYDB_fetch_array($result);
$query = "select no,name,nation,gold,rice from general where no='$who'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gen = MYDB_fetch_array($result);
if($what == 1 && $general['gold'] < $amount) { $amount = $general['gold']; }
if($what == 2 && $general['rice'] < $amount) { $amount = $general['rice']; }
if(!$gen) {
$log[] = "<C>●</>{$admin['month']}월:없는 장수입니다. 증여 실패. <1>$date</>";
} elseif($what == 1 && $general['gold'] <= 0) {
$log[] = "<C>●</>{$admin['month']}월:자금이 없습니다. 증여 실패. <1>$date</>";
} elseif($what == 2 && $general['rice'] <= 0) {
$log[] = "<C>●</>{$admin['month']}월:군량이 없습니다. 증여 실패. <1>$date</>";
} elseif($general['level'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:재야는 불가능합니다. 증여 실패. <1>$date</>";
} elseif($general['nation'] != $city['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국이 아닙니다. 증여 실패. <1>$date</>";
} elseif($general['nation'] != $gen['nation']) {
$log[] = "<C>●</>{$admin['month']}월:아국 장수가 아닙니다. 증여 실패. <1>$date</>";
} elseif($city['supply'] == 0) {
$log[] = "<C>●</>{$admin['month']}월:고립된 도시입니다. 증여 실패. <1>$date</>";
} else {
$genlog[] = "<C>●</>{$admin['month']}월:<Y>{$general['name']}</>에게서 $dtype <C>$amount</>을 증여 받았습니다.";
$log[] = "<C>●</>{$admin['month']}월:<Y>{$gen['name']}</>에게 $dtype <C>$amount</>을 증여했습니다. <1>$date</>";
if($what == 1) {
$gen['gold'] += $amount;
$query = "update general set gold='{$gen['gold']}' where no='$who'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general['gold'] -= $amount;
$query = "update general set gold='{$general['gold']}' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} elseif($what == 2) {
$gen['rice'] += $amount;
$query = "update general set rice='{$gen['rice']}' where no='$who'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general['rice'] -= $amount;
$query = "update general set rice='{$general['rice']}' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
$exp = 70;
$ded = 100;
// 성격 보정
$exp = CharExperience($exp, $general['personal']);
$ded = CharDedication($ded, $general['personal']);
// 경험치 상승 // 공헌도, 명성 상승
$general['leader2']++;
$query = "update general set resturn='SUCCESS',leader2='{$general['leader2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$log = checkAbility($general, $log);
}
pushGenLog($general, $log);
pushGenLog($gen, $genlog);
}
function process_48(&$general) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
+120
View File
@@ -0,0 +1,120 @@
<?php
namespace sammo\GeneralCommand;
use \sammo\{
DB, Util, JosaUtil,
General,
ActionLogger,
GameConst, GameUnitConst,
LastTurn,
Command
};
use function \sammo\{
uniqueItemEx
};
use \sammo\Constraint\Constraint;
use \sammo\TextDecoration\SightseeingMessage;
class che_견문 extends Command\GeneralCommand{
static protected $actionName = '견문';
protected function init(){
$general = $this->generalObj;
$this->runnableConstraints=[
];
}
protected function argTest():bool{
$this->arg = null;
return true;
}
public function getCost():array{
return [0, 0];
}
public function getPreReqTurn():int{
return 0;
}
public function getPostReqTurn():int{
return 0;
}
public function run():bool{
if(!$this->isRunnable()){
throw new \RuntimeException('불가능한 커맨드를 강제로 실행 시도');
}
$db = DB::db();
$general = $this->generalObj;
$date = substr($general->getVar('turntime'),11,5);
$sightseeing = new SightseeingMessage();
[$type, $text] = $sightseeing->pickAction();
$exp = 0;
if($type & SightseeingMessage::IncExp){
$exp += 30;
}
if($type & SightseeingMessage::IncHeavyExp){
$exp += 60;
}
if($type & SightseeingMessage::IncLeadership){
$general->increaseVar('leader2', 2);
}
if($type & SightseeingMessage::IncPower){
$general->increaseVar('power2', 2);
}
if($type & SightseeingMessage::IncIntel){
$general->increaseVar('intel2', 2);
}
if($type & SightseeingMessage::IncGold){
$general->increaseVar('gold', 300);
$text = str_replace(':amount:', '300', $text);
}
if($type & SightseeingMessage::IncRice){
$general->increaseVar('rice', 300);
$text = str_replace(':amount:', '300', $text);
}
if($type & SightseeingMessage::DecGold){
$general->increaseVarWithLimit('gold', -200, 0);
$text = str_replace(':amount:', '200', $text);
}
if($type & SightseeingMessage::DecRice){
$general->increaseVarWithLimit('rice', -200, 0);
$text = str_replace(':amount:', '200', $text);
}
if($type & SightseeingMessage::Wounded){
$general->increaseVarWithLimit('injury', Util::randRangeInt(10, 20), null, 80);
}
if($type & SightseeingMessage::HeavyWounded){
$general->increaseVarWithLimit('injury', Util::randRangeInt(20, 50), null, 80);
}
$logger = $general->getLogger();
$logger->pushGeneralActionLog("{$text} <1>$date</>");
$exp = $general->onPreGeneralStatUpdate($general, 'experience', $exp);
$general->increaseVar('experience', $exp);
$general->setResultTurn(new LastTurn(static::getName(), $this->arg));
$general->checkStatChange();
$general->applyDB($db);
return true;
}
}
@@ -0,0 +1,111 @@
<?php
namespace sammo\TextDecoration;
class SightseeingMessage{
const IncExp = 0x1;
const IncHeavyExp = 0x2;
const IncLeadership = 0x10;
const IncPower = 0x20;
const IncIntel = 0x40;
const IncGold = 0x100;
const IncRice = 0x200;
const DecGold = 0x400;
const DecRice = 0x800;
const Wounded = 0x1000;
const HeavyWounded = 0x2000;
static protected $messages = null;
protected static function getMessageList():array{
/* [[속성, [
텍스트 리스트,
텍스트 리스트2,
]], 가중치]
(가중치는 텍스트 수와 연관이 없음)
*/
return [
[[self::IncExp,[
'아무일도 일어나지 않았습니다.',
'명사와 설전을 벌였으나 망신만 당했습니다.',
'동네 장사와 힘겨루기를 했지만 망신만 당했습니다.',
]], 1],
[[self::IncHeavyExp, [
'주점에서 사람들과 어울려 술을 마셨습니다.',
'위기에 빠진 사람을 구해주었습니다.',
]], 1],
[[self::IncHeavyExp|self::IncLeadership, [
'백성들에게 현인의 가르침을 설파했습니다.',
'어느 집의 도망친 가축을 되찾아 주었습니다.',
]], 2],
[[self::IncHeavyExp|self::IncPower,[
'동네 장사와 힘겨루기를 하여 멋지게 이겼습니다.',
'어느 집의 무너진 울타리를 고쳐주었습니다.',
]], 2],
[[self::IncHeavyExp|self::IncIntel,[
'어느 명사와 설전을 벌여 멋지게 이겼습니다.',
'거리에서 글 모르는 아이들을 모아 글을 가르쳤습니다.',
]], 2],
[[self::IncExp|self::IncGold,[
'지나가는 행인에게서 금을 <C>:amount:</> 받았습니다.',
]], 1],
[[self::IncExp|self::IncRice,[
'지나가는 행인에게서 쌀을 <C>:amount:</> 받았습니다.',
]], 1],
[[self::IncExp|self::DecGold,[
'산적을 만나 금 <C>:amount:</>을 빼앗겼습니다.',
'돈을 <C>:amount:</> 빌려주었다가 떼어먹혔습니다.',
]], 1],
[[self::IncExp|self::DecRice,[
'쌀을 <C>:amount:</> 빌려주었다가 떼어먹혔습니다.',
]], 1],
[[self::IncExp|self::Wounded,[
'호랑이에게 물려 다쳤습니다.',
'곰에게 할퀴어 다쳤습니다.',
]], 1],
[[self::IncHeavyExp|self::Wounded,[
'위기에 빠진 사람을 구해주다가 다쳤습니다.',
]], 1],
[[self::IncExp|self::HeavyWounded,[
'호랑이에게 물려 크게 다쳤습니다.',
'곰에게 할퀴어 크게 다쳤습니다.',
]], 1],
[[self::IncHeavyExp|self::Wounded|self::HeavyWounded,[
'위기에 빠진 사람을 구하다가 죽을뻔 했습니다.',
]], 1],
[[self::IncHeavyExp|self::IncPower|self::IncGold,[
'산적과 싸워 금 <C>:amount:</>을 빼앗았습니다.',
]], 1],
[[self::IncHeavyExp|self::IncPower|self::IncRice,[
'호랑이를 잡아 고기 <C>:amount:</>을 얻었습니다.',
'곰을 잡아 고기 <C>:amount:</>을 얻었습니다.',
]], 1],
[[self::IncHeavyExp|self::IncIntel|self::IncGold,[
'돈을 빌려주었다가 이자 <C>:amount:</>을 받았습니다.',
]], 1],
[[self::IncHeavyExp|self::IncIntel|self::IncRice,[
'쌀을 빌려주었다가 이자 <C>300</>을 받았습니다.',
]], 1],
];
}
protected static function initMessageList():void{
static::$messages = static::getMessageList();
}
function __construct()
{
//TODO: 장수 이름이 들어가는 경우도 고려?
if(static::$messages === null){
static::buildMessageList();
}
}
public function pickAction():array{
[$type, $texts] = Util::choiceRandomUsingWeightPair(static::$messages);
$text = Util::choiceRandom($texts);
return [$type, $text];
}
}