/* ========================================== SSU: Stats Saving Utility v1.1 Coded by Scarface ========================================== */ /* ===================================================== Special Thanks To: BetaMaster - Testing, Notes DracoBlue - DUDB & His Contribution to the SA-MP Com. ===================================================== */ #include #include #define COLOR_YELLOW 0xFFFF00AA #define COLOR_WHITE 0xFFFFFFAA new DeathCount[MAX_PLAYERS]; new KillCount[MAX_PLAYERS]; new gString[255]; new sType, sMoney, sDeaths, sScore; // Settings /* ============ Main ============ */ public OnFilterScriptInit() { print("\n SSU v1.1 by Scarface [Lethal Developments]\n"); print(" Loading Configuration...\n"); rConfig(); print(" Configuration: "); if(sType == 1){ print(" |Save-Type [Automatic]"); }else if(sType==2){ print(" |Save-Type [OnCommand]"); } if(sMoney > 0){ print(" |saveMoney [Activated]"); }else{ print(" |saveMoney [Disabled]"); } if(sScore > 0){ print(" |saveScore [Activated]"); }else{ print(" |saveScore [Disabled]"); } if(sDeaths > 0){ print(" |saveDeaths [Activated]"); }else{ print(" |saveDeaths [Disabled]"); } return 1; } public OnPlayerConnect(playerid) { if(fexist(encode(PlayerName(playerid)))) { SendClientMessage(playerid, COLOR_YELLOW, " Stats Restored!"); new File:fhandle; new cname[256]; new temp[256]; new value[256]; fhandle = fopen(encode(PlayerName(playerid)),io_readwrite); while(fread(fhandle,temp,sizeof(temp),false)) { cname = strtok2(temp,0); value = strtok2(temp,(strlen(cname)+1)); if(sMoney > 0){ if(strcmp(cname,"Cash",true) == 0) GivePlayerMoney(playerid,strval(value));} if(sDeaths > 0){ if(strcmp(cname,"Score",true) == 0) KillCount[playerid] = strval(value);} if(sScore > 0){ if(strcmp(cname,"DeathCount",true) == 0) DeathCount[playerid] = strval(value);} } fclose(fhandle); } return 1; } public PlayerName(playerid) { new pName[32]; GetPlayerName(playerid, pName, sizeof(pName)); return pName; } public OnPlayerDisconnect(playerid) { DeathCount[playerid] = 0; KillCount[playerid] = 0; if(sType == 1) { sStats(playerid); } return 1; } public OnPlayerDeath(playerid, killerid, reason) { DeathCount[playerid]++; KillCount[killerid]++; } /* ============ Body ============ */ sStats(playerid) { new File:fhandle; new temp[256]; if(fexist(encode(PlayerName(playerid)))){ fremove(encode(PlayerName(playerid)));} // printf("Save Successful(%s)",PlayerName(playerid)); fhandle = fopen(encode(PlayerName(playerid)),io_write); if(sMoney > 0){ format(temp,sizeof(temp),"Cash %d\r\n", GetPlayerMoney(playerid)); fwrite(fhandle,temp);} if(sScore > 0){ format(temp,sizeof(temp),"Score %d\r\n", KillCount[playerid]); fwrite(fhandle,temp);} if(sDeaths > 0){ format(temp,sizeof(temp),"DeathCount %d\r\n", DeathCount[playerid]); fwrite(fhandle,temp);} fclose(fhandle); return 1; } /* ============ Commands ============ */ public OnPlayerCommandText(playerid, cmdtext[]) { new tmp[256], string[256], cmd[256]; new idplayer, idx; cmd = strtok(cmdtext, idx); if(strcmp(cmd, "/sstats", true) == 0) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_WHITE, "USAGE: /sstats [PlayerID]"); return 1; } idplayer = strval(tmp); if(IsPlayerConnected(idplayer)) { format(string, sizeof(string), "%s's Stats:", PlayerName(idplayer)); SendClientMessage(playerid, COLOR_YELLOW, string); format(string, sizeof(string), "Cash: $%d Kills: %d Deaths: %d Ratio: %0.2f", GetPlayerMoney(idplayer), KillCount[idplayer], DeathCount[idplayer], Float:KillCount[idplayer]/Float:DeathCount[idplayer]); SendClientMessage(playerid, COLOR_YELLOW, string); return 1; } else { SendClientMessage(playerid, COLOR_WHITE, "Player Not Connected!"); return 1; } } else if(strcmp(cmdtext, "/ssave", true) == 0) { if(sType != 2){ SendClientMessage(playerid, COLOR_WHITE, "SERVER: Unknown command."); return 1;} sStats(playerid); SendClientMessage(playerid, COLOR_YELLOW, " Stats Saved!"); return 1; } else if(strcmp(cmdtext, "/statshelp", true) == 0) { SendClientMessage(playerid, COLOR_YELLOW,"SSU: Stats Saving Utility v1.1 by Scarface"); if(sType == 1){ SendClientMessage(playerid, COLOR_YELLOW,"Type: Automatic Save"); }else if(sType == 2) { SendClientMessage(playerid, COLOR_YELLOW,"Type: OnCommand");} SendClientMessage(playerid, COLOR_YELLOW,"Commands:"); if(sType == 2){SendClientMessage(playerid, COLOR_YELLOW,"/ssave - Saves Your Stats");} SendClientMessage(playerid, COLOR_YELLOW,"/mystats - Displays your stats publicly"); SendClientMessage(playerid, COLOR_YELLOW,"/sstats [PlayerID] - Displays Players Stats"); return 1; } else if(strcmp(cmdtext, "/mystats", true) == 0) { format(string, sizeof(string), "%s's Stats:", PlayerName(playerid)); SendClientMessageToAll(COLOR_YELLOW, string); format(string, sizeof(string), "Cash: $%d Kills: %d Deaths: %d Ratio: %0.2f", GetPlayerMoney(playerid), KillCount[playerid], DeathCount[playerid], (Float:KillCount[playerid]/Float:DeathCount[playerid])); SendClientMessageToAll(COLOR_YELLOW, string); return 1; } return 0; } /* ============ Config ============ */ rConfig() { new File:fhandle; new cname[256]; new temp[256]; new value[256]; fhandle = fopen("ssuconfig.txt",io_readwrite); while(fread(fhandle,temp,sizeof(temp),false)) { cname = strtok2(temp,0); value = strtok2(temp,(strlen(cname)+1)); if(strcmp(cname,"Save-Type",true) == 0) sType = strval(value); else if(strcmp(cname,"saveMoney",true) == 0) sMoney = strval(value); else if(strcmp(cname,"saveScore",true) == 0) sScore = strval(value); else if(strcmp(cname,"saveDeaths",true) == 0) sDeaths = strval(value); } fclose(fhandle); return 1; } /* ======================== String Defines ======================== */ strtok2(const string[],valve) { new index=valve; new length = strlen(string); while ((index < length) && (string[index] <= ' ')) { index++; } new offset = index; new result[20]; while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1))) { result[index - offset] = string[index]; index++; } result[index - offset] = EOS; return result; } public encode(nickname[]) { // Based on DracoBlue's udb_encode() new tmp[MAX_STRING]; set(tmp,nickname); tmp=strreplace("_"," 00",tmp); tmp=strreplace(";"," 01",tmp); tmp=strreplace("!"," 02",tmp); tmp=strreplace("/"," 03",tmp); tmp=strreplace("\\"," 04",tmp); tmp=strreplace("["," 05",tmp); tmp=strreplace("]"," 06",tmp); tmp=strreplace("?"," 07",tmp); tmp=strreplace("."," 08",tmp); tmp=strreplace("*"," 09",tmp); tmp=strreplace("<"," 10",tmp); tmp=strreplace(">"," 11",tmp); tmp=strreplace("{"," 12",tmp); tmp=strreplace("}"," 13",tmp); format(gString,sizeof(gString),"stats-%s",tmp); return gString; }