Модульность в плагине.

Тема в разделе "Программирование / Скриптинг", создана пользователем Саша Шеин, 5 июн 2015.

  1. Саша Шеин

    Саша Шеин

    Сообщения:
    1.258
    Симпатии:
    191
    Всем привет.

    Занимаюсь разработкой плагина Army Ranks for CSS, я задумался над вопросом: "Как делать из одного плагина ядро и кучу модулей?"
    Дак вот, прошу вашей помощи.
    1) Что надо вывести для организации динамического меню?
    2) Для определения ранга у игрока (Для установки хп и тп.)?

    Заранее спасибо!
     
  2. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    893
    Симпатии:
    659
    В ядре создаешь глобальное меню и натив (CreateNative), далее создаешь инклюдик, в него вписываешь этот натив, далее в плагине каком-то используешь натив, который создал ранее в ядре
    что-то вроде
    PHP:
    // ядро
    new Handle:g_hGlobalMenu INVALID_HANDLEg_iItemID 0;

    public 
    APLRes:AskPluginLoad2(Handle:hSelfbool:bLateString:szError[], iError_Max)
    {
        
    CreateNative("TEST_RegisterItem"CN_RegisterItem);

        return 
    APLRes_Success;
    }

    public 
    CN_RegisterItem(Handle:hPluginiParams)
    {
        
    decl String:szItemName[16];
        if (
    GetNativeString(1szItemNamesizeof(szItemName)) == SP_ERROR_NONE)
        {
            
    decl String:szItemDescription[64];
            if (
    GetNativeString(2szItemDescriptionsizeof(szItemDescription)) == SP_ERROR_NONE)
            {
                
    AddMenuItem(g_hGlobalMenuszItemNameszItemDescription);

                return 
    g_iItemID++;
            }
        }

        return -
    1;
    }

    // В ядре же и регаешь команду, в которой и показываешь меню игроу DisplayMenu(g_hGlobal...)

    // инклюдик test.inc
    #if defined _stats_included
        #endinput
    #endif
    #define _stats_included

    native TEST_RegisterItem(const String:szItemName[], const String:szItemDecription[]);


    // плагин
    #include <test>

    new g_iItemID = -1;

    public 
    OnPluginStart()
    {
        if ((
    g_iItemID TEST_RegisterItem("test""test_desc")) != -1)
        {
            
    // плагин зарегистрирован
        
    }
    }

    Добавлено через 3 минуты
    Если хочешь отловить, когда клиент нажмет опцию, то создаешь глобальное событие (к примеру: g_hOnItemPressed = CreateGlobalForward("TEST_OnItemPressed", ET_Ignore, Param_Cell, Param_Cell, Param_String, Param_String);)
    Далее, в callback меню, то есть MenuHandler главного меню, созданного в ядре, делаешь следующее
    PHP:
    Call_StartForward(g_hOnItemPressed);
    Call_PushCell(iParam1);
    Call_PushCell(iParam2);
    Call_PushString(szItemName);
    Call_PushString(szItemDescription);
    Call_Finish();
    Соответственно, далее используешь forward в другом плагине. Ну может как-то по другому можно сделать

    Добавлено через 5 минут
    Событие: world(дефис)source(точка)ru/forum/100-2382-1
    Меню: world(дефис)source(Точка)ru/forum/100-2299-1
    Функция: world(дефис)ource(Точка)ru/forum/100-2455-1
     
    Последнее редактирование: 5 июн 2015
    Саша Шеин нравится это.
  3. Саша Шеин

    Саша Шеин

    Сообщения:
    1.258
    Симпатии:
    191
    Спасибо, домой приеду займусь.
     
  4. DexKekcuk #13

    DexKekcuk #13

    Сообщения:
    638
    Симпатии:
    70
    Давай, давай, Санёк!) Модели легче тестить)
     
  5. Саша Шеин

    Саша Шеин

    Сообщения:
    1.258
    Симпатии:
    191
    Оффтоп Согласен! Но обнова походу будет не скоро....:(:(:(
     
  6. DexKekcuk #13

    DexKekcuk #13

    Сообщения:
    638
    Симпатии:
    70
    Ошибочка! Ну чтож будем ждать!)
     
  7. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.977
    Alex Tarasenko, советую создать в ядре форвард загрузки и готовности, а в нем уже в модулях нативом добавлять.
     
  8. Саша Шеин

    Саша Шеин

    Сообщения:
    1.258
    Симпатии:
    191
    R1KO, не понял :( напиши пример. :)
     
  9. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.977
    Саша Шеин, когда ядро запустилось, подготовило переменные, создало меню и массивы, загеристрировало команды и прочее пусть создает событие Tag_OnLoaded();
    А модули уже в этом событии пусть делают что им нужно.
    Например у меня в випе при каждой смене карты очищаются все массивы, все меню, а потом создаю событие VIP_OnLoaded() кажется, не помню уже. И модули регистрируют все свои ф-и именно в этом событии, потому что это грарантирует безопасность, т.к. меню уже создано 100% ну и прочее.
    А то может выйти что ядро не создало меню или массив, или же не очистило, а модуль запишет туда и будут ошибки.
     
  10. Саша Шеин

    Саша Шеин

    Сообщения:
    1.258
    Симпатии:
    191
    R1KO, то есть можно использовать Army_OnLoaded(); В OnPlyginStart(); ? Или как =(
     
  11. DexKekcuk #13

    DexKekcuk #13

    Сообщения:
    638
    Симпатии:
    70
    R1KO, Слушай, я вот тут подумал, а можно ли сделать вот так:
    У всех игроков есть стандартный скин. Можно ли изъять определенную координату, и к ней привязать material? Допустим сделать картинку звания, и на шлеме, на Плече будет отображаться звания игроков?)

    Сложно будет такое реализовываться??
     
  12. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.977
    Alex Tarasenko, честно - не знаю.
     
  13. DexKekcuk #13

    DexKekcuk #13

    Сообщения:
    638
    Симпатии:
    70
    Что-то типо такого!)

    [​IMG]

    Вообще по идее это такой скин, а я вот раздумываю можно ли сделать так взяв координаты...

    Добавлено через 9 минут
    Вообще плагин называется [CSS] Skin Save Rank Nick для евентскрипта, но вот идейка пришла в голову сюда как нибудь присунуть его!)
     
    Последнее редактирование: 5 июн 2015
  14. Саша Шеин

    Саша Шеин

    Сообщения:
    1.258
    Симпатии:
    191
    Можно попробовать сделать это на подобие [CSS] Hats, но хз...
     
  15. DexKekcuk #13

    DexKekcuk #13

    Сообщения:
    638
    Симпатии:
    70
    Я тут недавно где то читал плагин такой, типо над админом какая то фигня над головой? Может так же реализовать над игроков будет висеть каринка с его званием, такое то возможно я думаю..
     
  16. Саша Шеин

    Саша Шеин

    Сообщения:
    1.258
    Симпатии:
    191
    Alex Tarasenko, конечно возможно.
     
  17. neatek3

    neatek3

    Сообщения:
    124
    Симпатии:
    127
    Можно лучше сделать.. Для каждого звания замутить модели) значки, и прикрепить их на тело.
    И зафигачить их вон в кармашек например)))

    [​IMG]

    А если бы можно было менять текстурки у модели... в реалтайме :(
     
  18. DexKekcuk #13

    DexKekcuk #13

    Сообщения:
    638
    Симпатии:
    70
    ну вот я что и думал, сделать материалс значки, и цеплять их на тело. За то за что можно зафиксировать её..

    Добавлено через 6 минут
    Но мне кажется все таки реализовать чтоб звание было вилно всем над головой, было бы покруче)
     
    Последнее редактирование: 5 июн 2015
  19. ThreshHNS

    ThreshHNS

    Сообщения:
    228
    Симпатии:
    25
    Alex Tarasenko, будет мешать,лично для меня точно.
     
  20. DexKekcuk #13

    DexKekcuk #13

    Сообщения:
    638
    Симпатии:
    70
    Чем тебе будет мешать висящая сверху картинка? Я понимаю скины лдей отвлекают, но просто бегай и не обращай внимание..

    Добавлено через 8 минут
    Поэтому и делается модульный плагин.. Можно сделать один вид, а можно и второй вид сделать было бы..)
     
    Последнее редактирование: 5 июн 2015