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

Тема: Pawn и butterfly

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

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

    Pawn и butterfly

    Попал в очень интересную ситуацию. Дело в том, что каким то неведанным образом у меня изменяется слово в массиве (точнее не в массиве, но я хз как тут выразиться)....

    Вот например код:
    PHP код:
    format(gstringsizeof(gstring), "Камера создана. ID %d."ArryIDAddCamersM1{playerid});
    SPN(playeridgstring); 
    В чат выводит:
    Код:
    бтотаасоздана. ID %d.
    А вот если перед format добавить другую функцию которая работает со строками, например printf
    PHP код:
    printf("11 - %f %f %f %d\n"PosAddCamersM1[3][ArryIDAddCamersM1{playerid}][playerid], 
            
    PosAddCamersM1[4][ArryIDAddCamersM1{playerid}][playerid], 
            
    PosAddCamersM1[5][ArryIDAddCamersM1{playerid}][playerid], 
                    
    ArryIDAddCamersM1{playerid});

    format(gstringsizeof(gstring), "Камера создана. ID %d."ArryIDAddCamersM1{playerid});
    SPN(playeridgstring); 
    То в чат выведет нормальное сообщение "Камера создана. ID 0.", а вот в консоль кое что интересное:
    Код:
    бтотааf 133.989959 -58.971668 1093379694
    Опять мы видим "бтотаа", так вот мне интересно узнать, каким это собственно образом происходит это?

    Если что функция SPN:
    PHP код:
    stock SPN(playeidformat[])
    {
        static const 
            
    str[] = "{3D8EFF}| Оповещение {FFFFFF}";

        
    strins(formatstr0strlen(format) - 1);
        return 
    SendClientMessage(playeid, -1format);

    И если опять выполнить это действие, то потом уже выводит не "бтотаа", а другие рандомные буквы (или выведет как положено).

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

    Потом еще очень интересный момент, к объекту креплю текст со спец символом (ну то есть эти значки), а оно то выведет нормально, то вот такая хрень... То есть опять по какой то причине идет подмена текста...



    Последний раз редактировалось KrutoyKrosch; 28.01.2017 в 04:19.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    crashdetect молчит?
    Покажи сам массив-то.
    И пробовал вместо strins использовать format?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  3. #3
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Думаю, что проблема глобальная - возможно проблемы со стеком или что-то вроде этого. Покажи вывод компилятора после компиляции.

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

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

    Если про gstring, то глобально через new.

    Поменял и стало нормально... Получается проблема в strins?
    PHP код:
    stock SPN(playeid_format[])
    {
        static const 
            
    str[] = "{3D8EFF}| Оповещение {FFFFFF}";

        new 
            
    string[sizeof(str) + 128];

        
    format(stringstrlen(string) - 1"%s%s"str_format);
        return 
    SendClientMessage(playeid, -1string);

    Ты про это?
    Код:
    Pawn compiler 3.10.20160907	 	 	Copyright (c) 1997-2006, ITB CompuPhase
    
    Header size:           1668 bytes
    Code size:            54148 bytes
    Data size:          1587452 bytes
    Stack/heap size:      16384 bytes; estimated max. usage=195 cells (780 bytes)
    Total requirements: 1659652 bytes
    - - - Добавлено - - -

    А вот сегодня вообще выводит не "бтотаа", а вот что в консоль:
    Код:
     куда будет смотреть камера.
    Хотя я вывожу совсем другое....
    PHP код:
    printf("%f %f %f %d\n"PosAddCamersM1[3][ArryIDAddCamersM1{playerid}][playerid], 
                                        
    PosAddCamersM1[4][ArryIDAddCamersM1{playerid}][playerid], 
                                        
    PosAddCamersM1[5][ArryIDAddCamersM1{playerid}][playerid], ArryIDAddCamersM1{playerid}); 

  5. #5
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Функцию strins лучше избегать, т.к. она не учитывает размер массива, в который производится запись (баг исправлен только в Pawn 4.0). Если полученная строка больше, чем сам массив, то функция запишет лишние символы за пределы массива - возможно, в другой массив, который располагается следующим в памяти. Скорее всего, этим и объясняется то, что показано на скриншотах.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

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

    Статус
    Оффлайн
    Регистрация
    05.12.2013
    Сообщений
    188
    Репутация:
    116 ±
    Щас бы в 2к17 глобальный массив для строк юзать

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

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    Цитата Сообщение от Пельмень Посмотреть сообщение
    Щас бы в 2к17 глобальный массив для строк юзать
    А он чем то плох? Я не заморачиваюсь написанием new string[]; везде

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

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Цитата Сообщение от KrutoyKrosch Посмотреть сообщение
    А он чем то плох? Я не заморачиваюсь написанием new string[]; везде
    Ууу... Лучше создавать каждый раз новый стринг, чем использовать один глобальный...

    Неправильный пример (так категорически не стоит использовать):
      Открыть/закрыть
    PHP код:
    new gstring[128]; 
    // где то в команде
    format(gstringsizeof(gstring), "Привет %s"GetName(playerid));
    SCM(playerid, -1gstring);
    // где то во второй команде
    format(gstringsizeof(gstring), "Твой левел - %d, nick - %s", ...);
    SCM(playerid, -1gstring); 


    Куда лучше использовать так:
      Открыть/закрыть
    PHP код:
    // где то в команде
    new string[32];
    format(stringsizeof(string), "Привет %s"GetName(playerid));
    SCM(playerid, -1string);
    // где то во второй команде
    new string[49];
    format(stringsizeof(string), "Твой левел - %d, nick - %s", ...);
    SCM(playerid, -1string); 

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

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    А ты мне можешь объяснить причину? Зачем два раза выделять память? Если бы все так делали, то бы игры ОЗУ жрали куда больше...

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от KrutoyKrosch Посмотреть сообщение
    А ты мне можешь объяснить причину? Зачем два раза выделять память? Если бы все так делали, то бы игры ОЗУ жрали куда больше...
    Я ничего не хочу сказать и не осуждаю использование глобального массива (хоть и сам никогда не буду таким извращением заниматься), но твоё заключение про двойное выделение память - это...
    В общем, тебе стоит ознакомиться с принципами работы стэка
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

 

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

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

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

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

Ваши права

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