Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 10 из 10
  1. #1
    Аватар для verteich
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.03.2019
    Сообщений
    117
    Репутация:
    2 ±

    Удаление личной машины игрока

    Я сделал удаление машины игрока, но после удаления созданная следующая машина занимает ID удаленной и считается личной
    Код в команде:
    1. DestroyDynamic3DTextLabel(CarText[carid]);
    2. DestroyVehicleEx(OwnableCar[carid]);
    3. OWNABLECARS --;

    1. stock IsAOwnableCar(carid)
    2. {
    3. return (OwnableCar[0] <= carid <= OwnableCar[OWNABLECARS-1]);
    4. }

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Ну так а что ты хочешь с такой проверкой? Либо цикл запускай, либо переделывай код создания авто, чтоб ID авто был равен ID ячейки в массиве OwnableCar.
    То бишь:
    PHP код:
    OwnableCar[vehicleid] = CreateVehicle(...); 
    И тогда проверка будет выглядеть так:
    PHP код:
    if(OwnableCar[vehicleid] != 0// Транспорт личный 
    Только, естественно, нужно обнулять ячейку после удаления авто.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. #3
    Аватар для verteich
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.03.2019
    Сообщений
    117
    Репутация:
    2 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ну так а что ты хочешь с такой проверкой? Либо цикл запускай, либо переделывай код создания авто, чтоб ID авто был равен ID ячейки в массиве OwnableCar.
    То бишь:
    PHP код:
    OwnableCar[vehicleid] = CreateVehicle(...); 
    И тогда проверка будет выглядеть так:
    PHP код:
    if(OwnableCar[vehicleid] != 0// Транспорт личный 
    Только, естественно, нужно обнулять ячейку после удаления авто.
    А какой цикл нужен?

  4. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от verteich Посмотреть сообщение
    А какой цикл нужен?
    С перебором всего массива OwnableCar и проверкой того, равно ли значение какой-либо из ячеек ID автомобиля?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  5. #5
    Аватар для verteich
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.03.2019
    Сообщений
    117
    Репутация:
    2 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    С перебором всего массива OwnableCar и проверкой того, равно ли значение какой-либо из ячеек ID автомобиля?
    Не очень понял
    1. CMD:dellcar(playerid, params[]) {
    2. if(!PI[playerid][pFullDostup])
    3. return 1;
    4.  
    5. new vehid;
    6. if(sscanf(params, "d", vehid))
    7. return SendClientMessage(playerid, COLOR_LIGHTRED, !"[Îøèáêà] {FFFFFF}Èñïîëüçóéòå: /dellcar [carid]");
    8.  
    9. new
    10. carid = GetVehicleID(vehid);
    11. CarInfo[carid][cID] = -1;
    12. CarInfo[carid][cVirtualWorld] =
    13. CarInfo[carid][cInterior] =
    14. CarInfo[carid][cColor_1] =
    15. CarInfo[carid][cColor_2] =
    16. CarInfo[carid][cShtrafer] =
    17. CarInfo[carid][cLock] =
    18. CarInfo[carid][cShtraf] =
    19. CarInfo[carid][cKeyIN] =
    20. CarInfo[carid][cAlarmON] = 0;
    21. CarInfo[carid][cMilage] = 0;
    22. CarInfo[carid][cSell_X] = 0;
    23. CarInfo[carid][cSell_Y] = 0;
    24. CarInfo[carid][cSell_Z] = 0;
    25. CarInfo[carid][cSell_A] = 0;
    26. CarInfo[carid][cPos_X] = 0;
    27. CarInfo[carid][cPos_Y] = 0;
    28. CarInfo[carid][cPos_Z] = 0;
    29. CarInfo[carid][cPos_A] = 0;
    30. SetString(CarInfo[carid][cOwner], "The State");
    31. SetString(CarInfo[carid][cKeyer], "The State");
    32. SetString(CarInfo[carid][cNumber], "Arizona ST");
    33. new string[128];
    34. format(string, sizeof(string), "DELETE FROM `ownable` WHERE ID = %d", carid);
    35. mysql_tquery(dbHandle, string);
    36. DestroyDynamic3DTextLabel(CarText[carid]);
    37. DestroyVehicleEx(OwnableCar[carid]);
    38. OWNABLECARS --;
    39. SendClientMessage(playerid, COLOR_LIGHTRED, !"Авто удалено");
    40. return 1;
    41. }

    Если делаю CreateVehicle сыпится run time error 4 на респавн авто после его созадния
    Если после создания авто задебажить его ид в массиве, то он совпадает на сервере

  6. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    После удаления автомобиля обнуляешь соответствующую ячейку в OwnableCar. А в IsAOwnableCar делаешь цикл, в котором каждая ячейка OwnableCar будет сверяться с переданным ID авто
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  7. #7
    Аватар для verteich
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.03.2019
    Сообщений
    117
    Репутация:
    2 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    После удаления автомобиля обнуляешь соответствующую ячейку в OwnableCar. А в IsAOwnableCar делаешь цикл, в котором каждая ячейка OwnableCar будет сверяться с переданным ID авто
    так?
    1. CMD:dellcar(playerid, params[]) {
    2. if(!PI[playerid][pFullDostup])
    3. return 1;
    4.  
    5. new
    6. vehid,
    7. carid = GetVehicleID(vehid));
    8. if(sscanf(params, "d", vehid))
    9. return SendClientMessage(playerid, COLOR_LIGHTRED, !"[Ошибка] {FFFFFF}Используйте: /dellcar [carid]");
    10.  
    11. if(OwnableCar[carid] != 0) {
    12. CarInfo[carid][cID] = -1;
    13. CarInfo[carid][cVirtualWorld] =
    14. CarInfo[carid][cInterior] =
    15. CarInfo[carid][cColor_1] =
    16. CarInfo[carid][cColor_2] =
    17. CarInfo[carid][cShtrafer] =
    18. CarInfo[carid][cLock] =
    19. CarInfo[carid][cShtraf] =
    20. CarInfo[carid][cKeyIN] =
    21. CarInfo[carid][cAlarmON] = 0;
    22. CarInfo[carid][cMilage] = 0;
    23. CarInfo[carid][cSell_X] = 0;
    24. CarInfo[carid][cSell_Y] = 0;
    25. CarInfo[carid][cSell_Z] = 0;
    26. CarInfo[carid][cSell_A] = 0;
    27. CarInfo[carid][cPos_X] = 0;
    28. CarInfo[carid][cPos_Y] = 0;
    29. CarInfo[carid][cPos_Z] = 0;
    30. CarInfo[carid][cPos_A] = 0;
    31. SetString(CarInfo[carid][cOwner], "The State");
    32. SetString(CarInfo[carid][cKeyer], "The State");
    33. SetString(CarInfo[carid][cNumber], "Arizona ST");
    34. new string[128];
    35. format(string, sizeof(string), "DELETE FROM `ownable` WHERE `ID` = '%i'", carid);
    36. mysql_tquery(dbHandle, string);
    37. DestroyDynamic3DTextLabel(CarText[carid]);
    38. DestroyVehicleEx(OwnableCar[carid]);
    39. OwnableCar[carid] = 0;
    40. OWNABLECARS --;
    41. SendClientMessage(playerid, COLOR_LIGHTRED, !"[Информация] {FFFFFF}Личная машина удалена!");
    42. }
    43. else {
    44. SendClientMessage(playerid, COLOR_LIGHTRED, !"[Ошибка] {FFFFFF}Такой машины не существует!");
    45. }
    46. return 1;
    47. }

    1. stock IsAOwnableCar(carid)
    2. {
    3. return (OwnableCar[0] <= carid <= OwnableCar[carid]);
    4. }

  8. #8
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Нет =\

    Дай код создания личных авто, в котором ты записываешь новое значение для OwnableCar
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  9. #9
    Аватар для verteich
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.03.2019
    Сообщений
    117
    Репутация:
    2 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Нет =\

    Дай код создания личных авто, в котором ты записываешь новое значение для OwnableCar
    1. stock LoadedOwnable() {
    2. for(new i; i < OWNABLECARS; i++) {
    3. OwnableCar[i] = J_AddStaticVehicleEx(
    4. CarInfo[i][cModel],
    5. CarInfo[i][cPos_X],
    6. CarInfo[i][cPos_Y],
    7. CarInfo[i][cPos_Z],
    8. CarInfo[i][cPos_A],
    9. CarInfo[i][cColor_1],
    10. CarInfo[i][cColor_2],
    11. 60000,
    12. CarInfo[i][cInterior],
    13. CarInfo[i][cVirtualWorld]
    14. );
    15. CarText[i] = CreateDynamic3DTextLabel("-",-1,0,0,0.5,5.0,INVALID_PLAYER_ID,OwnableCar[i]);
    16. if(!GetString(CarInfo[i][cOwner],"The State"))
    17. {
    18. if(!CarInfo[i][cParkedInGarage] || !CarInfo[i][cParkedInParking]) SetVehicleVirtualWorld(OwnableCar[i], 1);
    19. else SetVehicleVirtualWorld(OwnableCar[i], CarInfo[i][cVirtualWorld]);
    20. }
    21. if(CarInfo[i][cSupreme] == 1) SupremeInstall(i);
    22. if(CarInfo[i][cTwinTurbo] == 1) TwinTurboInstall(i);
    23. BikesInstall(i);
    24. }
    25. for(new i; i < OWNABLECARS; i++) {
    26. if(OwnableCar[i] != 0) {
    27. SetVehicleToRespawn(OwnableCar[i]);
    28. }
    29. }
    30. return 1;
    31. }

    проверял, ид авто на сервере равен массиву OwnableCar

  10. #10
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Это он такой только после старта сервера. Если ты удалишь личное авто, создашь новое и потом создашь личное - ничего совпадать уже не будет.
    У тебя вообще сейчас крайне криво и не надёжно построена система. Если ты собираешься подобным образом работать с массивом:
    1. DestroyVehicleEx(OwnableCar[carid]);// Хотя это странный код. Зачем обращаться к массиву по ID авто, чтоб узнать этот самый ID авто?

    То тебе нужно строить код загрузки как-то так:
    1. vehicleid = J_AddStaticVehicleEx(
    2. CarInfo[i][cModel],
    3. CarInfo[i][cPos_X],
    4. CarInfo[i][cPos_Y],
    5. CarInfo[i][cPos_Z],
    6. CarInfo[i][cPos_A],
    7. CarInfo[i][cColor_1],
    8. CarInfo[i][cColor_2],
    9. 60000,
    10. CarInfo[i][cInterior],
    11. CarInfo[i][cVirtualWorld]
    12. );
    13. OwnableCar[vehicleid] = 1;

    В этом случае ты действительно можешь работать с массивом согласно ID авто.

    Собственно, как я говорил выше, можно накостылить цикл:
    1. stock IsAOwnableCar(vehicleid)
    2. {
    3. for(new i; i < OWNABLECARS; i++)
    4. {
    5. if(OwnableCar[i] == vehicleid)
    6. return 1;
    7. }
    8. return 0;
    9. }

    Который будет работать, если переменную OwnableCar обнулять при удалении, но я бы советовал просто сесть и переписать систему в нормальный вид, сделав так, чтоб данные в массиве хранились согласно ID авто, а не абы как.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •