|
New Member
Join Date: Mar 2007
Location: Germany
|

03-10-2007
, 18:03
Re: Prokreedz edit top10 problem
|
#4
|
hi
didnt test it that much, so its not gueranteed that its bugfree (if you find some, pls post theme here).
here it is:
replace your whole topten_update function with this:
PHP Code:
getTopTenPlace(id) { new currentMap[32]; get_mapname(currentMap, 32); new topTenVault[64]; format(topTenVault, 64, "pk_%s", currentMap); new kzTime; kzTime = get_systime() - timer_time[id-1]; new vault = nvault_open(topTenVault); new vaultKey[8]; new vaultReturn[128]; new arg1[32], arg2[8]; new ret; if(vault != INVALID_HANDLE) { for(new i = 1; i <= 10; i++) { format(vaultKey, 8, "%d", i); nvault_get(vault, vaultKey, vaultReturn, 128); if(parse(vaultReturn, arg1, 32, arg2, 8) != 0) { if(kzTime < str_to_num(arg2)) { ret = i; break; } else { ret = 0; } } else { ret = i; break; } } } nvault_close(vault); return ret; }
// ==================
isPlayerInTopTen(id) {
new userName[32]; get_user_name(id, userName, 32);
new currentMap[32]; get_mapname(currentMap, 32); new topTenVault[64]; format(topTenVault, 64, "pk_%s", currentMap); new vault = nvault_open(topTenVault); new vaultKey[8]; new vaultReturn[128]; new arg1[32], arg2[8]; new ret; if(vault != INVALID_HANDLE) { for(new i = 1; i <= 10; i++) { format(vaultKey, 8, "%d", i); nvault_get(vault, vaultKey, vaultReturn, 128); if(parse(vaultReturn, arg1, 32, arg2, 8) != 0 && equal(userName, arg1)) { ret = i; break; } else { ret = 0; } } } nvault_close(vault); return ret; }
// ==================
showTime(id, newPlace) {
new userName[32]; get_user_name(id, userName, 32); new kzTime; kzTime = get_systime() - timer_time[id-1]; new minutes, seconds if((kzTime / 60.0) >= 1) {
minutes = floatround(kzTime / 60.0,floatround_floor); kzTime -= (floatround(kzTime/ 60.0,floatround_floor) * 60); seconds = kzTime; } else { minutes = 0; seconds = kzTime; }
set_hudmessage(255, 255, 255, -1.0, -1.0); if(newPlace == 1) { show_hudmessage(0, "%s finished the map in %d min %d sec and established a new record", userName, minutes, seconds); } else if(newPlace == 0) { show_hudmessage(0, "%s finished the map in %d min %d sec", userName, minutes, seconds); } else { show_hudmessage(0, "%s finished the map in %d min %d sec and established a new Top10 time", userName, minutes, seconds); }
}
// ==================
public topten_update(id) { new newPlace = getTopTenPlace(id); new oldPlace = isPlayerInTopTen(id); new userName[32]; get_user_name(id, userName, 32);
new currentMap[32]; get_mapname(currentMap, 32); new kzTime; kzTime = get_systime() - timer_time[id-1]; new vaultEntry[128]; format(vaultEntry, 128, "^"%s^" ^"%d^" ^"%d^"", userName, kzTime, checkpointnum[id-1]); new topTenVault[64]; format(topTenVault, 64, "pk_%s", currentMap); new vault = nvault_open(topTenVault); if(oldPlace > 0) { if(newPlace > 0 ) { new key[8]; if(newPlace < oldPlace) { format(key, 8, "%d", oldPlace); nvault_remove(vault, key); for(new i = oldPlace; i > 10; i++) { new temp[128], tempKey[8] format(tempKey,8,"%d",i+1) nvault_get(vault,tempKey,temp,128) if(!equal(temp,"")) { format(tempKey,8,"%d",i) nvault_pset(vault,tempKey,temp) } } for(new i = 10; i > newPlace; i--) { new temp[128], tempKey[8] format(tempKey,8,"%d",i-1) nvault_get(vault,tempKey,temp,128) if(!equal(temp,"")) { format(tempKey,8,"%d",i) nvault_pset(vault,tempKey,temp) } } format(key, 8, "%d", newPlace); nvault_pset(vault, key, vaultEntry); } else if(newPlace == oldPlace) { format(key, 8, "%d", oldPlace); nvault_remove(vault, key); format(key, 8, "%d", newPlace); nvault_pset(vault, key, vaultEntry); } showTime(id, newPlace); } } else { if(newPlace > 0) { for(new i = 10; i > newPlace; i--) { new temp[128], tempKey[8] format(tempKey,8,"%d",i-1) nvault_get(vault,tempKey,temp,128) if(!equal(temp,"")) { format(tempKey,8,"%d",i) nvault_pset(vault,tempKey,temp) } } new key[8];
format(key, 8, "%d", newPlace); nvault_pset(vault, key, vaultEntry); showTime(id, newPlace); } } nvault_close(vault); }
Last edited by drx; 03-10-2007 at 18:08.
|
|