Lock the players vehicle for everyone but the player.
pawn Код:
![]() |
for(new i=0;i<MAX_PLAYERS;i++) if(IsPlayerConnected(i) && i != playerid) SetVehicleParamsForPlayer(GetPlayerVehicleID(playerid), i, 0, 1);
stock IsVehicleUpsideDown(vehicleid)
{
new Float:quat_w,Float:quat_x,Float:quat_y,Float:quat_z;
GetVehicleRotationQuat(vehicleid,quat_w,quat_x,quat_y,quat_z);
new Float:y = atan2(2*((quat_y*quat_z)+(quat_w*quat_x)),(quat_w*quat_w)-(quat_x*quat_x)-(quat_y*quat_y)+(quat_z*quat_z));
return (y > 90 || y < -90);
}
but its not very efficient to call GetPlayerVehicleID(playerid) 1000 times
you just could put the second SetVehicleParamsForPlayer outside the loop (but exactly the car is already unlocked [for himself] so its quite useless to unlock it again) and assign GetPlayerVehicleID(playerid) to a variable |
On The top of the script
#define COLOR_XFX 0x33FF00
#define ads "-Advertisement-"
#define ads_timer 200000 // should be two minutes, edit it w/e you want.
public OnGameModeInit()
{
SetTimer("ads",ads_timer,1);
return 1;
}
forward ads();
public ads()
{
new str[88];
format(str,88,"%s",ads);
SendClientMessageToAll(COLOR_XFX,str);
}
#define PlayerExecute(playerid,%2) if(%2[0] == '/') OnPlayerText(playerid,%2)
PlayerName(playerid)
{
new n[24];
GetPlayerName(playerid,n,24);
for(new i=0,j = strlen(n); i <= j;++i)
if(n[i]=='_') n[i]=' ';
return n;
}
public OnGameModeInit()
{
SetTimer("JPD",7500,true);
return 1;
}
forward JPD();
public JPD()
{
for(new i, j = MAX_PLAYERS; i < j ; ++ i)
{
if(IsPlayerConnected(i) && GetPlayerSpecialAction(i) == 2)
{
//Do your thing
}
}
return 1;
}
pawn Код:
|
stock TagDetect(playerid)
{
new string[MAX_PLAYER_NAME];
GetPlayerName(playerid, tring,MAX_PLAYER_NAME);//No Use sizeof (called function)
if(string[0] == '[' > string[0] == ']') return 1;//No Use strfind (called function)
else return 0;
}
stock RetireTag(playerid)
{
new string[MAX_PLAYER_NAME];
GetPlayerName(playerid, tring,MAX_PLAYER_NAME);//No Use sizeof (called function)
if(string[0] == '[' && string[0] == ']')
{
strdel(name, string[0] == '[', string[0] == ']' + 1);
if(string[0])
{
SetPlayerName(playerid, name);
}
}
}
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof name);
new
startpos = strfind(name, "[", true),
endpos = strfind(name, "]", true);
if(startpos != -1 && endpos != -1)
{
strdel(name, startpos, endpos + 1);
if(name[0])
{
SetPlayerName(playerid, name);
}
}
@JatoDie
Use Macro ![]() pawn Код:
|
@MenaceX:
pawn Код:
|
PlayerName(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof name);
for(new i = 0; name[0]; ++i)
if(name[i] == '_')
n[i] = ' ';
return n;
}
@Hiddos
pawn Код:
|
No Called Functions ¬¬
Use: pawn Код:
|
Final:
pawn Код:
|
Or
pawn Код:
|
With this I can't use return PlayerExecute(...); |
You're creating two variables at this loop, and one of them is defined with a constant: USELESS. for(new i = 0; i < MAX_PLAYERS; ++i) is still better. And why using IsPlayerConnected? GetPlayerSpecialAction won't return 2 when a player isn't connected, duh. And remember that you have a constant defining the special action 2, in case that SA:MP changes it. |
You got worse this function. If you both use 24, SA:MP can change the max player name. If you use strlen, you're using two loops, bacause strlen is actually a loop. If you put it in a variable, it gets worse, because you create one more variable. |
Your indentation sucks. |
I think not accurate because I just used OnPlayerText (playerid, 2%)
|
I was wrong when it comes to have a function (Ex: GetMaxPlayers..) I use 2 Variavels to not check several times..
|
@JatoDie
Use Macro ![]() pawn Код:
|
#define PlayerExecute(%0,%1) if(%1[0] == '\0') OnPlayerText(%0,%1)
@JatoDie
Use Macro ![]() pawn Код:
|
more like:
pawn Код:
|
// OnPlayerConnect SetPVarInt(playerid, "Join Time", gettime()); // OnPlayerDisconnect new time = gettime() - GetPVarInt(playerid, "Join Time"); // Now you can use "time" variable to get the players playing time in seconds
#define LoopFromTop(%1,%2) \
for(new %1=%2;%1>0;%1--) // %1 is a symbol(ex. playerid), %2 is max(ex. MAX_PLAYERS)
stock Allowance()
{
LoopFromTop(number,MAX_PLAYERS)
{
printf("%i",number); // will print 200,199,198...
}
return 1;
}
command(cvm, playerid, params[])
{
new vehicle[128];
if(sscanf(params, "s", vehicle)) SendClientMessage(playerid, 0xAA3333AA, "USAGE: /cvm <vehicle>");
else if(GetVehicleModelIDFromName(vehicle) < 400 || GetVehicleModelIDFromName(vehicle) > 611) SendClientMessage(playerid, 0xAA3333AA, "ERROR: Invalid vehicleid");
else if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) SendClientMessage(playerid, 0xAA3333AA, "ERROR: You must be in a vehicle!");
else
{
new Float: VelocityX, Float: VelocityY, Float: VelocityZ, Float: VehAngle, Float: PlayerX, Float: PlayerY, Float: PlayerZ, newveh;
GetVehicleVelocity(GetPlayerVehicleID(playerid), VelocityX, VelocityY, VelocityZ);
GetVehicleZAngle(GetPlayerVehicleID(playerid), VehAngle);
GetVehiclePos(GetPlayerVehicleID(playerid), PlayerX, PlayerY, PlayerZ);
DestroyVehicle(GetPlayerVehicleID(playerid));
newveh = CreateVehicle(GetVehicleModelIDFromName(vehicle), PlayerX, PlayerY, PlayerZ, VehAngle, -1, -1, 10);
PutPlayerInVehicle(playerid, newveh, 0);
SetVehicleVelocity(newveh, VelocityX*1.1, VelocityY*1.1, VelocityZ*1.1);
LinkVehicleToInterior(newveh, GetPlayerInterior(playerid));
SetVehicleVirtualWorld(newveh, GetPlayerVirtualWorld(playerid));
}
return 1;
}
GetVehicleModelIDFromName(vname[])
{
for(new i = 0; i < 211; i++)
{
if ( strfind(aVehicleNames[i], vname, true) != -1 )
return i + 400;
}
return -1; // replace -1 with INVALID_VEHICLE_ID
}
//replace
else if(GetVehicleModelIDFromName(vehicle) < 400 || GetVehicleModelIDFromName(vehicle) > 611) SendClientMessage(playerid, 0xAA3333AA, "ERROR: Invalid vehicleid");
//whit:
else if(GetVehicleModelIDFromName(vehicle) == INVALID_VEHICLE_ID) SendClientMessage(playerid, 0xAA3333AA, "ERROR: Invalid vehicleid");
command(cvm, playerid, params[])
{
if(GetPlayerVehicleSeat(playerid) != 0) return SendClientMessage(playerid, 0xAA3333AA, "ERROR: You must be in a vehicle!");
//------
new
vehicle[128];
if(sscanf(params, "s[128]", vehicle)) return SendClientMessage(playerid, 0xAA3333AA, "USAGE: /cvm <vehicle>");
//------
new
Get_Vehicle_Model_ID = GetVehicleModelIDFromName(vehicle);
if(Get_Vehicle_Model_ID == INVALID_VEHICLE_ID) SendClientMessage(playerid, 0xAA3333AA, "ERROR: Invalid vehicleid");
else
{
new
Float: VelocityX,
Float: VelocityY,
Float: VelocityZ,
Float: VehAngle,
Float: PlayerX,
Float: PlayerY,
Float: PlayerZ,
newveh,
Get_VehicleID = GetPlayerVehicleID(playerid);
GetVehicleVelocity(Get_VehicleID, VelocityX, VelocityY, VelocityZ);
GetVehicleZAngle(Get_VehicleID, VehAngle);
GetVehiclePos(Get_VehicleID, PlayerX, PlayerY, PlayerZ);
DestroyVehicle(Get_VehicleID);
newveh = CreateVehicle(Get_Vehicle_Model_ID, PlayerX, PlayerY, PlayerZ, VehAngle, -1, -1, 10);
PutPlayerInVehicle(playerid, newveh, 0);
SetVehicleVelocity(newveh, VelocityX*1.1, VelocityY*1.1, VelocityZ*1.1);
LinkVehicleToInterior(newveh, GetPlayerInterior(playerid));
SetVehicleVirtualWorld(newveh, GetPlayerVirtualWorld(playerid));
}
return 1;
}
COMMAND:me(playerid, params[])
{
new id;
if(sscanf(params,"u", id))return SendClientMessage(playerid, 0xFF0000AA, "Usage: /me [message]");
{
new str[128];
new mename = GetPlayerName(playerid, str, sizeof(str));
format(str, sizeof(str), "%s %s.",mename,params);
SendClientMessageToAll(0xFFFFFFFF, str);
}
return 1;
}
Here is a simple /me command with zcmd. The reason i put it here, is because i had hell with it and finally got it to work.
pawn Code:
|
CMD:me(playerid, params[])
{
if(isnull(params)) return SendClientMessage(playerid, 0xFFFFFFFF, "Usage: /me [action]");
else if((strlen(params) + 24) > 127) return SendClientMessage(playerid, 0xFFFFFFFF, "The action has to be between 0 and 123 characters long!");
new
name[24],
string[128];
GetPlayerName(playerid, name, 24);
format(string, sizeof(string), "%s %s", name, params);
SendClientMessageToAll(0xFFFFFFFF, string);
return 1;
}