mirror of
https://github.com/CPunch/gopenfusion.git
synced 2024-11-14 12:00:05 +00:00
Compare commits
No commits in common. "7d83732e44d652be719926fb8849b3d33c531a05" and "e8f8129b35dc53579311c3d36d9c1ce584d9cb27" have entirely different histories.
7d83732e44
...
e8f8129b35
@ -5,7 +5,6 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/CPunch/gopenfusion/internal/protocol"
|
|
||||||
"github.com/bitcomplete/sqltestutil"
|
"github.com/bitcomplete/sqltestutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -15,7 +14,7 @@ var (
|
|||||||
|
|
||||||
func TestMain(m *testing.M) {
|
func TestMain(m *testing.M) {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
psql, err := sqltestutil.StartPostgresContainer(ctx, "15")
|
psql, err := sqltestutil.StartPostgresContainer(ctx, "latest")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@ -48,77 +47,4 @@ func TestDBAccount(t *testing.T) {
|
|||||||
if acc.Login != "test" {
|
if acc.Login != "test" {
|
||||||
t.Error("account username is not test")
|
t.Error("account username is not test")
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err = testDB.TryLogin("test", "wrongpassword"); err != ErrLoginInvalidPassword {
|
|
||||||
t.Error("expected ErrLoginInvalidPassword")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
test data has been collected by running the following commands in a postgresql shell started with:
|
|
||||||
docker exec -it gofusion-postgresql-1 psql -U gopenfusion -W gopenfusion
|
|
||||||
|
|
||||||
gopenfusion=# SELECT * FROM Players;
|
|
||||||
playerid | accountid | firstname | lastname | namecheck | slot | created | lastlogin | level | nano1 | nano2 | nano3 | appearanceflag | tutorialflag | payzoneflag | xcoordinate | ycoordinate | zcoordinate | angle | hp | fusionmatter | taros | batteryw | batteryn | mentor | currentmissionid | warplocationflag | skywaylocationflag | firstuseflag | quests
|
|
||||||
----------+-----------+-----------+----------+-----------+------+---------+-----------+-------+-------+-------+-------+----------------+--------------+-------------+-------------+-------------+-------------+-------+------+--------------+-------+----------+----------+--------+------------------+------------------+------------------------------------+------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
1 | 1 | Neil | Mcscout | 1 | 1 | 76476 | 76476 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 632032 | 187177 | -5500 | 0 | 1000 | 0 | 0 | 0 | 0 | 5 | 0 | 0 | \x00000000000000000000000000000000 | \x00000000000000000000000000000000 | \x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
|
|
||||||
gopenfusion=# SELECT * FROM Appearances;
|
|
||||||
playerid | body | eyecolor | facestyle | gender | haircolor | hairstyle | height | skincolor
|
|
||||||
----------+------+----------+-----------+--------+-----------+-----------+--------+-----------
|
|
||||||
1 | 2 | 3 | 5 | 1 | 11 | 3 | 0 | 9
|
|
||||||
|
|
||||||
gopenfusion=# SELECT * FROM Inventory;
|
|
||||||
playerid | slot | id | type | opt | timelimit
|
|
||||||
----------+------+-----+------+-----+-----------
|
|
||||||
1 | 1 | 328 | 1 | 1 | 0
|
|
||||||
1 | 2 | 359 | 2 | 1 | 0
|
|
||||||
1 | 3 | 194 | 3 | 1 | 0
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
func TestDBPlayer(t *testing.T) {
|
|
||||||
if _, err := testDB.NewAccount("testplayer", "test"); err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// now try to retrieve account data
|
|
||||||
acc, err := testDB.TryLogin("testplayer", "test")
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
plrID, err := testDB.NewPlayer(acc.AccountID, "Neil", "Mcscout", 1)
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err = testDB.FinishPlayer(&protocol.SP_CL2LS_REQ_CHAR_CREATE{
|
|
||||||
PCStyle: protocol.SPCStyle{
|
|
||||||
IPC_UID: int64(plrID),
|
|
||||||
INameCheck: 1,
|
|
||||||
SzFirstName: "Neil",
|
|
||||||
SzLastName: "Mcscout",
|
|
||||||
IGender: 1,
|
|
||||||
IFaceStyle: 5,
|
|
||||||
IHairColor: 11,
|
|
||||||
ISkinColor: 9,
|
|
||||||
IEyeColor: 3,
|
|
||||||
IHeight: 0,
|
|
||||||
IBody: 2,
|
|
||||||
IHairStyle: 3,
|
|
||||||
},
|
|
||||||
SOn_Item: protocol.SOnItem{
|
|
||||||
IEquipUBID: 328,
|
|
||||||
IEquipLBID: 359,
|
|
||||||
IEquipFootID: 194,
|
|
||||||
},
|
|
||||||
}, acc.AccountID); err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err = testDB.FinishTutorial(plrID, acc.AccountID); err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -32,10 +32,10 @@ WARN_INVALID = False
|
|||||||
|
|
||||||
class StructTranspiler:
|
class StructTranspiler:
|
||||||
class StructField:
|
class StructField:
|
||||||
def __init__(self, name: str, csType: str, marshal: str) -> None:
|
def __init__(self, name: str, type: str, marshal: str) -> None:
|
||||||
self.marshal = marshal
|
self.marshal = marshal
|
||||||
self.type = csType
|
self.type = type
|
||||||
self.ctype = csType # for transpilation to c
|
self.ctype = type # for transpilation to c
|
||||||
self.tags = ""
|
self.tags = ""
|
||||||
self.size = 0
|
self.size = 0
|
||||||
self.padding = 0
|
self.padding = 0
|
||||||
@ -43,51 +43,50 @@ class StructTranspiler:
|
|||||||
self.cname = self.name
|
self.cname = self.name
|
||||||
self.needsPatching = False
|
self.needsPatching = False
|
||||||
|
|
||||||
match csType:
|
if type == "byte":
|
||||||
case "byte":
|
|
||||||
self.type = "uint8"
|
self.type = "uint8"
|
||||||
self.ctype = "char"
|
self.ctype = "char"
|
||||||
self.size = 1
|
self.size = 1
|
||||||
case "sbyte":
|
elif type == "sbyte":
|
||||||
self.type = "int8"
|
self.type = "int8"
|
||||||
self.ctype = "char"
|
self.ctype = "char"
|
||||||
self.size = 1
|
self.size = 1
|
||||||
case "short":
|
elif type == "short":
|
||||||
self.type = "int16"
|
self.type = "int16"
|
||||||
self.ctype = "short"
|
self.ctype = "short"
|
||||||
self.size = 2
|
self.size = 2
|
||||||
case "int":
|
elif type == "int":
|
||||||
self.type = "int32"
|
self.type = "int32"
|
||||||
self.ctype = "int"
|
self.ctype = "int"
|
||||||
self.size = 4
|
self.size = 4
|
||||||
case "uint":
|
elif type == "uint":
|
||||||
self.type = "uint32"
|
self.type = "uint32"
|
||||||
self.ctype = "int"
|
self.ctype = "int"
|
||||||
self.size = 4
|
self.size = 4
|
||||||
case "float":
|
elif type == "float":
|
||||||
self.type = "float32"
|
self.type = "float32"
|
||||||
self.ctype = "float"
|
self.ctype = "float"
|
||||||
self.size = 4
|
self.size = 4
|
||||||
case "long":
|
elif type == "long":
|
||||||
self.type = "int64"
|
self.type = "int64"
|
||||||
self.ctype = "long"
|
self.ctype = "long"
|
||||||
self.size = 8
|
self.size = 8
|
||||||
case "ulong":
|
elif type == "ulong":
|
||||||
self.type = "uint64"
|
self.type = "uint64"
|
||||||
self.ctype = "long"
|
self.ctype = "long"
|
||||||
self.size = 8
|
self.size = 8
|
||||||
case "byte[]":
|
elif type == "byte[]":
|
||||||
self.size = int(marshal[(marshal.find("SizeConst = ") + len("SizeConst = ")):marshal.find(")]")])
|
self.size = int(marshal[(marshal.find("SizeConst = ") + len("SizeConst = ")):marshal.find(")]")])
|
||||||
self.type = "[%d]byte" % self.size
|
self.type = "[%d]byte" % self.size
|
||||||
self.ctype = "char"
|
self.ctype = "char"
|
||||||
self.cname += "[%d]" % self.size
|
self.cname += "[%d]" % self.size
|
||||||
case "short[]":
|
elif type == "short[]":
|
||||||
self.size = int(marshal[(marshal.find("SizeConst = ") + len("SizeConst = ")):marshal.find(")]")])
|
self.size = int(marshal[(marshal.find("SizeConst = ") + len("SizeConst = ")):marshal.find(")]")])
|
||||||
self.type = "[%d]int16" % self.size
|
self.type = "[%d]int16" % self.size
|
||||||
self.ctype = "short"
|
self.ctype = "short"
|
||||||
self.cname += "[%d]" % self.size
|
self.cname += "[%d]" % self.size
|
||||||
self.size *= 2
|
self.size *= 2
|
||||||
case "string":
|
elif type == "string":
|
||||||
# all strings in fusionfall are utf16, in a uint16 array
|
# all strings in fusionfall are utf16, in a uint16 array
|
||||||
self.size = int(marshal[(marshal.find("SizeConst = ") + len("SizeConst = ")):marshal.find(")]")])
|
self.size = int(marshal[(marshal.find("SizeConst = ") + len("SizeConst = ")):marshal.find(")]")])
|
||||||
self.type = "string"
|
self.type = "string"
|
||||||
@ -95,35 +94,35 @@ class StructTranspiler:
|
|||||||
self.ctype = "short"
|
self.ctype = "short"
|
||||||
self.cname += "[%d]" % self.size
|
self.cname += "[%d]" % self.size
|
||||||
self.size *= 2
|
self.size *= 2
|
||||||
case "int[]":
|
elif type == "int[]":
|
||||||
self.size = int(marshal[(marshal.find("SizeConst = ") + len("SizeConst = ")):marshal.find(")]")])
|
self.size = int(marshal[(marshal.find("SizeConst = ") + len("SizeConst = ")):marshal.find(")]")])
|
||||||
self.type = "[%d]int32" % self.size
|
self.type = "[%d]int32" % self.size
|
||||||
self.ctype = "int"
|
self.ctype = "int"
|
||||||
self.cname += "[%d]" % self.size
|
self.cname += "[%d]" % self.size
|
||||||
self.size *= 4
|
self.size *= 4
|
||||||
case "float[]":
|
elif type == "float[]":
|
||||||
self.size = int(marshal[(marshal.find("SizeConst = ") + len("SizeConst = ")):marshal.find(")]")])
|
self.size = int(marshal[(marshal.find("SizeConst = ") + len("SizeConst = ")):marshal.find(")]")])
|
||||||
self.type = "[%d]float32" % self.size
|
self.type = "[%d]float32" % self.size
|
||||||
self.ctype = "float"
|
self.ctype = "float"
|
||||||
self.cname += "[%d]" % self.size
|
self.cname += "[%d]" % self.size
|
||||||
self.size *= 4
|
self.size *= 4
|
||||||
case "long[]":
|
elif type == "long[]":
|
||||||
self.size = int(marshal[(marshal.find("SizeConst = ") + len("SizeConst = ")):marshal.find(")]")])
|
self.size = int(marshal[(marshal.find("SizeConst = ") + len("SizeConst = ")):marshal.find(")]")])
|
||||||
self.type = "[%d]int64" % self.size
|
self.type = "[%d]int64" % self.size
|
||||||
self.ctype = "long"
|
self.ctype = "long"
|
||||||
self.cname += "[%d]" % self.size
|
self.cname += "[%d]" % self.size
|
||||||
self.size *= 8
|
self.size *= 8
|
||||||
case _:
|
else:
|
||||||
# assume it's a structure that will be defined later
|
# assume it's a structure that will be defined later
|
||||||
if csType.find("[]") != -1: # it's an array!
|
if type.find("[]") != -1: # it's an array!
|
||||||
csType = csType.replace("[]", "")
|
type = type.replace("[]", "")
|
||||||
self.size = int(marshal[(marshal.find("SizeConst = ") + len("SizeConst = ")):marshal.find(")]")])
|
self.size = int(marshal[(marshal.find("SizeConst = ") + len("SizeConst = ")):marshal.find(")]")])
|
||||||
self.cname = self.name + "[%d]" % self.size
|
self.cname = self.name + "[%d]" % self.size
|
||||||
else:
|
else:
|
||||||
self.cname = self.name
|
self.cname = self.name
|
||||||
self.size = 1
|
self.size = 1
|
||||||
self.type = sanitizeName(csType)
|
self.type = sanitizeName(type)
|
||||||
self.ctype = sanitizeName(csType)
|
self.ctype = sanitizeName(type)
|
||||||
self.needsPatching = True
|
self.needsPatching = True
|
||||||
|
|
||||||
def addTag(self, tag: str) -> None:
|
def addTag(self, tag: str) -> None:
|
||||||
|
Loading…
Reference in New Issue
Block a user