PDA

Просмотр полной версии : [Вопрос] Проблема с переменными car taxi.



DiFix
30.11.2014, 20:57
Нужна помощь, ибо я сегодня подустал уже)
при инициализации мода создаются кары такси

new string[50],Float:p = -1752.6564;
for(a=1;a<3;a++) { //=============== Машины такси у автовокзала. 9 шт
TaxiId[a] = CreateVehicle(420,1152.0154,p,13.0713,270.5028,6,6,400);
p+=4.0;
format(string, sizeof(string), "---%d---",TaxiId[a]);
SCM_ALL(C_RED,string);
}
format(string, sizeof(string),"LOADING: CARS [taxi] .......... %d",a-1);
print(string);
Выдает в чат

---1---
---2---
Все правильно, созданы два кара с айди 1,2

идем дальше

функция stock IsTaxiCar(vehicleid) проверка что игрок сел в машину такси


stock IsTaxiCar(vehicleid)
{
for(new i=1; i<MAX_TAXI; i++)
{

new string[50];
format(string, sizeof(string), "---%d---%d---",vehicleid, TaxiId[i]);
SCM_ALL(C_RED,string);

if(vehicleid == TaxiId[i])
return 1;
}
return 0;
}

выдает в чат

---2---3---
---2---4---
2 это ид кара в который сел, а 3 и 4 берет с переменной TaxiId[i]

Но почему 3 и 4 ??? если при инициализации были созданы 1 и 2

DiFix
01.12.2014, 08:58
У кого какие соображения?

Daniel_Cortez
01.12.2014, 15:05
for(a=1;a<3;a++)
В Pawn нумерация ячеек массива начинается с 0. У вас же заполнение идёт с 1-й ячейки, а 0-я так и не используется.
Это вам не Pascal, где можно задать нумерацию с 1.



for(a=1;a<3;a++)
В цикле происходит заполнение массива TaxiId. А потому цикл должен выполняться от 0 до sizeof(TaxiId)-1.
В итоге получаем цикл:

for(new i=0; i<sizeof(TaxiId); i++)


В общем, могу посоветовать только одно: научитесь работать с массивами.

DiFix
01.12.2014, 16:47
интересная весчь получается..
исправил цикл в OnGameModeInit на это

new a,string[50],Float:p = -1752.6564;
for(a=0;a<sizeof(TaxiId);a++) { //=============== Машины такси у автовокзала. 9 шт
TaxiId[a] = CreateVehicle(420,1152.0154,p,13.0713,270.5028,6,6,400);
p+=4.0;
format(string, sizeof(string), "---%d---",TaxiId[a]);
//SCM_ALL(C_RED,string);
print(string);
}
IsTaxiCar(0);


и в стоке IsTaxiCar

for(new i=0; i<sizeof(TaxiId); i++)
{

new string[50];
format(string, sizeof(string), "---%d---%d---",vehicleid, TaxiId[i]);
//SCM_ALL(C_RED,string);
print(string);
if(vehicleid == TaxiId[i])
return 1;
}
return 0;


за место SCM_ALL поставил print

запускаю серв и вижу правильную работу циклов по массиву.

---1---
---2---
---0---1---
---0---2---


Возвращаю все обратно на SCM_ALL.
запускаю мод, выполняю команду /fare которая активирует IsTaxiCar и в итоге в чате вижу следующее


---2---1---
---2---3---


вообщем я в небольшом тупике

Daniel_Cortez
01.12.2014, 16:51
Где-то удаляете машины или создаёте их заново? Если да, то записывайте в массив новый ID.

DiFix
01.12.2014, 16:59
:mosking:вот черт моя не внимательность))
я дальше начал создавать машины скорой, и переменную оставил TaxiId[], и кары скорой записывались сюда же.
Проблема решена. Спасибо за ответы.