Объясните использование

Тема в разделе "Программирование / Скриптинг", создана пользователем R1KO, 24 май 2013.

  1. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    Если не сложно - объясните как использовать
    и зачем это делается?
     
  2. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    PHP:
    #define _DMGP 1
    #define _DMGS 1
    #define _HPLEFT 1
    #define _UpdRadarBlock 1
    #define _RateCheck 0
    #define _GameDesc "Sky-Play CSS:DM"
    #define _HostagesGod 0


    #if defined _GameDesc
    #include <sdkhooks>
    #endif

    #if _DMGS
    #include <sdktools_sound>
    #include <sdktools_stringtables>
    #endif

    #if _HostagesGod
    #include <sdktools_functions>
    #endif
    Потом например такое:
    PHP:
    #if defined _GameDesc
    public Action:OnGetGameDescription(String:gameDesc[64]) 
    {
        
    strcopy(gameDescsizeof(gameDesc), _GameDesc);
        return 
    Plugin_Changed
    }
    #endif
    #if _DMGS || _DMGP
    public EventOnPlayerHurt(Handle:event, const String:name[], bool:dontBroadcast
    {
        new 
    attacker GetClientOfUserId(GetEventInt(event"attacker"));
        if(
    attacker && (GetClientOfUserId(GetEventInt(event"userid")) != attacker))
        {
            
    #if _DMGS
            
    EmitSoundToClient(attackerSOUNDPATH,SOUND_FROM_PLAYER,SNDCHAN_AUTO,SNDLEVEL_NORMAL,SND_NOFLAGS,VOLUME);
            
    #endif
            #if _DMGP
            
    PrintCenterText(attacker"-%d HP"GetEventInt(event"dmg_health"));
            
    #endif
        
    }
    }
    #endif
    Короче это указания компилятору, что компилировать, а что нет. Если в начале кода сделать например _DMGS 0, то в функции EventOnPlayerHurt не будет строчки EmitSoundToClient, а если еще и _DMGP в 0 поставить, то вообще вся эта функция в результирующий плагин не включится.

    #if defined *** - код между ним и #endif включится в плагин, если до этого был дефайн, не важно с каким содержимым.

    Ну и еще #else есть...
     
    Danyas и R1KO нравится это.
  3. Серый™

    Серый™ CS:S Server

    Сообщения:
    2.570
    Симпатии:
    1.152
    #define - квар и его значение. Пример..
    PHP:
    #define _DEBUG 0
    #if ,#endif - отдельный участок кода который будет работать или нет, от квара. Пример..
    PHP:
    #if _DEBUG
        
    LogDebug(false"BuildLogFilePath - AFK Log File: %s"AFKM_LogFile);
    #endif
    и вот ещё.
    #include - подключение дополнительного файла инклуде.
    #pragma - программа и его значение

    Вроде так :-D

    KorDen, чуть меня опередил))
     
    AlmazON, Danyas и R1KO нравится это.
  4. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    Тоесть это не условия плагина, а условия для компиляции ?

    И вот если объявлено
    #define _DEBUG
    это автоматически присваивает ему 1 ?

    Если #define _DEBUG не будет, а #if _DEBUG - то приймет как 0 ?
     
  5. Серый™

    Серый™ CS:S Server

    Сообщения:
    2.570
    Симпатии:
    1.152
    R1KO, думаю будет ошибка если не объявишь #define _DEBUG
     
  6. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    Если просто объявлено #define _DEBUG - неизвестно как себя поведет условие #if _DEBUG
    Если именно идет #if DEBUG то объявлять надо #define DEBUG 1 (ну или 0 дял отключения). Можно и всякие #if DEBUG==1 вроде использовать...

    Для того, чтобы просто проверялось, было ли объявление (но не значение этого объявления), надо писать #if defined DEBUG
     
    AlmazON и R1KO нравится это.
  7. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    KorDen, сколько исходников смотрел, много где #define _DEBUG и #if _DEBUG
     
  8. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    Хм...
     
    R1KO нравится это.
  9. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    KorDen, ну должна, так должна))
    P.S. Не дашь ссылочку ? :)
    Всем спасибо !
     
  10. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    чтобы не создавать новую тему, тут спрошу. В чем отличие между decl и new ?
     
  11. wanted241

    wanted241 Real-Gamer.Ru

    Сообщения:
    783
    Симпатии:
    355
    decl - Содержит в себе мусор и предназначена для использования в нагруженных переменных с большим массивом. (т.е. тех, что часто используются)
     
    R1KO нравится это.
  12. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    Если есть знание английского базовое - вот более полное описание - http://wiki.alliedmods.net/Introduction_to_SourcePawn#Extended_Variable_Declarations

    Собственно полезно для строк, однако не работает на глобальном уровне, и для переменных (не массивов) не имеет смысла. Однако такая строка не экранируется, если в нее сразу не записывается что-либо, лучше бы сделать name[0]='\0'; для исключения ошибок

    Добавлено через 11 часов 26 минут
    Только заметил... http://www.compuphase.com/pawn/Pawn_Language_Guide.pdf - не все актуально для SourcePawn, но основы одни
     
    Последнее редактирование: 26 май 2013
  13. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.563
    Симпатии:
    1.988
    Грамотно будет так:
    PHP:
                #include
    Подключаемая библиотека SourceMod API или другой исходный файл файл включенияЗаключается в двойные кавычки или в <>.
                
    #include <sourcemod>
    Включение списков файлов всех структурфункцийвызовов и теговкоторые имеются в наличии.
    Может, ещё кто читать будет - пригодится.
     
    Последнее редактирование: 7 июн 2014
    Серый™ нравится это.
  14. semjef

    semjef semjef.ru

    Сообщения:
    1.031
    Симпатии:
    473
    AlmazON, ты написал для #include <sourcemod>.

    а так инклуд используется для подключения дополнительных файлов.

    http://www.c-cpp.ru/books/include
     
    AlmazON нравится это.
  15. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.563
    Симпатии:
    1.988
    Нет. Если взглянуть на страницу доков, то даже в ней указано, что это API для всех SM. К тому же, они действительно вызываются отдельно из того же SM (например, #include <cstrike>). Разве скобки убрать, (или файлы включения).
    А вот второе предложение может не так справедливо. В общем, поправил.
    Оффтоп
     
    Последнее редактирование: 7 июн 2014
  16. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    AlmazON, а ничего что павн это тот же c++ только упрощенный?
     
  17. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.563
    Симпатии:
    1.988
    Потому и нет некоторых слов, которые часто упоминаются.
    Библиотеки, отлично. Даже _wS_ так говорит.
     
  18. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    AlmazON, но по сути то это язык программирования, хоть и в узкой области, а следовательно к нему можно применять некоторые термины из других ЯП.
     
  19. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.563
    Симпатии:
    1.988
    В доках самого SM такие слова не применяются. Вот и я лучше не буду...
     
  20. semjef

    semjef semjef.ru

    Сообщения:
    1.031
    Симпатии:
    473
    AlmazON, pawn сам написан на C++. термины применимы.