Вопросы

не работает такая штука,вообщем я сделал кмд которая проверяет ник игрока в бд в таблице с машинами,если найден столбец с таким ником,то спавним его тачку но:

CMD:fix(playerid,vehicleid)
{
    new query[120];
    format(query,sizeof(query),"SELECT * FROM `user_veh` WHERE `owner` = '%s'",Player[playerid][nick]);
    mysql_function_query(mysql,query,true,"check","ii",playerid,vehicleid);
    SendClientMessage(playerid, -1"true");
}
forward check(playerid,vehicleid);
public check(playerid,vehicleid)
{
    new rows,fields;
    cache_get_data(rows,fields);
    if(rows)
    {
        SendClientMessage(playerid,-1,"ssssqwe1254");
        AddStaticVehicle(vInfo[vehicleid][vModel],vInfo[vehicleid][x],vInfo[vehicleid][y],vInfo[vehicleid][z],0.0,vInfo[vehicleid][vColor1],vInfo[vehicleid][vColor2]);
    }
    else print("тест");
}
public OnGameModeInit()
{
    loadveh();
    return 1;
}
stock loadveh()
{
    mysql_query(mysql,"SELECT * FROM `user_veh`");
    new f = cache_get_row_count(mysql);
    for(new i; i < f; i++)
    {
        vInfo[i][vID] = cache_get_field_content_int(0,"vID",mysql);
        vInfo[i][vModel] = cache_get_field_content_int(0"vModel", mysql);
        vInfo[i][owner] = cache_get_field_content(0,"owner", Player[i][nick], mysql);
        vInfo[i][x] = cache_get_field_content_float(0,"x",mysql);
        vInfo[i][y] = cache_get_field_content_float(0,"y",mysql);
        vInfo[i][z] = cache_get_field_content_float(0,"z",mysql);
        vInfo[i][vColor2] = cache_get_field_content_int(0,"vColor1",mysql);
        vInfo[i][vColor2] = cache_get_field_content_int(0,"vColor2",mysql);
    }
}
public OnGameModeExit()
{
    mysql_close(mysql);
    clear(playerid);
    return 1;
}
stock clear()
{   
    new f = cache_get_row_count(mysql);
    for(new i; i < f; i++)
    {
        vInfo[i][vID] = 0;
        vInfo[i][vModel] = 0;
        vInfo[i][owner] = EOS;
        vInfo[i][x] = 0.0;
        vInfo[i][y] = 0.0;
        vInfo[i][z] = 0.0;
        vInfo[i][vColor2] = 0;
        vInfo[i][vColor2] = 0;
    }
}

если я пишу AddStaticVehicle(vInfo[vehicleid][vModel],vInfo[vehicleid][x],vInfo[vehicleid][y],vInfo[vehicleid][z],0.0,vInfo[vehicleid][vColor1],vInfo[vehicleid][vColor2]);

 

То машину не спавнит, а если AddStaticVehicle(любой ид модели, 0.0,0.0,2.0,0.0,3,0); то спавнит

Поделиться сообщением


Ссылка на сообщение

27 ответов на этот вопрос

  • 0
AddStaticVehicle(vInfo[vehicleid][vModel],0.0,0.0,2.0,0.0,vInfo[vehicleid][vColor1],vInfo[vehicleid][vColor2]);

попробуй так

Поделиться сообщением


Ссылка на сообщение
  • 0

@Mishunin пытался еще раньше, не выходит

Поделиться сообщением


Ссылка на сообщение
  • 0

@Antoxa39 ты создаешь машину, или спавнишь ее?

Поделиться сообщением


Ссылка на сообщение
  • 0

@Mishunin AddStaticVehicle создает машину и спавнит ее

Поделиться сообщением


Ссылка на сообщение
  • 0

@Antoxa39 ошибаешься, AddStaticVehicle - Создает.

вставь это:

SetVehicleToRespawn(vInfo[vehicleid][vModel]);

вместо этого:

AddStaticVehicle(vInfo[vehicleid][vModel],vInfo[vehicleid][x],vInfo[vehicleid][y],vInfo[vehicleid][z],0.0,vInfo[vehicleid][vColor1],vInfo[vehicleid][vColor2]);

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@Mishunin а как он коорд сделает нужные мне?

Поделиться сообщением


Ссылка на сообщение
  • 0
  В 3/8/2022 в 21:01, Antoxa39 сказал:

CMD:fix(playerid,vehicleid)

Читать далее...  

здесь точно принимается корректный vehicleid? Там вроде params[] должен быть. Что-то типа этого попробуйте: 

CMD:fix(playerid, params[])
{
    new vehicleid;
    if (sscanf(params, "i", vehicleid)) return SendClientMessage(playerid, -1"USAGE: /fix [vehicleid]");
    /*продолжение команды из старт поста*/
}

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@DEST вот так? https://imgur.com/a/CbLlCzN

@Mishunin vModel - это ид модели, 400-611

Поделиться сообщением


Ссылка на сообщение
  • 0

Да, типо того. Только попробуйте еще для отладки вывести vehid в консоль/чат@Antoxa39 

Поделиться сообщением


Ссылка на сообщение
  • 0

@DEST сделал так:https://imgur.com/a/IspIBsg .

 

 

Ни в паблике не в кмд в консоль ниче не выводится. в кмд указал 0 ид, и 1 ид машины

 

то есть /fix 0 1

Поделиться сообщением


Ссылка на сообщение
  • 0

@Antoxa39 И даже "true" в чат не выводится? 

И да, зачем еще раз нужно перезаписывать playerid? Он автоматически приходит того игрока, который ввел команду, в первом аргументе. 

Если нужно указать ID другого игрока, то нужно завести под это дело отдельную переменную, чтобы не путаться. 

Поделиться сообщением


Ссылка на сообщение
  • 0

@DEST true вывелось в чат один раз и все

@DEST  https://imgur.com/a/lTSilE4

Поделиться сообщением


Ссылка на сообщение
  • 0

@Antoxa39 а в логи сервера что вывелось? После слов "да да"?

Поделиться сообщением


Ссылка на сообщение
  • 1

@DEST вывелось

@DEST в логах есть,а в игре машины нет,

  Цитата
enum veh{
vID,
owner[24],
vModel,
vColor1,
vColor2,
Float:x,
Float:y,
Float:z
};

 

Читать далее...  

 

Поделиться сообщением


Ссылка на сообщение
  • 0

А зачем нужен параметр vehicleid в команде? Это номер личного авто игрока? Т.е. он может иметь несколько машин, и здесь выбирает порядковый номер?

Поделиться сообщением


Ссылка на сообщение
  • 0

Если найдется строка, то паблик выдаст лог в консоль. Сделал вывод координат, на которые спавнится Т/С, и не только.
Немного переписал функцию проверки.

 

  открыть спойлер

 

Отредактировано пользователем glvde.

Поделиться сообщением


Ссылка на сообщение
  • 0

new query[120];
mysql_function_query(mysql,query,true,"loadveh","");

Этот список действий должен помочь:

I. В OnGameModeInit вместо вызова стока, впишите запрос в БД через паблик:

new query[120];
mysql_function_query(mysql,query,true,"loadveh","");

II. Уберите stock с loadveh и объявите его как паблик (не забудьте про forward)

III. Уберите в loadveh следующую строчку:

mysql_query(mysql,"SELECT * FROM `user_veh`");

Ах да, лучше в loadveh сделать такой цикл:

 new rows,fields;
cache_get_data(rows,fields);
for(int i; i < rows; i++)
{
    //...
}
// P.S. не помню в объявлении должно быть < или <=, проверьте, будет ли спавниться последняя машина

 

Отредактировано пользователем Sleash`en

Поделиться сообщением


Ссылка на сообщение
  • 1

@glvde. [

  открыть спойлер

 

Поделиться сообщением


Ссылка на сообщение
  • 1

@glvde. 

@Sleash`en Все работает только так:

forward loadveh();
public loadveh()
{
    new s[2];
    cache_get_data(s[0],s[1]);
    for(new i; i < s[0]; i++)
    {
        vInfo[i][vID] = cache_get_field_content_int(0,"vID",mysql);
        vInfo[i][vModel] = cache_get_field_content_int(0"vModel", mysql);
        vInfo[i][owner] = cache_get_field_content(0,"owner", Player[i][nick], mysql);
        vInfo[i][x] = cache_get_field_content_float(0,"x",mysql);
        vInfo[i][y] = cache_get_field_content_float(0,"y",mysql);
        vInfo[i][z] = cache_get_field_content_float(0,"z",mysql);
        vInfo[i][vColor2] = cache_get_field_content_int(0,"vColor1",mysql);
        vInfo[i][vColor2] = cache_get_field_content_int(0,"vColor2",mysql);
        AddStaticVehicle(vInfo[i][vModel], vInfo[i][x], vInfo[i][y], vInfo[i][z], 0.0, vInfo[i][vColor1], vInfo[i][vColor2]);
    }
}
CMD:fx(){ 
    new query[104];
    format(query,sizeof(query),"SELECT * FROM `user_veh`");
    mysql_function_query(mysql,query,true,"loadveh","");

public OnGameModeInit()
{
    mysql = mysql_connect(host,user,bd,sqlpass);
    CheckConnectSQL();
    new query[104];
    format(query,sizeof(query),"SELECT * FROM `user_veh`");
    mysql_function_query(mysql,query,true,"loadveh","");
    return 1;
}

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@Antoxa39 Что я и говорил вам в данном вашем вопросе

Поделиться сообщением


Ссылка на сообщение
  • 0

@Sleash`en но есть баг,что если допустим в бд 2 машины, у них разные модели, допустим одна 402, другая 415 ид, и владельцы разные при включении серва спавнятся 2 машины, то только 402 ид

Поделиться сообщением


Ссылка на сообщение
  • 0

@Antoxa39 Спавн авто у вас в паблике check, но туда код приходит от команды fx/fix, а вы там sscanf не прописали

Да-да, sscanf нужен не только для проверки того, написал ли игрок данные, но и присвоевает эти данные к переменным

Поделиться сообщением


Ссылка на сообщение
  • 0

@Antoxa39 Спавн авто у вас в паблике check, но туда код приходит от команды fx/fix, а вы там sscanf не прописали

Да-да, sscanf нужен не только для проверки того, написал ли игрок данные, но и присвоевает эти данные к переменным

Поделиться сообщением


Ссылка на сообщение
  • 0

@Sleash`en я не прописывал кмд /fix,а только /fx

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • djxxx
      От djxxx
      приветствую всех.
       
      Задался таким вопросом при добавлении одной системы на DIALOG_STYLE_TABLIST_HEADERS.
       
      Суть проблемы в том, что диалог не выравнивается под нужные показатели, а просто как будто находиться по середине, в диалоге используется \t, но они особо не помогают в решении, также не ровно.
       
      а если попытаться выравнивать большим количеством \t, оно компилируется но в игре происходят вылеты
       
      Код такой:
       
      DialogAdmShop
      (
      playerid, DIALOG_EPOINTSHOP, DIALOG_STYLE_TABLIST_HEADERS,
      fmt_str,
      ""BR"номер\t"BR"наименование\t"BR"доступное действие\n"\
      "{EB4C42}#1\t{FFFFFF}Виртуальная валюта\t{888888}нажмите для взаимодействия\n"\
      "{EB4C42}#2\t{FFFFFF}Донат валюта\t{888888}нажмите для взаимодействия\n"\
      "{EB4C42}#3\t{FFFFFF}Вип статусы\t{888888}нажмите для взаимодействия\n"\
      "{EB4C42}#4\t{FFFFFF}Кейсы\t{888888}нажмите для взаимодействия\n"\
      "{EB4C42}#5\t{FFFFFF}Уникальные аксессуары\t{888888}нажмите для взаимодействия",
      "Выбрать", "Закрыть"
      );
      }
       
      сток dialogadmshop:
       
      stock DialogAdmShop(playerid, dialogid, style, title[], text[], button[], button2[])
      {
        if(style == 5)
        {
           ShowPlayerDialog(playerid, 0, DIALOG_STYLE_LIST, "...", "...", "...", ""); 
        }
        ShowPlayerDialog(playerid, dialogid, style, title, text, button, button2);
        return 1;
      }