From a2fe11d654553cdee1276b2c3e68ee436594d099 Mon Sep 17 00:00:00 2001 From: Midorica Date: Mon, 29 May 2023 20:57:02 -0400 Subject: [PATCH] Fixing level calculation saving & loading on SAO --- titles/sao/base.py | 22 ++++++++++++++++++++-- titles/sao/data/HeroLogLevel.csv | Bin 0 -> 1249 bytes titles/sao/data/PlayerRank.csv | Bin 0 -> 3548 bytes titles/sao/handlers/base.py | 29 +++++++++++++++++++++++++---- 4 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 titles/sao/data/HeroLogLevel.csv create mode 100644 titles/sao/data/PlayerRank.csv diff --git a/titles/sao/base.py b/titles/sao/base.py index 609c5ac..9626647 100644 --- a/titles/sao/base.py +++ b/titles/sao/base.py @@ -3,6 +3,7 @@ import json, logging from typing import Any, Dict import random import struct +import csv from core.data import Data from core import CoreConfig @@ -29,7 +30,6 @@ class SaoBase: def handle_c122(self, request: Any) -> bytes: #common/get_maintenance_info - resp = SaoGetMaintResponse(int.from_bytes(bytes.fromhex(request[:4]), "big")+1) return resp.make() @@ -438,11 +438,29 @@ class SaoBase: exp = int(profile["rank_exp"]) + 100 #always 100 extra exp for some reason col = int(profile["own_col"]) + int(req_data.base_get_data[0].get_col) + # Calculate level based off experience and the CSV list + with open(r'titles/sao/data/PlayerRank.csv') as csv_file: + csv_reader = csv.reader(csv_file, delimiter=',') + line_count = 0 + data = [] + rowf = False + for row in csv_reader: + if rowf==False: + rowf=True + else: + data.append(row) + + for i in range(0,len(data)): + if exp>=int(data[i][1]) and expmC8Iij@ON6%*EoS*NTKeUCLV zYL7K`<vd#t#6aw7qw zvKSdymDvO$Rm~LAvzd{o>dGAA)u{y}s(VXFc9snt73%{^h=`g`=qfaPk=(lHq}ggV zC(oVFjf_`+?$F(*0UI5guntI#COVXYsmx*URb7R{yO*Gx zT3A6nHAg`~H8V*?H6KYybqBeqvYI>vVbx12qGQu2y{eXu?Cvv=tM4VUG0lziLVOQo z_q-=^SLVI2TYp=QUJsI+%I#{K(ruw{$L=XNbu}9DO<@hGIX9Ixn!59f=IAiqq|VNF zo+G)x?8D4+|KRqtjk7%M^Ik58Wyux4lZl1PE{CPB7{2+{LA=Iy|DQv3-zOCK?NH;l ZLz&+Wm3})E`|VKgw?oNa4*w08^ACea@AV}NG|c$pFjTk z&maH%@%wMT{M-KZ-#>r+{Kx)y;a4?OkQpHFTh&fvFU?8>KUvwmA)Ab;Do>bGM%%&_CyK6-j~!Xf-?cAlQPUF~qU zryV}*g-d)l2_#;BeBpNb=Mg|`{x~6|s~;zbk+J&Auy{KfPZ`nk|83?m8>M^XJ zJa1rw&*CjMu6AJKX~!{d+HuW$+87~K?wx2gQq9@TQ<%?mp3=WL%vYW_Cz^%`pSjFW zo;5RZ1uFeyDi1B-PTU8_OO+y`RqwnGorn0Pwm*`SKl2w%GSPQT5rku z&K;*we`)uS^DL*&al6QZSBIP{@-yv))BLum1MMIm4aMU}k{%z%BU$ftBxb;*0b zY5bCSSNxaEyWG5_et4dH$^DRfm*h`raIrQO`o-Gn8QsO&+Bz3&rNhJ8mYff3$Mf5V zwL{c6`LK4S#fwUl;16qWr4Nrfh#=zIC^qTwvfA_k<<_+=*6ylhBB%Hy3gYmrYU+)$ zn>xEU3U4W6G*Xmf27rPTWVR~(j@9zJH_RSYes9>l5(k+n(V6b_#DX-TB`H{n9p^h} z7+nI93mdL{^u8!y>D~LLg!w$bKRin$5(Z!r7@R}t@7fC}#!-)Vr~IQFVlS{5S3N_9 zDSXvQ2N<)J&mdz~--8L8h@!o;!chHnz%l3deA?lw74Vo_J=DR+th%OdEL{#CK*+qM z6%d)Pas)DLG*;;|jxGN_Ut8n*&7q(mtEWdh_r3h&wRF5X$55VE)BuVKBX<7+2LmR0BTMvt$@v`e(T_d z6v-ceb4KM9Ov#fDg6=G> z_O`p#d$c1^soDla_g2mC2VzPqVDxD0JRcmrA~F37e5$7cNvpI9DDBEoVo5~qXWM(~ z*q&sHyo6Z6rbg>&0WVs?83$M_5upd6vR-3PFsj{(A}H0K$kKyT{3-4r6?s-82dm(g zlnPo=@wEs#9uW=fu=qA}Fw0wIBdFzFWbDB$kBcg(u9*n89^FFvM-UB}tMJzUNJeZTJhw0lSMD8_bq-4n9GFq? zH77u`K9AyYaMtJ3J>~F>luJZ{XW{BVhiH8j@g1b0q3%E~d=^(CI#BDYy4;}}cYyNa zV6E?Pny?X*#gd2)*y4W3I)LIV>IPtd;ErgzyB)SsdlHe^g2fcA9J*0uDmRaL=-dh+ zMj|Rg8pKp|xl+=D7>sUR2OhK0U0*wRaO*xTq=^>Ba z;K8fz1u!h?T5wQDDoZz5NA|u8E|s>_!5+g?`yLSUQ~Ty8MyTxhFd9=-ALULAQshJ; z#w>***$W_@#jD_AqC#+m5JMHlYJmr+s}SHGqLhe$4;@Ng$j6OZ!h=2^5p}o&`v|b? z06#8U(ZHb}aH<4@KW@EBJ^bS=9LNLkfU;Bw5RehE4gi6^sG$4|2Kt(%8xZ8KS35ft zKv3e1nF5PBkDnWE`m0 zgol1F zlAekOCNdriTv%sONCV%@9!wY7!;k@96gEs`DiI)^8IGx1=)_58l&^>|armhGz{KHo zoj6PcVw79B0}~m>OGKDBMq!-+p2ZgM35-SEo6b}>Catam@BrB)6-*>=ssrL>@pRw( E4NDV+VgLXD literal 0 HcmV?d00001 diff --git a/titles/sao/handlers/base.py b/titles/sao/handlers/base.py index 3bd6d9c..0c74182 100644 --- a/titles/sao/handlers/base.py +++ b/titles/sao/handlers/base.py @@ -2,6 +2,7 @@ import struct from datetime import datetime from construct import * import sys +import csv class SaoBaseRequest: def __init__(self, data: bytes) -> None: @@ -493,9 +494,29 @@ class SaoGetHeroLogUserDataListResponse(SaoBaseResponse): self.last_set_skill_slot5_skill_id = [] for i in range(len(hero_data)): + + # Calculate level based off experience and the CSV list + with open(r'titles/sao/data/HeroLogLevel.csv') as csv_file: + csv_reader = csv.reader(csv_file, delimiter=',') + line_count = 0 + data = [] + rowf = False + for row in csv_reader: + if rowf==False: + rowf=True + else: + data.append(row) + + exp = hero_data[i][4] + + for e in range(0,len(data)): + if exp>=int(data[e][1]) and exp