Вопросы

Antoxa39
Dance 80-90, mmm Nice)

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

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 ответов на этот вопрос

  • 1
Antoxa39
Dance 80-90, mmm Nice)

@glvde. [

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

 

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


Ссылка на сообщение
  • 1
Antoxa39
Dance 80-90, mmm Nice)

@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
Mishunin
Освоившийся
AddStaticVehicle(vInfo[vehicleid][vModel],0.0,0.0,2.0,0.0,vInfo[vehicleid][vColor1],vInfo[vehicleid][vColor2]);

попробуй так

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


Ссылка на сообщение
  • 0
Mishunin
Освоившийся

@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
  В 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

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

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

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

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


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

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

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


Ссылка на сообщение
  • 0
𝙡𝙖𝙨𝙩 𝙚𝙢𝙥𝙚𝙧𝙤𝙧.
Создатель WayDev

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

 

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

 

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

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


Ссылка на сообщение
  • 0
Sleash
Завсегдатый

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

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


Ссылка на сообщение
  • 0
Antoxa39
Dance 80-90, mmm Nice)

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

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


Ссылка на сообщение
  • 0
Sleash
Завсегдатый

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

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

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


Ссылка на сообщение
  • 0
Sleash
Завсегдатый

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

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

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


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

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

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

    • migghty
      От migghty
      Ищу кодера, который допилит мод под мою идею SAMP 0.3.7
    • lisicaf
      От lisicaf
      Всех приветствую и заранее спасибо за любую оказанную помощь.
      Суть: Аризона выпускает новое обновление в котором меняет CEF доната(скрин ниже), каким образом можно его скопировать и перенести к себе в мод Аризоны?