Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 13
  1. #1
    Аватар для Dima_Turkow
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.12.2013
    Адрес
    Екатеринбург
    Сообщений
    124
    Репутация:
    8 ±

    Вопрос по отправке объявлений у NEWS

    Всем доброго времени суток, уважаемые посетители портала PRO-PAWN.RU !

    Опишу суть проблемы : есть организация новостей и система редактирования объявлений.
    При отправке объявления неким человеком, его должен отредактировать сотрудник NEWS и пустить в эфир.

    Собственно все идеально отправляется и редактируется за исключением одного, номер телефона всегда пишется : 0.

      Открыть/закрыть
    1. static const fmt_str_50[] = "Объявление: %s. Прислал: %s. Тел: %d";
    2. new string_50[sizeof(fmt_str_50)+MAX_PLAYER_NAME+94];
    3. format(string_50, sizeof(string_50), fmt_str_50
    4. ,
    5. AdvertInfo[GetPVarInt(playerid, "AdvertID")][0][adText],
    6. AdvertInfo[GetPVarInt(playerid, "AdvertID")][0][adName],
    7. AdvertInfo[GetPVarInt(playerid, "AdvertID")][0][adPhone]
    8. );
    9. SCMTA(0x00D900C8, string_50);
    10.  
    11. static const fmt_str_51[] = " Объявление опубликовал сотрудник LS News %s";
    12. new string_51[sizeof(fmt_str_51)+MAX_PLAYER_NAME-1];
    13. format(string_51, sizeof(string_51), fmt_str_51
    14. ,
    15. GN(playerid)
    16. );
    17. SCMTA(0x7787D8FF, string_51);
    18.  
    19. for(new i = GetPVarInt(playerid, "AdvertID"); i <= TOTALADVERT[0] - 1; i++)
    20. {
    21. strmid(AdvertInfo[i][0][adText], AdvertInfo[i+1][0][adText],0, strlen(AdvertInfo[i+1][0][adText]), 90);
    22. strmid(AdvertInfo[i][0][adName], AdvertInfo[i+1][0][adName],0, strlen(AdvertInfo[i+1][0][adName]), MAX_PLAYER_NAME);
    23. player[i][pnumber] = AdvertInfo[i][0][adPhone];
    24. }
    25. TOTALADVERT[0]--;
    26. AdvertTime = gettime() + 15;
    27. DeletePVar(playerid, "AdvertID");


    Прошу помочь знающим людям в исправлении данного косяка .
    P.S в - player[playerid][pnumber] хранится номер телефона игрока
    Последний раз редактировалось Dima_Turkow; 06.06.2020 в 12:37.

  2. #2
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    1. static const fmt_str_50[] = "Объявление: %s. Прислал: %s. Тел: %d";
    2. new string_50[sizeof(fmt_str_50)+MAX_PLAYER_NAME+94];
    3. format(string_50, sizeof(string_50), fmt_str_50,
    4. AdvertInfo[GetPVarInt(playerid, "AdvertID")][0][adText],
    5. AdvertInfo[GetPVarInt(playerid, "AdvertID")][0][adName],
    6. player[GetPVarInt(playerid, "AdvertID")][pnumber]
    7. );
    8. SCMTA(0x00D900C8, string_50);
    9.  
    10. static const fmt_str_51[] = " Объявление опубликовал сотрудник LS News %s";
    11. new string_51[sizeof(fmt_str_51)+MAX_PLAYER_NAME-1];
    12. format(string_51, sizeof(string_51), fmt_str_51
    13. ,
    14. GN(playerid)
    15. );
    16. SCMTA(0x7787D8FF, string_51);
    17.  
    18. for(new i = GetPVarInt(playerid, "AdvertID"); i <= TOTALADVERT[0] - 1; i++)
    19. {
    20. strmid(AdvertInfo[i][0][adText], AdvertInfo[i+1][0][adText],0, strlen(AdvertInfo[i+1][0][adText]), 90);
    21. strmid(AdvertInfo[i][0][adName], AdvertInfo[i+1][0][adName],0, strlen(AdvertInfo[i+1][0][adName]), MAX_PLAYER_NAME);
    22. player[i][pnumber] = AdvertInfo[i][0][adPhone];
    23. }
    24. TOTALADVERT[0]--;
    25. AdvertTime = gettime() + 15;
    26. DeletePVar(playerid, "AdvertID");


    Попробуй так. Видимо в переменную AdvertInfo[playerid][0][adPhone] у тебя не записан номер телефона.

    Хотя я бы сделал по другому:

    1. new str_50[128+1];
    2. format(str_50, sizeof(str_50), "Объявление: %s. Прислал: %s. Тел: %d",
    3. AdvertInfo[GetPVarInt(playerid, "AdvertID")][0][adText],
    4. GN(GetPVarInt(playerid, "AdvertID")),
    5. player[GetPVarInt(playerid, "AdvertID")][pnumber]
    6. );
    7. SCMTA(0x00D900C8, str_50);
    8.  
    9. format(str_50, sizeof(str_50), " Объявление опубликовал сотрудник LS News %s",
    10. GN(playerid)
    11. );
    12. SCMTA(0x7787D8FF, str_50);
    13.  
    14. for(new i = GetPVarInt(playerid, "AdvertID"); i <= TOTALADVERT[0] - 1; i++)
    15. {
    16. strmid(AdvertInfo[i][0][adText], AdvertInfo[i+1][0][adText],0, strlen(AdvertInfo[i+1][0][adText]), 90);
    17. }
    18. TOTALADVERT[0]--;
    19. AdvertTime = gettime() + 15;
    20. DeletePVar(playerid, "AdvertID");


    Вариант с static и new более выгоден, когда форматируется одна строка, а в таких случаях, как у тебя (форматируется 2 и более строки) выгоднее создавать один массив и форматировать его.

    И еще что я заметил - у тебя в pnumber записывается эта пустая переменная adPhone.

    Да по сути AdvertInfo должен хранить один лишь текст объявления, а ник и номер можно получить без него.
    Последний раз редактировалось SteveStage; 06.06.2020 в 14:19.

  3. #3
    Аватар для Dima_Turkow
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.12.2013
    Адрес
    Екатеринбург
    Сообщений
    124
    Репутация:
    8 ±
    Замечательно, волшебно, чудесно. Жаль - оба варианта не работают, все равно : "Тел: 0"

  4. #4
    Аватар для execution
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.03.2018
    Сообщений
    255
    Репутация:
    24 ±
    Ты бы хоть код в читабельный вид привёл и разделил разные действия блоками. Сделай отдельно подачу и отправку.

  5. #5
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    Цитата Сообщение от Dima_Turkow Посмотреть сообщение
    Замечательно, волшебно, чудесно. Жаль - оба варианта не работают, все равно : "Тел: 0"
    Покажи загрузку телефона из бд в pnumber.

  6. #6
    Аватар для Dima_Turkow
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.12.2013
    Адрес
    Екатеринбург
    Сообщений
    124
    Репутация:
    8 ±
    Если я в формат засуну, к примеру player[playerid][pnumber] - то номер телефона выведется, только выведется того кто редактирует, а не того кто прислал объявление

    - - - Добавлено - - -

    player[playerid][pnumber] = cache_get_field_content_int(0, "Number");

  7. #7
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    Цитата Сообщение от Dima_Turkow Посмотреть сообщение
    Если я в формат засуну, к примеру player[playerid][pnumber] - то номер телефона выведется, только выведется того кто редактирует, а не того кто прислал объявление
    Ну так ты введи не playerid, а pvar, хранящий id того, кто прислал объявление.

  8. #8
    Аватар для Dima_Turkow
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.12.2013
    Адрес
    Екатеринбург
    Сообщений
    124
    Репутация:
    8 ±
    Каким образом, продемонстрируй пожалуйста ;)

  9. #9
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    Цитата Сообщение от Dima_Turkow Посмотреть сообщение
    1. format(string_50, sizeof(string_50), fmt_str_50
    2. ,
    3. AdvertInfo[GetPVarInt(playerid, "AdvertID")][0][adText],
    4. AdvertInfo[GetPVarInt(playerid, "AdvertID")][0][adName],
    5. AdvertInfo[GetPVarInt(playerid, "AdvertID")][0][adPhone]
    6. );
    Вот, pvar AdvertID по видимому хранит id отправителя объявления.

  10. #10
    Аватар для Dima_Turkow
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.12.2013
    Адрес
    Екатеринбург
    Сообщений
    124
    Репутация:
    8 ±
    Цитата Сообщение от SteveStage Посмотреть сообщение
    1. static const fmt_str_50[] = "Объявление: %s. Прислал: %s. Тел: %d";
    2. new string_50[sizeof(fmt_str_50)+MAX_PLAYER_NAME+94];
    3. format(string_50, sizeof(string_50), fmt_str_50,
    4. AdvertInfo[GetPVarInt(playerid, "AdvertID")][0][adText],
    5. AdvertInfo[GetPVarInt(playerid, "AdvertID")][0][adName],
    6. player[GetPVarInt(playerid, "AdvertID")][pnumber]
    7. );
    8. SCMTA(0x00D900C8, string_50);
    9.  
    10. static const fmt_str_51[] = " Объявление опубликовал сотрудник LS News %s";
    11. new string_51[sizeof(fmt_str_51)+MAX_PLAYER_NAME-1];
    12. format(string_51, sizeof(string_51), fmt_str_51
    13. ,
    14. GN(playerid)
    15. );
    16. SCMTA(0x7787D8FF, string_51);
    17.  
    18. for(new i = GetPVarInt(playerid, "AdvertID"); i <= TOTALADVERT[0] - 1; i++)
    19. {
    20. strmid(AdvertInfo[i][0][adText], AdvertInfo[i+1][0][adText],0, strlen(AdvertInfo[i+1][0][adText]), 90);
    21. strmid(AdvertInfo[i][0][adName], AdvertInfo[i+1][0][adName],0, strlen(AdvertInfo[i+1][0][adName]), MAX_PLAYER_NAME);
    22. player[i][pnumber] = AdvertInfo[i][0][adPhone];
    23. }
    24. TOTALADVERT[0]--;
    25. AdvertTime = gettime() + 15;
    26. DeletePVar(playerid, "AdvertID");


    Попробуй так. Видимо в переменную AdvertInfo[playerid][0][adPhone] у тебя не записан номер телефона.

    Хотя я бы сделал по другому:

    1. new str_50[128+1];
    2. format(str_50, sizeof(str_50), "Объявление: %s. Прислал: %s. Тел: %d",
    3. AdvertInfo[GetPVarInt(playerid, "AdvertID")][0][adText],
    4. GN(GetPVarInt(playerid, "AdvertID")),
    5. player[GetPVarInt(playerid, "AdvertID")][pnumber]
    6. );
    7. SCMTA(0x00D900C8, str_50);
    8.  
    9. format(str_50, sizeof(str_50), " Объявление опубликовал сотрудник LS News %s",
    10. GN(playerid)
    11. );
    12. SCMTA(0x7787D8FF, str_50);
    13.  
    14. for(new i = GetPVarInt(playerid, "AdvertID"); i <= TOTALADVERT[0] - 1; i++)
    15. {
    16. strmid(AdvertInfo[i][0][adText], AdvertInfo[i+1][0][adText],0, strlen(AdvertInfo[i+1][0][adText]), 90);
    17. }
    18. TOTALADVERT[0]--;
    19. AdvertTime = gettime() + 15;
    20. DeletePVar(playerid, "AdvertID");


    Вариант с static и new более выгоден, когда форматируется одна строка, а в таких случаях, как у тебя (форматируется 2 и более строки) выгоднее создавать один массив и форматировать его.

    И еще что я заметил - у тебя в pnumber записывается эта пустая переменная adPhone.

    Да по сути AdvertInfo должен хранить один лишь текст объявления, а ник и номер можно получить без него.

    Я сейчас сделал точно так, как ты описал второй вариант. Итог :Объявление отобразилось, Прислал : пустое место вывелось, Тел: 0

    Я так понимаю проблема с PVAR ?

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •