/*
Knogles Last Bed Standing Masterpiece for SA-MP
Fork of Minecrafts Bedwars
Little TDM Gamemode
Published under GNU GPL Public License.
Copyright (C) 2017 Fabian Druschke
Contact: [email protected]
Mail: Postfach 32 22 50147 Kerpen Germany
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/
*/
#include <a_samp>
#include <sscanf2>
#include <YSI\y_ini>
#include <nex-ac>
#define FIRST_TEAM 0
#define SECOND_TEAM 1
#define THIRD_TEAM 2
#define FOURTH_TEAM 3
#define FIFTH_TEAM 4
#define SIXTH_TEAM 5
#define TEAM_SPECTATOR 6
enum
{
CHILLIAD,
SAN_FIERRO_DOCKS,
BONE_COUNTY,
MAD_DOGGS,
COUNTRYSIDE_1,
GREEN_PALMS,
COUNTRYSIDE_2
};
enum pInfo
{
pBombs,
pPass,
pBeds,
pKills,
pDeaths,
pAdmin
};
enum
{
INVALID_PICKUP_TYPE,
MONEY_TYPE,
ACTOR_TYPE,
INFO_TYPE
};
enum weather_info
{
wt_id,
wt_text[255]
};
#define MAPTYPE CHILLIAD
#define PATH "/Users/%s.ini"
#define PRESSED(%0) \
(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
#define ADMIN_SPEC_TYPE_NONE 0
#define ADMIN_SPEC_TYPE_PLAYER 1
#define ADMIN_SPEC_TYPE_VEHICLE 2
#define COLOR_WHITE 0xFFFFFFFF
#define COLOR_NORMAL_PLAYER 0xFFBB7777
#define COLOR_GREY 0xAFAFAFAA
#define COLOR_RED 0xAA3333AA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_YELLOW 0xFFFF0055
#define COLOR_BLUE 0x0000BBAA
#define COLOR_NAVY 0x000080AA
#define MoneyVal 1000
//----------------------------------------------------------
forward WeatherTimer();
forward GMX();
forward RandomWeather();
forward SaveUser_data(playerid);
forward ResetPlayerData(playerid);
forward warpcount(playerid);
forward TeleportPlayerToBase(playerid);
forward reveal(playerid);
forward quickSort(array[], left, right);
forward PrepareToBlowUp(playerid);
forward GetPickupType(pickupid, &index);
forward Float:frandom(Float:max, Float:min = 0.0, dp = 4);
forward GetXYInFrontOfActor(actorid, &Float:x, &Float:y, Float:distance);
forward GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance);
forward Float:GetDistance( Float:a1, Float:b1, Float:c1, Float:a2, Float:b2, Float:c2 );
forward GenerateRandomPickup(modelid,type,Float:x_max,Float:x_min,Float:y_max,Float:y_min,Float:z_max,Float:z_min,virtualworld);
forward LoadUser_data(playerid,name[],value[]);
forward MONEY_MAIN();
forward TEAM_MONEY();
forward BlowUpThisBed();
forward SendTeamMessage(teamid, color, const message[]);
forward SellPlayerFightingStyle(playerid,cost,style);
forward SellPlayerWeapon(playerid,cost,weaponid,ammo);
forward SpecPlayer(playerid,targetplayer);
forward UpdateTimeAndWeather();
forward CountDown();
//----------------------------------------------------------
new Warppowder[MAX_PLAYERS];
new PBeds[MAX_PLAYERS];
new PKills[MAX_PLAYERS];
new PSkill[MAX_PLAYERS];
new PBomb[MAX_PLAYERS];
new LastMoney[MAX_PLAYERS];
new PStealth[MAX_PLAYERS];
new String[128], Float:SpecX[MAX_PLAYERS], Float:SpecY[MAX_PLAYERS], Float:SpecZ[MAX_PLAYERS], vWorld[MAX_PLAYERS], Inter[MAX_PLAYERS];
new IsSpecing[MAX_PLAYERS], Name[MAX_PLAYER_NAME], IsBeingSpeced[MAX_PLAYERS],spectatorid[MAX_PLAYERS];
new Float:pX[MAX_PLAYERS];
new Float:pY[MAX_PLAYERS];
new Float:pZ[MAX_PLAYERS];
new Float:wX[MAX_PLAYERS];
new Float:wY[MAX_PLAYERS];
new Float:wZ[MAX_PLAYERS];
new SpectatingPlayer[MAX_PLAYERS];
new PBombID[MAX_PLAYERS];
new Beam[MAX_PLAYERS];
new gPlayerTeamSelection[MAX_PLAYERS];
new gPlayerHasTeamSelected[MAX_PLAYERS];
new gPlayerLastTeamSelectionTick[MAX_PLAYERS];
new PlayerInfo[MAX_PLAYERS][pInfo];
new BombObject[MAX_PLAYERS];
new Shop_Counter;
//--------------------------------------------------------------
new totaltime;
new gRandomWeatherIDs[][weather_info] =
{
{1,"Sunny"},
{8,"Stormy"},
{9,"Foggy Sky"},
{11,"Extreme Sunny"},
{16,"Rainy"},
{19,"Thunderstorm"},
{20,"Foggy"}
};
//--------------------------------------------------------------
new Menu:infomenu;
new Menu:fightstyles;
new Menu:shotguns;
new Menu:items;
new Menu:smg;
new Menu:rifles;
new Menu:yesno;
new Menu:assaultrifle;
new Menu:Grenades;
new Menu:melee;
new Menu:special;
new Menu:shopmenu;
new Menu:ammunation;
new Menu:pistols;
new Menu:microsmg;
//--------------------------------------------------------------
new Text:txtClassSelHelper;
new Text:txtTimeDisp;
new Text:Textcover;
new PlayerText:TeamCover[MAX_PLAYERS];
new PlayerText:TeamText[MAX_PLAYERS];
new PlayerText:LocText[MAX_PLAYERS];
//--------------------------------------------------------------
new moneyval;
new maxmoney;
new Float:x1, Float:y1, Float:z1;
new running;
new CountDownVar = 4;
new WarpVar[MAX_PLAYERS];
new WarpTimer;
new CountDownTimer;
new hour, minute;
new timestr[32];
new timestrex[32];
new delay=1000;// only allow new selection every ~1000 ms; may differ due to server load
new bombtimer=5000;// time in ms to blow up closest bedwars bed
new MoneyDropTimer=2500;// Time to generate new moneypickups
//--------------------------------------------------------------
stock udb_hash(buf[]) {
new length=strlen(buf);
new s1 = 1;
new s2 = 0;
new n;
for (n=0; n<length; n++)
{
s1 = (s1 + buf[n]) % 65521;
s2 = (s2 + s1) % 65521;
}
return (s2 << 16) + s1;
}
#if defined MAPTYPE
#if MAPTYPE==CHILLIAD
#include <chilliad.pwn>
#elseif MAPTYPE==BONE_COUNTY
#include <bone_county.pwn>
#elseif MAPTYPE==SAN_FIERRO_DOCKS
#include <../../gamemodes/san_fierro_docks.pwn>
#elseif MAPTYPE==MAD_DOGGS
#include <mad_doggs.pwn>
#elseif MAPTYPE==GREEN_PALMS
#include <green_palms.pwn>
#elseif MAPTYPE==COUNTRYSIDE_1
#include <countryside_1.pwn>
#elseif MAPTYPE==COUNTRYSIDE_2
#include <countryside_2.pwn>
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE > 6
#error Amount of Teams is limited to 6!
#endif
#if TEAMSIZE < 2
#error Minimum Amount of Teams is limited to 2!
#endif
#endif
new ActorPickups[sizeof(GlobalActors)];
new InfoPickups[sizeof(PlayerInfoPickups)];
new MoneyPickups[MAX_PICKUPS-sizeof(ActorPickups)-sizeof(InfoPickups)-1];
#define BYTECOUNT (cellbits / 8)
stock binarysearch(a[],key,l,r)
{
new k;
while(r >=l)
{
k = (l+r)/2;
if(key == a[k])
{
return k;
}
if(key < a[k])
{
r = k-1;
}
else
{
l= k+1;
}
}
return -1;
}
stock binarysearch2(a[][],idx,key,l,r)
{
new k;
while(r >=l)
{
k = (l+r)/2;
if(key == a[k][idx])
{
return k;
}
if(key < a[k][idx])
{
r = k-1;
}
else
{
l= k+1;
}
}
return -1;
}
stock SendClientMessageEx(playerid, color, fstring[], {Float, _}:...)
{
static const
ARGC = 3;
new n = (numargs() - ARGC) * BYTECOUNT;
if (n)
{
new message[128], arg_start, arg_end;
#emit CONST.alt fstring
#emit LCTRL 5
#emit ADD
#emit STOR.S.pri arg_start
#emit LOAD.S.alt n
#emit ADD
#emit STOR.S.pri arg_end
do
{
#emit LOAD.I
#emit PUSH.pri
arg_end -= BYTECOUNT;
#emit LOAD.S.pri arg_end
}
while (arg_end > arg_start);
#emit PUSH.S fstring
#emit PUSH.C 128
#emit PUSH.ADR message
n += BYTECOUNT * 3;
#emit PUSH.S n
#emit SYSREQ.C format
n += BYTECOUNT;
#emit LCTRL 4
#emit LOAD.S.alt n
#emit ADD
#emit SCTRL 4
return SendClientMessage(playerid, color, message);
}
else
{
return SendClientMessage(playerid, color, fstring);
}
}
new TEAM_ZONE_ONE;
new TEAM_ZONE_TWO;
#if defined TEAMSIZE
#if TEAMSIZE >=3
new TEAM_ZONE_THREE;
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >=4
new TEAM_ZONE_FOUR;
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >=5
new TEAM_ZONE_FIVE;
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE == 6
new TEAM_ZONE_SIX;
#endif
#endif
new BED_STATE_TEAM_ONE;
new BED_STATE_TEAM_TWO;
#if defined TEAMSIZE
#if TEAMSIZE >=3
new BED_STATE_TEAM_THREE;
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >=4
new BED_STATE_TEAM_FOUR;
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >=5
new BED_STATE_TEAM_FIVE;
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE ==6
new BED_STATE_TEAM_SIX;
#endif
#endif
public OnGameModeInit()
{
CreateObject(1829,243.1000100,1804.9000000,6.9000000,0.0000000,0.0000000,0.0000000); //object(man_safenew) (1) //Skin selection
#if defined MAPTYPE
#if MAPTYPE==CHILLIAD
#tryinclude <chilliad_vehicles.txt>
#tryinclude <chilliad_objects.txt>
#elseif MAPTYPE==BONE_COUNTY
#tryinclude <bone_vehicles.txt>
#tryinclude <bone_objects.txt>
#elseif MAPTYPE==MAD_DOGGS
#tryinclude <md_vehicles.txt>
#tryinclude <md_objects.txt>
#elseif MAPTYPE==SAN_FIERRO_DOCKS
#tryinclude <sf_vehicles.txt>
#tryinclude <sf_objects.txt>
#elseif MAPTYPE==GREEN_PALMS
#tryinclude <gp_vehicles.txt>
#tryinclude <gp_objects.txt>
#elseif MAPTYPE==COUNTRYSIDE_1
#tryinclude <cs_vehicles.txt>
#tryinclude <cs_objects.txt>
#elseif MAPTYPE==COUNTRYSIDE_2
#tryinclude <cs2_vehicles.txt>
#tryinclude <cs2_objects.txt>
#endif
#endif
for(new t;t<sizeof(MoneyPickups);t++)
{
MoneyPickups[t]=-1;
}
for(new d;d<sizeof(ActorPickups);d++)
{
ActorPickups[d]=-1;
}
for(new f;f<sizeof(InfoPickups);f++)
{
InfoPickups[f]=-1;
}
SendRconCommand("mapname "#MAPTYPE);
SetTimer("RandomWeather", 300000, 1);
#if defined TEAMSIZE
#if TEAMSIZE >=2
TEAM_ZONE_ONE = GangZoneCreate(GlobalZones[0][0],GlobalZones[0][1],GlobalZones[0][2],GlobalZones[0][3]);
TEAM_ZONE_TWO = GangZoneCreate(GlobalZones[1][0],GlobalZones[1][1],GlobalZones[1][2],GlobalZones[1][3]);
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >=3
TEAM_ZONE_THREE = GangZoneCreate(GlobalZones[2][0],GlobalZones[2][1],GlobalZones[2][2],GlobalZones[2][3]);
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >=4
TEAM_ZONE_FOUR = GangZoneCreate(GlobalZones[3][0],GlobalZones[3][1],GlobalZones[3][2],GlobalZones[3][3]);
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >=5
TEAM_ZONE_FIVE = GangZoneCreate(GlobalZones[4][0],GlobalZones[4][1],GlobalZones[4][2],GlobalZones[4][3]);
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >=6
TEAM_ZONE_SIX = GangZoneCreate(GlobalZones[5][0],GlobalZones[5][1],GlobalZones[5][2],GlobalZones[5][3]);
#endif
#endif
for(new g=0;g<sizeof(GlobalActors);g++)
{
CreateGlobalActor(g+1,274,GlobalActors[g][0],GlobalActors[g][1],GlobalActors[g][2],GlobalActors[g][3],3.0,g);
SetActorInvulnerable(g+1, true);
}
for(new t=0;t<sizeof(InfoPickups);t++)
{
InfoPickups[t]=CreatePickup(1239,2,PlayerInfoPickups[t][0],PlayerInfoPickups[t][1],PlayerInfoPickups[t][2],0);
}
infomenu = CreateMenu("Information", 1,20,200,200);
if(IsValidMenu(infomenu)){
AddMenuItem(infomenu, 0, "How to play");
AddMenuItem(infomenu, 0, "FAQ");
AddMenuItem(infomenu, 0, "Rules");
}
shopmenu = CreateMenu("Ammu-Nation", 1,20,200,200);
if(IsValidMenu(shopmenu)){
AddMenuItem(shopmenu, 0, "Weapons");
AddMenuItem(shopmenu, 0, "Improve Skill");
AddMenuItem(shopmenu, 0, "Stealth $85000");
AddMenuItem(shopmenu, 0, "Bomb $100000");
AddMenuItem(shopmenu, 0, "Warpkit $50000");
AddMenuItem(shopmenu, 0, "Suicide");
}
yesno=CreateMenu("~w~Confirmation",1,20,150,150);
if(IsValidMenu(yesno)){
SetMenuColumnHeader(yesno, 0, "Suicide");
AddMenuItem(yesno, 0, "Yes");
AddMenuItem(yesno, 0, "No");
AddMenuItem(yesno, 0, "Back");
}
ammunation=CreateMenu("~w~Weaponlist",1,20,150,150);
if(IsValidMenu(ammunation)){
SetMenuColumnHeader(ammunation, 0, "Weapon Type");
AddMenuItem(ammunation,0," Pistols");
AddMenuItem(ammunation,0," Micro SMG");
AddMenuItem(ammunation,0," Shotguns");
AddMenuItem(ammunation,0," Misc");
AddMenuItem(ammunation,0," SMG");
AddMenuItem(ammunation,0," Rifles");
AddMenuItem(ammunation,0," Assault rifle");
AddMenuItem(ammunation,0," Grenades");
AddMenuItem(ammunation,0," Hand Guns");
AddMenuItem(ammunation,0," Special");
AddMenuItem(ammunation, 0, "Back");
}
pistols=CreateMenu("~w~Ammu-Nation",1,20,150,150);
if(IsValidMenu(pistols)){
SetMenuColumnHeader(pistols, 0, "Pistole");
AddMenuItem(pistols,0," 9mm $1500");
AddMenuItem(pistols,0," 9mm Silenced $2500");
AddMenuItem(pistols,0," Desert Eagle $2500");
AddMenuItem(pistols, 0, "Back");
}
microsmg=CreateMenu("~w~Ammu-Nation",1,20,150,150);
if(IsValidMenu(microsmg)){
SetMenuColumnHeader(microsmg, 0, "Micro SMG");
AddMenuItem(microsmg,0," Tec9 $5500");
AddMenuItem(microsmg,0," Micro SMG $5000");
AddMenuItem(microsmg, 0, "Back");
}
shotguns=CreateMenu("~w~Ammu-Nation",1,20,150,150);
if(IsValidMenu(shotguns)){
SetMenuColumnHeader(shotguns, 0, "Shotguns");
AddMenuItem(shotguns,0," Shotgun $12500");
AddMenuItem(shotguns,0," Sawn Off $15500");
AddMenuItem(shotguns,0," Combat Shotgun $55500");
AddMenuItem(shotguns, 0, "Back");
}
items=CreateMenu("~w~Ammu-Nation",1,20,150,150);
if(IsValidMenu(items)){
SetMenuColumnHeader(items, 0, "Item");
AddMenuItem(items,0," Armour $2500");
AddMenuItem(items,0," Parachute $2500");
AddMenuItem(items,0," Spraycan $2500");
AddMenuItem(items,0," Camera $2500");
AddMenuItem(items,0," Fightstyles");
AddMenuItem(items,0," Health $2500");
AddMenuItem(items,0,"Back");
}
fightstyles=CreateMenu("~w~Ammu-Nation",1,20,150,150);
if(IsValidMenu(fightstyles)){
SetMenuColumnHeader(fightstyles, 0, "Fightstyles");
AddMenuItem(fightstyles,0," Kung Fu $2500");
AddMenuItem(fightstyles,0," Kneehead $2500");
AddMenuItem(fightstyles,0," Boxing $2500");
AddMenuItem(fightstyles,0," Grabkick $2500");
AddMenuItem(fightstyles,0," Elbow $2500");
AddMenuItem(fightstyles,0," Normal");
AddMenuItem(fightstyles,0,"Back");
}
smg=CreateMenu("~w~Ammu-Nation",1,30,150,150);
if(IsValidMenu(smg)){
SetMenuColumnHeader(smg, 0, "SMG");
AddMenuItem(smg,0," SMG $20000");
AddMenuItem(smg, 0, "Back");
}
rifles=CreateMenu("~w~Ammu-Nation",1,20,150,150);
if(IsValidMenu(rifles)){
SetMenuColumnHeader(rifles, 0, "Rifle");
AddMenuItem(rifles,0," Cunt Gun $12500");
AddMenuItem(rifles,0," Sniper Rifle $40000");
AddMenuItem(rifles, 0, "Back");
}
assaultrifle=CreateMenu("~w~Ammu-Nation",1,20,150,150);
if(IsValidMenu(assaultrifle)){
SetMenuColumnHeader(assaultrifle, 0, "Assault Rifle");
AddMenuItem(assaultrifle,0," AK-47 $40000");
AddMenuItem(assaultrifle,0," M4 $45000");
AddMenuItem(assaultrifle, 0, "Back");
}
special=CreateMenu("~w~Ammu-Nation",1,20,150,150);
if(IsValidMenu(special)){
SetMenuColumnHeader(special, 0, "special");
AddMenuItem(special,0," Minigun $2000000");
AddMenuItem(special,0," Bazooka $250000");
AddMenuItem(special,0," Flame Thrower $250000");
AddMenuItem(special, 0, "Back");
}
melee=CreateMenu("~w~Ammu-Nation",1,20,150,150);
if(IsValidMenu(melee)){
SetMenuColumnHeader(melee, 0, "Hand Guns");
AddMenuItem(melee,0," Baseball");
AddMenuItem(melee,0," Dildo");
AddMenuItem(melee,0," Chainsaw $100000");
AddMenuItem(melee,0," Katana");
AddMenuItem(melee,0," Pool cue");
AddMenuItem(melee,0," Knife");
AddMenuItem(melee,0," Night Stick");
AddMenuItem(melee,0," Golf Club");
AddMenuItem(melee, 0, "Back");
}
Grenades=CreateMenu("~w~Ammu-Nation",1,20,150,150);
if(IsValidMenu(Grenades)){
SetMenuColumnHeader(Grenades, 0, "Grenades");
AddMenuItem(Grenades,0," Grenades $125000");
AddMenuItem(Grenades,0," Tear Gas $25000");
AddMenuItem(Grenades,0," Molotovs $25000");
AddMenuItem(Grenades, 0, "Back");
}
SetTimer("TEAM_MONEY", MoneyDropTimer, true);
SetTimer("MONEY_MAIN", 1000, true);
UpdateTimeAndWeather();
SetTimer("UpdateTimeAndWeather",1000 * 60,1);
SetGameModeText("Bedwars");
ShowPlayerMarkers(PLAYER_MARKERS_MODE_GLOBAL);
ShowNameTags(1);
SetNameTagDrawDistance(40.0);
EnableStuntBonusForAll(0);
SetWeather(2);
UsePlayerPedAnims();
ClassSel_InitTextDraws();
// Player Classes/
for(new a=299; a!=0;a--)
{
AddPlayerClass(a,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
}
txtTimeDisp = TextDrawCreate(605.0,25.0,"00:00");
TextDrawUseBox(txtTimeDisp, 0);
TextDrawFont(txtTimeDisp, 3);
TextDrawSetShadow(txtTimeDisp,0); // no shadow
TextDrawSetOutline(txtTimeDisp,2); // thickness 1
TextDrawBackgroundColor(txtTimeDisp,0x000000FF);
TextDrawColor(txtTimeDisp,0xFFFFFFFF);
TextDrawAlignment(txtTimeDisp,3);
TextDrawLetterSize(txtTimeDisp,0.5,1.5);
return 1;
}
stock GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
{
new Float:a;
GetPlayerPos(playerid, x, y, a);
GetPlayerFacingAngle(playerid, a);
if (GetPlayerVehicleID(playerid))
{
GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
}
x += (distance * floatsin(-a, degrees));
y += (distance * floatcos(-a, degrees));
}
stock Float:frandom(Float:max, Float:min = 0.0, dp = 4)
{
new
Float:mul = floatpower(10.0, dp),
imin = floatround(min * mul),
imax = floatround(max * mul);
return float(random(imax - imin) + imin) / mul;
}
stock UserPath(playerid)
{
new string[128],playername[MAX_PLAYER_NAME];
GetPlayerName(playerid,playername,sizeof(playername));
format(string,sizeof(string),PATH,playername);
return string;
}
public SaveUser_data(playerid)
{
new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File,"data");
INI_WriteInt(File,"Bombs",PlayerInfo[playerid][pBombs]);
INI_WriteInt(File,"Beds",PlayerInfo[playerid][pBeds]);
INI_WriteInt(File,"Kills",PlayerInfo[playerid][pKills]);
INI_WriteInt(File,"Deaths",PlayerInfo[playerid][pDeaths]);
INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);
INI_Close(File);
}
public RandomWeather()
{
new rand = random(sizeof(gRandomWeatherIDs));
new strout[256];
format(strout, sizeof(strout), "Weather changed to %s", gRandomWeatherIDs[rand][wt_text]);
SetWeather(gRandomWeatherIDs[rand][wt_id]);
SendClientMessageToAll(COLOR_WHITE,strout);
print(strout);
}
public LoadUser_data(playerid,name[],value[])
{
//INI_Int("Password",PlayerInfo[playerid][pPass]);
INI_Int("Bombs",PlayerInfo[playerid][pBeds]);
INI_Int("Beds",PlayerInfo[playerid][pBeds]);
INI_Int("Kills",PlayerInfo[playerid][pKills]);
INI_Int("Deaths",PlayerInfo[playerid][pDeaths]);
INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
return 1;
}
stock TeleportPlayerToBase(playerid)
{
#if defined TEAMSIZE
#if TEAMSIZE >= 2
new randSpawn=0;
switch(gPlayerTeamSelection[playerid])
{
case 0:
{
new str[80];
randSpawn = random(sizeof(gSpawnsTeam_TEAM_ONE));
format(str,sizeof(str),"SERVER: You have been teleported to the base of your team "#FIRST_TEAM_COLOR_TAG);
SendClientMessage(playerid,COLOR_WHITE,str);
SetPlayerPos(playerid,
gSpawnsTeam_TEAM_ONE[randSpawn][0],
gSpawnsTeam_TEAM_ONE[randSpawn][1],
gSpawnsTeam_TEAM_ONE[randSpawn][2]);
}
case 1:
{
new str[80];
randSpawn = random(sizeof(gSpawnsTeam_TEAM_TWO));
format(str,sizeof(str),"SERVER: You have been teleported to the base of your team "#SECOND_TEAM_COLOR_TAG);
SendClientMessage(playerid,COLOR_WHITE,str);
SetPlayerPos(playerid,
gSpawnsTeam_TEAM_TWO[randSpawn][0],
gSpawnsTeam_TEAM_TWO[randSpawn][1],
gSpawnsTeam_TEAM_TWO[randSpawn][2]);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 3
case 2:
{
new str[80];
randSpawn = random(sizeof(gSpawnsTeam_TEAM_THREE));
format(str,sizeof(str),"SERVER: You have been teleported to the base of your team "#THIRD_TEAM_COLOR_TAG);
SendClientMessage(playerid,COLOR_WHITE,str);
SetPlayerPos(playerid,
gSpawnsTeam_TEAM_THREE[randSpawn][0],
gSpawnsTeam_TEAM_THREE[randSpawn][1],
gSpawnsTeam_TEAM_THREE[randSpawn][2]);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 4
case 3:
{
new str[80];
randSpawn = random(sizeof(gSpawnsTeam_TEAM_FOUR));
format(str,sizeof(str),"SERVER: You have been teleported to the base of your team "#FOURTH_TEAM_COLOR_TAG);
SendClientMessage(playerid,COLOR_WHITE,str);
SetPlayerPos(playerid,
gSpawnsTeam_TEAM_FOUR[randSpawn][0],
gSpawnsTeam_TEAM_FOUR[randSpawn][1],
gSpawnsTeam_TEAM_FOUR[randSpawn][2]);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 5
case 4:
{
new str[80];
randSpawn = random(sizeof(gSpawnsTeam_TEAM_FIVE));
format(str,sizeof(str),"SERVER: You have been teleported to the base of your team "#FIFTH_TEAM_COLOR_TAG);
SendClientMessage(playerid,COLOR_WHITE,str);
SetPlayerPos(playerid,
gSpawnsTeam_TEAM_FIVE[randSpawn][0],
gSpawnsTeam_TEAM_FIVE[randSpawn][1],
gSpawnsTeam_TEAM_FIVE[randSpawn][2]);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE == 6
case 5:
{
new str[80];
randSpawn = random(sizeof(gSpawnsTeam_TEAM_SIX));
format(str,sizeof(str),"SERVER: You have been teleported to the base of your team "#SIXTH_TEAM_COLOR_TAG);
SendClientMessage(playerid,COLOR_WHITE,str);
SetPlayerPos(playerid,
gSpawnsTeam_TEAM_SIX[randSpawn][0],
gSpawnsTeam_TEAM_SIX[randSpawn][1],
gSpawnsTeam_TEAM_SIX[randSpawn][2]);
}
#endif
#endif
}
}
stock SpecPlayer(playerid,targetplayer)
{
GetPlayerPos(playerid,SpecX[playerid],SpecY[playerid],SpecZ[playerid]);
Inter[playerid] = GetPlayerInterior(playerid);
vWorld[playerid] = GetPlayerVirtualWorld(playerid);
TogglePlayerSpectating(playerid, true);
if(IsPlayerInAnyVehicle(targetplayer))
{
if(GetPlayerInterior(targetplayer) > 0)
{
SetPlayerInterior(playerid,GetPlayerInterior(targetplayer));
}
if(GetPlayerVirtualWorld(targetplayer) > 0)
{
SetPlayerVirtualWorld(playerid,GetPlayerVirtualWorld(targetplayer));
}
PlayerSpectateVehicle(playerid,GetPlayerVehicleID(targetplayer));
}
else
{
if(GetPlayerInterior(targetplayer) > 0)
{
SetPlayerInterior(playerid,GetPlayerInterior(targetplayer));
}
if(GetPlayerVirtualWorld(targetplayer) > 0)
{
SetPlayerVirtualWorld(playerid,GetPlayerVirtualWorld(targetplayer));
}
PlayerSpectatePlayer(playerid,targetplayer);
}
GetPlayerName(targetplayer, Name, sizeof(Name));
format(String, sizeof(String),"SERVER: You have started to spectate %s.",Name);
SendClientMessage(playerid,COLOR_WHITE,String);
IsSpecing[playerid] = 1;
IsBeingSpeced[targetplayer] = 1;
spectatorid[playerid] = targetplayer;
}
stock SpecRandomPlayer(playerid)
{
new randoms[MAX_PLAYERS],idx;
for(new i=GetPlayerPoolSize(); i!=-1; i--)
{
if(IsPlayerConnected(i) && gPlayerTeamSelection[i] != TEAM_SPECTATOR && playerid != i)
{
randoms[idx++]=i;
}
}
if(!idx) return 0; // INVALID_PLAYER_ID
SpecPlayer(playerid, randoms[random(idx)]);
return 1;
}
public reveal(playerid)
{
SendClientMessage(playerid,COLOR_WHITE,"SERVER: You are visible again!");
if(PStealth[playerid] == -1 && (gPlayerTeamSelection[playerid] == FIRST_TEAM))
{
PStealth[playerid]=0;
SetPlayerColor(playerid,COLOR_TEAM_ONE);
}
if(PStealth[playerid] == -1 && (gPlayerTeamSelection[playerid] == SECOND_TEAM))
{
PStealth[playerid]=0;
SetPlayerColor(playerid,COLOR_TEAM_TWO);
}
#if defined TEAMSIZE
#if TEAMSIZE >= 3
if(PStealth[playerid] == -1 && (gPlayerTeamSelection[playerid] == THIRD_TEAM))
{
PStealth[playerid]=0;
SetPlayerColor(playerid,COLOR_TEAM_THREE);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 4
if(PStealth[playerid] == -1 && (gPlayerTeamSelection[playerid] == FOURTH_TEAM))
{
PStealth[playerid]=0;
SetPlayerColor(playerid,COLOR_TEAM_FOUR);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 5
if(PStealth[playerid] == -1 && (gPlayerTeamSelection[playerid] == FIFTH_TEAM))
{
PStealth[playerid]=0;
SetPlayerColor(playerid,COLOR_TEAM_FIVE);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE == 6
if(PStealth[playerid] == -1 && (gPlayerTeamSelection[playerid] == SIXTH_TEAM))
{
PStealth[playerid]=0;
SetPlayerColor(playerid,COLOR_TEAM_SIX);
}
#endif
#endif
}
stock SellPlayerWeapon(playerid,cost,weaponid,ammo)
{
if(GetPlayerMoney(playerid) >= cost)
{
new spentstring[128];
format(spentstring,sizeof(spentstring),"SERVER: You spent $%d to purchase this weapon!",cost);
SendClientMessage(playerid,COLOR_WHITE,spentstring);
printf("%d spent %d to purchase weapon %d",playerid,cost,weaponid);
GivePlayerWeapon(playerid,weaponid,ammo);
GivePlayerMoneyText(playerid,-cost);
TogglePlayerControllable(playerid,true);
}
else
{
new leftmoney = (GetPlayerMoney(playerid)-cost);
new insufstring[128];
format(insufstring,sizeof(insufstring),"SERVER: You still need $%d to purchase this weapon!",-leftmoney);
SendClientMessage(playerid,COLOR_WHITE,"SERVER: Insufficient balance! You can not afford this weapon!");
printf("%d tried to purchase weapon %d but still needs %d",playerid,weaponid,-leftmoney);
SendClientMessage(playerid,COLOR_WHITE,insufstring);
TogglePlayerControllable(playerid,true);
}
}
stock SellPlayerFightingStyle(playerid,cost,style)
{
if(GetPlayerMoney(playerid) >= cost)
{
new spentstring[128];
format(spentstring,sizeof(spentstring),"SERVER: You spent $%d to purchase this style!",cost);
SendClientMessage(playerid,COLOR_WHITE,spentstring);
SetPlayerFightingStyle(playerid,style);
GivePlayerMoneyText(playerid,-cost);
TogglePlayerControllable(playerid,true);
}
else
{
new leftmoney = (GetPlayerMoney(playerid)-cost);
new insufstring[128];
format(insufstring,sizeof(insufstring),"SERVER: You still need $%d to purchase this fightstyle!",-leftmoney);
SendClientMessage(playerid,COLOR_WHITE,"SERVER: Insufficient balance! You can not afford this fightstyle!");
SendClientMessage(playerid,COLOR_WHITE,insufstring);
TogglePlayerControllable(playerid,true);
}
}
stock GenerateRandomPickup(modelid,type,Float:x_max,Float:x_min,Float:y_max,Float:y_min,Float:z_max,Float:z_min,virtualworld)
{
if(maxmoney <= sizeof(MoneyPickups))
{
moneyval= moneyval+1000;
new Float:rx1=((frandom((floatabs(x_max-x_min)))+x_min));
new Float:ry2=((frandom((floatabs(y_max-y_min)))+y_min));
new Float:rz3=((frandom((floatabs(z_max-z_min)))+z_min));
maxmoney = maxmoney +1;
MoneyPickups[maxmoney] = CreatePickup(modelid,type,rx1,ry2,rz3,virtualworld);
HeapSort(MoneyPickups);
}
}
public CountDown()
{
CountDownVar--;
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(CountDownVar == 0)
{
KillTimer(CountDownTimer);
CountDownVar = 4;
PlayerPlaySound(i,7419,0,0,0);
}
if(CountDownVar == 1)
{
PlayerPlaySound(i,7418,0,0,0);
}
if(CountDownVar == 2)
{
PlayerPlaySound(i,7417,0,0,0);
}
}
return 1;
}
public warpcount(playerid)
{
WarpVar[playerid]--;
new Float:x,Float:y,Float:z;
GetPlayerPos(playerid,x,y,z);
if(WarpVar[playerid] == 0)
{
if(!IsPlayerInRangeOfPoint(playerid,2.0,wX[playerid],wY[playerid],wZ[playerid]))
{
KillTimer(WarpTimer);
WarpVar[playerid] = 4;
Warppowder[playerid]=1;
if(IsValidObject(Beam[playerid]))
DestroyObject(Beam[playerid]);
return SendClientMessage(playerid,COLOR_WHITE,"SERVER: You moved right away! Teleport aborted.");
}
if(IsValidObject(Beam[playerid]))
DestroyObject(Beam[playerid]);
TeleportPlayerToBase(playerid);
WarpVar[playerid] = 4;
KillTimer(WarpTimer);
PlayerPlaySound(playerid,1137,x,y,z);
}
if(WarpVar[playerid] == 1)
{
if(!IsPlayerInRangeOfPoint(playerid,2.0,wX[playerid],wY[playerid],wZ[playerid]))
{
KillTimer(WarpTimer);
WarpVar[playerid] = 4;
Warppowder[playerid]=1;
if(IsValidObject(Beam[playerid]))
DestroyObject(Beam[playerid]);
return SendClientMessage(playerid,COLOR_WHITE,"SERVER: You moved right away! Teleport aborted.");
}
PlayerPlaySound(playerid,1137,x,y,z);
}
if(WarpVar[playerid] == 2)
{
if(!IsPlayerInRangeOfPoint(playerid,2.0,wX[playerid],wY[playerid],wZ[playerid]))
{
KillTimer(WarpTimer);
WarpVar[playerid] = 4;
Warppowder[playerid]=1;
if(IsValidObject(Beam[playerid]))
DestroyObject(Beam[playerid]);
return SendClientMessage(playerid,COLOR_WHITE,"SERVER: You moved right away! Teleport aborted.");
}
PlayerPlaySound(playerid,1137,x,y,z);
}
if(WarpVar[playerid] == 3)
{
if(!IsPlayerInRangeOfPoint(playerid,2.0,wX[playerid],wY[playerid],wZ[playerid]))
{
KillTimer(WarpTimer);
WarpVar[playerid] = 4;
Warppowder[playerid]=1;
if(IsValidObject(Beam[playerid]))
DestroyObject(Beam[playerid]);
return SendClientMessage(playerid,COLOR_WHITE,"SERVER: You moved right away! Teleport aborted.");
}
PlayerPlaySound(playerid,1137,x,y,z);
}
return 1;
}
public SendTeamMessage(teamid, color, const message[])
{
for(new i; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) continue;
if(gPlayerTeamSelection[i] != teamid) continue;
SendClientMessage(i, color, message);
printf("TEAM MESSAGE SENT");
}
return 1;
}
public OnPlayerExitedMenu(playerid)
{
TogglePlayerControllable(playerid,true);
return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
new index;
switch(GetPickupType(pickupid,index))
{
case INVALID_PICKUP_TYPE:
{
}
case MONEY_TYPE:
{
maxmoney -= 1;
GivePlayerMoney(playerid, MoneyVal);
printf("ID picked up: %d",maxmoney);
MoneyPickups[index]=-1;
quickSort(MoneyPickups,0,sizeof(MoneyPickups)-1);
DestroyPickup(pickupid);
}
case ACTOR_TYPE:
{
ShowMenuForPlayer(shopmenu,playerid);
TogglePlayerControllable(playerid,false);
}
case INFO_TYPE:
{
ShowMenuForPlayer(infomenu,playerid);
TogglePlayerControllable(playerid,false);
}
}
return 1;
}
stock GetPickupType(pickupid, &index)
{
new mres = binarysearch(MoneyPickups,pickupid,0,sizeof(MoneyPickups)-1);
if(mres > -1 && MoneyPickups[mres] == pickupid) return index=mres,MONEY_TYPE;
new ares = binarysearch(ActorPickups,pickupid,0,sizeof(ActorPickups)-1);
if(ares > -1 && ActorPickups[ares] == pickupid) return index=ares,ACTOR_TYPE;
new ires = binarysearch(InfoPickups,pickupid,0,sizeof(InfoPickups)-1);
if(ires > -1 && InfoPickups[ires] == pickupid) return index=ires,INFO_TYPE;
return INVALID_PICKUP_TYPE;
}
public UpdateTimeAndWeather()
{
gettime(hour, minute);
format(timestr,32,"%02d:%02d",hour,minute);
format(timestrex,32,"Time: %02d:%02d",hour,minute);
TextDrawSetString(txtTimeDisp,timestr);
for(new i;i<MAX_PLAYERS;i++)
{
if(!IsPlayerConnected(i)) continue;
SaveUser_data(i);
if(IsPlayerAdmin(i))
PlayerInfo[i][pAdmin]=1;
}
SetWorldTime(hour);
new x=0;
while(x!=MAX_PLAYERS) {
if(IsPlayerConnected(x)) {
SetPlayerTime(x,hour,minute);
}
x++;
}
}
main()
{
print(" Knogles Last Bed Standing Masterpiece for SA-MP");
print(" Fork of Minecrafts Bedwars");
print(" Little TDM Gamemode");
print(" Published under GNU GPL Public License.");
print(" Copyright (C) 2017 Fabian Druschke");
print(" Contact: [email protected]");
print(" Mail: Postfach 32 22 50147 Kerpen Germany");
print(" \n This program is free software: you can redistribute it and/or modify");
print(" it under the terms of the GNU General Public License as published by");
print(" the Free Software Foundation, either version 3 of the License, or");
print(" (at your option) any later version.");
print(" \n This program is distributed in the hope that it will be useful,");
print(" but WITHOUT ANY WARRANTY; without even the implied warranty of");
print(" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the");
print(" GNU General Public License for more details.");
print(" \n You should have received a copy of the GNU General Public License");
print(" along with this program. If not, see http://www.gnu.org/licenses/");
printf("\n\nHeapspace: %i kilobytes", heapspace() / 1024);
}
//----------------------------------------------------------
stock Float:GetDistance( Float:a1, Float:b1, Float:c1, Float:a2, Float:b2, Float:c2 )
{
return floatsqroot(((a1-a2)*(a1-a2))+((b1-b2)*(b1-b2))+((c1-c2)*(c1-c2)));
}
stock HeapSort (array [], n = sizeof (array))
{
new i;
for (i = n / 2; i > 0; --i) // Make heap
SinkDown (array, i, n);
for (i = n; i > 1; --i)
{
Swap (array [i - 1], array [0]);
SinkDown (array, 1, i - 1);
}
}
stock quickSort(array[], left, right)
{
new
tempLeft = left,
tempRight = right,
pivot = array[(left + right) / 2],
tempVar
;
while(tempLeft <= tempRight)
{
while(array[tempLeft] < pivot) tempLeft++;
while(array[tempRight] > pivot) tempRight--;
if(tempLeft <= tempRight)
{
tempVar = array[tempLeft], array[tempLeft] = array[tempRight], array[tempRight] = tempVar;
tempLeft++, tempRight--;
}
}
if(left < tempRight) quickSort(array, left, tempRight);
if(tempLeft < right) quickSort(array, tempLeft, right);
}
//----------------------------------------------------------
static stock SinkDown (array [], i, m)
{
new j;
while (2 * i <= m)
{
j = 2 * i;
if (j < m && array [j - 1] < array [j])
++j;
if (array [i - 1] < array [j - 1])
{
Swap (array [i - 1], array [j - 1]);
i = j;
}
else
i = m;
}
}
//----------------------------------------------------------
static stock Swap (&a, &b)
{
new s;
s = a;
a = b;
b = s;
}
//----------------------------------------------------------
stock PreloadAnimLib(playerid, animlib[])
{
ApplyAnimation(playerid,animlib,"null",0.0,0,0,0,0,0);
}
public OnPlayerConnect(playerid)
{
WarpVar[playerid]=4;
PreloadAnimLib(playerid,"BOMBER");
if(fexist(UserPath(playerid)))
{
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
SetPlayerScore(playerid, PlayerInfo[playerid][pBeds]);
}
else
{
new pname[MAX_PLAYER_NAME];
GetPlayerName(playerid,pname,sizeof(pname));
printf("ini file for %s ID:%d does not exist, writing..",pname,playerid);
new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File,"data");
INI_WriteInt(File,"Bombs",0);
INI_WriteInt(File,"Beds",0);
INI_WriteInt(File,"Kills",0);
INI_WriteInt(File,"Deaths",0);
INI_WriteInt(File,"Admin",0);
INI_Close(File);
}
SetPlayerMapIcon(playerid, 12,Center[0][0],Center[0][1],Center[0][2], 52, 0, MAPICON_GLOBAL);
RemoveBuildingForPlayer(playerid, 694,-2406.2607,-1949.2020,303.7252, 200.0);
RemoveBuildingForPlayer(playerid, 784,-2406.2607,-1949.2020,303.7252, 200.0);
RemoveBuildingForPlayer(playerid, 3636, 1220.2734375,2590.296875,16.4453125, 10000.0);
RemoveBuildingForPlayer(playerid,3683, 2377.390625,1743.234375,16.5390625,10000);
RemoveBuildingForPlayer(playerid, 3673, -2137.1953125,70.28125,42.3125, 10000.0);
RemoveBuildingForPlayer(playerid, 3682,1249.5546875,-905.4609375,45.03125,10000);
RemoveBuildingForPlayer(playerid, 3259,1249.5546875,-905.4609375,45.03125,10000);
RemoveBuildingForPlayer(playerid, 3424, 1568.2890625,-1677.78125,10.8203125, 10000.0);
RemoveBuildingForPlayer(playerid, 3674, 1568.2890625,-1677.78125,10.8203125, 10000.0);
RemoveBuildingForPlayer(playerid, 3675, 1568.2890625,-1677.78125,10.8203125, 10000.0);
RemoveBuildingForPlayer(playerid, 3256, 1568.2890625,-1677.78125,10.8203125, 10000.0);
RemoveBuildingForPlayer(playerid, 3258, 1220.2734375,2590.296875,16.4453125, 10000.0);
RemoveBuildingForPlayer(playerid,3673, 2377.390625,1743.234375,16.5390625,10000);
RemoveBuildingForPlayer(playerid, 3255, -2137.1953125,70.28125,42.3125, 10000.0);
RemoveBuildingForPlayer(playerid, 3257,1249.5546875,-905.4609375,45.03125,10000);
RemoveBuildingForPlayer(playerid, 3290, 1220.2734375,2590.296875,16.4453125, 10000.0);
RemoveBuildingForPlayer(playerid,3289, 2377.390625,1743.234375,16.5390625,10000);
RemoveBuildingForPlayer(playerid, 3682, -2137.1953125,70.28125,42.3125, 10000.0);
RemoveBuildingForPlayer(playerid, 3682,1249.5546875,-905.4609375,45.03125,10000);
RemoveBuildingForPlayer(playerid, 3291,1249.5546875,-905.4609375,45.03125,10000);
RemoveBuildingForPlayer(playerid, 3288, 1568.2890625,-1677.78125,10.8203125, 10000.0);
RemoveBuildingForPlayer(playerid, 3291, 1568.2890625,-1677.78125,10.8203125, 10000.0);
RemoveBuildingForPlayer(playerid, 3683, 1568.2890625,-1677.78125,10.8203125, 10000.0);
RemoveBuildingForPlayer(playerid, 16086, 1568.2890625,-1677.78125,10.8203125, 10000.0);
PStealth[playerid]=0;
LastMoney[playerid]=0;
new pname[MAX_PLAYER_NAME], string[22 + MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof(pname));
format(string, sizeof(string), "%s (%d) has joined the server.", pname,playerid);
SendClientMessageToAll(0xAAAAAAAA, string);
PlayerPlaySound(playerid,1185,0,0,0);
GameTextForPlayer(playerid,"~w~Last Bed Standing",3000,4);
SendClientMessage(playerid,COLOR_WHITE,"Welcome to {88AA88}B{FFFFFF}ed {88AA88}W{FFFFFF}ars");
gPlayerTeamSelection[playerid] = -1;
gPlayerHasTeamSelected[playerid] = 0;
gPlayerLastTeamSelectionTick[playerid] = GetTickCount();
return 1;
}
ClassSel_SetupCharSelection(playerid)
{
TextDrawHideForPlayer(playerid,Textcover);
if(gPlayerTeamSelection[playerid] > -1)
{
SetPlayerVirtualWorld(playerid,1);
SetPlayerPos(playerid,243.1261,1805.2798,8.3794);
SetPlayerFacingAngle(playerid,180.0);
SetPlayerCameraPos(playerid,243.2876,1802.5547,7.4141);
SetPlayerCameraLookAt(playerid,243.1261,1805.2798,8.3794);
#if defined TEAMSIZE
#if TEAMSIZE >= 2
switch(gPlayerTeamSelection[playerid])
{
case 0:
{
SetPlayerColor(playerid,COLOR_TEAM_ONE);
}
case 1:
{
SetPlayerColor(playerid,COLOR_TEAM_TWO);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 3
case 2:
{
SetPlayerColor(playerid,COLOR_TEAM_THREE);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 4
case 3:
{
SetPlayerColor(playerid,COLOR_TEAM_FOUR);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 5
case 4:
{
SetPlayerColor(playerid,COLOR_TEAM_FIVE);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 6
case 5:
{
SetPlayerColor(playerid,COLOR_TEAM_SIX);
}
#endif
#endif
}
}
}
ClassSel_InitTeamNameText(playerid,PlayerText:txtInit)
{
PlayerTextDrawBackgroundColor(playerid,txtInit,0x000000ff);
PlayerTextDrawFont(playerid,txtInit,2);
PlayerTextDrawLetterSize(playerid,txtInit,0.399999,1.500000);
PlayerTextDrawColor(playerid,txtInit,0xffffffff);
PlayerTextDrawSetOutline(playerid,txtInit,1);
PlayerTextDrawSetProportional(playerid,txtInit,1);
PlayerTextDrawSetShadow(playerid,txtInit,1);
PlayerTextDrawBackgroundColor(playerid,txtInit,0x000000ff);
PlayerTextDrawFont(playerid,txtInit,2);
PlayerTextDrawLetterSize(playerid,txtInit,0.399999,1.500000);
PlayerTextDrawColor(playerid,txtInit,0xffffffff);
PlayerTextDrawSetOutline(playerid,txtInit,1);
PlayerTextDrawSetProportional(playerid,txtInit,1);
PlayerTextDrawSetShadow(playerid,txtInit,1);
}
ClassSel_SwitchToNextTeam(playerid)
{
gPlayerTeamSelection[playerid]++;
switch(TEAMSIZE)
{
case 2:
{
if(gPlayerTeamSelection[playerid] > SECOND_TEAM)
{
gPlayerTeamSelection[playerid] = FIRST_TEAM;
}
}
case 3:
{
if(gPlayerTeamSelection[playerid] > THIRD_TEAM)
{
gPlayerTeamSelection[playerid] = FIRST_TEAM;
}
}
case 4:
{
if(gPlayerTeamSelection[playerid] > FOURTH_TEAM)
{
gPlayerTeamSelection[playerid] = FIRST_TEAM;
}
}
case 5:
{
if(gPlayerTeamSelection[playerid] > FIFTH_TEAM)
{
gPlayerTeamSelection[playerid] = FIRST_TEAM;
}
}
case 6:
{
if(gPlayerTeamSelection[playerid] > SIXTH_TEAM)
{
gPlayerTeamSelection[playerid] = FIRST_TEAM;
}
}
}
PlayerPlaySound(playerid,1052,0.0,0.0,0.0);
gPlayerLastTeamSelectionTick[playerid] = GetTickCount();
ClassSel_SetupSelectedTeam(playerid);
}
ClassSel_SwitchToPreviousTeam(playerid)
{
gPlayerTeamSelection[playerid]--;
switch(TEAMSIZE)
{
case 2:
{
if(gPlayerTeamSelection[playerid] < FIRST_TEAM)
{
gPlayerTeamSelection[playerid] = SECOND_TEAM;
}
}
case 3:
{
if(gPlayerTeamSelection[playerid] < FIRST_TEAM)
{
gPlayerTeamSelection[playerid] = THIRD_TEAM;
}
}
case 4:
{
if(gPlayerTeamSelection[playerid] < FIRST_TEAM)
{
gPlayerTeamSelection[playerid] = FOURTH_TEAM;
}
}
case 5:
{
if(gPlayerTeamSelection[playerid] < FIRST_TEAM)
{
gPlayerTeamSelection[playerid] = FIFTH_TEAM;
}
}
case 6:
{
if(gPlayerTeamSelection[playerid] < FIRST_TEAM)
{
gPlayerTeamSelection[playerid] = SIXTH_TEAM;
}
}
}
PlayerPlaySound(playerid,1053,0.0,0.0,0.0);
gPlayerLastTeamSelectionTick[playerid] = GetTickCount();
ClassSel_SetupSelectedTeam(playerid);
}
stock getActingPlayer(playerid,&idx)
{
new randoms[MAX_PLAYERS],tmp;
for(new i=GetPlayerPoolSize(); i!=-1; i--)
{
if(IsPlayerConnected(i) && gPlayerTeamSelection[i] != TEAM_SPECTATOR && playerid != i)
{
randoms[tmp++]=i;
}
}
if(!tmp) return INVALID_PLAYER_ID;
if(idx>tmp) idx=0;
if(idx<0) idx=tmp-1;
return randoms[idx];
}
HandlePlayerSpectating(playerid)
{
if( (GetTickCount() - gPlayerLastTeamSelectionTick[playerid]) < delay ) return 1;
new Keys,ud,lr;
GetPlayerKeys(playerid,Keys,ud,lr);
if(lr == KEY_RIGHT)
{
SpectatingPlayer[playerid]++;
ud = getActingPlayer(playerid,SpectatingPlayer[playerid]);
if(ud == INVALID_PLAYER_ID)
{
SpectatingPlayer[playerid]--;
return 1;
}
SpecPlayer(playerid,ud);
}
else if(lr == KEY_LEFT)
{
SpectatingPlayer[playerid]--;
ud = getActingPlayer(playerid,SpectatingPlayer[playerid]);
if(ud == INVALID_PLAYER_ID)
{
SpectatingPlayer[playerid]++;
return 1;
}
SpecPlayer(playerid,ud);
}
return 1;
}
ClassSel_HandleTeamSelection(playerid)
{
new Keys,ud,lr;
GetPlayerKeys(playerid,Keys,ud,lr);
if(gPlayerTeamSelection[playerid] == -1) {
ClassSel_SwitchToNextTeam(playerid);
return;
}
if( (GetTickCount() - gPlayerLastTeamSelectionTick[playerid]) < delay ) return;
if(Keys & KEY_FIRE) {
gPlayerHasTeamSelected[playerid] = 1;
PlayerTextDrawHide(playerid,TeamText[playerid]);
PlayerTextDrawHide(playerid,LocText[playerid]);
PlayerTextDrawHide(playerid,TeamCover[playerid]);
TextDrawHideForPlayer(playerid,txtClassSelHelper);//Observer textdraw
TogglePlayerSpectating(playerid,0);
return;
}
printf("ClassSel_HandleTeamSelection");
if(lr > 0) {
ClassSel_SwitchToNextTeam(playerid);
}
else if(lr < 0) {
ClassSel_SwitchToPreviousTeam(playerid);
}
}
public OnPlayerRequestClass(playerid, classid)
{
if(IsPlayerNPC(playerid)) return 1;
printf("OnPlayerRequestClass");
if(gPlayerHasTeamSelected[playerid]) {
ClassSel_SetupCharSelection(playerid);
return 1;
}
else
{
if(GetPlayerState(playerid) != PLAYER_STATE_SPECTATING) {
TogglePlayerSpectating(playerid,1);
TextDrawShowForPlayer(playerid, txtClassSelHelper);
gPlayerTeamSelection[playerid] = -1;
}
}
return 0;
}
//----------------------------------------------------------
public OnPlayerSelectedMenuRow(playerid, row)
{
new Menu:CurrentMenu = GetPlayerMenu(playerid);
new Menu:Current= GetPlayerMenu(playerid);
TogglePlayerControllable(playerid,false);
if(Current==infomenu)
{
TogglePlayerControllable(playerid,false);
switch(row)
{
case 0:
{
TogglePlayerControllable(playerid,true);
SendClientMessage(playerid,COLOR_WHITE,"SERVER: How to play");
SendClientMessage(playerid,COLOR_WHITE,"The goal of this mode, is to destroy the enemie's bed and wipe out all the remaining players to determine the winner team.");
SendClientMessage(playerid,COLOR_WHITE,"You can use the /blowup command to destroy and enemies bed!");
}
case 1:
{
TogglePlayerControllable(playerid,true);
SendClientMessage(playerid,COLOR_WHITE,"SERVER: Q: How to destroy a bed?");
SendClientMessage(playerid,COLOR_WHITE,"SERVER: A: Get close to the enemie's bed and use /blowup to destroy it!");
SendClientMessage(playerid,COLOR_WHITE,"SERVER: Q: What can i do if i am unable to respawn due to a destroyed bed?");
SendClientMessage(playerid,COLOR_WHITE,"SERVER: A: You can use the command /spec [playerid] to spectate other players!");
SendClientMessage(playerid,COLOR_WHITE,"SERVER: Q: When does the game ends?");
SendClientMessage(playerid,COLOR_WHITE,"SERVER: A: After a winning team is determined, means if only one team remains.");
}
case 2:
{
TogglePlayerControllable(playerid,true);
SendClientMessage(playerid,COLOR_WHITE,"SERVER: If you commit one of these things it will get you banned!");
SendClientMessage(playerid,COLOR_WHITE,"SERVER: NO Cheating");
SendClientMessage(playerid,COLOR_WHITE,"SERVER: NO Spamming");
SendClientMessage(playerid,COLOR_WHITE,"SERVER: NO Quitting to avoid anything! Better die in honor for a honorable cause!");
SendClientMessage(playerid,COLOR_WHITE,"SERVER: NEVER kill your own team mates, it will get you banned!");
SendClientMessage(playerid,COLOR_WHITE,"SERVER: NEVER exploit bugs in any way! Report them instead!");
}
}
}
if(Current==ammunation) {
TogglePlayerControllable(playerid,false);
switch(row) {
case 0: {
ShowMenuForPlayer(pistols,playerid);
}
case 1: {
ShowMenuForPlayer(microsmg,playerid);
}
case 2: {
ShowMenuForPlayer(shotguns,playerid);
}
case 3: {
ShowMenuForPlayer(items,playerid);
}
case 4: {
ShowMenuForPlayer(smg,playerid);
}
case 5: {
ShowMenuForPlayer(rifles,playerid);
}
case 6: {
ShowMenuForPlayer(assaultrifle,playerid);
}
case 7: {
ShowMenuForPlayer(Grenades,playerid);
}
case 8: {
ShowMenuForPlayer(melee,playerid);
}
case 9: {
ShowMenuForPlayer(special,playerid);
}
case 10: {
HideMenuForPlayer(ammunation,playerid);
ShowMenuForPlayer(shopmenu,playerid);
}
default: {
print("Fail");
}
}
}
else if(Current==pistols) {
ShowMenuForPlayer(pistols,playerid);
switch(row) {
case 0:
{
SellPlayerWeapon(playerid,1500,22,50);
}
case 1:
{
SellPlayerWeapon(playerid,2500,23,50);
}
case 2:
{
SellPlayerWeapon(playerid,2500,24,50);
}
case 3: {
HideMenuForPlayer(pistols,playerid);
ShowMenuForPlayer(ammunation,playerid);
}
default: {
print("Fail");
}
}
}
else if(Current==microsmg) {
ShowMenuForPlayer(microsmg,playerid);
switch(row) {
case 0:
{
SellPlayerWeapon(playerid,5500,32,50);
}
case 1:
{
SellPlayerWeapon(playerid,5000,28,50);
}
case 2: {
HideMenuForPlayer(microsmg,playerid);
ShowMenuForPlayer(ammunation,playerid);
}
default: {
print("Fail");
}
}
}
else if(Current==shotguns) {
ShowMenuForPlayer(shotguns,playerid);
switch(row) {
case 0: {
SellPlayerWeapon(playerid,12500,25,50);
}
case 1: {
SellPlayerWeapon(playerid,15500,26,50);
}
case 2: {
SellPlayerWeapon(playerid,55500,27,50);
}
case 3: {
HideMenuForPlayer(shotguns,playerid);
ShowMenuForPlayer(ammunation,playerid);
}
default: {
print("Fail");
}
}
}
else if(Current==items) {
ShowMenuForPlayer(items,playerid);
switch(row) {
case 0:
if(GetPlayerMoney(playerid) >= 2500)
{
GivePlayerMoneyText(playerid,-2500);
SetPlayerArmour(playerid,100.0);
}
else
{
SendClientMessage(playerid,COLOR_WHITE,"SERVER: Insufficient balance! You can not afford this item!");
}
case 1: {
SellPlayerWeapon(playerid,2500,46,1);
}
case 2: {
SellPlayerWeapon(playerid,2500,41,100);
}
case 3: {
SellPlayerWeapon(playerid,2500,43,50);
}
case 4: if(GetPlayerMoney(playerid) >= 2500)
{
GivePlayerMoneyText(playerid,-2500);
SetPlayerArmour(playerid,100.0);
}
else
{
SendClientMessage(playerid,COLOR_WHITE,"SERVER: Insufficient balance! You can not afford this item!");
}
case 5:
{
HideMenuForPlayer(items,playerid);
ShowMenuForPlayer(fightstyles,playerid);
}
case 6: {
HideMenuForPlayer(items,playerid);
ShowMenuForPlayer(ammunation,playerid);
}
default: {
print("Fail");
}
}
}
else if(Current==fightstyles) {
ShowMenuForPlayer(fightstyles,playerid);
switch(row) {
case 0:
{
SellPlayerFightingStyle (playerid,2500, FIGHT_STYLE_KUNGFU);
}
case 1: {
SellPlayerFightingStyle (playerid,2500, FIGHT_STYLE_KNEEHEAD);
}
case 2:
{
SellPlayerFightingStyle (playerid,2500, FIGHT_STYLE_BOXING);
}
case 3:
{
SellPlayerFightingStyle (playerid,2500, FIGHT_STYLE_GRABKICK);
}
case 4:
{
SellPlayerFightingStyle (playerid,2500, FIGHT_STYLE_ELBOW);
}
case 5:
{
SetPlayerFightingStyle (playerid, FIGHT_STYLE_NORMAL);
}
case 6:
{
HideMenuForPlayer(fightstyles,playerid);
ShowMenuForPlayer(items,playerid);
}
default: {
print("Fail");
}
}
}
else if(Current==smg) {
ShowMenuForPlayer(smg,playerid);
switch(row) {
case 0:
{
SellPlayerWeapon(playerid,20000,29,50);
}
case 1: {
HideMenuForPlayer(smg,playerid);
ShowMenuForPlayer(ammunation,playerid);
}
default: {
print("Fail");
}
}
}
else if(Current==assaultrifle) {
ShowMenuForPlayer(assaultrifle,playerid);
switch(row) {
case 0:
{
SellPlayerWeapon(playerid,40000,30,500);
}
case 1: {
SellPlayerWeapon(playerid,45000,31,500);
}
case 2: {
HideMenuForPlayer(assaultrifle,playerid);
ShowMenuForPlayer(ammunation,playerid);
}
default: {
print("Fail");
}
}
}
else if(Current==rifles) {
ShowMenuForPlayer(rifles,playerid);
switch(row) {
case 0: {
SellPlayerWeapon(playerid,12500,33,50);
}
case 1: {
SellPlayerWeapon(playerid,40000,34,50);
}
case 2: {
HideMenuForPlayer(rifles,playerid);
ShowMenuForPlayer(ammunation,playerid);
}
default: {
print("Fail");
}
}
}
else if(Current==Grenades) {
ShowMenuForPlayer(Grenades,playerid);
switch(row) {
case 0: {
SellPlayerWeapon(playerid,125000,16,50);
}
case 1: {
SellPlayerWeapon(playerid,25000,17,50);
}
case 2: {
SellPlayerWeapon(playerid,25000,18,50);
}
case 3: {
HideMenuForPlayer(Grenades,playerid);
ShowMenuForPlayer(ammunation,playerid);
}
default: {
print("Fail");
}
}
}
else if(Current==yesno) {
ShowMenuForPlayer(yesno,playerid);
switch(row) {
case 0: {
SetPlayerHealth(playerid,0.0);
SendDeathMessage(playerid, playerid, 22);
}
case 1: {
HideMenuForPlayer(yesno,playerid);
TogglePlayerControllable(playerid,true);
}
case 2: {
HideMenuForPlayer(yesno,playerid);
ShowMenuForPlayer(shopmenu,playerid);
}
default: {
print("Fail");
}
}
}
else if(Current==melee) {
ShowMenuForPlayer(melee,playerid);
switch(row) {
case 0: {
GivePlayerWeapon(playerid,5,1);
}
case 1: {
GivePlayerWeapon(playerid,11,1);
}
case 2: {
SellPlayerWeapon(playerid,100000,9,1);
}
case 3: {
GivePlayerWeapon(playerid,8,1);
}
case 4: {
GivePlayerWeapon(playerid,7,1);
}
case 5: {
GivePlayerWeapon(playerid,4,1);
}
case 6: {
GivePlayerWeapon(playerid,3,1);
}
case 7: {
GivePlayerWeapon(playerid,2,1);
}
case 8: {
HideMenuForPlayer(melee,playerid);
ShowMenuForPlayer(ammunation,playerid);
}
default: {
print("Fail");
}
}
}
else if(Current==special) {
ShowMenuForPlayer(special,playerid);
switch(row) {
case 0: {
SellPlayerWeapon(playerid,2000000,38,1000);
}
case 1: {
SellPlayerWeapon(playerid,250000,35,5);
}
case 2: {
SellPlayerWeapon(playerid,250000,37,300);
}
case 3: {
HideMenuForPlayer(special,playerid);
ShowMenuForPlayer(ammunation,playerid);
}
default: {
print("Fail");
}
}
}
if(CurrentMenu == shopmenu)
{
switch(row)
{
case 0:
{
TogglePlayerControllable(playerid,false);
HideMenuForPlayer(shopmenu,playerid);
ShowMenuForPlayer(ammunation,playerid);
}
case 1:
{
if(GetPlayerMoney(playerid) > 10000 && PSkill[playerid] == 0)
{
PSkill[playerid]=1;
GivePlayerMoneyText(playerid,-10000);
SendClientMessage(playerid, 0xFFFFFFFF, "SERVER: Skill upgraded");
SetPlayerSkillLevel(playerid,WEAPONSKILL_PISTOL,1000);
SetPlayerSkillLevel(playerid,WEAPONSKILL_PISTOL_SILENCED,1000);
SetPlayerSkillLevel(playerid,WEAPONSKILL_DESERT_EAGLE,1000);
SetPlayerSkillLevel(playerid,WEAPONSKILL_SHOTGUN,1000);
SetPlayerSkillLevel(playerid,WEAPONSKILL_SAWNOFF_SHOTGUN,1000);
SetPlayerSkillLevel(playerid,WEAPONSKILL_SPAS12_SHOTGUN,1000);
SetPlayerSkillLevel(playerid,WEAPONSKILL_MICRO_UZI,1000);
SetPlayerSkillLevel(playerid,WEAPONSKILL_MP5,1000);
SetPlayerSkillLevel(playerid,WEAPONSKILL_AK47,1000);
SetPlayerSkillLevel(playerid,WEAPONSKILL_M4,1000);
SetPlayerSkillLevel(playerid,WEAPONSKILL_SNIPERRIFLE,1000);
ShowMenuForPlayer(shopmenu,playerid);
}
else if(GetPlayerMoney(playerid) < 10000)
{
SendClientMessage(playerid,COLOR_WHITE,"SERVER: Insufficient balance! You can not afford this item!");
ShowMenuForPlayer(shopmenu,playerid);
TogglePlayerControllable(playerid,false);
}
else if(PSkill[playerid] != 0)
{
SendClientMessage(playerid,COLOR_WHITE,"SERVER: You already bought this item!");
TogglePlayerControllable(playerid,true);
}
}
case 2:
{
if(GetPlayerMoney(playerid) >= 85000)
{
PStealth[playerid]=1;
SendClientMessage(playerid,COLOR_WHITE,"SERVER: You are equipped with a stealth kit. You can use /stealth to hide yourself");
GivePlayerMoneyText(playerid,-85000);
TogglePlayerControllable(playerid,1);
}
else
{
SendClientMessage(playerid,COLOR_WHITE,"SERVER: Insufficient balance! You can not afford this item!");
TogglePlayerControllable(playerid,1);
}
}
case 3: if(GetPlayerMoney(playerid) >= 100000 && PBomb[playerid] == 0)
{
PBomb[playerid]=1;
SendClientMessage(playerid, 0xFFFFFFFF, "SERVER: You have bought a bomb! Now you can place bombs by using /dropbomb!");
ShowMenuForPlayer(shopmenu,playerid);
TogglePlayerControllable(playerid,false);
GivePlayerMoneyText(playerid,-100000);
}
else if(PBomb[playerid] != 0)
{
SendClientMessage(playerid,COLOR_WHITE,"SERVER: You already bought this item!");
TogglePlayerControllable(playerid,1);
}
else if(GetPlayerMoney(playerid) < 100000)
{
SendClientMessage(playerid,COLOR_WHITE,"SERVER: Insufficient balance! You can not afford this item!");
ShowMenuForPlayer(shopmenu,playerid);
TogglePlayerControllable(playerid,false);
}
case 4: if(GetPlayerMoney(playerid) >= 50000 && Warppowder[playerid] == 0)
{
Warppowder[playerid]=1;
SendClientMessage(playerid, 0xFFFFFFFF, "SERVER: You have bought a Warpkit! You can teleport yourself back to your base by using /warp");
ShowMenuForPlayer(shopmenu,playerid);
TogglePlayerControllable(playerid,false);
GivePlayerMoneyText(playerid,-50000);
}
else if(Warppowder[playerid] != 0)
{
SendClientMessage(playerid,COLOR_WHITE,"SERVER: You already bought this item!");
TogglePlayerControllable(playerid,1);
}
else if(GetPlayerMoney(playerid) < 100000)
{
SendClientMessage(playerid,COLOR_WHITE,"SERVER: Insufficient balance! You can not afford this item!");
ShowMenuForPlayer(shopmenu,playerid);
TogglePlayerControllable(playerid,false);
}
case 5:
{
HideMenuForPlayer(shopmenu,playerid);
ShowMenuForPlayer(yesno,playerid);
}
}
}
}
stock GetTeamCount(teamid)
{
new playercount = 0;
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(GetPlayerState(i) == PLAYER_STATE_NONE) continue;
if(gPlayerTeamSelection[i] != teamid) continue;
playercount++;
}
return playercount;
}
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart)
{
if(issuerid != INVALID_PLAYER_ID && weaponid == 34 && bodypart == 9)
{
// One shot to the head to kill with sniper rifle
SetPlayerHealth(playerid, 0.0);
}
return 1;
}
stock TeamsAlive(bool:value)
{
new i=0,count=0;
while(i<TEAMSIZE)
{
if(GetTeamCount(i) > 0)
{
count++;
}
i++;
}
if(bool:value == false)
switch(count)
{
case 1:
{
switch(TeamsAlive(true))
{
case FIRST_TEAM:
{
for(new d;d<MAX_PLAYERS;d++)
{
SendClientMessageEx(d,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",FIRST_TEAM_COLOR_TAG);
}
}
case SECOND_TEAM:
{
for(new d;d<MAX_PLAYERS;d++)
{
SendClientMessageEx(d,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",SECOND_TEAM_COLOR_TAG);
}
}
#if defined TEAMSIZE
#if TEAMSIZE >= 3
case THIRD_TEAM:
{
for(new d;d<MAX_PLAYERS;d++)
{
SendClientMessageEx(d,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",THIRD_TEAM_COLOR_TAG);
}
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 4
case FOURTH_TEAM:
{
for(new d;d<MAX_PLAYERS;d++)
{
SendClientMessageEx(d,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",FOURTH_TEAM_COLOR_TAG);
}
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 5
case FIFTH_TEAM:
{
for(new d;d<MAX_PLAYERS;d++)
{
SendClientMessageEx(d,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",FIFTH_TEAM_COLOR_TAG);
}
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE == 6
case SIXTH_TEAM:
{
for(new d;d<MAX_PLAYERS;d++)
{
SendClientMessageEx(d,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",SIXTH_TEAM_COLOR_TAG);
}
}
#endif
#endif
}
for(new o;o<MAX_PLAYERS;o++)
{
ResetPlayerData(o);
}
SetTimer("GMX",500,false);
}
}
if(bool:value == true && count == 1)//Returns the ID of the remaining team
return i;
return 1;
}
public GMX()
{
SendClientMessageToAll(COLOR_WHITE,"SERVER: Game over! Map is changing. Please standby..");
printf("Total game time: %d",totaltime);
SendRconCommand("gmx");
}
public OnPlayerDisconnect(playerid, reason)
{
//SaveUser_data(playerid);
LastMoney[playerid]=0;
new pname[MAX_PLAYER_NAME], string[39 + MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof(pname));
ResetPlayerData(playerid);
if(IsBeingSpeced[playerid] == 1)
{
for(new i;i<MAX_PLAYERS;i++)
{
if(spectatorid[i] == playerid)
{
SpecRandomPlayer(i);
}
}
}
switch(reason)
{
case 0: format(string, sizeof(string), "%s (%d) has left the server. (Lost Connection)", pname,playerid);
case 1: format(string, sizeof(string), "%s (%d) has left the server. (Leaving)", pname,playerid);
case 2: format(string, sizeof(string), "%s (%d) has left the server. (Kicked)", pname,playerid);
}
SendClientMessageToAll(0xAAAAAAAA, string);
return 1;
}
public OnPlayerUpdate(playerid)
{
if(IsPlayerNPC(playerid)) return 1;
if(IsSpecing[playerid] == 1)
{
HandlePlayerSpectating(playerid);
return 1;
}
// changing teams by inputs
if( !gPlayerHasTeamSelected[playerid] && GetPlayerState(playerid) == PLAYER_STATE_SPECTATING )
{
ClassSel_HandleTeamSelection(playerid);
return 1;
}
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[32], idx;
sscanf(cmdtext,"s[32]d",cmd,idx);
if(strcmp(cmd, "/weather", true) == 0)
{
if(!IsPlayerAdmin(playerid))
return 0;
new targetweatherid;
if(sscanf(cmdtext[strlen("/weather")+1], "i", targetweatherid))
return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /weather [weatherid]");
new wres = binarysearch2(gRandomWeatherIDs,0,targetweatherid,0,sizeof(gRandomWeatherIDs)-1);
if(wres == -1)
return SendClientMessage(playerid,COLOR_WHITE,"SERVER: Invalid weather ID, check weather array for valid IDs");
new strout[64];
format(strout, sizeof(strout), "Weather changed to %s", gRandomWeatherIDs[targetweatherid][wt_text]);
SetWeather(gRandomWeatherIDs[targetweatherid][wt_id]);
SendClientMessageToAll(COLOR_WHITE,strout);
print(strout);
}
if(strcmp(cmd, "/search", true) == 0)
{
new targetid;
if(sscanf(cmdtext[strlen("/search")+1], "i", targetid))
return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /search [key]");
new mres = binarysearch(MoneyPickups,targetid,0,sizeof(MoneyPickups)-1);
new astring[54];
format(astring,sizeof(astring),"Index of key: %d",mres);
new ares = binarysearch(ActorPickups,targetid,0,sizeof(ActorPickups)-1);
SendClientMessage(playerid,COLOR_WHITE,astring);
format(astring,sizeof(astring),"Index of key: %d",ares);
SendClientMessage(playerid,COLOR_WHITE,astring);
}
if(strcmp(cmd, "/compare", true) == 0)
{
HeapSort(MoneyPickups);
HeapSort(ActorPickups);
for(new i;i<sizeof(ActorPickups);i++)
{
new mres = binarysearch(MoneyPickups,ActorPickups[i],0,sizeof(MoneyPickups)-1);
if(mres > -1)
{
SendClientMessage(playerid,COLOR_WHITE,"Match found! MoneyPickups contains values of ActorPickups");
new tstring[144];
format(tstring,sizeof(tstring),"MoneyPickups Val: %d Index: %d matchs ActorPickups Val: %d Index :%d",MoneyPickups[mres],mres,ActorPickups[i],i);
SendClientMessage(playerid,-1,tstring);
break;
}
}
}
if(strcmp(cmd, "/getplayerteam", true) == 0)
{
new targetplayer;
if(sscanf(cmdtext[strlen("/getplayerteam")+1], "i", targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /getplayerteam [playeridid]");
new pTeam[144];
format(pTeam,sizeof(pTeam),"SERVER: Player %d is part of Team: %d",targetplayer,gPlayerTeamSelection[targetplayer]);
strcat (pTeam,FIRST_TEAM_COLOR_TAG);
SendClientMessage(playerid, -1, pTeam);
SendClientMessage(playerid,COLOR_WHITE,pTeam);
}
if(strcmp(cmd, "/stealth", true) == 0)
{
if(PStealth[playerid] == 1)
{
PStealth[playerid]=-1;
SendClientMessage(playerid,COLOR_WHITE,"SERVER: You are now invisible for 60 seconds!");
SetTimerEx("reveal", 60000, false,"i",playerid);
}
else
{
return SendClientMessage(playerid,COLOR_WHITE,"SERVER: You do not have a stealth package!");
}
#if defined TEAMSIZE
#if TEAMSIZE >= 2
{
switch(gPlayerTeamSelection[playerid])
{
case 0:
{
SetPlayerColor(playerid,COLOR_TEAM_ONE_STEALTH);
}
case 1:
{
SetPlayerColor(playerid,COLOR_TEAM_TWO_STEALTH);
}
}
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 3
{
switch(gPlayerTeamSelection[playerid])
{
case 2:
{
SetPlayerColor(playerid,COLOR_TEAM_THREE_STEALTH);
}
}
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 4
{
switch(gPlayerTeamSelection[playerid])
{
case 3:
{
SetPlayerColor(playerid,COLOR_TEAM_FOUR_STEALTH);
}
}
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 5
{
switch(gPlayerTeamSelection[playerid])
{
case 4:
{
SetPlayerColor(playerid,COLOR_TEAM_FIVE_STEALTH);
}
}
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 6
{
switch(gPlayerTeamSelection[playerid])
{
case 5:
{
SetPlayerColor(playerid,COLOR_TEAM_SIX_STEALTH);
}
}
}
#endif
#endif
return 1;
}
if(strcmp(cmd, "/warp", true) == 0) //Warppowder
{
if(Warppowder[playerid] == 1 && !IsPlayerInAnyVehicle(playerid))
{
Warppowder[playerid]=0;
SendClientMessage(playerid,COLOR_WHITE,"SERVER: Warning! Don't move until teleport!");
WarpTimer = SetTimerEx("warpcount", 1000, true,"i",playerid);
new Float:x,Float:y,Float:z;
GetPlayerPos(playerid,x,y,z);
wX[playerid]=x;
wY[playerid]=y;
wZ[playerid]=z;
Beam[playerid] = CreateObject(18671,x,y,z-1,0,0,0,300.0);
}
else if(Warppowder[playerid] != 1)
{
return SendClientMessage(playerid,COLOR_WHITE,"SERVER: You do not have Warppowder!");
}
else if(IsPlayerInAnyVehicle(playerid))
{
return SendClientMessage(playerid,COLOR_WHITE,"SERVER: You can not use Warpkits inside of vehicles");
}
return 1;
}
if(strcmp(cmd, "/jetpack", true) == 0) {
if(!IsPlayerAdmin(playerid))
{
return 0;
}
SendClientMessage(playerid,COLOR_WHITE, "SERVER: Jetpack activated!");
SetPlayerSpecialAction(playerid,SPECIAL_ACTION_USEJETPACK);
return 1;
}
if(strcmp(cmd, "/sound", true) == 0)
{
new targetsoundid;
if(sscanf(cmdtext[strlen("/sound")+1], "i", targetsoundid))
return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /sound [soundid]");
for(new i = 0; i < MAX_PLAYERS; i++)
{
PlayerPlaySound(i, targetsoundid, 0,0,0);
}
printf("Playing SoundID: %i",targetsoundid);
return 1;
}
if(strcmp(cmd, "/spec", true) == 0)
{
if(!IsPlayerAdmin(playerid)) return 0;
new targetplayer;
if(sscanf(cmdtext[strlen("/spec")+1], "u", targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /spec [playerid]");
if(!IsPlayerConnected(targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: Player not connected");
if(playerid == targetplayer)
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: You cannot spectate yourself!");
if(gPlayerTeamSelection[playerid] == TEAM_SPECTATOR || IsPlayerAdmin(playerid) )
{
SpecPlayer(playerid,targetplayer);
}
else
{
return 0;
}
return 1;
}
if(strcmp(cmd, "/specoff", true) == 0)
{
if(!IsPlayerAdmin(playerid)) return 0;
if(IsSpecing[playerid] == 0)return SendClientMessage(playerid,COLOR_WHITE,"SERVER: You are not spectating");
TogglePlayerSpectating(playerid, 0);
return 1;
}
if(strcmp(cmd, "/dropmoney", true) == 0)
{
new dropval;
if(sscanf(cmdtext[strlen("/dropmoney")+1], "i", dropval))
return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /dropmoney [value]");
if(GetPlayerMoney(playerid) >= dropval && maxmoney <= 4000 && dropval > 0 && dropval <= 100000 && (maxmoney+(dropval/MoneyVal))<(MAX_PICKUPS-sizeof(ActorPickups)-sizeof(InfoPickups)-1-((dropval/1000)+maxmoney)) && dropval != 0 && !IsPlayerInAnyVehicle(playerid))
{
if(dropval%MoneyVal == 0)
{
new dropstring[32];
format(dropstring,sizeof(dropstring),"SERVER: Dropped $%d",dropval);
SendClientMessage(playerid, COLOR_WHITE, dropstring);
GivePlayerMoneyText(playerid,-dropval);
for(new i; i <dropval/MoneyVal; i++)
{
maxmoney = maxmoney +1;
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid,x,y,z);
GetXYInFrontOfPlayer(playerid,x,y,4);
GenerateRandomPickup(1212,19,x+0.5,x-0.5,y+0.5,y-0.5,z+0.5,z-0.5,0);
}
}
else
{
if(dropval%MoneyVal != 0)
{
SendClientMessageEx(playerid, COLOR_WHITE, "SERVER: The desired value must be divisible by $%d",MoneyVal);
}
}
}
else
{
if(GetPlayerMoney(playerid) < dropval )
{
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You do not have enough money.");
}
if(dropval > 100000)
{
SendClientMessage(playerid, COLOR_WHITE, "SERVER: The desired value has to be $100000 or less");
}
if(dropval==0)
{
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You can not drop nothing!");
}
if((maxmoney+dropval/MoneyVal)>=4095 && dropval <= 100000)
{
new allowmoney[128];
format(allowmoney,sizeof(allowmoney),"SERVER: Because of limitations you can not drop more than $%d right now!",(4095-maxmoney)*MoneyVal);
SendClientMessage(playerid,COLOR_WHITE,allowmoney);
printf("Player may only drop %d",(4095-maxmoney)*MoneyVal);
}
}
}
/*if(strcmp(cmd, "/freeze", true) == 0)
new target;
if(!sscanf(cmdtext[strlen("/freeze")+1], "u", target))
{
if(IsPlayerAdmin(playerid))
{
//return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /freeze [playerid]");
if(!IsPlayerConnected(target))
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: Player not connected");
TogglePlayerControllable(target,false);
}
}
else
{
return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /freeze [playerid]");
}*/
if(strcmp(cmd, "/kill", true) == 0)
{
if(IsPlayerAdmin(playerid))
{
new targetplayer;
if(sscanf(cmdtext[strlen("/kill")+1], "u", targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /kill [playerid]");
if(!IsPlayerConnected(targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: Player not connected");
SetPlayerHealth(targetplayer,0.0);
}
}
if(strcmp(cmd, "/givecash", true) == 0)
{
if(IsPlayerAdmin(playerid))
{
new targetplayer,moneyamount;
new tname[MAX_PLAYER_NAME];
new aname[MAX_PLAYER_NAME];
new givemoneystring[128];
if(sscanf(cmdtext[strlen("/givecash")+1], "ui", targetplayer,moneyamount))
return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /givecash [playerid] [amount]");
if(!IsPlayerConnected(targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: Player not connected");
GivePlayerMoney(targetplayer,moneyamount);
GetPlayerName(targetplayer,tname,sizeof(tname));
GetPlayerName(playerid,aname,sizeof(aname));
format(givemoneystring,sizeof(givemoneystring),"SERVER: Admin %s (%d) gave %s (%d) $%d.",aname,playerid,tname,targetplayer,moneyamount);
SendClientMessageToAll(COLOR_WHITE,givemoneystring);
}
}
if(strcmp(cmd, "/slap", true) == 0)
{
if(IsPlayerAdmin(playerid))
{
new targetplayer;
new Float:a, Float:b, Float:c;
if(sscanf(cmdtext[strlen("/slap")+1], "u", targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /slap [playerid]");
if(!IsPlayerConnected(targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: Player not connected");
GetPlayerPos(targetplayer,a,b,c);
SetPlayerPos(targetplayer,a,b,c+10);
}
}
if(strcmp(cmd, "/reset", true) == 0)
{
if(IsPlayerAdmin(playerid))
{
new targetplayer;
if(sscanf(cmdtext[strlen("/reset")+1], "u", targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /reset [playerid]");
if(!IsPlayerConnected(targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: Player not connected");
if(gPlayerHasTeamSelected[targetplayer] == -1)
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: Player is still in team selection!");
ResetPlayerData(targetplayer);
ResetPlayerMoney(targetplayer);
}
}
if(strcmp(cmd, "/checkmoney", true) == 0)
{
if(IsPlayerAdmin(playerid))
{
new targetplayer;
new tname[144];
if(sscanf(cmdtext[strlen("/checkmoney")+1], "u", targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /checkmoney [playerid]");
if(!IsPlayerConnected(targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: Player not connected");
if(gPlayerHasTeamSelected[targetplayer] == -1)
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: Player is still in team selection!");
GetPlayerName(targetplayer,tname,sizeof(tname));
SendClientMessageEx(playerid,COLOR_WHITE,"SERVER: Player %s(%d) is in posession of $%d at this moment",tname,targetplayer,GetPlayerMoney(targetplayer));
}
}
if(strcmp(cmd, "/spawn", true) == 0)
{
if(IsPlayerAdmin(playerid))
{
new targetplayer;
if(sscanf(cmdtext[strlen("/spawn")+1], "u", targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /spawn [playerid]");
if(!IsPlayerConnected(targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: Player not connected");
if(gPlayerHasTeamSelected[targetplayer] == -1)
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: Player is still in team selection!");
TeleportPlayerToBase(targetplayer);
}
}
if(strcmp(cmd, "/unfreeze", true) == 0)
{
if(IsPlayerAdmin(playerid))
{
new targetplayer;
if(sscanf(cmdtext[strlen("/unfreeze")+1], "u", targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /unfreeze [playerid]");
if(!IsPlayerConnected(targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: Player not connected");
TogglePlayerControllable(targetplayer,true);
}
}
if(strcmp(cmd, "/getmoneycount", true) == 0)
{
new moneyvalstring[128];
format(moneyvalstring,sizeof(moneyvalstring),"SERVER: $%d have been generated.%d money pickups have been created",moneyval,maxmoney);
SendClientMessage(playerid,COLOR_WHITE,moneyvalstring);
}
if(strcmp(cmd, "/goto", true) == 0)
{
if(IsPlayerAdmin(playerid))
{
new targetplayer;
if(sscanf(cmdtext[strlen("/goto")+1], "u", targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /goto [playerid]");
if(!IsPlayerConnected(targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: Player not connected");
if(playerid == targetplayer)
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: You cannot goto yourself!");
if(IsPlayerConnected(targetplayer))
{
new Float:x, Float:y, Float:z;
GetPlayerPos(targetplayer, x, y, z);
SetPlayerInterior(playerid,GetPlayerInterior(targetplayer));
SetPlayerPos(playerid, x+1, y+1, z);
return 1;
}
}
else
{
return 0;
}
}
if(strcmp(cmd, "/acmds", true) == 0)
{
SendClientMessage(playerid,COLOR_WHITE,"SERVER: Commands for admin use only below.");
SendClientMessage(playerid,COLOR_WHITE,"SERVER: /goto [playerid] /playertoplayer [playerid] [targetplayerid]");
SendClientMessage(playerid,COLOR_WHITE,"SERVER: /getmoneycount /get [playerid] /netstats [playerid]");
SendClientMessage(playerid,COLOR_WHITE,"SERVER: /kill [playerid] /spawn [playerid] /slap [playerid]");
SendClientMessage(playerid,COLOR_WHITE,"SERVER: /givecash [playerid] [value] /freeze [playerid] /unfreeze [playerid]");
SendClientMessage(playerid,COLOR_WHITE,"SERVER: /sound [soundid] /spec [playerid]");
}
if(strcmp(cmd, "/playertoplayer", true) == 0)
{
if(IsPlayerAdmin(playerid))
{
new targetplayer1,targetplayer2;
if(sscanf(cmdtext[strlen("/playertoplayer")+1], "uu", targetplayer1,targetplayer2))
return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /playertoplayer [playerid] [playerid]");
if(!IsPlayerConnected(targetplayer1) || !IsPlayerConnected(targetplayer2))
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: Player not connected");
if(playerid == targetplayer1 && playerid == targetplayer2 )
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: You cannot teleport yourself to yourself!");
new Float:d1,Float:d2,Float:d3;
GetPlayerPos(targetplayer2,d1,d2,d3);
SetPlayerPos(targetplayer1,d1,d2,d3);
}
else
{
return 0;
}
}
if(strcmp(cmd, "/getmoneycount", true) == 0)
{
new moneyvalstring[128];
format(moneyvalstring,sizeof(moneyvalstring),"SERVER: $%d have been generated.%d money pickups have been created",moneyval,maxmoney);
SendClientMessage(playerid,COLOR_WHITE,moneyvalstring);
}
if(strcmp(cmd, "/get", true) == 0)
{
if(IsPlayerAdmin(playerid))
{
new targetplayer;
if(sscanf(cmdtext[strlen("/get")+1], "u", targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /get [playerid]");
if(!IsPlayerConnected(targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: Player not connected");
if(playerid == targetplayer)
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: You cannot get yourself!");
if(IsPlayerConnected(targetplayer))
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
SetPlayerInterior(targetplayer,GetPlayerInterior(playerid));
SetPlayerPos(targetplayer, x+1, y+1, z);
return 1;
}
}
else
{
return 0;
}
}
if(strcmp(cmd, "/dropbomb", true) == 0)
{
if(PBomb[playerid] == 1 && GetPlayerInterior(playerid) == 0 && !IsPlayerInAnyVehicle(playerid))
{
ApplyAnimation(playerid, "BOMBER", "BOM_Plant_Loop", 4.0, 1, 0, 0, 1, 1);
PBombID[playerid]=1;
PBomb[playerid]=-1;
GetPlayerPos(playerid,pX[playerid],pY[playerid],pZ[playerid]);
BombObject[playerid] = CreateObject(363,pX[playerid],pY[playerid],(pZ[playerid]-0.4),0,0,0);//Bomb object
SendClientMessage(playerid, COLOR_WHITE, "SERVER: Bomb placed! Use ~k~~CONVERSATION_YES~ or /detonate to blow it up!");
for(new k;k<sizeof(beds[]);k++)
{
new Float:dist = floatabs(GetDistance(pX[playerid],pY[playerid],pZ[playerid],beds[k][0],beds[k][1],beds[k][2]));
{
if(dist < 8)
{
new distancestring[128];
format(distancestring,sizeof(distancestring),"SERVER: Distance of dropped bomb to closest bed: %fm",dist);
}
}
}
}
else if(GetPlayerInterior(playerid) != 0)
{
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You cannot use /dropbomb inside of interiors.");
}
else if(PBomb[playerid] != 1)
{
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You have to buy a bomb to use this command.");
}
}
if(strcmp(cmd, "/detonate", true) == 0)
{
if(PBomb[playerid] == -1 && PBombID[playerid] == 1 && IsPlayerInRangeOfPoint(playerid,150,pX[playerid],pY[playerid],pZ[playerid]))
{
PBombID[playerid]=0;
PBomb[playerid]=0;
CreateExplosion(pX[playerid],pY[playerid],pZ[playerid],7,10);
CreateExplosion(pX[playerid],pY[playerid],pZ[playerid],9,10);
SendClientMessage(playerid, COLOR_WHITE, "SERVER: Bomb detonated!");
DestroyObject(BombObject[playerid]);
}
else if(!IsPlayerInRangeOfPoint(playerid,100,pX[playerid],pY[playerid],pZ[playerid]))
{
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You can only detonate the bomb if your distance to it is less than 150m!");
}
else
{
return 0;
}
}
if(strcmp(cmd, "/netstats", true) == 0)
{
new stats[400+1];
new targetplayer;
if(sscanf(cmdtext[strlen("/netstats")+1], "u", targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /netstats [playerid]");
if(!IsPlayerConnected(targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: Player not connected");
GetPlayerNetworkStats(targetplayer, stats, sizeof(stats)); // get a players networkstats
ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "Networkstats", stats, "Okay", "");
}
if(strcmp(cmd, "/stats", true) == 0)
{
new targetplayer;
if(sscanf(cmdtext[strlen("/stats")+1], "u", targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /stats [playerid]");
if(!IsPlayerConnected(targetplayer))
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: Player not connected");
new statsstring1[128];
new statsstring2[256];
new deaths = PlayerInfo[targetplayer][pDeaths];
new kills = PlayerInfo[targetplayer][pKills];
if(deaths == 0)
{
deaths = 1;
}
deaths = PlayerInfo[targetplayer][pDeaths];
kills = PlayerInfo[targetplayer][pKills];
new Float:kd = floatdiv(kills,deaths);
new name[MAX_PLAYER_NAME];
GetPlayerName(targetplayer, name, sizeof(name));
format(statsstring1,sizeof(statsstring1),"SERVER: Player stats of %s(%d) below.",name,targetplayer);
SendClientMessage(playerid, COLOR_WHITE,statsstring1);
format(statsstring2,sizeof(statsstring2),"Kills:%d Deaths:%d Ratio:%0.2f Blown beds:%d Bombs detonated:%d",kills,deaths,kd,PlayerInfo[targetplayer][pBeds],PlayerInfo[targetplayer][pBombs]);
SendClientMessage(playerid, COLOR_WHITE,statsstring2);
}
if(strcmp(cmd, "/pm", true) == 0)
{
new str[256], str2[256], id, Name1[MAX_PLAYER_NAME], Name2[MAX_PLAYER_NAME];
if(sscanf(cmdtext[strlen("/pm")+1], "us", id, str2))
return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /pm <id> <message>");
if(!IsPlayerConnected(id))
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: Player not connected");
if(playerid == id)
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: You cannot pm yourself!");
GetPlayerName(playerid, Name1, sizeof(Name1));
GetPlayerName(id, Name2, sizeof(Name2));
format(str, sizeof(str), "PM To %s(ID %d): %s", Name2, id, str2);
SendClientMessage(playerid, COLOR_YELLOW, str);
format(str, sizeof(str), "PM From %s(ID %d): %s", Name1, playerid, str2);
SendClientMessage(id, COLOR_YELLOW, str);
return 1;
}
if(strcmp(cmdtext, "/blowup", true) == 0)
{
for(new i = 0; i < sizeof(beds); i++)
{
new Float:health;
GetPlayerHealth(playerid,health);
if(running !=1 && IsPlayerInRangeOfPoint(playerid,3.0,beds[i][0],beds[i][1],beds[i][2]) && health > 0 && !IsPlayerInAnyVehicle(playerid)) // In this script we deal with players only
{
if((i == 0 && gPlayerTeamSelection[playerid] == FIRST_TEAM) || (i == 1 && gPlayerTeamSelection[playerid] == SECOND_TEAM) || (i == 2 && gPlayerTeamSelection[playerid] == THIRD_TEAM) || (i == 3 && gPlayerTeamSelection[playerid] == FOURTH_TEAM) || (i == 4 && gPlayerTeamSelection[playerid] == FIFTH_TEAM) || (i == 5 && gPlayerTeamSelection[playerid] == SIXTH_TEAM))
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: You cannot blow up the bed of your own team!");
running = 1;
SetPlayerScore(playerid,GetPlayerScore(playerid)+1);
PlayerInfo[playerid][pBeds]=GetPlayerScore(playerid);
SetTimer("BlowUpThisBed", bombtimer, false);
if(i == 0 && BED_STATE_TEAM_ONE !=-1 )
{
BED_STATE_TEAM_ONE=-1;
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You are blowing up the bed of Team "#FIRST_TEAM_COLOR_TAG);
}
if(i == 1 && BED_STATE_TEAM_TWO !=-1 )
{
BED_STATE_TEAM_TWO=-1;
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You are blowing up the bed of Team "#SECOND_TEAM_COLOR_TAG);
}
#if defined TEAMSIZE
#if TEAMSIZE >=3
if(i == 2 && BED_STATE_TEAM_THREE !=-1 )
{
BED_STATE_TEAM_THREE=-1;
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You are blowing up the bed of Team "#THIRD_TEAM_COLOR_TAG);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >=4
if(i == 3 && BED_STATE_TEAM_FOUR !=-1 )
{
BED_STATE_TEAM_FOUR=-1;
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You are blowing up the bed of Team "#FOURTH_TEAM_COLOR_TAG);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >=5
if(i == 4 && BED_STATE_TEAM_FIVE !=-1 )
{
BED_STATE_TEAM_FIVE=-1;
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You are blowing up the bed of Team "#FIFTH_TEAM_COLOR_TAG);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >=6
if(i == 5 && BED_STATE_TEAM_SIX !=-1 )
{
BED_STATE_TEAM_SIX=-1;
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You are blowing up the bed of Team "#SIXTH_TEAM_COLOR_TAG);
}
#endif
#endif
PBeds[playerid]+=1;
SendClientMessage(playerid, COLOR_WHITE, "SERVER: Planted Bomb Successfully. Lets Blow This Bed Up!");
SetPlayerScore(playerid, GetPlayerScore(playerid) + 1);
SendClientMessage(playerid, COLOR_WHITE, "SERVER: Keep Running! Bed Will Blow Up In 5 seconds!");
GetPlayerPos(playerid, x1, y1, z1);
ApplyAnimation(playerid, "BOMBER", "BOM_Plant_Loop", 4.0, 1, 0, 0, 1, 1);
for(new k = 0; k < MAX_PLAYERS; k++)
{
PlayerPlaySound(k,7416,x1,y1,z1);
}
CountDownTimer = SetTimer("CountDown", 1000, true);
new Float:dist = GetDistance(beds[i][0],beds[i][1],beds[i][2],x1,y1,z1);
printf("Distance to closest bed: %f, Index: %d", dist, i);
return 1;
}
}
return 0;
}
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(PRESSED(KEY_YES) && PBomb[playerid] == -1 && PBombID[playerid] == 1 && IsPlayerInRangeOfPoint(playerid,150,pX[playerid],pY[playerid],pZ[playerid]))
{
PlayerInfo[playerid][pBombs]++;
PBombID[playerid]=0;
PBomb[playerid]=0;
CreateExplosion(pX[playerid],pY[playerid],pZ[playerid],7,10);
CreateExplosion(pX[playerid],pY[playerid],pZ[playerid],9,10);
SendClientMessage(playerid, COLOR_WHITE, "SERVER: Bomb detonated!");
PlayerPlaySound(playerid, 21001, 0, 0, 0);
DestroyObject(BombObject[playerid]);
for(new i = 0; i < sizeof(beds[]); i++)
{
new Float:health;
GetPlayerHealth(playerid,health);
new Float:dist = GetDistance(beds[i][0],beds[i][1],beds[i][2],pX[playerid],pY[playerid],pZ[playerid]);
if(dist < 4)
{
running = 1;
if(!(i == 0 && gPlayerTeamSelection[playerid] == FIRST_TEAM) || !(i == 1 && gPlayerTeamSelection[playerid] == THIRD_TEAM) || !(i == 2 && gPlayerTeamSelection[playerid] == SECOND_TEAM))
PBeds[playerid]+=1;
if(i == 0 && BED_STATE_TEAM_ONE !=-1 )
{
BED_STATE_TEAM_ONE=-1;
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You blew up the bed of Team "#FIRST_TEAM_COLOR_TAG);
}
if(i == 1 && BED_STATE_TEAM_TWO !=-1 )
{
BED_STATE_TEAM_THREE=-1;
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You blew up the bed of Team "#SECOND_TEAM_COLOR_TAG);
}
#if defined TEAMSIZE
#if TEAMSIZE >=3
if(i == 2 && BED_STATE_TEAM_THREE !=-1 )
{
BED_STATE_TEAM_TWO=-1;
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You blew up the bed of Team "#THIRD_TEAM_COLOR_TAG);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >=4
if(i == 3 && BED_STATE_TEAM_FOUR !=-1 )
{
BED_STATE_TEAM_FOUR=-1;
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You blew up the bed of Team "#FOURTH_TEAM_COLOR_TAG);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >=5
if(i == 4 && BED_STATE_TEAM_FIVE !=-1 )
{
BED_STATE_TEAM_FIVE=-1;
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You blew up the bed of Team "#FIFTH_TEAM_COLOR_TAG);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >=6
if(i == 5 && BED_STATE_TEAM_SIX !=-1 )
{
BED_STATE_TEAM_SIX=-1;
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You blew up the bed of Team "#SIXTH_TEAM_COLOR_TAG);
}
#endif
#endif
SetPlayerScore(playerid, GetPlayerScore(playerid) + 1);
x1=pX[playerid];
y1=pY[playerid];
z1=pZ[playerid];
ApplyAnimation(playerid, "BOMBER", "BOM_Plant_Loop", 4.0, 1, 0, 0, 1, 1);
SetTimer("BlowUpThisBed", 130, false);
return 1;
}
}
}
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
PlayerInfo[playerid][pDeaths]++;
if(killerid != INVALID_PLAYER_ID) PlayerInfo[killerid][pKills]++;
ResetPlayerData(playerid);
new pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof(pname));
new matediedstringgrey[128];
new matediedstringred[128];
new matediedstringblue[128];
HideMenuForPlayer(ammunation,playerid);
HideMenuForPlayer(pistols,playerid);
HideMenuForPlayer(microsmg,playerid);
HideMenuForPlayer(shotguns,playerid);
HideMenuForPlayer(items,playerid);
HideMenuForPlayer(smg,playerid);
HideMenuForPlayer(rifles,playerid);
HideMenuForPlayer(assaultrifle,playerid);
HideMenuForPlayer(Grenades,playerid);
HideMenuForPlayer(melee,playerid);
HideMenuForPlayer(special,playerid);
HideMenuForPlayer(shopmenu,playerid);
HideMenuForPlayer(yesno,playerid);
if(GetPlayerWeapon(playerid) == 16)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid,x,y,z);
CreateExplosion(x,y,z,7,10);
CreateExplosion(x,y,z,9,10);
}
if(BED_STATE_TEAM_ONE != 0 && gPlayerTeamSelection[playerid] == FIRST_TEAM)
{
format(matediedstringgrey,sizeof(matediedstringgrey),"SERVER: %s (%d) has been killed, watch out! %d players left in Team "#FIRST_TEAM_COLOR_TAG,pname,playerid,GetTeamCount(FIRST_TEAM)-1);
SendClientMessageToAll(COLOR_WHITE,matediedstringgrey);
}
if(BED_STATE_TEAM_TWO != 0 && gPlayerTeamSelection[playerid] == SECOND_TEAM)
{
format(matediedstringred,sizeof(matediedstringred),"SERVER: %s (%d) has been killed, watch out! %d players left in Team "#SECOND_TEAM_COLOR_TAG,pname,playerid,GetTeamCount(SECOND_TEAM)-1);
SendClientMessageToAll(COLOR_WHITE,matediedstringred);
}
#if defined TEAMSIZE
#if TEAMSIZE >=3
if(BED_STATE_TEAM_THREE != 0 && gPlayerTeamSelection[playerid] == THIRD_TEAM)
{
format(matediedstringblue,sizeof(matediedstringblue),"SERVER: %s (%d) has been killed, watch out! %d players left in Team "#THIRD_TEAM_COLOR_TAG,pname,playerid,GetTeamCount(THIRD_TEAM)-1);
SendClientMessageToAll(COLOR_WHITE,matediedstringblue);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >=4
if(BED_STATE_TEAM_FOUR != 0 && gPlayerTeamSelection[playerid] == FOURTH_TEAM)
{
format(matediedstringgrey,sizeof(matediedstringgrey),"SERVER: %s (%d) has been killed, watch out! %d players left in Team "#FOURTH_TEAM_COLOR_TAG,pname,playerid,GetTeamCount(FOURTH_TEAM)-1);
SendClientMessageToAll(COLOR_WHITE,matediedstringgrey);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >=5
if(BED_STATE_TEAM_FIVE != 0 && gPlayerTeamSelection[playerid] == FIFTH_TEAM)
{
format(matediedstringred,sizeof(matediedstringred),"SERVER: %s (%d) has been killed, watch out! %d players left in Team "#FIFTH_TEAM_COLOR_TAG,pname,playerid,GetTeamCount(FIFTH_TEAM)-1);
SendClientMessageToAll(COLOR_WHITE,matediedstringred);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE ==6
if(BED_STATE_TEAM_SIX != 0 && gPlayerTeamSelection[playerid] == SIXTH_TEAM)
{
format(matediedstringblue,sizeof(matediedstringblue),"SERVER: %s (%d) has been killed, watch out! %d players left in Team "#SIXTH_TEAM_COLOR_TAG,pname,playerid,GetTeamCount(SIXTH_TEAM)-1);
SendClientMessageToAll(COLOR_WHITE,matediedstringblue);
}
#endif
#endif
new playercash;
playercash = GetPlayerMoney(playerid);
SendDeathMessage(killerid, playerid, reason); // Shows the kill in the killfeed
gPlayerHasTeamSelected[playerid] = 0;
TextDrawHideForPlayer(playerid,txtTimeDisp);
playercash = GetPlayerMoney(playerid);
ResetPlayerMoney(playerid);
GivePlayerMoneyText(playerid, -playercash);
LastMoney[playerid]=playercash;
if(killerid != playerid && killerid != INVALID_PLAYER_ID)
{
GivePlayerMoneyText(killerid,playercash);
}
ResetPlayerMoney(playerid);
PKills[playerid] += 1;
if(BED_STATE_TEAM_ONE!=0 && FIRST_TEAM == gPlayerTeamSelection[playerid])
{
SendClientMessageEx(playerid,COLOR_WHITE,"SERVER: Unable to respawn. The bed of team %s {FFFFFF}already has been destroyed.",FIRST_TEAM_COLOR_TAG);
SendClientMessage(playerid,COLOR_WHITE,"SERVER: Entering spectator mode..");
SetPlayerCameraPos(playerid,243.2876,1802.5547,7.4141);
SetPlayerCameraLookAt(playerid,243.1261,1805.2798,8.3794);
gPlayerTeamSelection[playerid] =TEAM_SPECTATOR;
SetPlayerColor(playerid,COLOR_WHITE);
SpecRandomPlayer(playerid);
}
if(BED_STATE_TEAM_TWO!=0 && SECOND_TEAM == gPlayerTeamSelection[playerid])
{
SendClientMessageEx(playerid,COLOR_WHITE,"SERVER: Unable to respawn. The bed of team %s {FFFFFF}already has been destroyed.",SECOND_TEAM_COLOR_TAG);
SendClientMessage(playerid,COLOR_WHITE,"SERVER: Entering spectator mode..");
SetPlayerCameraPos(playerid,243.2876,1802.5547,7.4141);
SetPlayerCameraLookAt(playerid,243.1261,1805.2798,8.3794);
gPlayerTeamSelection[playerid] =TEAM_SPECTATOR;
SetPlayerColor(playerid,COLOR_WHITE);
SpecRandomPlayer(playerid);
}
#if defined TEAMSIZE
#if TEAMSIZE >= 3
if(BED_STATE_TEAM_THREE!=0 && THIRD_TEAM == gPlayerTeamSelection[playerid])
{
SendClientMessageEx(playerid,COLOR_WHITE,"SERVER: Unable to respawn. The bed of team %s {FFFFFF}already has been destroyed.",THIRD_TEAM_COLOR_TAG);
SendClientMessage(playerid,COLOR_WHITE,"SERVER: Entering spectator mode..");
SetPlayerCameraPos(playerid,243.2876,1802.5547,7.4141);
SetPlayerCameraLookAt(playerid,243.1261,1805.2798,8.3794);
gPlayerTeamSelection[playerid] =TEAM_SPECTATOR;
SetPlayerColor(playerid,COLOR_WHITE);
SpecRandomPlayer(playerid);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 4
if(BED_STATE_TEAM_FOUR!=0 && FOURTH_TEAM == gPlayerTeamSelection[playerid])
{
SendClientMessageEx(playerid,COLOR_WHITE,"SERVER: Unable to respawn. The bed of team %s {FFFFFF}already has been destroyed.",FOURTH_TEAM_COLOR_TAG);
SendClientMessage(playerid,COLOR_WHITE,"SERVER: Entering spectator mode..");
SetPlayerCameraPos(playerid,243.2876,1802.5547,7.4141);
SetPlayerCameraLookAt(playerid,243.1261,1805.2798,8.3794);
gPlayerTeamSelection[playerid] =TEAM_SPECTATOR;
SetPlayerColor(playerid,COLOR_WHITE);
SpecRandomPlayer(playerid);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 5
if(BED_STATE_TEAM_FIVE!=0 && FIFTH_TEAM == gPlayerTeamSelection[playerid])
{
SendClientMessageEx(playerid,COLOR_WHITE,"SERVER: Unable to respawn. The bed of team %s {FFFFFF}already has been destroyed.",FIFTH_TEAM_COLOR_TAG);
SendClientMessage(playerid,COLOR_WHITE,"SERVER: Entering spectator mode..");
SetPlayerCameraPos(playerid,243.2876,1802.5547,7.4141);
SetPlayerCameraLookAt(playerid,243.1261,1805.2798,8.3794);
gPlayerTeamSelection[playerid] =TEAM_SPECTATOR;
SetPlayerColor(playerid,COLOR_WHITE);
SpecRandomPlayer(playerid);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE == 6
if(BED_STATE_TEAM_SIX!=0 && SIXTH_TEAM == gPlayerTeamSelection[playerid])
{
SendClientMessageEx(playerid,COLOR_WHITE,"SERVER: Unable to respawn. The bed of team %s {FFFFFF}already has been destroyed.",SIXTH_TEAM_COLOR_TAG);
SendClientMessage(playerid,COLOR_WHITE,"SERVER: Entering spectator mode..");
SetPlayerCameraPos(playerid,243.2876,1802.5547,7.4141);
SetPlayerCameraLookAt(playerid,243.1261,1805.2798,8.3794);
gPlayerTeamSelection[playerid] =TEAM_SPECTATOR;
SetPlayerColor(playerid,COLOR_WHITE);
SpecRandomPlayer(playerid);
}
#endif
#endif
if(GetPlayerCount() >= 2)
{
TeamsAlive(false);
}
if(IsBeingSpeced[playerid] == 1)
{
for(new i;i<MAX_PLAYERS;i++)
{
if(spectatorid[i] == playerid)
{
SpecRandomPlayer(i);
}
}
}
return 1;
}
ClassSel_SetupSelectedTeam(playerid)
{
PlayerTextDrawDestroy(playerid, TeamText[playerid]);
PlayerTextDrawDestroy(playerid, TeamCover[playerid]);
PlayerTextDrawDestroy(playerid, LocText[playerid]);
TeamText[playerid] = CreatePlayerTextDraw(playerid, 65.000000,349.000000,"Team:");
ClassSel_InitTeamNameText(playerid,TeamText[playerid]);
TeamCover[playerid] = CreatePlayerTextDraw(playerid, 10.000000,349.000000,"Team:");
ClassSel_InitTeamNameText(playerid,TeamCover[playerid]);
LocText[playerid] = CreatePlayerTextDraw(playerid, 10.000000,379.000000,"Location:");
ClassSel_InitTeamNameText(playerid,LocText[playerid]);
PlayerTextDrawShow(playerid,TeamCover[playerid]);
PlayerPlaySound(playerid,1185,0,0,0);
SetPlayerColor(playerid,COLOR_WHITE);
gettime(hour, minute);
SetPlayerTime(playerid,hour,minute);
if(gPlayerTeamSelection[playerid] == -1) {
gPlayerTeamSelection[playerid] = FIRST_TEAM;
}
if(gPlayerTeamSelection[playerid] == FIRST_TEAM) {
SetPlayerInterior(playerid,TEAM_ONE_SEL_INTERIOR);
SetPlayerCameraPos(playerid,ClassSel_SetupTeamTEAM_POS[0][0],ClassSel_SetupTeamTEAM_POS[0][1],ClassSel_SetupTeamTEAM_POS[0][2]);
SetPlayerCameraLookAt(playerid,ClassSel_SetupTeamTEAM_LOOK_AT[0][0],ClassSel_SetupTeamTEAM_LOOK_AT[0][1],ClassSel_SetupTeamTEAM_LOOK_AT[0][2]);
new astring[64];
PlayerTextDrawHide(playerid,TeamText[playerid]);
PlayerTextDrawHide(playerid,LocText[playerid]);
PlayerTextDrawSetString(playerid, TeamText[playerid],FIRST_TEAM_NAME_TAG);
PlayerTextDrawColor(playerid,TeamText[playerid],COLOR_TEAM_ONE_TD);
PlayerTextDrawShow(playerid,TeamText[playerid]);
format(astring,sizeof(astring),"Location:"#FIRST_TEAM_LOCATION);
PlayerTextDrawSetString(playerid, LocText[playerid], astring);
PlayerTextDrawShow(playerid,LocText[playerid]);
SetPlayerWeather(playerid,15);
PlayerPlaySound(playerid,2403,0,0,0);
}
#if defined TEAMSIZE
#if TEAMSIZE >= 2
else if(gPlayerTeamSelection[playerid] == SECOND_TEAM) {
SetPlayerInterior(playerid,TEAM_TWO_SEL_INTERIOR);
SetPlayerWeather(playerid,15);
SetPlayerCameraPos(playerid,ClassSel_SetupTeamTEAM_POS[1][0],ClassSel_SetupTeamTEAM_POS[1][1],ClassSel_SetupTeamTEAM_POS[1][2]);
SetPlayerCameraLookAt(playerid,ClassSel_SetupTeamTEAM_LOOK_AT[1][0],ClassSel_SetupTeamTEAM_LOOK_AT[1][1],ClassSel_SetupTeamTEAM_LOOK_AT[1][2]);
new astring[64];
PlayerTextDrawHide(playerid,TeamText[playerid]);
PlayerTextDrawHide(playerid,LocText[playerid]);
PlayerTextDrawSetString(playerid, TeamText[playerid],SECOND_TEAM_NAME_TAG);
PlayerTextDrawColor(playerid,TeamText[playerid],COLOR_TEAM_TWO_TD);
PlayerTextDrawShow(playerid,TeamText[playerid]);
format(astring,sizeof(astring),"Location:"#SECOND_TEAM_LOCATION);
PlayerTextDrawSetString(playerid, LocText[playerid], astring);
PlayerTextDrawShow(playerid,LocText[playerid]);
PlayerPlaySound(playerid,2402,0,0,0);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 3
else if(gPlayerTeamSelection[playerid] == THIRD_TEAM) {
SetPlayerInterior(playerid,TEAM_THREE_SEL_INTERIOR);
SetPlayerCameraPos(playerid,ClassSel_SetupTeamTEAM_POS[2][0],ClassSel_SetupTeamTEAM_POS[2][1],ClassSel_SetupTeamTEAM_POS[2][2]);
SetPlayerCameraLookAt(playerid,ClassSel_SetupTeamTEAM_LOOK_AT[2][0],ClassSel_SetupTeamTEAM_LOOK_AT[2][1],ClassSel_SetupTeamTEAM_LOOK_AT[2][2]);
new astring[64];
PlayerTextDrawHide(playerid,TeamText[playerid]);
PlayerTextDrawHide(playerid,LocText[playerid]);
PlayerTextDrawSetString(playerid, TeamText[playerid],THIRD_TEAM_NAME_TAG);
PlayerTextDrawColor(playerid,TeamText[playerid],COLOR_TEAM_THREE_TD);
PlayerTextDrawShow(playerid,TeamText[playerid]);
format(astring,sizeof(astring),"Location:"#THIRD_TEAM_LOCATION);
PlayerTextDrawSetString(playerid, LocText[playerid], astring);
PlayerTextDrawShow(playerid,LocText[playerid]);
PlayerPlaySound(playerid,2404,0,0,0);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 4
else if(gPlayerTeamSelection[playerid] == FOURTH_TEAM) {
SetPlayerInterior(playerid,TEAM_FOUR_SEL_INTERIOR);
SetPlayerCameraPos(playerid,ClassSel_SetupTeamTEAM_POS[3][0],ClassSel_SetupTeamTEAM_POS[3][1],ClassSel_SetupTeamTEAM_POS[3][2]);
SetPlayerCameraLookAt(playerid,ClassSel_SetupTeamTEAM_LOOK_AT[3][0],ClassSel_SetupTeamTEAM_LOOK_AT[3][1],ClassSel_SetupTeamTEAM_LOOK_AT[3][2]);
new astring[64];
PlayerTextDrawHide(playerid,TeamText[playerid]);
PlayerTextDrawHide(playerid,LocText[playerid]);
PlayerTextDrawSetString(playerid, TeamText[playerid],FOURTH_TEAM_NAME_TAG);
PlayerTextDrawColor(playerid,TeamText[playerid],COLOR_TEAM_FOUR_TD);
PlayerTextDrawShow(playerid,TeamText[playerid]);
format(astring,sizeof(astring),"Location:"#FOURTH_TEAM_LOCATION);
PlayerTextDrawSetString(playerid, LocText[playerid], astring);
PlayerTextDrawShow(playerid,LocText[playerid]);
SetPlayerWeather(playerid,0);
PlayerPlaySound(playerid,2404,0,0,0);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 5
else if(gPlayerTeamSelection[playerid] == FIFTH_TEAM) {
SetPlayerInterior(playerid,TEAM_FIVE_SEL_INTERIOR);
SetPlayerCameraPos(playerid,ClassSel_SetupTeamTEAM_POS[4][0],ClassSel_SetupTeamTEAM_POS[4][1],ClassSel_SetupTeamTEAM_POS[4][2]);
SetPlayerCameraLookAt(playerid,ClassSel_SetupTeamTEAM_LOOK_AT[4][0],ClassSel_SetupTeamTEAM_LOOK_AT[4][1],ClassSel_SetupTeamTEAM_LOOK_AT[4][2]);
new astring[64];
PlayerTextDrawHide(playerid,TeamText[playerid]);
PlayerTextDrawHide(playerid,LocText[playerid]);
PlayerTextDrawSetString(playerid, TeamText[playerid],FIFTH_TEAM_NAME_TAG);
PlayerTextDrawColor(playerid,TeamText[playerid],COLOR_TEAM_FIVE_TD);
PlayerTextDrawShow(playerid,TeamText[playerid]);
format(astring,sizeof(astring),"Location:"#FIFTH_TEAM_LOCATION);
PlayerTextDrawSetString(playerid, LocText[playerid], astring);
PlayerTextDrawShow(playerid,LocText[playerid]);
SetPlayerWeather(playerid,0);
PlayerPlaySound(playerid,2404,0,0,0);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE == 6
else if(gPlayerTeamSelection[playerid] == SIXTH_TEAM) {
SetPlayerInterior(playerid,TEAM_SIX_SEL_INTERIOR);
SetPlayerCameraPos(playerid,ClassSel_SetupTeamTEAM_POS[5][0],ClassSel_SetupTeamTEAM_POS[5][1],ClassSel_SetupTeamTEAM_POS[5][2]);
SetPlayerCameraLookAt(playerid,ClassSel_SetupTeamTEAM_LOOK_AT[5][0],ClassSel_SetupTeamTEAM_LOOK_AT[5][1],ClassSel_SetupTeamTEAM_LOOK_AT[5][2]);
new astring[64];
PlayerTextDrawHide(playerid,TeamText[playerid]);
PlayerTextDrawHide(playerid,LocText[playerid]);
PlayerTextDrawSetString(playerid, TeamText[playerid],SIXTH_TEAM_NAME_TAG);
PlayerTextDrawColor(playerid,TeamText[playerid],COLOR_TEAM_SIX_TD);
PlayerTextDrawShow(playerid,TeamText[playerid]);
format(astring,sizeof(astring),"Location:"#SIXTH_TEAM_LOCATION);
PlayerTextDrawSetString(playerid, LocText[playerid], astring);
PlayerTextDrawShow(playerid,LocText[playerid]);
PlayerPlaySound(playerid,2404,0,0,0);
}
#endif
#endif
}
//----------------------------------------------------------
public BlowUpThisBed()
{
CreateExplosion(x1, y1, z1, 7, 10.0);//'heavy' explosion close to bed
CreateExplosion(x1, y1, z1, 9, 10.0);
running=0;
printf("Blow Up This Bed called");
if(BED_STATE_TEAM_ONE == -1)
{
BED_STATE_TEAM_ONE = -2;
SendTeamMessage(FIRST_TEAM,COLOR_WHITE,"SERVER: Sudden death! Keep running, your bed has been blown up! There is no respawn after death!");
new adstring[64];
format(adstring,sizeof(adstring),"SERVER: The bed of team %s {FFFFFF}blew up!",FIRST_TEAM_COLOR_TAG);
SendClientMessageToAll(-1,adstring);
GangZoneHideForAll(TEAM_ZONE_ONE);
printf("Violet");
}
if(BED_STATE_TEAM_TWO == -1)
{
BED_STATE_TEAM_TWO = -2;
SendTeamMessage(SECOND_TEAM,COLOR_WHITE,"SERVER: Sudden death! Keep running, your bed has been blown up! There is no respawn after death!");
new adstring[64];
format(adstring,sizeof(adstring),"SERVER: The bed of team %s {FFFFFF}blew up!",SECOND_TEAM_COLOR_TAG);
SendClientMessageToAll(-1,adstring);
GangZoneHideForAll(TEAM_ZONE_TWO);
}
#if defined TEAMSIZE
#if TEAMSIZE >= 3
if(BED_STATE_TEAM_THREE == -1)
{
BED_STATE_TEAM_THREE = -2;
SendTeamMessage(THIRD_TEAM,COLOR_WHITE,"SERVER: Sudden death! Keep running, your bed has been blown up! There is no respawn after death!");
new adstring[64];
format(adstring,sizeof(adstring),"SERVER: The bed of team %s {FFFFFF}blew up!",THIRD_TEAM_COLOR_TAG);
SendClientMessageToAll(-1,adstring);
GangZoneHideForAll(TEAM_ZONE_THREE);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 4
if(BED_STATE_TEAM_FOUR == -1)
{
BED_STATE_TEAM_FOUR = -2;
SendTeamMessage(FOURTH_TEAM,COLOR_WHITE,"SERVER: Sudden death! Keep running, your bed has been blown up! There is no respawn after death!");
new adstring[64];
format(adstring,sizeof(adstring),"SERVER: The bed of team %s {FFFFFF}blew up!",FOURTH_TEAM_COLOR_TAG);
SendClientMessageToAll(-1,adstring);
GangZoneHideForAll(TEAM_ZONE_FOUR);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 5
if(BED_STATE_TEAM_FIVE == -1)
{
BED_STATE_TEAM_FIVE = -2;
SendTeamMessage(FIFTH_TEAM,COLOR_WHITE,"SERVER: Sudden death! Keep running, your bed has been blown up! There is no respawn after death!");
new adstring[64];
format(adstring,sizeof(adstring),"SERVER: The bed of team %s {FFFFFF}blew up!",FIFTH_TEAM_COLOR_TAG);
SendClientMessageToAll(-1,adstring);
GangZoneHideForAll(TEAM_ZONE_FIVE);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE == 6
if(BED_STATE_TEAM_SIX == -1)
{
BED_STATE_TEAM_SIX = -2;
SendTeamMessage(SIXTH_TEAM,COLOR_WHITE,"SERVER: Sudden death! Keep running, your bed has been blown up! There is no respawn after death!");
new adstring[64];
format(adstring,sizeof(adstring),"SERVER: The bed of team %s {FFFFFF}blew up!",SIXTH_TEAM_COLOR_TAG);
SendClientMessageToAll(-1,adstring);
GangZoneHideForAll(TEAM_ZONE_SIX);
}
#endif
#endif
}
stock GetPlayerCount()
{
new counter=0;
for(new k;k<MAX_PLAYERS;k++)
{
if(!IsPlayerConnected(k) || IsPlayerNPC(k)) continue;
counter++;
}
return counter;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
{
if(IsBeingSpeced[playerid] == 1)
{
for(new i;i<MAX_PLAYERS;i++)
{
if(spectatorid[i] == playerid)
{
PlayerSpectateVehicle(i, GetPlayerVehicleID(playerid));
}
}
}
}
if(newstate == PLAYER_STATE_ONFOOT)
{
if(IsBeingSpeced[playerid] == 1)
{
for(new i;i<MAX_PLAYERS;i++)
{
if(spectatorid[i] == playerid)
{
PlayerSpectatePlayer(i, playerid);
}
}
}
}
return 1;
}
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
if(IsBeingSpeced[playerid] == 1)
{
for(new i;i<MAX_PLAYERS;i++)
{
if(spectatorid[i] == playerid)
{
SetPlayerInterior(i,GetPlayerInterior(playerid));
SetPlayerVirtualWorld(i,GetPlayerVirtualWorld(playerid));
}
}
}
return 1;
}
public OnPlayerSpawn(playerid)
{
if(IsSpecing[playerid] == 1)
{
SetPlayerPos(playerid,SpecX[playerid],SpecY[playerid],SpecZ[playerid]);
SetPlayerInterior(playerid,Inter[playerid]);
SetPlayerVirtualWorld(playerid,vWorld[playerid]);
IsSpecing[playerid] = 0;
IsBeingSpeced[spectatorid[playerid]] = 0;
}
if(IsPlayerNPC(playerid)) return 1;
if(IsSpecing[playerid] == 1) return 1;
if(gPlayerTeamSelection[playerid] == TEAM_SPECTATOR) return 1;
TextDrawShowForPlayer(playerid,txtTimeDisp);
PlayerPlaySound(playerid,1188,0,0,0);
SetPlayerWorldBounds(playerid,MAP_WORLDBOUNDS[0][0], MAP_WORLDBOUNDS[0][1], MAP_WORLDBOUNDS[0][2], MAP_WORLDBOUNDS[0][3]);
new randSpawn = 0;
SetPlayerVirtualWorld(playerid,0);
TogglePlayerClock(playerid,0);
ResetPlayerMoney(playerid);
if(FIRST_TEAM == gPlayerTeamSelection[playerid]) {
randSpawn = random(sizeof(gSpawnsTeam_TEAM_ONE));
SetPlayerPos(playerid,gSpawnsTeam_TEAM_ONE[randSpawn][0],gSpawnsTeam_TEAM_ONE[randSpawn][1],gSpawnsTeam_TEAM_ONE[randSpawn][2]);
SetPlayerFacingAngle(playerid,gSpawnsTeam_TEAM_ONE[randSpawn][3]);
}
#if defined TEAMSIZE
#if TEAMSIZE >= 2
else if(SECOND_TEAM == gPlayerTeamSelection[playerid]) {
randSpawn = random(sizeof(gSpawnsTeam_TEAM_TWO));
SetPlayerPos(playerid,
gSpawnsTeam_TEAM_TWO[randSpawn][0],
gSpawnsTeam_TEAM_TWO[randSpawn][1],
gSpawnsTeam_TEAM_TWO[randSpawn][2]);
SetPlayerFacingAngle(playerid,gSpawnsTeam_TEAM_TWO[randSpawn][3]);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 3
else if(THIRD_TEAM == gPlayerTeamSelection[playerid]) {
randSpawn = random(sizeof(gSpawnsTeam_TEAM_THREE));
SetPlayerPos(playerid,
gSpawnsTeam_TEAM_THREE[randSpawn][0],
gSpawnsTeam_TEAM_THREE[randSpawn][1],
gSpawnsTeam_TEAM_THREE[randSpawn][2]);
SetPlayerFacingAngle(playerid,gSpawnsTeam_TEAM_THREE[randSpawn][3]);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 4
else if(FOURTH_TEAM == gPlayerTeamSelection[playerid]) {
randSpawn = random(sizeof(gSpawnsTeam_TEAM_FOUR));
SetPlayerPos(playerid,
gSpawnsTeam_TEAM_FOUR[randSpawn][0],
gSpawnsTeam_TEAM_FOUR[randSpawn][1],
gSpawnsTeam_TEAM_FOUR[randSpawn][2]);
SetPlayerFacingAngle(playerid,gSpawnsTeam_TEAM_FOUR[randSpawn][3]);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 5
else if(FIFTH_TEAM == gPlayerTeamSelection[playerid]) {
randSpawn = random(sizeof(gSpawnsTeam_TEAM_FIVE));
SetPlayerPos(playerid,
gSpawnsTeam_TEAM_FIVE[randSpawn][0],
gSpawnsTeam_TEAM_FIVE[randSpawn][1],
gSpawnsTeam_TEAM_FIVE[randSpawn][2]);
SetPlayerFacingAngle(playerid,gSpawnsTeam_TEAM_FIVE[randSpawn][3]);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE == 6
else if(SIXTH_TEAM == gPlayerTeamSelection[playerid]) {
randSpawn = random(sizeof(gSpawnsTeam_TEAM_SIX));
SetPlayerPos(playerid,
gSpawnsTeam_TEAM_SIX[randSpawn][0],
gSpawnsTeam_TEAM_SIX[randSpawn][1],
gSpawnsTeam_TEAM_SIX[randSpawn][2]);
SetPlayerFacingAngle(playerid,gSpawnsTeam_TEAM_SIX[randSpawn][3]);
}
#endif
#endif
GangZoneShowForPlayer(playerid, TEAM_ZONE_ONE, COLOR_TEAM_ONE);
GangZoneShowForPlayer(playerid, TEAM_ZONE_TWO, COLOR_TEAM_TWO);
#if defined TEAMSIZE
#if TEAMSIZE >= 3
GangZoneShowForPlayer(playerid, TEAM_ZONE_THREE, COLOR_TEAM_THREE);
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 4
GangZoneShowForPlayer(playerid, TEAM_ZONE_FOUR, COLOR_TEAM_FOUR);
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 5
GangZoneShowForPlayer(playerid, TEAM_ZONE_FIVE, COLOR_TEAM_FIVE);
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE == 6
GangZoneShowForPlayer(playerid, TEAM_ZONE_SIX, COLOR_TEAM_SIX);
#endif
#endif
SetPlayerSkillLevel(playerid,WEAPONSKILL_PISTOL,100);
SetPlayerSkillLevel(playerid,WEAPONSKILL_PISTOL_SILENCED,100);
SetPlayerSkillLevel(playerid,WEAPONSKILL_DESERT_EAGLE,100);
SetPlayerSkillLevel(playerid,WEAPONSKILL_SHOTGUN,100);
SetPlayerSkillLevel(playerid,WEAPONSKILL_SAWNOFF_SHOTGUN,100);
SetPlayerSkillLevel(playerid,WEAPONSKILL_SPAS12_SHOTGUN,100);
SetPlayerSkillLevel(playerid,WEAPONSKILL_MICRO_UZI,100);
SetPlayerSkillLevel(playerid,WEAPONSKILL_MP5,100);
SetPlayerSkillLevel(playerid,WEAPONSKILL_AK47,100);
SetPlayerSkillLevel(playerid,WEAPONSKILL_M4,100);
SetPlayerSkillLevel(playerid,WEAPONSKILL_SNIPERRIFLE,100);
GivePlayerWeapon(playerid,WEAPON_COLT45,100);
GivePlayerWeapon(playerid,25,5);
switch(gPlayerTeamSelection[playerid])
{
case 0:
{
SetPlayerInterior(playerid,TEAM_ONE_INTERIOR);
}
case 1:
{
SetPlayerInterior(playerid,TEAM_TWO_INTERIOR);
}
#if defined TEAMSIZE
#if TEAMSIZE >= 3
case 2:
{
SetPlayerInterior(playerid,TEAM_THREE_INTERIOR);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 4
case 3:
{
SetPlayerInterior(playerid,TEAM_FOUR_INTERIOR);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 5
case 4:
{
SetPlayerInterior(playerid,TEAM_FIVE_INTERIOR);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 6
case 5:
{
SetPlayerInterior(playerid,TEAM_SIX_INTERIOR);
}
#endif
#endif
default:
{
printf("Something went wrong..");
}
}
return 1;
}
public TEAM_MONEY()//MONEY FOR EACH TEAM
{
for (new m=0;m<sizeof(MoneySpawns)-1;m++)
{
GenerateRandomPickup(1212,19,MoneySpawns[m][0],MoneySpawns[m][1],MoneySpawns[m][2],MoneySpawns[m][3],MoneySpawns[m][4],MoneySpawns[m][5],0);
}
printf("Generated Pickup");
}
//----------------------------------------------------------
public MONEY_MAIN()//MAIN
{
GenerateRandomPickup(1212,19,MoneySpawns[sizeof(MoneySpawns)-1][0],MoneySpawns[sizeof(MoneySpawns)-1][1],MoneySpawns[sizeof(MoneySpawns)-1][2],MoneySpawns[sizeof(MoneySpawns)-1][3],MoneySpawns[sizeof(MoneySpawns)-1][4],MoneySpawns[sizeof(MoneySpawns)-1][5],0);
}
stock ResetPlayerData(playerid)
{
IsSpecing[playerid]=0;
IsBeingSpeced[playerid]=0;
PStealth[playerid]=0;
Warppowder[playerid]=0;
PBombID[playerid]=0;
PBomb[playerid]=0;
PSkill[playerid]=0;
WarpVar[playerid]=4;
if(IsValidObject(BombObject[playerid]))
DestroyObject(BombObject[playerid]);
pZ[playerid]=0;
pY[playerid]=0;
pZ[playerid]=0;
if(IsValidObject(Beam[playerid]))
DestroyObject(Beam[playerid]);
}
stock CreateGlobalActor(actorid,modelid,Float:ax,Float:ay,Float:az,Float:angle,Float:distance,pickupid)
{
actorid = CreateActor(modelid,ax,ay,az,angle);
new Float:x, Float:y, Float:z;
GetActorPos(actorid, x, y, z);
GetXYInFrontOfActor(actorid, x, y, distance);
ActorPickups[pickupid] = CreatePickup(1210,2,x,y,z,-1);
SetActorInvulnerable(actorid, true);
printf("Actor created, pickupid %d",pickupid);
printf("Array pickupid %d",ActorPickups[Shop_Counter++]);
return pickupid;
}
stock GetXYInFrontOfActor(actorid, &Float:x, &Float:y, Float:distance)
{
new Float:a;
GetActorPos(actorid, x, y, a);
GetActorFacingAngle(actorid, a);
x += (distance * floatsin(-a, degrees));
y += (distance * floatcos(-a, degrees));
}
stock GivePlayerMoneyText(playerid,value)
{
new moneyplayerid[32];
if(value < 0)
format(moneyplayerid,sizeof(moneyplayerid), "~r~ -%d~y~$",value);
if(value > 0)
format(moneyplayerid,sizeof(moneyplayerid), "~g~ %d~y~$",value);
GameTextForPlayer(playerid,moneyplayerid,1000,1);
GivePlayerMoney(playerid,value);
}
ClassSel_InitTextDraws()
{
// Init our observer helper text display
txtClassSelHelper = TextDrawCreate(10.0, 415.0,
" Press ~b~~k~~GO_LEFT~ ~w~or ~b~~k~~GO_RIGHT~ ~w~to switch teams.~n~ Press ~y~~k~~PED_FIREWEAPON~ ~y~to select.");
TextDrawUseBox(txtClassSelHelper, 1);
TextDrawBoxColor(txtClassSelHelper,0x22222266);
TextDrawLetterSize(txtClassSelHelper,0.3,1.0);
TextDrawTextSize(txtClassSelHelper,400.0,40.0);
TextDrawFont(txtClassSelHelper, 2);
TextDrawSetShadow(txtClassSelHelper,0);
TextDrawSetOutline(txtClassSelHelper,1);
TextDrawBackgroundColor(txtClassSelHelper,0x000000FF);
TextDrawColor(txtClassSelHelper,0xFFFFFFFF);
}
Comments