Deathmatch Winner Declaring Help -
ponagandlamanoj - 28.07.2014
Well, I'm trying to make a Deathmatch script where a winner is declared when theres only one player left. Maybe this is what called as Last Man Standing. Whatever, I have a problem. No compilation errors. But when tested, Winner is not declared even when theres only one player left. Check the code and help me in rectifying it. And yes I'm a noob, newbie or whatever.
Код:
public OnPlayerDeath(playerid, killerid, reason)
{
if(InDM[playerid] ==1)
{
InDM[playerid] =0;
cn--;
new str[100];
new pName[MAX_PLAYER_NAME],kName[MAX_PLAYER_NAME];
GetPlayerName(killerid,kName,MAX_PLAYER_NAME);
GetPlayerName(playerid,pName,MAX_PLAYER_NAME);
format(str, sizeof(str),"%s(%d) has been killed by %s(%d) in Deathmatch Minigame",pName,kName);
PlayerInfo[killerid][pKills]++;
PlayerInfo[playerid][pDeaths]++;
CheckWin(); // Here I call to check winner
}
return 1;
}
Here's the function :
Код:
forward CheckWin();
public CheckWin()
{
if(cn ==1)
{
for(new i=0;i<MAX_PLAYERS;i++)
{
if(InDM[i] ==1)
{
new string[128], winner[MAX_PLAYER_NAME];
GetPlayerName(i,winner,MAX_PLAYER_NAME);
format(string,sizeof(string),"%s(%d) Has won the DeathMatch[Minigame]",winner,i);
}
}
}
}
Well, If the problem isn't in here but somewhere else in the code, Here's the link for the whole script I Made
http://pastebin.com/UWFNqMSi
Thank you.
Re: Deathmatch Winner Declaring Help -
biker122 - 28.07.2014
You forgot to use SendClientMessageToAll after formatting the message...
Re: Deathmatch Winner Declaring Help -
BroZeus - 28.07.2014
first thing use this on player disconnect
pawn Код:
public OnPlayerDisconnect(playerid, reason)
{
new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File,"PlayerInfo");
INI_WriteInt(File,"Kills",PlayerInfo[playerid][pKills]);
INI_WriteInt(File,"Deaths",PlayerInfo[playerid][pDeaths]);
INI_Close(File);
if(InDM[playerid] == 1)
{
cn--;
InDM[playerid] = 0;
}
CheckWin();
return 1;
}
well the main reason behind problem is because u are not sending any message
so this will be the CheckPlayer--
pawn Код:
forward CheckWin();
public CheckWin()
{
if(cn ==1)
{
for(new i=0;i<MAX_PLAYERS;i++)
{
if(InDM[i] ==1)
{
new string[128], winner[MAX_PLAYER_NAME];
GetPlayerName(i,winner,MAX_PLAYER_NAME);
format(string,sizeof(string),"%s(%d) Has won the DeathMatch[Minigame]",winner,i);
break;
}
}
SendClientMessageToAll(-1, string);//forgoted this
}
}
Re: Deathmatch Winner Declaring Help -
Threshold - 28.07.2014
pawn Код:
#include <a_samp>
#include <zcmd>
#include <YSI\y_ini>
#define PATH "/MJDM/%s.ini"
#define COLOR_RED 0xFF3300FF
new bool:InDM[MAX_PLAYERS], Float:OrigPos[MAX_PLAYERS][3], DMCount;
new Float:Spawns[][4] = {
{-2491.8706, -237.2221, 39.3019, 295.0867},
{-2482.0308, -283.6506, 40.5421, 180.7190},
{-2444.0479, -271.4679, 35.6237, 258.4264},
{-2490.9055, -298.6101, 35.8574, 172.5956},
{-2525.5771, -313.8878, 39.0723, 327.6012},
{-2554.4729, -291.1451, 25.9594, 118.0751}
};
enum pInfo
{
pKills,
pDeaths
}
new PlayerInfo[MAX_PLAYERS][pInfo];
forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
INI_Int("Kills", PlayerInfo[playerid][pKills]);
INI_Int("Deaths", PlayerInfo[playerid][pDeaths]);
return 1;
}
stock UserPath(playerid)
{
new string[40], pName[MAX_PLAYER_NAME];
GetPlayerName(playerid, pName, sizeof(pName));
format(string,sizeof(string), PATH, pName);
return string;
}
public OnFilterScriptInit()
{
print("\n--------------------------------------");
print(" DM[Minigame] by DuskXtremeX");
print("--------------------------------------\n");
return 1;
}
public OnFilterScriptExit()
{
return 1;
}
public OnPlayerRequestClass(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 OnPlayerConnect(playerid)
{
if(fexist(UserPath(playerid))) INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra =true, .extra = playerid);
else
{
new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File, "data");
INI_WriteInt(File,"Kills",0);
INI_WriteInt(File,"Deaths",0);
INI_Close(File);
}
InDM[playerid] = false;
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File, "data");
INI_WriteInt(File, "Kills", PlayerInfo[playerid][pKills]);
INI_WriteInt(File, "Deaths", PlayerInfo[playerid][pDeaths]);
INI_Close(File);
if(InDM[playerid]) DMCount--;
InDM[playerid] = false;
CheckWin();
return 1;
}
public OnPlayerSpawn(playerid)
{
GivePlayerWeapon(playerid, 26, 300);
GivePlayerWeapon(playerid, 32, 300);
GivePlayerWeapon(playerid, 34, 100);
GivePlayerWeapon(playerid, 27, 50);
if(InDM[playerid]) SetPlayerPos(playerid, OrigPos[playerid][0], OrigPos[playerid][1], OrigPos[playerid][2]);
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
if(InDM[playerid])
{
InDM[playerid] = false;
DMCount--;
new str[105], pName[MAX_PLAYER_NAME];
GetPlayerName(playerid, pName, sizeof(pName));
if(killerid != INVALID_PLAYER_ID)
{
new kName[MAX_PLAYER_NAME];
GetPlayerName(killerid, kName, sizeof(kName));
format(str, sizeof(str), "%s(%d) has been killed by %s(%d) in Deathmatch Minigame", pName, playerid, kName, killerid);
PlayerInfo[killerid][pKills]++;
}
else format(str, sizeof(str), "%s(%d) has died in Deathmatch Minigame", pName, playerid);
SendClientMessageToAll(COLOR_RED, str);
PlayerInfo[playerid][pDeaths]++;
CheckWin();
}
return 1;
}
COMMAND:deathmatch(playerid, params[])
{
if(InDM[playerid]) return SendClientMessage(playerid, COLOR_RED, "You're already in DM");
InDM[playerid] = true;
DMCount++;
ResetPlayerWeapons(playerid);
new string[45], pName[MAX_PLAYER_NAME];
GetPlayerName(playerid, pName, sizeof(pName));
format(string, sizeof(string), "%s(%d) has joined DM", pName, playerid);
GetPlayerPos(playerid, OrigPos[playerid][0], OrigPos[playerid][1], OrigPos[playerid][2]);
new Random = random(sizeof(Spawns));
SetPlayerPos(playerid, Spawns[Random][0], Spawns[Random][1], Spawns[Random][2]);
SetPlayerFacingAngle(playerid, Spawns[Random][3]);
SetPlayerSkin(playerid, random(50));
return 1;
}
COMMAND:leavedm(playerid,params[])
{
if(!InDM[playerid]) return SendClientMessage(playerid, COLOR_RED, "You're not in DM");
InDM[playerid] = false;
DMCount--;
SetPlayerPos(playerid, OrigPos[playerid][0], OrigPos[playerid][1], OrigPos[playerid][2]);
ResetPlayerWeapons(playerid);
CheckWin();
return 1;
}
forward CheckWin();
public CheckWin()
{
if(DMCount == 1)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) continue;
if(!InDM[i]) continue;
new string[65], winner[MAX_PLAYER_NAME];
GetPlayerName(i, winner, sizeof(winner));
format(string, sizeof(string), "%s(%d) Has won the DeathMatch [Minigame]", winner, i);
SendClientMessageToAll(COLOR_RED, string);
InDM[i] = false;
DMCount = 0;
SetPlayerPos(i, OrigPos[i][0], OrigPos[i][1], OrigPos[i][2]);
ResetPlayerWeapons(i);
break;
}
}
return 1;
}
Re: Deathmatch Winner Declaring Help -
ponagandlamanoj - 28.07.2014
Well, I added that SendClientMessage as you guys said and edited like this
Command /leavedm
Код:
COMMAND:leavedm(playerid,params[])
{
if(InDM[playerid] ==0)
{
SendClientMessage(playerid, COLOR_RED, "You're not in DM");
}
else if(InDM[playerid] ==1)
{
ResetPlayer(playerid); // The Function I declared.
}
return 1;
}
CheckWin() Function
Код:
forward CheckWin();
public CheckWin()
{
if(cn ==1)
{
for(new i=0;i<MAX_PLAYERS;i++)
{
if(InDM[i] ==1)
{
new string[128], winner[MAX_PLAYER_NAME];
GetPlayerName(i,winner,MAX_PLAYER_NAME);
format(string,sizeof(string),"%s(%d) Has won the DeathMatch[Minigame]",winner,i);
SendClientMessageToAll(-1, string);
ResetPlayer(i); // The Same Function.
break;
}
}
}
}
And that ResetPlayer() Function which I declared to make it easier to call whenever necessary.
Код:
forward ResetPlayer(playerid);
public ResetPlayer(playerid)
{
InDM[playerid] =0;
cn--;
SetPlayerPos(playerid,x1,y1,z1);
SetPlayerSkin(playerid,skin);
ResetPlayerWeapons(playerid);
for(new p=0;p<13;p++)
{
GivePlayerWeapon(playerid,weapdat[p][0],weapdat[p][1]);
}
}
Any problem in this? I didn't test this yet as non of my friends are online.
The complete Code for your reference
http://pastebin.com/7EJ8Q0Qt