Download
pawn Code:
#include < a_samp > #include < zcmd > #include < sscanf2 > #if defined MAX_PLAYERS_EVENTO #undef MAX_PLAYERS_EVENTO #endif #define MAX_PLAYERS_EVENTO (60) //Mude para o maximo de players em seu servidor. new Float: Pos [ 3 ] ; new str [ 128 ] ; new Evento ; new EventoEt; new Nome [ MAX_PLAYER_NAME ] ; new Kills [ MAX_PLAYERS_EVENTO ] ; new EventoV [ MAX_PLAYERS_EVENTO ] ; new bool: Ativo [ MAX_PLAYERS_EVENTO ] ; new bool: entrarE [ MAX_PLAYERS_EVENTO ] ; public OnPlayerDisconnect ( playerid , reason ) { if ( entrarE [ playerid ] == true ) { GetPlayerName ( playerid , Nome , sizeof ( Nome ) ) ; format ( str , sizeof ( str ) , "[EVENTO]: %s saiu do evento." , Nome ) ; SendClientMessageToAll ( 0xFF0000AA , str ) ; DestroyVehicle ( EventoV [ playerid ] ) ; EventoEt-- ; entrarE [ playerid ] = false ; Kills [ playerid ] = 0 ; } return 1; } CMD :aevento ( playerid , params [ ] ) { new eventnome [ 31 ] ; if ( !IsPlayerAdmin ( playerid ) ) return SendClientMessage ( playerid , 0xFF0000AA , "Você não tem permissão." ) ; if ( Evento == 1 ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Já tem um evento em andamento." ) ; if ( sscanf ( params , "s[30]" , eventnome ) ) return SendClientMessage ( playerid , 0xFF0000AA , "/aevento [nome]" ) ; format(str, sizeof(str), "Evento ''%s'' aberto. use: /irevento" , eventnome ) ; SendClientMessageToAll ( 0xFF0000AA , str ) ; GetPlayerPos ( playerid , Pos [ 0 ] , Pos [ 1 ] , Pos [ 2 ] ) ; Evento = 1 ; return 1 ; } CMD :irevento ( playerid , params [ ] ) { if ( Evento == 0 ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Nenhum evento ativo." ) ; if ( entrarE [ playerid ] == true ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Você já está no evento." ) ; if ( Ativo [ playerid ] == true ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Evento já começou." ) ; GetPlayerName ( playerid , Nome , sizeof ( Nome ) ) ; format(str, sizeof(str), "[EVENTO]: %s entrou no evento." , Nome ) ; SendClientMessageToAll ( 0xFF0000AA , str ) ; SetPlayerPos ( playerid , Pos [ 0 ] , Pos [ 1 ] , Pos [ 2 ] ) ; entrarE [ playerid ] = true ; EventoEt++ ; SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Aguarde o administrador começar o evento." ) ; TogglePlayerControllable ( playerid , 0 ) ; return 1 ; } CMD :starevento ( playerid , params [ ] ) { if ( !IsPlayerAdmin ( playerid ) ) return SendClientMessage ( playerid , 0xFF0000AA , "Você não tem permissão." ) ; if ( Evento == 0 ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Nenhum evento ativo." ) ; if ( entrarE [ playerid ] == false ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Você não está em um evento." ) ; if ( Ativo [ playerid ] == true ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Evento já começou." ) ; format ( str , sizeof ( str ) , "[EVENTO]: Evento começou com %d players." , EventoEt ) ; SendClientMessageToAll ( 0xFF0000AA , str ) ; for ( new x = 0 , i = MAX_PLAYERS_EVENTO ; x != i ; ++x ) if ( IsPlayerConnected ( x ) && entrarE [ x ] == true) { Ativo [ x ] = true ; TogglePlayerControllable ( x , 1 ) ; } SendClientMessageToAll ( 0xFF0000AA , "[EVENTO]: Administrador começou o evento." ) ; for ( new r = 0 , i = MAX_PLAYERS ; r != i ; ++r ) Ativo [ r ] = true ; return 1 ; } CMD :fecevento ( playerid , params [ ] ) { if ( !IsPlayerAdmin ( playerid ) ) return SendClientMessage ( playerid , 0xFF0000AA , "Você não tem permissão." ) ; if ( Evento == 0 ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Nenhum evento ativo." ) ; for ( new x = 0 , i = MAX_PLAYERS_EVENTO ; x != i ; ++x ) if ( IsPlayerConnected ( x ) && entrarE [ x ] == true) { DestroyVehicle ( EventoV [ x ] ) ; entrarE [ x ] = false ; Ativo [ x ] = false ; Kills [ x ] = 0 ; SpawnPlayer ( x ) ; } for ( new r = 0 , i = MAX_PLAYERS ; r != i ; ++r ) entrarE [ r ] = false , Evento = 0 ; SendClientMessageToAll ( 0xFF0000AA , "[EVENTO]: Administrador fechou o evento." ) ; return 1 ; } CMD :sevento ( playerid , params [ ] ) { if ( Evento == 0 ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Nenhum evento ativo." ) ; if ( entrarE [ playerid ] == false ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Você não está em um evento." ) ; SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Você saiu do evento." ) ; GetPlayerName ( playerid , Nome , sizeof ( Nome ) ) ; format ( str , sizeof ( str ) , "[EVENTO]: %s saiu do evento." , Nome ) ; SendClientMessageToAll ( 0xFF0000AA , str ) ; SpawnPlayer ( playerid ) ; DestroyVehicle ( EventoV [ playerid ] ) ; EventoEt-- ; entrarE [ playerid ] = false ; Kills [ playerid ] = 0 ; return 1 ; } CMD :arevento ( playerid , params [ ] ) { new armaid, mun; if ( !IsPlayerAdmin ( playerid ) ) return SendClientMessage ( playerid , 0xFF0000AA , "Você não tem permissão." ) ; if ( Evento == 0 ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Nenhum evento ativo." ) ; if ( entrarE [ playerid ] == false ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Você não está em um evento." ) ; if ( sscanf ( params , "ii" , armaid , mun ) ) return SendClientMessage ( playerid , 0xFF0000AA , "/arevento [armarid] [munição]" ) ; if ( armaid < 1 || armaid == 19 || armaid == 20 || armaid == 21) return SendClientMessage ( playerid , 0xFF0000AA , "id invalido." ) ; for ( new x = 0 , i = MAX_PLAYERS_EVENTO ; x != i ; ++x ) if ( IsPlayerConnected ( x ) && entrarE [ x ] == true) { //ResetPlayerWeapons ( x ) ; GivePlayerWeapon ( x , armaid , mun ) ; } format(str, sizeof(str), "[EVENTO]: Administrador deu para todos no evento: armaid: %d munição: %d" , armaid , mun ) ; SendEventMessage ( 0xFF0000AA , str ) ; return 1 ; } CMD :rsevento ( playerid , params [ ] ) { if ( !IsPlayerAdmin ( playerid ) ) return SendClientMessage ( playerid , 0xFF0000AA , "Você não tem permissão." ) ; if ( Evento == 0 ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Nenhum evento ativo." ) ; if ( entrarE [ playerid ] == false ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Você não está em um evento." ) ; for ( new x = 0 , i = MAX_PLAYERS_EVENTO ; x != i ; ++x ) if ( IsPlayerConnected ( x ) && entrarE [ x ] == true) { ResetPlayerWeapons ( x ) ; } SendEventMessage ( 0xFF0000AA , "[EVENTO]: Administrador resetou a arma de todos no evento." ) ; return 1 ; } CMD :vievento ( playerid , params [ ] ) { new vidaid; if ( !IsPlayerAdmin ( playerid ) ) return SendClientMessage ( playerid , 0xFF0000AA , "Você não tem permissão." ) ; if ( Evento == 0 ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Nenhum evento ativo." ) ; if ( entrarE [ playerid ] == false ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Você não está em um evento." ) ; if ( sscanf ( params , "i" , vidaid ) ) return SendClientMessage ( playerid , 0xFF0000AA , "/vievento [quantia]" ) ; if ( vidaid < 0 || vidaid > 100) return SendClientMessage ( playerid , 0xFF0000AA , "quantia invalida." ) ; for ( new x = 0 , i = MAX_PLAYERS_EVENTO ; x != i ; ++x ) if ( IsPlayerConnected ( x ) && entrarE [ x ] == true) { SetPlayerHealth ( x , vidaid ) ; } format(str, sizeof(str), "[EVENTO]: Administrador deu para todos no evento vida: %d" , vidaid ) ; SendEventMessage ( 0xFF0000AA , str ) ; return 1 ; } CMD :coevento ( playerid , params [ ] ) { new coleteid; if ( !IsPlayerAdmin ( playerid ) ) return SendClientMessage ( playerid , 0xFF0000AA , "Você não tem permissão." ) ; if ( Evento == 0 ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Nenhum evento ativo." ) ; if ( entrarE [ playerid ] == false ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Você não está em um evento." ) ; if ( sscanf ( params , "i" , coleteid ) ) return SendClientMessage ( playerid , 0xFF0000AA , "/coevento [quantia]" ) ; if ( coleteid < 0 || coleteid > 100) return SendClientMessage ( playerid , 0xFF0000AA , "quantia invalida." ) ; for ( new x = 0 , i = MAX_PLAYERS_EVENTO ; x != i ; ++x ) if ( IsPlayerConnected ( x ) && entrarE [ x ] == true) { SetPlayerArmour ( x , coleteid ); } format(str, sizeof(str), "[EVENTO]: Administrador deu para todos no evento colete: %d" , coleteid ) ; SendEventMessage ( 0xFF0000AA , str ) ; return 1 ; } CMD :veevento ( playerid , params [ ] ) { new veiculo , cor1 , cor2 ; new Float:ppos [ 3 ] ; if ( !IsPlayerAdmin ( playerid ) ) return SendClientMessage ( playerid , 0xFF0000AA , "Você não tem permissão." ) ; if ( Evento == 0 ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Nenhum evento ativo." ) ; if ( entrarE [ playerid ] == false ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Você não está em um evento." ) ; if ( sscanf ( params , "iii" , veiculo , cor1 , cor2 ) ) return SendClientMessage ( playerid , 0xFF0000AA , "[ERRO]: /veevento [vehicleid] [cor1] [cor2]." ) ; if ( veiculo < 400 || veiculo > 611) return SendClientMessage ( playerid , -1 , "[ERRO]: id invalido."); for ( new x = 0 , i = MAX_PLAYERS_EVENTO ; x != i ; ++x ) if ( IsPlayerConnected ( x ) && entrarE [ x ] == true) { GetPlayerPos ( x , ppos [ 0 ] , ppos [ 1 ] , ppos [ 2 ] ) ; DestroyVehicle ( EventoV [ x ] ) ; EventoV [ x ] = CreateVehicle ( veiculo , ppos [ 0 ] , ppos [ 1 ] , ppos [ 2 ] , 360, cor1 , cor2 , -1 ) ; PutPlayerInVehicle ( x , EventoV [ x ] , 0 ) ; } SendEventMessage ( 0xFF0000AA , "[EVENTO]: Administrador deu para todos no evento veiculo." ) ; return 1 ; } CMD :delevento ( playerid , params [ ] ) { if ( !IsPlayerAdmin ( playerid ) ) return SendClientMessage ( playerid , 0xFF0000AA , "Você não tem permissão." ) ; if ( Evento == 0 ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Nenhum evento ativo." ) ; if ( entrarE [ playerid ] == false ) return SendClientMessage ( playerid , 0xFF0000AA , "[EVENTO]: Você não está em um evento." ) ; for ( new x = 0 , i = MAX_PLAYERS_EVENTO ; x != i ; ++x ) if ( IsPlayerConnected ( x ) && entrarE [ x ] == true) { DestroyVehicle ( EventoV [ x ] ) ; } SendEventMessage ( 0xFF0000AA , "[EVENTO]: Administrador deletou todos os veiculos do evento." ) ; return 1 ; } public OnPlayerSpawn ( playerid ) if ( entrarE [ playerid ] == true ) SetPlayerPos ( playerid , Pos [ 0 ] , Pos [ 1 ] , Pos [ 2 ] ) ; public OnPlayerDeath ( playerid , killerid ) { if ( killerid == INVALID_PLAYER_ID ) if ( entrarE [ playerid ] == true ) { GetPlayerName ( playerid , Nome , sizeof ( Nome ) ) ; format(str, sizeof(str), "[EVENTO]: '%s' se matou no evento." , Nome ) ; SendEventMessage ( 0xFF0000AA , str ) ; } else { if ( entrarE [ killerid ] == true && entrarE [ playerid ] == true ) { new nOme [ MAX_PLAYER_NAME ] ; GetPlayerName ( killerid , Nome , sizeof ( Nome ) ) ; GetPlayerName ( playerid , nOme , sizeof ( nOme ) ) ; format(str, sizeof(str), "[EVENTO]: '%s' matou '%s' no evento." , Nome , nOme ) ; SendEventMessage ( 0xFF0000AA , str ) ; Kills [ killerid ] ++ ; } } if ( Kills [ killerid ] == 20 && entrarE [ killerid ] == true ) { for ( new x = 0 , i = MAX_PLAYERS_EVENTO ; x != i ; ++x ) if ( IsPlayerConnected ( x ) && entrarE [ x ] == true) { format(str, sizeof(str), "[EVENTO]: '%s' ganhou o evento com 20 kills." , Nome ) ; SendClientMessageToAll ( 0xFF0000AA , str ) ; Ativo [ x ] = false ; Evento = 0 ; entrarE [ x ] = false ; } } return 1 ; } stock SendEventMessage ( color , string [ ] ) { for ( new x = 0 , i = MAX_PLAYERS_EVENTO ; x != i ; ++x ) if ( IsPlayerConnected ( x ) && entrarE [ x ] == true) return SendClientMessage ( x , color , string ) ; return 1; }
includes
zcmd
sscanf
Comandos
Code:
Comandos para administradores:
/aevento [nome] - Criação do evento.
/starevento - Começar o evento.
/fecevento - Fechar evento.
/arevento [weaponid] [ammo] - Dar armas para todos no evento.
/rsevento - Resetar armas do evento.
/vievento [health] - Health para todos no evento.
/coevento [armor] - Armor para todos no evento.
/veevento [vehicleid] [cor1] [cor2] - Veiculo para todos no evento.
/delevento - Deletar veiculos de todos no evento.
Comandos para players:
/irevento - Entrar no evento.
/sevento - Sair do evento.Obs: Novas atualizações virão por ai
Updates
[23-04-2012] - Algumas optimizações, novos comandos administrativos ( /veevento, /delevento ).
[25-04-2012] - Alguns bugs foram corrigidos, acrecentado algumas optimizações.
[28-04-2012] - Macros foram retirados, alguns checks desnecessarios foram retirados.
---------------------------------------------------