Sziasztok megint scripteltem a fórum számára hogy tanuljak a hibáimból hátha ejtek de tuti ejtettem csak nem sikerült 100%-ig tesztelnem mert egyedül teszteltem nem volt teszt társam úgyhogy lehet van benne hiba de át nézegettem nem észleltem hibát vagy csak figyelmetlen voltam
Ez egy taxi rendszer nem nagy durranás ezt csak úgy irtam ezt persze át fogják írni ahogy õk szeretnék pickup,dialog stb... ez engem már nem érdekel én csak meg írtam az alapját hát akkor itt is a kód:
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#include <dini>
#define COLOR_RED 0xff0000AA
new CPStatus[MAX_PLAYERS];
enum TaxiCars
{
taxi1,
taxi2
};
new Taxi[TaxiCars];
public OnFilterScriptInit()
{
Taxi[taxi1] = CreateVehicle(420,-209.7638,2608.5227,62.4824,359.4272,6,1,600000);
Taxi[taxi2] = CreateVehicle(420,-213.1385,2608.4824,62.4899,0.2146,6,1,600000);
return 0;
}
new szFile[ 40 + 1 ];
public OnPlayerConnect( playerid )
{
CPStatus[playerid] = 0;
format( szFile, sizeof( szFile ), \"Taxi/%s.ini\", szName( playerid ) );
if( dini_Exists( szFile ) )
{
SetPVarInt( playerid, \"Taxi\", dini_Int( szFile, \"Taxi\" ) );
}
else
{
SetPVarInt( playerid, \"Taxi\", 0 );
dini_Create( szFile );
}
return 1;
}
public OnPlayerDisconnect( playerid, reason )
{
format( szFile, sizeof( szFile ), \"Taxi/%s.ini\", szName(playerid));
dini_IntSet( szFile, \"Taxi\", GetPVarInt( playerid, \"Taxi\"));
return 1;
}
stock szName( playerid )
{
static s_szName[ MAX_PLAYER_NAME + 1 ];
GetPlayerName( playerid, s_szName, MAX_PLAYER_NAME );
return s_szName;
}
CMD:dolgozni(playerid,params[])
{
if( GetPVarInt( playerid, \"Taxi\" ) == 1)
{
new pName[MAX_PLAYER_NAME];
new string[250];
GetPlayerName(playerid, pName, sizeof(pName));
format(string, sizeof(string), \"%s taxi szolgálatba állt\", pName);
SendClientMessage(playerid,COLOR_RED, string);
}
else
{
SendClientMessage(playerid,COLOR_RED,\"Hogy akarsz taxi szolgálatba állni ha nem vagy taxis?\");
}
return 1;
}
CMD:taximunka(playerid,params[])
{
if( GetPVarInt( playerid, \"Taxi\" ) == 1) return SendClientMessage(playerid,COLOR_RED,\"Te már taxis vagy\");
SetPVarInt(playerid,\"Taxi\",1);
SendClientMessage(playerid,COLOR_RED,\"Te mostantól taxisként dolgozol kilépéshez felmond\");
return 1;
}
CMD:felmond(playerid,params[])
{
if( GetPVarInt( playerid, \"Taxi\" ) == 1)
{
SetPVarInt(playerid,\"Taxi\",0);
SendClientMessage(playerid,COLOR_RED,\"Mostmár nem dolgozol taxisként\");
}
else
{
SendClientMessage(playerid,COLOR_RED,\"Eddig sem voltál taxis\");
}
return 1;
}
CMD:taxihiv(playerid,params[])
{
if( GetPVarInt( playerid, \"Taxi\" ) == 1)
{
new pName[MAX_PLAYER_NAME];
new string[46];
GetPlayerName(playerid, pName, sizeof(pName));
format(string, sizeof(string), \"%s taxit hívott.\", pName);
SendClientMessageToAll(COLOR_RED, string);
SetPVarInt(playerid,\"Taxihív\",1);
}
return 1;
}
CMD:elfogadtaxi(playerid,params[])
{
if( GetPVarInt( playerid, \"Taxi\" ) == 1)
{
if( GetPVarInt( playerid, \"Taxihív\" ) == 1)
{
new Float:X1,Float:Y1,Float:Z1;
new giveplayerid;
if(sscanf(params, \"u\", giveplayerid)) return SendClientMessage(playerid, COLOR_RED, \"Használat: /elfogadtaxi [Játékos]\");
if(giveplayerid == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_RED, \"Érvénytelen Játékos ID\");
GetPlayerPos(giveplayerid, X1, Y1, Z1);
SetPlayerCheckpoint(playerid, X1, Y1, Z1, 5);
CPStatus[playerid] = 1;
SetPVarInt(playerid,\"Taxihív\",0);
}
else
{
SendClientMessage(playerid,COLOR_RED,\"A játékos nem hívott taxit\");
}
}
else
{
SendClientMessage(playerid,COLOR_RED,\"Nem vagy taxis\");
}
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER)
{
new CarCheck = GetPlayerVehicleID(playerid);
if(CarCheck == Taxi[taxi1] || CarCheck == Taxi[taxi2])
{
if( GetPVarInt( playerid, \"Taxi\" ) == 1)
{
GameTextForPlayer(playerid, \"~g~Elkezdtel dolgozni!\", 3000, 3);
}
else
{
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid,-1,\"Nem dolgozol taxisként\");
}
}
}
return 0;
}
public OnPlayerEnterCheckpoint(playerid)
{
switch(CPStatus[playerid])
{
case 1:
{
SendClientMessage(playerid,COLOR_RED,\"Kimentél az utashoz ezért kaptál 2000Ft-t\");
DisablePlayerCheckpoint(playerid);
GivePlayerMoney(playerid,2000);
}
}
return 1;
}
Újítás:
Ha a játékos nem hív taxit akkor nem tudsz hozzá ki menni és pénzt is ad már.
Javitvás:
Az volt a probléma hogy ha 1 volt a rankja 1 re álította na ezt javítottam
Tetszik, igényes munka látom szereted rendezni :D Felhasználom adtál egy jó ötletett :D És én is ilyet munkát írtam dinivel de már nincs meg :D
Szerintem nem is nézted át rendesen a kódot..
Taxi[taxi1] = CreateVehicle(420,-209.7638,2608.5227,62.4824,359.4272,6,1,600000);
Taxi[taxi1] = CreateVehicle(420,-213.1385,2608.4824,62.4899,0.2146,6,1,600000);
Helyett, talán:
Taxi[taxi1] = CreateVehicle(420,-209.7638,2608.5227,62.4824,359.4272,6,1,600000);
Taxi[taxi2] = CreateVehicle(420,-213.1385,2608.4824,62.4899,0.2146,6,1,600000);
Ez meg esik a CTRL + C és CTRL + V -s mûveleteknél.
Taxi[taxi1] = CreateVehicle(420,-209.7638,2608.5227,62.4824,359.4272,6,1,600000);
Taxi[taxi1] = CreateVehicle(420,-213.1385,2608.4824,62.4899,0.2146,6,1,600000);
Taxi[taxi1] = CreateVehicle(420,-209.7638,2608.5227,62.4824,359.4272,6,1,600000);
Taxi[taxi2] = CreateVehicle(420,-213.1385,2608.4824,62.4899,0.2146,6,1,600000);
Illetve, sokkal szebben is ki lehetett volna dolgozni, nem jó az ha kezdõ így tanulja meg.
UP: EZ az átkozott nem rakta bele a színeket, taxi1,taxi1 helyett taxi1,taxi2 esetleg, ha már enumerátorban így lett beleírva.
Taxi[taxi1] = CreateVehicle(420,-209.7638,2608.5227,62.4824,359.4272,6,1,600000);
Taxi[taxi1] = CreateVehicle(420,-213.1385,2608.4824,62.4899,0.2146,6,1,600000);
Taxi[taxi1] = CreateVehicle(420,-209.7638,2608.5227,62.4824,359.4272,6,1,600000);
Taxi[taxi2] = CreateVehicle(420,-213.1385,2608.4824,62.4899,0.2146,6,1,600000);
Illetve, sokkal szebben is ki lehetett volna dolgozni, nem jó az ha kezdõ így tanulja meg.
UP: EZ az átkozott nem rakta bele a színeket, taxi1,taxi1 helyett taxi1,taxi2 esetleg, ha már enumerátorban így lett beleírva.
én 7 dologra hívtam fel a figyelmét, PM-ben továbbítottam neki, remélhetõleg felrakja hamarosan a javított verziót :)
írtál PM-ben ezért leírom az észrevételeimet ahogy kérted :D
enum TaxiCars
{
taxi1,
taxi2
};
new Taxi[TaxiCars];
az enum még mindig nem indokolt számomra :)
new szFile[ 40 + 1 ];
ezt még mindig lokális változónak raknám...
new string[250];
GetPlayerName(playerid, pName, sizeof(pName));
format(string, sizeof(string), \"%s taxi szolgálatba állt\", pName);
max szöveg hossz 23+24=47 szóval a 250 cella még mindig ~5x annyi mint amire szükség van :)
switch(CPStatus[playerid])
{
case 1:
{
SendClientMessage(playerid,COLOR_RED,\"Kimentél az utashoz ezért kaptál 2000Ft-t\");
DisablePlayerCheckpoint(playerid);
GivePlayerMoney(playerid,2000);
}
}
felesleges a switch ha csak 1 case van :)
ennyi erõvel itt is kevés a 7 extra cella :D
new string[46];
GetPlayerName(playerid, pName, sizeof(pName));
format(string, sizeof(string), \"%s taxit hívott.\", pName);
am itt felesleges az enum :) de ha nem tetszik a szám index akkor alkalmazhatod így is:
#define TAXI1 0
#define TAXI2 1
new Taxi[2];
Taxi[TAXI1];
Taxi[TAXI2];