Вопросы

Приветствую, помогите пожалуйста исправить ошибку. В игре набираю номер допустим /sms 444444 Text, Хотя игрок в игре но при попытке отправить сообщение пишет что игрок с этим номером нет на сервере.

Screenshot_2.thumb.png.e3014953eb0936a33d7522c977e3850e.png 

 

Спойлер

CMD:sms(playerid,params[])
    {
        if(!pData[playerid][pPhone]) return SendClientMessage(playerid,CGRAY,"Ó Âàñ íåò òåëåôîíà. Âû ìîæåòå êóïèòü åãî â 24/7");
        if(!pTemp[playerid][pTPhone]) return SendClientMessage(playerid,CGRAY,"Ñíà÷àëà íóæíî âêëþ÷èòü òåëåôîí");
        if(pData[playerid][pPhoneMoney] < 5return SendClientMessage(playerid, CGRAY, "Îøèáêà: Íà ñ÷åòó íåäîñòàòî÷íî ñðåäñòâ");
        if(pData[playerid][pMut]) return SendClientMessage(playerid,CGRAY,"Ó âàñ áàí ÷àòà. Èñïîëüçóéòå /mutetime ÷òîáû óçíàòü âðåìÿ áàíà.");
        if(pData[playerid][pJail]) return SendClientMessage(playerid, CGRAY, "Îøèáêà: Âû â òþðüìå.");
        new stroch = strlen(params[0]);
        if(stroch < 3return SendClientMessage(playerid,CGRAY,"Îøèáêà: Íîìåð ââåä¸í íåâåðíî");
        new number = params[0];
        if(sscanf(params, "ds[128]", params[0], params[1])) return SendClientMessage(playerid,CGRAY,"/sms [íîìåð òåëåôîíà] [òåêñò]");
        
        else if(!number) return SendClientMessage(playerid,CGRAY,"Èãðîêà ñ ýòèì íîìåðîì íåò íà ñåðâåðå");
        new id = -1;
        for(new i;i<MAX_PLAYERS;i++)
        {
            if(!IsPlayerConnected(i)) continue;
            if(pData[i][pPhone] == number) {id = i; break;}
        }
        if(id == -1return SendClientMessage(playerid,CGRAY,"Èãðîêà ñ ýòèì íîìåðîì íåò íà ñåðâåðå");
        if(id == playerid) return SendClientMessage(playerid,CGRAY,"Îøèáêà: âû ââåëè ñâîé íîìåð");
        if(!pTemp[id][pTPhone]) return SendClientMessage(playerid,CGRAY,"Ó èãðîêà âûêëþ÷åí òåëåôîí");

        new mes[256];
        format(mes,sizeof(mes),"{FFAF00}SMS: {FFF700}%s {FFAF00}| {FFF700}Ïîëó÷àòåëü: %s (òåë. %d)",params[1],pData[id][pNickname],pData[id][pPhone]);
        SendClientMessage(playerid,0xFFF700FF,mes);
        format(mes,sizeof(mes),"{FFAF00}SMS: {FFF700}%s {FFAF00}| {FFF700}Îòïðàâèòåëü: %s (òåë. %d)",params[1],pData[playerid][pNickname],pData[playerid][pPhone]);
        SendClientMessage(id,0xFFF700FF,mes);
        SetPlayerChatBubble(playerid, "Îòïðàâèë ñìñ-ñîîáùåíèå", CPINK, 10.03000);
        pData[playerid][pPhoneMoney] -= 5;
        UpdatePlayerData(playerid,"phonemoney",pData[playerid][pPhoneMoney]);
        PlayerPlaySound(playerid,1054,0.0,0.0,0.0);
        PlayerPlaySound(id,1054,0.0,0.0,0.0);
        foreach(new i:Player)
        {
            if(admears[i] == 0continue;
            format(mes,sizeof(mes),"{FFAF00}ASMS: {FFF700}%s {FFAF00}| {FFF700}Îòïðàâèòåëü:%s(%d) Ïîëó÷àòåëü:%s(%d)",params[1],pData[playerid][pNickname],pData[playerid][pPhone],pData[id][pNickname],pData[id][pPhone]);
            SendClientMessage(i,0xFFF700FF,mes);
        }
        return true;
    }
    ALT:sms:t;

 

 

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

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


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

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

  • 1

@amazonite, пробуй такой вариант.

Спойлер

CMD:sms(playerid,params[]) {
    if(!pData[playerid][pPhone]) 
        return SendClientMessage(playerid,CGRAY,"У вас нет телефона. Вы можете купить его в 24/7");
    if(!pTemp[playerid][pTPhone]) 
        return SendClientMessage(playerid,CGRAY,"Сначала нужно включить телефон");
    if(pData[playerid][pPhoneMoney] < 5
        return SendClientMessage(playerid, CGRAY, "Ошибка: На счету недостаточно средств");
    if(pData[playerid][pMut]) 
        return SendClientMessage(playerid,CGRAY,"У вас бан чата. Используйте /mutetime чтобы узнать время бана.");
    if(pData[playerid][pJail]) 
        return SendClientMessage(playerid, CGRAY, "Ошибка: Вы в тюрьме.");

    new phone_number,
        sms_text[128],
        mes[256];
        
    if(sscanf(params, "ds[128]", phone_number, sms_text)) 
        return SendClientMessage(playerid,CGRAY,"/sms [номер телефона] [текст]");
    if(strlen(phone_number) < 3
        return SendClientMessage(playerid,CGRAY,"Ошибка: Номер введён неверно.");

    foreach(new i: Player) {
        if(pData[i][pPhone] != phone_number) continue;

        if(!IsPlayerConnected(i)) 
            return SendClientMessage(playerid, CGRAY, "Игрок с этим номером не в игре");
        if(i == playerid) 
            return SendClientMessage(playerid, CGRAY, "Ошибка: Вы ввели свой номер");
        if(!pTemp[i][pTPhone]) 
            return SendClientMessage(playerid, CGRAY, "У игрока телефон выключен");

        format(mes, sizeof(mes), "{FFAF00}SMS: {FFF700}%s {FFAF00}| {FFF700}Получатель: %s (òåë. %d)", sms_text, pData[i][pNickname], pData[i][pPhone]);
        SendClientMessage(playerid, 0xFFF700FF, mes);
        format(mes, sizeof(mes), "{FFAF00}SMS: {FFF700}%s {FFAF00}| {FFF700}Отправитель: %s (òåë. %d)", sms_text, pData[playerid][pNickname], pData[playerid][pPhone]);
        SendClientMessage(i, 0xFFF700FF, mes);

        SetPlayerChatBubble(playerid, "Отправил SMS сообщение", CPINK, 10.03000);
        pData[playerid][pPhoneMoney] -= 5;
        UpdatePlayerData(playerid, "phonemoney", pData[playerid][pPhoneMoney]);
        PlayerPlaySound(playerid, 10540.00.00.0);
        PlayerPlaySound(i, 10540.00.00.0);
        break;
    }

    foreach(new i: Player) {
        if(admears[i] == 0continue;
        format(mes, sizeof(mes), "{FFAF00}ASMS: {FFF700}%s {FFAF00}| {FFF700}Отправитель:%s(%d) Получатель:%s(%d)", sms_text, pData[playerid][pNickname], pData[playerid][pPhone], pData[i][pNickname], pData[i][pPhone]);
        SendClientMessage(i, 0xFFF700FF, mes);
    }
    return true;
}
ALT:sms:t;

 

 

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


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

Некорректная проверка на номер.
Если использовать, то в таком формате:

Вариант с foreach:

Спойлер

foreach(new i: Player) {
    if(!PlayerInfo[i][pPhoneNumber] != number)
        return SendClientMessage(playerid, 0xff0000ff"Ошибка: Игрока с таким номером нет на сервере!");
}

 


Вариант без foreach:

Спойлер

for(new i; i <= GetPlayerPoolSize(); i++)
    if(!PlayerInfo[i][pPhoneNumber] != number)
        return SendClientMessage(playerid, 0xff0000ff"Ошибка: Игрока с таким номером нет на сервере!");
}

 


UPD: У вас есть корректная проверка на номер. После if(sscanf(.. уберите условие else if(!number). К тому же, рекомендую использовать один из моих вариантов в цикле, ибо MAX_PLAYERS использовать не лучшее решение.

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

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


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

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


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

@amazonite, посмотрите внимательно на код. Ничего не замечаете?

 

Текст только подправьте везде.

 

Спойлер

CMD:sms(playerid,params[])
    {
        if(!pData[playerid][pPhone]) return SendClientMessage(playerid,CGRAY,"Ó Âàñ íåò òåëåôîíà. Âû ìîæåòå êóïèòü åãî â 24/7");
        if(!pTemp[playerid][pTPhone]) return SendClientMessage(playerid,CGRAY,"Ñíà÷àëà íóæíî âêëþ÷èòü òåëåôîí");
        if(pData[playerid][pPhoneMoney] < 5return SendClientMessage(playerid, CGRAY, "Îøèáêà: Íà ñ÷åòó íåäîñòàòî÷íî ñðåäñòâ");
        if(pData[playerid][pMut]) return SendClientMessage(playerid,CGRAY,"Ó âàñ áàí ÷àòà. Èñïîëüçóéòå /mutetime ÷òîáû óçíàòü âðåìÿ áàíà.");
        if(pData[playerid][pJail]) return SendClientMessage(playerid, CGRAY, "Îøèáêà: Âû â òþðüìå.");
        new stroch = strlen(params[0]);
        if(stroch < 3return SendClientMessage(playerid,CGRAY,"Îøèáêà: Íîìåð ââåä¸í íåâåðíî");
        new number = params[0];
        if(sscanf(params, "ds[128]", params[0], params[1])) return SendClientMessage(playerid,CGRAY,"/sms [íîìåð òåëåôîíà] [òåêñò]");
        
        new id = -1;
        for(new i;i< GetPlayerPoolSize();i++)
        {
            if(!IsPlayerConnected(i)) continue;
            if(pData[i][pPhone] == number) {id = i; break;}
        }
        if(id == -1return SendClientMessage(playerid,CGRAY,"Èãðîêà ñ ýòèì íîìåðîì íåò íà ñåðâåðå");
        if(id == playerid) return SendClientMessage(playerid,CGRAY,"Îøèáêà: âû ââåëè ñâîé íîìåð");
        if(!pTemp[id][pTPhone]) return SendClientMessage(playerid,CGRAY,"Ó èãðîêà âûêëþ÷åí òåëåôîí");

        new mes[256];
        format(mes,sizeof(mes),"{FFAF00}SMS: {FFF700}%s {FFAF00}| {FFF700}Ïîëó÷àòåëü: %s (òåë. %d)",params[1],pData[id][pNickname],pData[id][pPhone]);
        SendClientMessage(playerid,0xFFF700FF,mes);
        format(mes,sizeof(mes),"{FFAF00}SMS: {FFF700}%s {FFAF00}| {FFF700}Îòïðàâèòåëü: %s (òåë. %d)",params[1],pData[playerid][pNickname],pData[playerid][pPhone]);
        SendClientMessage(id,0xFFF700FF,mes);
        SetPlayerChatBubble(playerid, "Îòïðàâèë ñìñ-ñîîáùåíèå", CPINK, 10.03000);
        pData[playerid][pPhoneMoney] -= 5;
        UpdatePlayerData(playerid,"phonemoney",pData[playerid][pPhoneMoney]);
        PlayerPlaySound(playerid,1054,0.0,0.0,0.0);
        PlayerPlaySound(id,1054,0.0,0.0,0.0);
        foreach(new i:Player)
        {
            if(admears[i] == 0continue;
            format(mes,sizeof(mes),"{FFAF00}ASMS: {FFF700}%s {FFAF00}| {FFF700}Îòïðàâèòåëü:%s(%d) Ïîëó÷àòåëü:%s(%d)",params[1],pData[playerid][pNickname],pData[playerid][pPhone],pData[id][pNickname],pData[id][pPhone]);
            SendClientMessage(i,0xFFF700FF,mes);
        }
        return true;
    }
    ALT:sms:t;

 

 

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


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

@glvde.  делал точно так же как вы скинули и всё равно пишет игрок с этим номером не в игре

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


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

@amazonite 
 

Спойлер

CMD:sms(playerid,params[]) {
    if(!pData[playerid][pPhone]) 
        return SendClientMessage(playerid,CGRAY,"Ó Âàñ íåò òåëåôîíà. Âû ìîæåòå êóïèòü åãî â 24/7");
    if(!pTemp[playerid][pTPhone]) 
        return SendClientMessage(playerid,CGRAY,"Ñíà÷àëà íóæíî âêëþ÷èòü òåëåôîí");
    if(pData[playerid][pPhoneMoney] < 5
        return SendClientMessage(playerid, CGRAY, "Îøèáêà: Íà ñ÷åòó íåäîñòàòî÷íî ñðåäñòâ");
    if(pData[playerid][pMut]) 
        return SendClientMessage(playerid,CGRAY,"Ó âàñ áàí ÷àòà. Èñïîëüçóéòå /mutetime ÷òîáû óçíàòü âðåìÿ áàíà.");
    if(pData[playerid][pJail]) 
        return SendClientMessage(playerid, CGRAY, "Îøèáêà: Âû â òþðüìå.");
    if(sscanf(params, "ds[128]", params[0], params[1])) 
        return SendClientMessage(playerid,CGRAY,"/sms [íîìåð òåëåôîíà] [òåêñò]");
    if(strlen(params[0]) < 3
        return SendClientMessage(playerid,CGRAY,"Îøèáêà: Íîìåð ââåä¸í íåâåðíî");

    new id = -1;
    for(new i; i < GetPlayerPoolSize(); i++) {
        if(pData[i][pPhone] != params[0]) continue;
        id = i;
        break;
    }
    if(id == -1
        return SendClientMessage(playerid,CGRAY,"Èãðîêà ñ ýòèì íîìåðîì íåò íà ñåðâåðå");
    if(id == playerid) 
        return SendClientMessage(playerid,CGRAY,"Îøèáêà: âû ââåëè ñâîé íîìåð");
    if(!pTemp[id][pTPhone]) 
        return SendClientMessage(playerid,CGRAY,"Ó èãðîêà âûêëþ÷åí òåëåôîí");

    new mes[256];
    format(mes, sizeof(mes), "{FFAF00}SMS: {FFF700}%s {FFAF00}| {FFF700}Ïîëó÷àòåëü: %s (òåë. %d)", params[1], pData[id][pNickname], pData[id][pPhone]);
    SendClientMessage(playerid, 0xFFF700FF, mes);
    format(mes, sizeof(mes), "{FFAF00}SMS: {FFF700}%s {FFAF00}| {FFF700}Îòïðàâèòåëü: %s (òåë. %d)", params[1], pData[playerid][pNickname], pData[playerid][pPhone]);
    SendClientMessage(id, 0xFFF700FF, mes);
    SetPlayerChatBubble(playerid, "Îòïðàâèë ñìñ-ñîîáùåíèå", CPINK, 10.03000);
    pData[playerid][pPhoneMoney] -= 5;
    UpdatePlayerData(playerid,"phonemoney",pData[playerid][pPhoneMoney]);
    PlayerPlaySound(playerid,1054,0.0,0.0,0.0);
    PlayerPlaySound(id,1054,0.0,0.0,0.0);

    foreach(new i:Player) {
        if(admears[i] == 0continue;
        format(mes, sizeof(mes), "{FFAF00}ASMS: {FFF700}%s {FFAF00}| {FFF700}Îòïðàâèòåëü:%s(%d) Ïîëó÷àòåëü:%s(%d)", params[1], pData[playerid][pNickname], pData[playerid][pPhone], pData[id][pNickname], pData[id][pPhone]);
        SendClientMessage(i, 0xFFF700FF, mes);
    }
    return true;
}
ALT:sms:t;

 

 

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

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


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

@glvde.  Братишка всё равно не работает пишет игрок с этим номером не в игре

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


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

@amazonite, кинь команду с нормальным текстом.

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


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

@glvde.  только что проверяли, у игрока с ID 0 проблемы именно, он смс получает а отправить не сможет, пишет игрок не в игре. начиная с ид 1 всё норм только у ид 0 проблемы. 

 

Спойлер

CMD:sms(playerid,params[]) {
    if(!pData[playerid][pPhone]) 
        return SendClientMessage(playerid,CGRAY,"У вас нет телефона. Вы можете купить его в 24/7");
    if(!pTemp[playerid][pTPhone]) 
        return SendClientMessage(playerid,CGRAY,"Сначала нужно включить телефон");
    if(pData[playerid][pPhoneMoney] < 5
        return SendClientMessage(playerid, CGRAY, "Ошибка: На счету недостаточно средств");
    if(pData[playerid][pMut]) 
        return SendClientMessage(playerid,CGRAY,"У вас бан чата. Используйте /mutetime чтобы узнать время бана.");
    if(pData[playerid][pJail]) 
        return SendClientMessage(playerid, CGRAY, "Ошибка: Вы в тюрьме.");
    if(sscanf(params, "ds[128]", params[0], params[1])) 
        return SendClientMessage(playerid,CGRAY,"/sms [номер телефона] [текст]");
    if(strlen(params[0]) < 3
        return SendClientMessage(playerid,CGRAY,"Ошибка: Номер введён неверно.");

    new id = -1;
    for(new i; i < GetPlayerPoolSize(); i++) {
        if(pData[i][pPhone] != params[0]) continue;
        id = i;
        break;
    }
    if(id == -1
        return SendClientMessage(playerid,CGRAY,"Игрок с этим номером не в игре");
    if(id == playerid) 
        return SendClientMessage(playerid,CGRAY,"Ошибка: Вы ввели свой номер");
    if(!pTemp[id][pTPhone]) 
        return SendClientMessage(playerid,CGRAY,"У игрока телефон выключен");

    new mes[256];
    format(mes, sizeof(mes), "{FFAF00}SMS: {FFF700}%s {FFAF00}| {FFF700}Получатель: %s (òåë. %d)", params[1], pData[id][pNickname], pData[id][pPhone]);
    SendClientMessage(playerid, 0xFFF700FF, mes);
    format(mes, sizeof(mes), "{FFAF00}SMS: {FFF700}%s {FFAF00}| {FFF700}Отправитель: %s (òåë. %d)", params[1], pData[playerid][pNickname], pData[playerid][pPhone]);
    SendClientMessage(id, 0xFFF700FF, mes);
    SetPlayerChatBubble(playerid, "Отправил SMS сообщение", CPINK, 10.03000);
    pData[playerid][pPhoneMoney] -= 5;
    UpdatePlayerData(playerid,"phonemoney",pData[playerid][pPhoneMoney]);
    PlayerPlaySound(playerid,1054,0.0,0.0,0.0);
    PlayerPlaySound(id,1054,0.0,0.0,0.0);

    foreach(new i:Player) {
        if(admears[i] == 0continue;
        format(mes, sizeof(mes), "{FFAF00}ASMS: {FFF700}%s {FFAF00}| {FFF700}Отправитель:%s(%d) Получатель:%s(%d)", params[1], pData[playerid][pNickname], pData[playerid][pPhone], pData[id][pNickname], pData[id][pPhone]);
        SendClientMessage(i, 0xFFF700FF, mes);
    }
    return true;
}
ALT:sms:t;

 



 

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

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


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

up

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


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

Брат спасибо тебе огромное!!!!!!!!!! всё получилось. СПАСИБО:kiss:

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


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

@amazonite, рад помочь :) 
Тут не совсем радужный код, нужно проверки убрать некоторые и оптимизировать немного.

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

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


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   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} };