Megírtam egyszerûbben, átláthatóbban(legalábbis szerintem), fizetéssel.
#include a_samp
#include zcmd
#include sscanf
#include foreach
#define rendor 1
#define mentos 2
#define tuzolto 3
new Munka[MAX_PLAYERS];
forward fizetes(playerid);
public OnPlayerConnect(playerid)
{
SetTimerEx(\"fizetes\", 20*60000, true, \"i\", playerid);
return 1;
}
CMD:rendor(playerid)
{
new string[128], nev[MAX_PLAYER_NAME];
format(string, sizeof(string), \"%s rendõr lett!\", nev);
Munka[playerid] = rendor;
SendClientMessageToAll(-1, string);
return 1;
}
CMD:mentos(playerid)
{
new string[128], nev[MAX_PLAYER_NAME];
format(string, sizeof(string), \"%s mentõs lett!\", nev);
Munka[playerid] = mentos;
SendClientMessageToAll(-1, string);
return 1;
}
CMD:tuzoltos(playerid)
{
new string[128], nev[MAX_PLAYER_NAME];
format(string, sizeof(string), \"%s tûzoltós lett!\", nev);
Munka[playerid] = tuzolto;
SendClientMessageToAll(-1, string);
return 1;
}
CMD:felmond(playerid)
{
new string[128], nev[MAX_PLAYER_NAME];
format(string, sizeof(string), \"%s felmondott!\", nev);
Munka[playerid] = 0;
SendClientMessageToAll(-1, string);
return 1;
}
CMD:munkahelp(playerid)
{
SendClientMessage(playerid, -1, \"/rendor /mentos /tuzoltos | Felmondás: /felmond\");
return 1;
}
CMD:radio(playerid, params[])
{
new string[128], nev[MAX_PLAYER_NAME], szoveg[128];
if(sscanf(params, \"s[128]\", szoveg)) return SendClientMessage(playerid, -1, \"Használat: /radio [szöveg]\");
GetPlayerName(playerid, nev, sizeof(nev));
if(Munka[playerid] == rendor)
{
format(string, sizeof(string), \"Rendõr, %s mondja: %s\", nev, szoveg);
foreach(Player, i)
{
if(Munka == rendor) return SendClientMessage(i, -1, string);
}
}
if(Munka[playerid] == mentos)
{
format(string, sizeof(string), \"Mentõs, %s mondja: %s\", nev, szoveg);
foreach(Player, i)
{
if(Munka == mentos) return SendClientMessage(i, -1, string);
}
}
if(Munka[playerid] == tuzolto)
{
format(string, sizeof(string), \"Tûzoltós, %s mondja: %s\", nev, szoveg);
foreach(Player, i)
{
if(Munka == tuzolto) return SendClientMessage(i, -1, string);
}
}
if(Munka[playerid] == 0) return SendClientMessage(playerid, -1, \"Nincs munkád! Ha szeretnél /munkahelp!\");
return 1;
}
public fizetes(playerid)
{
if(Munka[playerid] == 0) return SendClientMessage(playerid, -1, \"Ha dolgozni szeretnél nézd meg a munkákat. /munkahelp\");
GivePlayerMoney(playerid, 20000);
SendClientMessage(playerid, -1, \"Megkaptad a fizetésedet! $20000\");
return 1;
}
Kimaradt a legfontosabb, hogy amikor munka közben, meghal a rendõr, akkor halál után a rendõrállomásra rakná?
Rendõrállomás koordinátái?
2318.6741,2450.1377,10.8203
public OnPlayerSpawn(playerid)
{
if(Munka[playerid] == rendor) SetPlayerPos(playerid, 2318.6741,2450.1377,10.8203); // Rendõr spawn
return 1;
}
Azt hogyan lehet megoldani, hogy amikor kilép a munkából, akkor ne a \"munka\" skin legyen rajta, hanem az ami a munkába lépés elõtt volt?
(remélem érted a kérdést)
#include a_samp
#include zcmd
#include sscanf
#include foreach
#define rendor 1
#define mentos 2
#define tuzolto 3
new Munka[MAX_PLAYERS];
new Simaskin[MAX_PLAYERS];
forward fizetes(playerid);
public OnPlayerConnect(playerid)
{
SetTimerEx(\"fizetes\", 20*60000, true, \"i\", playerid);
return 1;
}
CMD:rendor(playerid)
{
new string[128], nev[MAX_PLAYER_NAME];
Simaskin[playerid] = GetPlayerSkin(playerid);
format(string, sizeof(string), \"%s rendõr lett!\", nev);
Munka[playerid] = rendor;
SendClientMessageToAll(-1, string);
SetPlayerSkin(playerid, 0); // Munkaskin
return 1;
}
CMD:mentos(playerid)
{
if(Munka[playerid] > 0) return SendClientMessage(playerid, -1, \"Már dolgozol, elõbb mondj fel!\");
new string[128], nev[MAX_PLAYER_NAME];
Simaskin[playerid] = GetPlayerSkin(playerid);
format(string, sizeof(string), \"%s mentõs lett!\", nev);
Munka[playerid] = mentos;
SendClientMessageToAll(-1, string);
SetPlayerSkin(playerid, 0); // Munkaskin
return 1;
}
CMD:tuzoltos(playerid)
{
if(Munka[playerid] > 0) return SendClientMessage(playerid, -1, \"Már dolgozol, elõbb mondj fel!\");
new string[128], nev[MAX_PLAYER_NAME];
Simaskin[playerid] = GetPlayerSkin(playerid);
format(string, sizeof(string), \"%s tûzoltós lett!\", nev);
Munka[playerid] = tuzolto;
SendClientMessageToAll(-1, string);
SetPlayerSkin(playerid, 0); // Munkaskin
return 1;
}
CMD:felmond(playerid)
{
if(Munka[playerid] > 0) return SendClientMessage(playerid, -1, \"Már dolgozol, elõbb mondj fel!\");
new string[128], nev[MAX_PLAYER_NAME];
Simaskin[playerid] = GetPlayerSkin(playerid);
format(string, sizeof(string), \"%s felmondott!\", nev);
Munka[playerid] = 0;
SendClientMessageToAll(-1, string);
SetPlayerSkin(playerid, Simaskin[playerid]); // Alap skin
return 1;
}
CMD:munkahelp(playerid)
{
SendClientMessage(playerid, -1, \"/rendor /mentos /tuzoltos | Felmondás: /felmond\");
return 1;
}
CMD:radio(playerid, params[])
{
new string[128], nev[MAX_PLAYER_NAME], szoveg[128];
if(sscanf(params, \"s[128]\", szoveg)) return SendClientMessage(playerid, -1, \"Használat: /radio [szöveg]\");
GetPlayerName(playerid, nev, sizeof(nev));
if(Munka[playerid] == rendor)
{
format(string, sizeof(string), \"Rendõr, %s mondja: %s\", nev, szoveg);
foreach(Player, i)
{
if(Munka == rendor) return SendClientMessage(i, -1, string);
}
}
if(Munka[playerid] == mentos)
{
format(string, sizeof(string), \"Mentõs, %s mondja: %s\", nev, szoveg);
foreach(Player, i)
{
if(Munka == mentos) return SendClientMessage(i, -1, string);
}
}
if(Munka[playerid] == tuzolto)
{
format(string, sizeof(string), \"Tûzoltós, %s mondja: %s\", nev, szoveg);
foreach(Player, i)
{
if(Munka == tuzolto) return SendClientMessage(i, -1, string);
}
}
if(Munka[playerid] == 0) return SendClientMessage(playerid, -1, \"Nincs munkád! Ha szeretnél /munkahelp!\");
return 1;
}
public fizetes(playerid)
{
if(Munka[playerid] == 0) return SendClientMessage(playerid, -1, \"Ha dolgozni szeretnél nézd meg a munkákat. /munkahelp\");
GivePlayerMoney(playerid, 20000);
SendClientMessage(playerid, -1, \"Megkaptad a fizetésedet! $20000\");
return 1;
}
public OnPlayerSpawn(playerid)
{
if(Munka[playerid] == rendor) SetPlayerPos(playerid, 2318.6741,2450.1377,10.8203); // Rendõr spawn
return 1;
}
Minden rendben megy rajta, csak az a gond, hogy halál után nem rak a rendõrálláshoz.
Az lehet, hogy a gamemod miatt van ez? (átalakított lvdm-et használok)
Az meg lehet, hogy túl hamar fut le a SetPlayerPos. Tehát még a játékos lespawnolása elõtt lefut = nem ér semmit.
És ezt hogyan lehetne kijavítani?
Háát, próbáld meg így.
forward munkabarakas(playerid);
public OnPlayerSpawn(playerid)
{
if(Munka[playerid] == rendor) SetTimerEx(\"munkabarakas\", 2000, false, \"i\", playerid);
return 1;
}
public munkabarakas(playerid)
{
SetPlayerPos(playerid, 2318.6741,2450.1377,10.8203); // Rendõr spawn
return 1;
}
Most már jó.
Már csak azt kéne megoldani, hogy ha mentõs egy a játékos közelében van tudja annak az életét tölteni.
new n[24],pos[3];
CMD:eletad(playerid,params[])
{
new str[128];
foreach(Player,i) {
GetPlayerPos(i,pos[1],pos[2],pos[3]);
GetPlayerName(i,n,24);
if(IsPlayerInRangeOfPoint(playerid,pos[1],pos[2],pos[3],2.0)) {
format(str,128,\"Biztosan fel akarod tölteni %s[%d] életét?\",n,i);
ShowPlayerDialog(playerid,1163,DIALOG_STYLE_MSGBOX,\"\",str,\"Feltölt!\",\"Mégse\");
return 1;
}
new Timer[MAX_PLAYERS];
public timeer(playerid);
public OnDialogResponse(playerid,dialogid,response,listitem,inputtext[])
{
if(dialogid == 1163)
{ foreach(Player,i) { if(IsPlayerInRangeOfPoint(playerid,pos[1],pos[2],pos[3],2.0)) {
if(response) return Timer[playerid] = SetTimerEx(\"timeer\",500,true,\"d\",i);
}}}
return 1;
}
public timeer(playerid);
{
SetPlayerHealth(playerid,GetPlayerHealth(playerid) + 2);
if(GetPlayerHealth(playerid) > 100) return KillTimer(Timer), SetPlayerHealth(playerid,100);
return 1;
}
// lehet hogy rossz, rögtönzött meg nem is tudom most ellenõrizni..
Van benne pár hiba:
-a munkachat-nél alapból ha beírom /radio valamilyen szöveg kiírja, hogy /radio [szöveg], nem gond kijavítottam, és utána csak egy szót ír be pl:. /radio egy ketto, akkor már a \"ketto\" szót nem írja ki.
Röviden a hiba az, hogy egy szónál müködik a chat de több szónál már nem.
-a nevet rosszul kéri le, ki vállalt munkát pl:. \"(nemírja ki az id-t) rendõr lett!\"