Page 1 of 1
Skill calculating
Posted: 2011 Jan 25 13:54
by addinol
Sveiki, noriu jūsų įdėju kaip teisingai suskaičiuoti žaidėjo skillą...
turim 3 kintamuosius tai yra Žaidėjo Killus, Mirtis ir Headshotus, ar reiktų dar ko nors , ar išeitų gan tiksliai apskaičiuoti jeigu vienas žaidėjas turi visų po daug kitas visų po mažai, bet jeigu jų koeficientas panašus tai ir skill neturėtų skirtis labai... Nežinau kaip suskaičiuoti

(kills / deaths) * (deaths / headshots) * 100
1. Kills - 5651
1. Deaths - 4672
1. Headshots - 3238
2. Kills - 428
2. Deaths - 246
2. Headshots - 288
1. (5651 / 4672) * (4672 / 3238) * 100 = 174.52
2. (428 / 246) * (246 / 288) * 100 = 148.61
Logiška, ne ? Gal geresnių pasiūlymų turit?
Re: Skill calculating
Posted: 2011 Jan 25 16:51
by aaarnas
(5651 / 4672) + (3238 / 5651) = 1.78
(428 / 246) + (228 / 428) = 2.27
Manau maniškis protingesnis.
Iš nužudymų dalinam mirtis ir kuo daugiau nužudymų nei mirčių - koeficientas didėja.
Po to dar iš nužudymų randam koks koeficientas yra nužudymų į galvą ir pridedam prie bendro koeficiento, tai manau gan logiška. Kuo daugiau nužudymų ir hs - tuo didesnis koeficientas.
Re: Skill calculating
Posted: 2011 Jan 25 17:21
by addinol
Ok dėkui, o kodėl pas mane visad returnina 1 ??
Code: Select all
get_user_skill(id){ return ( (iKills[id] / iDeaths[id]) + (iHeadshots[id] / iKills[id]) + iBonus[id] * 32 );}
Code: Select all
client_printc(id, "\g[ RANK ]\n You've %d skill, %d kills, %d deaths, %d headshots.", get_user_skill(id), iKills[id], iDeaths[id], iHeadshots[id])
iKills = 6451
iDeaths = 4198
iHeadshots = 3216
Print output:
[ RANK ] You've 1 skill, 6451 kills, 4198 deaths, 3216 headshots
Re: Skill calculating
Posted: 2011 Jan 25 17:43
by aaarnas
Tai žiūrėk kas blogai su skaičiavimu.
Re: Skill calculating
Posted: 2011 Jan 25 17:49
by addinol
Re: Skill calculating
Posted: 2011 Jan 25 18:58
by aaarnas
Mėgink įrašyti į kintamąjį ir tada per return perduoti. Gali būti, kad suveikia kaip true.
Re: Skill calculating
Posted: 2011 Jan 25 19:10
by addinol
Ne, išaikino jau man bėda:
(6451 / 4198) + (3216 / 6451) * 32 = 1
6451 / 4192 = 1
3216 / 6451 = 0
0 * 32 = 0
1 + 0 = 1
Jau išsprendžiau problemą
-- 2011 Sau 25 20:50 --
Bet errorą gaunu:
L 01/25/2011 - 19:10:02: [AMXX] Displaying debug trace (plugin "rank.amxx")
L 01/25/2011 - 19:10:02: [AMXX] Run time error 11: divide
L 01/25/2011 - 19:10:02: [AMXX] [0] rank.sma::get_user_skill (line 314)
L 01/25/2011 - 19:10:02: [AMXX] [1] rank.sma::Save_MySql (line 283)
L 01/25/2011 - 19:10:02: [AMXX] [2] rank.sma::client_disconnect (line 303)
line 314:
Code: Select all
return ( (1000*iKills[id] / iDeaths[id]) + (1000*iHeadshots[id] / iKills[id]) * 1954 ) / 1000;
Line 283:
Code: Select all
format(szTemp,charsmax(szTemp),"UPDATE `rank` SET `name` = '%s', `kills` = '%d', `deaths` = '%d', `headshots` = '%d', `skill` = '%d' WHERE `rank`.`SteamID` = '%s';",szName, iKills[id], iDeaths[id], iHeadshots[id], get_user_skill(id), szSteamID);
Line 303:
Code: Select all
public client_disconnect(id){ Save_MySql(id); // <- 303 iKills[id] = 0; iDeaths[id] = 0; iHeadshots[id] = 0; iBonus[id] = 0;}
Re: Skill calculating
Posted: 2011 Jan 27 21:21
by aaarnas
Pamėgink:
Code: Select all
return ( (1000*iKills[id] / max(iDeaths[id], 1)) + (1000*iHeadshots[id] / max(iKills[id], 1)) * 1954 ) / 1000;
Re: Skill calculating
Posted: 2011 Jan 27 21:51
by addinol
Kitaip susitvarkiau, tikrinau jei yra 0 tada ir returninau 0 ;]
Re: Skill calculating
Posted: 2011 Jan 27 22:50
by aaarnas
Galima ir taip.