Sziasztok!
Másfél napja szenvedek egy goto paranccsal, aminek az egyik része nem működik. Már próbáltam elöltesztelős, hátultesztelős ciklussal sőt még végig is irogattam if-ekkel de sehogy sem akart működni.
Az lenne a lényege hogy ha gotozunk valakihez és a személy járműben van akkor dobjon be a kocsiba ha van üres seat. Nem tudom mitől de csak a 0-ás (vezető) seatre képes bedobni, ezért úgy tippelem, hgy a ciklussal van valami gond. Az összes függvény egyesével kiíratva tökéletesen működik.
Ha tudtok valami megoldást segítsetek, fontos lenne, és kezd eléggé felb***ni :3
Itt a kód részlet:
if(IsPlayerInAnyVehicle(id)){
new kocsiid = GetPlayerVehicleID(id),MaxSzemely = GetMaxSeats(kocsiid), istaken=0, i=0;
do{
if(IsSeatTaken(kocsiid, i))
{
istaken=1;
}
if(IsSeatTaken(kocsiid, i)==0)
{
PutPlayerInVehicle(playerid, kocsiid, i);
break;
}
i++;
}
while(i<MaxSzemely);
if(istaken==1)
{
SendClientMessage(playerid, COLOR_WARNING, \"(( Nem volt hely a kocsiban, ezért mellé teleportáltál! ))\");
SetPlayerPos(playerid, Float:x+5, Float:y, Float:z);
SetPlayerFacingAngle(playerid, Float:Angle);
SetPlayerVirtualWorld(playerid, vw);
SetPlayerInterior(playerid, ii);
}
Uzenet(playerid, -1, \"Hozzá teleportáltál: %s! \", SpacedName(Neved(id)));
Uzenet(id, -1, \"%s %s hozzád teleportált!\", adminszint(playerid), SpacedName(Neved(playerid)));
}
else {
Uzenet(playerid, -1, \"Hozzá teleportáltál: %s! \", SpacedName(Neved(id)));
Uzenet(id, -1, \"%s %s hozzád teleportált!\", adminszint(playerid), SpacedName(Neved(playerid)));
SetPlayerPos(playerid, Float:x+5, Float:y, Float:z);
SetPlayerFacingAngle(playerid, Float:Angle);
SetPlayerVirtualWorld(playerid, vw);
SetPlayerInterior(playerid, ii);
}
Eléggé szarul, ocsmányul néz ki a kód, meg 1-2 megoldás benne, de mint mondtam már mindent próbáltam amit tudtam és utána megpróbáltam a legalapabb dolgokkal is, aztán azokból született pár hülyeség. Ezt nézzétek el :)
Előre is köszönöm a segítséget!
if(IsPlayerInAnyVehicle(id))
{
new vehicleid=GetPlayerVehicleID(id),
maxseats=GetMaxSeats(vehicleid),
bool:isfull=true;
for(new seat=0; seat <= maxseats; seat++)
{
if(!IsSeatTaken(vehicleid,seat)) continue;
PutPlayerInVehicle(id,vehicleid,seat);
isfull=false;
break;
}
if(isfull)
{
SendClientMessage(playerid, COLOR_WARNING, \"(( Nem volt hely a kocsiban, ezért mellé teleportáltál! ))\");
// ...
}
else
{
Uzenet(playerid, -1, \"Hozzá teleportáltál: %s! \", SpacedName(Neved(id)));
// ...
}
}
Talán?
E: A hiba oka lehet az is hogy a GetMaxSeats nem vehicleid, hanem modelid alapján működik, így ilyenkor lehet hamis értéket kapsz és a ciklus erre nem válaszol.
new vehicleid=GetPlayerVehicleID(id),
maxseats=GetMaxSeats(GetVehicleModel(vehicleid)),
bool:isfull=true;
if(IsPlayerInAnyVehicle(kihez))
{
new UlesCheck = GetMaxSeats(GetPlayerVehicleID(kihez));
new bool:ules[ulesCheck];
for(new = p; p < MAX_PLAYERS;p++)
{
if(GetPlayerVehicleID(kihez) == GetPLayerVehicleID(p))
{
for(new x = 0; x < UlesCheck;x++)
{
if(IsSeatTaken(GetPlayerVehicleID(p), x))
ules
}
}
}
for(new x = 0; x < UlesCheck;x++)
{
if(ules
{
PutPlayerInVehicle(playerid, GetPlayerVehicleID(kihez), x);
Uzenet(playerid, -1, \"Hozzá teleportáltál a járműbe: %s! \", SpacedName(Neved(kihez)));
Uzenet(kihez, -1, \"%s %s hozzád teleportált a járműbe!\", adminszint(playerid), SpacedName(Neved(playerid)));
break;
}
else
{
SendClientMessage(playerid, COLOR_WARNING, \"(( Nem volt hely a kocsiban, ezért mellé teleportáltál! ))\");
SetPlayerPos(playerid, Float:x+5, Float:y, Float:z);
SetPlayerFacingAngle(playerid, Float:Angle);
SetPlayerVirtualWorld(playerid, vw);
SetPlayerInterior(playerid, ii);
Uzenet(playerid, -1, \"Hozzá teleportáltál: %s! \", SpacedName(Neved(kihez)));
Uzenet(kihez, -1, \"%s %s hozzád teleportált!\", adminszint(playerid), SpacedName(Neved(playerid)));
}
}
}
else
{
Uzenet(playerid, -1, \"Hozzá teleportáltál: %s! \", SpacedName(Neved(kihez)));
Uzenet(kihez, -1, \"%s %s hozzád teleportált!\", adminszint(playerid), SpacedName(Neved(playerid)));
SetPlayerPos(playerid, Float:x+5, Float:y, Float:z);
SetPlayerFacingAngle(playerid, Float:Angle);
SetPlayerVirtualWorld(playerid, vw);
SetPlayerInterior(playerid, ii);
}
Nem a legszebb megoldás de szerintem működik.