point calculation (real?)

This commit is contained in:
tommy aka doge 2022-08-24 01:13:06 -04:00
parent 090d20a180
commit 13005db51c
4 changed files with 54 additions and 22 deletions

View File

@ -12,21 +12,7 @@ commands:Add('rank',{},'rank <username|mention|"me"> <game> <style>', function(t
local style=API.STYLES[args[3]]
if not game then return message:reply('invalid game') end
if not style then return message:reply('invalid style') end
if user=='me' then
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
user = API:GetUserFromAny(user)
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 sn_info.State==2 then return message:reply('```This user is currently blacklisted```') end

View File

@ -3,6 +3,7 @@ local API=require('./../strafes_net.lua')
local commands=require('./../commands.lua')
function sleep(n) local t = os.clock() while os.clock()-t <= n do end end
discordia.extensions()
local pad = API.Pad
commands:Add('skill',{},'skill <username|mention|"me"> <game> <style>', function(t)
local args=t.args
local message=t.message
@ -43,6 +44,12 @@ commands:Add('skill',{},'skill <username|mention|"me"> <game> <style>', function
for _,time in next,times do
local rank = API:GetTimeRank(time.ID).Rank
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.Rank = rank
time.MapCompletionCount = count
@ -58,12 +65,19 @@ commands:Add('skill',{},'skill <username|mention|"me"> <game> <style>', function
for _,time in next,times do
points = points+time.Points
end
local msg = 'Average Skill: '..API:FormatSkill((test_a+1)/(test_b-1))..'\n'..
'Points: '..points..'\n'
local s = (test_a)/(test_b-1)
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
-- 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
local txt = './skill-'..API.GAMES[game]..'-'..API.STYLES[style]:lower()..'-'..user.name..'.txt'
local file=io.open(txt,'w+')
@ -87,3 +101,13 @@ commands:Add('skill',{},'skill <username|mention|"me"> <game> <style>', function
message:reply('Bot is currently in use, please try again later ('.._G.current.name..' for '.._G.current.game..' in '.._G.current.style..')')
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)

View File

@ -7,6 +7,11 @@ function wait(n)c=os.clock t=c()while c()-t<=n do end;end
3: headers
4: body
5: options]]
local STRAFES_NET_RATELIMIMT = {
HOUR = 3000,
MINUTE = 100,
}
local remaining_timeout = 0
local function request(method,url,headers,body,options)
local headers,body=http.request(method,url,headers,body,options)
local rbody=json.decode(body)
@ -19,9 +24,13 @@ local function request(method,url,headers,body,options)
end
end
local remaining = tonumber(rheaders['RateLimit-Remaining'])
local remaining_hour = tonumber(rheaders['X-RateLimit-Remaining-Hour'])
local reset = tonumber(rheaders['RateLimit-Reset'])
local retry_after = tonumber(rheaders['Retry-After'])
print(remaining,remaining_hour)
if remaining and reset then
local t = remaining==0 and reset or .38
if retry_after then t = retry_after end
wait(t)
end
return rbody,rheaders

View File

@ -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_URL2 = 'https://api.roblox.com/'
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 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
return ((pages-1)*200)+#res
end
--cool doggo
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
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)
local str = user:match('^["\'](.+)[\'"]$')
local num = user:match('^(%d+)$')