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;
}