Seniau veikė, dabar pradėjo nebeveikt ir nesuprantu kame bėda gali būt, stock'o nekeičiau, nieko nekeičiau.
new
vehicleid = GetNearestVehicle(playerid),
Float:x,
Float:y,
Float:z;
mVehicleId[playerid] = vehicleid;
masina[vehicleid][vehTunable] = true;
GetVehiclePos(vehicleid, x, y, z);
if(IsPlayerInRangeOfPoint(playerid,5.0, x, y, z))
{
printf("working 1");
if(IsVehicleSeatOccupied(vehicleid, 0) == 1)
{
printf("working 2");
mVehicleId[playerid] = INVALID_VEHICLE_ID;
SendError(playerid, "transporto priemonėje sėdi vairuotojas !");
return 1;
}
}
else{
printf("working 3");
SendWarn(playerid, "jokios transporto priemonės šalia nėra !"); // WORRRRKS
return 1;
}
printf("working 4");
switch(mType[playerid]){
.....................................
stock GetNearestVehicle(playerid)
{
new
Float:fX,
Float:fY,
Float:fZ,
Float:fSX,
Float:fSY,
Float:fSZ,
Float:fRadius;
for (new i = 0; i < MAX_VEHICLES; i ++)
{
if (!IsValidVehicle(i) || !IsVehicleStreamedIn(i, playerid))
{
continue;
}
else
{
GetVehiclePos(i, fX, fY, fZ);
GetVehicleModelInfo(GetVehicleModel(i), VEHICLE_MODEL_INFO_SIZE, fSX, fSY, fSZ);
fRadius = floatsqroot((fSX + fSX) + (fSY + fSY));
if (IsPlayerInRangeOfPoint(playerid, fRadius, fX, fY, fZ) && GetPlayerInterior(playerid) == GetVehicleInterior(i) && GetPlayerVirtualWorld(playerid) == GetVehicleVirtualWorld(i))
{
return i;
}
}
}
return INVALID_VEHICLE_ID;
}
[22:32:46] [debug] Run time error 4: "Array index out of bounds"
[22:32:46] [debug] Accessing element at index 65535 past array upper bound 1999
[22:32:46] [debug] AMX backtrace:
[22:32:46] [debug] #0 000eb234 in ?? () from test.amx
[22:32:46] [debug] #1 00006e34 in public OnPlayerEnterCheckpoint () from test.amx
Norėdamas rašyti pranešimą privalai prisijungti arba užsiregistruoti!
0
Bebras prieš 9 metus
Faktas tas kad problema jog GetNearestVehicle gražina INVALID_VEHICLE_ID.
fRadius = floatsqroot((fSX + fSX) + (fSY + fSY));
Man ši eilutė kelią nepasitikėjimą. Tarkim kad mašinos plotis 2, o ilgis 16m. Pagal tavo formulę gaunam:
šaknis((2+2) + (16 + 16)) = šaknis(36) = 6
Taigi tokiu atveju tikrintum ar žaidėjas yra nemažesniu kaip 6m atstumu nuo transporto priemonės, ar tai tikrai yra tai ką nori padaryti?
0
Funkis prieš 9 metus
Noriu apskritai išgauti pačia arčiausia esančia nuo žaidėjo, ir paskui juk darau tikrinimą ar žaidėjas stovi per 5 metrus nuo mašinos kokios nors.
1
Bebras prieš 9 metus
Tai jeigu tau reikia tiesiog artimiausios, užteks ir tokios elementarios funkcijos:
stock GetPlayerNearestVehicle(playerid, Float:max_distance = -1.0)
{
new Float:x, Float:y, Float:z, closest = INVALID_VEHICLE_ID;
GetPlayerPos(playerid, x, y, z);
for(new i = 0; i < MAX_VEHICLES; i++)
{
if(!IsValidVehicle(i))
continue;
new Float:distance = GetVehicleDistanceFromPoint(i, x, y, z);
if(max_distance == -1.0 || distance <= max_distance)
{
closest = i;
max_distance = distance;
}
}
return closest;
}