SA:MP - Pawno - [TUT] Povolania Viktor Tomaš Paulík | 22.08.2008
Takže veľa ľudí sa pýta, ako urobiť povolania. Ja tu pre vás mám
návod. Nieje to cez CP čo sa tiež dá, ale radím vám skôr tento spôsob,
pretože CP spôsobujú na servery lagy.
Po prvé: Nadefinujeme povolanie
new povolanie[MAX_PLAYERS];
Ďalej musíme dať do publicu OnPlayerConnect
povolanie[playerid] = 0;
Samozrejme ak máte registráciu povolanie sa uloží. Ale ak nie, vždy keď sa pripojíte znovu budete nezamestnaný...
Do publicu OnPlayerCommandText si dáme samotný príkaz na povolanie
if(strcmp("/taxikar", cmdtext, true) == 0) { -Príkaz
if(IsPlayerInSphere(playerid,205.9575,-229.6653,1.7786,5) == 1) { -IsPlayerInSphere. Veľmi dôležite. Namiesto súradníc si dajte vaše. To 5 je radius čiže dosah.
new pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, MAX_PLAYER_NAME);
format(string, sizeof(string), " %s sa stal taxikárom!!", pname);
SendClientMessageToAll(COLOR_RED, string);
printf(string);
povolanie[playerid] = 1; -nastaví povolanie 1. Pri iných povolaniach to bude 2,3,4...
SetSpawnInfo(playerid,1,71,203.9847,-236.9536,1.6733,178.2899,0,0,0,0,0,0); -Tu sa bude hráč spawnovať
SetPlayerInterior(playerid,0); -Nastaví interiér 0 čo je vonku. Interiéri budov zistíte priamo v hre príkazom /interior
SpawnPlayer(playerid); -Spawne hráča
}
return 1;
}
if(IsPlayerInSphere(playerid,205.9575,-229.6653,1.7786,5) == 1) { -IsPlayerInSphere. Veľmi dôležite. Namiesto súradníc si dajte vaše. To 5 je radius čiže dosah.
new pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, MAX_PLAYER_NAME);
format(string, sizeof(string), " %s sa stal taxikárom!!", pname);
SendClientMessageToAll(COLOR_RED, string);
printf(string);
povolanie[playerid] = 1; -nastaví povolanie 1. Pri iných povolaniach to bude 2,3,4...
SetSpawnInfo(playerid,1,71,203.9847,-236.9536,1.6733,178.2899,0,0,0,0,0,0); -Tu sa bude hráč spawnovať
SetPlayerInterior(playerid,0); -Nastaví interiér 0 čo je vonku. Interiéri budov zistíte priamo v hre príkazom /interior
SpawnPlayer(playerid); -Spawne hráča
}
return 1;
}
Ďalej si musíme nadefinovať IsPlayerInSphere takže hocikde si dajte
IsPlayerInSphere(playerid,Float:x,Float:y,Float:z,radius)
{
if(GetPlayerDistanceToPointEx(playerid,x,y,z) < radius){
return 1;
}
return 0;
}
{
if(GetPlayerDistanceToPointEx(playerid,x,y,z) < radius){
return 1;
}
return 0;
}
GetPlayerDistanceToPointEx(playerid,Float:x,Float:y,Float:z)
{
new Float:x1,Float:y1,Float:z1;
new Float:tmpdis;
GetPlayerPos(playerid,x1,y1,z1);
tmpdis = floatsqroot(floatpower(floatabs(floatsub(x,x1)),2)+floatpower(floatabs(floatsub(y,y1)),2)+floatpower
{
new Float:x1,Float:y1,Float:z1;
new Float:tmpdis;
GetPlayerPos(playerid,x1,y1,z1);
tmpdis = floatsqroot(floatpower(floatabs(floatsub(x,x1)),2)+floatpower(floatabs(floatsub(y,y1)),2)+floatpower
(floatabs(floatsub(z,z1)),2));
(tento riadok patrí k tomu hore, lenže pre šírku stránky sme ho museli oddeliť, vy si ho spojte)
return floatround(tmpdis);
}
return floatround(tmpdis);
}
Ďalej niečo nepotrebné, ale ak chcete, hodí sa to. Pickup. Takže napr takto:
new taxipickup;
Do OnGameModeInit si dajte
taxipickup = CreatePickup(1239,1,205.9575,-229.6653,1.7786);
No a naposledy do publicu OnPlayerPickUpPickup
if(pickupid == taxipickup)
{
GameTextForPlayer(playerid,"~r~Ak sa chces stat taxikarom napis ~g~/taxikar",3000,5);
}
{
GameTextForPlayer(playerid,"~r~Ak sa chces stat taxikarom napis ~g~/taxikar",3000,5);
}
Hádam to pochopíte. Ak niečo nechápete napíšte na icq 479-541-027.
By Homer