Bombsite Limiter

Тема в разделе "Общие вопросы", создана пользователем KapaT, 30 дек 2014.

  1. KapaT

    KapaT Эгоист

    Сообщения:
    1.983
    Симпатии:
    408
    На просторах рунета нашел плагин запрещающий ставить бомбу на одном из плантов (А или В) при малом количестве игроков. Так вот там прописаны только стандартные карты, подскажите что куда дописать что бы можно было добавить кастомные.
    PHP:
    #pragma semicolon 1
    #include <sourcemod>    
    #include <sdktools>
    #include <cstrike>

    #define    STANDARDMAPSMAX    12

    new String:BSAL[1];
    new 
    EIBA = -1;
    new 
    EIBB = -1;
    new 
    Handle:Timer INVALID_HANDLE;
    new 
    String:StandardMaps[STANDARDMAPSMAX][2][11] =
    {    
        {
            
    "de_aztec","B"
        
    },
        {
            
    "de_cbble","A"
        
    },
        {
            
    "de_chateau","A"
        
    },
        {
            
    "de_dust","A"
        
    },
        {
            
    "de_dust2","A"
        
    },
        {
            
    "de_inferno","B"
        
    },
        {
            
    "de_nuke","B"
        
    },
        {
            
    "de_piranesi","A"
        
    },
        {
            
    "de_port","A"
        
    },
        {
            
    "de_prodigy","B"
        
    },
        {
            
    "de_tides","A"
        
    },
        {
            
    "de_train","A"
        
    }
    };

    public 
    Plugin:myinfo =
    {
        
    name "Bombsite Limiter",
        
    author "Tomasz 'anacron' Motylinski",
        
    description "Limiting Bomsites when due to low CT players.",
        
    version "1.2.3",
        
    url "http://anacron.pl/"
    }
    public 
    OnPluginStart()
    {
        
    HookEvent("round_freeze_end",Event_RoundFreezeEnd,EventHookMode_Post); 
        
    HookEvent("bomb_planted",Event_RoundEnd,EventHookMode_Post); 
        
    HookEvent("round_end",Event_RoundEnd,EventHookMode_Post); 
        
    CreateConVar("sm_bslimiter","1.2.3","Version Information",FCVAR_REPLICATED|FCVAR_NOTIFY);
    }
    stock bool:IsVecBetween(const Float:vecVector[3],const Float:vecMin[3],const Float:vecMax[3]) 

        return ( (
    vecMin[0] <= vecVector[0] <= vecMax[0]) && 
                 (
    vecMin[1] <= vecVector[1] <= vecMax[1]) && 
                 (
    vecMin[2] <= vecVector[2] <= vecMax[2])    ); 
    }
    public 
    Message()
    {
        
    PrintToChatAll("[BS Limiter] Due to the low number of CT's in this round. CT's must defend only bomsite %s.",BSAL);
        
    PrintHintTextToAll("Only Bombsite %s is enabled in this round!",BSAL);
    }
    public 
    Action:RepeatMessage(Handle:timer)
    {
        
    Message();
    }
    public 
    Action:Event_RoundFreezeEnd (Handle:event,const String:name[],bool:dontBroadcast)
    {
        if(
    IsValidEntity(EIBA)) 
        {
            
    EIBA = -1;
        }
        if(
    IsValidEntity(EIBB)) 
        {
            
    EIBB = -1;
        }
        if(
    Timer != INVALID_HANDLE)
        {
            
    CloseHandle(Timer);
            
    Timer INVALID_HANDLE;
        }

        new 
    Float:VBCPA[3]; 
        new 
    Float:VBCPB[3]; 
        new 
    EI = -1;
        
        
    EI FindEntityByClassname(EI,"cs_player_manager");
        
        if(
    IsValidEntity(EI)) 
        { 
            
    GetEntPropVector(EI,Prop_Send,"m_bombsiteCenterA",VBCPA); 
            
    GetEntPropVector(EI,Prop_Send,"m_bombsiteCenterB",VBCPB); 
        } 
        
        
    EI = -1
        
    EI FindEntityByClassname(EI,"func_bomb_target");
        
        while(
    IsValidEntity(EI)) 
        { 
            new 
    Float:VBMin[3]; 
            new 
    Float:VBMax[3]; 
             
            
    GetEntPropVector(EI,Prop_Send,"m_vecMins",VBMin); 
            
    GetEntPropVector(EI,Prop_Send,"m_vecMaxs",VBMax); 
             
            if (
    IsVecBetween(VBCPA,VBMin,VBMax)) 
            { 
                
    EIBA EI
            } 
            else if (
    IsVecBetween(VBCPB,VBMin,VBMax)) 
            { 
                
    EIBB EI
            } 
            
    EI FindEntityByClassname(EI,"func_bomb_target");
        }
        
        if(
    IsValidEntity(EIBA) && IsValidEntity(EIBB))
        {
            new 
    CTPlayers GetTeamClientCount(CS_TEAM_CT);
            new 
    TTPlayers GetTeamClientCount(CS_TEAM_T);

            if(((
    CTPlayers TTPlayers) && (TTPlayers == || CTPlayers 3)) || CTPlayers 4)
            {
                
    AcceptEntityInput(EIBB,"Enable");
                
    AcceptEntityInput(EIBA,"Enable");
                
    BSAL "";
                
    PrintHintTextToAll("All Bombsites are enabled in this round!");
                
    PrintCenterTextAll("All Bombsites are enabled in this round!");
            }
            else
            {
                if(
    GetRandomInt(1,2) == 1)
                {
                    
    AcceptEntityInput(EIBA,"Disable");
                    
    AcceptEntityInput(EIBB,"Enable");
                    
    BSAL "B";
                }
                else
                {
                    
    AcceptEntityInput(EIBB,"Disable");
                    
    AcceptEntityInput(EIBA,"Enable");
                    
    BSAL "A";
                }
                
    decl String:CurrentMap[256];
                
    GetCurrentMap(CurrentMap,sizeof(CurrentMap));
                for(new 
    i=0i<STANDARDMAPSMAXi++)
                {
                    if(
    StrEqual(CurrentMap,StandardMaps[i][0],false)) 
                    {
                        if(
    StrEqual(StandardMaps[i][1],"B",false))
                        {
                            
    AcceptEntityInput(EIBA,"Disable");
                            
    AcceptEntityInput(EIBB,"Enable");
                            
    BSAL "B";
                        }
                        else
                        {
                            
    AcceptEntityInput(EIBB,"Disable");
                            
    AcceptEntityInput(EIBA,"Enable");
                            
    BSAL "A";
                        }
                    }
                }
                if(
    GetClientCount(true) > 1)
                {
                    
    Message();
                    
    Timer CreateTimer(15.0,RepeatMessage_,TIMER_REPEAT); 
                }
            }
        }
    }
    public 
    Action:Event_RoundEnd (Handle:event,const String:name[],bool:dontBroadcast)
    {
        if(
    Timer != INVALID_HANDLE)
        {
            
    CloseHandle(Timer);
            
    Timer INVALID_HANDLE;
        }
        if(
    IsValidEntity(EIBA)) 
        {
            
    AcceptEntityInput(EIBA,"Enable");
            
    EIBA = -1;
        }
        if(
    IsValidEntity(EIBB)) 
        {
            
    AcceptEntityInput(EIBB,"Enable");
            
    EIBB = -1;
        }
    }


     
  2. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Пробовал делать так?
    Код:
    #define    STANDARDMAPSMAX    12 // Ставишь больше число.
    --
    Код:
    new String:StandardMaps[STANDARDMAPSMAX][2][11] =
    {    
        {
            "de_aztec","B"
        },
        {
            "de_cbble","A"
        },
        {
            "de_chateau","A"
        },
        {
            "de_dust","A"
        },
        {
            "de_dust2","A"
        },
        {
            "de_inferno","B"
        },
        {
            "de_nuke","B"
        },
        {
            "de_piranesi","A"
        },
        {
            "de_port","A"
        },
        {
            "de_prodigy","B"
        },
        {
            "de_tides","A"
        },
        {
            "de_train","A"
        },
        {
            "твоя карта","A или B" // и т.д
        },
    };
     
  3. KapaT

    KapaT Эгоист

    Сообщения:
    1.983
    Симпатии:
    408
    Естественно. Ошибку при компили выдает.
     
  4. AlmazON

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

    Сообщения:
    4.540
    Симпатии:
    1.984
    2 и 11 убери, оставь пустые скобки.
     
    KapaT нравится это.