View Single Post
Agent Wesker
Senior Member
Join Date: Apr 2012
Old 03-13-2019 , 15:48   Re: [CSGO] Map Change Client Crash Fixer (v1.0.6 , 2018/09/11)
Reply With Quote #120

Quote:
Originally Posted by Cruze View Post
Works on normal map change but game still crashes on rockthevote!
Using mapchooser_extended.
rockthevote_extended:
PHP Code:
/**
 * vim: set ts=4 :
 * =============================================================================
 * Rock The Vote Extended
 * Creates a map vote when the required number of players have requested one.
 *
 * Rock The Vote Extended (C)2012-2013 Powerlord (Ross Bemrose)
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
 * =============================================================================
 *
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License, version 3.0, as published by the
 * Free Software Foundation.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * As a special exception, AlliedModders LLC gives you permission to link the
 * code of this program (as well as its derivative works) to "Half-Life 2," the
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
 * by the Valve Corporation.  You must obey the GNU General Public License in
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
 * this exception to all derivative works.  AlliedModders LLC defines further
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
 * or <http://www.sourcemod.net/license.php>.
 *
 * Version: $Id$
 */

#include <sourcemod>
#include <mapchooser>
#include "include/mapchooser_extended"
#include <nextmap>
#include <multicolors>

#pragma semicolon 1

#define MCE_VERSION "1.10.1"

public Plugin:myinfo =
{
    
name "Rock The Vote Extended",
    
author "Powerlord and AlliedModders LLC",
    
description "Provides RTV Map Voting",
    
version MCE_VERSION,
    
url "https://forums.alliedmods.net/showthread.php?t=156974"
};

new 
Handle:g_Cvar_Needed INVALID_HANDLE;
new 
Handle:g_Cvar_MinPlayers INVALID_HANDLE;
new 
Handle:g_Cvar_InitialDelay INVALID_HANDLE;
new 
Handle:g_Cvar_Interval INVALID_HANDLE;
new 
Handle:g_Cvar_ChangeTime INVALID_HANDLE;
new 
Handle:g_Cvar_RTVPostVoteAction INVALID_HANDLE;

new 
bool:g_CanRTV false;        // True if RTV loaded maps and is active.
new bool:g_RTVAllowed false;    // True if RTV is available to players. Used to delay rtv votes.
new g_Voters 0;                // Total voters connected. Doesn't include fake clients.
new g_Votes 0;                // Total number of "say rtv" votes
new g_VotesNeeded 0;            // Necessary votes before map vote begins. (voters * percent_needed)
new bool:g_Voted[MAXPLAYERS+1] = {false, ...};

new 
bool:g_InChange false;

public 
OnPluginStart()
{
    
LoadTranslations("common.phrases");
    
LoadTranslations("rockthevote.phrases");
    
LoadTranslations("basevotes.phrases");
    
    
g_Cvar_Needed CreateConVar("sm_rtv_needed""0.60""Percentage of players needed to rockthevote (Def 60%)"0true0.05true1.0);
    
g_Cvar_MinPlayers CreateConVar("sm_rtv_minplayers""0""Number of players required before RTV will be enabled."0true0.0truefloat(MAXPLAYERS));
    
g_Cvar_InitialDelay CreateConVar("sm_rtv_initialdelay""30.0""Time (in seconds) before first RTV can be held"0true0.00);
    
g_Cvar_Interval CreateConVar("sm_rtv_interval""240.0""Time (in seconds) after a failed RTV before another can be held"0true0.00);
    
g_Cvar_ChangeTime CreateConVar("sm_rtv_changetime""0""When to change the map after a succesful RTV: 0 - Instant, 1 - RoundEnd, 2 - MapEnd"_true0.0true2.0);
    
g_Cvar_RTVPostVoteAction CreateConVar("sm_rtv_postvoteaction""0""What to do with RTV's after a mapvote has completed. 0 - Allow, success = instant change, 1 - Deny"_true0.0true1.0);
    
    
RegConsoleCmd("say"Command_Say);
    
RegConsoleCmd("say_team"Command_Say);
    
    
RegConsoleCmd("sm_rtv"Command_RTV);
    
    
RegAdminCmd("sm_forcertv"Command_ForceRTVADMFLAG_CHANGEMAP"Force an RTV vote");
    
RegAdminCmd("mce_forcertv"Command_ForceRTVADMFLAG_CHANGEMAP"Force an RTV vote");
    
    
// Rock The Vote Extended cvars
    
CreateConVar("rtve_version"MCE_VERSION"Rock The Vote Extended Version"FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_NOTIFY|FCVAR_DONTRECORD);
    
    
AutoExecConfig(true"rtv");
}

public 
OnMapStart()
{
    
g_Voters 0;
    
g_Votes 0;
    
g_VotesNeeded 0;
    
g_InChange false;
    
    
/* Handle late load */
    
for (new i=1i<=MaxClientsi++)
    {
        if (
IsClientConnected(i))
        {
            
OnClientConnected(i);    
        }    
    }
}

public 
OnMapEnd()
{
    
g_CanRTV false;    
    
g_RTVAllowed false;
}

public 
OnConfigsExecuted()
{    
    
g_CanRTV true;
    
g_RTVAllowed false;
    
CreateTimer(GetConVarFloat(g_Cvar_InitialDelay), Timer_DelayRTV_TIMER_FLAG_NO_MAPCHANGE);
}

public 
OnClientConnected(client)
{
    if(
IsFakeClient(client))
        return;
    
    
g_Voted[client] = false;

    
g_Voters++;
    
g_VotesNeeded RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed));
    
    return;
}

public 
OnClientDisconnect(client)
{
    if(
IsFakeClient(client))
        return;
    
    if(
g_Voted[client])
    {
        
g_Votes--;
    }
    
    
g_Voters--;
    
    
g_VotesNeeded RoundToFloor(float(g_Voters) * GetConVarFloat(g_Cvar_Needed));
    
    if (!
g_CanRTV)
    {
        return;    
    }
    
    if (
g_Votes && 
        
g_Voters && 
        
g_Votes >= g_VotesNeeded && 
        
g_RTVAllowed 
    {
        if (
GetConVarInt(g_Cvar_RTVPostVoteAction) == && HasEndOfMapVoteFinished())
        {
            return;
        }
        
        
StartRTV();
    }    
}

public 
Action:Command_RTV(clientargs)
{
    if (!
g_CanRTV || !client)
    {
        return 
Plugin_Handled;
    }
    
    
AttemptRTV(client);
    
    return 
Plugin_Handled;
}

public 
Action:Command_Say(clientargs)
{
    if (!
g_CanRTV || !client)
    {
        return 
Plugin_Continue;
    }
    
    
decl String:text[192];
    if (!
GetCmdArgString(textsizeof(text)))
    {
        return 
Plugin_Continue;
    }
    
    new 
startidx 0;
    if(
text[strlen(text)-1] == '"')
    {
        
text[strlen(text)-1] = '\0';
        
startidx 1;
    }
    
    new 
ReplySource:old SetCmdReplySource(SM_REPLY_TO_CHAT);
    
    if (
strcmp(text[startidx], "rtv"false) == || strcmp(text[startidx], "rockthevote"false) == 0)
    {
        
AttemptRTV(client);
    }
    
    
SetCmdReplySource(old);
    
    return 
Plugin_Continue;    
}

AttemptRTV(client)
{
    if (!
g_RTVAllowed  || (GetConVarInt(g_Cvar_RTVPostVoteAction) == && HasEndOfMapVoteFinished()))
    {
        
CReplyToCommand(client"[SM] %t""RTV Not Allowed");
        return;
    }
        
    if (!
CanMapChooserStartVote())
    {
        
CReplyToCommand(client"[SM] %t""RTV Started");
        return;
    }
    
    if (
GetClientCount(true) < GetConVarInt(g_Cvar_MinPlayers))
    {
        
CReplyToCommand(client"[SM] %t""Minimal Players Not Met");
        return;            
    }
    
    if (
g_Voted[client])
    {
        
CReplyToCommand(client"[SM] %t""Already Voted"g_Votesg_VotesNeeded);
        return;
    }    
    
    new 
String:name[MAX_NAME_LENGTH];
    
GetClientName(clientnamesizeof(name));
    
    
g_Votes++;
    
g_Voted[client] = true;
    
    
CPrintToChatAll("[SM] %t""RTV Requested"nameg_Votesg_VotesNeeded);
    
    if (
g_Votes >= g_VotesNeeded)
    {
        
StartRTV();
    }    
}

public 
Action:Timer_DelayRTV(Handle:timer)
{
    
g_RTVAllowed true;
}

StartRTV()
{
    if (
g_InChange)
    {
        return;    
    }
    
    if (
EndOfMapVoteEnabled() && HasEndOfMapVoteFinished())
    {
        
/* Change right now then */
        
new String:map[PLATFORM_MAX_PATH];
        if (
GetNextMap(mapsizeof(map)))
        {
            
CPrintToChatAll("[SM] %t""Changing Maps"map);
            
CreateTimer(5.0Timer_ChangeMap_TIMER_FLAG_NO_MAPCHANGE);
            
g_InChange true;
            
            
ResetRTV();
            
            
g_RTVAllowed false;
        }
        return;    
    }
    
    if (
CanMapChooserStartVote())
    {
        new 
MapChange:when MapChange:GetConVarInt(g_Cvar_ChangeTime);
        
InitiateMapChooserVote(when);
        
        
ResetRTV();
        
        
g_RTVAllowed false;
        
CreateTimer(GetConVarFloat(g_Cvar_Interval), Timer_DelayRTV_TIMER_FLAG_NO_MAPCHANGE);
    }
}

ResetRTV()
{
    
g_Votes 0;
            
    for (new 
i=1i<=MAXPLAYERSi++)
    {
        
g_Voted[i] = false;
    }
}

public 
Action Timer_ChangeMap(Handle hTimer)
{        
    
char map[PLATFORM_MAX_PATH];
    if (
GetNextMap(mapsizeof(map)))
    {    
        
LogMessage("RTV changing map manually to %s"map);
        
LogAction(-1, -1"RTV changing map manually to %s"map);
        
CreateTimer(0.1Timer_Final);
    }
}

public 
Action Timer_Final(Handle hTimer)
{
    
g_InChange false;
        
    
char map[PLATFORM_MAX_PATH];
    if (
GetNextMap(mapsizeof(map)))
    {    
        
ForceChangeLevel(map"RTV after mapvote");
    }
}
/*
public Action:Timer_ChangeMap(Handle:hTimer)
{
    g_InChange = false;
    
    LogMessage("RTV changing map manually");
    
    new String:map[PLATFORM_MAX_PATH];
    if (GetNextMap(map, sizeof(map)))
    {    
        ForceChangeLevel(map, "RTV after mapvote");
    }
    
    return Plugin_Stop;
}
*/

// Rock The Vote Extended functions

public Action:Command_ForceRTV(clientargs)
{
    if (!
g_CanRTV || !client)
    {
        return 
Plugin_Handled;
    }

    
ShowActivity2(client"[RTVE] ""%t""Initiated Vote Map");

    
StartRTV();
    
    return 
Plugin_Handled;

Please pastebin me your SM log file since enabling my edited plugin.
Agent Wesker is offline