Вопросы

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

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

@DEST вывелось

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

Цитата

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

 

 

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


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

@glvde. [

Спойлер

18:28:46] Number of vehicle models: 0
[18:29:21] [connection] 25.49.48.2:56574 requests connection cookie.
[18:29:22] [connection] incoming connection: 25.49.48.2:56574 id: 0
[18:29:22] [join] Derk has joined the server (0:25.49.48.2)
[18:29:57] [Pawn.CMD] HandleCommand: AMX error occurred in public pc_cmd_fix: Array index out of bounds
[18:29:59] [Pawn.CMD] HandleCommand: AMX error occurred in public OnPlayerCommandText: Array index out of bounds
[18:29:59] [Pawn.CMD] HandleCommand: AMX error occurred in public OnPlayerCommandText: Array index out of bounds

 

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


Ссылка на сообщение
  • 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
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

@Mishunin не не помогло

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


Ссылка на сообщение
  • 0
1 час назад, 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 а в логи сервера что вывелось? После слов "да да"?

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


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

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

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


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

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

 

Спойлер

CMD:fix(playerid, params[]) {
    new query[120];
    if(sscanf(params, "ud", params[0], params[1])) 
        return SendClientMessage(playerid, -1"Используйте: /fix [playerid] [vehid]");

    format(query, sizeof(query), "SELECT * FROM `user_veh` WHERE `owner` = '%s'", Player[params[0]][nick]);
    mysql_function_query(mysql, query, true"check""ii", params[0], params[1]);
    SendClientMessage(params[0], -1"true");
    return 1;
}

forward check(playerid, vehicleid);
public check(playerid, vehicleid) {
    new rows, fields;
    cache_get_data(rows, fields);

    if(rows) {
        for(new i; i < rows; i++) {
            vInfo[i][vModel] = cache_get_field_content_int(0"vModel", mysql);
            if(vInfo[i][vModel] != vehicleid) {
                vInfo[i][vModel] = 0;
                continue;
            }

            vInfo[i][vID] = cache_get_field_content_int(0"vID", 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]);
            printf("[public check]: vModel: %d; x: %2.f; y: %2.f; z: %2.f; vColor1: %d; vColor2: %d;", vInfo[i][vModel], vInfo[i][x], vInfo[i][y], vInfo[i][z], vInfo[i][vColor1], vInfo[i][vColor2]);
        }
    }
    else return print("[public check]: not found;");
    return 1;
}

 

 

Отредактировано пользователем 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

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


Ссылка на сообщение
  • 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 пользователей онлайн

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

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

    • Mister Odin
      От Mister Odin
       
      new
       g_teleport_list[39][E_TELEPORT_LIST] = {  {"Спавн пгт.Батырево", 1802.3612, 2508.4824, 15.8887},  {"Спавн г.Арзамас", -113.5887, 977.7222, 12.0346},     {"Спавн г.Южный", 2744.2770, -2446.7246, 21.8988},     {"Центральный банк", 1852.020385,2040.791381,15.892713},  {"Рублёвка", -837.7783, 888.6161, 12.7232},  {"Казино", 1332.4252, 2358.7014, 17.6641},  {"Битва за контейнеры", 614.5167, 1722.3566, 12.0709},  {"Автосалон низкого класса", 2493.9616, -722.9544, 12.3315},  {"Автосалон среднего класса", 1407.7449, 455.4801, 13.1630},  {"Автосалон высокого класса", -14.0637, 2614.5664, 10.9892},   {"Мотосалон Harley Davidson", 785.720153, 750.465087, 12.000024},  {"Автошкола", 1909.174438,2227.679687,15.708162},  {"Военкомат", 1916.778564,2302.411376,15.574637},  {"Правительство области", -139.140975,593.789611,12.145712},  {"Отдел полиции №1 (ГИБДД)", 1906.805786,-2234.382812,11.257631},  {"Отдел полиции №2 (УМВД)", 2581.309326,-2416.139892,21.960090},  {"Отдел ФСБ", 1823.904663,2095.636718,15.848405},  {"Городская больница г.Арзамас", -285.797210,581.851562,12.120290},   {"СМИ", -317.708038,821.221679,13.051450},  {"Воинская часть", 1703.197265,1678.025878,15.279437},  {"Арзамасская ОПГ", 438.705322,1046.505126,12.002637},  {"Батыревская ОПГ", 1941.203857,2161.006591,15.705187},  {"Лыткаринская ОПГ", -2346.002441,75.257041,21.002962},  {"Шахта", 2381.5727, 1726.4451, -2.1506},  {"Завод", -1062.6697, 2204.1894, 38.0964},  {"Инкосация", 1864.1374, 2011.7136, 15.8546},  {"Транспортная Компания", 2362.1115, 1972.5627, 15.5530},  {"База механиков", 1840.918090,-118.025146,15.695312},  {"Курьерская служба доставки", 2764.509765,-2396.882568,21.890625},  {"Аренда автобуса(Южный)", 2771.041992,-2454.780761,21.845964},  {"Аренда автобуса(Арзамас)", -127.487670,943.652648,12.142824},   {"Аренда автобуса(Батырево)", 1798.986328,2529.591552,15.664262},  {"Гоночная трасса", -1568.7784, 1611.8305, 36.3971},  {"Дом на горе", -789.5397, -456.7479, 741.1422},  {"СТО и тюнинг-ателье", 1856.1375, -122.3266, 15.6888},  {"Аренда транспорта пгт.Батырево", 1763.641723,2255.673339,15.865348},  {"Аренда транспорта г.Арзамас", -36.923530,1360.673583,12.002090},  {"Аренда транспорта г.Южный", 1966.599975,-2603.943603,10.820312},  {"Тайный интерьер в Лыткарино", -2424.5818, 2846.3291, 40.7908} };