From 9db1be7b6c54c2c7503433410f7588cf5eb46e30 Mon Sep 17 00:00:00 2001 From: Hide_D Date: Sun, 17 Jul 2022 21:01:28 +0900 Subject: [PATCH] wip --- hwe/sammo/API/Nation/SetTroopName.php | 1 + hwe/sammo/API/Troop/ExitTroop.php | 0 hwe/sammo/API/Troop/JoinTroop.php | 64 ++++++++++++++++++++++++++ hwe/sammo/API/Troop/NewTroop.php | 64 ++++++++++++++++++++++++++ hwe/sammo/API/Troop/SetTroopName.php | 65 +++++++++++++++++++++++++++ hwe/ts/SammoAPI.ts | 10 +++++ 6 files changed, 204 insertions(+) create mode 100644 hwe/sammo/API/Troop/ExitTroop.php create mode 100644 hwe/sammo/API/Troop/JoinTroop.php create mode 100644 hwe/sammo/API/Troop/NewTroop.php create mode 100644 hwe/sammo/API/Troop/SetTroopName.php diff --git a/hwe/sammo/API/Nation/SetTroopName.php b/hwe/sammo/API/Nation/SetTroopName.php index b8689d6f..0dec998b 100644 --- a/hwe/sammo/API/Nation/SetTroopName.php +++ b/hwe/sammo/API/Nation/SetTroopName.php @@ -10,6 +10,7 @@ use sammo\Validator; use function sammo\checkSecretPermission; +/** @deprecated */ class SetTroopName extends \sammo\BaseAPI { public function validateArgs(): ?string diff --git a/hwe/sammo/API/Troop/ExitTroop.php b/hwe/sammo/API/Troop/ExitTroop.php new file mode 100644 index 00000000..e69de29b diff --git a/hwe/sammo/API/Troop/JoinTroop.php b/hwe/sammo/API/Troop/JoinTroop.php new file mode 100644 index 00000000..37b942c7 --- /dev/null +++ b/hwe/sammo/API/Troop/JoinTroop.php @@ -0,0 +1,64 @@ +args); + $v->rule('required', [ + 'troopID', + ]) + ->rule('integer', 'troopID'); + + if (!$v->validate()) { + return $v->errorStr(); + } + return null; + } + + public function getRequiredSessionMode(): int + { + return static::REQ_GAME_LOGIN; + } + + public function launch(Session $session, ?DateTimeInterface $modifiedSince, ?string $reqEtag) + { + $userID = $session->userID; + $troopName = StringUtil::neutralize($this->args['troopName']); + if (!$troopName) { + return '부대 이름이 없습니다.'; + } + + $db = DB::db(); + $me = $db->queryFirstRow('SELECT `no`,nation,`troop`,`officer_level`,permission,penalty FROM general WHERE `owner`=%i', $userID); + if ($me['troop'] != 0) { + return '이미 부대에 소속되어 있습니다.'; + } + $nationID = $me['nation']; + if ($nationID == 0) { + return '국가에 소속되어 있지 않습니다.'; + } + + $generalID = $me['no']; + + $db->insert('troop', [ + 'name' => $troopName, + 'troop_leader' => $generalID, + 'nation' => $nationID, + ]); + + if ($db->affectedRows() == 0) { + return '부대가 생성되지 않았습니다.'; + } + + return null; + } +} diff --git a/hwe/sammo/API/Troop/NewTroop.php b/hwe/sammo/API/Troop/NewTroop.php new file mode 100644 index 00000000..95723d71 --- /dev/null +++ b/hwe/sammo/API/Troop/NewTroop.php @@ -0,0 +1,64 @@ +args); + $v->rule('required', [ + 'troopName', + ]) + ->rule('stringWidthBetween', 'troopName', 1, 18); + + if (!$v->validate()) { + return $v->errorStr(); + } + return null; + } + + public function getRequiredSessionMode(): int + { + return static::REQ_GAME_LOGIN; + } + + public function launch(Session $session, ?DateTimeInterface $modifiedSince, ?string $reqEtag) + { + $userID = $session->userID; + $troopName = StringUtil::neutralize($this->args['troopName']); + if(!$troopName){ + return '부대 이름이 없습니다.'; + } + + $db = DB::db(); + $me = $db->queryFirstRow('SELECT `no`,nation,`troop`,`officer_level`,permission,penalty FROM general WHERE `owner`=%i', $userID); + if($me['troop'] != 0){ + return '이미 부대에 소속되어 있습니다.'; + } + $nationID = $me['nation']; + if($nationID == 0){ + return '국가에 소속되어 있지 않습니다.'; + } + + $generalID = $me['no']; + + $db->insert('troop', [ + 'name'=>$troopName, + 'troop_leader'=>$generalID, + 'nation'=>$nationID, + ]); + + if($db->affectedRows() == 0){ + return '부대가 생성되지 않았습니다.'; + } + + return null; + } +} diff --git a/hwe/sammo/API/Troop/SetTroopName.php b/hwe/sammo/API/Troop/SetTroopName.php new file mode 100644 index 00000000..a59cdfb7 --- /dev/null +++ b/hwe/sammo/API/Troop/SetTroopName.php @@ -0,0 +1,65 @@ +args); + $v->rule('required', [ + 'troopID', + 'troopName', + ]) + ->rule('stringWidthBetween', 'troopName', 1, 18) + ->rule('integer', 'troopID'); + + if (!$v->validate()) { + return $v->errorStr(); + } + return null; + } + + public function getRequiredSessionMode(): int + { + return static::REQ_GAME_LOGIN | static::REQ_READ_ONLY; + } + + public function launch(Session $session, ?DateTimeInterface $modifiedSince, ?string $reqEtag) + { + $userID = $session->userID; + $db = DB::db(); + $me = $db->queryFirstRow('SELECT `no`,nation,`officer_level`,permission,penalty FROM general WHERE `owner`=%i', $userID); + $permission = checkSecretPermission($me, false); + $troopID = $this->args['troopID']; + + $generalID = $me['no']; + if($generalID != $troopID && $permission < 4){ + return "권한이 부족합니다."; + } + + $troopName = StringUtil::neutralize($this->args['troopName']); + if(!$troopName){ + return '부대 이름이 없습니다.'; + } + + $nationID = $me['nation']; + $db->update('troop', [ + 'name'=>$troopName + ], 'troop_leader=%i AND `nation`=%i',$troopID, $nationID); + + if($db->affectedRows() == 0){ + return '부대가 없습니다.'; + } + + return null; + } +} diff --git a/hwe/ts/SammoAPI.ts b/hwe/ts/SammoAPI.ts index bf926c51..2d8290a0 100644 --- a/hwe/ts/SammoAPI.ts +++ b/hwe/ts/SammoAPI.ts @@ -227,12 +227,22 @@ const apiRealPath = { }, GetGeneralLogResponse >, + /** @deprecated */ SetTroopName: PATCH as APICallT<{ troopID: number; troopName: string; }>, GetNationInfo: GET as APICallT<{full?: boolean}, NationInfoResponse>, }, + Troop: { + NewTroop: POST as APICallT<{ + name: string; + }>, + SetTroopName: PATCH as APICallT<{ + troopID: number; + troopName: string; + }>, + }, Vote: { AddComment: POST as APICallT<{ voteID: number;