////////////////////////////////////////////////////////// // GTA Gun Game // // By Backwardsman97 // ////////////////////////////////////////////////////////// #include #include #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1 #define DARKGREY 0x818181FF #define ERROR 0xC06716FF #define ADMIN 0xF19E43FF #define GREEN 0x12B60AFF #define RED 0xE04141FF #define BLUE 0x0A8AE9FF #define DULLBLUE 0x5C8DC2FF #define ORANGE 0xEBA523FF #define LIMEGREEN 0xC4FF88FF #pragma unused ret_memcpy, strtok forward AfterSpawn(playerid); forward Restart(); forward GameTime(); forward StopSpectate(playerid); new CurrentMode =0; new CantSpawn =0; new GameMinutes =19; new GameSeconds =59; new GameTimer; new IsLogged[MAX_PLAYERS]; new WeaponLevel[MAX_PLAYERS]; new Kills[MAX_PLAYERS]; new Deaths[MAX_PLAYERS]; new Muted[MAX_PLAYERS]; new Warnings[MAX_PLAYERS]; new MiniGunKills[MAX_PLAYERS]; new KillStreak[MAX_PLAYERS]; new SpecTime[MAX_PLAYERS]; new SpawnArmor[MAX_PLAYERS]; new Admin[MAX_PLAYERS]; new Text:Textdraw1[MAX_PLAYERS]; new Text:Textdraw2,Text:Textdraw0; new Menu:PrizeMenu; new Weapon[17] = { 22, //Dual pistols 23, //Silenced Pistol 24, //Deagle 25, //Shotgun 27, //Combat 26, //Sawn 32, //Tec 9 28, //Uzi 29, //Mp5 33, //Rifle 30, //AK 31, //M4 34, //Sniper 16, //Grenade 18, //Cocktail 4, //Knife 38 //Minigun }; new Colors[10]= { 0x9595FFFF, 0x00F279FF, 0x35A5CAFF, 0xF4BA0BFF, 0xEDF20DFF, 0xF5800AFF, 0xE17777FF, 0xF18BF1FF, 0xA54BF5FF, 0x9DB649FF }; new Float:ModeOneSpawns[30][5] = { {2868.8455,857.6423,10.7500,156.4198}, {2881.6431,857.8389,10.7500,180.7396}, {2887.7654,865.1469,10.7500,181.6796}, {2889.6313,839.3175,10.7500,87.8471}, {2855.0078,857.3370,9.8134,180.7396}, {2841.8406,844.0111,10.7500,354.1595}, {2841.6091,856.4717,10.7578,183.2463}, {2822.7288,857.7284,10.7500,176.9796}, {2804.8403,856.9552,10.7500,181.3663}, {2786.4944,838.6228,10.7500,358.2329}, {2795.4404,858.8430,10.7578,180.1130}, {2800.1584,872.2941,10.7500,87.6788}, {2801.0793,890.4161,10.7578,98.0189}, {2817.9163,892.4055,9.8389,357.4379}, {2827.1399,892.2391,9.8250,359.6313}, {2855.4358,892.0141,9.8062,2.7646}, {2886.9866,889.2011,10.7578,358.3778}, {2885.5400,909.0891,10.7500,88.7870}, {2892.2437,914.3260,10.8984,96.9338}, {2886.3857,917.6217,10.7500,94.4271}, {2886.6755,922.3732,10.7500,89.5587}, {2886.6077,942.6301,10.7500,86.5937}, {2853.7637,945.2527,10.7500,173.5328}, {2846.1880,948.9348,10.7500,92.6921}, {2846.9646,965.8468,10.7500,77.8694}, {2787.8120,965.1090,10.7500,270.6437}, {2786.0281,962.3939,14.2559,266.7387}, {2796.3108,989.1851,10.7500,89.5587}, {2795.7461,1014.6691,10.7500,173.3644}, {2787.6284,1008.4048,10.7500,175.2444} }; new Float:ModeTwoSpawns[36][5] = { {1383.9604,2185.7610,11.0234,137.2283}, {1359.1348,2183.8911,11.0156,234.9892}, {1355.9463,2156.4919,11.0156,324.2900}, {1382.5735,2160.5447,11.0234,36.6707}, {1395.2374,2159.8896,9.7578,93.6980}, {1395.1614,2177.3032,9.7578,91.5046}, {1393.4335,2195.1882,11.0234,140.5300}, {1377.5297,2196.9299,9.7578,174.2253}, {1360.1039,2195.9141,9.7578,176.4187}, {1354.3848,2195.2251,11.0234,176.5637}, {1324.1288,2194.8164,11.0234,181.4321}, {1304.3392,2196.4160,11.0234,179.8654}, {1303.0316,2154.3992,11.0234,268.6121}, {1305.0566,2104.5461,11.0156,359.5521}, {1348.6730,2104.6260,11.0156,359.7930}, {1393.5704,2104.9370,11.0156,359.7930}, {1393.6859,2140.9851,11.0234,89.4071}, {1359.5442,2207.7637,17.2344,180.5155}, {1330.5021,2207.9463,17.2344,178.0813}, {1301.4852,2207.8237,17.2344,186.8548}, {1399.0642,2200.0571,15.9297,133.1783}, {1406.5208,2183.5852,17.2344,89.3112}, {1406.5752,2153.4153,17.2344,85.8645}, {1406.6150,2124.4009,17.2344,88.9979}, {1410.3383,2124.2454,12.0156,87.8896}, {1410.2003,2153.4260,12.0156,88.9979}, {1411.7147,2183.3552,12.0156,87.1179}, {1359.8030,2212.7842,12.0156,181.4322}, {1330.2648,2212.8843,12.0156,180.4922}, {1300.4966,2212.1453,12.0156,178.6121}, {1314.8237,2213.4412,18.9766,182.0588}, {1344.5253,2212.8845,18.9766,181.1188}, {1374.0377,2211.7827,18.5314,182.3722}, {1410.6438,2169.7065,18.5314,87.4312}, {1410.6947,2139.7854,18.5314,88.6846}, {1410.8324,2111.9446,18.5314,90.2513} }; new Float:ModeThreeSpawns[29][5] = { {105.0939,1900.9913,25.4985,86.4326}, {127.5178,1875.4213,17.8359,0.4336}, {139.9790,1864.8188,17.7505,264.4077}, {114.1990,1832.8400,17.6406,267.3727}, {113.4900,1814.4186,25.4985,264.2160}, {160.9695,1835.8633,17.6481,354.9386}, {166.5084,1850.0927,25.4985,268.2894}, {176.9861,1841.2455,17.6406,1.9770}, {209.9409,1834.7089,17.6406,0.4103}, {210.6214,1805.0287,17.6406,3.7120}, {211.5715,1809.9678,21.8672,359.6385}, {221.1439,1822.8473,17.6406,356.1919}, {250.4454,1833.1021,17.6406,358.0719}, {262.2354,1807.7170,25.4985,265.4460}, {279.3422,1835.4583,17.6481,0.0502}, {267.0904,1895.2994,25.4985,267.2792}, {223.7281,1886.4800,17.6406,1.6169}, {213.7761,1873.6516,17.6406,4.8952}, {213.9838,1881.9666,13.4019,358.9418}, {216.0334,1920.9247,17.6406,178.9418}, {197.2816,1922.5282,17.6406,176.1218}, {183.0919,1935.6461,17.8718,154.8874}, {232.6859,1934.6642,25.4985,269.4726}, {211.8152,1930.0742,23.2422,186.6069}, {162.9230,1932.8792,25.4985,85.6892}, {133.4883,1935.1809,19.2661,176.0751}, {114.5221,1935.7640,18.8916,171.8567}, {134.0925,1875.5911,22.4375,269.6177}, {144.6959,1852.5249,24.7726,273.7144} }; new Map[3][20]= { {"LV Train depot"}, {"LV Baseball Field"}, {"Area 69"} }; main() { print("\n---------------------------------------"); print("| Gun Game v1.0 |"); print("| Activated |"); print("---------------------------------------\n"); } public OnGameModeInit() { for(new i = 0; i < 299; i++) { if(IsValidSkin(i)) { AddPlayerClass(i,0.0,0.0,0.0,0.0,0,0,0,0,0,0); } } ShowPlayerMarkers(0); UsePlayerPedAnims(); GameTimer = SetTimer("GameTime",1000,1); PrizeMenu = CreateMenu("Redeemable prizes", 2, 50.0, 180.0, 200.0, 200.0); AddMenuItem(PrizeMenu, 0, "Minus 1 warning"); AddMenuItem(PrizeMenu, 1, "1,000 points"); AddMenuItem(PrizeMenu, 0, "Spawn armor"); AddMenuItem(PrizeMenu, 1, "15,000 points"); AddMenuItem(PrizeMenu, 0, "One match armor"); AddMenuItem(PrizeMenu, 1, "5,000 points"); AddMenuItem(PrizeMenu, 0, "Ammo - 500"); AddMenuItem(PrizeMenu, 1, "50 points"); AddMenuItem(PrizeMenu, 0, "Skip a level"); AddMenuItem(PrizeMenu, 1, "600 points"); Textdraw2 = TextDrawCreate(590.000000,412.000000,"~r~Top Score~n~~w~0"); TextDrawUseBox(Textdraw2,1); TextDrawBoxColor(Textdraw2,0x00000066); TextDrawTextSize(Textdraw2,0.000000,80.000000); TextDrawAlignment(Textdraw2,2); TextDrawBackgroundColor(Textdraw2,0x000000ff); TextDrawFont(Textdraw2,1); TextDrawLetterSize(Textdraw2,0.399999,1.500000); TextDrawColor(Textdraw2,0xffffffff); TextDrawSetOutline(Textdraw2,1); TextDrawSetProportional(Textdraw2,1); TextDrawSetShadow(Textdraw2,1); Textdraw0 = TextDrawCreate(86.000000,427.000000,"15:00"); TextDrawAlignment(Textdraw0,2); TextDrawBackgroundColor(Textdraw0,0x000000ff); TextDrawFont(Textdraw0,3); TextDrawLetterSize(Textdraw0,0.499999,2.000000); TextDrawColor(Textdraw0,0xffffffff); TextDrawSetOutline(Textdraw0,1); TextDrawSetProportional(Textdraw0,1); TextDrawSetShadow(Textdraw0,1); CreateObject(2929,215.853454,1875.336547,13.951337,0.000000,0.000000,179.613388); CreateObject(2929,211.808059,1875.290649,13.951243,0.000000,0.000000,181.624099); CreateObject(988,96.789436,1920.165771,17.338628,0.000000,0.000000,271.234802); CreateObject(987,2776.981689,901.178710,9.765661,0.000000,0.000000,89.843864); CreateObject(987,2777.026855,913.340148,9.765661,0.000000,0.000000,90.343864); CreateObject(1225,2840.541748,956.958374,10.138525,0.000000,0.000000,168.783798); CreateObject(1225,2814.960693,891.875427,10.132592,0.000000,0.000000,186.957321); CreateObject(1225,2801.379150,890.245666,10.264112,0.000000,0.000000,194.814102); CreateObject(1225,2816.755126,933.871337,10.374737,0.000000,0.000000,256.854705); CreateObject(1225,2796.448242,989.189514,10.225549,0.000000,0.000000,257.794677); CreateObject(1225,2868.435546,944.667663,10.156861,0.000000,0.000000,318.582000); CreateObject(1225,2847.875000,1007.451965,10.111249,0.000000,0.000000,304.336944); SetGameModeText("|GTA Gun Game|"); return 1; } public OnPlayerSpawn(playerid) { SetPlayerInterior(playerid,0); SetCameraBehindPlayer(playerid); SetPlayerColor(playerid,Colors[random(10)]); SetPlayerHealth(playerid,9999999.0); SetTimerEx("AfterSpawn",5000,0,"d",playerid); if(CurrentMode == 0) { new Spawn = random(sizeof(ModeOneSpawns)); SetPlayerPos(playerid,ModeOneSpawns[Spawn][0],ModeOneSpawns[Spawn][1],ModeOneSpawns[Spawn][2]); SetPlayerFacingAngle(playerid,ModeOneSpawns[Spawn][4]); SetPlayerWorldBounds(playerid,2894.7029,2777.4805,1022.9144,833.630); return 1; } else if(CurrentMode == 1) { new Spawn = random(sizeof(ModeTwoSpawns)); SetPlayerPos(playerid,ModeTwoSpawns[Spawn][0],ModeTwoSpawns[Spawn][1],ModeTwoSpawns[Spawn][2]); SetPlayerFacingAngle(playerid,ModeTwoSpawns[Spawn][4]); SetPlayerWorldBounds(playerid,1417.6226, 1302.4888, 2216.7000, 2104.6328); return 1; } else if(CurrentMode == 2) { new Spawn = random(sizeof(ModeThreeSpawns)); SetPlayerPos(playerid,ModeThreeSpawns[Spawn][0],ModeThreeSpawns[Spawn][1],ModeThreeSpawns[Spawn][2]); SetPlayerFacingAngle(playerid,ModeThreeSpawns[Spawn][4]); SetPlayerWorldBounds(playerid,285.4742, 97.0450, 1940.4082, 1799.2507); return 1; } return 1; } public AfterSpawn(playerid) { SetPlayerHealth(playerid,100.0); GivePlayerWeapon(playerid,Weapon[WeaponLevel[playerid]],500); return 1; } public OnPlayerConnect(playerid) { new Stringy[128]; format(Stringy,sizeof(Stringy),"%s(%d) has joined the server.",ReturnPlayerName(playerid),playerid); SendClientMessageToAll(DARKGREY,Stringy); SendClientMessage(playerid,DULLBLUE,"Welcome to the Gun Game server."); SendClientMessage(playerid,RED,"Read /rules and /commands for the rules and commands."); SendClientMessage(playerid,RED,"See /help if you have any trouble."); if(udb_Exists(ReturnPlayerName(playerid))) { SendClientMessage(playerid,LIMEGREEN,"You have a registered account. Please use /login [password]"); } else { SendClientMessage(playerid,LIMEGREEN,"You currently do not have a registered account. Please use /register [password]"); } SetPlayerColor(playerid,DARKGREY); Muted[playerid]=0; Warnings[playerid]=0; WeaponLevel[playerid]=0; MiniGunKills[playerid]=0; Kills[playerid]=0; Deaths[playerid]=0; IsLogged[playerid] = 0; Textdraw1[playerid] = TextDrawCreate(493.000000,412.000000,"~r~Your Score~n~~w~0"); TextDrawUseBox(Textdraw1[playerid],1); TextDrawBoxColor(Textdraw1[playerid],0x00000066); TextDrawTextSize(Textdraw1[playerid],0.000000,88.000000); TextDrawAlignment(Textdraw1[playerid],2); TextDrawBackgroundColor(Textdraw1[playerid],0x000000ff); TextDrawFont(Textdraw1[playerid],1); TextDrawLetterSize(Textdraw1[playerid],0.400000,1.500000); TextDrawColor(Textdraw1[playerid],0xffffffff); TextDrawSetOutline(Textdraw1[playerid],1); TextDrawSetProportional(Textdraw1[playerid],1); TextDrawSetShadow(Textdraw1[playerid],1); TextDrawShowForPlayer(playerid,Textdraw0); TextDrawShowForPlayer(playerid,Textdraw1[playerid]); TextDrawShowForPlayer(playerid,Textdraw2); return 1; } public OnPlayerText(playerid,text[]) { if(Muted[playerid]) { SendClientMessage(playerid,ERROR,"You are muted. You may not speak."); return 0; } return 1; } public OnPlayerDeath(playerid,killerid,reason) { Deaths[playerid]++; KillStreak[playerid]=0; ResetPlayerWeapons(playerid); SendDeathMessage(killerid,playerid,reason); SetPlayerColor(playerid,DARKGREY); SetPlayerWorldBounds(playerid, 20000.0000,-20000.0000,20000.0000,-20000.0000); if((reason != 255) || (killerid != 255)) { new String[24]; Kills[killerid]++; KillStreak[killerid]++; SetPlayerScore(killerid,GetPlayerScore(killerid)+10); new String2[128]; format(String2,sizeof(String2),"~r~Top Score~n~~w~%d",ReturnHighScore()); TextDrawSetString(Textdraw2,String2); format(String,sizeof(String),"~r~Your Score~n~~w~%d",GetPlayerScore(killerid)); TextDrawSetString(Textdraw1[killerid],String); PlayerPlaySound2(killerid,1056); TogglePlayerSpectating(playerid,1); PlayerSpectatePlayer(playerid,killerid,SPECTATE_MODE_NORMAL); SetTimerEx("StopSpectate",1000,0,"i",playerid); SpecTime[playerid] = 8; if(reason==38) { MiniGunKills[killerid]++; if(MiniGunKills[killerid]==10) { new Stringy[128]; format(Stringy,sizeof(Stringy),"~r~%s(%d) ~y~has won the game!",ReturnPlayerName(killerid),killerid); GameTextForAll(Stringy,4,3000); MiniGunKills[killerid]=0; SetTimer("Restart",8000,0); SetPlayerScore(killerid,GetPlayerScore(killerid)+500); SendClientMessage(killerid,ORANGE,"You have been rewarded with 500 points."); CantSpawn=1; CurrentMode++; if(CurrentMode==3) { CurrentMode=0; } for(new i=0; i= 1) { new String[128]; format(String,sizeof(String),"~y~Respawning in ~n~~w~%d",SpecTime[playerid]); GameTextForPlayer(playerid,String,2000,3); SetTimerEx("StopSpectate",1000,0,"i",playerid); if(SpecTime[playerid] <= 3) { PlayerPlaySound2(playerid,1056); } SpecTime[playerid]--; return 1; } else { TogglePlayerSpectating(playerid,0); GameTextForPlayer(playerid,"~r~Respawning...",1000,3); PlayerPlaySound2(playerid,1057); return 1; } } public OnPlayerDisconnect(playerid,reason) { new Stringy[128]; switch(reason) { case 0: format(Stringy, sizeof(Stringy), "%s has left the server (Timeout)", ReturnPlayerName(playerid)); case 1: format(Stringy, sizeof(Stringy), "%s has left the server (Leaving)", ReturnPlayerName(playerid)); case 2: format(Stringy, sizeof(Stringy), "%s has left the server (Kicked)", ReturnPlayerName(playerid)); } SendClientMessageToAll(DARKGREY, Stringy); new String2[128]; format(String2,sizeof(String2),"~r~Top Score~n~~w~%d",ReturnHighScore()); TextDrawSetString(Textdraw2,String2); Muted[playerid]=0; Warnings[playerid]=0; WeaponLevel[playerid]=0; MiniGunKills[playerid]=0; Kills[playerid]=0; Deaths[playerid]=0; dUserSetINT(ReturnPlayerName(playerid)).("Admin",Admin[playerid]); dUserSetINT(ReturnPlayerName(playerid)).("Warnings",Warnings[playerid]); dUserSetINT(ReturnPlayerName(playerid)).("Score",GetPlayerScore(playerid)); dUserSetINT(ReturnPlayerName(playerid)).("Kills",Kills[playerid] + dUserINT(ReturnPlayerName(playerid)).("Kills")); dUserSetINT(ReturnPlayerName(playerid)).("Deaths",Deaths[playerid] + dUserINT(ReturnPlayerName(playerid)).("Deaths")); TextDrawDestroy(Textdraw1[playerid]); return 1; } public OnPlayerRequestSpawn(playerid) { if(!IsLogged[playerid]) { SendClientMessage(playerid,ERROR,"You must be logged in to spawn."); return 0; } if(CantSpawn) { SendClientMessage(playerid,ERROR,"A new round is about to begin, please wait."); return 0; } return 1; } public OnPlayerRequestClass(playerid, classid) { SetPlayerPos(playerid,297.5041,-81.8028,1002.5341); SetPlayerFacingAngle(playerid,346.8848); SetPlayerCameraPos(playerid,297.504089,-80.802795,1002.534057); SetPlayerCameraLookAt(playerid,296.504089,-94.802795,1006.534057); ApplyAnimation(playerid,"DEALER","DEALER_IDLE",4.1,0,1,1,1,1); SetPlayerInterior(playerid,4); return 1; } public Restart() { CantSpawn=0; for(new i=0; i ReturnHighScore()) { leader = i; } } } CantSpawn=1; CurrentMode++; if(CurrentMode==3) { CurrentMode=0; } TextDrawSetString(Textdraw0,"00:00"); format(String,sizeof(String),"%s(%d) is the winner with %d kills and %d points and has received 500 bonus points.",ReturnPlayerName(leader),leader,Kills[leader],GetPlayerScore(leader)); SetPlayerScore(leader,GetPlayerScore(leader)+500); SendClientMessage(leader,ORANGE,"You have been rewarded with 500 points."); SendClientMessageToAll(RED,String); GameTextForAll("Time Up!",4000,4); for(new i=0; i Kills[leader]) { leader = i; } } } new Stringy[128]; format(Stringy,sizeof(Stringy),"%s(%d) is in the lead with %d points and %d kills.",ReturnPlayerName(leader),leader,GetPlayerScore(leader),Kills[leader]); SendClientMessage(playerid,BLUE,Stringy); return 1; #pragma unused params } dcmd_map(playerid,params[]) { new Stringy[128],TempMode=CurrentMode+1; if(TempMode==3) { TempMode = 0; } format(Stringy,sizeof(Stringy),"The current map is %s and the next map will be %s.",Map[CurrentMode][0],Map[TempMode][0]); SendClientMessage(playerid,BLUE,Stringy); return 1; #pragma unused params } dcmd_redeemprize(playerid,params[]) { TogglePlayerControllable(playerid,0); ShowMenuForPlayer(PrizeMenu,playerid); #pragma unused params return 1; } dcmd_warnings(playerid,params[]) { new string[128]; format(string,sizeof(string),"You currently have a total of %d warning(s).",Warnings[playerid]); SendClientMessage(playerid,BLUE,string); #pragma unused params return 1; } dcmd_register(playerid,params[]) { if (IsLogged[playerid]) { SendClientMessage(playerid,ERROR,"You have already registered and logged in."); return 1; } if (udb_Exists(ReturnPlayerName(playerid))) { SendClientMessage(playerid,ERROR,"Account already exists, please use /login [password]"); return 1; } if(!strlen(params)) { SendClientMessage(playerid,ERROR,"Usage: /register [password]"); return 1; } if (udb_Create(ReturnPlayerName(playerid),params)) { SendClientMessage(playerid,LIMEGREEN,"Your account has successfully been created and logged into."); IsLogged[playerid] = 1; return 1; } return true; } dcmd_login(playerid,params[]) { if(IsLogged[playerid]) { SendClientMessage(playerid,ERROR,"You have already logged in."); return 1; } if (!udb_Exists(ReturnPlayerName(playerid))) { SendClientMessage(playerid,ERROR,"This account has not yet been registered."); return 1; } if (!strlen(params)) { SendClientMessage(playerid,ERROR,"Usage: /login [password]"); return 1; } if(!udb_CheckLogin(ReturnPlayerName(playerid),params)) { SendClientMessage(playerid,ERROR,"Incorrect password."); return 1; } IsLogged[playerid] = 1; SendClientMessage(playerid,LIMEGREEN,"You have successfully logged in."); Warnings[playerid] = dUserINT(ReturnPlayerName(playerid)).("Warnings"); Admin[playerid] = dUserINT(ReturnPlayerName(playerid)).("Admin"); SetPlayerScore(playerid,dUserINT(ReturnPlayerName(playerid)).("Score")); return 1; } /////////////////////////////////Functions/////////////////////////////////// stock PlayerPlaySound2(playerid,soundid) { new Float:X,Float:Y,Float:Z; GetPlayerPos(playerid,X,Y,Z); PlayerPlaySound(playerid,soundid,X,Y,Z); } stock ReturnPlayerName(playerid) //By Alex "Y_Less" Cole { new pname[MAX_PLAYER_NAME]; pname="Invalid PlayerID"; if(IsPlayerConnected(playerid)) { GetPlayerName(playerid, pname, sizeof (pname)); } return pname; } stock sscanf(string[], format[], {Float,_}:...) { if (!strlen(string)) { return format[0]; } new formatPos = 0, stringPos = 0, paramPos = 2, paramCount = numargs(), delim = ' '; while (paramPos < paramCount && string[stringPos]) { switch (format[formatPos++]) { case '\0': { return 0; } case 'i', 'd': { new neg = 1, num = 0, ch = string[stringPos]; if (ch == '-') { neg = -1; ch = string[++stringPos]; } do { stringPos++; if (ch >= '0' && ch <= '9') { num = (num * 10) + (ch - '0'); } else { return -1; } } while ((ch = string[stringPos]) > ' ' && ch != delim); setarg(paramPos, 0, num * neg); } case 'h', 'x': { new ch, num = 0; while ((ch = string[stringPos]) > ' ' && ch != delim) { switch (ch) { case 'x', 'X': { num = 0; continue; } case '0' .. '9': { num = (num << 4) | (ch - '0'); } case 'a' .. 'f': { num = (num << 4) | (ch - ('a' - 10)); } case 'A' .. 'F': { num = (num << 4) | (ch - ('A' - 10)); } default: { return -1; } } } setarg(paramPos, 0, num); } case 'c': { setarg(paramPos, 0, string[stringPos++]); } case 'f': { setarg(paramPos, 0, _:floatstr(string[stringPos])); } case 'p': { delim = format[formatPos++]; continue; } case 's', 'z': { new i = 0, ch; if (format[formatPos]) { while ((ch = string[stringPos++]) && ch != delim) { setarg(paramPos, i++, ch); } if (!i) { return -1; } } else { while ((ch = string[stringPos++])) { setarg(paramPos, i++, ch); } } stringPos--; setarg(paramPos, i, '\0'); } default: { continue; } } while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ') { stringPos++; } while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' ')) { stringPos++; } paramPos++; } while (format[formatPos] == 'z') formatPos++; if (format[formatPos] > ' ') return format[formatPos]; return 0; } IsValidSkin(skinid) { #define MAX_BAD_SKINS 22 new badSkins[MAX_BAD_SKINS] = { 3, 4, 5, 6, 8, 42, 65, 74, 86, 119, 149, 208, 265, 266, 267, 268, 269, 270, 271, 272, 273, 289 }; if (skinid < 0 || skinid > 299) return false; for (new i = 0; i < MAX_BAD_SKINS; i++) { if (skinid == badSkins[i]) return false; } #undef MAX_BAD_SKINS return 1; } stock ReturnHighScore() { new highscore = 0; for(new i=0; i= highscore) { highscore = Score; } } return highscore; }