PDA

View Full Version : Propunere scurta



Hopper
29-03-2021, 03:16 PM
Salut! Am tot vazut problema asta, mai ales la straini sau cei mai mici probabil ca ei scriu "arma" si saracii se intreaba de ce nu primesc si sunt omorati ca si T, asa ca propun ca si cuvantul "arma" sa activeze runda free, sau macar /arma daca nu merge fara, poate le e mai usor asa, mai reducem din frustrari si neintelegeri. Noroc!

evane
29-03-2021, 03:43 PM
pro

skar17
01-04-2021, 01:17 AM
Pro

Black Matte
04-04-2021, 01:58 PM
Pro

XapiX
05-04-2021, 07:21 PM
Pro

GuruF
08-04-2021, 07:33 PM
pro

Freeze
08-04-2021, 08:21 PM
pro

Hopper
29-05-2021, 01:56 AM
Da, da. Mulțumesc, mulțumesc, apreciez pro-urile, da' punerea īn aplicare sau răspunsul final, cānd?

~TraNda~
11-06-2021, 02:15 AM
#include < amxmodx >
#include < cstrike >
#include < fakemeta >
#include < hamsandwich >

const m_toggle_state = 41;

#define TASK_VOTE 237439

enum _:VOTES {
VOTE_YES,
VOTE_NO
};

new g_iVotes[ VOTES ];
new bool:g_bVoted[ 33 ];
new bool:g_bFreeRound;
new bool:g_bWillFree;
new bool:g_bVoting;
new g_iCountdown;
new g_iRounds;
new g_iPrinted;
new g_iMenuID;
new g_iMaxplayers;
new g_iMsgSayText;
new g_pWaitRounds;

public plugin_init( ) {
new const VERSION[ ] = "1.0";

register_plugin( "Deathrun: Free Round", VERSION, "xPaw" );

new p = register_cvar( "deathrun_freeround", VERSION, FCVAR_SERVER | FCVAR_SPONLY );
set_pcvar_string( p, VERSION );

g_pWaitRounds = register_cvar( "freerun_wait_rounds", "5" );
g_iMaxplayers = get_maxplayers( );
g_iMsgSayText = get_user_msgid( "SayText" );
g_iMenuID = register_menuid( "DrunFreeRoundVote" );

register_menucmd( g_iMenuID, ( MENU_KEY_1 | MENU_KEY_2 | MENU_KEY_0 ), "HandleVote" );

register_clcmd( "say /free", "CmdFreeRound" );
register_clcmd( "say /freeround", "CmdFreeRound" );
register_clcmd( "say /arma", "CmdFreeRound" );
register_clcmd( "say arma", "CmdFreeRound" );

RegisterHam( Ham_Use, "func_rot_button", "FwdHamUse_Button" );
RegisterHam( Ham_Use, "func_button", "FwdHamUse_Button" );
RegisterHam( Ham_Use, "button_target", "FwdHamUse_Button" );

register_event( "CurWeapon", "EventCurWeapon", "be", "1=1", "2!29" );
register_event( "HLTV", "EventNewRound", "a", "1=0", "2=0" );
register_event( "TextMsg", "EventRestart", "a", "2&#Game_C", "2&#Game_w" );
}

public EventNewRound( ) {
if( g_bFreeRound ) {
g_bFreeRound = false;
g_iRounds = 0;
g_iPrinted = 0;

return;
}
else if( g_bWillFree ) {
g_iRounds = 0;
g_iPrinted = 0;
g_bWillFree = false;
g_bFreeRound = true;

set_task( 2.0, "PrintMessage" );

return;
}

g_iRounds++;

if( g_iPrinted < 4 && g_iRounds >= get_pcvar_num( g_pWaitRounds ) ) {
GreenPrint( 0, "This server is using^3 Deathrun Free Round System^1 by^4 xPaw^1, say^4 /free^1 to start vote!" );

g_iPrinted++;
}
}

public EventRestart( ) {
g_bFreeRound = false;
g_bWillFree = false;
g_bVoting = false;
g_iPrinted = 0;
g_iRounds = 0;

remove_task( TASK_VOTE );
}

public EventCurWeapon( id )
if( g_bFreeRound )
engclient_cmd( id, "weapon_knife" );

public CmdFreeRound( id ) {
if( cs_get_user_team( id ) != CS_TEAM_T ) {
GreenPrint( id, "This command is only for terrorists!" );

return PLUGIN_CONTINUE;
}
else if( g_bFreeRound ) {
GreenPrint( id, "It is free round already!" );

return PLUGIN_CONTINUE;
}
else if( g_bVoting ) {
GreenPrint( id, "The voting is already in process!" );

return PLUGIN_CONTINUE;
}
else if( g_bWillFree ) {
GreenPrint( id, "Next round will be free! Vote is over!" );

return PLUGIN_CONTINUE;
}

new iWaitRounds = get_pcvar_num( g_pWaitRounds ) - g_iRounds;

if( iWaitRounds > 0 ) {
GreenPrint( id, "You need to wait^3 %i^1 rounds to start vote!", iWaitRounds );

return PLUGIN_CONTINUE;
}

new szName[ 32 ];
get_user_name( id, szName, 31 );

GreenPrint( 0, "Vote has been started by^3 %s^1.", szName );

set_hudmessage( 222, 70, 0, -1.0, 0.3, 1, 3.0, 3.0, 2.0, 1.0, -1 );
show_hudmessage( 0, "Free round vote has been started by %s^nVoting Will begin shortly.", szName );

g_iVotes[ VOTE_YES ] = 0;
g_iVotes[ VOTE_NO ] = 0;
g_iRounds = 0;
g_bVoting = true;
g_iPrinted = 0;
g_bWillFree = false;

arrayset( g_bVoted, false, 32 );

remove_task( TASK_VOTE );
g_iCountdown = 15;

set_task( 3.5, "PreTask", TASK_VOTE );

return PLUGIN_CONTINUE;
}

public PrintMessage( ) {
GreenPrint( 0, "It is a^4 Free round^1, no guns, no traps!" );

set_hudmessage( 0, 90, 0, -1.0, 0.35, 1, 3.0, 3.0, 2.0, 1.0, -1 );
show_hudmessage( 0, "FREE ROUND!" );
}

public PreTask( ) {
remove_task( TASK_VOTE );

set_task( 1.0, "TaskVoteTimer", TASK_VOTE, _, _, "b" );
}

public TaskVoteTimer( ) {
g_iCountdown--;

if ( !g_iCountdown ) {
remove_task( TASK_VOTE );

g_bVoting = false;

new iVotes, iHighVotes, iHighVotesID;

for( new i; i < VOTES; i++ ) {
iVotes = g_iVotes[ i ];

if( iVotes >= iHighVotes ) {
iHighVotes = iVotes;
iHighVotesID = i;
}
}

if( iHighVotes > 0 ) {
if( iHighVotesID == VOTE_YES )
g_bWillFree = true;

GreenPrint( 0, "Vote is over. %s^1 [^3 %i^1 votes (^4%i%%) ^1]", g_bWillFree ? "Next round will be free!" : "Next round won't be free!", iHighVotes, GetPercent( g_iVotes[ iHighVotesID ], g_iVotes[ VOTE_YES ] + g_iVotes[ VOTE_NO ] ) );
} else
GreenPrint( 0, "Vote is over. No one voted." );

for( new i = 1; i <= g_iMaxplayers; i++ )
if( is_user_connected( i ) )
ShowVoteMenu( i, 1 );
} else {
for( new i = 1; i <= g_iMaxplayers; i++ )
if( is_user_connected( i ) )
ShowVoteMenu( i, 0 );
}
}

ShowVoteMenu( id, bResults = 0 ) {
new iMenu = GetUserMenu( id );

if( ( iMenu && iMenu != g_iMenuID ) && g_iCountdown <= 14 )
return;

menu_cancel( id ); // Radios and other piece of shit bug fix :D

new szMenu[ 196 ], iLen;

if( bResults )
iLen = formatex( szMenu, charsmax( szMenu ), "\rResults of the vote:^n^n" );
else
iLen = formatex( szMenu, charsmax( szMenu ), "\rDo you want a free round?^n^n" );

new iVotesTotal = g_iVotes[ VOTE_YES ] + g_iVotes[ VOTE_NO ];

iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - 1, "\r1. \wYes \d(%i%%)^n", GetPercent( g_iVotes[ VOTE_YES ], iVotesTotal ) );
iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - 1, "\r2. \wNo \d(%i%%)^n^n", GetPercent( g_iVotes[ VOTE_NO ], iVotesTotal ) );

if( bResults ) {
if( g_bWillFree )
iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - 1, " \yNext round will be free!" );
else {
if( !iVotesTotal )
iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - 1, " \yNo one voted!" );
}

show_menu( id, ( MENU_KEY_1 | MENU_KEY_2 | MENU_KEY_0 ), szMenu, -1, "DrunFreeRoundVote" );

set_task( 5.0, "CloseMenu", id );
} else {
iLen += formatex( szMenu[ iLen ], charsmax( szMenu ) - 1, " \dseconds remaining: \r%i", g_iCountdown );

show_menu( id, ( MENU_KEY_1 | MENU_KEY_2 ), szMenu, -1, "DrunFreeRoundVote" );
}
}

public CloseMenu( id )
if( GetUserMenu( id ) == g_iMenuID )
client_cmd( id, "slot1" );

GetUserMenu( id ) {
new iMenu, iKeys;
get_user_menu( id, iMenu, iKeys );

return iMenu;
}

public HandleVote( id, iKey ) {
if( !g_bVoting || !task_exists( TASK_VOTE ) )
return;

if( g_bVoted[ id ] ) {
ShowVoteMenu( id, 0 );

return;
}

if( iKey > 1 )
return;

new iVotes = ( /* get_user_flags( id ) & ADMIN_KICK ||*/ get_user_team( id ) == 1 ) ? 2 : 1;

g_bVoted[ id ] = true;
g_iVotes[ iKey ] += iVotes;

new szName[ 32 ];
get_user_name( id, szName, 31 );

GreenPrint( 0, "^3%s^1 voted^4 %s^1. [^4+%i^1 vote%s]", szName, iKey == VOTE_YES ? "for" : "against", iVotes, iVotes == 1 ? "" : "s" );

ShowVoteMenu( id, 0 );
}

public FwdHamUse_Button( iEntity, id, iActivator, iUseType, Float:flValue ) {
if( g_bFreeRound && iUseType == 2 && flValue == 1.0 && is_user_alive( id )
&& get_user_team( id ) == 1 && get_pdata_int( iEntity, m_toggle_state, 4 ) == 1 ) {
/* Oh hi this code actually happen! :D */

set_hudmessage( 0, 100, 255, -1.0, 0.25, 0, 2.0, 2.0, 0.2, 0.2, 3 );
show_hudmessage( id, "It is free round!^nYou can't use buttons!" );

return HAM_SUPERCEDE;
}

return HAM_IGNORED;
}

GetPercent( is, of ) // Brad
return ( of != 0 ) ? floatround( floatmul( float( is ) / float( of ), 100.0 ) ) : 0;

GreenPrint( id, const message[ ], any:... ) {
static szMessage[ 192 ], iLen;
if( !iLen )
iLen = formatex( szMessage, 191, "^4[Deathrun FreeRound]^1 " );

vformat( szMessage[ iLen ], 191 - iLen, message, 3 );

message_begin( id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, g_iMsgSayText, _, id );
write_byte( id ? id : 1 );
write_string( szMessage );
message_end( );

return 1;
}


Cu compilatul va descurcati si voi.
Se mai ridica o problema la aceasta modificare, si anume, stiti ca daca un CT scrie /free, porneste un vot daca runda sa fie free sau nu, ei bine, acum daca o sa scrie "arma" sau "/arma" o sa porneasca acel vot. Totusi nu cred ca va fi o problema prea mare pana va obisnuiti :) .

Tiger
11-06-2021, 08:31 PM
Nu este acel plugin, free-run este integrat in deathrun duel. Adaugat pentru "arma" cat si pentru "/arma".