rendered paste body/*
ESEMPIO DI VOTEKICK MOLTO SEMPLICE:
creato da me >RLZ<Elvis1991 ;)
lo script si basa su principi di programmazione mooooolto semplici: cicli for, format e
variabili...Ho tenuto conto che vote-kick complessi possono rallentare il gioco(aumento del pig
per tutti i giocatori) quindi ho fatto 1 codice molto semplice.
INSALLAZIONE:
Visita questa pagina web:
*/
#include <a_samp>
//#include <UsFunc>
//Color Define
#define COLOR_GREY 0xAFAFAFAA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_RED 0xFF0000AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_DARKYELLOW 0xE3B515AA
#define COLOR_PINK 0xFF66FFAA
#define COLOR_BLUE 0x0000BBAA
#define COLOR_LIGHTBLUE 0x33CCFFAA
#define COLOR_DARKRED 0x660000AA
#define COLOR_ORANGE 0xFF9900AA
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_LIGHTGREEN 0x00FF00AA
//End Color Define
new PlayersConnected;
new CheckPlayerConnectedTimer;
new MinVote;
#define VOTE_IN_PROGRESS 1
#define VOTE_ENDED 2
#define VOTE_NONE 0
new Voting;
new Voted[MAX_PLAYERS];
new RqTime;
new VotedID;
new VoteYes;
main()
{
print("\n----------------------------------");
print(" This is a blank GameModeScript");
print("----------------------------------\n");
}
public OnGameModeInit()
{
print("GameModeInit()");
SetGameModeText("Blank Script");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
CheckPlayerConnectedTimer = SetTimer("GetParamsOfVote",1500,1);
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
printf("OnPlayerRequestClass(%d, %d)", playerid, classid);
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
return 1;
}
public OnGameModeExit()
{
print("GameModeExit()");
KillTimer(CheckPlayerConnectedTimer);
return 1;
}
public OnPlayerConnect(playerid)
{
printf("OnPlayerConnect(%d)", playerid);
SendClientMessage(playerid,COLOR_GREEN,"Press: /Vote [VotedID] [reason] ---> Start vote");
SendClientMessage(playerid,COLOR_GREEN,"Press: /Report [message] ---> Report a message to admin");
return 1;
}
public OnPlayerDisconnect(playerid)
{
printf("OnPlayerDisconnect(%d)", playerid);
return 1;
}
public OnPlayerSpawn(playerid)
{
printf("OnPlayerSpawn(%d)", playerid);
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
printf("OnPlayerDeath(%d, %d, %d)", playerid, killerid, reason);
return 1;
}
public OnVehicleSpawn(vehicleid)
{
printf("OnVehicleSpawn(%d)", vehicleid);
return 1;
}
public OnVehicleDeath(vehicleid, killerid)
{
printf("OnVehicleDeath(%d, %d)", vehicleid, killerid);
return 1;
}
public OnPlayerText(playerid)
{
printf("OnPlayerText(%d)", playerid);
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[256];
new idx;
cmd = strtok(cmdtext, idx);
if(strcmp(cmd,"/Vote",true) == 0)
{
if (Voting == VOTE_NONE)
{
new VotedX[256];
VotedX = strtok(cmdtext, idx);
if(!strlen(VotedX)){
SendClientMessage(playerid, COLOR_WHITE, "USAGE: /Vote [VotedID] [reason]");
return 1;}
VotedID = strval(VotedX);
new Reason[300];
Reason = strrest(cmd,idx);
if(!strlen(Reason)){
SendClientMessage(playerid, COLOR_WHITE, "USAGE: /Vote [VotedID] [reason]");
return 1;}
if (IsPlayerConnected(VotedID))
{
if (IsPlayerAdmin(VotedID) == 0)
{
if (VotedID != playerid)
{
Voted[VotedID] = 1;
new VotedName[MAX_PLAYER_NAME];
GetPlayerName(VotedID,VotedName,sizeof(VotedName));
new VoteMess[256];
new TimerVal = RqTime/1000/60;
format(VoteMess,sizeof(VoteMess),"*** Vote-Kick: Started vote of %s (id: %d). The vote will check in %d minute!",VotedName,VotedID,TimerVal);
SendClientMessageToAllOthers2(VotedID, COLOR_YELLOW, VoteMess);
new Res[256];
format(Res,sizeof(Res),"*** Reason: %s",Reason);
SendClientMessageToAll(COLOR_YELLOW,"Press /yes (agree) /no (disagree)");
SendClientMessageToAll(COLOR_YELLOW,Res);
new MessVoted[256];
format(MessVoted,sizeof(MessVoted),"**** You are selected to a VOTE for: %s",Reason);
SendClientMessage(VotedID, COLOR_RED,MessVoted);
SetTimer("CheckVote",RqTime,0);
}
else{SendClientMessage(playerid,COLOR_RED,"You are voting your self!!!");}
}
else{SendClientMessage(playerid,COLOR_RED,"You can't vote the Admin!");}
}
else{SendClientMessage(playerid,COLOR_RED,"That id doesen't exist!");}
Voting = VOTE_IN_PROGRESS;
}
if (Voting != VOTE_NONE)
{
SendClientMessage(playerid,COLOR_RED,"Now is evolving an other vote!");
}
}
if (strcmp(cmdtext, "/yes", true)==0)
{
if (Voting != VOTE_NONE)
{
VoteYes++;
new VoteYESMess[256];
format(VoteYESMess,sizeof(VoteYESMess),"*** Vote: someone has voted to kick. Vote is now to %d / %d",VoteYes,MinVote);
SendClientMessageToAll(COLOR_YELLOW,VoteYESMess);
new XT[256];
format(XT,sizeof(XT),"%d / %d",VoteYes,MinVote);
GameTextForPlayer(VotedID,XT,3000,4);
}
return 1;
}
if (strcmp(cmdtext, "/no", true)==0)
{
if (Voting != VOTE_NONE)
{
SendClientMessage(playerid,COLOR_YELLOW,"You have voted NO");
}
return 1;
}
if (strcmp(cmdtext, "/Report", true)==0)
{
new AdminMess[300];
AdminMess = strrest(cmd,idx);
if(!strlen(AdminMess)){
SendClientMessage(playerid, COLOR_WHITE, "USAGE: /Report [message]");
return 1;}
new sender[MAX_PLAYER_NAME];
GetPlayerName(playerid,sender,sizeof(sender));
new MessToAdmin[512];
format(MessToAdmin,sizeof(MessToAdmin),"***AdminReport: %s (by %s)***",AdminMess,sender);
for (new i = 0; i < MAX_PLAYERS; i++)
{
if (IsPlayerConnected(i))
{
if (IsPlayerAdmin(i))
{
SendClientMessage(i, COLOR_YELLOW, MessToAdmin);
SendClientMessage(playerid,COLOR_YELLOW,"***Your Message is succesful sent to admin!");
}
else
{
SendClientMessage(playerid,COLOR_RED,"***Sorry, but Admin is not connected or loged in!");
}
}
}
return 1;
}
if (strcmp(cmdtext, "/mycommand", true)==0)
{
/* Do something here */
return 1;
}
return 0;
}
public OnPlayerInfoChange(playerid)
{
printf("OnPlayerInfoChange(%d)");
return 1;
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
printf("OnPlayerEnterVehicle(%d, %d, %d)", playerid, vehicleid, ispassenger);
return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
printf("OnPlayerExitVehicle(%d, %d)", playerid, vehicleid);
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
printf("OnPlayerStateChange(%d, %d, %d)", playerid, newstate, oldstate);
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
printf("OnPlayerEnterCheckpoint(%d)", playerid);
return 1;
}
public OnPlayerLeaveCheckpoint(playerid)
{
printf("OnPlayerLeaveCheckpoint(%d)", playerid);
return 1;
}
public GetPlayersNumber() //By rapidZ & edited by me
{new i;
new player;
player = 0;
for (i=0;i<MAX_PLAYERS;i++){
if(IsPlayerConnected(i)){
player++;}}
return player;}
public GetParamsOfVote()
{
PlayersConnected = GetPlayersNumber();
if (PlayersConnected == 1){MinVote = 1;RqTime =60000;}
if (PlayersConnected <= 3){MinVote = 2;RqTime =120000;}
if (PlayersConnected >= 4 && PlayersConnected <= 6){MinVote = 4;RqTime = 180000;}
if (PlayersConnected >= 7 && PlayersConnected <= 12){MinVote = 7;RqTime = 240000;}
if (PlayersConnected >= 13 && PlayersConnected <= 20){MinVote = 10;RqTime = 300000;}
if (PlayersConnected >= 21 && PlayersConnected <= 30){MinVote = 12;RqTime = 360000;}
if (PlayersConnected >= 31){MinVote = 15;RqTime = 360000;}
if (PlayersConnected >= 95 && PlayersConnected <= 100){MinVote = 20;RqTime = 480000;}
}
public CheckVote()
{
if (VoteYes >= MinVote)
{
new nameofkicked[MAX_PLAYER_NAME];
GetPlayerName(VotedID,nameofkicked,sizeof(nameofkicked));
new KickedMess[256];
format(KickedMess,sizeof(KickedMess),"*** Vote Kick: %s (id: %d) was kicked by all for %d vote!",nameofkicked,VotedID,VoteYes);
SendClientMessageToAllOthers2(VotedID, COLOR_YELLOW, KickedMess);
SendClientMessage(VotedID,COLOR_RED,"You was been Kicked!");
GameTextForPlayer(VotedID,"KICK!",5000,3);
Kick(VotedID);
//reset Param:
Voting = VOTE_NONE;
for (new i = 0; i < MAX_PLAYERS; i++)
Voted[i] = 0;
VoteYes = 0;
}
if (VoteYes < MinVote)
{
new nameofNOkicked[MAX_PLAYER_NAME];
GetPlayerName(VotedID,nameofNOkicked,sizeof(nameofNOkicked));
new NoKickMess[256];
format(NoKickMess,sizeof(NoKickMess),"*** Vote Kick: %s (id: %d) won't kicked because there was not enought vote (%d/%d)!",nameofNOkicked,VotedID,VoteYes,MinVote);
SendClientMessageToAll(COLOR_YELLOW,NoKickMess);
SendClientMessageToAllOthers2(VotedID, COLOR_YELLOW, "You can report that to admin...(/Report [message])");
//reset Param:
Voting = VOTE_NONE;
for (new i = 0; i < MAX_PLAYERS; i++)
Voted[i] = 0;
VoteYes = 0;
}
}
strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
public strrest(const string[], index)
{
new length = strlen(string);
new offset = index;
new result[256];
while ((index < length) && ((index - offset) < (sizeof(result) - 1)) && (string[index] > '\r'))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
// new result[256];
// strmid(result,string,index,strlen(string),sizeof(result));
return result;
}
public SendClientMessageToAllOthers2(playerid, color, const message[])
{
for (new i = 0; i < MAX_PLAYERS; i++)
{
if ((IsPlayerConnected(i)) && (i != playerid))
{
SendClientMessage(i, color, message);
}
}
}
public GameTextForAllOthers2(playerid, const string[], time, style)
{
for (new i = 0; i < MAX_PLAYERS; i++)
{
if ((IsPlayerConnected(i)) && (i != playerid))
{
GameTextForPlayer(i, string, time, style);
}
}
}