[CS: Source] Happy New Year 2k15

Тема в разделе "Новые плагины", создана пользователем Danyas, 27 дек 2015.

Статус темы:
Закрыта.
  1. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.718
    Симпатии:
    458
    Happy New Year 2k15

    Текущая версия: v3.0

    [​IMG]

    Описание:
    Является полностью переписанным http://hlmod.ru/forum/novye-plaginy/14463-new-year-tree-2-2-a.html, со всеми возможными исправлениями и фиксами.
    • Викторина, вопросы задаются раз в минуту
    • Спавн ёлок через меню, справнит теперь по одной, корректно сохраняет


      Проведена глобальная оптимизация плагина:
    • 1800 строк против 680
    • 13 глобальных переменных + 23 глобальных handle против 4 глобальных переменных+ 7 глобальных handle (6 кваров + 1 для файла)
    • Исправлен таймер с викторины, который давал нагрузку

    У плагина есть три основные функции:
    1. Спавн. (ёлок, больших ёлок и снеговиков)
      Координаты автоматически сохраняются в конфиге cstrike/cfg/newyear/название_карты.cfg

    2. Выдача подарков.

      Подарок падает при правильном ответе на викторину, через админку, либо после смерти игрока.
      В подарке может быть:
      1. Получение денег до 5000$ либо потеря до 500$
      2. Получение +2 фрага в счет либо вычитание 2х смертей
      3. Выдача здоровья. 5-10HP либо 10-20HP либо 25-50HP. Шанс одинаковый.
      4. Выдача случайной гранаты
      5. Установка скорости от 90% до 120%
      6. Кредиты (Если есть http://hlmod.ru/forum/shop/14487-shop-core-v2-0-22-a.html)
        • 10% на получение 1-5 кредитов
        • 40% на получение 5-25 кредитов
        • 20% на получение 25-75 кредитов
        • 15% на получение 75-150 кредитов
        • 14% на получение 150-250
        • 1% - получение джекпота
          • Джекпот: 250 кредитов
          • Джекпот: 500 кредитов
          • Джекпот: 1000 кредитов
          • Джекпот: 0 кредитов P.S. порванный лотерейный билет :-D
      7. Ничего :P
    3. Викторина.
      Каждые 60 секунд дедушка будет задавать игрокам арифметическую задачу. Если ответить ему правильно, то около Вас появится подарок. Подарок дается только первому ответившему правильно. Ответ нужно дать за 15 секунд после того, как вопрос будет задан.
    4. Снежки.
      Если игрок напишет !snow, то из него вылетит комок снега. К сожалению это пока не похоже не "снежок", скорее на ком. Просто нету другой модельки ;) После вылета снежок исчезнет через 3 секунды. Снежок при попадании никак не влияет ни на что и ничего не делает, просто забава.

    [​IMG]
    [​IMG]
    Требования:
    Sourcemod 1.4+
    Colors
    Для работы выдачи кредитов нужен: http://hlmod.ru/forum/shop/14487-shop-core-v2-0-22-a.html
    Поддерживаются игры:
    CS:S v34
    CS:S Steam
    Частично будет работать CSGO, нужно несколько фиксов.

    Установка:
    1. Распаковать плагин в папку cstrike/addons/sourcemod/plugins
    2. Распаковать модели из папки server в папку с сервером cstrike/
      Из папки fastdl можно загрузить уже файлы готовые для быстрой закачки с сервера, по возможностью залейте их на fastdl
    3. Настроить под себя переменные в файлеcstrike/cfg/newyear/newyear.cfg
    4. Перезапустить сервер \ сменить карту

    Команды:
    tree - спавн Ёлки
    large - Большой ёлки
    snowman - Снеговика
    del - удаление Ёлок\Снеговика

    Переменные:
    ny_snowman - снеговики
    ny_large - большие ёлки
    ny_snowball - снежки
    ny_light - гирлянда на ёлках
    ny_gift - выдача подарков
    ny_gsanta - выдача подарков с викторины

    В файл cstrike/addons/sourcemod/configs/adminmenu_custom.txt вставляем на предпоследней строчке, перед "}"
    PHP:
        "Новый год - v3"
        
    {
        
            
    "Удалить созданный предмет"
            
    {
                
    "cmd" "sm_gift"
            
    }
            
            
    "Заспавнить подарок"
            
    {
                
    "cmd" "sm_gift"
            
    }
            
            
    "Создать ёлку"
            
    {
                
    "cmd" "tree"
            
    }
            
            
    "Создать большую ёлку"
            
    {
                
    "cmd" "large"
            
    }
            
            
    "Создать снеговика"
            
    {
                
    "cmd" "snowman"
            
    }
        }
    Если слишком сложно то просто замените файлом, который я прикрепил ниже
    3.0 - первый релиз
    3.1 - справлен спавн по 3 ёлки, теперь достаточно просто коснутся ёлки, подарки теперь крутятся. Серому спасибо за бонус-код :3
    Для благодарностей:
    R103979938766
    U243963065673

    Благодарности:
    AlmazON
    Серый™
    komashchenko
     

    Вложения:

    Последнее редактирование: 29 дек 2015
  2. Стасян Фетисов

    Стасян Фетисов

    Сообщения:
    112
    Симпатии:
    15
    спасибо бро:) ,хм подарки блочат,по 3 елки спавнит,креды не выдает....
     
    Последнее редактирование: 27 дек 2015
  3. Саша Шеин

    Саша Шеин

    Сообщения:
    1.259
    Симпатии:
    191
    Вот тут есть модель, будет наверно больше похожа на снежок - http://hlmod.ru/forum/otklonionnye-plaginy/23170-vip_deathrun.html
     
  4. Tonki_Ton

    Tonki_Ton

    Сообщения:
    317
    Симпатии:
    31
    Да на ксго определенно требуется фикс, т.к. по три елки, и снеговика спавнит + сервер ложит
     
  5. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.718
    Симпатии:
    458
    То что подарки блочат - не исправить, ибо будут проблемы с физикой.
    Кредиты должно выдавать, если нет - скомпили с своим инклюдом шопа.

    Хорошо, позже сделаю квар для моделек.

    Спавн по три ёлки я вроде как исправил. А сервер как и когда ложит?
     
  6. Tonki_Ton

    Tonki_Ton

    Сообщения:
    317
    Симпатии:
    31
    ну вот лог есть

    [SM] Plugin encountered error 21: Native is not bound
    [SM] Native "BfWriteByte" reported:
    [SM] Displaying call stack trace for plugin "HappyNewYear_v3.smx":
    [SM] [0] Line 347, C:\Program Files\PawnPad++\scripting\include\colors.inc::CSayText2()
    [SM] [1] Line 74, C:\Program Files\PawnPad++\scripting\include\colors.inc::CPrintToChat()
    [SM] [2] Line 96, C:\Program Files\PawnPad++\scripting\include\colors.inc::CPrintToChatAll()
    [SM] [3] Line 591, HappyNewYear_v3.sp::Question()

    поставил плаг, за 15 минут 3 раза сервер крашнул - удалил :)
     
  7. komashchenko

    komashchenko

    Сообщения:
    479
    Симпатии:
    421
    Попробую 1 раз прокомментировать плагин
    PHP:
    public OnConfigsExecuted()
    {
        
    RegAdminCmd("tree"CreateTreeADMFLAG_ROOT);
        
    RegAdminCmd("del"DeleteTreeADMFLAG_ROOT);
        if (
    GetConVarBool(cvarSnowMan))        RegAdminCmd("snowman"CreateSnowmanADMFLAG_ROOT);
        if (
    GetConVarBool(cvarLargeTree))    RegAdminCmd("large"CreateLargeADMFLAG_ROOT);
        if (
    GetConVarBool(cvarSnowBall))        {RegConsoleCmd("snow"Snow);RegConsoleCmd("sm_snow"Snow);}
        if (
    GetConVarBool(cvarGift))         RegAdminCmd("sm_gift",GiftMeADMFLAG_ROOT);
    так делать нельзя ибо после каждой смены карты, при вводе команды 1 и тоже событие будет выполняться несколько раз, с таймером у тя точно также либо убивай его или запускай ток 1 раз


    HookEvent("player_say", say); вместо этого можно использовать https://sm.alliedmods.net/new-api/console/OnClientSayCommand_Post
    P.S. ет токо то что я увидел в самом начале
     
  8. AlmazON

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

    Сообщения:
    4.523
    Симпатии:
    1.972
    Это вот так:
    PHP:
    public Action:GiftMe(clientargs){CreateTimer(0.1Giftclient);return Plugin_Continue;}
    Причём, вместо нужного return Plugin_Handled; :-D Оффтоп
     
  9. Серый™

    Серый™ CS:S Server

    Сообщения:
    2.564
    Симпатии:
    1.149
    Danyas, сделай другую модель подарка, то что была в оригинале плахая. Оффтоп
    PHP:
    SpawnGift(Float:fPos[3], Float:fTime)
    {
        new 
    iEntity CreateEntityByName("prop_dynamic");
        if (
    iEntity)
        {
            new 
    String:sTargetName[32],
                
    String:sBufer[70];
            
    Format(sTargetNamesizeof(sTargetName), "xmasgift_%i"iEntity);
            
    DispatchKeyValueVector(iEntity"origin"fPos);
            
    DispatchKeyValue(iEntity"solid""6");
            
    DispatchKeyValue(iEntity"model"g_sGift);
            
    DispatchKeyValue(iEntity"targetname"sTargetName);
            
    SetVariantString(sTargetName);
            
    DispatchSpawn(iEntity);
            
    SetEntProp(iEntityProp_Send"m_usSolidFlags"8);
            
    SetEntProp(iEntityProp_Send"m_CollisionGroup"1);
            
    Format(sBufersizeof(sBufer), "OnUser1 !self:kill::%0.2f:-1"fTime);
            
    SetVariantString(sBufer);
            
    AcceptEntityInput(iEntity"AddOutput");
            
    AcceptEntityInput(iEntity"FireUser1");
            
            new 
    iRotating CreateEntityByName("func_rotating", -1);
            
    DispatchKeyValueVector(iRotating"origin"fPos);
            
    DispatchKeyValue(iRotating"targetname"sTargetName);
            
    DispatchKeyValue(iRotating"maxspeed""180");
            
    DispatchKeyValue(iRotating"friction""0");
            
    DispatchKeyValue(iRotating"dmg""0");
            
    DispatchKeyValue(iRotating"solid""0");
            
    DispatchKeyValue(iRotating"spawnflags""64");
            
    DispatchSpawn(iRotating);
            
    SetVariantString("!activator");
            
    AcceptEntityInput(iEntity"SetParent"iRotatingiRotating);
            
    AcceptEntityInput(iRotating"Start", -1, -1);
            
    SetEntProp(iRotatingProp_Send"m_CollisionGroup"1);
            
    Format(sBufersizeof(sBufer), "OnUser1 !self:kill::%0.2f:-1"fTime);
            
    SetVariantString(sBufer);
            
    AcceptEntityInput(iRotating"AddOutput");
            
    AcceptEntityInput(iRotating"FireUser1");
            
            
    SetEntPropEnt(iEntityProp_Send"m_hEffectEntity"iRotating);
            
            
    SDKHook(iEntitySDKHook_StartTouchHook_GiftStartTouch);
        }
    }

    public 
    Hook_GiftStartTouch(iEntityiClient)
    {
        if (
    iClient && iClient <= MaxClients)
        {
               
    свой код
               DelEnti
    (iEntity);
         }
    }
    DelEnti(iEnti)
    {
        if(!
    IsValidEdict(iEnti))
            return;
        
       new 
    iRotating GetEntPropEnt(iEntiProp_Send"m_hEffectEntity");
        if(
    iRotating && IsValidEdict(iRotating))
              
    AcceptEntityInput(iRotating"Kill");

        
    AcceptEntityInput(iEnti"Kill");
    }
     
  10. NiGaByte

    NiGaByte

    Сообщения:
    501
    Симпатии:
    84
    Хах, дайте мне ZP, я его блокнотом в 1 строчку... ну эт, ну вы поняли...

    По теме: Ну красаучиг, если пофиксил, по CSGO скоро жди инфы, всё я спать!
     
  11. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.718
    Симпатии:
    458
    Так а зачем там возврат нужен?)

    Спасибо, в этом и заключался баг со спавном)
    На счет say'a - оставлю как есть, для совместимости с SM 1.4

    Спасибо, добавлю
     
  12. AlmazON

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

    Сообщения:
    4.523
    Симпатии:
    1.972
    Ru:Introduction to SourceMod Plugins:
    "...По умолчанию функция ввода консольных команд заключается в том, чтобы ответить о неизвестной команде. Чтобы заблокировать эту функцию, вы должны создать новое действие:"
    PHP:
    public Action:Command(clientargs)
    {
        return 
    Plugin_Handled;
    }
     
  13. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.718
    Симпатии:
    458
    Понял, спасибо.
    Оффтоп
     
  14. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.718
    Симпатии:
    458
    Обновил до 3.1

    Некоторые ошибки исправил, некоторые добавил
    Теперь деревья не посмеют спавнится "по три".
    Для работы на CSGO замените библиотеку цветов

    Скриптеры, прощу помощи.
    С 161 по 172-ю строчку есть закомментированный код, который добавляет свечение для подарка.
    Он собственно работает, только вот проблема заключается в том, что я не знаю как его убирать.
    Раньше, через HookSingleEntityOutput можно было в последнем параметре поставить 1 и после поднятия подарка свечение пропадало, а сейчас остается.
     
  15. Стасян Фетисов

    Стасян Фетисов

    Сообщения:
    112
    Симпатии:
    15
    наставил елок больших и маленьких,начался новый раунд они исчезли.....после рестарта все норм:)
     
    Последнее редактирование: 29 дек 2015
  16. AlmazON

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

    Сообщения:
    4.523
    Симпатии:
    1.972
    Всё элементарно:
    Код:
    new [B]index5[/B] = CreateEntityByName("env_sprite");
    У тебя есть индекс эффекта (объекта) - просто сделай AcceptEntityInput(index5, "Kill");, когда он не нужен. Само собой, индексы придётся хранить.
    Чтобы не заниматься этим...
    Попробуй вместо:
    PHP:
    AcceptEntityInput(index5"SetParent"iEntityindex50);
    Поставить:
    PHP:
    SetVariantString("!activator");
    AcceptEntityInput(index5"SetParent"iEntity);
     
  17. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.718
    Симпатии:
    458
    Спасибо большое, работает. :beer:
    Первый способ считаю слишком жрущий память, по этому от него отказаться.
     
  18. AlmazON

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

    Сообщения:
    4.523
    Симпатии:
    1.972
    Есть идея) За неправильный ответ на задачку тоже иногда выдавать подарок, а нём - гранату без чеки. :acute: Якобы ответ верен, забираешь - опа, граната, но чего-то не берётся... И тут она взрывается под носом. :shok:
    Типа: "Учи алгебру, геймер!". :-D Оффтоп
     
  19. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.718
    Симпатии:
    458
    Сразу было такое желание, если честно :-D

    Только в плане реализации - понятия не имею как это сделать.
    Были идеи нарисовать взрыв через TE_SetupExplosion и просто отнять здоровье, либо заспавнить henade_projectlie (?) понятия не имею что произойдет
     
  20. AlmazON

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

    Сообщения:
    4.523
    Симпатии:
    1.972
    Попробуй создать объект hegrenade_projectile на месте поднятого подарка. По сути, это и есть граната без чеки.
    Тут что-то об этом есть, код.
     
Статус темы:
Закрыта.