Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 9 из 31 ПерваяПервая ... 7 8 9 10 11 19 ... ПоследняяПоследняя
Показано с 81 по 90 из 308
  1. #81
    Аватар для jeraqiv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    28.06.2015
    Адрес
    Двумерный массив
    Сообщений
    77
    Репутация:
    2 ±
    Так-же меня смутил такой подход к удобности применения ID диалогов. Не выделяем ли мы память таким образом? И почему данный подход эффективней чем использование макроподстановок?

    PHP код:
    enum e_DIALOG_IDs 

        
    dKickMessage,//Автоматически займёт ID 0 
        
    dRegister,//ID 1 
        
    dLogin//ID 2 
    }; 

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Gecriq Посмотреть сообщение



    Тогда следует что в двухмерном массиве pInfo есть поля из перечисления e_PLAYER_INFO где член pPassword является массивов символов. И получается что нулевому индексу массива символов члена pPassword мы присваиваем значение EOS [End of String] что означает конец строки \0. И получается что таким образом наш массив не содержит символов? Получается ли это следующим образом [\0][...][\0]? Ведь по умолчанию массив строк автоматически заканчивается ячейкой которая хранит символ \0.
    Я же писал для чего сделано это обнуление :) По-сути, если обнулять переменную с паролем игрока при выходе, то это обнуление не нужно. Но я решил перестраховаться, ибо на моём веку люди ни раз решали, что им какой-то участок кода не нужен и просто его не вставляли (это я говорю сейчас о "RemovePlayerInfo" в "OnPlayerDisconnect". Если эту функцию не вставить (то бишь, не совершить обнуление), то случится баг, когда пароль игрока, который играл на твоём слоте до тебя, "склеится" с твоим паролем, что не есь хорошо).

    Цитата Сообщение от Gecriq Посмотреть сообщение
    И получается что таким образом наш массив не содержит символов? Получается ли это следующим образом [\0][...][\0]? Ведь по умолчанию массив строк автоматически заканчивается ячейкой которая хранит символ \0.
    Если в массиве, например, хранился мой ник, то бишь:
    "[D][e][i][m][o][S][\0]"
    и тут мы первую ячейку заменили на нуль-символ, весь остальной текст никуда не исчез из массива и остался находится в нём. Получится вот так:
    "[\0][e][i][m][o][S][\0]"
    Просто когда мы пытаемся вывести данные из массива в виде строки, сервер выводит всё, что находится до первого попавшегося нуль-символа, а так как в самой первой ячейке у нас и хранится этот самый нуль-символ, сервер посчитает, что строка пустая (точнее, он-то ничего не посчитает. Он просто исполнит команду, в которой указано, что он должен вывести все данные из массива, пока в одной из ячеек не окажется нуль-символа).

    Вот пример того, как это всё работает:
    PHP код:
    new deimos[100] = "DeimoS";//Объявим массив и запишем в него строку
    main()
    {
        
    printf("-%s"deimos);//Отобразим его, дабы удостоверится, что данные в нём есть
        
    deimos[0] = '\0';//"Обнулим" его
        
    printf("-%s"deimos);//Попробуем отобразить весь массив, начиная с нулевой ячейки
        
    printf("-%s"deimos[1]);//А теперь пропустим нулевую ячейку, которую мы приравняли к нуль-символу, и выведем содержимое



    Цитата Сообщение от Gecriq Посмотреть сообщение
    Так-же меня смутил такой подход к удобности применения ID диалогов. Не выделяем ли мы память таким образом?
    Нет, ибо перечисление создаёт константы, которые уже и хранят наши ID. Константы эти не заносятся в память сервера, а хранятся в коде aka инструкциях для AMX машины
      Открыть/закрыть
    Константы заносятся в память только в тех случаях, когда они используются как число ячеек при объявлении массивов. То бишь
    PHP код:
    const value 100;
    new 
    string[value]; 
    Равносильна такой записи
    PHP код:
    new const value 100;
    new 
    string[value]; 


    Цитата Сообщение от Gecriq Посмотреть сообщение
    И почему данный подход эффективней чем использование макроподстановок?
    Ну, во-первых, такой метод не требует самостоятельного ввода ID для диалога. Просто ввёл имя и компилятор сам подсчитает для него ID.
    Во-вторых, в случае, когда ты решишь удалить один из первых диалогов, а после него будут идти ещё 10 штук, тебе не придётся вручную менять ID всех последующих диалогов (хотя если ты не являешься педантом и тебя не напрягают такие вещи, то проблем с этим у тебя не будет. Но меня подобные вещи бесят :3)
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  3. Пользователь сказал cпасибо:
    jeraqiv (13.02.2016)
  4. #83
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    PHP код:
    const value 100;
    new 
    string[value]; 
    Равносильна такой записи
    PHP код:
    new const value 100;
    new 
    string[value]; 
    А разве во второй записи создаётся не обычная переменная, значение которой нельзя изменить?

  5. 3 пользователя(ей) сказали cпасибо:
    #enotya (21.08.2016) $continue$ (13.02.2016) Daniel_Cortez (13.02.2016)
  6. #84
    Аватар для jeraqiv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    28.06.2015
    Адрес
    Двумерный массив
    Сообщений
    77
    Репутация:
    2 ±
    Более менее стало понятно. Спасибо.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Исправил ошибки в коде. Спасибо Alexey_Nikiforov за багрепорт




    Цитата Сообщение от Londlem Посмотреть сообщение
    А разве во второй записи создаётся не обычная переменная, значение которой нельзя изменить?
    А разве в первом случае создаётся, по-сути, не то же самое?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Ну как бэ ты резервируешь в памяти 4 байта, не? (Я не уверен, но все же?)
    Да и вообще, если брать C++ (например), во многих учебниках, советуют объявлять size - array, именно константой.
    Цитата Сообщение от DeimoS Посмотреть сообщение
    А разве в первом случае создаётся, по-сути, не то же самое?
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    PHP код:
    const value 100;
    new 
    string[value]; 
    Равносильна такой записи
    PHP код:
    new const value 100;
    new 
    string[value]; 
    Цитата Сообщение от DeimoS Посмотреть сообщение
    А разве в первом случае создаётся, по-сути, не то же самое?
    Во втором варианте value хранится в секции данных, т.к. это не константа, а просто переменная, значение которой нельзя изменять.
    И из-за этого код в том варианте нерабочий, т.к. размером массива должно быть число или константа.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  10. Пользователь сказал cпасибо:
    DeimoS (13.02.2016)
  11. #88
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  12. Пользователь сказал cпасибо:
    DeimoS (15.02.2016)
  13. #89
    Аватар для [ForD]
    Пользователь

    Статус
    Оффлайн
    Регистрация
    14.11.2013
    Адрес
    Свердловская обл.
    Сообщений
    688
    Репутация:
    103 ±
    спойлер "Почему именно массив, а не pVar"
    1) ... Ведь принцип работы pVar сход с принципами работы оперативной памяти. -хз конечно,но скорее всего имелось ввиду схоЖ а не схоД,очепятка?)


    Проверка на авторизацию игрока
    В обоих вариантах: "Теперь в UploadPlayerAccount, перед SpawnPlayer, добавить"
    Но а как-же "CreateNewAccount"? Мы там тоже спавним игрока.

    И на счет enum и диалогов,проверял работоспособность? Я конечно не спорю,может я криворукий но выдает варн при вызове диалога по твоему методу -> (warning 213: tag mismatch ),заменяешь ид на простое число,варн пропадает.
    Последний раз редактировалось [ForD]; 20.02.2016 в 12:27.
    PAWN Compiler делает то, что вы приказали ему сделать, а не то, что вы хотели, чтобы он сделал..

    25% времени в программировании уходит на размышления о том, что пользователь может сделать не так.[HR]/Брайан Хьюмс/





    #FIXSAMP

  14. #90
    Аватар для Alexey_Nikiforov
    Уровень знаний 1

    Статус
    Оффлайн
    Регистрация
    12.02.2016
    Сообщений
    61
    Репутация:
    1 ±
    Цитата Сообщение от [ForD] Посмотреть сообщение
    спойлер "Почему именно массив, а не pVar"
    1) ... Ведь принцип работы pVar сход с принципами работы оперативной памяти. -хз конечно,но скорее всего имелось ввиду схоЖ а не схоД,очепятка?)


    Проверка на авторизацию игрока
    В обоих вариантах: "Теперь в UploadPlayerAccount, перед SpawnPlayer, добавить"
    Но а как-же "CreateNewAccount"? Мы там тоже спавним игрока.

    И на счет enum и диалогов,проверял работоспособность? Я конечно не спорю,может я криворукий но выдает варн при вызове диалога по твоему методу -> (warning 213: tag mismatch ),заменяешь ид на простое число,варн пропадает.
    Сделал все по урокам.
    Убрал недочеты все работает замечательно.

 

 
Страница 9 из 31 ПерваяПервая ... 7 8 9 10 11 19 ... ПоследняяПоследняя

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

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

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

Ваши права

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