Изменение плагина

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

  1. mzeke

    mzeke

    Сообщения:
    54
    Симпатии:
    4
    Здравствуйте.

    Мы имеем код:

    Код:
    PerformFade(attacker, 300, {0, 0, 200, 51});
    Нужно сделать чтобы значения 300, {0, 0, 200, 51} считывались из конфига /addons/sourcemod/configs/plg.cfg

    чтобы при желании сменить значения не компилировать плагин заново.

    Заранее спасибо.
     
  2. R1KO

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

    Сообщения:
    5.988
    Симпатии:
    2.986
    mzeke, структура конфига? Может лучше квар?
     
    mzeke нравится это.
  3. mzeke

    mzeke

    Сообщения:
    54
    Симпатии:
    4
    R1KO,
    Код:
    #include <sourcemod>
    
    public Plugin:myinfo = 
    {
    name = "Blue Screen of Kill",
    author = "johnspade",
    description = "The plugin fades the screen to transparent blue for a second when you kill someone",
    version = "1.0",
    url = "http://johnspade.ru"
    }
    // Получение события смерти
    public OnPluginStart()
    {
    HookEvent("player_death", Event_PlayerDeath);
    }
    // Функция затемнения
    PerformFade(client, duration, const color[4]) {
    new Handle:hFadeClient=StartMessageOne("Fade",client)
    BfWriteShort(hFadeClient,duration)
    BfWriteShort(hFadeClient,0)
    BfWriteShort(hFadeClient,(0x0001))
    BfWriteByte(hFadeClient,color[0])
    BfWriteByte(hFadeClient,color[1])
    BfWriteByte(hFadeClient,color[2])
    BfWriteByte(hFadeClient,color[3])
    EndMessage()
    }
    // Получение игрока-убийцы, применение к нему функции затемнения
    public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
    {
    new attacker_id = GetEventInt(event, "attacker");
    new attacker = GetClientOfUserId(attacker_id);
    PerformFade(attacker, 300, {0, 0, 200, 51});
    // PerformFade(клиент, продолжительность, {красный, зеленый, синий, прозрачность})
    }
    Что такое квар?

    В итоге должно получиться что-то типа того:

    Код:
    Содержимое конфига:
    screen_red "0" //красный
    screen_green "0" //зеленый
    screen_blue "200" //синий
    screen_duration "300" //продолжительность
    screen_transparency "300" //прозрачность
    Можно ли так сделать?
     
  4. AlmazON

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

    Сообщения:
    4.528
    Симпатии:
    1.974
    [CS:S] Blue Screen of Kill v1.1

    Квары:
    Файл настроек BlueScreenKill.cfg появится после запуска плагина по пути cstrike\cfg\sourcemod
    PHP:
    public Plugin:myinfo 
    {
        
    name "Blue Screen of Kill",
        
    author "johnspade",
        
    description "The plugin fades the screen to transparent blue for a second when you kill someone",
        
    version "1.1",
        
    url "http://johnspade.ru"
    }

    new 
    iDurationiRediGreeniBlueiTransparency;
    public 
    OnPluginStart()
    {
        
    // Получение события смерти
        
    HookEvent("player_death"Event_PlayerDeath);
        
    decl Handle:convar;
        
    HookConVarChange(convar=CreateConVar("screen_duration",        "300",        "Продолжительность.",_true0.0),Duration);
        
    iDuration GetConVarInt(convar);
        
    HookConVarChange(convar=CreateConVar("screen_red",            "0",        "Красный цвет.",_true0.0true255.0),Red);
        
    iRed GetConVarInt(convar);
        
    HookConVarChange(convar=CreateConVar("screen_green",        "0",        "Зелёный цвет.",_true0.0true255.0),Green);
        
    iGreen GetConVarInt(convar);
        
    HookConVarChange(convar=CreateConVar("screen_blue",            "200",        "Синий цвет.",_true0.0true255.0),Blue);
        
    iBlue GetConVarInt(convar);
        
    HookConVarChange(convar=CreateConVar("screen_transparency",    "255",        "Прозрачность.",_true0.0true255.0),Transparency);
        
    iTransparency GetConVarInt(convar);
        
    CloseHandle(convar);
        
    AutoExecConfig(true"BlueScreenKill");
    }

    public 
    Duration(Handle:convarString:oldValue[], String:newValue[]) iDuration GetConVarInt(convar);
    public 
    Red(Handle:convarString:oldValue[], String:newValue[]) iRed GetConVarInt(convar);
    public 
    Green(Handle:convarString:oldValue[], String:newValue[]) iGreen GetConVarInt(convar);
    public 
    Blue(Handle:convarString:oldValue[], String:newValue[]) iBlue GetConVarInt(convar);
    public 
    Transparency(Handle:convarString:oldValue[], String:newValue[]) iTransparency GetConVarInt(convar);

    // Получение игрока-убийцы, применение к нему функции затемнения
    public Event_PlayerDeath(Handle:eventString:name[], bool:dontBroadcast)
    {
        new 
    attacker GetClientOfUserId(GetEventInt(event"attacker"));
        if(
    attacker)
        {
            
    BfWriteShort(event=StartMessageOne("Fade",attacker),iDuration);
            
    BfWriteShort(event,0);
            
    BfWriteShort(event,0x0001);
            
    BfWriteByte(event,iRed);
            
    BfWriteByte(event,iGreen);
            
    BfWriteByte(event,iBlue);
            
    BfWriteByte(event,iTransparency);
            
    EndMessage();
        }
    }
     
    Hejter и mzeke нравится это.
  5. mzeke

    mzeke

    Сообщения:
    54
    Симпатии:
    4
    AlmazON, Все работает как надо. Спасибо большое))
     
  6. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Re: [CS:S] Blue Screen of Kill v1.1

    Оффтоп
     
  7. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Re: [CS:S] Blue Screen of Kill v1.1

    Оффтоп
     
    AlmazON нравится это.
  8. AlmazON

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

    Сообщения:
    4.528
    Симпатии:
    1.974
    [CS:GO/CS:S] Blue Screen of Kill v1.2

    Квары:
    Файл настроек BlueScreenKill.cfg появится после запуска плагина по пути cstrike\cfg\sourcemod
    PHP:
    public Plugin:myinfo 
    {
        
    name "Blue Screen of Kill",
        
    author "johnspade",
        
    description "The plugin fades the screen to transparent blue for a second when you kill someone",
        
    version "1.2",
        
    url "http://johnspade.ru"
    }

    new 
    iDurationiColor[4];
    public 
    OnPluginStart()
    {
        
    decl String:f[5];
        
    GetGameFolderName(f5);
        if(
    strcmp(f"csgo")) HookEvent("player_death"Event_PlayerDeath);
        else 
    HookEvent("player_death"Event_PlayerDeath_GO);
        
    decl Handle:convar;
        
    HookConVarChange(convar=CreateConVar("screen_duration",        "300",        "Продолжительность.",_true0.0),Duration);
        
    iDuration GetConVarInt(convar);
        
    HookConVarChange(convar=CreateConVar("screen_red",            "0",        "Красный цвет.",_true0.0true255.0),Red);
        
    iColor[0] = GetConVarInt(convar);
        
    HookConVarChange(convar=CreateConVar("screen_green",        "0",        "Зелёный цвет.",_true0.0true255.0),Green);
        
    iColor[1] = GetConVarInt(convar);
        
    HookConVarChange(convar=CreateConVar("screen_blue",            "200",        "Синий цвет.",_true0.0true255.0),Blue);
        
    iColor[2] = GetConVarInt(convar);
        
    HookConVarChange(convar=CreateConVar("screen_transparency",    "255",        "Прозрачность.",_true0.0true255.0),Transparency);
        
    iColor[3] = GetConVarInt(convar);
        
    CloseHandle(convar);
        
    AutoExecConfig(true"BlueScreenKill");
    }

    public 
    Duration(Handle:convarString:oldValue[], String:newValue[]) iDuration GetConVarInt(convar);
    public 
    Red(Handle:convarString:oldValue[], String:newValue[]) iColor[0] = GetConVarInt(convar);
    public 
    Green(Handle:convarString:oldValue[], String:newValue[]) iColor[1] = GetConVarInt(convar);
    public 
    Blue(Handle:convarString:oldValue[], String:newValue[]) iColor[2] = GetConVarInt(convar);
    public 
    Transparency(Handle:convarString:oldValue[], String:newValue[]) iColor[3] = GetConVarInt(convar);

    // Получение игрока-убийцы, применение к нему функции затемнения
    public Event_PlayerDeath(Handle:eventString:name[], bool:dontBroadcast)
    {
        new 
    attacker GetClientOfUserId(GetEventInt(event"attacker"));
        if(
    attacker)
        {
            
    BfWriteShort(event=StartMessageOne("Fade",attacker),iDuration);
            
    BfWriteShort(event,0);
            
    BfWriteShort(event,0x0001);
            
    BfWriteByte(event,iColor[0]);
            
    BfWriteByte(event,iColor[1]);
            
    BfWriteByte(event,iColor[2]);
            
    BfWriteByte(event,iColor[3]);
            
    EndMessage();
        }
    }
    // Получение игрока-убийцы, применение к нему функции затемнения
    public Event_PlayerDeath_GO(Handle:eventString:name[], bool:dontBroadcast)
    {
        new 
    attacker GetClientOfUserId(GetEventInt(event"attacker"));
        if(
    attacker)
        {
            
    PbSetInt(event=StartMessageOne("Fade",attacker),"duration",iDuration);
            
    PbSetInt(event,"hold_time",0);
            
    PbSetInt(event,"flags",0x0001|0x0010);
            
    PbSetColor(event,"clr",iColor);
            
    EndMessage();
        }

    P.S. По личной просьбе mzeke.
     
    mzeke нравится это.
  9. mzeke

    mzeke

    Сообщения:
    54
    Симпатии:
    4
    AlmazON, еще раз спасибо.

    Добавлено через 21 час 52 минуты
    AlmazON, можно ли компилировать плагин на сайте sourcemod?

    Пишет SourcePawn Compiler 1.7.0. Не будет проблем на 1.6.x?
     
    Последнее редактирование: 27 мар 2015