Helló :)
Készítettem egy kisebb szavazás rendszert úgy az unalom kedvéért :D
Teszt megvolt 3 emberrel.
Parancsok:
/addvote
- Indíthatsz új szavazást (3 perc míg lezárul, addig nem indíthat senki újat)
/yes
- Igennel szavazol
/no
- Nemmel szavazol
Kód:
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#define SCM SendClientMessage
#define SCMToAll SendClientMessageToAll
#define MINUTE 60000
new bool:Vote,
Voted[MAX_PLAYERS],
YesVotes,
NoVotes,
VoteTimeTimer;
forward VoteTimer();
public OnPlayerConnect(playerid) { Voted[playerid] = 0; return 1; }
public OnPlayerDisconnect(playerid) { Voted[playerid] = 0; return 1; }
public OnFilterScriptInit() { Vote = false; YesVotes = 0; NoVotes = 0; return 1; }
public OnFilterScriptExit() { Vote = false; YesVotes = 0; NoVotes = 0; return 1; }
CMD:addvote(playerid, params[]) {
new question[128], name[24+1], string[255];
if(Vote == true) return SCM(playerid, -1, \"{FF4646}* Jelenleg már fut egy szavazás!\");
if(sscanf(params, \"s[128]\", question)) return SCM(playerid, -1, \"{ffff99}Használat: /addvote [{dddddd}Kérdés{ffff99}]\");
Vote = true;
GetPlayerName(playerid, name, 24);
format(string, 255, \"{DDDDDD}- Vote - {FFA600}%s elindított egy szavazást!\", name);
SCM(playerid, -1, string);
format(string, 255, \"{DDDDDD}- Vote - {FFA600}Kérdés: %s\", question);
SCM(playerid, -1, string);
VoteTimeTimer = SetTimer(\"VoteTimer\",3*MINUTE,true);
return 1;
}
CMD:yes(playerid, params[]) {
new name[24+1], string[255];
if(Vote == false) return SCM(playerid, -1, \"{FF4646}* Nem fut szavazás!\");
if(Voted[playerid] == 1) return SCM(playerid, -1, \"{FF4646}* Te már szavaztál!\");
GetPlayerName(playerid, name, 24);
Voted[playerid] = 1;
YesVotes++;
SCM(playerid, -1, \"{33AA33}* Te igennel szavaztál!\");
format(string, 128, \"{DDDDDD}- Vote - {FFA600}%s igennel szavazott!\", name);
SCMToAll(-1, string);
format(string, 128, \"{DDDDDD}- Vote - {FFA600}Jelenleg {DDDDDD}%d {FFA600}igen szavazat van!\", YesVotes);
SCMToAll(-1, string);
return 1;
}
CMD:no(playerid, params[]) {
new name[24+1], string[255];
if(Vote == false) return SCM(playerid, -1, \"{FF4646}* Nem fut szavazás!\");
if(Voted[playerid] == 1) return SCM(playerid, -1, \"{FF4646}* Te már szavaztál!\");
GetPlayerName(playerid, name, 24);
Voted[playerid] = 1;
NoVotes++;
SCM(playerid, -1, \"{33AA33}* Te nemmel szavaztál!\");
format(string, 128, \"{DDDDDD}- Vote - {FFA600}%s nemmel szavazott!\", name);
SCMToAll(-1, string);
format(string, 128, \"{DDDDDD]- Vote - {FFA600}Jelenleg {DDDDDD}%d {FFA600}nem szavazat van!\", NoVotes);
SCMToAll(-1, string);
return 1;
}
public VoteTimer() {
new string[255];
format(string, 128, \"{DDDDDD}- Vote - {FFA600}A szavazás lezárult! (%d igen, %d nem)\", YesVotes, NoVotes);
SCMToAll(-1, string);
Vote = false;
NoVotes = 0;
YesVotes = 0;
KillTimer(VoteTimeTimer);
for(new i = 0; i < MAX_PLAYERS; i++) {
if(!IsPlayerConnected(i)) continue;
Voted = 0;
}
return 1;
}
Hát.. Nem tudom mi van, de még mindig nem javítottad.
Így lenne a jó szerintem:
public OnGameModeInit() { //Vagy OnFilterScriptInit
YesVotes = 0;
NoVotes = 0;
return 1;
}
public OnGameModeExit() { //Vagy OnFilterScriptExit
YesVotes = 0;
NoVotes = 0;
return 1;
}
Hát.. Nem tudom mi van, de még mindig nem javítottad.
Így lenne a jó szerintem:
public OnGameModeInit() { //Vagy OnFilterScriptInit
YesVotes = 0;
NoVotes = 0;
return 1;
}
public OnGameModeExit() { //Vagy OnFilterScriptExit
YesVotes = 0;
NoVotes = 0;
return 1;
}
Ezeket is?
Vote = false;
Voted[playerid] = 0;
Ez maradhat a helyén, mert csak annak a játékosnak nullázza aki épp feljön szóval nem mindenkinek.
Voted[playerid] = 0;
Amúgy is Voted[playerid] ezt nem is tudnád az OnGameModeInit alá rakni. :)
Ez pedig megint rossz helyen van, ezt is helyezd át.
Vote = false;
Megoldás:
public OnGameModeInit() { //Vagy OnFilterScriptInit
Vote = false;
YesVotes = 0;
NoVotes = 0;
return 1;
}
public OnGameModeExit() { //Vagy OnFilterScriptExit
Vote = false;
YesVotes = 0;
NoVotes = 0;
return 1;
}
VoteTimer(playerid) ez alá megint csak felesleges a Voted[playerid] = 0;
Megoldás:
forward VoteTimer();
public VoteTimer() {
new string[255];
format(string, 128, \"{FFA600}* A szavazás lezárult! {dddddd}(%d igen, %d nem)\", YesVotes, NoVotes);
SCMToAll(-1, string);
Vote = false;
NoVotes = 0;
YesVotes = 0;
for(new i = 0; i < MAX_PLAYERS; i++) {
if(!IsPlayerConnected(i)) continue;
Voted = 0;
}
return 1;
}
És az hogy ha már szavazott szerintem felesleges úgy ellenõrizni, hogy ha igen akkor 1 ha nem akkor 2 elé lenne egy értéket adni neki.
Igenre szavazott:
if(Voted[playerid] == 1) return SendClientMessage(playerid, -1, \"Már szavaztál\");
Voted[playerid] = 1;
Nemre szavazott:
if(Voted[playerid] == 1) return SendClientMessage(playerid, -1, \"Már szavaztál\");
Voted[playerid] = 1;
És ha lezárult a szavazás minenkinek visszaállítani 0-ra ami már fentebb leírtam :).
Vagy Voted[playerid] is mehetne bool változóban.