move enterable shamal code to module
This commit is contained in:
parent
692f58a1f5
commit
0ccc26dbe4
@ -60,6 +60,7 @@
|
|||||||
#include "irresistible\cnr\features\random_hits.pwn"
|
#include "irresistible\cnr\features\random_hits.pwn"
|
||||||
#include "irresistible\cnr\features\c4.pwn"
|
#include "irresistible\cnr\features\c4.pwn"
|
||||||
#include "irresistible\cnr\features\tax.pwn"
|
#include "irresistible\cnr\features\tax.pwn"
|
||||||
|
#include "irresistible\cnr\features\shamal.pwn"
|
||||||
|
|
||||||
// pool
|
// pool
|
||||||
#include "irresistible\cnr\features\pool.pwn"
|
#include "irresistible\cnr\features\pool.pwn"
|
||||||
|
118
gamemodes/irresistible/cnr/features/shamal.pwn
Normal file
118
gamemodes/irresistible/cnr/features/shamal.pwn
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
/*
|
||||||
|
* Irresistible Gaming (c) 2018
|
||||||
|
* Developed by Lorenc
|
||||||
|
* Module: cnr\features\shamal.pwn
|
||||||
|
* Purpose: feature to allow passengers into shamals
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ** Includes ** */
|
||||||
|
#include < YSI\y_hooks >
|
||||||
|
|
||||||
|
/* ** Definitions ** */
|
||||||
|
#define VW_SHAMAL 220
|
||||||
|
|
||||||
|
/* ** Macros ** */
|
||||||
|
#define IsPlayerInShamal(%0) ( GetPlayerInterior( %0 ) == VW_SHAMAL )
|
||||||
|
#define GetPlayerShamalVehicle(%0) ( GetPlayerVirtualWorld( %0 ) - VW_SHAMAL )
|
||||||
|
|
||||||
|
/* ** Hooks ** */
|
||||||
|
hook OnScriptInit( )
|
||||||
|
{
|
||||||
|
// Shamal Interior
|
||||||
|
CreateDynamicObject( 14404, 1320.00000, 2000.00000, 1201.00000, 0.00000, 0.00000, 0.00000 );
|
||||||
|
CreateDynamicObject( 1562, 1321.13000, 2000.05005, 1199.90002, 0.00000, 0.00000, 0.00000 );
|
||||||
|
CreateDynamicObject( 1562, 1321.13000, 1997.65002, 1199.90002, 0.00000, 0.00000, 180.00000 );
|
||||||
|
CreateDynamicObject( 1562, 1321.13000, 1995.34998, 1199.90002, 0.00000, 0.00000, 180.00000 );
|
||||||
|
CreateDynamicObject( 1562, 1318.87000, 1998.94995, 1199.90002, 0.00000, 0.00000, 0.00000 );
|
||||||
|
CreateDynamicObject( 1562, 1318.87000, 1996.55005, 1199.90002, 0.00000, 0.00000, 180.00000 );
|
||||||
|
CreateDynamicObject( 1562, 1318.87000, 1994.15002, 1199.90002, 0.00000, 0.00000, 180.00000 );
|
||||||
|
CreateDynamicObject( 1563, 1321.13000, 2000.39001, 1200.43994, 0.00000, 0.00000, 0.00000 );
|
||||||
|
CreateDynamicObject( 1563, 1321.13000, 1997.31006, 1200.43994, 0.00000, 0.00000, 180.00000 );
|
||||||
|
CreateDynamicObject( 1563, 1321.13000, 1995.01001, 1200.43994, 0.00000, 0.00000, 180.00000 );
|
||||||
|
CreateDynamicObject( 1563, 1318.87000, 1999.29004, 1200.43994, 0.00000, 0.00000, 0.00000 );
|
||||||
|
CreateDynamicObject( 1563, 1318.87000, 1996.20996, 1200.43994, 0.00000, 0.00000, 180.00000 );
|
||||||
|
CreateDynamicObject( 1563, 1318.87000, 1993.81006, 1200.43994, 0.00000, 0.00000, 180.00000 );
|
||||||
|
CreateDynamicObject( 14405, 1320.00000, 1999.69995, 1199.90002, 0.00000, 0.00000, 0.00000 );
|
||||||
|
|
||||||
|
// Parachute Shamal Interior
|
||||||
|
CreateDynamicPickup( 371, 2, 1318.92200, 2002.7311, 1200.250 );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
hook OnVehicleSpawn( vehicleid ) {
|
||||||
|
KillEveryoneInShamal( vehicleid );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
hook OnVehicleDeath( vehicleid, killerid ) {
|
||||||
|
KillEveryoneInShamal( vehicleid );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
hook OnPlayerEnterVehicle( playerid, vehicleid, ispassenger )
|
||||||
|
{
|
||||||
|
if ( ispassenger )
|
||||||
|
{
|
||||||
|
if ( GetVehicleModel( vehicleid ) == 519 )
|
||||||
|
{
|
||||||
|
SetPlayerPos( playerid, 1322.6577, 1992.5508, 1200.2574 );
|
||||||
|
SetPlayerVirtualWorld( playerid, vehicleid + VW_SHAMAL );
|
||||||
|
SetPlayerInterior( playerid, VW_SHAMAL );
|
||||||
|
pauseToLoad( playerid );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
hook OnPlayerKeyStateChange( playerid, newkeys, oldkeys )
|
||||||
|
{
|
||||||
|
static
|
||||||
|
Float: X, Float: Y, Float: Z, Float: Angle;
|
||||||
|
|
||||||
|
if ( PRESSED( KEY_SECONDARY_ATTACK ) )
|
||||||
|
{
|
||||||
|
// Enter Shamal Interior
|
||||||
|
if ( ! IsPlayerTied( playerid ) && IsPlayerInShamal( playerid ) )
|
||||||
|
{
|
||||||
|
if ( IsPlayerInRangeOfPoint( playerid, 10.0, 1322.6577, 1992.5508, 1200.2574 ) )
|
||||||
|
{
|
||||||
|
new
|
||||||
|
vehicleid = GetPlayerVirtualWorld( playerid ) - VW_SHAMAL;
|
||||||
|
|
||||||
|
if ( IsValidVehicle( vehicleid ) )
|
||||||
|
{
|
||||||
|
GetVehiclePos( vehicleid, X, Y, Z );
|
||||||
|
GetVehicleZAngle( vehicleid, Angle );
|
||||||
|
|
||||||
|
X += ( 3.2 * floatsin( -( Angle - 45.0 ), degrees ) );
|
||||||
|
Y += ( 3.2 * floatcos( -( Angle - 45.0 ), degrees ) );
|
||||||
|
|
||||||
|
SetPlayerInterior( playerid, 0 );
|
||||||
|
SetPlayerVirtualWorld( playerid, 0 );
|
||||||
|
SetPlayerFacingAngle( playerid, Angle );
|
||||||
|
SetPlayerPos( playerid, X, Y, Z - 1 );
|
||||||
|
|
||||||
|
pauseToLoad( playerid );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ** Functions ** */
|
||||||
|
static stock KillEveryoneInShamal( vehicleid )
|
||||||
|
{
|
||||||
|
static
|
||||||
|
Float: X, Float: Y, Float: Z;
|
||||||
|
|
||||||
|
foreach(new i : Player) {
|
||||||
|
if ( IsPlayerInShamal( i ) && ( GetPlayerVirtualWorld( i ) - VW_SHAMAL ) == vehicleid ) {
|
||||||
|
if ( IsValidVehicle( vehicleid ) ) {
|
||||||
|
GetPlayerPos( i, X, Y, Z );
|
||||||
|
CreateExplosionForPlayer( i, X, Y, Z - 0.75, 0, 10.0 );
|
||||||
|
SetPlayerHealth( i, -1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -37,7 +37,6 @@ new
|
|||||||
bool: p_Kidnapped [ MAX_PLAYERS char ],
|
bool: p_Kidnapped [ MAX_PLAYERS char ],
|
||||||
bool: p_ToggledViewPM [ MAX_PLAYERS char ],
|
bool: p_ToggledViewPM [ MAX_PLAYERS char ],
|
||||||
bool: p_ToggleCopChat [ MAX_PLAYERS char ],
|
bool: p_ToggleCopChat [ MAX_PLAYERS char ],
|
||||||
p_CheckpointEnterTick [ MAX_PLAYERS ],
|
|
||||||
bool: p_pausedToLoad [ MAX_PLAYERS char ],
|
bool: p_pausedToLoad [ MAX_PLAYERS char ],
|
||||||
bool: p_CantUseReport [ MAX_PLAYERS char ],
|
bool: p_CantUseReport [ MAX_PLAYERS char ],
|
||||||
p_pausedToLoadTimer [ MAX_PLAYERS ],
|
p_pausedToLoadTimer [ MAX_PLAYERS ],
|
||||||
|
@ -3727,22 +3727,6 @@ hook OnScriptInit( )
|
|||||||
CreateDynamicObject(11392, -2047.75781, 168.14063, 27.88281, 0.00000, 0.00000, 0.00000);
|
CreateDynamicObject(11392, -2047.75781, 168.14063, 27.88281, 0.00000, 0.00000, 0.00000);
|
||||||
CreateDynamicObject(11388, -2048.17969, 166.71875, 34.51563, 0.00000, 0.00000, 0.00000);
|
CreateDynamicObject(11388, -2048.17969, 166.71875, 34.51563, 0.00000, 0.00000, 0.00000);
|
||||||
|
|
||||||
// Shamal Interior
|
|
||||||
CreateDynamicObject(14404, 1320.00000, 2000.00000, 1201.00000, 0.00000, 0.00000, 0.00000);
|
|
||||||
CreateDynamicObject(1562, 1321.13000, 2000.05005, 1199.90002, 0.00000, 0.00000, 0.00000);
|
|
||||||
CreateDynamicObject(1562, 1321.13000, 1997.65002, 1199.90002, 0.00000, 0.00000, 180.00000);
|
|
||||||
CreateDynamicObject(1562, 1321.13000, 1995.34998, 1199.90002, 0.00000, 0.00000, 180.00000);
|
|
||||||
CreateDynamicObject(1562, 1318.87000, 1998.94995, 1199.90002, 0.00000, 0.00000, 0.00000);
|
|
||||||
CreateDynamicObject(1562, 1318.87000, 1996.55005, 1199.90002, 0.00000, 0.00000, 180.00000);
|
|
||||||
CreateDynamicObject(1562, 1318.87000, 1994.15002, 1199.90002, 0.00000, 0.00000, 180.00000);
|
|
||||||
CreateDynamicObject(1563, 1321.13000, 2000.39001, 1200.43994, 0.00000, 0.00000, 0.00000);
|
|
||||||
CreateDynamicObject(1563, 1321.13000, 1997.31006, 1200.43994, 0.00000, 0.00000, 180.00000);
|
|
||||||
CreateDynamicObject(1563, 1321.13000, 1995.01001, 1200.43994, 0.00000, 0.00000, 180.00000);
|
|
||||||
CreateDynamicObject(1563, 1318.87000, 1999.29004, 1200.43994, 0.00000, 0.00000, 0.00000);
|
|
||||||
CreateDynamicObject(1563, 1318.87000, 1996.20996, 1200.43994, 0.00000, 0.00000, 180.00000);
|
|
||||||
CreateDynamicObject(1563, 1318.87000, 1993.81006, 1200.43994, 0.00000, 0.00000, 180.00000);
|
|
||||||
CreateDynamicObject(14405, 1320.00000, 1999.69995, 1199.90002, 0.00000, 0.00000, 0.00000);
|
|
||||||
|
|
||||||
// Studio
|
// Studio
|
||||||
SetDynamicObjectMaterial( CreateDynamicObject( 18981, 2328.617187, 914.297790, 1055.000000, 0.000000, 90.000000, 0.000000 ), 0, 13694, "lahillstxd1a", "Bow_Abattoir_Floor_Clean", -1 );
|
SetDynamicObjectMaterial( CreateDynamicObject( 18981, 2328.617187, 914.297790, 1055.000000, 0.000000, 90.000000, 0.000000 ), 0, 13694, "lahillstxd1a", "Bow_Abattoir_Floor_Clean", -1 );
|
||||||
SetDynamicObjectMaterial( CreateDynamicObject( 18981, 2340.614013, 914.297790, 1055.000000, 0.000000, 0.000000, 0.000000 ), 0, 16150, "ufo_bar", "GEwhite1_64", -1 );
|
SetDynamicObjectMaterial( CreateDynamicObject( 18981, 2340.614013, 914.297790, 1055.000000, 0.000000, 0.000000, 0.000000 ), 0, 16150, "ufo_bar", "GEwhite1_64", -1 );
|
||||||
|
@ -59,7 +59,6 @@ new bool: False = false;
|
|||||||
/* ** Useful macros ** */
|
/* ** Useful macros ** */
|
||||||
#define DQCMD:%1(%2) forward discord_%1(%2); public discord_%1(%2)
|
#define DQCMD:%1(%2) forward discord_%1(%2); public discord_%1(%2)
|
||||||
#define IsPlayerRobbing(%0) IsPlayerAttachedObjectSlotUsed(%0,0)
|
#define IsPlayerRobbing(%0) IsPlayerAttachedObjectSlotUsed(%0,0)
|
||||||
#define IsPlayerInShamal(%0) (GetPlayerInterior(%0)==VW_SHAMAL)
|
|
||||||
#define hasTickcountPassed(%1,%2) ((GetTickCount()-%1)>(%2))
|
#define hasTickcountPassed(%1,%2) ((GetTickCount()-%1)>(%2))
|
||||||
#define Ach_Unlock(%0,%1) (%0 >= %1 ?("{6EF83C}"):("{FFFFFF}"))
|
#define Ach_Unlock(%0,%1) (%0 >= %1 ?("{6EF83C}"):("{FFFFFF}"))
|
||||||
#define UpdatePlayerTime(%0) SetPlayerTime(%0,floatround(g_WorldClockSeconds/60),g_WorldClockSeconds-floatround((g_WorldClockSeconds/60)*60))
|
#define UpdatePlayerTime(%0) SetPlayerTime(%0,floatround(g_WorldClockSeconds/60),g_WorldClockSeconds-floatround((g_WorldClockSeconds/60)*60))
|
||||||
@ -79,7 +78,6 @@ new bool: False = false;
|
|||||||
#define MAX_TIME_TIED 180
|
#define MAX_TIME_TIED 180
|
||||||
#define MAX_VEH_ATTACHED_OBJECTS 2
|
#define MAX_VEH_ATTACHED_OBJECTS 2
|
||||||
|
|
||||||
#define VW_SHAMAL 220
|
|
||||||
|
|
||||||
/* ** Forwards ** */
|
/* ** Forwards ** */
|
||||||
public OnPlayerDriveVehicle( playerid, vehicleid );
|
public OnPlayerDriveVehicle( playerid, vehicleid );
|
||||||
@ -141,7 +139,6 @@ public OnGameModeInit()
|
|||||||
g_AlcatrazArea = CreateDynamicRectangle( -1921.6816, 1661.7448, -2172.4653, 1876.0469 );
|
g_AlcatrazArea = CreateDynamicRectangle( -1921.6816, 1661.7448, -2172.4653, 1876.0469 );
|
||||||
|
|
||||||
/* ** Pickups ** */
|
/* ** Pickups ** */
|
||||||
CreateDynamicPickup( 371, 2, 1318.92200, 2002.7311, 1200.250 ); // Parachute @Shamal
|
|
||||||
CreateDynamicPickup( 371, 2, -1745.2754, 59.301500, 866.4556 ); // Parachute @Veloxity
|
CreateDynamicPickup( 371, 2, -1745.2754, 59.301500, 866.4556 ); // Parachute @Veloxity
|
||||||
|
|
||||||
/* ** Set everyone offline ** */
|
/* ** Set everyone offline ** */
|
||||||
@ -1530,8 +1527,6 @@ public OnPlayerDeath( playerid, killerid, reason )
|
|||||||
|
|
||||||
public OnVehicleSpawn( vehicleid )
|
public OnVehicleSpawn( vehicleid )
|
||||||
{
|
{
|
||||||
KillEveryoneInShamal( vehicleid );
|
|
||||||
|
|
||||||
if ( g_buyableVehicle{ vehicleid } == true ) {
|
if ( g_buyableVehicle{ vehicleid } == true ) {
|
||||||
RespawnBuyableVehicle( vehicleid );
|
RespawnBuyableVehicle( vehicleid );
|
||||||
}
|
}
|
||||||
@ -1540,7 +1535,6 @@ public OnVehicleSpawn( vehicleid )
|
|||||||
|
|
||||||
public OnVehicleDeath( vehicleid, killerid )
|
public OnVehicleDeath( vehicleid, killerid )
|
||||||
{
|
{
|
||||||
KillEveryoneInShamal( vehicleid );
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4135,17 +4129,6 @@ public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch( iModel )
|
|
||||||
{
|
|
||||||
case 519: // Shamal
|
|
||||||
{
|
|
||||||
SetPlayerPos( playerid, 1322.6577, 1992.5508, 1200.2574 );
|
|
||||||
SetPlayerVirtualWorld( playerid, vehicleid + VW_SHAMAL );
|
|
||||||
SetPlayerInterior( playerid, VW_SHAMAL );
|
|
||||||
pauseToLoad( playerid );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enter a wanted players vehicle?
|
// Enter a wanted players vehicle?
|
||||||
if ( driverid != INVALID_PLAYER_ID && !p_WantedLevel[ playerid ] && p_Class[ playerid ] != CLASS_POLICE )
|
if ( driverid != INVALID_PLAYER_ID && !p_WantedLevel[ playerid ] && p_Class[ playerid ] != CLASS_POLICE )
|
||||||
{
|
{
|
||||||
@ -4717,38 +4700,6 @@ public OnPlayerKeyStateChange( playerid, newkeys, oldkeys )
|
|||||||
SetCameraBehindPlayer( playerid );
|
SetCameraBehindPlayer( playerid );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( g_iTime > p_CheckpointEnterTick[ playerid ] && !p_pausedToLoad{ playerid } && !IsPlayerTied( playerid ) )
|
|
||||||
{
|
|
||||||
p_CheckpointEnterTick[ playerid ] = g_iTime + 2;
|
|
||||||
|
|
||||||
// Enter Shamal Interior
|
|
||||||
if ( IsPlayerInShamal( playerid ) )
|
|
||||||
{
|
|
||||||
if ( IsPlayerInRangeOfPoint( playerid, 10.0, 1322.6577, 1992.5508, 1200.2574 ) )
|
|
||||||
{
|
|
||||||
new
|
|
||||||
vehicleid = GetPlayerVirtualWorld( playerid ) - VW_SHAMAL
|
|
||||||
;
|
|
||||||
|
|
||||||
if ( IsValidVehicle( vehicleid ) )
|
|
||||||
{
|
|
||||||
GetVehiclePos( vehicleid, X, Y, Z );
|
|
||||||
GetVehicleZAngle( vehicleid, Angle );
|
|
||||||
|
|
||||||
X += ( 3.2 * floatsin( -( Angle - 45.0 ), degrees ) );
|
|
||||||
Y += ( 3.2 * floatcos( -( Angle - 45.0 ), degrees ) );
|
|
||||||
|
|
||||||
SetPlayerInterior( playerid, 0 );
|
|
||||||
SetPlayerVirtualWorld( playerid, 0 );
|
|
||||||
SetPlayerFacingAngle( playerid, Angle );
|
|
||||||
SetPlayerPos( playerid, X, Y, Z - 1 );
|
|
||||||
|
|
||||||
pauseToLoad( playerid );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else if ( HOLDING( KEY_AIM ) )
|
else if ( HOLDING( KEY_AIM ) )
|
||||||
@ -5009,12 +4960,12 @@ public OnDialogResponse( playerid, dialogid, response, listitem, inputtext[ ] )
|
|||||||
if ( ! response )
|
if ( ! response )
|
||||||
return ShowPlayerSpawnMenu( playerid );
|
return ShowPlayerSpawnMenu( playerid );
|
||||||
|
|
||||||
#if VIP_ALLOW_OVER_LIMIT == false
|
#if VIP_ALLOW_OVER_LIMIT == false
|
||||||
if ( ! p_VIPLevel[ playerid ] && p_OwnedHouses[ playerid ] > GetPlayerHouseSlots( playerid ) ) {
|
if ( ! p_VIPLevel[ playerid ] && p_OwnedHouses[ playerid ] > GetPlayerHouseSlots( playerid ) ) {
|
||||||
ResetSpawnLocation( playerid );
|
ResetSpawnLocation( playerid );
|
||||||
return SendError( playerid, "Please renew your V.I.P or sell this home to match your house allocated limit (/h sell)." );
|
return SendError( playerid, "Please renew your V.I.P or sell this home to match your house allocated limit (/h sell)." );
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
new x = 0;
|
new x = 0;
|
||||||
|
|
||||||
@ -6868,7 +6819,7 @@ stock IsVehicleOccupied( vehicleid, bool: include_vehicle_interior = false )
|
|||||||
if ( GetPlayerVehicleID( i ) == vehicleid )
|
if ( GetPlayerVehicleID( i ) == vehicleid )
|
||||||
return i;
|
return i;
|
||||||
|
|
||||||
if ( include_vehicle_interior && IsPlayerSpawned( i ) && ( GetPlayerMethLabVehicle( i ) == vehicleid && iModel == 508 ) || ( ( GetPlayerVirtualWorld( i ) - VW_SHAMAL ) == vehicleid && iModel == 519 ) )
|
if ( include_vehicle_interior && IsPlayerSpawned( i ) && ( GetPlayerMethLabVehicle( i ) == vehicleid && iModel == 508 ) || ( GetPlayerShamalVehicle( i ) == vehicleid && iModel == 519 ) )
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
@ -7033,22 +6984,6 @@ stock CensoreString( query[ ], characters = 5 )
|
|||||||
return szString;
|
return szString;
|
||||||
}
|
}
|
||||||
|
|
||||||
stock KillEveryoneInShamal( vehicleid )
|
|
||||||
{
|
|
||||||
static
|
|
||||||
Float: X, Float: Y, Float: Z;
|
|
||||||
|
|
||||||
foreach(new i : Player) {
|
|
||||||
if ( IsPlayerInShamal( i ) && ( GetPlayerVirtualWorld( i ) - VW_SHAMAL ) == vehicleid ) {
|
|
||||||
if ( IsValidVehicle( vehicleid ) ) {
|
|
||||||
GetPlayerPos( i, X, Y, Z );
|
|
||||||
CreateExplosionForPlayer( i, X, Y, Z - 0.75, 0, 10.0 );
|
|
||||||
SetPlayerHealth( i, -1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
stock CreateExplosionEx( Float: X, Float: Y, Float: Z, type, Float: radius, world, interior, issuerid = INVALID_PLAYER_ID )
|
stock CreateExplosionEx( Float: X, Float: Y, Float: Z, type, Float: radius, world, interior, issuerid = INVALID_PLAYER_ID )
|
||||||
{
|
{
|
||||||
foreach(new i : Player) {
|
foreach(new i : Player) {
|
||||||
|
Loading…
Reference in New Issue
Block a user