[CS: Source] Happy New Year 2k15

Статус
В этой теме нельзя размещать новые ответы.

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Happy New Year 2k15

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

pBF3JAI.gif

Описание:
Является полностью переписанным 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 секунды. Снежок при попадании никак не влияет ни на что и ничего не делает, просто забава.

attachment.php

attachment.php
Требования:
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
 

Вложения

  • 2000_v20003.jpg
    2000_v20003.jpg
    89.7 КБ · Просмотры: 687
  • rsz_1rsz_2000_v20002.jpg
    rsz_1rsz_2000_v20002.jpg
    46.3 КБ · Просмотры: 713
  • HappyNewYear_v3_models.rar
    3.6 МБ · Просмотры: 312
  • HappyNewYear_v3-1.smx
    19 КБ · Просмотры: 205
  • HappyNewYear_v3-1.sp
    25.2 КБ · Просмотры: 211
Последнее редактирование:

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

Участник
Сообщения
111
Реакции
14
спасибо бро:) ,хм подарки блочат,по 3 елки спавнит,креды не выдает....
 
Последнее редактирование:

Tonki_Ton

Script kiddie
Сообщения
614
Реакции
375
Да на ксго определенно требуется фикс, т.к. по три елки, и снеговика спавнит + сервер ложит
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
спасибо бро:) ,хм подарки блочат,по 3 елки спавнит,креды не выдает....

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

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

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

Да на ксго определенно требуется фикс, т.к. по три елки, и снеговика спавнит + сервер ложит

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

Tonki_Ton

Script kiddie
Сообщения
614
Реакции
375
То что подарки блочат - не исправить, ибо будут проблемы с физикой.
Кредиты должно выдавать, если нет - скомпили с своим инклюдом шопа.



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



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

ну вот лог есть

[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 раза сервер крашнул - удалил :)
 

komashchenko

Идиот
Сообщения
916
Реакции
2,569
Попробую 1 раз прокомментировать плагин
PHP:
public OnConfigsExecuted()
{
    RegAdminCmd("tree", CreateTree, ADMFLAG_ROOT);
    RegAdminCmd("del", DeleteTree, ADMFLAG_ROOT);
    if (GetConVarBool(cvarSnowMan))        RegAdminCmd("snowman", CreateSnowman, ADMFLAG_ROOT);
    if (GetConVarBool(cvarLargeTree))    RegAdminCmd("large", CreateLarge, ADMFLAG_ROOT);
    if (GetConVarBool(cvarSnowBall))        {RegConsoleCmd("snow", Snow);RegConsoleCmd("sm_snow", Snow);}
    if (GetConVarBool(cvarGift))         RegAdminCmd("sm_gift",GiftMe, ADMFLAG_ROOT);
так делать нельзя ибо после каждой смены карты, при вводе команды 1 и тоже событие будет выполняться несколько раз, с таймером у тя точно также либо убивай его или запускай ток 1 раз


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

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
1800 строк против 680
Это вот так:
PHP:
public Action:GiftMe(client, args){CreateTimer(0.1, Gift, client);return Plugin_Continue;}
Причём, вместо нужного return Plugin_Handled; :-D Оффтоп
 

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
Danyas, сделай другую модель подарка, то что была в оригинале плахая. Оффтоп
PHP:
SpawnGift(Float:fPos[3], Float:fTime)
{
    new iEntity = CreateEntityByName("prop_dynamic");
    if (iEntity)
    {
        new String:sTargetName[32],
            String:sBufer[70];
        Format(sTargetName, sizeof(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(iEntity, Prop_Send, "m_usSolidFlags", 8);
        SetEntProp(iEntity, Prop_Send, "m_CollisionGroup", 1);
        Format(sBufer, sizeof(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", iRotating, iRotating);
        AcceptEntityInput(iRotating, "Start", -1, -1);
        SetEntProp(iRotating, Prop_Send, "m_CollisionGroup", 1);
        Format(sBufer, sizeof(sBufer), "OnUser1 !self:kill::%0.2f:-1", fTime);
        SetVariantString(sBufer);
        AcceptEntityInput(iRotating, "AddOutput");
        AcceptEntityInput(iRotating, "FireUser1");
        
        SetEntPropEnt(iEntity, Prop_Send, "m_hEffectEntity", iRotating);
        
        SDKHook(iEntity, SDKHook_StartTouch, Hook_GiftStartTouch);
    }
}

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

    AcceptEntityInput(iEnti, "Kill");
}
 
N

NiGaByte

Это вот так:
PHP:
public Action:GiftMe(client, args){CreateTimer(0.1, Gift, client);return Plugin_Continue;}
Причём, вместо нужного return Plugin_Handled; :-D Оффтоп

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

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

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Это вот так:
PHP:
public Action:GiftMe(client, args){CreateTimer(0.1, Gift, client);return Plugin_Continue;}
Причём, вместо нужного return Plugin_Handled; :-D
Так а зачем там возврат нужен?)

Попробую 1 раз прокомментировать плагин
PHP:
public OnConfigsExecuted()
{
    RegAdminCmd("tree", CreateTree, ADMFLAG_ROOT);
    RegAdminCmd("del", DeleteTree, ADMFLAG_ROOT);
    if (GetConVarBool(cvarSnowMan))        RegAdminCmd("snowman", CreateSnowman, ADMFLAG_ROOT);
    if (GetConVarBool(cvarLargeTree))    RegAdminCmd("large", CreateLarge, ADMFLAG_ROOT);
    if (GetConVarBool(cvarSnowBall))        {RegConsoleCmd("snow", Snow);RegConsoleCmd("sm_snow", Snow);}
    if (GetConVarBool(cvarGift))         RegAdminCmd("sm_gift",GiftMe, ADMFLAG_ROOT);
так делать нельзя ибо после каждой смены карты, при вводе команды 1 и тоже событие будет выполняться несколько раз, с таймером у тя точно также либо убивай его или запускай ток 1 раз


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

Danyas,
PHP:
SpawnGift(Float:fPos[3], Float:fTime)
{
    new iEntity = CreateEntityByName("prop_dynamic");
    if (iEntity)
    {
        new String:sTargetName[32],
            String:sBufer[70];
        Format(sTargetName, sizeof(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(iEntity, Prop_Send, "m_usSolidFlags", 8);
        SetEntProp(iEntity, Prop_Send, "m_CollisionGroup", 1);
        Format(sBufer, sizeof(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", iRotating, iRotating);
        AcceptEntityInput(iRotating, "Start", -1, -1);
        SetEntProp(iRotating, Prop_Send, "m_CollisionGroup", 1);
        Format(sBufer, sizeof(sBufer), "OnUser1 !self:kill::%0.2f:-1", fTime);
        SetVariantString(sBufer);
        AcceptEntityInput(iRotating, "AddOutput");
        AcceptEntityInput(iRotating, "FireUser1");
        
        SetEntPropEnt(iEntity, Prop_Send, "m_hEffectEntity", iRotating);
        
        SDKHook(iEntity, SDKHook_StartTouch, Hook_GiftStartTouch);
    }
}

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

    AcceptEntityInput(iEnti, "Kill");
}
Спасибо, добавлю
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Так а зачем там возврат нужен?)
Ru:Introduction to SourceMod Plugins:
"...По умолчанию функция ввода консольных команд заключается в том, чтобы ответить о неизвестной команде. Чтобы заблокировать эту функцию, вы должны создать новое действие:"
PHP:
public Action:Command(client, args)
{
	return Plugin_Handled;
}
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Ru:Introduction to SourceMod Plugins:
"...По умолчанию функция ввода консольных команд заключается в том, чтобы ответить о неизвестной команде. Чтобы заблокировать эту функцию, вы должны создать новое действие:"
PHP:
public Action:Command(client, args)
{
	return Plugin_Handled;
}

Понял, спасибо.
Оффтоп
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Обновил до 3.1

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

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

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

Участник
Сообщения
111
Реакции
14
наставил елок больших и маленьких,начался новый раунд они исчезли.....после рестарта все норм:)
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
С 161 по 172-ю строчку есть закомментированный код, который добавляет свечение для подарка.
Он собственно работает, только вот проблема заключается в том, что я не знаю как его убирать
Всё элементарно:
C-подобный:
new [B]index5[/B] = CreateEntityByName("env_sprite");
У тебя есть индекс эффекта (объекта) - просто сделай AcceptEntityInput(index5, "Kill");, когда он не нужен. Само собой, индексы придётся хранить.
Чтобы не заниматься этим...
после поднятия подарка свечение пропадало
Попробуй вместо:
PHP:
AcceptEntityInput(index5, "SetParent", iEntity, index5, 0);
Поставить:
PHP:
SetVariantString("!activator");
AcceptEntityInput(index5, "SetParent", iEntity);
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Есть идея) За неправильный ответ на задачку тоже иногда выдавать подарок, а нём - гранату без чеки. :acute: Якобы ответ верен, забираешь - опа, граната, но чего-то не берётся... И тут она взрывается под носом. :shok:
Типа: "Учи алгебру, геймер!". :-D Оффтоп
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Есть идея) За неправильный ответ на задачку тоже иногда выдавать подарок, а нём - гранату без чеки. :acute: Якобы ответ верен, забираешь - опа, граната, но чего-то не берётся... И тут она взрывается под носом.
Типа: "Учи алгебру, геймер!". :-D

Сразу было такое желание, если честно :-D

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