Запуск плагина в определенном раунде

Тема в разделе "Counter-Strike: Global Offensive", создана пользователем nikita1811, 22 янв 2016.

  1. nikita1811

    nikita1811

    Сообщения:
    86
    Симпатии:
    4
    Всем привет, есть ли способ запускать плагин в определенном раунде на картах?

    P.S Plugin Manager не подходит, надо чтобы плагин запускался сам (в определенном раунде) на всех картах.
     
  2. pashek71

    pashek71

    Сообщения:
    171
    Симпатии:
    18
    Определенный раунд это какой?
     
  3. nikita1811

    nikita1811

    Сообщения:
    86
    Симпатии:
    4
    Предположим в 5.
    Если не существует плагина под такие нужды, подскажите пожалуйста пример кода для запуска определенного события в нужном раунде.
     
  4. AlmazON

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

    Сообщения:
    4.566
    Симпатии:
    1.988
    Большинство плагинов не поддерживают "горячее" включение. Возможно поэтому:
     
  5. nikita1811

    nikita1811

    Сообщения:
    86
    Симпатии:
    4
    AlmazON, а конкретно в плагине это можно реализовать, запуск определенного события в нужном раунде? (если можно пример кода)
     
  6. AlmazON

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

    Сообщения:
    4.566
    Симпатии:
    1.988
    Оффтоп
     
  7. nikita1811

    nikita1811

    Сообщения:
    86
    Симпатии:
    4
    AlmazON, можно на примере этого vip плагина (по аналогии попробую сделать и в других плагинах)
    PHP:
    #include <sourcemod>
    #include <sdktools>
    #include <sdkhooks>
    #include <cstrike>

    #define ADMFLAG_NEEDED ADMFLAG_CUSTOM6

    #define DATA "2.0"

    public Plugin:myinfo =
    {
        
    name "SM Franug Vip Features",
        
    author "Franc1sco franug",
        
    description "Features for vips",
        
    version DATA,
        
    url "http://claninspired.com/"
    };

    new 
    Handle:trie_armas;

    new 
    Handle:timers[MAXPLAYERS+1];

    new 
    ACCOUNT_OFFSET;

    public 
    OnPluginStart()
    {
        
    CreateConVar("sm_franugvipfeatures_version"DATA""FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY);
        
        
    trie_armas CreateTrie();
        
        
    HookEvent("player_spawn"Event_PlayerSpawn);
        
    HookEvent("round_end"RoundEnd);
        
        
    ACCOUNT_OFFSET FindSendPropOffs("CCSPlayer""m_iAccount");
        
        for(new 
    1<= MaxClientsi++)
            if(
    IsClientInGame(i))
            {
                
    OnClientPutInServer(i);
                
    OnClientPostAdminCheck(i);
            }
    }

    public 
    OnClientPutInServer(client)
    {
        
    SDKHook(clientSDKHook_WeaponEquipPostEventItemPickup2);
    }

    public 
    OnClientPostAdminCheck(client)
    {
        if(
    GetUserFlagBits(client) & ADMFLAG_NEEDEDtimers[client] = CreateTimer(3.0DarmclientTIMER_REPEAT);
    }

    public 
    OnClientDisconnect(client)
    {
        if(
    timers[client] != INVALID_HANDLE)
        {
            
    KillTimer(timers[client]);
            
    timers[client] = INVALID_HANDLE;
        }
    }

    public 
    Action:Darm(Handle:timerany:client)
    {
        if(
    IsPlayerAlive(client))
        {
            new 
    weapon GetEntPropEnt(clientProp_Data"m_hActiveWeapon");
            if(
    weapon && (weapon == GetPlayerWeaponSlot(clientCS_SLOT_PRIMARY) || weapon == GetPlayerWeaponSlot(clientCS_SLOT_SECONDARY)))
            {
                new 
    warray;
                
    decl String:classname[4];
                
    //GetEdictClassname(weapon, classname, sizeof(classname));
                
    Format(classname4"%i"GetEntProp(weaponProp_Send"m_iItemDefinitionIndex"));
                
                if(
    GetTrieValue(trie_armasclassnamewarray))
                {
                    
    //PrintToChat(client, "municion fijado a %i",warray[1]);
                    
    if(GetReserveAmmo(weapon) != warraySetEntProp(weaponProp_Send"m_iPrimaryReserveAmmoCount"warray);
                }
            }
        }
    }

    stock GetReserveAmmo(weapon)
    {
        return 
    GetEntProp(weaponProp_Send"m_iPrimaryReserveAmmoCount");
    }

    public 
    Action:EventItemPickup2(clientweapon)
    {
        if(
    weapon == GetPlayerWeaponSlot(clientCS_SLOT_PRIMARY) || weapon == GetPlayerWeaponSlot(clientCS_SLOT_SECONDARY))
        {
            new 
    warray;
            
    decl String:classname[4];
            
    //GetEdictClassname(weapon, classname, sizeof(classname));
            
    Format(classname4"%i"GetEntProp(weaponProp_Send"m_iItemDefinitionIndex"));
        
            if(!
    GetTrieValue(trie_armasclassnamewarray))
            {
                
    warray GetEntProp(weaponProp_Send"m_iPrimaryReserveAmmoCount");
            
                
    SetTrieValue(trie_armasclassnamewarray);
            }
            else
            {
                if(
    GetUserFlagBits(client) & ADMFLAG_NEEDEDSetEntProp(weaponProp_Send"m_iPrimaryReserveAmmoCount"warray);
            }
        }
    }

    public 
    Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
    {    
        new 
    client GetClientOfUserId(GetEventInt(event"userid"));
        
        if(
    GetClientTeam(client) < 2) return;
        
        if(!(
    GetUserFlagBits(client) & ADMFLAG_NEEDED)) return;

        new 
    iEnt;
        
        while ((
    iEnt GetPlayerWeaponSlot(client3)) != -1)
        {
            
    RemovePlayerItem(clientiEnt);
            
    AcceptEntityInput(iEnt"Kill");
        }
        
        
    GivePlayerItem(client"weapon_hegrenade");
        
    GivePlayerItem(client"weapon_flashbang");
        
    GivePlayerItem(client"weapon_smokegrenade");
        
    GivePlayerItem(client"weapon_molotov");
        if(
    GetClientTeam(client) == CS_TEAM_CTSetEntProp(clientProp_Send"m_bHasDefuser"1);
        
        while ((
    iEnt GetPlayerWeaponSlot(client2)) != -1)
        {
            
    RemovePlayerItem(clientiEnt);
            
    AcceptEntityInput(iEnt"Kill");
        }
        
    GivePlayerItem(client"weapon_knife");
        
    GivePlayerItem(client"weapon_taser");
        
        
    FakeClientCommand(client,"use weapon_knife");
        
        
    SetEntData(clientACCOUNT_OFFSETGetEntData(clientACCOUNT_OFFSET)+300);
    }

    public 
    RoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
    {
        if (
    CheckMapEnd())
        {
            
    Pasar();
        }
    }

    Pasar()
    {
        for(new 
    i=1;i<=MaxClients;++i)
        {
            if(!
    IsClientInGame(i) || GetClientTeam(i) > 1) continue;
            
            if(!(
    GetUserFlagBits(i) & ADMFLAG_NEEDED)) continue;
            
            
    ChangeClientTeam(iGetRandomInt(23));

        }
    }


    bool:CheckMapEnd()
    {
        new 
    win GetConVarInt(FindConVar("mp_maxrounds"));
        
        if(
    win 0)
        {
            
    win RoundToNearest(win/2.0);
            
            if(
    GetTeamScore(CS_TEAM_CT) == win || GetTeamScore(CS_TEAM_T) == win) return true;
            
            return 
    false;
        }
            
        new 
    timeleft;
        
    GetMapTimeLeft(timeleft);
        if (
    timeleft <= 0) return true;
        
        return 
    false;
    }
     
  8. nikita1811

    nikita1811

    Сообщения:
    86
    Симпатии:
    4
    Вообщем нашел простенький VIP плагин:
    PHP:
    #include <sourcemod>
    #include <sdktools>
    #include <cstrike>
      
    public OnPluginStart()  
    {  
        
    HookEvent("round_start"roundStart);  
    }
      
    public 
    Action:roundStart(Handle:event, const String:name[], bool:dontBroadcast
    {
       for ( new 
    client client <= MaxClients+client++){ 
          if (
    IsPlayerGenericAdmin(client)){
             if (
    IsValidClient(clienttrue)){
                new 
    team GetClientTeam(client);
                
    SetEntProp(clientProp_Send"m_ArmorValue"1004); //armor
                
    SetEntProp(clientProp_Send"m_bHasHelmet"1); //helm
               
                
    GivePlayerItem(client"weapon_flashbang"); //flash
                
    GivePlayerItem(client"weapon_flashbang"); //flash
                
    GivePlayerItem(client"weapon_hegrenade"); //grenade
            
                
    if (GetTeamScore(CS_TEAM_T)+GetTeamScore(CS_TEAM_CT) > 1){
                   
    decl CurrentMoney;  
                   
    CurrentMoney GetEntProp(clientProp_Send"m_iAccount");  
                   
    SetEntProp(clientProp_Send"m_iAccount"CurrentMoney 1500);
                }
               
                if(
    team == CS_TEAM_CT)
                {
                   
    GivePlayerItem(client"item_defuser");
                }
             }
          }   
        }
    }
     
    bool:IsPlayerGenericAdmin(client)
    {
       return 
    CheckCommandAccess(client"generic_admin"ADMFLAG_GENERICfalse);
    }
     
    bool:IsValidClient(clientbool:alive false)  
    {  
        return (
    client >= && client <= MaxClients && IsClientConnected(client) && IsClientInGame(client) && (alive == false || IsPlayerAlive(client)));  
    }
    Немного изменил чтоб гранаты выдавались также как и деньги со 2 раунда:
    PHP:
    #include <sourcemod>
    #include <sdktools>
    #include <cstrike>
      
    public OnPluginStart()  
    {  
        
    HookEvent("round_start"roundStart);  
    }
      
    public 
    Action:roundStart(Handle:event, const String:name[], bool:dontBroadcast
    {
       for ( new 
    client client <= MaxClients+client++){ 
          if (
    IsPlayerGenericAdmin(client)){
             if (
    IsValidClient(clienttrue)){
                new 
    team GetClientTeam(client);
            
                if (
    GetTeamScore(CS_TEAM_T)+GetTeamScore(CS_TEAM_CT) > 1){
                   
    decl CurrentMoney;  
                   
    CurrentMoney GetEntProp(clientProp_Send"m_iAccount");  
                   
    SetEntProp(clientProp_Send"m_iAccount"CurrentMoney 1500);
                   
    SetEntProp(clientProp_Send"m_ArmorValue"1004); //armor
                   
    SetEntProp(clientProp_Send"m_bHasHelmet"1); //helm
               
                   
    GivePlayerItem(client"weapon_flashbang"); //flash
                   
    GivePlayerItem(client"weapon_flashbang"); //flash
                   
    GivePlayerItem(client"weapon_hegrenade"); //grenade
                
    }
               
                if(
    team == CS_TEAM_CT)
                {
                   
    GivePlayerItem(client"item_defuser");
                }
             }
          }   
        }
    }
     
    bool:IsPlayerGenericAdmin(client)
    {
       return 
    CheckCommandAccess(client"generic_admin"ADMFLAG_GENERICfalse);
    }
     
    bool:IsValidClient(clientbool:alive false)  
    {  
        return (
    client >= && client <= MaxClients && IsClientConnected(client) && IsClientInGame(client) && (alive == false || IsPlayerAlive(client)));  
    }
    Плагин работает со 2 раунда , но вот в чем проблема, при смене команд местами (teamswitch) на пистолетном раунде игрок получает гранаты и броню (что не есть хорошо), как заставить счетчик снова отсчитать 1 раунд чтоб выдать набор плюшек?
     
  9. Tallanvor

    Tallanvor Красноглазый

    Сообщения:
    1.106
    Симпатии:
    316
    AlmazON,
    Оффтоп