Skip to content
This repository was archived by the owner on May 26, 2023. It is now read-only.

Commit eb054cf

Browse files
committed
- Unloading characters button
1 parent c689d74 commit eb054cf

File tree

8 files changed

+110
-37
lines changed

8 files changed

+110
-37
lines changed

app/Helpers/OPFWHelper.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,11 +132,42 @@ public static function updateJob(Player $player, string $character_id): OPFWResp
132132
return $response;
133133
}
134134

135+
/**
136+
* Unloads someones character
137+
*
138+
* @param Player $player
139+
* @param string $character_id
140+
* @return OPFWResponse
141+
*/
142+
public static function unloadCharacter(string $staffSteamIdentifier, Player $player, string $character_id): OPFWResponse
143+
{
144+
$steam = $player->steam_identifier;
145+
146+
$status = Player::getOnlineStatus($player->steam_identifier, false);
147+
if (!$status->isOnline()) {
148+
return new OPFWResponse(true, 'Player is offline, no unload needede.');
149+
}
150+
151+
$response = self::executeRoute($status->serverIp . 'execute/unloadCharacter', [
152+
'steamIdentifier' => $steam,
153+
'characterId' => $character_id,
154+
]);
155+
156+
if ($response->status) {
157+
$response->message = 'Unloaded players character.';
158+
159+
PanelLog::logUnload($staffSteamIdentifier, $player->steam_identifier, $character_id);
160+
}
161+
162+
return $response;
163+
}
164+
135165
/**
136166
* Gets the world.json
137167
*
138168
* @param string $serverIp
139169
* @return array|null
170+
* @deprecated No longer used
140171
*/
141172
public static function getWorldJSON(string $serverIp): ?array
142173
{

app/Http/Controllers/PlayerRouteController.php

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
namespace App\Http\Controllers;
44

55
use App\Helpers\OPFWHelper;
6-
use App\Http\Requests\KickStoreRequest;
76
use App\Player;
87
use Illuminate\Http\RedirectResponse;
8+
use Illuminate\Http\Request;
99

1010
class PlayerRouteController extends Controller
1111
{
@@ -14,11 +14,15 @@ class PlayerRouteController extends Controller
1414
* Kick a player from the game
1515
*
1616
* @param Player $player
17-
* @param KickStoreRequest $request
17+
* @param Request $request
1818
* @return RedirectResponse
1919
*/
20-
public function kick(Player $player, KickStoreRequest $request): RedirectResponse
20+
public function kick(Player $player, Request $request): RedirectResponse
2121
{
22+
if (empty(trim($request->input('reason')))) {
23+
return back()->with('error', 'Reason cannot be empty');
24+
}
25+
2226
$user = $request->user();
2327
$reason = $request->input('reason') ?: 'You were kicked by ' . $user->player->player_name;
2428

@@ -29,15 +33,38 @@ public function kick(Player $player, KickStoreRequest $request): RedirectRespons
2933
* Send a staffPM to a player
3034
*
3135
* @param Player $player
32-
* @param KickStoreRequest $request
36+
* @param Request $request
3337
* @return RedirectResponse
3438
*/
35-
public function staffPM(Player $player, KickStoreRequest $request): RedirectResponse
39+
public function staffPM(Player $player, Request $request): RedirectResponse
3640
{
3741
$user = $request->user();
3842
$message = trim($request->input('message'));
3943

44+
if (empty($message)) {
45+
return back()->with('error', 'Message cannot be empty');
46+
}
47+
4048
return OPFWHelper::staffPM($user->player->steam_identifier, $player, $message)->redirect();
4149
}
4250

51+
/**
52+
* Unload someones character
53+
*
54+
* @param Player $player
55+
* @param Request $request
56+
* @return RedirectResponse
57+
*/
58+
public function unloadCharacter(Player $player, Request $request): RedirectResponse
59+
{
60+
$user = $request->user();
61+
$character = trim($request->input('character'));
62+
63+
if (empty($character)) {
64+
return back()->with('error', 'Character ID cannot be empty');
65+
}
66+
67+
return OPFWHelper::unloadCharacter($user->player->steam_identifier, $player, $character)->redirect();
68+
}
69+
4370
}

app/Http/Requests/KickStoreRequest.php

Lines changed: 0 additions & 22 deletions
This file was deleted.

app/PanelLog.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,22 @@ public static function logKick(string $fromIdentifier, string $toIdentifier, str
134134
self::createLog($fromIdentifier, $toIdentifier, $log, 'Kicked Player');
135135
}
136136

137+
/**
138+
* Logs a character unload from the panel
139+
*
140+
* @param string $fromIdentifier
141+
* @param string $toIdentifier
142+
* @param string $character
143+
*/
144+
public static function logUnload(string $fromIdentifier, string $toIdentifier, string $character)
145+
{
146+
$from = self::resolvePlayerLogName($fromIdentifier);
147+
$to = self::resolvePlayerLogName($toIdentifier);
148+
149+
$log = $from . ' unloaded ' . $to . '\'s character (#' . $character . ')';
150+
self::createLog($fromIdentifier, $toIdentifier, $log, 'Unloaded Character');
151+
}
152+
137153
private static function resolvePlayerLogName(string $identifier): string
138154
{
139155
$player = Player::query()->where('steam_identifier', $identifier)->first();

resources/js/Pages/Players/Show.vue

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -329,14 +329,21 @@
329329
<inertia-link class="block px-4 py-3 text-center text-white bg-indigo-600 dark:bg-indigo-400 rounded" :href="'/players/' + player.steamIdentifier + '/characters/' + character.id + '/edit'">
330330
{{ t('global.view') }}
331331
</inertia-link>
332-
<inertia-link
333-
class="block px-4 py-3 text-center text-white mt-3 bg-blue-600 dark:bg-blue-400 rounded"
334-
:href="'/inventories/character/' + character.id"
335-
v-if="!character.characterDeleted"
336-
>
337-
<i class="fas fa-briefcase mr-1"></i>
338-
{{ t('inventories.view') }}
339-
</inertia-link>
332+
<div class="flex justify-between flex-wrap">
333+
<button class="block w-full px-4 py-3 2xl:w-split text-center text-white mt-3 bg-warning dark:bg-dark-warning rounded" v-if="player.status.status === 'online'" @click="unloadCharacter(character.id)">
334+
<i class="fas fa-bolt mr-1"></i>
335+
{{ t('players.show.unload') }}
336+
</button>
337+
<inertia-link
338+
class="block w-full px-4 py-3 text-center text-white mt-3 bg-blue-600 dark:bg-blue-400 rounded"
339+
:class="{ '2xl:w-split' : player.status.status === 'online' }"
340+
:href="'/inventories/character/' + character.id"
341+
v-if="!character.characterDeleted"
342+
>
343+
<i class="fas fa-briefcase mr-1"></i>
344+
{{ t('inventories.view') }}
345+
</inertia-link>
346+
</div>
340347
<inertia-link
341348
class="block px-4 py-3 text-center text-white mt-3 bg-red-600 dark:bg-red-400 rounded"
342349
href="#"
@@ -560,6 +567,16 @@ export default {
560567
this.isKicking = false;
561568
this.form.kick.reason = null;
562569
},
570+
async unloadCharacter(character) {
571+
if (!confirm(this.t('players.show.unload_confirm'))) {
572+
return;
573+
}
574+
575+
// Send request.
576+
await this.$inertia.post('/players/' + this.player.steamIdentifier + '/unloadCharacter', {
577+
character: character
578+
});
579+
},
563580
async deleteCharacter(e, characterId) {
564581
e.preventDefault();
565582

resources/js/locales/en-us.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,9 @@
268268
"pm_message": "Message",
269269
"pm_confirm": "Send StaffPM",
270270
"panel_logs": "Latest 25 Panel Logs",
271-
"delete_character": "Are you sure you want to delete this character?"
271+
"delete_character": "Are you sure you want to delete this character?",
272+
"unload": "Unload Players Character",
273+
"unload_confirm": "Are you sure you want to unload this players character? This will send them to the character selection screen."
272274
},
273275
"form": {
274276
"identifier": "Identifier",

routes/web.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
Route::resource('players.warnings', PlayerWarningController::class);
5858
Route::post('/players/{player}/kick', [PlayerRouteController::class, 'kick']);
5959
Route::post('/players/{player}/staffPM', [PlayerRouteController::class, 'staffPM']);
60+
Route::post('/players/{player}/unloadCharacter', [PlayerRouteController::class, 'unloadCharacter']);
6061

6162
// Inventories.
6263
Route::get('/inventories/character/{character}', [InventoryController::class, 'character']);

tailwind.config.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ module.exports = {
3838
'character_advanced': '550px',
3939
'90': '90px',
4040
'map': '1160px',
41-
'map-right': 'calc(100% - 1160px)'
41+
'map-right': 'calc(100% - 1160px)',
42+
'split': 'calc(50% - 10px)'
4243
},
4344
height: {
4445
'side-close': '40px',

0 commit comments

Comments
 (0)