add more events about players
This commit is contained in:
parent
70d8614d84
commit
516c5ef762
@ -70,7 +70,7 @@ class PlayerController extends Controller
|
||||
return json('', 0, $players);
|
||||
}
|
||||
|
||||
public function add(Request $request)
|
||||
public function add(Request $request, Dispatcher $dispatcher)
|
||||
{
|
||||
$user = Auth::user();
|
||||
|
||||
@ -87,6 +87,7 @@ class PlayerController extends Controller
|
||||
],
|
||||
])['name'];
|
||||
|
||||
$dispatcher->dispatch('player.add.attempt', [$name, $user]);
|
||||
event(new CheckPlayerExists($name));
|
||||
|
||||
if (!Player::where('name', $name)->get()->isEmpty()) {
|
||||
@ -97,43 +98,48 @@ class PlayerController extends Controller
|
||||
return json(trans('user.player.add.lack-score'), 7);
|
||||
}
|
||||
|
||||
$dispatcher->dispatch('player.adding', [$name, $user]);
|
||||
event(new PlayerWillBeAdded($name));
|
||||
|
||||
$player = new Player();
|
||||
|
||||
$player->uid = $user->uid;
|
||||
$player->name = $name;
|
||||
$player->tid_skin = 0;
|
||||
$player->tid_cape = 0;
|
||||
$player->save();
|
||||
|
||||
event(new PlayerWasAdded($player));
|
||||
|
||||
$user->score -= option('score_per_player');
|
||||
$user->save();
|
||||
|
||||
$dispatcher->dispatch('player.added', [$player, $user]);
|
||||
event(new PlayerWasAdded($player));
|
||||
|
||||
return json(trans('user.player.add.success', ['name' => $name]), 0, $player->toArray());
|
||||
}
|
||||
|
||||
public function delete($pid)
|
||||
public function delete(Dispatcher $dispatcher, $pid)
|
||||
{
|
||||
$user = auth()->user();
|
||||
$player = Player::find($pid);
|
||||
$playerName = $player->name;
|
||||
|
||||
$dispatcher->dispatch('player.delete.attempt', [$player, $user]);
|
||||
|
||||
if (option('single_player', false)) {
|
||||
return json(trans('user.player.delete.single'), 1);
|
||||
}
|
||||
|
||||
$dispatcher->dispatch('player.deleting', [$player, $user]);
|
||||
event(new PlayerWillBeDeleted($player));
|
||||
|
||||
$player->delete();
|
||||
|
||||
if (option('return_score')) {
|
||||
$user = auth()->user();
|
||||
$user->score += option('score_per_player');
|
||||
$user->save();
|
||||
}
|
||||
|
||||
$dispatcher->dispatch('player.deleted', [$player, $user]);
|
||||
event(new PlayerWasDeleted($playerName));
|
||||
|
||||
return json(trans('user.player.delete.success', ['name' => $playerName]), 0);
|
||||
@ -181,43 +187,51 @@ class PlayerController extends Controller
|
||||
return json(trans('user.player.rename.success', ['old' => $oldName, 'new' => $newName]), 0, $player->toArray());
|
||||
}
|
||||
|
||||
public function setTexture(Request $request, $pid)
|
||||
public function setTexture(Request $request, Dispatcher $dispatcher, $pid)
|
||||
{
|
||||
$player = Player::find($pid);
|
||||
foreach (['skin', 'cape'] as $type) {
|
||||
if ($tid = $request->input($type)) {
|
||||
$tid = $request->input($type);
|
||||
if ($tid) {
|
||||
$texture = Texture::find($tid);
|
||||
if (!$texture) {
|
||||
return json(trans('skinlib.non-existent'), 1);
|
||||
}
|
||||
|
||||
$dispatcher->dispatch('player.texture.updating', [$player, $texture]);
|
||||
|
||||
$field = "tid_$type";
|
||||
$player->$field = $tid;
|
||||
$player->save();
|
||||
|
||||
$dispatcher->dispatch('player.texture.updated', [$player, $texture]);
|
||||
}
|
||||
}
|
||||
|
||||
return json(trans('user.player.set.success', ['name' => $player->name]), 0, $player->toArray());
|
||||
}
|
||||
|
||||
public function clearTexture(Request $request, $pid)
|
||||
public function clearTexture(Request $request, Dispatcher $dispatcher, $pid)
|
||||
{
|
||||
$player = Player::find($pid);
|
||||
array_map(function ($type) use ($request, $player) {
|
||||
if (
|
||||
$request->has($type) ||
|
||||
($request->has('type') && in_array($type, $request->input('type')))
|
||||
) {
|
||||
$types = $request->input('type', []);
|
||||
|
||||
foreach (['skin', 'cape'] as $type) {
|
||||
if ($request->has($type) || in_array($type, $types)) {
|
||||
$dispatcher->dispatch('player.texture.resetting', [$player, $type]);
|
||||
|
||||
$field = "tid_$type";
|
||||
$player->$field = 0;
|
||||
$player->save();
|
||||
|
||||
$dispatcher->dispatch('player.texture.reset', [$player, $type]);
|
||||
}
|
||||
}, ['skin', 'cape']);
|
||||
$player->save();
|
||||
}
|
||||
|
||||
return json(trans('user.player.clear.success', ['name' => $player->name]), 0, $player->toArray());
|
||||
}
|
||||
|
||||
public function bind(Request $request)
|
||||
public function bind(Request $request, Dispatcher $dispatcher)
|
||||
{
|
||||
$name = $this->validate($request, [
|
||||
'player' => [
|
||||
@ -232,6 +246,7 @@ class PlayerController extends Controller
|
||||
event(new CheckPlayerExists($name));
|
||||
$player = Player::where('name', $name)->first();
|
||||
if (!$player) {
|
||||
$dispatcher->dispatch('player.adding', [$name, $user]);
|
||||
event(new PlayerWillBeAdded($name));
|
||||
|
||||
$player = new Player();
|
||||
@ -240,6 +255,7 @@ class PlayerController extends Controller
|
||||
$player->tid_skin = 0;
|
||||
$player->save();
|
||||
|
||||
$dispatcher->dispatch('player.added', [$player, $user]);
|
||||
event(new PlayerWasAdded($player));
|
||||
} elseif ($player->uid != $user->uid) {
|
||||
return json(trans('user.player.rename.repeated'), 1);
|
||||
|
@ -75,9 +75,18 @@ class PlayerControllerTest extends TestCase
|
||||
'code' => 7,
|
||||
'message' => trans('user.player.add.lack-score'),
|
||||
]);
|
||||
Event::assertDispatched('player.add.attempt', function ($event, $payload) use ($user) {
|
||||
$this->assertEquals('no_score', $payload[0]);
|
||||
$this->assertEquals($user->uid, $payload[1]->uid);
|
||||
|
||||
return true;
|
||||
});
|
||||
Event::assertDispatched(Events\CheckPlayerExists::class);
|
||||
Event::assertNotDispatched('player.adding');
|
||||
Event::assertNotDispatched('player.added');
|
||||
|
||||
// Allowed to use CJK characters
|
||||
Event::fake();
|
||||
option(['player_name_rule' => 'cjk']);
|
||||
$user = factory(User::class)->create();
|
||||
$score = $user->score;
|
||||
@ -87,6 +96,24 @@ class PlayerControllerTest extends TestCase
|
||||
'code' => 0,
|
||||
'message' => trans('user.player.add.success', ['name' => '角色名']),
|
||||
]);
|
||||
Event::assertDispatched('player.add.attempt', function ($event, $payload) use ($user) {
|
||||
$this->assertEquals('角色名', $payload[0]);
|
||||
$this->assertEquals($user->uid, $payload[1]->uid);
|
||||
|
||||
return true;
|
||||
});
|
||||
Event::assertDispatched('player.adding', function ($event, $payload) use ($user) {
|
||||
$this->assertEquals('角色名', $payload[0]);
|
||||
$this->assertEquals($user->uid, $payload[1]->uid);
|
||||
|
||||
return true;
|
||||
});
|
||||
Event::assertDispatched('player.added', function ($event, $payload) use ($user) {
|
||||
$this->assertEquals('角色名', $payload[0]->name);
|
||||
$this->assertEquals($user->uid, $payload[1]->uid);
|
||||
|
||||
return true;
|
||||
});
|
||||
Event::assertDispatched(Events\PlayerWillBeAdded::class);
|
||||
Event::assertDispatched(Events\PlayerWasAdded::class);
|
||||
$player = Player::where('name', '角色名')->first();
|
||||
@ -99,11 +126,14 @@ class PlayerControllerTest extends TestCase
|
||||
);
|
||||
|
||||
// Add a existed player
|
||||
Event::fake();
|
||||
$this->postJson('/user/player/add', ['name' => '角色名'])
|
||||
->assertJson([
|
||||
'code' => 6,
|
||||
'message' => trans('user.player.add.repeated'),
|
||||
]);
|
||||
Event::assertNotDispatched('player.adding');
|
||||
Event::assertNotDispatched('player.added');
|
||||
|
||||
// Single player
|
||||
option(['single_player' => true]);
|
||||
@ -127,7 +157,25 @@ class PlayerControllerTest extends TestCase
|
||||
'code' => 0,
|
||||
'message' => trans('user.player.delete.success', ['name' => $player->name]),
|
||||
]);
|
||||
Event::assertDispatched('player.delete.attempt', function ($event, $payload) use ($player, $user) {
|
||||
$this->assertEquals($player->pid, $payload[0]->pid);
|
||||
$this->assertEquals($user->uid, $payload[1]->uid);
|
||||
|
||||
return true;
|
||||
});
|
||||
Event::assertDispatched('player.deleting', function ($event, $payload) use ($player, $user) {
|
||||
$this->assertEquals($player->pid, $payload[0]->pid);
|
||||
$this->assertEquals($user->uid, $payload[1]->uid);
|
||||
|
||||
return true;
|
||||
});
|
||||
$this->assertNull(Player::find($player->pid));
|
||||
Event::assertDispatched('player.deleted', function ($event, $payload) use ($player, $user) {
|
||||
$this->assertEquals($player->pid, $payload[0]->pid);
|
||||
$this->assertEquals($user->uid, $payload[1]->uid);
|
||||
|
||||
return true;
|
||||
});
|
||||
Event::assertDispatched(Events\PlayerWillBeDeleted::class);
|
||||
Event::assertDispatched(Events\PlayerWasDeleted::class);
|
||||
$this->assertEquals(
|
||||
@ -257,14 +305,29 @@ class PlayerControllerTest extends TestCase
|
||||
]);
|
||||
|
||||
// Set for "skin" type
|
||||
Event::fake();
|
||||
$this->postJson('/user/player/set/'.$player->pid, ['skin' => $skin->tid])
|
||||
->assertJson([
|
||||
'code' => 0,
|
||||
'message' => trans('user.player.set.success', ['name' => $player->name]),
|
||||
]);
|
||||
$this->assertEquals($skin->tid, Player::find($player->pid)->tid_skin);
|
||||
Event::assertDispatched('player.texture.updating', function ($event, $payload) use ($player, $skin) {
|
||||
$this->assertEquals($player->pid, $payload[0]->pid);
|
||||
$this->assertEquals($skin->tid, $payload[1]->tid);
|
||||
|
||||
return true;
|
||||
});
|
||||
Event::assertDispatched('player.texture.updated', function ($event, $payload) use ($player, $skin) {
|
||||
$this->assertEquals($player->pid, $payload[0]->pid);
|
||||
$this->assertEquals($skin->tid, $payload[0]->tid_skin);
|
||||
$this->assertEquals($skin->tid, $payload[1]->tid);
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
// Set for "cape" type
|
||||
Event::fake();
|
||||
$this->postJson('/user/player/set/'.$player->pid, ['cape' => $cape->tid])
|
||||
->assertJson([
|
||||
'code' => 0,
|
||||
@ -297,8 +360,37 @@ class PlayerControllerTest extends TestCase
|
||||
$this->assertEquals(0, Player::find($player->pid)->tid_cape);
|
||||
Event::assertDispatched(Events\PlayerProfileUpdated::class);
|
||||
|
||||
Event::fake();
|
||||
$this->postJson('/user/player/texture/clear/'.$player->pid, ['type' => ['skin']])
|
||||
->assertJson(['code' => 0]);
|
||||
Event::assertDispatched('player.texture.resetting', function ($event, $payload) use ($player) {
|
||||
$this->assertEquals($player->pid, $payload[0]->pid);
|
||||
$this->assertEquals('skin', $payload[1]);
|
||||
|
||||
return true;
|
||||
});
|
||||
Event::assertDispatched('player.texture.reset', function ($event, $payload) use ($player) {
|
||||
$this->assertEquals($player->pid, $payload[0]->pid);
|
||||
$this->assertEquals('skin', $payload[1]);
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
Event::fake();
|
||||
$this->postJson('/user/player/texture/clear/'.$player->pid, ['type' => ['cape']])
|
||||
->assertJson(['code' => 0]);
|
||||
Event::assertDispatched('player.texture.resetting', function ($event, $payload) use ($player) {
|
||||
$this->assertEquals($player->pid, $payload[0]->pid);
|
||||
$this->assertEquals('cape', $payload[1]);
|
||||
|
||||
return true;
|
||||
});
|
||||
Event::assertDispatched('player.texture.reset', function ($event, $payload) use ($player) {
|
||||
$this->assertEquals($player->pid, $payload[0]->pid);
|
||||
$this->assertEquals('cape', $payload[1]);
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
public function testBind()
|
||||
@ -317,6 +409,18 @@ class PlayerControllerTest extends TestCase
|
||||
'message' => trans('user.player.bind.success'),
|
||||
]);
|
||||
Event::assertDispatched(Events\CheckPlayerExists::class);
|
||||
Event::assertDispatched('player.adding', function ($event, $payload) use ($user) {
|
||||
$this->assertEquals('abc', $payload[0]);
|
||||
$this->assertEquals($user->uid, $payload[1]->uid);
|
||||
|
||||
return true;
|
||||
});
|
||||
Event::assertDispatched('player.added', function ($event, $payload) use ($user) {
|
||||
$this->assertEquals('abc', $payload[0]->name);
|
||||
$this->assertEquals($user->uid, $payload[1]->uid);
|
||||
|
||||
return true;
|
||||
});
|
||||
Event::assertDispatched(Events\PlayerWillBeAdded::class);
|
||||
Event::assertDispatched(Events\PlayerWasAdded::class);
|
||||
$player = Player::where('name', 'abc')->first();
|
||||
|
Loading…
Reference in New Issue
Block a user