Вопросы

Приветствую, помогите пожалуйста исправить ошибку. В игре набираю номер допустим /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 пользователей онлайн

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

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

    • Артём Профиков
      От Артём Профиков
      У меня есть система подсказок вот так она выглядет
      ShowNotification(playerid, тип, "текст", время, "команда через /", "текст кнопки");
      Только есть вопрос как сделать так чтоб она активировалась в определенном радиусе? Заранее спасибо