feat,wip: 기존 거래장 코드 정리
This commit is contained in:
+27
-43
@@ -7,39 +7,25 @@ use sammo\Enums\AuctionType;
|
||||
function registerAuction(RandUtil $rng)
|
||||
{
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
|
||||
$admin = $gameStor->getValues(['startyear', 'year', 'month', 'turnterm']);
|
||||
|
||||
$unit = 60 * $admin['turnterm'];
|
||||
|
||||
// 장수들 평금,평쌀
|
||||
$general = $db->queryFirstRow('SELECT avg(gold) as gold, avg(rice) as rice,max(gold) as maxgold from general where npc<2');
|
||||
[$avgGold, $avgRice] = $db->queryFirstList('SELECT avg(gold), avg(rice) from general where npc<2');
|
||||
$avgGold = Util::valueFit($avgGold, 1000, 20000);
|
||||
$avgRice = Util::valueFit($avgRice, 1000, 20000);
|
||||
|
||||
if ($general['gold'] < 1000) {
|
||||
$general['gold'] = 1000;
|
||||
}
|
||||
if ($general['gold'] > 20000) {
|
||||
$general['gold'] = 20000;
|
||||
}
|
||||
if ($general['rice'] < 1000) {
|
||||
$general['rice'] = 1000;
|
||||
}
|
||||
if ($general['rice'] > 20000) {
|
||||
$general['rice'] = 20000;
|
||||
}
|
||||
$neutralAuctionCnt = Util::convertPairArrayToDict($db->queryAllLists(
|
||||
'SELECT `type`, count(*) FROM ng_auction WHERE `type` IN %s AND `host_general_id`=0 GROUP BY `type`',
|
||||
[AuctionType::BuyRice->value, AuctionType::SellRice->value],
|
||||
));
|
||||
|
||||
$count = $db->queryFirstField('SELECT count(*) FROM auction WHERE type=0 AND no1=0');
|
||||
$count += 5;
|
||||
|
||||
$dummyGeneral = AuctionBasicResource::genDummy();
|
||||
$neutralbuyRiceCnt = $neutralAuctionCnt[AuctionType::BuyRice->value];
|
||||
|
||||
// 판매건 등록
|
||||
if ($rng->nextBool(1 / $count)) {
|
||||
if ($rng->nextBool(1 / ($neutralbuyRiceCnt + 5))) {
|
||||
//평균 쌀의 5% ~ 25%
|
||||
$mul = $rng->nextRangeInt(1, 5);
|
||||
$amount = $general['rice'] / 20 * $mul;
|
||||
$cost = $general['gold'] / 20 * 0.9 * $mul;
|
||||
$amount = $avgRice / 20 * $mul;
|
||||
$cost = $avgGold / 20 * 0.9 * $mul;
|
||||
$topv = $amount * 2;
|
||||
$cost = Util::valueFit($cost, $amount * 0.8, $amount * 1.2);
|
||||
|
||||
@@ -48,18 +34,18 @@ function registerAuction(RandUtil $rng)
|
||||
$topv = Util::round($topv, -1);
|
||||
|
||||
$term = $rng->nextRangeInt(3, 12);
|
||||
$dummyGeneral = AuctionBasicResource::genDummy();
|
||||
AuctionBuyRice::openResourceAuction($dummyGeneral, $amount, $term, $cost, $topv);
|
||||
}
|
||||
|
||||
$count = $db->queryFirstField('SELECT count(*) FROM auction WHERE type=1 AND no1=0');
|
||||
$count += 5;
|
||||
$neutralSellRiceCnt = $neutralAuctionCnt[AuctionType::SellRice->value];
|
||||
// 구매건 등록
|
||||
if ($rng->nextBool(1 / $count)) {
|
||||
if ($rng->nextBool(1 / ($neutralSellRiceCnt + 5))) {
|
||||
//평균 쌀의 5% ~ 25%
|
||||
$mul = $rng->nextRangeInt(1, 5);
|
||||
$amount = $general['rice'] / 20 * $mul;
|
||||
$cost = $general['gold'] / 20 * 1.1 * $mul;
|
||||
$topv = $amount * 0.5;
|
||||
$amount = $avgGold / 20 * $mul;
|
||||
$cost = $avgRice / 20 * 1.1 * $mul;
|
||||
$topv = $amount * 2;
|
||||
$cost = Util::valueFit($cost, $amount * 0.8, $amount * 1.2);
|
||||
|
||||
$amount = Util::round($amount, -1);
|
||||
@@ -67,6 +53,7 @@ function registerAuction(RandUtil $rng)
|
||||
$topv = Util::round($topv, -1);
|
||||
|
||||
$term = $rng->nextRangeInt(3, 12);
|
||||
$dummyGeneral = AuctionBasicResource::genDummy();
|
||||
AuctionSellRice::openResourceAuction($dummyGeneral, $amount, $term, $cost, $topv);
|
||||
}
|
||||
}
|
||||
@@ -74,32 +61,29 @@ function registerAuction(RandUtil $rng)
|
||||
function processAuction()
|
||||
{
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
|
||||
$now = TimeUtil::now();
|
||||
[$year, $month] = $gameStor->getValuesAsArray(['year', 'month']);
|
||||
|
||||
$admin = $gameStor->getValues(['year', 'month']);
|
||||
|
||||
|
||||
$auctionList = $db->queryFirstColumn(
|
||||
'SELECT id, `type` FROM ng_auction WHERE `type` IN %ls AND `close_date` <= %s',
|
||||
[AuctionType::BuyRice->value, AuctionType::SellRice->value],
|
||||
'SELECT id, `type` FROM ng_auction WHERE `close_date` <= %s AND finished = 0',
|
||||
$now
|
||||
);
|
||||
|
||||
if(!$auctionList){
|
||||
if (!$auctionList) {
|
||||
return;
|
||||
}
|
||||
|
||||
$dummyGeneral = AuctionBasicResource::genDummy();
|
||||
foreach($auctionList as [$auctionID, $rawAuctionType]) {
|
||||
foreach ($auctionList as [$auctionID, $rawAuctionType]) {
|
||||
$auctionType = AuctionType::from($rawAuctionType);
|
||||
if($auctionType === AuctionType::BuyRice){
|
||||
if ($auctionType === AuctionType::BuyRice) {
|
||||
$auction = new AuctionBuyRice($auctionID, $dummyGeneral);
|
||||
}
|
||||
else{
|
||||
} else if ($auctionType === AuctionType::SellRice) {
|
||||
$auction = new AuctionSellRice($auctionID, $dummyGeneral);
|
||||
} else if ($auctionType === AuctionType::UniqueItem) {
|
||||
$auction = new AuctionUniqueItem($auctionID, $dummyGeneral);
|
||||
} else {
|
||||
throw new \Exception('Unknown auction type');
|
||||
}
|
||||
$auction->tryFinish();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user