point calculation (real?)
This commit is contained in:
parent
090d20a180
commit
13005db51c
@ -12,21 +12,7 @@ commands:Add('rank',{},'rank <username|mention|"me"> <game> <style>', function(t
|
|||||||
local style=API.STYLES[args[3]]
|
local style=API.STYLES[args[3]]
|
||||||
if not game then return message:reply('invalid game') end
|
if not game then return message:reply('invalid game') end
|
||||||
if not style then return message:reply('invalid style') end
|
if not style then return message:reply('invalid style') end
|
||||||
if user=='me' then
|
user = API:GetUserFromAny(user)
|
||||||
local me=message.author
|
|
||||||
local roblox_user=API:GetRobloxInfoFromDiscordId(me.id)
|
|
||||||
if not roblox_user.id then return message:reply('```You are not registered with the RoverAPI```') end
|
|
||||||
user=roblox_user
|
|
||||||
elseif user:match('<@%d+>') then
|
|
||||||
local user_id=user:match('<@(%d+)>')
|
|
||||||
local member=message.guild:getMember(user_id)
|
|
||||||
local roblox_user=API:GetRobloxInfoFromDiscordId(member.id)
|
|
||||||
if not roblox_user.id then return message:reply('```You are not registered with the RoverAPI```') end
|
|
||||||
user=roblox_user
|
|
||||||
else
|
|
||||||
local roblox_user=API:GetRobloxInfoFromUsername(user)
|
|
||||||
user=roblox_user
|
|
||||||
end
|
|
||||||
local sn_info = API:GetUser(user.id)
|
local sn_info = API:GetUser(user.id)
|
||||||
if not sn_info.ID then return message:reply('```No data with StrafesNET is associated with that user.```') end
|
if not sn_info.ID then return message:reply('```No data with StrafesNET is associated with that user.```') end
|
||||||
if sn_info.State==2 then return message:reply('```This user is currently blacklisted```') end
|
if sn_info.State==2 then return message:reply('```This user is currently blacklisted```') end
|
||||||
|
@ -3,6 +3,7 @@ local API=require('./../strafes_net.lua')
|
|||||||
local commands=require('./../commands.lua')
|
local commands=require('./../commands.lua')
|
||||||
function sleep(n) local t = os.clock() while os.clock()-t <= n do end end
|
function sleep(n) local t = os.clock() while os.clock()-t <= n do end end
|
||||||
discordia.extensions()
|
discordia.extensions()
|
||||||
|
local pad = API.Pad
|
||||||
commands:Add('skill',{},'skill <username|mention|"me"> <game> <style>', function(t)
|
commands:Add('skill',{},'skill <username|mention|"me"> <game> <style>', function(t)
|
||||||
local args=t.args
|
local args=t.args
|
||||||
local message=t.message
|
local message=t.message
|
||||||
@ -43,6 +44,12 @@ commands:Add('skill',{},'skill <username|mention|"me"> <game> <style>', function
|
|||||||
for _,time in next,times do
|
for _,time in next,times do
|
||||||
local rank = API:GetTimeRank(time.ID).Rank
|
local rank = API:GetTimeRank(time.ID).Rank
|
||||||
local count = tonumber(API:GetMapCompletionCount(time.Map,style))
|
local count = tonumber(API:GetMapCompletionCount(time.Map,style))
|
||||||
|
if not rank or not count then
|
||||||
|
print('NO RANK OR COUNT')
|
||||||
|
print(rank,count)
|
||||||
|
rank = 1
|
||||||
|
count = 1
|
||||||
|
end
|
||||||
time.Points = API:CalculatePoint(rank,count)
|
time.Points = API:CalculatePoint(rank,count)
|
||||||
time.Rank = rank
|
time.Rank = rank
|
||||||
time.MapCompletionCount = count
|
time.MapCompletionCount = count
|
||||||
@ -58,12 +65,19 @@ commands:Add('skill',{},'skill <username|mention|"me"> <game> <style>', function
|
|||||||
for _,time in next,times do
|
for _,time in next,times do
|
||||||
points = points+time.Points
|
points = points+time.Points
|
||||||
end
|
end
|
||||||
local msg = 'Average Skill: '..API:FormatSkill((test_a+1)/(test_b-1))..'\n'..
|
local s = (test_a)/(test_b-1)
|
||||||
'Points: '..points..'\n'
|
print(s)
|
||||||
|
local msg = 'Average Skill: '..API:FormatSkill(math.clamp(s,0,1))..'\n'..
|
||||||
|
'Points: '..points..'\n'..
|
||||||
|
pad(API,'Map',50)..' | '..pad(API,'Skill',7)..' | '.. pad(API,'Placement',14)..' | Time\n\n'
|
||||||
|
|
||||||
for _,time in next,times do
|
for _,time in next,times do
|
||||||
-- msg = msg..'['..time.Rank..'/'..time.MapCompletionCount..'] '..time.Map..' ('..time.Skill..')\n'
|
-- msg = msg..'['..time.Rank..'/'..time.MapCompletionCount..'] '..time.Map..' ('..time.Skill..')\n'
|
||||||
msg = msg..API.MAPS[game][time.Map].DisplayName..' ('..time.Map..'): '..time.Skill..' for '..time.Rank..'/'..time.MapCompletionCount..' with '..API:FormatTime(time.Time)..'\n'
|
local mapStr = API.MAPS[game][time.Map].DisplayName..' ('..time.Map..')'
|
||||||
|
local skill = time.Skill
|
||||||
|
local rankStr = time.Rank..'/'..time.MapCompletionCount
|
||||||
|
local timeStr = API:FormatTime(time.Time)
|
||||||
|
msg = msg.. pad(API,mapStr,50)..' | '..pad(API,skill,7)..' | '.. pad(API,rankStr,14)..' | '..timeStr..'\n'
|
||||||
end
|
end
|
||||||
local txt = './skill-'..API.GAMES[game]..'-'..API.STYLES[style]:lower()..'-'..user.name..'.txt'
|
local txt = './skill-'..API.GAMES[game]..'-'..API.STYLES[style]:lower()..'-'..user.name..'.txt'
|
||||||
local file=io.open(txt,'w+')
|
local file=io.open(txt,'w+')
|
||||||
@ -86,4 +100,14 @@ commands:Add('skill',{},'skill <username|mention|"me"> <game> <style>', function
|
|||||||
--_G.current = {name=user.name,game=API.GAMES[game],style=API.STYLES[style]:lower()}
|
--_G.current = {name=user.name,game=API.GAMES[game],style=API.STYLES[style]:lower()}
|
||||||
message:reply('Bot is currently in use, please try again later ('.._G.current.name..' for '.._G.current.game..' in '.._G.current.style..')')
|
message:reply('Bot is currently in use, please try again later ('.._G.current.name..' for '.._G.current.game..' in '.._G.current.style..')')
|
||||||
end
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
commands:Add('compare',{},'compare n1 n2', function(t)
|
||||||
|
local args=t.args
|
||||||
|
local message=t.message
|
||||||
|
local n1 = args[1]
|
||||||
|
local n2 = args[2]
|
||||||
|
local compared = API:CalculateDifference(n1,n2)
|
||||||
|
local compared_percent = API:CalculateDifferencePercent(n1,n2)
|
||||||
|
message:reply(tostring(compared)..' ('..compared_percent..')')
|
||||||
end)
|
end)
|
@ -7,6 +7,11 @@ function wait(n)c=os.clock t=c()while c()-t<=n do end;end
|
|||||||
3: headers
|
3: headers
|
||||||
4: body
|
4: body
|
||||||
5: options]]
|
5: options]]
|
||||||
|
local STRAFES_NET_RATELIMIMT = {
|
||||||
|
HOUR = 3000,
|
||||||
|
MINUTE = 100,
|
||||||
|
}
|
||||||
|
local remaining_timeout = 0
|
||||||
local function request(method,url,headers,body,options)
|
local function request(method,url,headers,body,options)
|
||||||
local headers,body=http.request(method,url,headers,body,options)
|
local headers,body=http.request(method,url,headers,body,options)
|
||||||
local rbody=json.decode(body)
|
local rbody=json.decode(body)
|
||||||
@ -19,9 +24,13 @@ local function request(method,url,headers,body,options)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
local remaining = tonumber(rheaders['RateLimit-Remaining'])
|
local remaining = tonumber(rheaders['RateLimit-Remaining'])
|
||||||
|
local remaining_hour = tonumber(rheaders['X-RateLimit-Remaining-Hour'])
|
||||||
local reset = tonumber(rheaders['RateLimit-Reset'])
|
local reset = tonumber(rheaders['RateLimit-Reset'])
|
||||||
|
local retry_after = tonumber(rheaders['Retry-After'])
|
||||||
|
print(remaining,remaining_hour)
|
||||||
if remaining and reset then
|
if remaining and reset then
|
||||||
local t = remaining==0 and reset or .38
|
local t = remaining==0 and reset or .38
|
||||||
|
if retry_after then t = retry_after end
|
||||||
wait(t)
|
wait(t)
|
||||||
end
|
end
|
||||||
return rbody,rheaders
|
return rbody,rheaders
|
||||||
|
@ -7,9 +7,9 @@ local ROVER_API_URL = 'https://verify.eryn.io/api/'
|
|||||||
local ROBLOX_API_URL = 'https://users.roblox.com/v1/'
|
local ROBLOX_API_URL = 'https://users.roblox.com/v1/'
|
||||||
local ROBLOX_API_URL2 = 'https://api.roblox.com/'
|
local ROBLOX_API_URL2 = 'https://api.roblox.com/'
|
||||||
local ROBLOX_THUMBNAIL_URL = 'https://thumbnails.roblox.com/v1/'
|
local ROBLOX_THUMBNAIL_URL = 'https://thumbnails.roblox.com/v1/'
|
||||||
local ROBLOX_PREMIUM_URL = 'https://premiumfeatures.roblox.com/v1/'
|
|
||||||
|
|
||||||
local RANK_CONSTANT = 0.5
|
|
||||||
|
local RANK_CONSTANT_A, RANK_CONSTANT_B, RANK_CONSTANT_C, RANK_CONSTANT_D, RANK_CONSTANT_E = 0.215, 0.595, 0.215, 0.215, 0.71
|
||||||
|
|
||||||
local t=tostring
|
local t=tostring
|
||||||
local r=function(n,nd) return tonumber(string.format('%.' .. (nd or 0) .. 'f', n)) end
|
local r=function(n,nd) return tonumber(string.format('%.' .. (nd or 0) .. 'f', n)) end
|
||||||
@ -188,11 +188,24 @@ function API:GetMapCompletionCount(MAP_ID,STYLE_ID)
|
|||||||
end
|
end
|
||||||
return ((pages-1)*200)+#res
|
return ((pages-1)*200)+#res
|
||||||
end
|
end
|
||||||
|
--cool doggo
|
||||||
function API:CalculatePoint(rank,count)
|
function API:CalculatePoint(rank,count)
|
||||||
return RANK_CONSTANT*(math.exp(RANK_CONSTANT)-1)/(1-math.exp(math.max(-700, -RANK_CONSTANT*count)))*math.exp(math.max(-700, -RANK_CONSTANT*rank))+(1-RANK_CONSTANT)*(1+2*(count-rank))/(count*count)
|
return RANK_CONSTANT_A*(math.exp(RANK_CONSTANT_B)-1)/(1-math.exp(math.max(-700, -RANK_CONSTANT_C*count)))*math.exp(math.max(-700, -RANK_CONSTANT_D*rank))+(1-RANK_CONSTANT_E)*(1+2*(count-rank))/(count*count)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function API:Pad(str,n)
|
||||||
|
n = n or 20
|
||||||
|
str = tostring(str)
|
||||||
|
return str..string.rep(' ',n-#str)
|
||||||
|
end
|
||||||
|
|
||||||
|
function API:CalculateDifference(v1,v2)
|
||||||
|
return math.abs(v1-v2)
|
||||||
|
end
|
||||||
|
|
||||||
|
function API:CalculateDifferencePercent(v1,v2)
|
||||||
|
return math.abs((1-(v1/v2))*100)..'%'
|
||||||
|
end
|
||||||
function API:GetUserFromAny(user,message)
|
function API:GetUserFromAny(user,message)
|
||||||
local str = user:match('^["\'](.+)[\'"]$')
|
local str = user:match('^["\'](.+)[\'"]$')
|
||||||
local num = user:match('^(%d+)$')
|
local num = user:match('^(%d+)$')
|
||||||
|
Loading…
Reference in New Issue
Block a user