PDA

Просмотр полной версии : [Вопрос] Почему цикл не останавливается?



verteich
01.05.2019, 19:21
Почему цикл не останавливается?:


CMD:spcars(playerid, params[])
{
if(PI[playerid][pAdmin] < 3)
return 1;
if(!ADuty{playerid})
return SendClientMessage(playerid, COLOR_GREY, NO_DUTY_TEXT);
extract params -> new Float:radius; else
return SendClientMessage(playerid, COLOR_RED, !"Используйте: /spcars [радиус]");
if(!(1.0 <= radius <= 100.0))
return SendClientMessage(playerid, COLOR_RED, !"Используйте: /spcars [радиус > 0 или < 100]");
new
Float:x,
Float:y,
Float:z;
for(new i = 1; i < MAX_VEHICLES; i++)
{
GetPlayerPos(playerid, x, y, z);
if(IsVehicleInRangeOfPoint(i, radius, x, y, z))
{
for(new b; b < MAX_AUTO_BAZAR; b++) {
if(autoBazarInfo[b][autoBazarCarID] == i) {
break;
}
SetVehicleToRespawn(i);
}
}
}
new
string[300];
format(string, sizeof(string), "%s[%d] Заспавнил транспорт в радиусе %.01f", PN(playerid), playerid, radius);
SendAdminsMessage(COLOR_ORANGE, string);
return 1;
}

DeimoS
01.05.2019, 19:50
Если речь о break, то оператор остановит только вложенный цикл.
Если тебе нужно остановить оба цикла и не использовать код в циклах после break, можно использовать goto

for(new i = 1; i < MAX_VEHICLES; i++)
{
GetPlayerPos(playerid, x, y, z);
if(IsVehicleInRangeOfPoint(i, radius, x, y, z))
{
for(new b; b < MAX_AUTO_BAZAR; b++) {
if(autoBazarInfo[b][autoBazarCarID] == i) {
goto __break;
}
SetVehicleToRespawn(i);
}
}
}
__break:

verteich
01.05.2019, 19:53
Если речь о break, то оператор остановит только вложенный цикл.
Если тебе нужно остановить оба цикла и не использовать код в циклах после break, можно использовать goto

for(new i = 1; i < MAX_VEHICLES; i++)
{
GetPlayerPos(playerid, x, y, z);
if(IsVehicleInRangeOfPoint(i, radius, x, y, z))
{
for(new b; b < MAX_AUTO_BAZAR; b++) {
if(autoBazarInfo[b][autoBazarCarID] == i) {
goto __break;
}
SetVehicleToRespawn(i);
}
}
}
__break:

Сейчас попробую, спасибо.

Pa4enka
01.05.2019, 19:53
new
Float:x, Float:y, Float:z,
vehicleid;

GetPlayerPos(playerid, x, y, z);

for(new i = 1; i < MAX_VEHICLES; i++) {

if(IsVehicleInRangeOfPoint(i, radius, x, y, z)) {

vehicleid = i;
break;
}
}

for(new b; b < MAX_AUTO_BAZAR; b++) {

if(autoBazarInfo[b][autoBazarCarID] != vehicleid)
continue;

SetVehicleToRespawn(i);
break;

}

verteich
01.05.2019, 19:58
Если речь о break, то оператор остановит только вложенный цикл.
Если тебе нужно остановить оба цикла и не использовать код в циклах после break, можно использовать goto

for(new i = 1; i < MAX_VEHICLES; i++)
{
GetPlayerPos(playerid, x, y, z);
if(IsVehicleInRangeOfPoint(i, radius, x, y, z))
{
for(new b; b < MAX_AUTO_BAZAR; b++) {
if(autoBazarInfo[b][autoBazarCarID] == i) {
goto __break;
}
SetVehicleToRespawn(i);
}
}
}
__break:

Зареспавнился только автомобиль, у которого autoBazarCarID равен i

- - - Добавлено - - -


new
Float:x, Float:y, Float:z,
vehicleid;

GetPlayerPos(playerid, x, y, z);

for(new i = 1; i < MAX_VEHICLES; i++) {

if(IsVehicleInRangeOfPoint(i, radius, x, y, z)) {

vehicleid = i;
break;
}
}

for(new b; b < MAX_AUTO_BAZAR; b++) {

if(autoBazarInfo[b][autoBazarCarID] != vehicleid)
continue;

SetVehicleToRespawn(i);
break;

}

символ i не обнаружен

Paradox
01.05.2019, 20:42
new Float: x, Float: y, Float: z, vehicleid;
GetPlayerPos(playerid, x, y, z);
for(new i = 1; i < MAX_VEHICLES; i++)
{
if(IsVehicleInRangeOfPoint(i, radius, x, y, z))
{
vehicleid = i;
break;
}
}

for(new i; i < MAX_AUTO_BAZAR; i++)
{
if(autoBazarInfo[i][autoBazarCarID] != vehicleid) continue;
SetVehicleToRespawn(i);
break;
}

verteich
01.05.2019, 21:20
new Float: x, Float: y, Float: z, vehicleid;
GetPlayerPos(playerid, x, y, z);
for(new i = 1; i < MAX_VEHICLES; i++)
{
if(IsVehicleInRangeOfPoint(i, radius, x, y, z))
{
vehicleid = i;
break;
}
}

for(new i; i < MAX_AUTO_BAZAR; i++)
{
if(autoBazarInfo[i][autoBazarCarID] != vehicleid) continue;
SetVehicleToRespawn(i);
break;
}


Твой вариант тот же что и Pa4enk`i, только даже хуже из за того что переменные в цикле одинаковые

DeimoS
01.05.2019, 22:02
Зареспавнился только автомобиль, у которого autoBazarCarID равен i

Эмм, ну ты сам такое условие прописал, не?
Что ты хочешь сделать вообще?

verteich
01.05.2019, 22:05
Эмм, ну ты сам такое условие прописал, не?
Что ты хочешь сделать вообще?

Чтоб если if(autoBazarInfo[i][autoBazarCarID] == i), то авто не респавнится

I'm Legend
02.05.2019, 10:22
CMD:spcars(playerid, params[])
{
if(PI[playerid][pAdmin] < 3)
return 1;

if(!ADuty{playerid})
return SendClientMessage(playerid, COLOR_GREY, NO_DUTY_TEXT);

extract params -> new Float:radius; else
return SendClientMessage(playerid, COLOR_RED, !"Используйте: /spcars [радиус]");

if(!(1.0 <= radius <= 100.0))
return SendClientMessage(playerid, COLOR_RED, !"Используйте: /spcars [радиус > 0 или < 100]");

new
Float:x,
Float:y,
Float:z;

for(new i = 1; i < MAX_VEHICLES; i++)
{
GetPlayerPos(playerid, x, y, z);
if(IsVehicleInRangeOfPoint(i, radius, x, y, z))
{
if(IsBazarVehicle(i))
continue;

SetVehicleToRespawn(i);
}
}

static const
msg_admin[] = "%s[%d] Заспавнил транспорт в радиусе %.01f";

new
string[sizeof(msg_admin) + (-2+MAX_PLAYER_NAME) + (-2+3)*2];

format(string, sizeof(string), msg_admin, PN(playerid), playerid, radius);
SendAdminsMessage(COLOR_ORANGE, string);
return 1;
}

stock IsBazarVehicle(veh_id)
{
for(new i = 0; i < MAX_AUTO_BAZAR; i++)
{
if(autoBazarInfo[i][autoBazarCarID] != veh_id)
continue;

return 1;
}
return 0;
}

verteich
02.05.2019, 11:25
CMD:spcars(playerid, params[])
{
if(PI[playerid][pAdmin] < 3)
return 1;

if(!ADuty{playerid})
return SendClientMessage(playerid, COLOR_GREY, NO_DUTY_TEXT);

extract params -> new Float:radius; else
return SendClientMessage(playerid, COLOR_RED, !"Используйте: /spcars [радиус]");

if(!(1.0 <= radius <= 100.0))
return SendClientMessage(playerid, COLOR_RED, !"Используйте: /spcars [радиус > 0 или < 100]");

new
Float:x,
Float:y,
Float:z;

for(new i = 1; i < MAX_VEHICLES; i++)
{
GetPlayerPos(playerid, x, y, z);
if(IsVehicleInRangeOfPoint(i, radius, x, y, z))
{
if(IsBazarVehicle(i))
continue;

SetVehicleToRespawn(i);
}
}

static const
msg_admin[] = "%s[%d] Заспавнил транспорт в радиусе %.01f";

new
string[sizeof(msg_admin) + (-2+MAX_PLAYER_NAME) + (-2+3)*2];

format(string, sizeof(string), msg_admin, PN(playerid), playerid, radius);
SendAdminsMessage(COLOR_ORANGE, string);
return 1;
}

stock IsBazarVehicle(veh_id)
{
for(new i = 0; i < MAX_AUTO_BAZAR; i++)
{
if(autoBazarInfo[i][autoBazarCarID] != veh_id)
continue;

return 1;
}
return 0;
}

Благодарю!!! Все работает