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

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    конечно стоит, я так уже третий день какую то систему квартирок сделать не могу из за этой ошибки

  2. #12
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Решил копнуть поглубже, упростил пример:
    PHP код:
    #include <a_samp>

    main()
    {
        static const 
    str[] = "Sample text";
        
    printf("%s"str[0]);                        // "Sample text"
        
    printf("%s"random(1) ? str[0] : str[0]);    // "S"

    Как видно из примера, в первом вызове printf передаётся адрес строки, но во втором из-за тернарного выражения вместо адреса передаётся содержимое ячейки. Скорее всего, по этой же причине у ТС и возникла ошибка, т.к. компилятор ожидал на месте "Продается" не строку, а отдельную ячейку (т.е. число, символ, etc.)
    Полагаю, стоит сообщить об этом Zeex.
    Я поговнокодил и нашёл своеобразное "решение" сей проблемы:


    PHP код:
    enum fix_fix_fix
    {
        
    _fix[MAX_PLAYER_NAME]
    }

    new 
    this_is_fix[fix_fix_fix] =
    {
        
    "продается"
    };

    format(stringsizeof(string), "| Этаж № %i | %s | Цена: %i$ |\n"i++, (iApartment[i][0][pBought]) ? (this_is_fix[_fix]) : (iApartment[i][0][pNamePlayer]), iApartment[i][0][pMoney]); 
    То бишь, если в обоих случаях использовать перечисление, в котором объявить массив - всё будет норм компилироваться.

    Это не решение проблемы автора (я не призываю его использовать данный метод), а просто пища для размышления.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. Пользователь сказал cпасибо:
    KrutoyKrosch (30.09.2016)
  4. #13
    Аватар для KrutoyKrosch
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    бирем значит такие суем в iApartment слово продается и се

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

    или по стандарту в NamePlayer записывать продается

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

    так теперь еще вопросик

    лучше один глобальный string или много локальных?

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

    Статус
    Оффлайн
    Регистрация
    21.08.2016
    Сообщений
    58
    Репутация:
    24 ±
    Цитата Сообщение от KrutoyKrosch
    бирем значит такие суем в iApartment слово продается и се
    Если брать пример DeimoS`a, то не нужно ничего пихать в энуминатор iApartment.
    PHP код:
    new for_sale[] = "продается";
    format(stringsizeof(string)
    ,
        
    "| Этаж № %i | %s | Цена: %i$ |\n"
    ,
        
    i++,
        (
    iApartment[i][0][pBought]) ? (for_sale) : (iApartment[i][0][pNamePlayer]),
        
    iApartment[i][0][pMoney]
    ); 
    Цитата Сообщение от KrutoyKrosch
    лучше один глобальный string или много локальных?
    Лучше использовать локальные, и подсчитывать количество символов нежели создавать один с 1+к ячеек.
    Последний раз редактировалось Saibot; 30.09.2016 в 21:42.

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

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    зачем 1к ячеек?

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

    Статус
    Оффлайн
    Регистрация
    21.08.2016
    Сообщений
    58
    Репутация:
    24 ±
    Цитата Сообщение от KrutoyKrosch
    зачем 1к ячеек?
    Обычно те кто создают глобальные массивы для строк, так и делают.
    Или Вы хотите под каждою строку создавать глобальный массив и подсчитывать кол-во символов?
    Лучше использовать локальные переменные с массивом для строк, также подсчет символов.
    Как известно, локальные переменные после завершения функция очищаются из памяти.
    Последний раз редактировалось Saibot; 30.09.2016 в 22:16.

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

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    подсчет символов это геморрой только лишний

    и ты мне так и не привел ни один пруф почему нельзя создать глобальный стринг

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

    Статус
    Оффлайн
    Регистрация
    21.08.2016
    Сообщений
    58
    Репутация:
    24 ±
    Цитата Сообщение от KrutoyKrosch
    и ты мне так и не привел ни один пруф почему нельзя создать глобальный стринг
    Ну давайте начнем с того, что я написал уже выше.
    Что локальные переменные очищаются из памяти, а глобальные будет инициализированные постоянным выражением.
    Т.е. после первого форматирования строки Ваш глобальный массив будет уже проинициализирован.
    На веду вам пример.
    Допустим Вы форматируете строку для вывода информации игроку.
    PHP код:
    format(stringsizeof(string),"Глобальный массив"); 
    Все отлично, Вы форматировали строку, вывели ее, все как нужно.
    Теперь Вам опять нужно форматировать строку.
    PHP код:
    format(stringsizeof(string),"Какая разница?"); 
    И теперь если Вывести информацию с массива, то в место текста "Какая разница?" у Вас будет писать "Глобальный массивКакая разница?"
    Почему так? потому, что Ваш массив до, этого уже был проинициализирован.
    Решение конечно есть.
    PHP код:
    string[0] = EOS
    Т.е. Вы инициализируете первую ячейку массива завершающим символом "\0" но, остальной массив по прежнему будет проинициализирован.
    Но для чего, это нубство?

    Цитата Сообщение от KrutoyKrosch
    подсчет символов это геморрой только лишний
    Ну вот, Вы выше писали, зачем 1к ячеек, Вы же не будите создавать 100500 массивов для строк с разной длиной.

    Цитата Сообщение от KrutoyKrosch
    почему нельзя создать глобальный стринг
    Я написал, что лучше, а не почему нельзя.
    Последний раз редактировалось Saibot; 30.09.2016 в 22:12.

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

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    strdel есть если что, можно просто в конец каждого паблика это писать и все

    опять же ты создаешь 10 стрингов в каждом паблике по 256 ячеек, вместо того что бы создать один стринг в 256 ячеек

    тем более глобальный стринг не будет жрать стек и не забываем что самп это однозадачность

  11. #20
    Аватар для Saibot
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.08.2016
    Сообщений
    58
    Репутация:
    24 ±
    Цитата Сообщение от KrutoyKrosch
    strdel есть если что, можно просто в конец каждого паблика это писать и все
    Ну давайте в конце каждой функции будем вызывать нативную функцию, что бы удалить часть строки.
    Даже придется вызывать не одну нативную функцию, а две (strlen), потому, что функция strdel удаляет часть строки и по этому Вам нужно будет узнать позицию последнего символа.

 

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

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

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

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

Ваши права

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