Closed sirdankz closed 1 year ago
This probably means something is wrong in your config.json. newserv uses an extended JSON syntax, so most handy online validation tools can't handle it... but the pos value tells where exactly the parser failed. If you open up config.json in a hex editor and go to offset 0x299 (which is 665 in hex), there's probably a missing comma or other syntax error near there. Alternatively, you could upload your config.json here and I can take a look at it.
Sorry if im being a noob i just got back into linux and the 2 hex editors i just tried formatted everything bunched up..
// Configuration file for newserv. This file is standard JSON with comments.
// Server's name (maximum 16 characters). This appears in the upper-right // corner of the screen while in lobbies. "ServerName": "newserv",
// Address to connect local clients to (IP address or interface name) "LocalAddress": "en0", // Address to connect external clients to (IP address or interface name). If // you're running newserv behind a NAT, this should be your router's // public-facing address. "ExternalAddress": "192.168.1.68",
// Port to listen for DNS queries on. To disable the DNS server, comment this // out or set it to zero. DNSServerPort": 53,
// Ports to listen for game connections on. "PortConfiguration": { // Format of entries in this dictionary: // name: [port, version, behavior]
// Various versions of PSO hardcode these ports in the clients. Don't change
// these unless you don't want to support certain versions of PSO.
// Note: The pc_console_detect behavior is used for separating PSO PC and
// DC/GC clients that connect on the same port. On these ports, newserv
// sends a single command that PC and DC/GC clients parse in different ways,
// leading them to connect to either the console-login port or the pc-login
// port (both of which must be defined below if pc_console_detect is used).
// If you want to support only PC, you can change the pc_console_detect
// behavior for these ports to login_server. If you don't want to support
// PC, you can do the same, but also change the version from pc to gc.
// Note: It is not an error that no ports appear here with "dc" in their
// definitions. DC clients use the same ports as GC clients, and newserv can
// tell them apart at the time they connect.
"gc-jp10": [9000, "gc", "login_server"],
"gc-jp11": [9001, "gc", "login_server"],
"gc-jp3te": [9002, "gc", "login_server"],
"gc-jp3": [9003, "gc", "login_server"],
"gc-us12t1": [9064, "gc", "login_server"],
"gc-us10": [9100, "pc", "pc_console_detect"],
"gc-us3": [9103, "gc", "login_server"],
"gc-eu10": [9200, "gc", "login_server"],
"gc-eu11": [9201, "gc", "login_server"],
"gc-us12t2": [9202, "gc", "login_server"],
"gc-eu3": [9203, "gc", "login_server"],
"pc": [9300, "pc", "login_server"],
"pc-patch": [10000, "patch", "patch_server_pc"],
"bb-patch": [11000, "patch", "patch_server_bb"],
"bb-init": [12000, "bb", "data_server_bb"],
// TODO: If Xbox support ever gets built, add this port to the above config.
// "xb-login": [????, "xb", "login_server"],
// Schthack PSOBB uses these ports.
// "bb-patch2": [10500, "patch", "patch_server_bb"],
// "bb-init2": [13000, "bb", "data_server_bb"],
// Ephinea PSOBB uses these ports. Note that 13000 is also used by Schthack
// PSOBB, but not for the patch server; this means you unfortunately can't
// support both Schthack and Ephinea PSOBB clients at the same time. This
// may be fixed in the future using a similar technique as the
// split_reconnect behavior, but this isn't implemented yet.
// "bb-patch3": [13000, "patch", "patch_server_bb"],
// "bb-init3": [14000, "bb", "data_server_bb"],
// newserv uses these ports, but there is no external reason that these
// numbers were chosen. You can change the port numbers here without any
// issues. Some of these names are required; specifically:
// - If there are any ports using the pc_console_detect behavior, then the
// pc-login and console-login ports must be defined. newserv will fail on
// startup if either port is not defined.
// - If you have any DC, GC, or XB clients connecting to the server, the
// console-lobby port must be defined. The version for this port should be
// "gc", even though DC and XB clients can connect to it (newserv will
// automatically detect the correct game version).
// - If you have any PC clients connecting to the server, the pc-lobby port
// must be defined.
// - If you have any BB clients connecting to the server, the bb-lobby,
// bb-data1, and bb-data2 ports must be defined.
// - The bb-data1 and bb-data2 ports must be sequential; that is, the
// bb-data2 port number must be equal to the bb-data1 port number + 1.
// - The proxy ports do not need to be defined unless the proxy server is
// enabled for the respective version via the ProxyDestinations fields
// (below).
"console-login": [5100, "gc", "login_server"],
"pc-login": [5101, "pc", "login_server"],
"console-lobby": [5110, "gc", "lobby_server"],
"pc-lobby": [5111, "pc", "lobby_server"],
"bb-lobby": [5112, "bb", "lobby_server"],
"dc-proxy": [5120, "dc", "proxy_server"],
"pc-proxy": [5121, "pc", "proxy_server"],
"gc-proxy": [5122, "gc", "proxy_server"],
"xb-proxy": [5123, "xb", "proxy_server"],
"bb-proxy": [5124, "bb", "proxy_server"],
"bb-data1": [12004, "bb", "data_server_bb"],
"bb-data2": [12005, "bb", "data_server_bb"],
},
// Where to listen for IP stack clients. This exists to interface with PSO GC // clients running in a local Dolphin emulator. To enable local Dolphin // clients to connect, set this to ["/tmp/dolphin-tap"] and configure Dolphin // to use the tapserver type of broadband adapter. You do not need to install // or run tapserver. See README.md for details on how to get PSO to connect // via this interface. // If you're doing unusual things, you can also add numbers or "address:port" // strings to this list to listen for tapserver connections on a TCP port. "IPStackListen": [],
// Other servers to support proxying to. If this is empty for any game // version, the proxy server is disabled for that version. Entries are like // "name": "address:port"; the names are used in the proxy server menu. "ProxyDestinations-DC": {}, "ProxyDestinations-PC": {}, "ProxyDestinations-GC": {}, "ProxyDestinations-XB": {}, // Proxy destination for patch server clients. If this is given, the internal // patch server (for PC and BB) is bypassed, and any client that connects to // the patch server is instead proxied to this destination. // "ProxyDestination-Patch": "", // Proxy destination for BB clients. If this is given, all BB clients that // connect to newserv will be proxied to this destination. // "ProxyDestination-BB": "",
// There is a proxy option that allows users to save copies of various game // files on the server side. If you have external clients connecting to your // server, you can disable this option to prevent clients from generating // files on the server side which they will never be able to access. "ProxyAllowSaveFiles": true,
// By default, the interactive shell runs if stdin is a terminal, and doesn't // run if it's not. This option, if present, overrides that behavior. // "RunInteractiveShell": false,
// Specify which kinds of logging you want to be enabled. This allows you to // make the terminal more or less noisy when players are connected, so you can // see only the log messages you care about. The log levels are, in decreasing // order of verbosity, "debug", "info", "warning", "error", and "disabled". "LogLevels": { // AX messages are messages sent to the terminal with the $ax command. "AXMessages": "info", // Channel exceptions are messages about clients disconnecting unexpectedly, // or other unexpected network-level events. "ChannelExceptions": "info", // Client messages describe events that are specific to a single client's // connection or game state. "Clients": "info", // Command data messages show the raw data for all commands sent and // received, on both the game server and proxy server. If stderr is a // terminal, these messages are colored as well; green is for commands sent // by the client, yellow is for commands sent by newserv, and red is for // commands sent by the remote server (for proxy server sessions). "CommandData": "info", // Config messages describe server-wide events, and generally only occur // during the startup procedure. "Config": "info", // DNS server messages describe erroneous queries that the DNS server does // not respond to. Normal DNS queries do not generate any log messages. "DNSServer": "info", // Function compiler messages describe PowerPC function call assembly // events, which generally only occur during startup. "FunctionCompiler": "info", // IP stack simulator messages describe clients connecting and disconnecting // via the IP stack interface, and errors that occur at the simulated // network level within the simulator. This log is fairly verbose at the // info level, so by default we suppress those messages. "IPStackSimulator": "warning", // License manager messages describe the creation of new license files. "LicenseManager": "info", // Lobby messages describe creation and deletion of lobbies and games, as // well as item tracking events within games. "Lobbies": "info", // Patch file index messages describe finding and preloading the patch files // available for download to BB and PC clients. "PatchFileIndex": "info", // Player data messages describe the loading and saving of player and // account data files. "PlayerData": "info", // Proxy server messages describe clients connecting and disconnecting from // the proxy server, as well as events that occur in each session. "ProxyServer": "info", // Replay messages are generated when replaying a session log (usually // during functional testing). "Replay": "info", // Game server messages describe clients connecting and disconnecting from // the game server. "GameServer": "info", // Static game data messages describe the loading of any kind of game data. "StaticGameData": "info", },
// By default, the server only allows users who are registered in the license // file to connect. By enabling this option, all users will be allowed to // connect. Each time a user connects with an unregistered license (serial // number / access key combination, or username/password combination on BB), a // temporary license is created for them, which lasts until the server is // shut down. This license is not saved to the license file. For BB, player // and account data is still saved on the server, even for users with // temporary licenses. "AllowUnregisteredUsers": false,
// User to run the server as. If present, newserv will attempt to switch to // this user's permissions after loading its configuration and opening // listening sockets. The special value $SUDO_USER causes newserv to look up // the desired username in the $SUDO_USER variable instead. // "User": "$SUDO_USER",
// Information menu contents. Each entry is a 3-list of
// [title, short description, full contents]. In the short description and
// full contents, you can use PSO escape codes with the $ character (for
// example, $Cx for colors).
"InformationMenuContents": [
["Text colors", "$C7Display color values", "These values can be used to color text in\nsome situations, with escape codes like %sC6.\n\n$C0Color 0$C7 - Black\n$C1Color 1$C7 - Blue\n$C2Color 2$C7 - Green\n$C3Color 3$C7 - Cyan\n$C4Color 4$C7 - Red\n$C5Color 5$C7 - Purple\n$C6Color 6$C7 - Yellow\n$C7Color 7$C7 - White\n$C8Color 8$C7 - Pink\n$C9Color 9$C7 - Violet\n$CGColor G$C7 - Orange Pulse"],
["Lobby commands", "$C7Display commands\nfor use in the\nlobby", "Lobby commands: you must be a moderator to use\nthese commands.\n\n%sallevent
// Welcome message. If not blank, this message will be shown to PSO GC users // upon first connecting. (If this is blank, they will be taken directly to // the main menu instead.) The welcome message is never shown to PSO PC or PSO // BB users, though the patch server message (below) can be used for a similar // purpose. "WelcomeMessage": "",
// Patch server message. If not blank, these messages will be shown to PSO PC // and PSO BB users (respectively) when they connect to the patch server. Note // that PSO PC displays the text in a Windows edit control instead of using // PSO's normal text renderer, so linebreaks must be \r\n and color escapes // (e.g. $C6) do not work in PCPatchServerMessage. "PCPatchServerMessage": "newserv patch server\r\n\r\nThis server is not affiliated with, sponsored by, or in any other way connected to SEGA or Sonic Team, and is owned and operated completely independently.", "BBPatchServerMessage": "$C7newserv patch server\n\nThis server is not affiliated with, sponsored by, or in any\nother way connected to SEGA or Sonic Team, and is owned\nand operated completely independently.",
// Default lobby event. If set, this sets the holiday event in all lobbies at // server start time, as well as the pre-lobby holiday event. The event can be // changed in each lobby independently with the $event command, or in all // lobbies with the $allevent command. When a game is created, it inherits the // holiday event from the lobby from which it was created. // The value for this field can be a string like "xmas" (the values have the // same meanings as the $event command), or an integer. // "LobbyEvent": "xmas", // Episode 3 menu song. If set, Episode 3 clients will hear this song when // they are at the newserv main menu. If set, this value must be an integer. // "Episode3MenuSong": 0,
// Episode 3 battle behavior flags. When set to zero, battles behave as they
// did on the original Sega servers. Combinations of behaviors can be enabled
// by bitwise-OR'ing together the following values:
// 0x00000001 => Disable deck verification entirely
// 0x00000002 => Disable owned card count check during deck verification (this
// enables the use of the non-saveable Have All Cards Action
// Replay code, but retains all the other validity checks)
// 0x00000004 => Allow cards with the D1 and D2 ranks to be used in battle
// 0x00000008 => Disable overall and per-phase battle time limits, regardless
// of the values chosen during battle rules setup
// 0x00000010 => Enable debug messages in Episode 3 games and battles
// 0x00000020 => Load card text as well as card definitions (has no behavioral
// effects in games; this flag exists to be used internally when
// the --show-ep3-data option is given)
// 0x00000040 => Enable battle recording (after a battle, players can save the
// recording with the $saverec
// Episode 3 card auction configuration. CardAuctionPoints specifies how many // points each player gets when they join an auction (may be anywhere from 0 // to 65535, but a somewhat-low number is generally good). CardAuctionSize // specifies how many cards will be present in each auction; if this is a // list, then the number of cards is random in the specified range. Finally, // CardAuctionContents is a dictionary specifying the relative frequencies and // costs of each card in the auction pool. Relative frequencies are 64-bit // integers, but should generally be less than 0x0100000000000000 to avoid // excessive bias. There is no fixed summation bound for relative frequencies. // Cards are always drawn (with replacement) from the same distribution. "CardAuctionPoints": 30, "CardAuctionSize": [2, 4], "CardAuctionPool": { // "CardName": [RelativeFrequency, MinPrice] "Red Sword": [500, 8], "Hildeblue": [400, 10], "Grants": [300, 15], "Megid": [700, 6], },
// Whether to enable patches on Episode 3 USA. This functionality depends on // exploiting a bug in Episode 3, and while it seems to work reliably on // Dolphin, it hasn't been tested on a real GameCube. So, newserv doesn't // enable Episode 3 patches by default; it only does so if this option is on. // "EnableEpisode3SendFunctionCall": true,
// Whether to enable certain exception handling. Disabling this is generally // only useful for debugging newserv itself, and it should usually be left on // (which is the default behavior). "CatchHandlerExceptions": true,
// By default, the server keeps track of items in all games, even for versions // other than Blue Burst. This enables use of the $what command, as well as // protection against item duplication cheats (the cheater is disconnected // instead of the other players). If item tracking causes any issues, it can // be turned off here. This option has no effect on Blue Burst games - item // tracking is always enabled for them. "EnableItemTracking": true,
// Item drop rates for non-rare items in BB games. For each type (boxes or // enemies), all the categories must add up to a number less than 0x100000000. // Each number is a probability (out of 0x100000000) that the given item type // will appear. "CommonItemDropRates-Enemy": [ 0x03000000, // material 0x20000000, // equipment 0x06000000, // technique disk 0x01800000, // scape doll 0x06000000, // grinder 0x10000000, // atomizers, etc. 0x20000000, // mates/fluids 0x40000000, // meseta ], "CommonItemDropRates-Box": [ 0x00800000, // material 0x20000000, // equipment 0x01000000, // technique disk 0x02000000, // scape doll 0x08000000, // grinder 0x10000000, // atomizers, etc. 0x20000000, // mates/fluids 0x80000000, // meseta ],
// Unit drop rates for non-rare items in BB games. Each entry is an array of // unit types, one array per difficulty. Each entry in the array has an equal // probability of dropping. If a unit type is 0xFF, then no item will drop. "CommonUnitTypes": [ // normal [0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x0C, 0x0C, 0x0C, 0x10, 0x10, 0x10, 0x14, 0x14, 0x14, 0x18, 0x18, 0x18, 0x21, 0x21, 0x21, 0x24, 0x24, 0x24, 0x27, 0x27, 0x27, 0x2A, 0x2A, 0x2A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF], // hard [0x01, 0x01, 0x05, 0x05, 0x09, 0x09, 0x0D, 0x0D, 0x11, 0x11, 0x15, 0x15, 0x19, 0x19, 0x21, 0x21, 0x24, 0x24, 0x27, 0x27, 0x2A, 0x2A, 0x30, 0x30, 0x33, 0x33, 0x36, 0x36, 0x39, 0x39, 0x3C, 0x3C, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF], // very hard [0x02, 0x02, 0x06, 0x06, 0x0A, 0x0A, 0x0E, 0x0E, 0x12, 0x12, 0x16, 0x16, 0x1A, 0x1A, 0x22, 0x22, 0x25, 0x25, 0x28, 0x28, 0x2B, 0x2B, 0x31, 0x31, 0x34, 0x34, 0x37, 0x37, 0x3A, 0x3A, 0x3D, 0x3D, 0x3F, 0x3F, 0x41, 0x41, 0x42, 0x42, 0x43, 0x43, 0x44, 0x44, 0x45, 0x45, 0x46, 0x46, 0x47, 0x47, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF], // ultimate [0x02, 0x02, 0x06, 0x06, 0x0A, 0x0A, 0x0E, 0x0E, 0x12, 0x12, 0x16, 0x16, 0x1A, 0x1A, 0x23, 0x23, 0x26, 0x26, 0x29, 0x29, 0x2C, 0x2C, 0x31, 0x31, 0x34, 0x34, 0x37, 0x37, 0x3A, 0x3A, 0x3D, 0x3D, 0x3F, 0x3F, 0x41, 0x41, 0x42, 0x42, 0x43, 0x43, 0x44, 0x44, 0x45, 0x45, 0x46, 0x46, 0x47, 0x47, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF], ], }
There's a quote missing at the beginning of the DNSServerPort line.
These kinds of things are easy to miss; perhaps I should spend some time making JSON parse errors easier to understand.
There's a quote missing at the beginning of the DNSServerPort line.
These kinds of things are easy to miss; perhaps I should spend some time making JSON parse errors easier to understand.
I had figured it out right when you replied haha. Thank you for helping. That would be nice for new people getting into the project. Also linuxs default has port 53 is in use so it'd probably be good to add that in the Readme. One last thing though when I had set up newserv around a year ago the last issue I had that ultimately stopped me from doing further bug testing was that some of my friends hunter cards numbers would randomly reset. This caused them not being able to login back into schthack server.. This also happened to me a few times but i had backups. Unfortunately they didnt. Was this bug ever fixed?
EDIT: make sure you have all of the required "get apt installs" before building from source. If building from source and you get any errors make sure you get all the requirements then delete the folders, extract from zip, and try again. If you don't you'll run into errors.
So i was able to build PHOSG with no errors. Running cmake . in Newserv directory i get the error message
"CMake Warning at CMakeLists.txt:104 (message): libresource_file not found; disabling patch support"
Ive already installed Libevent and cmake. When I try to run $ sudo ./newserv i get back
Loading configuration terminate called after throwing an instance of 'JSONObject::parse_error' what(): unknown root sentinel; pos=665
Im running on Ubuntu 22.04.1 LTS.