Is there any problem in this code? This plugin saves frags and deaths but resets the score kind a 24 or 25 later
How to make it save forever? Uh and someone add cvar admins reset all score? Users can say /reset to reset they're score will be nice 2
PHP Code:
new PLUGINNAME[] = "rememberthescore"
new VERSION[] = "0.5"
new AUTHOR[] = "JGHG"
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <cstrike>
#include <csstats>
// Globals below
new gmsgScoreInfo
new bool:reread = false
new playersFrags[33]
new playersDeaths[33]
// Globals above
public client_disconnect(id) {
storeFrags(id)
storeDeaths(id)
new seconds = get_cvar_num("rememberthefrags_resetseconds")
if (seconds > 0) {
new key[40] = "frags"
setKeyString(id, key)
set_task(float(seconds), "resetuserstats", 0, key, strlen(key))
key = "death"
setKeyString(id, key)
set_task(float(seconds), "resetuserstats", 0, key, strlen(key))
}
}
public resetuserstats(key[]) {
//server_print("Will reset this key: ^"%s^"", key)
if (!vaultdata_exists(key))
return
if (!remove_vaultdata(key))
server_print("[%] Error - Key for %s exists, but couldn't be removed!", PLUGINNAME, key)
}
public client_putinserver(id) {
// Restore frags n deaths from file.
new idd[1]
idd[0] = id
set_task(1.0,"delayedrestore",0,idd,1)
return PLUGIN_CONTINUE
}
public delayedrestore(idd[]) {
restoreVaultData(idd[0])
}
/*
public restoreme(id,level,cid) {
if (!cmd_access(id,level,cid,1)) {
return PLUGIN_HANDLED
}
restoreVaultData(id)
return PLUGIN_HANDLED
}
*/
public saveme(id,level,cid) {
/*
if (!cmd_access(id,level,cid,1)) {
return PLUGIN_HANDLED
}
*/
storeFrags(id)
storeDeaths(id)
return PLUGIN_HANDLED
}
restoreVaultData(id) {
new keyString[40] = "frags", frags, deaths
setKeyString(id,keyString)
if (vaultdata_exists(keyString)) {
frags = get_vaultdata(keyString)
set_user_frags(id,frags)
}
keyString = "death"
setKeyString(id,keyString)
if (vaultdata_exists(keyString)) {
deaths = get_vaultdata(keyString)
cs_set_user_deaths(id, deaths)
}
if (!frags)
frags = get_user_frags(id)
if (!deaths)
deaths = get_user_deaths(id)
// With the below message, we can update the scores shown without having to wait
// for next round or when id dies/shoots someone or something like that.
sendScoreInfo(id,frags,deaths,get_user_team(id))
}
sendScoreInfo(id,frags,deaths,team) {
message_begin(MSG_ALL,gmsgScoreInfo)
write_byte(id)
write_short(frags)
write_short(deaths)
write_short(0)
write_short(team)
message_end()
}
setKeyString(id,keyString[40]) {
if (is_user_bot(id)) {
new name[32]
get_user_name(id,name,31)
new spaces = charOccurances(name," ")
for (new i = 0;i < spaces;i++) {
replace(name,31," ","_")
}
copy(keyString[5],34,name)
}
else {
new authidString[32]
get_user_authid(id, authidString, 31)
copy(keyString[5], 34, authidString)
}
}
storeFrags(id) {
new keyString[40] = "frags"
setKeyString(id,keyString)
//client_print(0,print_chat,"fragKeyString after copy is '%s'.",fragKeyString)
new fragsString[10]
num_to_str(get_user_frags(id),fragsString,9)
set_vaultdata(keyString,fragsString)
//client_print(0,print_chat,"Stored %s to %s.",fragsString,keyString)
}
stock charOccurances(string[],matchchar[]) {
if (strlen(matchchar) != 1)
return -1
new occurances
new len = strlen(string)
for (new i = 0;i < len;i++) {
if (string[i] == matchchar[0]) {
occurances++
}
}
return occurances
}
storeDeaths(id) {
new keyString[40] = "death"
setKeyString(id,keyString)
//client_print(0,print_chat,"keyString after copy is '%s'.",keyString)
new deathString[10]
num_to_str(get_user_deaths(id),deathString,9)
set_vaultdata(keyString,deathString)
//client_print(0,print_chat,"Stored %s to %s.",deathString,keyString)
}
public restarting_event() {
reread = true
// Will need to do a quick remembering of current frags here...
// Restore these values at next newround_event. Only restore
// if these are larger than the values in the vault. If not,
// use those larger values.
new players[32], playersFound
get_players(players,playersFound)
for (new i = 0;i < playersFound;i++) {
playersFrags[players[i]] = get_user_frags(players[i])
playersDeaths[players[i]] = get_user_deaths(players[i])
}
}
public commencing_event() {
reread = true
// Will need to do a quick remembering of current frags here...
// Restore these values at next newround_event. Only restore
// if these are larger than the values in the vault. If not,
// use those larger values.
new players[32], playersFound
get_players(players,playersFound)
for (new i = 0;i < playersFound;i++) {
playersFrags[players[i]] = get_user_frags(players[i])
playersDeaths[players[i]] = get_user_deaths(players[i])
}
}
public instantReread() {
if (reread) {
reread = false
reread_function()
}
}
stock getVaultFrags(id) {
new keyString[40] = "frags"
setKeyString(id,keyString)
if (vaultdata_exists(keyString)) {
return get_vaultdata(keyString)
}
else {
return playersFrags[id]
}
return 0
}
stock getVaultDeaths(id) {
new keyString[40] = "death"
setKeyString(id,keyString)
if (vaultdata_exists(keyString) && get_vaultdata(keyString) > playersDeaths[id]) {
return get_vaultdata(keyString)
}
else {
return playersDeaths[id]
}
return 0
}
public reread_function() {
new players[32], playersFound, keyString[40], vaultFrags, vaultDeaths, name[32]
get_players(players,playersFound)
for (new i = 0;i < playersFound;i++) {
get_user_name(players[i],name,31)
keyString = "frags"
setKeyString(players[i],keyString)
if (!vaultdata_exists(keyString)) {
//client_print(0,print_chat,"%s has no previous frags stored, restoring %d from variable.",name,playersFrags[players[i]])
set_user_frags(players[i],playersFrags[players[i]])
vaultDeaths = getVaultDeaths(players[i])
cs_set_user_deaths(players[i],vaultDeaths)
sendScoreInfo(players[i],playersFrags[players[i]],vaultDeaths,get_user_team(players[i]))
}
else {
// Compare values, set the biggest one.
vaultFrags = get_vaultdata(keyString)
if (vaultFrags >= playersFrags[players[i]]) {
set_user_frags(players[i],vaultFrags)
vaultDeaths = getVaultDeaths(players[i])
cs_set_user_deaths(players[i],vaultDeaths)
sendScoreInfo(players[i],vaultFrags,vaultDeaths,get_user_team(players[i]))
//client_print(0,print_chat,"%s has larger value in variable, %d to %d.",name,vaultFrags,playersFrags[players[i]])
}
else {
set_user_frags(players[i],playersFrags[players[i]])
vaultDeaths = getVaultDeaths(players[i])
cs_set_user_deaths(players[i],vaultDeaths)
sendScoreInfo(players[i],playersFrags[players[i]],vaultDeaths,get_user_team(players[i]))
//client_print(0,print_chat,"%s has larger value in vault, %d to %d.",name,playersFrags[players[i]],vaultFrags)
}
}
}
}
/*
public setdatafromstats(id,level,cid) {
if (!cmd_access(id,level,cid,1)) {
return PLUGIN_HANDLED
}
new stats[8], bodyHits[8]
get_user_wstats(id,0,stats,bodyHits)
set_user_frags(id,stats[0])
set_user_deaths_cs(id,stats[1])
console_print(id,"0:%d, 1:%d, 2:%d, 3:%d, 4:%d, 5:%d, 6:%d, 7:%d",stats[0],stats[1],stats[2],stats[3],stats[4],stats[5],stats[6],stats[7])
sendScoreInfo(id,stats[0],stats[1],get_user_team(id))
return PLUGIN_HANDLED
}
*/
resetstats() {
new vaultpath[128]
get_localinfo("amxx_vault", vaultpath, sizeof vaultpath - 1)
if (!file_exists(vaultpath))
return
new line, textline[128], linelength
new const LEN = sizeof textline - 1
new key[64]
new const KEYLEN = sizeof key - 1
new bool:removed, keysremoved = 0
do {
removed = false
line = 0
while ((line = read_file(vaultpath, line, textline, LEN, linelength))) {
if (linelength > 5 && equal(textline, "frags", 5) || equal(textline, "death", 5))
//server_print("Line: %d, text: %s", line, textline)
if (parse(textline, key, KEYLEN)) {
//server_print("Key: %s", key)
if (!remove_vaultdata(key))
server_print("[%s] Couldn't remove stats key: %s", key)
else {
removed = true
keysremoved++
}
}
else {
//server_print("Couldn't parse: %s", textline)
}
}
}
while (removed)
server_print("[%s] Removed %d stats keys from vault.", PLUGINNAME, keysremoved)
}
public plugin_init() {
register_plugin(PLUGINNAME, VERSION, AUTHOR)
//register_clcmd("0restorevault","restoreme",ADMIN_CFG,": restores your frags from vault.")
//register_clcmd("0restorestats","setdatafromstats",ADMIN_CFG,": restores your frags from stats.")
//register_clcmd("amx_storefrags","saveme",0,"- stores your frags and deaths.")
register_event("TextMsg","commencing_event","a","2=#Game_Commencing")
register_event("TextMsg","restarting_event","a","2=#Game_will_restart_in")
//register_event("ResetHUD","newround_event","b")
register_event("SendAudio","instantReread","b","2=%!MRAD_GO","2=%!MRAD_MOVEOUT","2=%!MRAD_LETSGO","2=%!MRAD_LOCKNLOAD")
gmsgScoreInfo = get_user_msgid("ScoreInfo")
register_cvar("rememberthefrags_resetseconds", "0")
if (get_cvar_num("rememberthefrags_resetseconds"))
resetstats()
}