rendered paste body#include <a_samp>
#include <dini>
#pragma dynamic 20480
#define GameModeText "SimpleDM v.0.3"
main() {}
forward AntiSpawnKill(playerid);
forward LoggingTimeoutT(playerid);
forward UnMutePlayerT(playerid);
forward WorldTimeUpdate();
forward SaveAllPlayers();
forward AreasCheck();
forward IdleCheck();
forward MoneyCheck();
forward FloodCheck();
forward MoneyForPlay();
forward CountDown0();
forward CountDown1();
forward CountDown2();
forward CountDown3();
forward CountDown4();
forward CountDown5();
#define TimeCycle 1
//#define SolidColorChat 1
#define AllowBadSymbolsInNicks 1
#define PlayersDir "simpledm/players/"
#define PlayersExt ".txt"
#define AdminsFile "simpledm/admins.txt"
#define AdminColor 0xFFFFFFFF
#define GameModeLog "simpledm/simpledm.log"
//#define CommandsLog "simpledm/commands.log"
#define AdminsLog "simpledm/admins.log"
#define MutesLog "simpledm/mutes.log"
#define KicksLog "simpledm/kicks.log"
#define BansLog "simpledm/bans.log"
#define MaxLogFileSize 10485760
#define PrivateMsgColor 0xFF0000AA
#define AdminChatColor 0xFFFF00AA
#define SystemMsgColor 0xFFFF00AA
#define ErrorMsgColor 0xFF0000AA
#define HelpMsgColor 0x00FF00AA
#define FreezeMsgColor 0xFF0000AA
#define MuteMsgColor 0xFF0000AA
#define KickMsgColor 0xFF0000AA
#define BanMsgColor 0xFF0000AA
#define MoneysForKill 1000
#define MoneysForPlaying 500
#define IdleTimeToKick 3
#define FloodInterval 2
#define FloodLines 3
#define LoggingTimeout 20
#define LoggingColor 0x22222200
#define AntiSpawnKillTime 5
#define LegalKillDistance 75
#define NoDriveBy 1
#define NoTeamKill 1
#define MaxMoneyIllegalIncrease 2000000
//#define InDoorWeapons 1
/*#define CheatWeapons 22
new CheatWeapon[CheatWeapons] = {1,2,6,7,9,10,11,12,13,14,15,16,17,18,22,26,28,32,33,37,38,41};*/
#define FlameCheatsToBan 3
#define DeathsFromCheatToBan 3
#define AdminLevelToIgnorePunishment 6
FixChars(string[]) for (new i=0;i<strlen(string);i++) if (string[i] < 0) string[i] += 256;
/*RuLower(string[]) {
new result[MAX_STRING];
copy(result,strlower(string),strlen(string));
for (new i=0;i<strlen(result);i++) if (192 <= result[i] <= 223) result[i] += 32;
return result;
}*/
WriteToLog(text[],file[]=GameModeLog) {
new day,mon,year,hr,mn,sec;
new str[MAX_STRING];
getdate(year,mon,day);
gettime(hr,mn,sec);
format(str,sizeof(str),"%d.%d.%d [%d:%d:%d] %s",day,mon,year,hr,mn,sec,text);
if (equal(file,GameModeLog,false)) print(str);
new File:f = fopen(file,io_append);
#if defined MaxLogFileSize
if (flength(f) > MaxLogFileSize) {
fclose(f);
new tmp[MAX_STRING];
format(tmp,sizeof(tmp),"%s_%d.%d.%d.log",file,day,mon,year);
fcopytextfile(file,tmp);
fremove(file);
f = fopen(file,io_append);
}
#endif
fwrite(f,str);
fwrite(f,"\r\n");
fclose(f);
}
WriteEcho(text[],playerid=INVALID_PLAYER_ID,color=SystemMsgColor) {
new h,m,s;
new str[MAX_STRING];
gettime(h,m,s);
format(str,sizeof(str),"[%d:%d:%d] %s",h,m,s,text);
if (playerid != INVALID_PLAYER_ID && IsPlayerConnected(playerid)) SendClientMessage(playerid,color,str);
else SendClientMessageToAll(color,str);
}
#define Teams 10
#if defined Teams
#define ModelsInTeam 9
enum TeamInfos {
TeamName[20],
TeamColor,
TeamModels[ModelsInTeam],
TeamClassStart,
TeamClassEnd,
TeamSpawnInterior,
Float:TeamSpawnX,
Float:TeamSpawnY,
Float:TeamSpawnZ,
Float:TeamSpawnA
}
new TeamInfo[Teams][TeamInfos] = {
{"~g~Groove", 0x7CFC00FF, {105,106,107,195}, 0,0,3,2495.8093,-1701.4963,1014.7422,0.1684},
{"~p~Ballas", 0x800080FF, {102,103,104,226}, 0,0,15,2223.6843,-1147.2241,1025.7969,89.6632},
{"~y~Vagos", 0xFFD700FF, {108,109,110,190}, 0,0,0,2793.6311,-1537.5637,10.9219,219.4087},
{"~b~Aztecas", 0x00FFFFFF, {114,115,116,233}, 0,0,0,1779.4553,-1915.1685,13.3889,269.3371},
{"~b~Police", 0x4682B4FF, {280,281,282,283,284,285,286,287,191}, 0,0,0,1529.5922,-1677.9790,5.8906,268.7291},
{"~w~Goverment", 0x808080FF, {165,166,295,141}, 0,0,0,1249.7217,-2025.5818,59.7143,269.1162},
{"~y~Da Nang Boys", 0xF0E68CFF, {121,122,123,93}, 0,0,0,325.3652,-1798.3684,4.7008,269.4659},
{"~w~Rifa", 0xB0E0E6FF, {173,174,175,211}, 0,0,0,212.6294,-1442.5620,13.1636,222.5141},
{"~r~Triad", 0xB22222FF, {117,118,120,169}, 0,0,0,1313.5397,-865.3055,39.5781,267.5482},
{"~y~Criminals", 0xB8860BFF, {28,29,30,192}, 0,0,0,856.0395,-1520.4128,13.5547,265.0022}
};
#endif
#define Classes 259
new ClassInfo[Classes] = {
7,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43,44,45,46,47,48,49,
50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,66,67,68,69,70,71,72,73,75,76,77,78,79,80,81,82,83,84,85,87,88,89,90,91,92,
93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,120,121,122,123,124,125,
126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,150,151,152,153,154,155,156,
157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,
187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,209,210,211,212,213,214,215,216,217,
218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,
248,249,250,251,252,253,254,255,280,281,282,283,284,285,286,287,290,291,292,293,294,295,296,297,298,299
};
new DefaultPlayerColors[MAX_PLAYERS] = {
0xFF8C13FF,0xC715FFFF,0x20B2AAFF,0xDC143CFF,0x6495EDFF,0xF0E68CFF,0x778899FF,0xFF1493FF,0xF4A460FF,0xEE82EEFF,
0xFFD720FF,0x8B4513FF,0x4949A0FF,0x148B8BFF,0x14FF7FFF,0x556B2FFF,0x0FD9FAFF,0x10DC29FF,0x534081FF,0x0495CDFF,
0xEF6CE8FF,0xBD34DAFF,0x247C1BFF,0x0C8E5DFF,0x635B03FF,0xCB7ED3FF,0x65ADEBFF,0x5C1ACCFF,0xF2F853FF,0x11F891FF,
0x7B39AAFF,0x53EB10FF,0x54137DFF,0x275222FF,0xF09F5BFF,0x3D0A4FFF,0x22F767FF,0xD63034FF,0x9A6980FF,0xDFB935FF,
0x3793FAFF,0x90239DFF,0xE9AB2FFF,0xAF2FF3FF,0x057F94FF,0xB98519FF,0x388EEAFF,0x028151FF,0xA55043FF,0x0DE018FF,
0x93AB1CFF,0x95BAF0FF,0x369976FF,0x18F71FFF,0x4B8987FF,0x491B9EFF,0x829DC7FF,0xBCE635FF,0xCEA6DFFF,0x20D4ADFF,
0x2D74FDFF,0x3C1C0DFF,0x12D6D4FF,0x48C000FF,0x2A51E2FF,0xE3AC12FF,0xFC42A8FF,0x2FC827FF,0x1A30BFFF,0xB740C2FF,
0x42ACF5FF,0x2FD9DEFF,0xFAFB71FF,0x05D1CDFF,0xC471BDFF,0x94436EFF,0xC1F7ECFF,0xCE79EEFF,0xBD1EF2FF,0x93B7E4FF,
0x3214AAFF,0x184D3BFF,0xAE4B99FF,0x7E49D7FF,0x4C436EFF,0xFA24CCFF,0xCE76BEFF,0xA04E0AFF,0x9F945CFF,0xDCDE3DFF,
0x10C9C5FF,0x70524DFF,0x0BE472FF,0x8A2CD7FF,0x6152C2FF,0xCF72A9FF,0xE59338FF,0xEEDC2DFF,0xD8C762FF,0x3FE65CFF
};
#define Vehicles 254
enum VehicleInfos {
VehicleModelID,
Float:VehicleSpawnX,
Float:VehicleSpawnY,
Float:VehicleSpawnZ,
Float:VehicleSpawnA,
VehicleColor1,
VehicleColor2
}
new VehicleInfo[Vehicles][VehicleInfos] = {
{492,2488.168701,-1682.798095,13.335395,271.722106,86,1}, // Greenwood (ID: 1) // Groove Street
{567,2508.157470,-1672.090942,13.378959,349.533935,86,-1}, // Savanna (ID: 2) // Groove Street
{566,2482.753662,-1655.063964,13.309096,90.323776,86,-1}, // Tahoma (ID: 3) // Groove Street
{482,2473.407958,-1699.544311,13.519279,359.456268,86,-1}, // Burrito (ID: 4) // Groove Street
{475,2443.209716,-1642.994262,13.460376,180.146942,86,-1}, // Sabre (ID: 5) // Groove Street
{566,2227.748779,-1173.421264,25.726562,91.503021,5,-1}, // Tahoma (ID: 6) // Motel Jefferson
{567,2228.125732,-1162.914916,25.767463,90.980796,5,-1}, // Savanna (ID: 7) // Motel Jefferson
{468,2217.522460,-1157.238159,25.726562,87.325241,5,-1}, // Sanchez (ID: 8) // Motel Jefferson
{579,2205.773437,-1177.078857,25.726562,268.538085,5,-1}, // Huntley (ID: 9) // Motel Jefferson
{482,2217.228515,-1166.083496,25.726562,90.273147,5,-1}, // Burrito (ID: 10) // Motel Jefferson
{482,2796.360839,-1575.941040,10.927155,271.827880,6,-1}, // Burrito (ID: 11) // East Beach
{475,2796.361083,-1567.129394,10.927155,269.216796,6,-1}, // Sabre (ID: 12) // East Beach
{402,2807.477294,-1540.213378,10.921875,180.960388,6,-1}, // Buffalo (ID: 13) // East Beach
{492,2822.060058,-1562.455444,10.927155,88.180908,6,1}, // Greenwood (ID: 14) // East Beach
{567,2822.019042,-1553.378662,10.921875,91.137275,6,-1}, // Savanna (ID: 15) // East Beach
{603,1795.320068,-1934.007202,13.274000,269.756439,51,-1}, // Phoenix (ID: 16) // Unity Station
{534,1805.043579,-1921.249389,13.264128,0.720035,51,-1}, // Remington (ID: 17) // Unity Station
{567,1793.350219,-1886.121093,13.269401,89.751121,51,-1}, // Savanna (ID: 18) // Unity Station
{560,1775.841430,-1914.593750,13.258572,180.302734,51,-1}, // Sultan (ID: 19) // Unity Station
{482,1838.001953,-1871.373168,13.255450,359.706909,51,-1}, // Burrito (ID: 20) // Unity Station
{596,1535.970581,-1666.971801,13.188262,359.291046,-1,0}, // LSPD Police Car (ID: 21) // LSPD
{596,1535.822998,-1678.474365,13.189436,359.291046,-1,0}, // LSPD Police Car (ID: 22) // LSPD
{487,1561.646850,-1614.772460,13.559510,91.630447,0,1}, // Maverick (ID: 23) // LSPD
{523,1601.414672,-1688.026367,5.696791,90.164779,0,-1}, // HPV1000 (ID: 24) // LSPD
{523,1601.492065,-1691.986816,5.696719,91.491439,0,-1}, // HPV1000 (ID: 25) // LSPD
{596,1587.453979,-1710.865600,5.695763,358.165405,-1,0}, // LSPD Police Car (ID: 26) // LSPD
{596,1574.501342,-1710.236572,5.695737,359.649810,-1,0}, // LSPD Police Car (ID: 27) // LSPD
{490,1530.038940,-1683.801269,5.697155,268.263702,0,-1}, // FBI Rancher (ID: 28) // LSPD
{490,1545.517456,-1667.839477,5.694042,88.184928,0,-1}, // FBI Rancher (ID: 29) // LSPD
{407,1751.650634,-1454.969604,13.351839,269.315338,-1,-1}, // Firetruck (ID: 30) // LSFD
{407,1757.273925,-1484.091308,13.347614,247.498703,-1,-1}, // Firetruck (ID: 31) // LSFD
{416,2020.521728,-1414.153808,16.797670,89.666770,-1,-1}, // Ambulance (ID: 32) // Hospital
{416,2033.666503,-1431.295166,16.902194,358.661865,-1,-1}, // Ambulance (ID: 33) // Hospital
{409,1244.272827,-2025.900878,59.659931,180.460601,0,0}, // Stretch (ID: 34) // Verdant Bluffs
{490,1257.755371,-2010.788085,59.266197,180.460601,0,-1}, // FBI Rancher (ID: 35) // Verdant Bluffs
{490,1267.860351,-2010.542358,58.977474,180.460601,0,-1}, // FBI Rancher (ID: 36) // Verdant Bluffs
{426,1276.659301,-2030.210449,58.771591,89.707191,0,-1}, // Premier (ID: 37) // Verdant Bluffs
{482,1276.537597,-2039.880126,58.810909,90.653999,0,-1}, // Burrito (ID: 38) // Verdant Bluffs
{500,314.998229,-1788.702636,4.348239,180.305267,61,-1}, // Mesa (ID: 39) // Santa Maria Beach
{587,324.641326,-1789.121826,4.501376,180.305267,61,-1}, // Euros (ID: 40) // Santa Maria Beach
{405,347.111938,-1809.621582,4.234993,0.546290,61,-1}, // Sentinel (ID: 41) // Santa Maria Beach
{542,334.075195,-1808.767578,4.221151,0.546290,61,-1}, // Clover (ID: 42) // Santa Maria Beach
{579,321.201171,-1808.881347,4.208554,0.546290,61,-1}, // Huntley (ID: 43) // Santa Maria Beach
{567,204.645416,-1444.406616,12.815665,318.328063,29,-1}, // Savanna (ID: 44) // Rodeo
{475,200.009826,-1440.660522,12.803405,318.328063,29,-1}, // Sabre (ID: 45) // Rodeo
{560,211.957931,-1423.395996,12.980006,134.051132,29,-1}, // Sultan (ID: 46) // Rodeo
{405,218.385528,-1429.711669,12.996314,134.051132,29,-1}, // Sentinel (ID: 47) // Rodeo
{521,214.204193,-1439.008666,12.926919,226.178039,29,-1}, // FCR-900 (ID: 48) // Rodeo
{559,1311.380981,-856.143981,39.300998,177.522262,3,-1}, // Jester (ID: 49) // Mulholland
{560,1321.721557,-856.712707,39.298252,177.522262,3,-1}, // Sultan (ID: 50) // Mulholland
{506,1330.086059,-881.975463,39.298839,177.522262,3,-1}, // Super GT (ID: 51) // Mulholland
{562,1319.317626,-873.059509,39.299736,177.522262,3,-1}, // Elegy (ID: 52) // Mulholland
{522,1309.148193,-872.496093,39.298271,177.522262,3,-1}, // NRG500 (ID: 53) // Mulholland
{492,871.714355,-1535.169677,13.214927,271.655426,55,-1}, // Greenwood (ID: 54) // Marina
{603,884.036315,-1523.192993,13.215357,89.182685,55,-1}, // Phoenix (ID: 55) // Marina
{482,855.193786,-1528.053588,13.013707,266.415924,55,-1}, // Burrito (ID: 56) // Marina
{535,857.273193,-1512.742797,13.087572,266.415924,55,-1}, // Slamvan (ID: 57) // Marina
{411,864.314453,-1500.947631,13.224195,177.197021,55,-1}, // Infernus (ID: 58) // Marina
{514,2747.800048,-2465.335693,13.429963,269.006835,-1,-1}, // Tanker (ID: 59) // Docks
{514,2748.372070,-2443.649658,13.425960,269.006835,-1,-1}, // Tanker (ID: 60) // Docks
{406,2762.364990,-2394.942871,13.412092,177.454864,-1,-1}, // Dumper (ID: 61) // Docks
{406,2779.589843,-2437.101074,13.414171,91.006835,-1,-1}, // Dumper (ID: 62) // Docks
{487,2795.082763,-2545.983642,13.412330,177.454864,-1,-1}, // Maverick (ID: 63) // Docks
{535,2785.703613,-1994.749389,13.163056,94.267616,-1,-1}, // Slamvan (ID: 64) // Playa Del Seville
{566,2685.203857,-2017.712280,13.328207,358.753265,-1,-1}, // Tahoma (ID: 65) // Playa Del Seville
{534,2662.252197,-2000.307250,13.165456,88.463493,-1,-1}, // Remington (ID: 66) // Playa Del Seville
{567,2652.270019,-2035.403930,13.331976,41.777493,-1,-1}, // Savanna (ID: 67) // Playa Del Seville
{444,2797.901855,-1875.848999,9.649276,359.544311,-1,-1}, // Monster (ID: 68) // Stadium
{444,2787.847412,-1875.416748,9.610875,359.544311,-1,-1}, // Monster (ID: 69) // Stadium
{444,2777.813476,-1875.198242,9.572721,359.544311,-1,-1}, // Monster (ID: 70) // Stadium
{444,2767.774414,-1875.595703,9.523494,359.544311,-1,-1}, // Monster (ID: 71) // Stadium
{494,2771.998291,-1842.478271,9.545600,200.137451,-1,-1}, // Hotring (ID: 72) // Stadium
{494,2762.750244,-1846.010620,9.512990,200.137451,-1,-1}, // Hotring (ID: 73) // Stadium
{494,2753.314941,-1849.223632,9.472146,199.192810,-1,-1}, // Hotring (ID: 74) // Stadium
{494,2741.720947,-1851.832397,9.421898,179.380416,-1,-1}, // Hotring (ID: 75) // Stadium
{487,1544.362426,-1353.175292,329.474548,90.522239,-1,-1}, // Maverick (ID: 76) // Highest Building
{542,1013.543395,-1020.710021,31.762334,178.791854,-1,-1}, // Clover (ID: 77) // Temple
{541,1096.994140,-1026.650512,31.849119,178.864196,-1,-1}, // Bullet (ID: 78) // Temple
{429,1040.908813,-1052.341064,31.362176,0.864196,-1,-1}, // Banshee (ID: 79) // Temple
{415,1028.227661,-1052.463989,31.307344,0.864196,-1,-1}, // Cheetah (ID: 80) // Temple
{451,1016.122314,-1052.256835,31.022838,0.864196,-1,-1}, // Turismo (ID: 81) // Temple
{480,1003.994445,-1052.958862,30.744747,0.864196,-1,-1}, // Comet (ID: 82) // Temple
{506,989.683654,-919.843505,41.839294,181.591979,-1,-1}, // Super GT (ID: 83) // Temple
{477,1000.786499,-1085.005737,23.489233,178.768478,-1,-1}, // ZR350 (ID: 84) // Temple
{446,731.653076,-1497.972045,4.631143,181.861129,-1,-1}, // Squalo (ID: 85) // Market
{487,1989.280395,-2249.075439,13.723354,90.048965,-1,-1}, // Maverick (ID: 86) // Airport
{487,1989.216430,-2315.605712,13.724207,90.048965,-1,-1}, // Maverick (ID: 87) // Airport
{487,1989.617675,-2382.604003,13.722428,90.048965,-1,-1}, // Maverick (ID: 88) // Airport
{476,1823.287597,-2620.903564,13.546875,6.532232,-1,-1}, // Rustler (ID: 89) // Airport
{476,1753.408813,-2621.539306,13.546875,2.522825,-1,-1}, // Rustler (ID: 90) // Airport
{476,1682.046386,-2621.489501,13.546875,1.309966,-1,-1}, // Rustler (ID: 91) // Airport
{476,1616.716186,-2623.020751,13.546875,2.691160,-1,-1}, // Rustler (ID: 92) // Airport
{513,1565.795776,-2629.644531,13.546875,357.991119,-1,-1}, // Stuntplane (ID: 93) // Airport
{513,1544.431884,-2628.521240,13.546875,357.991119,-1,-1}, // Stuntplane (ID: 94) // Airport
{513,1526.430541,-2627.558349,13.546875,357.991119,-1,-1}, // Stuntplane (ID: 95) // Airport
{513,1507.414672,-2626.932373,13.546875,357.991119,-1,-1}, // Stuntplane (ID: 96) // Airport
{437,1665.962768,-2313.818847,13.329627,90.613891,-1,-1}, // Coach (ID: 97) // Airport
{437,1699.231079,-2313.866455,13.329858,90.613891,-1,-1}, // Coach (ID: 98) // Airport
{420,1560.797851,-2318.739501,13.416219,90.050659,-1,-1}, // Taxi (ID: 99) // Airport
{500,1542.901000,-2361.018066,13.425674,359.819000,-1,-1}, // Mesa (ID: 100) // Airport
{559,1454.505981,-2348.327636,13.414303,359.819000,-1,-1}, // Jester (ID: 101) // Airport
{534,1404.678100,-2331.296142,13.419953,359.819000,-1,-1}, // Remington (ID: 102) // Airport
{463,1365.557006,-2326.746093,13.417978,90.989105,-1,-1}, // Freeway (ID: 103) // Airport
{542,1364.885009,-2246.154296,13.417449,269.052032,-1,-1}, // Clover (ID: 104) // Airport
{475,1388.229125,-2225.669921,13.417157,0.328545,-1,-1}, // Sabre (ID: 105) // Airport
{470,1408.144165,-2208.654785,13.409720,179.281478,-1,-1}, // Patriot (ID: 106) // Airport
{451,1451.273437,-2224.511230,13.415595,179.281478,-1,-1}, // Turismo (ID: 107) // Airport
{522,1512.114746,-2211.639404,13.422736,359.647491,-1,-1}, // NRG500 (ID: 108) // Airport
{426,1560.190063,-2254.181152,13.416652,271.015991,-1,-1}, // Premier (ID: 109) // Airport
{415,1681.843139,-2259.461181,13.300088,269.898681,-1,-1}, // Cheetah (ID: 110) // Airport
{562,1951.140136,-2205.027099,13.417691,269.319335,-1,-1}, // Elegy (ID: 111) // Airport
{468,1969.294189,-2184.720703,13.414156,359.800323,-1,-1}, // Sanchez (ID: 112) // Airport
{510,1886.371582,-1360.628173,19.140625,90.731697,-1,-1}, // Mountain Bike (ID: 113) // Park
{510,1886.252197,-1364.958374,19.140625,88.120559,-1,-1}, // Mountain Bike (ID: 114) // Park
{510,1869.581054,-1364.902465,19.140625,268.996643,-1,-1}, // Mountain Bike (ID: 115) // Park
{510,1869.607055,-1360.417968,19.140625,268.474365,-1,-1}, // Mountain Bike (ID: 116) // Park
{510,1952.080322,-1380.445678,24.148437,359.864044,-1,-1}, // Mountain Bike (ID: 117) // Park
{510,1956.610229,-1380.303588,24.148437,359.341827,-1,-1}, // Mountain Bike (ID: 118) // Park
{510,1956.630249,-1363.743652,24.148437,178.987945,-1,-1}, // Mountain Bike (ID: 119) // Park
{510,1952.154418,-1363.976928,24.148437,177.943496,-1,-1}, // Mountain Bike (ID: 120) // Park
{510,1921.441406,-1418.123291,16.359375,93.157211,-1,-1}, // Mountain Bike (ID: 121) // Park
{510,1913.456542,-1434.901855,16.366991,270.714477,-1,-1}, // Mountain Bike (ID: 122) // Park
{411,1135.481201,-1466.869873,15.545242,40.920494,-1,-1}, // Infernus (ID: 123) // Verona Mall
{415,1135.481201,-1461.869873,15.545242,40.920494,-1,-1}, // Cheetah (ID: 124) // Verona Mall
{429,1135.481201,-1456.869873,15.545242,40.920494,-1,-1}, // Banshee (ID: 125) // Verona Mall
{451,1135.481201,-1451.869873,15.545242,40.920494,-1,-1}, // Turismo (ID: 126) // Verona Mall
{506,1135.481201,-1446.869873,15.545242,40.920494,-1,-1}, // Super GT (ID: 127) // Verona Mall
{541,1135.481201,-1441.869873,15.545242,40.920494,-1,-1}, // Bullet (ID: 128) // Verona Mall
{411,1122.481201,-1466.869873,15.545242,310.920494,-1,-1}, // Infernus (ID: 129) // Verona Mall
{415,1122.481201,-1461.869873,15.545242,310.920494,-1,-1}, // Cheetah (ID: 130) // Verona Mall
{429,1122.481201,-1456.869873,15.545242,310.920494,-1,-1}, // Banshee (ID: 131) // Verona Mall
{451,1122.481201,-1451.869873,15.545242,310.920494,-1,-1}, // Turismo (ID: 132) // Verona Mall
{506,1122.481201,-1446.869873,15.545242,310.920494,-1,-1}, // Super GT (ID: 133) // Verona Mall
{541,1122.481201,-1441.869873,15.545242,310.920494,-1,-1}, // Bullet (ID: 134) // Verona Mall
{409,668.889770,-1294.412719,13.242489,0.779876,-1,-1}, // Stretch (ID: 135) // Golf Club
{409,1825.435424,-1682.812744,13.162638,0.978817,-1,-1}, // Stretch (ID: 136) // Alhambra Club
{542,2416.276855,-1718.419677,13.529325,179.012817,-1,-1}, // Clover (ID: 137) // Groove Street
{579,2497.724853,-1750.778442,13.233366,19.892271,-1,-1}, // Huntley (ID: 138) // Groove Street
{475,2659.429687,-1425.874877,30.253877,0.312046,-1,-1}, // Sabre (ID: 139) // Eastside
{402,2603.372314,-1250.774536,47.516540,90.312046,-1,-1}, // Buffalo (ID: 140) // Eastside
{506,2430.125244,-1242.370727,24.037115,180.653350,-1,-1}, // Super GT (ID: 141) // Pig Pen
{405,2270.338623,-1433.710205,23.612556,354.944854,-1,-1}, // Sentinel (ID: 142) // Eastside
{534,2422.818115,-1106.193359,41.077373,4.864102,-1,-1}, // Remington (ID: 143) // Eastside
{463,2751.363769,-1106.430053,69.360404,358.515625,-1,-1}, // Freeway (ID: 144) // Eastside
{500,2743.434082,-1073.248291,69.324546,42.831970,-1,-1}, // Mesa (ID: 145) // Eastside
{470,2816.528320,-1184.118408,25.115844,269.205902,-1,-1}, // Patriot (ID: 146) // Eastside
{521,2390.796386,-1494.082519,23.537887,270.671630,-1,-1}, // FCR-900 (ID: 147) // Eastside Cluckin' Bell
{420,2301.064697,-1638.187255,14.355358,204.079620,-1,-1}, // Taxi (ID: 148) // Groove Street Bar
{429,2386.544921,-1927.515991,13.087308,1.484918,-1,-1}, // Banshee (ID: 149) // Ganton Cluckin' Bell
{492,2502.870117,-2005.957397,12.985747,88.768928,-1,-1}, // Greenwood (ID: 150) // Willowfield
{514,2437.250732,-2107.854980,13.254782,356.197235,-1,-1}, // Tanker (ID: 151) // Willowfield
{468,2265.018798,-2122.640380,13.251161,42.138710,-1,-1}, // Sanchez (ID: 152) // Docks
{603,1931.903564,-2151.721923,13.254512,179.011871,-1,-1}, // Phoenix (ID: 153) // Airport
{415,1883.562866,-2022.473510,13.094923,179.906265,-1,-1}, // Cheetah (ID: 154) // El Corona
{470,1922.774658,-1792.124389,13.087321,271.566925,-1,-1}, // Patriot (ID: 155) // El Corona
{426,2095.775390,-1797.090087,13.165884,89.055381,-1,-1}, // Premier (ID: 156) // Idlewood
{522,2159.146484,-1800.948608,13.153849,270.173706,-1,-1}, // NRG500 (ID: 157) // Idlewood
{477,2092.460449,-1576.368774,13.005808,178.178710,-1,-1}, // ZR350 (ID: 158) // Idlewood
{566,1825.292602,-1655.640380,13.163235,358.728363,-1,-1}, // Tahoma (ID: 159) // Alhambra Club
{522,1825.332519,-1709.678344,13.163582,358.728363,-1,-1}, // NRG500 (ID: 160) // Alhambra Club
{490,1125.806030,-1744.515014,13.178814,270.739562,0,-1}, // FBI Rancher (ID: 161) // Conference Center
{405,1144.784057,-1744.501586,13.179642,270.739562,0,-1}, // Sentinel (ID: 162) // Conference Center
{411,1080.781005,-1763.776489,13.152679,269.337951,-1,-1}, // Infernus (ID: 163) // Conference Center
{506,1062.199218,-1743.167846,13.246815,90.171699,-1,-1}, // Super GT (ID: 164) // Conference Center
{559,888.122985,-1669.256958,13.326845,179.932769,-1,-1}, // Jester (ID: 165) // Verona Beach
{480,841.968078,-1802.136230,13.074001,0.501242,-1,-1}, // Comet (ID: 166) // Verona Beach Peer
{579,639.531122,-1707.006704,14.369411,35302.261731,-1,-1}, // Huntley (ID: 167) // Verona Beach
{522,447.087585,-1733.396362,9.526784,309.447814,-1,-1}, // NRG500 (ID: 168) // Verona Beach
{541,107.669761,-1555.394042,7.145474,250.447814,-1,-1}, // Bullet (ID: 169) // Rodeo
{429,336.078460,-1296.101684,54.005210,25.510961,-1,-1}, // Banshee (ID: 170) // Rodeo
{500,404.925323,-1154.457763,77.213508,147.510961,-1,-1}, // Mesa (ID: 171) // Richman
{562,564.611083,-1065.602050,73.474952,31.700830,-1,-1}, // Elegy (ID: 172) // Richman
{405,1275.730224,-1558.857421,13.342744,90.362113,-1,-1}, // Sentinel (ID: 173) // Market
{420,1304.286865,-1137.348999,23.438859,92.285606,-1,-1}, // Taxi (ID: 174) // Market
{560,974.311645,-1304.160278,13.164890,179.460983,-1,-1}, // Sultan (ID: 175) // Market
{579,746.687683,-1344.158081,13.300282,270.392517,-1,-1}, // Huntley (ID: 176) // Vinewood
{480,834.464599,-925.766235,55.036350,242.148605,-1,-1}, // Comet (ID: 177) // Vinewood
{587,724.647583,-994.253356,52.410949,59.031322,-1,-1}, // Euros (ID: 178) // Vinewood
{470,792.086608,-849.858276,60.419754,171.635818,-1,-1}, // Patriot (ID: 179) // Vinewood
{451,891.814514,-714.456726,108.325859,243.634704,-1,-1}, // Turismo (ID: 180) // Vinewood
{415,1105.364379,-642.652221,112.454177,43.034236,-1,-1}, // Cheetah (ID: 181) // Vinewood
{477,1358.613159,-615.489318,108.912948,76.262275,-1,-1}, // ZR350 (ID: 182) // Vinewood
{429,1248.067993,-781.312622,90.462387,359.262275,-1,-1}, // Banshee (ID: 183) // Maddog's House
{562,1251.299804,-812.692932,83.927108,141.262275,-1,-1}, // Elegy (ID: 184) // Maddog's House
{487,1291.206298,-788.211303,96.460937,179.734359,-1,-1}, // Maverick (ID: 185) // Maddog's House
{411,1524.090454,-882.923156,60.904850,49.207355,-1,-1}, // Infernus (ID: 186) // Vinewood
{521,1685.356079,-1035.566650,23.690450,180.704605,-1,-1}, // FCR-900 (ID: 187) // Mulholland Intersection
{587,1721.432983,-1007.263793,23.696136,352.521728,-1,-1}, // Euros (ID: 188) // Mulholland Intersection
{541,1757.339355,-1037.625732,23.743011,179.695190,-1,-1}, // Bullet (ID: 189) // Mulholland Intersection
{482,1788.991821,-1060.637084,23.744018,358.440948,-1,-1}, // Burrito (ID: 190) // Mulholland Intersection
{468,1739.945434,-1084.709228,23.741813,358.440948,-1,-1}, // Sanchez (ID: 191) // Mulholland Intersection
{470,1695.894042,-1069.324340,23.689058,358.440948,-1,-1}, // Patriot (ID: 192) // Mulholland Intersection
{567,1658.602539,-1106.834716,23.690155,88.377090,-1,-1}, // Savanna (ID: 193) // Mulholland Intersection
{429,1617.230590,-1128.288452,23.686874,88.377090,-1,-1}, // Banshee (ID: 194) // Mulholland Intersection
{402,1581.666015,-1043.707275,23.688972,127.121681,-1,-1}, // Buffalo (ID: 195) // Mulholland Intersection
{534,1910.453857,-1120.688232,25.493597,180.253845,-1,-1}, // Remington (ID: 196) // Park
{426,1965.313110,-1210.967895,25.215663,185.093856,-1,-1}, // Premier (ID: 197) // Park
{559,2084.050292,-1342.558471,23.768108,90.043258,-1,-1}, // Jester (ID: 198) // Mulholland
{522,1585.928222,-1011.110290,23.687934,6.290105,-1,-1}, // NRG500 (ID: 199) // Mulholland Intersection
{603,1636.306152,-1047.303100,23.687259,179.662826,-1,-1}, // Phoenix (ID: 200) // Mulholland Intersection
{475,1431.105503,-1028.763811,23.547245,89.120421,-1,-1}, // Sabre (ID: 201) // Mulholland
{492,1215.208129,-875.502014,42.690128,189.749923,-1,-1}, // Greenwood (ID: 202) // Vinewood
{514,1147.334960,-1238.864746,15.860088,180.982284,-1,-1}, // Tanker (ID: 203) // Market
{451,1282.760864,-1355.385253,13.253620,0.298043,-1,-1}, // Turismo (ID: 204) // Market
{559,1560.973754,-1308.880615,16.777351,270.087646,-1,-1}, // Jester (ID: 205) // Highest Building
{402,1533.991333,-1308.772094,15.604850,270.087646,-1,-1}, // Buffalo (ID: 206) // Highest Building
{542,1730.300903,-1277.318481,13.432171,139.551971,-1,-1}, // Clover (ID: 207) // Near Park
{562,2102.487548,-982.701477,53.715827,74.013938,-1,-1}, // Elegy (ID: 208) // Eastside
{405,769.467895,-1128.637329,23.845144,218.737091,-1,-1}, // Sentinel (ID: 209) // Richman
{521,872.521728,-1339.831665,13.422805,359.602630,-1,-1}, // FCR-900 (ID: 210) // Market
{587,746.151428,-1647.853637,5.130365,179.769378,-1,-1}, // Euros (ID: 211) // Market
{477,236.171966,-1566.026611,32.787525,163.647262,-1,-1}, // ZR350 (ID: 212) // Rodeo
{426,398.119567,-1577.055664,27.922294,91.100753,-1,-1}, // Premier (ID: 213) // Rodeo
{463,546.459821,-1477.241801,14.222844,3.921021,-1,-1}, // Freeway (ID: 214) // Rodeo
{409,487.772308,-1515.493041,19.883850,5.185674,-1,-1}, // Stretch (ID: 215) // Rodeo
{411,482.113616,-1489.037719,19.645090,184.543838,-1,-1}, // Infernus (ID: 216) // Rodeo
{522,511.460700,-1597.633950,15.268744,270.319421,-1,-1}, // NRG500 (ID: 217) // Rodeo
{415,609.892333,-1511.540771,14.555418,269.814208,-1,-1}, // Cheetah (ID: 218) // Rodeo
{402,1269.080688,-1796.741088,13.186159,179.752624,-1,-1}, // Buffalo (ID: 219) // Conference Center
{535,1034.401000,-2284.181396,12.799115,204.966705,-1,-1}, // Slamvan (ID: 220) // Near Airport
{470,377.743591,-2034.954956,7.367589,43.895828,-1,-1}, // Patriot (ID: 221) // Santa Maria Beach
{487,395.903717,-1858.933471,13.601562,0.681233,-1,-1}, // Maverick (ID: 222) // Santa Maria Beach
{560,2337.197509,-1759.043457,13.331455,358.909698,-1,-1}, // Sultan (ID: 223) // Groove Street
{480,2232.150146,-1937.669311,13.322902,88.823371,-1,-1}, // Comet (ID: 224) // Willowfield
{587,2092.116455,-2094.257568,13.327116,177.526306,-1,-1}, // Euros (ID: 225) // Willowfield
{603,1747.708129,-2099.114990,13.328202,179.969940,-1,-1}, // Phoenix (ID: 226) // Near Airport
{541,1636.577148,-1902.174194,13.334104,300.834533,-1,-1}, // Bullet (ID: 227) // Verdant Bluffs
{566,1373.253051,-1889.279663,13.279490,359.301208,-1,-1}, // Tahoma (ID: 228) // Verdant Bluffs
{477,1025.350097,-1550.914672,13.332073,180.034439,-1,-1}, // ZR350 (ID: 229) // Market
{463,441.789764,-1295.604858,14.972719,203.356765,-1,-1}, // Freeway (ID: 230) // Richman
{480,399.930694,-1432.127807,32.826747,217.363891,-1,-1}, // Comet (ID: 231) // Rodeo
{560,666.261657,-1418.682373,13.946446,357.971557,-1,-1}, // Sultan (ID: 232) // Market
{420,996.153625,-1438.099121,13.328618,357.971557,-1,-1}, // Taxi (ID: 233) // Market
{603,1459.093627,-1502.755615,13.331052,38.762462,-1,-1}, // Phoenix (ID: 234) // Market
{480,1514.192749,-1462.814819,9.281811,181.656448,-1,-1}, // Comet (ID: 235) // Downtown
{468,1523.681762,-1464.850219,9.283031,181.656448,-1,-1}, // Sanchez (ID: 236) // Downtown
{521,1648.613159,-1343.982177,17.218912,181.656448,-1,-1}, // FCR-900 (ID: 237) // Downtown
{477,2133.300537,-1132.668334,25.456342,44.821918,-1,-1}, // ZR350 (ID: 238) // Jefferson
{463,2120.306640,-1136.523803,25.012439,306.459991,-1,-1}, // Freeway (ID: 239) // Jefferson
{468,2148.018066,-1152.891723,23.724176,269.350891,-1,-1}, // Sanchez (ID: 240) // Jefferson
{541,2161.433105,-1182.537719,23.601108,269.350891,-1,-1}, // Bullet (ID: 241) // Jefferson
{420,1363.211425,-1643.393554,13.164815,269.703430,-1,-1}, // Taxi (ID: 242) // Commerce
{592,2104.534221,-2450.372304,14.741810,127.896124,1,1}, // Andromada (ID: 243) // Airport
{521,2470.294677,-1669.880371,13.096332,191.679702,86,-1}, // FCR-900 (ID: 244) // Groove Street
{587,2206.342529,-1160.932495,25.512912,270.352844,5,-1}, // Euros (ID: 245) // Motel Jefferson
{463,2796.455078,-1553.996337,10.704411,268.811889,6,-1}, // Freeway (ID: 246) // East Beach
{468,1816.051269,-1902.948974,13.314620,178.052764,51,-1}, // Sanchez (ID: 247) // Unity Station
{522,1250.838623,-2044.338134,59.429252,268.036926,0,-1}, // NRG500 (ID: 248) // Verdant Bluffs
{487,1193.664428,-2053.663818,69.007812,275.950592,0,0}, // Maverick (ID: 249) // Verdant Bluffs
{560,337.544464,-1788.788085,4.488074,178.447174,61,-1}, // Sultan (ID: 250) // Santa Maria Beach
{566,240.217666,-1454.409057,13.280391,312.177062,29,-1}, // Tahoma (ID: 251) // Rodeo
{480,1331.055786,-857.570800,39.454654,178.864349,3,-1}, // Comet (ID: 252) // Mulholland
{468,872.113830,-1514.140869,13.259681,180.265335,55,-1}, // Sanchez (ID: 253) // Marina
{470,893.968200,-1519.364746,12.898312,179.077041,55,-1} // Patriot (ID: 254) // Marina
};
#define Pickups 3
enum PickupInfos {
PickupModelID,
PickupType,
Float:PickupSpawnX,
Float:PickupSpawnY,
Float:PickupSpawnZ
}
new PickupInfo[Pickups][PickupInfos] = {
{371,2,-2347.5498,-1607.7061,483.6420},
{371,2,1969.2869,-2187.5896,13.5469},
{371,2,1554.5847,-1365.5371,329.4535}
};
new WeaponNames[55][20] = {
"Hands","Brassknuckle","Golf Club","Nitestick","Knife","Baseball Bat","Shovel","Pool Cue",
"Katana","Chainsaw","Purple Dildo","White Dildo","Long Vibrator","Vibrator","Flowers","Cane","Grenade",
"Teargas","Molotov","","","","Pistol","Silenced Pistol","Desert Eagle","Shotgun",
"Sawnoff Shotgun","Spas 12","Micro Uzi","MP5","AK-47","M4","Tec-9","Rifle","Sniper Rifle",
"RPG-7","Heatseeker","Flamethrower","Minigun","Satchel","Detonator","Spray Can",
"Fire Extinguisher","Camera","","","Parachute","","","Vehicle","","","","Drown","Collision"
};
new SpawnWeapons[6] = {24,70,25,50,30,300};
#define Weapons 11
enum WeaponInfos {
WeaponID,
WeaponGroup,
WeaponCost,
bool:IsWeaponMelee
}
new WeaponInfo[Weapons][WeaponInfos] = {
{3,0,1500,true},
{4,0,2000,true},
{5,0,1000,true},
{23,1,20,false},
{24,1,80,false},
{25,2,40,false},
{27,2,100,false},
{29,3,30,false},
{30,4,30,false},
{31,4,40,false},
{46,5,1000,true}
};
#define WeaponGroups 6
enum PlayerInfos {
Name[MAX_PLAYER_NAME],
#if defined Teams
Team,
#endif
Admin,
bool:AdminColored,
bool:HearAll,
Query,
bool:Ignores[MAX_PLAYERS],
Moneys,
WeaponIDs[WeaponGroups],
WeaponAmmos[WeaponGroups],
CheatKills,
CheatDeaths,
IdleTime,
Float:LastPosX,
Float:LastPosY,
Float:LastPosZ,
Messages,
Mute,
MuteTimer,
#if defined AntiSpawnKillTime
bool:CanBeKilled,
AntiSpawnKillTimer,
#endif
bool:SafeDeath,
bool:Logged,
Password,
WrongPasswords,
Model,
bool:ModelSet,
Kills,
MaxKillsForLife,
CurrentKillsForLife,
Deaths,
Suicides
}
new PlayerInfo[MAX_PLAYERS][PlayerInfos];
EncodeName(playername[]) {
new str[MAX_STRING];
set(str,strlower(playername));
#if defined AllowBadSymbolsInNicks
str = strreplace("(","%L%",str);
str = strreplace(")","%R%",str);
str = strreplace("%L%","(40)",str);
str = strreplace("%R%","(41)",str);
str = strreplace("[","(91)",str);
str = strreplace("]","(93)",str);
str = strreplace("{","(123)",str);
str = strreplace("}","(124)",str);
str = strreplace("/","(47)",str);
str = strreplace("\\","(92)",str);
str = strreplace("-","(45)",str);
str = strreplace("_","(95)",str);
str = strreplace("!","(33)",str);
str = strreplace("?","(63)",str);
str = strreplace(",","(44)",str);
str = strreplace(".","(46)",str);
str = strreplace(";","(59)",str);
str = strreplace(":","(58)",str);
str = strreplace("'","(39)",str);
str = strreplace("\"","(34)",str);
str = strreplace("`","(96)",str);
str = strreplace("~","(126)",str);
str = strreplace("<","(60)",str);
str = strreplace(">","(62)",str);
str = strreplace("@","(64)",str);
str = strreplace("#","(35)",str);
str = strreplace("$","(36)",str);
str = strreplace("%","(37)",str);
str = strreplace("^","(94)",str);
str = strreplace("&","(38)",str);
str = strreplace("*","(42)",str);
str = strreplace("=","(61)",str);
str = strreplace("+","(43)",str);
#endif
return str;
}
PlayerFile(playername[]) {
new str[MAX_STRING];
format(str,sizeof(str),"%s%s%s",PlayersDir,EncodeName(playername),PlayersExt);
return str;
}
ClearPlayer(playerid) {
PlayerInfo[playerid][Name][0] = 0;
#if defined Teams
PlayerInfo[playerid][Team] = -1;
#endif
PlayerInfo[playerid][Admin] = 0;
PlayerInfo[playerid][AdminColored] = false;
PlayerInfo[playerid][HearAll] = false;
PlayerInfo[playerid][Query] = INVALID_PLAYER_ID;
for (new i=0;i<MAX_PLAYERS;i++) PlayerInfo[playerid][Ignores][i] = false;
PlayerInfo[playerid][Moneys] = 0;
for (new i=0;i<WeaponGroups;i++) {
PlayerInfo[playerid][WeaponIDs][i] = 0;
PlayerInfo[playerid][WeaponAmmos][i] = 0;
}
PlayerInfo[playerid][IdleTime] = 0;
PlayerInfo[playerid][CheatKills] = 0;
PlayerInfo[playerid][CheatDeaths] = 0;
PlayerInfo[playerid][IdleTime] = 0;
PlayerInfo[playerid][LastPosX] = 0;
PlayerInfo[playerid][LastPosY] = 0;
PlayerInfo[playerid][LastPosZ] = 0;
PlayerInfo[playerid][Messages] = 0;
PlayerInfo[playerid][Mute] = 0;
KillTimer(PlayerInfo[playerid][MuteTimer]);
#if defined AntiSpawnKillTime
PlayerInfo[playerid][CanBeKilled] = false;
KillTimer(PlayerInfo[playerid][AntiSpawnKillTimer]);
#endif
PlayerInfo[playerid][SafeDeath] = false;
PlayerInfo[playerid][Logged] = false;
PlayerInfo[playerid][Password] = 0;
PlayerInfo[playerid][WrongPasswords] = 0;
PlayerInfo[playerid][Model] = 0;
PlayerInfo[playerid][ModelSet] = false;
PlayerInfo[playerid][Kills] = 0;
PlayerInfo[playerid][MaxKillsForLife] = 0;
PlayerInfo[playerid][CurrentKillsForLife] = 0;
PlayerInfo[playerid][Deaths] = 0;
PlayerInfo[playerid][Suicides] = 0;
}
LoadPlayer(playerid) {
if (!IsPlayerConnected(playerid)) return;
ClearPlayer(playerid);
GetPlayerName(playerid,PlayerInfo[playerid][Name],MAX_PLAYER_NAME);
new filename[MAX_STRING];
filename = PlayerFile(PlayerInfo[playerid][Name]);
if (!dini_Exists(filename)) return;
PlayerInfo[playerid][Mute] = dini_Int(filename,"Mute");
if (PlayerInfo[playerid][Mute]) PlayerInfo[playerid][MuteTimer] = SetTimerEx("UnMutePlayerT",PlayerInfo[playerid][Mute]*60000,0,"i",playerid);
PlayerInfo[playerid][Logged] = false;
PlayerInfo[playerid][Password] = dini_Int(filename,"Password");
PlayerInfo[playerid][Model] = dini_Int(filename,"Model");
GiveMoney(playerid,dini_Int(filename,"Moneys"));
PlayerInfo[playerid][Kills] = dini_Int(filename,"Kills");
PlayerInfo[playerid][MaxKillsForLife] = dini_Int(filename,"MaxKillsForLife");
PlayerInfo[playerid][Deaths] = dini_Int(filename,"Deaths");
PlayerInfo[playerid][Suicides] = dini_Int(filename,"Suicides");
SetPlayerScore(playerid,PlayerInfo[playerid][Kills]-PlayerInfo[playerid][Suicides]);
}
SavePlayer(playerid) {
if (!IsPlayerConnected(playerid) || !PlayerInfo[playerid][Logged]) return;
new filename[MAX_STRING];
filename = PlayerFile(PlayerInfo[playerid][Name]);
if (!dini_Exists(filename)) return;
dini_IntSet(filename,"Mute",PlayerInfo[playerid][Mute]);
dini_IntSet(filename,"Password",PlayerInfo[playerid][Password]);
dini_IntSet(filename,"Model",PlayerInfo[playerid][Model]);
dini_IntSet(filename,"Moneys",PlayerInfo[playerid][Moneys]);
dini_IntSet(filename,"Kills",PlayerInfo[playerid][Kills]);
dini_IntSet(filename,"MaxKillsForLife",PlayerInfo[playerid][MaxKillsForLife]);
dini_IntSet(filename,"Deaths",PlayerInfo[playerid][Deaths]);
dini_IntSet(filename,"Suicides",PlayerInfo[playerid][Suicides]);
}
GetPlayerID(playername[]) {
for (new i=0;i<MAX_PLAYERS;i++) if (IsPlayerConnected(i) && equal(playername,PlayerInfo[i][Name],true)) return i;
return INVALID_PLAYER_ID;
}
IsPlayerInArea(playerid,Float:x_min,Float:x_max,Float:y_min,Float:y_max,Float:z_min=-10000.0,Float:z_max=10000.0) {
if (!IsPlayerConnected(playerid)) return false;
new Float:x,Float:y,Float:z;
GetPlayerPos(playerid,x,y,z);
if (x_min <= x <= x_max && y_min <= y <= y_max && z_min <= z <= z_max) return true;
return false;
}
#if defined LoggingTimeout
public LoggingTimeoutT(playerid) if (IsPlayerConnected(playerid) && !PlayerInfo[playerid][Logged]) KickPlayer(playerid,"You didn't identified yourself");
#endif
#if defined AntiSpawnKillTime
public AntiSpawnKill(playerid) PlayerInfo[playerid][CanBeKilled] = true;
#endif
/*MutePlayer(playerid,duration,reason[],muter[]="the server") {
if (!IsPlayerConnected(playerid) || IsPlayerAdmin(playerid) || PlayerInfo[playerid][Admin] >= AdminLevelToIgnorePunishment) return;
new str[MAX_STRING];
format(str,sizeof(str),"%s (id: %d) muted by %s for %d minutes: %s",PlayerInfo[playerid][Name],playerid,muter,duration,reason);
WriteToLog(str);
#if defined MutesLog
WriteToLog(str,MutesLog);
#endif
WriteEcho(str,INVALID_PLAYER_ID,MuteMsgColor);
PlayerInfo[playerid][Mute] = duration;
format(str,sizeof(str),"UnMutePlayer_%d",playerid);
PlayerInfo[playerid][MuteTimer] = SetTimer(str,PlayerInfo[playerid][Mute]*60000,0);
}*/
UnMutePlayer(playerid,unmuter[]="the server") {
if (!IsPlayerConnected(playerid) || !PlayerInfo[playerid][Mute]) return;
new str[MAX_STRING];
format(str,sizeof(str),"%s (id: %d) unmuted by %s",PlayerInfo[playerid][Name],playerid,unmuter);
WriteToLog(str);
#if defined MutesLog
WriteToLog(str,MutesLog);
#endif
WriteEcho(str,INVALID_PLAYER_ID,MuteMsgColor);
PlayerInfo[playerid][Mute] = 0;
KillTimer(PlayerInfo[playerid][MuteTimer]);
}
public UnMutePlayerT(playerid) UnMutePlayer(playerid);
KickPlayer(playerid,reason[],kicker[]="the server") {
if (!IsPlayerConnected(playerid) || IsPlayerAdmin(playerid) || PlayerInfo[playerid][Admin] >= AdminLevelToIgnorePunishment) return;
new str[MAX_STRING];
format(str,sizeof(str),"%s (id: %d) kicked by %s: %s",PlayerInfo[playerid][Name],playerid,kicker,reason);
WriteToLog(str);
#if defined KicksLog
WriteToLog(str,KicksLog);
#endif
WriteEcho(str,INVALID_PLAYER_ID,KickMsgColor);
Kick(playerid);
}
BanPlayer(playerid,reason[],banner[]="the server") {
if (!IsPlayerConnected(playerid) || IsPlayerAdmin(playerid) || PlayerInfo[playerid][Admin] >= AdminLevelToIgnorePunishment) return;
new str[MAX_STRING];
format(str,sizeof(str),"%s (id: %d) banned by %s: %s",PlayerInfo[playerid][Name],playerid,banner,reason);
WriteToLog(str);
#if defined BansLog
WriteToLog(str,BansLog);
#endif
WriteEcho(str,INVALID_PLAYER_ID,BanMsgColor);
Ban(playerid);
}
GiveMoney(playerid,amount) {
PlayerInfo[playerid][Moneys] += amount;
GivePlayerMoney(playerid,amount);
}
#if defined TimeCycle
new WorldTime = 12;
public WorldTimeUpdate() {
WorldTime++;
WorldTime %= 24;
SetWorldTime(WorldTime);
}
#endif
public SaveAllPlayers() {
for (new i=0;i<MAX_PLAYERS;i++) SavePlayer(i);
WriteToLog("Global save done");
}
#define RestrictedAreas 4
#if defined RestrictedAreas
new Float:RestrictedAreaInfo[RestrictedAreas][6] = {
{284.0852,298.1549,-112.7213,-102.9336,1000.0,1010.0},
{284.2424,299.8185,-41.4566,-31.2172,1000.0,1010.0},
{284.6116,303.0293,-86.4009,-56.8201,1000.0,1010.0},
{306.3991,319.0888,-169.8648,-158.7572,999.0,1009.0}
};
public AreasCheck() {
for (new i=0;i<MAX_PLAYERS;i++) {
if (IsPlayerConnected(i) && GetPlayerState(i) == PLAYER_STATE_ONFOOT && !IsPlayerAdmin(i) && PlayerInfo[i][Admin] < AdminLevelToIgnorePunishment) {
for (new j=0;j<RestrictedAreas;j++) {
if (IsPlayerInArea(i,RestrictedAreaInfo[j][0],RestrictedAreaInfo[j][1],RestrictedAreaInfo[j][2],RestrictedAreaInfo[j][3],RestrictedAreaInfo[j][4],RestrictedAreaInfo[j][5])) {
PlayerInfo[i][SafeDeath] = true;
SetPlayerHealth(i,0);
WriteEcho("Do not go there",i,ErrorMsgColor);
}
}
}
}
}
#endif
#if defined IdleTimeToKick
public IdleCheck() {
new str[MAX_STRING],Float:x,Float:y,Float:z;
for (new i=0;i<MAX_PLAYERS;i++) {
if (IsPlayerConnected(i)) {
GetPlayerPos(i,x,y,z);
if (x == PlayerInfo[i][LastPosX] && y == PlayerInfo[i][LastPosY] && z == PlayerInfo[i][LastPosZ] && GetPlayerState(i) != PLAYER_STATE_NONE && GetPlayerState(i) != PLAYER_STATE_WASTED) {
PlayerInfo[i][IdleTime]++;
if (IdleTimeToKick-1 == PlayerInfo[i][IdleTime]) {
format(str,sizeof(str),"You are standing here already %d minutes! Please move to another area",PlayerInfo[i][IdleTime]);
WriteEcho(str,i,ErrorMsgColor);
}
if (IdleTimeToKick <= PlayerInfo[i][IdleTime]) KickPlayer(i,"Staying on one place for too long");
}
else {
PlayerInfo[i][IdleTime] = 0;
PlayerInfo[i][LastPosX] = x;
PlayerInfo[i][LastPosY] = y;
PlayerInfo[i][LastPosZ] = z;
}
}
}
}
#endif
#if defined FloodInterval && defined FloodLines
public FloodCheck() for (new i=0;i<MAX_PLAYERS;i++) if (IsPlayerConnected(i)) PlayerInfo[i][Messages] = 0;
#endif
public MoneyCheck() {
for (new i=0;i<MAX_PLAYERS;i++) {
if (IsPlayerConnected(i)) {
if (GetPlayerMoney(i) > PlayerInfo[i][Moneys]) GivePlayerMoney(i,-GetPlayerMoney(i)+PlayerInfo[i][Moneys]);
else if (GetPlayerMoney(i) < PlayerInfo[i][Moneys]) PlayerInfo[i][Moneys] = GetPlayerMoney(i);
#if defined MaxMoneyIllegalIncrease
if (GetPlayerMoney(i)-PlayerInfo[i][Moneys] > MaxMoneyIllegalIncrease) BanPlayer(i,"Cheating is bad: money cheat");
#endif
}
}
}
public MoneyForPlay() for (new i=0;i<MAX_PLAYERS;i++) if (IsPlayerConnected(i)) GiveMoney(i,MoneysForPlaying);
public OnGameModeInit() {
SetGameModeText(GameModeText);
new str[MAX_STRING];
print("\n\n--------------------------------------");
printf(" %s by ProRaiL (c) 2007",GameModeText);
print("--------------------------------------\n\n");
WriteToLog("Gamemode starting...");
format(str,sizeof(str),"Gamemode: %s",GameModeText);
WriteToLog(str);
for (new i=0;i<Classes;i++) AddPlayerClass(ClassInfo[i],0,0,0,0,SpawnWeapons[0],SpawnWeapons[1],SpawnWeapons[2],SpawnWeapons[3],SpawnWeapons[4],SpawnWeapons[5]);
#if defined Teams
new TeamClasses;
for (new i=0;i<Teams;i++) {
for (new j=0;j<ModelsInTeam;j++) {
if (TeamInfo[i][TeamModels][j] == 0) break;
AddPlayerClass(TeamInfo[i][TeamModels][j],TeamInfo[i][TeamSpawnX],TeamInfo[i][TeamSpawnY],TeamInfo[i][TeamSpawnZ],TeamInfo[i][TeamSpawnA],SpawnWeapons[0],SpawnWeapons[1],SpawnWeapons[2],SpawnWeapons[3],SpawnWeapons[4],SpawnWeapons[5]);
if (j == 0) TeamInfo[i][TeamClassStart] = Classes+TeamClasses;
TeamClasses++;
}
TeamInfo[i][TeamClassEnd] = Classes+TeamClasses-1;
}
format(str,sizeof(str),"Classes: %d",Classes+TeamClasses);
#else
format(str,sizeof(str),"Classes: %d",Classes);
#endif
WriteToLog(str);
new models[212],modelids;
for (new i=0;i<Vehicles;i++) {
AddStaticVehicle(VehicleInfo[i][VehicleModelID],VehicleInfo[i][VehicleSpawnX],VehicleInfo[i][VehicleSpawnY],VehicleInfo[i][VehicleSpawnZ],VehicleInfo[i][VehicleSpawnA],VehicleInfo[i][VehicleColor1],VehicleInfo[i][VehicleColor2]);
if (VehicleInfo[i][VehicleModelID] != 0) models[VehicleInfo[i][VehicleModelID]-400]++;
}
for (new i=0;i<212;i++) if (models[i] > 0) modelids++;
format(str,sizeof(str),"Vehicles: %d (Types: %d)",Vehicles,modelids);
WriteToLog(str);
for (new i=0;i<Pickups;i++) AddStaticPickup(PickupInfo[i][PickupModelID],PickupInfo[i][PickupType],PickupInfo[i][PickupSpawnX],PickupInfo[i][PickupSpawnY],PickupInfo[i][PickupSpawnZ]);
format(str,sizeof(str),"Pickups: %d",Pickups);
WriteToLog(str);
#if defined Teams
format(str,sizeof(str),"Teams: %d",Teams);
WriteToLog(str);
#endif
ShowPlayerMarkers(1);
ShowNameTags(1);
WriteToLog("Gamemode started!");
#if defined TimeCycle
SetTimer("WorldTimeUpdate",60000,1);
#endif
SetTimer("SaveAllPlayers",1800000,1);
#if defined RestrictedAreas
SetTimer("AreasCheck",1000,1);
#endif
#if defined IdleTimeToKick
SetTimer("IdleCheck",60000,1);
#endif
#if defined FloodInterval && defined FloodLines
SetTimer("FloodCheck",FloodInterval*1000,1);
#endif
SetTimer("MoneyCheck",10000,1);
SetTimer("MoneyForPlay",60000,1);
AllowAdminTeleport(1);
AllowInteriorWeapons(1);
EnableZoneNames(1);
//SetDisabledWeapons(1,2,6,7,9,10,11,12,13,14,15,17,18,35,36,37,38,39,40,41,43,44,45);
UsePlayerPedAnims();
AddStaticVehicle(538,2019.0902,-1943.2625,13.5469,0.0,-1,-1); //
return 1;
}
public OnGameModeExit() {
SaveAllPlayers();
WriteToLog("Gamemode exit...");
return 0;
}
public OnPlayerConnect(playerid) {
new str[MAX_STRING];
ClearPlayer(playerid);
LoadPlayer(playerid);
format(str,sizeof(str),"%s (id: %d) connected to the server",PlayerInfo[playerid][Name],playerid);
WriteToLog(str);
#if !defined AllowBadSymbolsInNicks
for (new i=0;i<strlen(PlayerInfo[playerid][Name]);i++) {
if (PlayerInfo[playerid][Name][i] < 'A' || 'Z' < PlayerInfo[playerid][Name][i] < 'a' || 'z' < PlayerInfo[playerid][Name][i]) {
KickPlayer(playerid,"Only alphabetical nicks allowed");
return 1;
}
}
#endif
SetPlayerColor(playerid,DefaultPlayerColors[playerid]);
AllowPlayerTeleport(playerid, 0);
return 1;
}
public OnPlayerDisconnect(playerid) {
new str[MAX_STRING];
format(str,sizeof(str),"%s (id: %d) disconnected from the server",PlayerInfo[playerid][Name],playerid);
WriteToLog(str);
SavePlayer(playerid);
ClearPlayer(playerid);
for (new i=0;i<MAX_PLAYERS;i++) if (IsPlayerConnected(i) && PlayerInfo[i][Ignores][playerid]) PlayerInfo[i][Ignores][playerid] = false;
return 1;
}
public OnPlayerRequestClass(playerid,classid) {
if (dini_Exists(PlayerFile(PlayerInfo[playerid][Name])) && !PlayerInfo[playerid][Logged]) {
new str[MAX_STRING];
#if defined LoggingTimeout
SetTimerEx("LoggingTimeoutT",LoggingTimeout*1000,0,"i",playerid);
#endif
format(str,sizeof(str),"This nickname is registered (%s)",PlayerInfo[playerid][Name]);
WriteEcho(str,playerid,ErrorMsgColor);
WriteEcho("If you are the owner identify yourself using your password",playerid,ErrorMsgColor);
WriteEcho("Otherwise, choose another nickname or contact server administrator (if you forgot your password)",playerid,ErrorMsgColor);
SetPlayerColor(playerid,LoggingColor);
return 0;
}
PlayerPlaySound(playerid,1097,0,0,0);
if (classid < Classes) {
SetPlayerInterior(playerid,0);
SetPlayerPos(playerid,1481.4418,-1790.4611,156.7533);
SetPlayerFacingAngle(playerid,180);
SetPlayerCameraPos(playerid,1481.4418,-1795.4611,156.7533);
SetPlayerCameraLookAt(playerid,1481.4418,-1790.4611,156.7533);
#if defined Teams
PlayerInfo[playerid][Team] = -1;
#endif
new vehicleid = random(Vehicles);
while (VehicleInfo[vehicleid][VehicleColor1] != -1 || VehicleInfo[vehicleid][VehicleColor2] != -1) vehicleid = random(Vehicles);
if (!PlayerInfo[playerid][ModelSet]) PlayerInfo[playerid][ModelSet] = true;
else PlayerInfo[playerid][Model] = classid;
SetSpawnInfo(playerid,0,ClassInfo[PlayerInfo[playerid][Model]],VehicleInfo[vehicleid][VehicleSpawnX]+3,VehicleInfo[vehicleid][VehicleSpawnY]+3,VehicleInfo[vehicleid][VehicleSpawnZ],VehicleInfo[vehicleid][VehicleSpawnA],SpawnWeapons[0],SpawnWeapons[1],SpawnWeapons[2],SpawnWeapons[3],SpawnWeapons[4],SpawnWeapons[5]);
}
#if defined Teams
else {
new players,teammates,str[MAX_STRING];
for (new i=0;i<MAX_PLAYERS;i++) if (IsPlayerConnected(i)) players++;
for (new i=0;i<Teams;i++) {
if (TeamInfo[i][TeamClassStart] <= classid <= TeamInfo[i][TeamClassEnd]) {
format(str,sizeof(str),"%s ~w~Team",TeamInfo[i][TeamName]);
teammates = 0;
for (new j=0;j<MAX_PLAYERS;j++) if (IsPlayerConnected(j) && PlayerInfo[j][Team] == i && j != playerid) teammates++;
if (teammates < players/2+1) {
PlayerInfo[playerid][Team] = i;
SetPlayerInterior(playerid,TeamInfo[i][TeamSpawnInterior]);
SetPlayerPos(playerid,TeamInfo[i][TeamSpawnX],TeamInfo[i][TeamSpawnY],TeamInfo[i][TeamSpawnZ]);
SetPlayerFacingAngle(playerid,TeamInfo[i][TeamSpawnA]);
SetPlayerCameraPos(playerid,TeamInfo[i][TeamSpawnX]+(floatsin(-TeamInfo[i][TeamSpawnA],degrees)*5),TeamInfo[i][TeamSpawnY]+(floatcos(-TeamInfo[i][TeamSpawnA],degrees)*5),TeamInfo[i][TeamSpawnZ]);
SetPlayerCameraLookAt(playerid,TeamInfo[i][TeamSpawnX],TeamInfo[i][TeamSpawnY],TeamInfo[i][TeamSpawnZ]);
}
else strcat(str,"~n~~r~FULL");
GameTextForPlayer(playerid,str,1000,3);
break;
}
}
}
#endif
return 1;
}
public OnPlayerSpawn(playerid) {
SetPlayerInterior(playerid,0);
if (PlayerInfo[playerid][SafeDeath]) {
SetPlayerPos(playerid,0,0,5);
return 1;
}
if (dini_Exists(PlayerFile(PlayerInfo[playerid][Name])) && !PlayerInfo[playerid][Logged]) {
KickPlayer(playerid,"Identify yourself using /login command before spawning");
return 0;
}
new str[MAX_STRING];
format(str,sizeof(str),"%s (id: %d) spawned",PlayerInfo[playerid][Name],playerid);
WriteToLog(str);
PlayerPlaySound(playerid,1098,0,0,0);
#if defined Teams
new team = PlayerInfo[playerid][Team];
if (team == -1) {
if (!PlayerInfo[playerid][AdminColored]) SetPlayerColor(playerid,DefaultPlayerColors[playerid]);
else SetPlayerColor(playerid,AdminColor);
}
else {
if (!PlayerInfo[playerid][AdminColored]) SetPlayerColor(playerid,TeamInfo[team][TeamColor]);
else SetPlayerColor(playerid,AdminColor);
SetPlayerInterior(playerid,TeamInfo[team][TeamSpawnInterior]);
}
#else
if (!PlayerInfo[playerid][AdminColored]) SetPlayerColor(playerid,DefaultPlayerColors[playerid]);
else SetPlayerColor(playerid,AdminColor);
#endif
#if defined AntiSpawnKillTime
PlayerInfo[playerid][CanBeKilled] = false;
PlayerInfo[playerid][AntiSpawnKillTimer] = SetTimerEx("AntiSpawnKill",AntiSpawnKillTime*1000,0,"i",playerid);
#endif
for (new i=0;i<WeaponGroups;i++) if (PlayerInfo[playerid][WeaponAmmos][i] > 0) GivePlayerWeapon(playerid,WeaponInfo[PlayerInfo[playerid][WeaponIDs][i]][WeaponID],PlayerInfo[playerid][WeaponAmmos][i]);
return 1;
}
public OnPlayerDeath(playerid,killerid,reason) {
if (PlayerInfo[playerid][SafeDeath]) {
PlayerInfo[playerid][SafeDeath] = false;
return 1;
}
new str[MAX_STRING];
SendDeathMessage(killerid,playerid,reason);
#if defined AntiSpawnKillTime
KillTimer(PlayerInfo[playerid][AntiSpawnKillTimer]);
#endif
#if defined Teams
if (PlayerInfo[playerid][Team] == -1) {
new vehicleid = random(Vehicles);
while (VehicleInfo[vehicleid][VehicleColor1] != -1 || VehicleInfo[vehicleid][VehicleColor2] != -1) vehicleid = random(Vehicles);
SetSpawnInfo(playerid,0,ClassInfo[PlayerInfo[playerid][Model]],VehicleInfo[vehicleid][VehicleSpawnX]+3,VehicleInfo[vehicleid][VehicleSpawnY]+3,VehicleInfo[vehicleid][VehicleSpawnZ],VehicleInfo[vehicleid][VehicleSpawnA],SpawnWeapons[0],SpawnWeapons[1],SpawnWeapons[2],SpawnWeapons[3],SpawnWeapons[4],SpawnWeapons[5]);
}
#else
new vehicleid = random(Vehicles);
while (VehicleInfo[vehicleid][VehicleColor1] != -1 || VehicleInfo[vehicleid][VehicleColor2] != -1) vehicleid = random(Vehicles);
SetSpawnInfo(playerid,0,ClassInfo[PlayerInfo[playerid][Model]],VehicleInfo[vehicleid][VehicleSpawnX]+3,VehicleInfo[vehicleid][VehicleSpawnY]+3,VehicleInfo[vehicleid][VehicleSpawnZ],VehicleInfo[vehicleid][VehicleSpawnA],SpawnWeapons[0],SpawnWeapons[1],SpawnWeapons[2],SpawnWeapons[3],SpawnWeapons[4],SpawnWeapons[5]);
#endif
if (killerid == INVALID_PLAYER_ID) {
format(str,sizeof(str),"%s (id: %d) suicided",PlayerInfo[playerid][Name],playerid);
WriteToLog(str);
SetPlayerScore(playerid,GetPlayerScore(playerid)-1);
PlayerInfo[playerid][Suicides]++;
}
else {
format(str,sizeof(str),"%s (id: %d) killed %s (id: %d) with %s (id: %d)",PlayerInfo[killerid][Name],killerid,PlayerInfo[playerid][Name],playerid,WeaponNames[reason],reason);
WriteToLog(str);
new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
GetPlayerPos(playerid,x1,y1,z1);
GetPlayerPos(killerid,x2,y2,z2);
#if defined InDoorWeapons
if (reason != 0 && z1 > 700 && z2 > 700 && !IsPlayerInAnyVehicle(playerid) && !IsPlayerInAnyVehicle(killerid)) {
KickPlayer(killerid,"Cheating is bad: possible indoor weapons");
return 1;
}
#endif
new di