Scripta: Moja od nule
Problem: Evo vec treca tema u vezi COS sistema, i nikako da resim bagove, a na ovom forumu jedino Blakes i C++ pomazu oko scriptanja... Problem je u tome, da kada kupim vozilo, i hocu da ga parkiram/prodam pise da nisam u svom vozilu, ovo se desava kad je vise igraca na serveru i kada razliciti igraci kupuju. Kad sam sam, i kupim vozilo, onda radi... Evo starih tema, da vidite kakve su bile komande, a sta sam izmenio, i opet nece... Pomozite mi da resim ovo molim vas, da zavrsim sa najtezim delom -.-
http://balkan-samp.com/forum/index.php?topic=86079.msg580008#msg580008
http://balkan-samp.com/forum/index.php?topic=86201.msg580873#msg580873
Code:
YCMD:kupivozilo(playerid, params[], help)
{
#pragma unused help
new vID = GetPlayerVehicleID(playerid);
new vMDL = GetVehicleModel(vID);
new vehicle = 1;
if(!IsASalesVehicle(vID)) return SCM(playerid, -1, ""CRVENA"GoMilano"BELA": Ovo vozilo nije na prodaju.");
if(PlayerInfo[playerid][pVehicle1] != 999 && PlayerInfo[playerid][pVehicle2] != 999 && PlayerInfo[playerid][pVehicle3] != 999) return SCM(playerid, -1, ""CRVENA"GoMilano"BELA": Ne mozete kupiti vise vozila.");
if(GetPlayerMoney(playerid) < GetVehiclePrice(vID)) return SCM(playerid, -1, ""CRVENA"GoMilano"BELA": Nemate dovoljno novca da bi kupili ovo vozilo.");
/*for(new i = 0 ; i < sizeof(VehicleInfo); i++)
{
if(!fexist(CarPath(i)))
vehicle = i;
break;
}*/
for(new v = 1; v < sizeof(VehicleInfo); v++)
{
if(VehicleInfo[v][vOwned] == 0)
{
vehicle = v;
break;
}
}
if(PlayerInfo[playerid][pVehicle1] == 999)
{
PlayerInfo[playerid][pVehicle1] = vMDL;
PlayerInfo[playerid][pVehicle1ControlID] = vehicle;
}
else if(PlayerInfo[playerid][pVehicle2] == 999)
{
PlayerInfo[playerid][pVehicle2] = vMDL;
PlayerInfo[playerid][pVehicle2ControlID] = vehicle;
}
else if(PlayerInfo[playerid][pVehicle3] == 999)
{
PlayerInfo[playerid][pVehicle3] = vMDL;
PlayerInfo[playerid][pVehicle3ControlID] = vehicle;
}
else { return 1;}
new model[64];
GetVehicleName(vMDL, model, sizeof(model));
VehicleInfo[vehicle][vOwned] = 1;
VehicleInfo[vehicle][vOwner] = RemoveUnderScore(playerid);
VehicleInfo[vehicle][vModel] = vMDL;
VehicleInfo[vehicle][vParkX] = 1590.3740;
VehicleInfo[vehicle][vParkY] = -1026.0565;
VehicleInfo[vehicle][vParkZ] = 30.9063;
VehicleInfo[vehicle][vParkA] = 317.1649;
VehicleInfo[vehicle][vColor1] = 1;
VehicleInfo[vehicle][vColor2] = 1;
VehicleInfo[vehicle][vLocked] = 1;
VehicleInfo[vehicle][vRegistration] = 0;
VehicleInfo[vehicle][vControlID] = vehicle;
OwnedVehicle[vehicle] = CreateVehicle(vMDL, VehicleInfo[vehicle][vParkX], VehicleInfo[vehicle][vParkY], VehicleInfo[vehicle][vParkZ], VehicleInfo[vehicle][vParkA], VehicleInfo[vehicle][vColor1], VehicleInfo[vehicle][vColor2], -1);
SCM(playerid, -1, ""CRVENA"GoMilano"BELA": Kupili ste vozilo. Idite na parking kod banke i preuzmite ga.");
GivePlayerMoney(playerid, -GetVehiclePrice(vID));
SavePlayer(playerid);
SaveVehicle(vehicle);
return 1;
}
YCMD:prodajvozilo(playerid, params[], help)
{
#pragma unused help
new slot, vID;
vID = GetPlayerVehicleID(playerid);
if(sscanf(params, "i", slot)) return SCM(playerid, -1, ""CRVENA"KORISCENJE"BELA": /prodajvozilo [slot]");
switch(slot)
{
case 1:
{
if(PlayerInfo[playerid][pVehicle1] == 999) return SCM(playerid, -1, ""CRVENA"GRESKA"BELA": Nemate vozilo na prvom slotu.");
if(!IsPlayerInAnyVehicle(playerid)) return SCM(playerid, -1, ""CRVENA"GRESKA"BELA": Niste u vozilu.");
if(VehicleInfo[vID][vControlID] != PlayerInfo[playerid][pVehicle1ControlID]) return SCM(playerid, -1, ""CRVENA"GRESKA"BELA": Niste u vasem vozilu.");
PlayerInfo[playerid][pVehicle1] = 999;
PlayerInfo[playerid][pVehicle1ControlID] = 999;
VehicleInfo[vID][vOwned] = 0;
VehicleInfo[vID][vOwner] = 0;
VehicleInfo[vID][vParkX] = 1590.3740;
VehicleInfo[vID][vParkY] = -1026.0565;
VehicleInfo[vID][vParkZ] = 23.9063;
VehicleInfo[vID][vParkA] = 317.1649;
VehicleInfo[vID][vLocked] = 0;
VehicleInfo[vID][vRegistration] = 0;
RemovePlayerFromVehicle(playerid);
DestroyVehicle(vID);
TogglePlayerControllable(playerid, 1);
SavePlayer(playerid);
}
case 2:
{
if(PlayerInfo[playerid][pVehicle2] == 999) return SCM(playerid, -1, ""CRVENA"GRESKA"BELA": Nemate vozilo na prvom slotu.");
if(!IsPlayerInAnyVehicle(playerid)) return SCM(playerid, -1, ""CRVENA"GRESKA"BELA": Niste u vozilu.");
if(VehicleInfo[vID][vControlID] != PlayerInfo[playerid][pVehicle2ControlID]) return SCM(playerid, -1, ""CRVENA"GRESKA"BELA": Niste u vasem vozilu.");
PlayerInfo[playerid][pVehicle2] = 999;
PlayerInfo[playerid][pVehicle2ControlID] = 999;
VehicleInfo[vID][vOwned] = 0;
VehicleInfo[vID][vOwner] = 0;
VehicleInfo[vID][vParkX] = 1590.3740;
VehicleInfo[vID][vParkY] = -1026.0565;
VehicleInfo[vID][vParkZ] = 23.9063;
VehicleInfo[vID][vParkA] = 317.1649;
VehicleInfo[vID][vLocked] = 0;
RemovePlayerFromVehicle(playerid);
DestroyVehicle(vID);
TogglePlayerControllable(playerid, 1);
SavePlayer(playerid);
}
case 3:
{
if(PlayerInfo[playerid][pVehicle3] == 999) return SCM(playerid, -1, ""CRVENA"GRESKA"BELA": Nemate vozilo na prvom slotu.");
if(!IsPlayerInAnyVehicle(playerid)) return SCM(playerid, -1, ""CRVENA"GRESKA"BELA": Niste u vozilu.");
if(VehicleInfo[vID][vControlID] != PlayerInfo[playerid][pVehicle3ControlID]) return SCM(playerid, -1, ""CRVENA"GRESKA"BELA": Niste u vasem vozilu.");
PlayerInfo[playerid][pVehicle3] = 999;
PlayerInfo[playerid][pVehicle3ControlID] = 999;
VehicleInfo[vID][vOwned] = 0;
VehicleInfo[vID][vOwner] = 0;
VehicleInfo[vID][vParkX] = 1590.3740;
VehicleInfo[vID][vParkY] = -1026.0565;
VehicleInfo[vID][vParkZ] = 23.9063;
VehicleInfo[vID][vParkA] = 317.1649;
VehicleInfo[vID][vLocked] = 0;
RemovePlayerFromVehicle(playerid);
DestroyVehicle(vID);
TogglePlayerControllable(playerid, 1);
SavePlayer(playerid);
}
}
SavePlayer(playerid);
return 1;
}
YCMD:parkirajvozilo(playerid, params[], help)
{
#pragma unused help
new vID, vMDL, Float:X, Float:Y, Float:Z;
vID = GetPlayerVehicleID(playerid);
vMDL = GetVehicleModel(vID);
if(PlayerInfo[playerid][pVehicle1] == 999 && PlayerInfo[playerid][pVehicle2] == 999 && PlayerInfo[playerid][pVehicle3] == 999) return SCM(playerid, -1, ""CRVENA"GRESKA"BELA": Nemate vozilo.");
if(!IsPlayerInAnyVehicle(playerid)) return SCM(playerid, -1, ""CRVENA"GRESKA"BELA": Niste u vozilu.");
if(VehicleInfo[vID][vControlID] == PlayerInfo[playerid][pVehicle1ControlID])
{
GetVehiclePos(vID, X, Y, Z);
VehicleInfo[vID][vParkX] = X;
VehicleInfo[vID][vParkY] = Y;
VehicleInfo[vID][vParkZ] = Z;
RemovePlayerFromVehicle(playerid);
DestroyVehicle(vID);
OwnedVehicle[vID] = CreateVehicle(vMDL, VehicleInfo[vID][vParkX], VehicleInfo[vID][vParkY], VehicleInfo[vID][vParkZ], VehicleInfo[vID][vParkA], VehicleInfo[vID][vColor1], VehicleInfo[vID][vColor2], -1);
TogglePlayerControllable(playerid, 1);
SCM(playerid, -1, ""NARANDZASTA"Parkirali ste vase vozilo.");
}
else if(VehicleInfo[vID][vControlID] == PlayerInfo[playerid][pVehicle2ControlID])
{
GetVehiclePos(vID, X, Y, Z);
VehicleInfo[vID][vParkX] = X;
VehicleInfo[vID][vParkY] = Y;
VehicleInfo[vID][vParkZ] = Z;
RemovePlayerFromVehicle(playerid);
DestroyVehicle(vID);
OwnedVehicle[vID] = CreateVehicle(vMDL, VehicleInfo[vID][vParkX], VehicleInfo[vID][vParkY], VehicleInfo[vID][vParkZ], VehicleInfo[vID][vParkA], VehicleInfo[vID][vColor1], VehicleInfo[vID][vColor2], -1);
TogglePlayerControllable(playerid, 1);
SCM(playerid, -1, ""NARANDZASTA"Parkirali ste vase vozilo.");
}
else if(VehicleInfo[vID][vControlID] == PlayerInfo[playerid][pVehicle3ControlID])
{
GetVehiclePos(vID, X, Y, Z);
VehicleInfo[vID][vParkX] = X;
VehicleInfo[vID][vParkY] = Y;
VehicleInfo[vID][vParkZ] = Z;
RemovePlayerFromVehicle(playerid);
DestroyVehicle(vID);
OwnedVehicle[vID] = CreateVehicle(vMDL, VehicleInfo[vID][vParkX], VehicleInfo[vID][vParkY], VehicleInfo[vID][vParkZ], VehicleInfo[vID][vParkA], VehicleInfo[vID][vColor1], VehicleInfo[vID][vColor2], -1);
TogglePlayerControllable(playerid, 1);
SCM(playerid, -1, ""NARANDZASTA"Parkirali ste vase vozilo.");
}
else return SCM(playerid, -1, ""CRVENA"GRESKA"BELA": Niste u vasem vozilu.");
return 1;
}
Bump!
Problem je u tome sto ti kupis auto sa id-om 30 i postavis varijabla vehicle1 na 30 i sada kad ti prodas uniatis auto ono taj id postavi na drugi auto isto se desava i sa park vehicle kad ga parkiras unistis ga i dodelis novi id i update mu varijablu sa novim id probaj tako ako si me razumeo.
Cek, nisam te razumeo, kako mislis? Moze primer ?
http://pastebin.com/4ge7LmYs
http://pastebin.com/hmc0rDwU
Vidis kako je na Ravensu komanda za kupovinu i za prodaju...
A ja sam COS radio po ovom tutu, samo izmenio
http://balkan-samp.com/forum/index.php?topic=82972.0
Izvinjavam se za dupli post, uspeo sam da resim ovo, ja mislim...
Koristio sam if(strcmp(sendername, VehicleInfo[vID][vOwner], true) == 0)
Sad me zanima kako bih mogao da napravim proveru da li je igrac blizu svog vozila? Kako da dobijem ID vozila ciji je vlasnik igrac ?? Ako me razumete sta hocu da kazem.
I jos ovo, kada kupim vozilo, i udjem u njega, za Vlasnik: stoji prazno, a kada restartujem server, posle toga pise vlasnik:
OnPlayerEnterVehicle:
if(IsAOwnedVehicle(vehicleid))
{
format(str, sizeof(str), ""SVETLOPLAVA"Ulazite u %s ( %d ). Vlasnik: %s", vehiclename, vehicleid, VehicleInfo[vehicleid][vOwner]);
SCM(playerid, -1, str);
}
forward IsAOwnedVehicle(vehicleid);
public IsAOwnedVehicle(vehicleid)
{
for(new i = 0; i < sizeof(OwnedVehicle); i++)
{
if(vehicleid == OwnedVehicle[i]) return 1;
}
return 0;
}
A u kupi vozilo mi stoji ovo:
OwnedVehicle[vehicle] = CreateVehicle(vMDL, VehicleInfo[vehicle][vParkX], VehicleInfo[vehicle][vParkY], VehicleInfo[vehicle][vParkZ], VehicleInfo[vehicle][vParkA], VehicleInfo[vehicle][vColor1], VehicleInfo[vehicle][vColor2], -1);
stock GetPosBehindVehicle(vehicleid, &Float:x, &Float:y, &Float:z, Float:offset=0.5)
{
new Float:vehicleSize[3], Float:vehiclePos[3];
GetVehiclePos(vehicleid, vehiclePos[0], vehiclePos[1], vehiclePos[2]);
GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_SIZE, vehicleSize[0], vehicleSize[1], vehicleSize[2]);
GetXYBehindVehicle(vehicleid, vehiclePos[0], vehiclePos[1], (vehicleSize[1]/2)+offset);
x = vehiclePos[0];
y = vehiclePos[1];
z = vehiclePos[2];
return 1;
}
onda koristis upit sa ovom proverom
ovo da vidis koji je id pod onplayerentervehicle loopas kroz sva vozila i samo saljes poruku
Aha, probacu. Nego imam problem, ne znam da li si video PM, da mi ove komande rade tek kad restartujem server, park, prodaj itd... Dok ne restartujem, ipse da nisam u svom vozilu..