/lock command bug.
#1

Bug with command /(un)lock.

Bug: when I lock vehicle and re-connect to server it's still locked and neither I or other players can jump in the car.
What I need is that when player disconnects from the server his locked car becomes unlock.

I read that function needs to be re-apply under "OnVehicleStreamIn", but I don't understand what exactly.

Under "#include <a_samp>"

Код:
new playersvehicle[MAX_PLAYERS], locked[MAX_VEHICLES char], one[MAX_PLAYERS];
Under OnPlayerDisconnect:

Код:
one[playerid] = 0;
playersvehicle[playerid] = -1;
locked[playersvehicle[playerid]] = 0;
Command /lock:

Код:
CMD:lock(playerid,params[])
{
	if(UserStats[playerid][Logged] == false) return SendClientMessage(playerid, COLOR_RED, "Must be logged in!");
	if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You must be in vehicle!");
	if(locked[GetPlayerVehicleID(playerid)] == 1) return SendClientMessage(playerid, COLOR_RED, "This vehicle is already locked!");
	if(one[playerid] == 1) return SendClientMessage(playerid, COLOR_RED, "You already have one locked vehicle, use /getcar and /unlock!");
	if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_RED, "You must be driver to use this command!");
	locked[GetPlayerVehicleID(playerid)] = 1;
	one[playerid] = 1;
	playersvehicle[playerid] = GetPlayerVehicleID(playerid);
	SendClientMessage(playerid, COLOR_GREEN, "^ Locked!");
        return 1;
}
Command: /unlock:

Код:
CMD:unlock(playerid,params[])
{
	if(UserStats[playerid][Logged] == false) return SendClientMessage(playerid, COLOR_RED, "You must be logged in!");
	if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You must be in vehicle");
	if(aizslegts[GetPlayerVehicleID(playerid)] == 0) return SendClientMessage(playerid, COLOR_RED, "This vehicle is already unlocked!");
	if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_RED, "You must be driver to use this command!");
	locked[GetPlayerVehicleID(playerid)] = 0;
	one[playerid] = 0;
	playersvehicle[playerid] = -1;
	SendClientMessage(playerid, COLOR_GREEN, "^ Unlocked!");
	return 1;
}
Good day.
Reply
#2

Actually you just setting variables and not Locking/Unlocking? you do that in other part? show it
Reply
#3

reset the var in onplayerdisconnect callback.
Reply
#4

Quote:
Originally Posted by GrInDzO
Посмотреть сообщение
Under OnPlayerDisconnect:
Код:
one[playerid] = 0;
playersvehicle[playerid] = -1;
locked[playersvehicle[playerid]] = 0;
He did
Reply
#5

First of all, having char requires the index to be with {vehicleid} instead of [vehicleid].

I don't really get how "one" player-array is useful in this case but checking if there is a vehicle stored and if there is, if it is locked, you can easily unlock it.

By the way, it is important to note that you reset playersvehicle to -1 and then use it in the array which results to a run time error 4 for accessing negative index (-1).

Код:
// OnPlayerDisconnect:
if (playersvehicle[playerid] != -1) // if there is a vehicle stored
{
    if (locked{playersvehicle[playerid]} == 1) // and it's locked | notice how { } are used for char-arrays
    {
        locked{playersvehicle[playerid]} = 0; // it is now unlocked for whoever try to enter it, assuming you only need the variable to check in OnPlayerEnterVehicle/OnPlayerStateChange
    }
    playersvehicle[playerid] = -1;
}
Код:
// command /lock
if(locked{GetPlayerVehicleID(playerid)} == 1) return SendClientMessage(playerid, COLOR_RED, "This vehicle is already locked!");

...

locked{GetPlayerVehicleID(playerid)} = 1;
Another note: just check directly if the player is driver, there is really no point for having both IsPlayerInAnyVehicle and driver check.

Код:
// command /unlock
if(locked{GetPlayerVehicleID(playerid)} == 0) return SendClientMessage(playerid, COLOR_RED, "This vehicle is already unlocked!");

...

locked{GetPlayerVehicleID(playerid)} = 0;
Same apply here for the drive state. I guess you have translated the name of the variables for us because of "aizslegts".
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)