This commit is contained in:
Emily 2019-03-13 10:59:06 +01:00
parent 204aed6b06
commit 8cfa8c7907
7 changed files with 144 additions and 17 deletions

2
.gitignore vendored
View File

@ -95,4 +95,4 @@ ENV/
.ropeproject
# VSC
.vscode/
.vscode/

View File

@ -1,3 +0,0 @@
{
"python.linting.pylintEnabled": true
}

113
README.md
View File

@ -1,3 +1,114 @@
# osu-repy
osu! replay helper in python
python osu! replay helper
## Sample
```python
from osuRepy.frame import ReplayFrame # ReplayFrame
from osuRepy.replay import Replay # Replay instance
from osuRepy.helpers import osuButtons, osuMods # Enum helpers
replay = Replay() # Create replay instance
replay.write( ReplayFrame(2, 256, 192, osuButtons.M1) ) # Add replay frame (time, x, y, buttons)
replay.set_score(score = 29284624,
s300 = 416,
s50 = 2,
miss = 1,
combo = 358) # Set score info
replay.set_mods(osuMods.HIDDEN | osuMods.DOUBLETIME) # Enable HDDT mods
replay.set_timestamp(1552466941) # Set unix timestamp
replay.save("myReplay.osr") # Export replay to file
```
# Enums (from helpers)
### osuButtons
|Name|Value|
|-|-|
|NONE|0|
|LEFTMOUSE|1|
|RIGHTMOUSE|2|
|LEFTKEY|4|
|RIGHTKEY|8|
|SMOKE|16|
|M1|1|
|M2|2|
|K1|5|
|K2|10|
### osuModes
|Name|Value|
|-|-|
|STANDARD|0|
|TAIKO|1|
|CATCH_THE_BEAT|2|
|MANIA|3|
### osuMods
|Name|Value|
|-|-|
|NOMOD|0|
|NOFAIL|1|
|EASY|2|
|TOUCHSCREEN|4|
|HIDDEN|8|
|HARDROCK|16|
|SUDDENDEATH|32|
|DOUBLETIME|64|
|RELAX|128|
|HALFTIME|256|
|NIGHTCORE|512|
|FLASHLIGHT|1024|
|AUTOPLAY|2048|
|SPUNOUT|4096|
|AUTOPILOT|8192|
|PERFECT|16384|
|KEY4|32768|
|KEY5|65536|
|KEY6|131072|
|KEY7|262144|
|KEY8|524288|
|KEYMOD|1048576|
|FADEIN|2097152|
|RANDOM|4194304|
|LASTMOD|8388608|
|KEY9|16777216|
|KEY10|33554432|
|KEY1|67108864|
|KEY3|134217728|
|KEY2|268435456|
|SCOREV2|536870912|
### osuRanks
|Name|Value|
|-|-|
|SSH|0|
|SH|1|
|SS|2|
|S|3|
|A|4|
|B|5|
|C|6|
|D|7|
|F|8|
|N|9|
(We dont speak of typeSerializer)
# Tips
```python
if you.style is 'passing arrays of information':
```
```python
frames = [
ReplayFrame(0, 256, 192, osuButtons.NONE),
ReplayFrame(8, 258, 191, osuButtons.NONE),
ReplayFrame(13, 257, 198, osuButtons.M1 | osuButtons.SMOKE)
]
replay = Replay()
replay.write( frames )
```

View File

@ -13,6 +13,7 @@ class ReplayFrame:
def set_delta(self, delta):
if type(delta) is not int:
raise Exception("Delta is not type of int")
self.delta = delta
def set_position(self, x, y):
self.x = x
@ -24,7 +25,7 @@ class ReplayFrame:
self.buttons = buttons
def __str__(self):
return "%s|%s|%s|%s," % (self.delta, self.x, self.y, self.buttons)
return "%d|%s|%s|%d," % (self.delta, repr(self.x), repr(self.y), self.buttons)
def __bytes__(self):
return str(self).encode()

View File

@ -12,7 +12,7 @@ NIGHTCORE = 1 << 9
FLASHLIGHT = 1 << 10
AUTOPLAY = 1 << 11
SPUNOUT = 1 << 12
RELAX2 = 1 << 13
AUTOPILOT = 1 << 13
PERFECT = 1 << 14
KEY4 = 1 << 15
KEY5 = 1 << 16

View File

@ -2,6 +2,8 @@ import struct
import string
import lzma
from .frame import ReplayFrame
from .helpers import osuModes
from .helpers import osuMods
from .helpers import osuRanks
@ -199,12 +201,19 @@ class Replay:
# Write replay data --------------------------------------------------------
def write(self, frame):
if type(frame) is list:
t_frame = type(frame)
if t_frame is list:
for _frame in frame: # (frames)
self.write(_frame)
return
self._replay_data.value += bytes(frame)
if t_frame is ReplayFrame:
self._replay_data.value += bytes(frame)
elif t_frame is bytes:
self._replay_data.value += frame
elif t_frame is str:
self._replay_data.value += frame.encode()
else:
raise Exception("Invalid frame data")
# --------------------------------------------------------------------------
# IO replay data -----------------------------------------------------------

23
test.py
View File

@ -1,10 +1,19 @@
from osuRepy.frame import ReplayFrame
from osuRepy.replay import Replay
from osuRepy.frame import ReplayFrame # ReplayFrame
from osuRepy.replay import Replay # Replay instance
replay = Replay()
replay.write( ReplayFrame(2, 3, 4, 4) )
from osuRepy.helpers import osuButtons, osuMods # Enum helpers
replay.set_score(s300 = 10)
replay.set_timestamp( 1552466941 )# Wed Feb 11 2015 09:03:52 GMT+0100 (Central European Standard Time)
replay = Replay() # Create replay instance
replay.save("test.osr")
replay.write( ReplayFrame(2, 256, 192, osuButtons.M1) ) # Add replay frame (time, x, y, buttons)
replay.set_score(score = 29284624,
s300 = 416,
s50 = 2,
miss = 1,
combo = 358) # Set score info
replay.set_mods(osuMods.HIDDEN | osuMods.DOUBLETIME) # Enable HDDT mods
replay.set_timestamp(1552466941) # Set unix timestamp
replay.save("myReplay.osr") # Export replay to file