forked from SoDOff-Project/sodoff
update README, add sample files for localhosting (#2)
* update README, add sample files for localhosting * fix port number in sample DWADragonsMain.xml * update readme * update itemid schema info * update appsettings comments --------- Co-authored-by: Spirtix <michal.prazak1@gmail.com>
This commit is contained in:
parent
97503cc389
commit
4662bbd629
71
README.md
71
README.md
@ -1,33 +1,64 @@
|
||||
# SoD-Off - School of Dragons, Offline
|
||||
# SoDOff - School of Dragons, Offline
|
||||
|
||||
On 7th June, 2023, School of Dragons announced they were "sunsetting" the game, and turning the servers off on the 30th of June.
|
||||
On 7th June 2023, School of Dragons announced they were "sunsetting" the game, and turning the servers off on the 30th of June.
|
||||
At that time, SoDOff was born. Currently, it is an almost complete implementation of the School of Dragons API server (and some other JS games).
|
||||
It allows you to run SoD offline as well as host private online servers.
|
||||
|
||||
## Discord
|
||||
[](https://discord.gg/bqHtMRbhM3)
|
||||
We also provide MMO server implementation for SoD (https://github.com/SoDOff-Project/sodoff-mmo).
|
||||
It is recommended to use the MMO server even when offline, as some aspects of the single player game depend on MMO.
|
||||
|
||||
## License
|
||||
|
||||
SoDOff is open source, distributed under the [AGPL](LICENSE) license.
|
||||
This license does not cover resources obtained from the game or from responses of the original API distributed with the API server, especially:
|
||||
`missions.xml`, `items.xml`, `allranks.xml` and `store.xml` files from the `src/Resources` directory and files inside the `src/assets` directory.
|
||||
|
||||
## Getting started
|
||||
|
||||
For the first time setup, run the following command:
|
||||
To build the API server from sources, you'll need the dotnet 6.0 SDK. Simply run the following command to build and start the server:
|
||||
|
||||
```
|
||||
dotnet restore
|
||||
```
|
||||
|
||||
Then run the server as follows:
|
||||
|
||||
```
|
||||
# run mitmproxy to redirect requests to the app
|
||||
mitmproxy -s mitm-redirect.py
|
||||
|
||||
# run the server
|
||||
dotnet run --project src/sodoff.csproj
|
||||
```
|
||||
|
||||
Then run School of Dragons.
|
||||
### Modifying the Client
|
||||
|
||||
To play the game you need to modify the game client to use `http://localhost:5001/.com/DWADragonsUnity/` instead of `http://media.jumpstart.com/DWADragonsUnity/`.
|
||||
You can do this by editing `DOMain_Data/resources.assets` in a hex-editor and swapping the URLs.
|
||||
|
||||
### Server Configuration
|
||||
|
||||
Most of the server configuration is stored in `appsettings.json`. Check out the "// ..." keys in there for descriptions of different options.
|
||||
|
||||
#### Supported Clients
|
||||
|
||||
For each supported client version, there must be a corresponding file located at `assets/DWADragonsUnity/{PLATFORM}/{VERSION}/DWADragonsMain.xml`.
|
||||
By default (modifiable in appsettings.json), files for version 2.5.0 and newer will be automatically encrypted to meet the client's requirements.
|
||||
|
||||
A sample file is provided for `{PLATFORM} = WIN`, `{VERSION} = 3.31.0`.
|
||||
It assumes that the server address are `localhost:5000` (API) and `localhost:5001` (assets).
|
||||
|
||||
#### Asset Server
|
||||
|
||||
Various settings for the asset server are customizable, with the key one being `ProviderURL`, which specifies the source for downloading assets in `partial` mode. By default, it's configured to use archive.org
|
||||
Please do not abuse the archive.org server, do not disable the `UseCache` option and do not delete the contents of the `asset-cache` directory.
|
||||
|
||||
#### Listening address/port
|
||||
|
||||
By default, the server listens on all IPv4 and IPv6 addresses on ports 5000 (API) and 5001 (assets).
|
||||
You can tweak this in `appsettings.json`, but it might also mean adjusting `DWADragonsMain.xml` and updating clients to reflect the changes in the asset server address.
|
||||
|
||||
### Server Side Modding
|
||||
|
||||
The server supports server side modifications, which includes adding new items and putting them in the store without having to modify the server source code.
|
||||
For more information, check out [src/mods/README-MODDING.md](src/mods/README-MODDING.md).
|
||||
|
||||
## Status
|
||||
|
||||
### What works
|
||||
|
||||
Almost everything:
|
||||
|
||||
- register/login
|
||||
- create profile
|
||||
- list profiles
|
||||
@ -41,6 +72,14 @@ Then run School of Dragons.
|
||||
- minigames
|
||||
- MMO (using sodoff-mmo)
|
||||
|
||||
### What doesn't work
|
||||
|
||||
- play as Guest
|
||||
- friends
|
||||
- clans
|
||||
- in-game messaging system (Terrible Mail)
|
||||
|
||||
|
||||
### Methods
|
||||
|
||||
#### Fully implemented
|
||||
|
@ -1,15 +0,0 @@
|
||||
{
|
||||
"Kestrel": {
|
||||
"EndPoints": {
|
||||
"Http": {
|
||||
"Url": "http://localhost:5000"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
}
|
||||
}
|
37
src/appsettings.README.json
Normal file
37
src/appsettings.README.json
Normal file
@ -0,0 +1,37 @@
|
||||
{
|
||||
"Kestrel": {
|
||||
"EndPoints": {
|
||||
"Http": {
|
||||
"Url": "Listening URL for the API server - allows setting the listening IP address and port number -> http://ip.ip.ip.ip:port/ or http://[ip::ip]:port/"
|
||||
}
|
||||
}
|
||||
},
|
||||
"AssetServer": {
|
||||
"Enabled": true,
|
||||
"ListenIP": ,
|
||||
"Port": ",
|
||||
"URLPrefix": "",
|
||||
"Mode":
|
||||
"ProviderURL":
|
||||
"AutoEncryptRegexp":
|
||||
"AutoEncryptKey": ,
|
||||
"SubstituteMissingLocalAssets": ,
|
||||
"UseCache":
|
||||
},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
}
|
||||
|
||||
"AssetServer": {
|
||||
"Enabled": true,
|
||||
"Port": 881, //Only for the asset server
|
||||
"URLPrefix": "a.com", //
|
||||
"Mode": "partial", //
|
||||
"ProviderURL": "https://media.sodoff.spirtix.com/", //
|
||||
"SubstituteMissingLocalAssets": true //
|
||||
}
|
@ -2,10 +2,43 @@
|
||||
"Kestrel": {
|
||||
"EndPoints": {
|
||||
"Http": {
|
||||
"Url": "http://localhost:5000"
|
||||
"// Url": "Listening URL for the API server - allows setting the listening IP address and port number -> http://ip.ip.ip.ip:port/ or http://[ip::ip]:port/",
|
||||
"Url": "http://*:5000"
|
||||
}
|
||||
}
|
||||
},
|
||||
"AssetServer": {
|
||||
"// Enabled": "Set to false to disable the built-in asset server",
|
||||
"Enabled": true,
|
||||
|
||||
"// ListenIP": "Listening IP address for the asset server, default is '*' which represents all IPv4 and IPv6 addresses",
|
||||
"ListenIP": "*",
|
||||
|
||||
"// Port": "Listening port number for the asset server. Should be different than for the server API",
|
||||
"Port": 5001,
|
||||
|
||||
"// URLPrefix": "Extra prefix in the URL; omitted while retrieving the path from the requested URL. For example, if set to '.com', then a request to http://localhost/.com/abc will return the 'abc' file from the assets folder",
|
||||
"URLPrefix": ".com",
|
||||
|
||||
"// Mode": "Two modes: full - everything is local, partial - downloads assets from ProviderURL if not found locally",
|
||||
"Mode": "partial",
|
||||
|
||||
"// ProviderURL": "Proxy URL used in partial mode",
|
||||
"ProviderURL": "https://web.archive.org/web/20230713000000id_/https://media.jumpstart.com/",
|
||||
|
||||
"// AutoEncryptRegexp": "Regular expression matched against the URL local part. If there's a match, the returned file will be encrypted on-the-fly using 3DES with AutoEncryptKey as the key",
|
||||
"AutoEncryptRegexp": "/(2\\.[5-9]|2\\.[1-9][0-9]|3\\.[0-9]+)\\.[0-9]/DWADragonsMain.xml$",
|
||||
|
||||
"// AutoEncryptKey": "3DES key for encrypted files",
|
||||
"AutoEncryptKey": "C92EC1AA-54CD-4D0C-A8D5-403FCCF1C0BD",
|
||||
|
||||
"// SubstituteMissingLocalAssets": "When true, if the game requests a High asset and only Low is available, it will return Low instead of downloading (partial mode) or error 404 (full mode)",
|
||||
"SubstituteMissingLocalAssets": true,
|
||||
|
||||
"// UseCache": "When true, downloading assets in partial mode will be stored in assets-cache for use in subsequent requests",
|
||||
"UseCache": true
|
||||
},
|
||||
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
|
222
src/assets/DWADragonsUnity/WIN/3.31.0/DWADragonsMain.xml
Normal file
222
src/assets/DWADragonsUnity/WIN/3.31.0/DWADragonsMain.xml
Normal file
@ -0,0 +1,222 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ProductConfig>
|
||||
<!-- API SERVER CONFIG -->
|
||||
|
||||
<ContentServerURL>http://localhost:5000/ContentWebService.asmx/</ContentServerURL>
|
||||
<ContentServerV2URL>http://localhost:5000/V2/ContentWebService.asmx/</ContentServerV2URL>
|
||||
<ContentServerV3URL>http://localhost:5000/v3/ContentWebService.asmx/</ContentServerV3URL>
|
||||
<ContentServerV4URL>http://localhost:5000/V4/ContentWebService.asmx/</ContentServerV4URL>
|
||||
<TrackServerURL>http://localhost:5000/ContentWebService.asmx/</TrackServerURL>
|
||||
|
||||
<ItemStoreServerURL>http://localhost:5000/ItemStoreWebService.asmx/</ItemStoreServerURL>
|
||||
<AchievementServerURL>http://localhost:5000/AchievementWebService.asmx/</AchievementServerURL>
|
||||
<AchievementServerV2URL>http://localhost:5000/V2/AchievementWebService.asmx/</AchievementServerV2URL>
|
||||
|
||||
<MembershipServerURL>http://localhost:5000/MembershipWebService.asmx/</MembershipServerURL>
|
||||
<AuthenticationServerURL>http://localhost:5000/AuthenticationWebService.asmx/</AuthenticationServerURL>
|
||||
<AuthenticationServerV3URL>http://localhost:5000/v3/AuthenticationWebService.asmx/</AuthenticationServerV3URL>
|
||||
<RegistrationServerV3URL>http://localhost:5000/v3/RegistrationWebService.asmx/</RegistrationServerV3URL>
|
||||
<RegistrationServerV4URL>http://localhost:5000/V4/RegistrationWebService.asmx/</RegistrationServerV4URL>
|
||||
<UserServerURL>http://localhost:5000/ProfileWebService.asmx/</UserServerURL>
|
||||
|
||||
<ConfigurationServerURL>http://localhost:5000/ConfigurationWebService.asmx/</ConfigurationServerURL>
|
||||
<RatingServerV2URL>http://localhost:5000/V2/Ratingwebservice.asmx/</RatingServerV2URL>
|
||||
<ChallengeServerURL>http://localhost:5000/ChallengeWebService.asmx/</ChallengeServerURL>
|
||||
<MessagingServerURL>http://localhost:5000/MessagingWebService.asmx/</MessagingServerURL>
|
||||
|
||||
<!-- not implemented - social system -->
|
||||
<GroupServerURL>http://localhost:5000/GroupWebService.asmx/</GroupServerURL>
|
||||
<GroupServerV2URL>http://localhost:5000/V2/GroupWebService.asmx/</GroupServerV2URL>
|
||||
<MessageServerURL>http://localhost:5000/MessageWebService.asmx/</MessageServerURL>
|
||||
<MessageServerV2URL>http://localhost:5000/v2/MessageWebService.asmx/</MessageServerV2URL>
|
||||
<MessageServerV3URL>http://localhost:5000/v3/MessageWebService.asmx/</MessageServerV3URL>
|
||||
<InviteServerV2URL>http://localhost:5000/v2/InviteFriendWebService.asmx/</InviteServerV2URL>
|
||||
<ChatServerURL>http://localhost:5000/ChatWebService.asmx/</ChatServerURL>
|
||||
|
||||
<!-- unused -->
|
||||
<AnalyticsServerURL>http://localhost/AnalyticsWebService.asmx/</AnalyticsServerURL>
|
||||
<MissionServerURL>http://localhost/MissionWebService.asmx/</MissionServerURL>
|
||||
<AvatarWebServiceURL>http://localhost/AvatarWebService.asmx/</AvatarWebServiceURL>
|
||||
<RatingServerURL>http://localhost/RatingWebService.asmx/</RatingServerURL>
|
||||
<ScoreServerURL>http://localhost/ScoreWebService.asmx/</ScoreServerURL>
|
||||
<MobileStoreURL>http://localhost/MobileStoreWebService.asmx/</MobileStoreURL>
|
||||
<SubscriptionServerURL>http://localhost/SubscriptionWebService.asmx/</SubscriptionServerURL>
|
||||
<PaymentServerURL>http://localhost/PaymentWebService.asmx/</PaymentServerURL>
|
||||
<PaymentServerV2URL>http://localhost/V2/PaymentWebService.asmx/</PaymentServerV2URL>
|
||||
<PrizeCodeServerURL>http://localhost/PrizeCodeWebService.asmx/</PrizeCodeServerURL>
|
||||
<PrizeCodeServerV2URL>http://localhost/Common/V2/PrizeCodeWebService.asmx/</PrizeCodeServerV2URL>
|
||||
<CalendarServerURL>http://localhost/ContentServer/CalendarWebService.asmx/</CalendarServerURL>
|
||||
<PushNotificationURL>http://localhost/RegistrationWebService.asmx/</PushNotificationURL>
|
||||
<LocaleServerURL>http://localhost/LocaleService.asmx/</LocaleServerURL>
|
||||
<LocaleServerV2URL>http://localhost/V2/LocaleWebService.asmx/</LocaleServerV2URL>
|
||||
<TokenExpiredURL>http://localhost/launch.aspx</TokenExpiredURL>
|
||||
|
||||
<!-- SMARTFOX SERVER CONFIG -->
|
||||
|
||||
<MMOServer>localhost</MMOServer>
|
||||
<MMOServerPort>9933</MMOServerPort>
|
||||
|
||||
<MMOServerVersion>S2X</MMOServerVersion>
|
||||
<MMOIdleTimeout>240</MMOIdleTimeout>
|
||||
<MMODebug>false</MMODebug>
|
||||
<MMOHttpPort>8080</MMOHttpPort>
|
||||
<MMOUseBlueBox>false</MMOUseBlueBox>
|
||||
<MMOBlueBoxPollingRate>500</MMOBlueBoxPollingRate>
|
||||
<MMOUDPPollingRate>500</MMOUDPPollingRate>
|
||||
<ZoneInfoUpdateInterval>300000</ZoneInfoUpdateInterval>
|
||||
|
||||
<!-- ASSET SERVER CONFIGURATION -->
|
||||
|
||||
<RootURL>http://localhost:5001/.com/DWADragonsUnity/WIN/{Version}/Mid/</RootURL>
|
||||
<ContentDataURL>http://localhost:5001/.com/DWADragonsUnity/WIN/{Version}/Mid/contentdata</ContentDataURL>
|
||||
<DataURL>http://localhost:5001/.com/DWADragonsUnity/WIN/{Version}/Mid/data</DataURL>
|
||||
<SceneURL>http://localhost:5001/.com/DWADragonsUnity/WIN/{Version}/Mid/scene</SceneURL>
|
||||
<SharedDataURL>http://localhost:5001/.com/DWADragonsUnity/WIN/{Version}/Mid/shareddata</SharedDataURL>
|
||||
<SoundURL>http://localhost:5001/.com/DWADragonsUnity/WIN/{Version}/Mid/sound</SoundURL>
|
||||
<MoviesURL>http://localhost:5001/.com/DWADragonsUnity/WIN/{Version}/Mid/movies</MoviesURL>
|
||||
|
||||
<LocalRootURL>.</LocalRootURL>
|
||||
<LocalContentDataURL>./contentdata</LocalContentDataURL>
|
||||
<LocalDataURL>./data</LocalDataURL>
|
||||
<LocalSceneURL>./scene</LocalSceneURL>
|
||||
<LocalSharedDataURL>./shareddata</LocalSharedDataURL>
|
||||
<LocalSoundURL>./sound</LocalSoundURL>
|
||||
<LocalMoviesURL>./movies</LocalMoviesURL>
|
||||
|
||||
<AppURL>.</AppURL>
|
||||
<Token></Token>
|
||||
|
||||
<LogEventServer>127.0.0.1</LogEventServer>
|
||||
|
||||
<ConsolePassword>6c955c0b5efd67396e950f56542e86b6</ConsolePassword>
|
||||
<UnityCacheSize>2000000000</UnityCacheSize>
|
||||
<Manifests>dwavatar</Manifests>
|
||||
<EnablePlayfab>false</EnablePlayfab>
|
||||
|
||||
<TokenExpiredText>
|
||||
<Text>Your Viking is now idle. Click on the OK button to reconnect.</Text>
|
||||
<ID>42286</ID>
|
||||
</TokenExpiredText>
|
||||
<LoginFromOtherLocationText>
|
||||
<Text>You have been logged out because you have signed in from another computer or device.</Text>
|
||||
<ID>9000</ID>
|
||||
</LoginFromOtherLocationText>
|
||||
<DisconnectText>
|
||||
<Text>Your Viking is now idle. Click on the OK button to reconnect.</Text>
|
||||
<ID>9001</ID>
|
||||
</DisconnectText>
|
||||
<DisconnectTitleText>
|
||||
<Text>Notification</Text>
|
||||
<ID>10674</ID>
|
||||
</DisconnectTitleText>
|
||||
<ProductRuleFailedText>
|
||||
<Text>Download failed, please retry! Possible invalid DES secret in client!</Text>
|
||||
<ID>42287</ID>
|
||||
</ProductRuleFailedText>
|
||||
|
||||
<PlatformSettings Name="default">
|
||||
<MaxMMOData DefaultMaxMMO="50" DefaultMaxFullMMO="50" />
|
||||
<GraphicsSettings>
|
||||
<Texture>
|
||||
<Default>Mid</Default>
|
||||
<Available>Low,Mid,High</Available>
|
||||
</Texture>
|
||||
<Shadow>
|
||||
<Default>High</Default>
|
||||
<Available>Off,Low,Mid,High</Available>
|
||||
</Shadow>
|
||||
<Effects>
|
||||
<Default>Low</Default>
|
||||
<Available>Off,Low,Mid,High</Available>
|
||||
</Effects>
|
||||
</GraphicsSettings>
|
||||
<DownloadTextureSize>128</DownloadTextureSize>
|
||||
</PlatformSettings>
|
||||
|
||||
<Locale>
|
||||
<ID>en-US</ID>
|
||||
</Locale>
|
||||
<Locale>
|
||||
<ID>es-MX</ID>
|
||||
<Variant>es</Variant>
|
||||
<Variant>es-ES</Variant>
|
||||
<Variant>es-LA</Variant>
|
||||
<Variant>es-US</Variant>
|
||||
<Variant>es_ES</Variant>
|
||||
<Variant>es_LA</Variant>
|
||||
<Variant>es_MX</Variant>
|
||||
<Variant>es_US</Variant>
|
||||
<Variant>spanish</Variant>
|
||||
</Locale>
|
||||
<Locale>
|
||||
<ID>pt-BR</ID>
|
||||
<Variant>pt</Variant>
|
||||
<Variant>pt-PT</Variant>
|
||||
<Variant>pt_BR</Variant>
|
||||
<Variant>pt_PT</Variant>
|
||||
<Variant>brazilian</Variant>
|
||||
</Locale>
|
||||
<Locale>
|
||||
<ID>zh-CN</ID>
|
||||
<Variant>zh</Variant>
|
||||
<Variant>zh-Hans</Variant>
|
||||
<Variant>zh_CN</Variant>
|
||||
<Variant>zh_Hans</Variant>
|
||||
<Variant>schinese</Variant>
|
||||
</Locale>
|
||||
<Locale>
|
||||
<ID>de-DE</ID>
|
||||
<Variant>de</Variant>
|
||||
<Variant>de-CH</Variant>
|
||||
<Variant>de_DE</Variant>
|
||||
<Variant>de_CH</Variant>
|
||||
<Variant>german</Variant>
|
||||
</Locale>
|
||||
<Locale>
|
||||
<ID>fr-CA</ID>
|
||||
<Variant>fr</Variant>
|
||||
<Variant>fr-FR</Variant>
|
||||
<Variant>fr-CH</Variant>
|
||||
<Variant>fr_CA</Variant>
|
||||
<Variant>fr_FR</Variant>
|
||||
<Variant>fr_CH</Variant>
|
||||
<Variant>french</Variant>
|
||||
</Locale>
|
||||
<Locale>
|
||||
<ID>ko-KR</ID>
|
||||
<Variant>ko</Variant>
|
||||
<Variant>ko_KR</Variant>
|
||||
<Variant>koreana</Variant>
|
||||
</Locale>
|
||||
<Locale>
|
||||
<ID>ru-RU</ID>
|
||||
<Variant>ru</Variant>
|
||||
<Variant>ru_RU</Variant>
|
||||
<Variant>russian</Variant>
|
||||
</Locale>
|
||||
<Locale>
|
||||
<ID>th-TH</ID>
|
||||
<Variant>th</Variant>
|
||||
<Variant>th-TH</Variant>
|
||||
<Variant>th_TH</Variant>
|
||||
</Locale>
|
||||
<Locale>
|
||||
<ID>ar-EG</ID>
|
||||
<Variant>ar</Variant>
|
||||
<Variant>ar-DZ</Variant>
|
||||
<Variant>ar-BH</Variant>
|
||||
<Variant>ar-IQ</Variant>
|
||||
<Variant>ar-JO</Variant>
|
||||
<Variant>ar-KW</Variant>
|
||||
<Variant>ar-LB</Variant>
|
||||
<Variant>ar-LY</Variant>
|
||||
<Variant>ar-MA</Variant>
|
||||
<Variant>ar-OM</Variant>
|
||||
<Variant>ar-QA</Variant>
|
||||
<Variant>ar-SA</Variant>
|
||||
<Variant>ar-SY</Variant>
|
||||
<Variant>ar-TN</Variant>
|
||||
<Variant>ar-AE</Variant>
|
||||
<Variant>ar-YE</Variant>
|
||||
</Locale>
|
||||
</ProductConfig>
|
408
src/assets/ServerDown.xml
Normal file
408
src/assets/ServerDown.xml
Normal file
@ -0,0 +1,408 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ServerDown>
|
||||
<Down>false</Down>
|
||||
<CudosDown>true</CudosDown>
|
||||
<Message>
|
||||
<ProductGroupID>11</ProductGroupID>
|
||||
<Locale>en-US</Locale>
|
||||
<Title>Update</Title>
|
||||
<!-->For Unplanned Maintenance <-->
|
||||
<!--><Text><![CDATA[
|
||||
Alert! We’ve encountered an unexpected weather delay! Our servers have been covered to protect them. Check back soon.
|
||||
]]>
|
||||
</Text> -->
|
||||
<!-->For Planned Maintenance <-->
|
||||
<Text><![CDATA[
|
||||
The SoDOff server is down because the emulator is being updated. Check back in a few minutes.
|
||||
]]>
|
||||
</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>9</ProductGroupID>
|
||||
<Locale>en-US</Locale>
|
||||
<Title>Update</Title>
|
||||
<!-->For Unplanned Maintenance <-->
|
||||
<!--><Text><![CDATA[
|
||||
Oh no, looks like the Terrible Terrors are at it again! We hid our servers to protect them. Check back soon.
|
||||
]]>
|
||||
</Text> -->
|
||||
<!-->For Planned Maintenance <-->
|
||||
<Text><![CDATA[
|
||||
The SoDOff server is down because the emulator is being updated. Check back in a few minutes.
|
||||
]]>
|
||||
</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>1</ProductGroupID>
|
||||
<Locale>en-US</Locale>
|
||||
<Title>Update</Title>
|
||||
<!-->For Unplanned Maintenance <-->
|
||||
<!--><Text><![CDATA[
|
||||
|
||||
|
||||
|
||||
|
||||
Alert! We’ve encountered an unexpected weather delay! Our servers have been covered to protect them. Check back soon.
|
||||
]]>
|
||||
</Text><-->
|
||||
<!-->For Planned Maintenance <-->
|
||||
<Text><![CDATA[
|
||||
|
||||
|
||||
|
||||
|
||||
The SoDOff server is down because the emulator is being updated. Check back in a few minutes.
|
||||
]]>
|
||||
</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>17</ProductGroupID>
|
||||
<Locale>en-US</Locale>
|
||||
<Title>Update</Title>
|
||||
<!-->For Unplanned Maintenance <-->
|
||||
<!--><Text><![CDATA[
|
||||
|
||||
|
||||
|
||||
|
||||
Alert! We’ve encountered an unexpected weather delay! Our servers have been covered to protect them. Check back soon.
|
||||
]]>
|
||||
</Text><-->
|
||||
<!-->For Planned Maintenance <-->
|
||||
<Text><![CDATA[
|
||||
|
||||
|
||||
|
||||
|
||||
The SoDOff server is down because the emulator is being updated. Check back in a few minutes.
|
||||
]]>
|
||||
</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>15</ProductGroupID>
|
||||
<Locale>en-US</Locale>
|
||||
<Title>Update</Title>
|
||||
<!-->For Unplanned Maintenance <-->
|
||||
<!--><Text><![CDATA[
|
||||
|
||||
|
||||
|
||||
|
||||
Message from Aurrick: I broke the servers but don't worry. I'm stealing new ones. Back soon!
|
||||
]]>
|
||||
</Text><-->
|
||||
<!-->For Planned Maintenance <-->
|
||||
<Text><![CDATA[
|
||||
|
||||
|
||||
|
||||
|
||||
The SoDOff server is down because the emulator is being updated. Check back in a few minutes.
|
||||
]]>
|
||||
</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>14</ProductGroupID>
|
||||
<Locale>en-US</Locale>
|
||||
<Title>Update</Title>
|
||||
<!-->For Unplanned Maintenance <-->
|
||||
<!--><Text><![CDATA[
|
||||
|
||||
|
||||
|
||||
|
||||
Oh no, looks like the Shadow Punks have attacked the server! We hid our servers to protect them. Check back soon.
|
||||
]]>
|
||||
</Text><-->
|
||||
<!-->For Planned Maintenance <-->
|
||||
<Text><![CDATA[
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
The SoDOff server is down because the emulator is being updated. Check back in a few minutes.
|
||||
]]>
|
||||
</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>12</ProductGroupID>
|
||||
<Locale>en-US</Locale>
|
||||
<Title>Update</Title>
|
||||
<!-->For Unplanned Maintenance <-->
|
||||
<!--><Text><![CDATA[
|
||||
|
||||
|
||||
|
||||
|
||||
Oh no! It looks like Dave is at it again with his Medusa Serum! We hid our servers to protect them. Check back soon!
|
||||
]]>
|
||||
</Text><-->
|
||||
<!-->For Planned Maintenance <-->
|
||||
<Text><![CDATA[
|
||||
|
||||
|
||||
|
||||
|
||||
The SoDOff server is down because the emulator is being updated. Check back in a few minutes.
|
||||
]]>
|
||||
</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>9</ProductGroupID>
|
||||
<Locale>es-MX</Locale>
|
||||
<Title>Update</Title>
|
||||
<!-->For Unplanned Maintenance <-->
|
||||
<!--><Text><![CDATA[
|
||||
¡Oh no, parece que el Terrible Terror está haciendo desastres otra vez! Escondimos nuestros servidores para protegerlos.¡Regresa pronto!
|
||||
]]>
|
||||
</Text><-->
|
||||
<!-->For Planned Maintenance <-->
|
||||
<Text><![CDATA[
|
||||
The SoDOff server is down because the emulator is being updated. Check back in a few minutes.
|
||||
]]>
|
||||
</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>9</ProductGroupID>
|
||||
<Locale>pt-BR</Locale>
|
||||
<Title>Update</Title>
|
||||
<!-->For Unplanned Maintenance <-->
|
||||
<!--><Text><![CDATA[
|
||||
Essa não! Pelo jeito, os Terrible Terrors estão aprontando novamente! Escondemos nossos servidores para protegê-los. Volte em breve!
|
||||
]]>
|
||||
</Text><-->
|
||||
<!-->For Planned Maintenance <-->
|
||||
<Text><![CDATA[
|
||||
The SoDOff server is down because the emulator is being updated. Check back in a few minutes.
|
||||
]]>
|
||||
</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>9</ProductGroupID>
|
||||
<Locale>zh-CN</Locale>
|
||||
<Title>Update</Title>
|
||||
<!-->For Unplanned Maintenance <-->
|
||||
<!--><Text><![CDATA[
|
||||
恐怖龙又搞事啦!我们把服务器都藏起来,进行保护。回见喽!
|
||||
]]>
|
||||
</Text><-->
|
||||
<!-->For Planned Maintenance <-->
|
||||
<Text><![CDATA[
|
||||
The SoDOff server is down because the emulator is being updated. Check back in a few minutes.
|
||||
]]>
|
||||
</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>9</ProductGroupID>
|
||||
<Locale>fr-CA</Locale>
|
||||
<Title>Update</Title>
|
||||
<!-->For Unplanned Maintenance <-->
|
||||
<!--><Text><![CDATA[
|
||||
Oh no, looks like the Terrible Terrors are at it again! We hid our servers to protect them. Check back soon!
|
||||
]]>
|
||||
</Text><-->
|
||||
<!-->For Planned Maintenance <-->
|
||||
<Text><![CDATA[
|
||||
The SoDOff server is down because the emulator is being updated. Check back in a few minutes.
|
||||
]]>
|
||||
</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>9</ProductGroupID>
|
||||
<Locale>de-DE</Locale>
|
||||
<Title>Update</Title>
|
||||
<!-->For Unplanned Maintenance <-->
|
||||
<!--><Text><![CDATA[
|
||||
Oh no, looks like the Terrible Terrors are at it again! We hid our servers to protect them. Check back soon.
|
||||
]]>
|
||||
</Text><-->
|
||||
<!-->For Planned Maintenance <-->
|
||||
<Text><![CDATA[
|
||||
The SoDOff server is down because the emulator is being updated. Check back in a few minutes.
|
||||
]]>
|
||||
</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>9</ProductGroupID>
|
||||
<Locale>ko-KR</Locale>
|
||||
<Title>Update</Title>
|
||||
<!-->For Unplanned Maintenance <-->
|
||||
<!--><Text><![CDATA[
|
||||
Oh no, looks like the Terrible Terrors are at it again! We hid our servers to protect them. Check back soon.
|
||||
]]>
|
||||
</Text><-->
|
||||
<!-->For Planned Maintenance <-->
|
||||
<Text><![CDATA[
|
||||
The SoDOff server is down because the emulator is being updated. Check back in a few minutes.
|
||||
]]>
|
||||
</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>9</ProductGroupID>
|
||||
<Locale>ru-RU</Locale>
|
||||
<Title>Update</Title>
|
||||
<!-->For Unplanned Maintenance <-->
|
||||
<!--><Text><![CDATA[
|
||||
Oh no, looks like the Terrible Terrors are at it again! We hid our servers to protect them. Check back soon.
|
||||
]]>
|
||||
</Text><-->
|
||||
<!-->For Planned Maintenance <-->
|
||||
<Text><![CDATA[
|
||||
The SoDOff server is down because the emulator is being updated. Check back in a few minutes.
|
||||
]]>
|
||||
</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>10</ProductGroupID>
|
||||
<Locale>en-US</Locale>
|
||||
<!-->For Unplanned Maintenance <-->
|
||||
<!--><Text>Alert! We’ve encountered an unexpected weather delay! Our servers have been covered to protect them. Check back soon.</Text><-->
|
||||
<!-->For Planned Maintenance <-->
|
||||
<Title>Update</Title>
|
||||
<Text>The SoDOff server is down because the emulator is being updated. Check back in a few minutes.</Text>
|
||||
</Message>
|
||||
<Scheduled>
|
||||
<!-- Date format needs to be MM/dd/yyyy hh:mm AM/PM PST TimeZone-->
|
||||
<StartTime>07/30/2023 11:59 PM</StartTime>
|
||||
<EndTime>12/31/2035 12:00 AM</EndTime>
|
||||
<ModifiedTime>05/30/2023 10:48 AM</ModifiedTime>
|
||||
<Message>
|
||||
<ProductGroupID>12</ProductGroupID>
|
||||
<Locale>en-US</Locale>
|
||||
<Title>NOTICE</Title>
|
||||
<Text>Welcome back dragon rider!
|
||||
|
||||
Welcome to SoDOff Experimental Server!
|
||||
SoDOff is a School of Dragons server emulator. The emulator is in very early stages of development, many features are currently missing. Things can and WILL break!
|
||||
|
||||
Please note that we are not associated with JumpStart or DreamWorks.
|
||||
|
||||
- The SoDOff Team</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>9</ProductGroupID>
|
||||
<Locale>en-US</Locale>
|
||||
<Title>NOTICE</Title>
|
||||
<Text>Welcome back dragon rider!
|
||||
|
||||
Welcome to SoDOff Experimental Server!
|
||||
SoDOff is a School of Dragons server emulator. The emulator is in very early stages of development, many features are currently missing. Things can and WILL break!
|
||||
|
||||
Please note that we are not associated with JumpStart or DreamWorks.
|
||||
|
||||
- The SoDOff Team
|
||||
</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>9</ProductGroupID>
|
||||
<Locale>de-DE</Locale>
|
||||
<Title>NOTIZ</Title>
|
||||
<Text>Welcome back dragon rider!
|
||||
|
||||
Welcome to SoDOff Experimental Server!
|
||||
SoDOff is a School of Dragons server emulator. The emulator is in very early stages of development, many features are currently missing. Things can and WILL break!
|
||||
|
||||
Please note that we are not associated with JumpStart or DreamWorks.
|
||||
|
||||
- The SoDOff Team
|
||||
</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>9</ProductGroupID>
|
||||
<Locale>es-MX</Locale>
|
||||
<Title>Apagado de Servidores</Title>
|
||||
<Text>Welcome back dragon rider!
|
||||
|
||||
Welcome to SoDOff Experimental Server!
|
||||
SoDOff is a School of Dragons server emulator. The emulator is in very early stages of development, many features are currently missing. Things can and WILL break!
|
||||
|
||||
Please note that we are not associated with JumpStart or DreamWorks.
|
||||
|
||||
- The SoDOff Team
|
||||
</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>9</ProductGroupID>
|
||||
<Locale>fr-CA</Locale>
|
||||
<Title>Arrêt des serveurs</Title>
|
||||
<Text>Welcome back dragon rider!
|
||||
|
||||
Welcome to SoDOff Experimental Server!
|
||||
SoDOff is a School of Dragons server emulator. The emulator is in very early stages of development, many features are currently missing. Things can and WILL break!
|
||||
|
||||
Please note that we are not associated with JumpStart or DreamWorks.
|
||||
|
||||
- The SoDOff Team
|
||||
</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>9</ProductGroupID>
|
||||
<Locale>ko-KR</Locale>
|
||||
<Title>서버 셧다운</Title>
|
||||
<Text>Welcome back dragon rider!
|
||||
|
||||
Welcome to SoDOff Experimental Server!
|
||||
SoDOff is a School of Dragons server emulator. The emulator is in very early stages of development, many features are currently missing. Things can and WILL break!
|
||||
|
||||
Please note that we are not associated with JumpStart or DreamWorks.
|
||||
|
||||
- The SoDOff Team
|
||||
</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>9</ProductGroupID>
|
||||
<Locale>pt-BR</Locale>
|
||||
<Title>Desligamento dos servidores</Title>
|
||||
<Text>Welcome back dragon rider!
|
||||
|
||||
Welcome to SoDOff Experimental Server!
|
||||
SoDOff is a School of Dragons server emulator. The emulator is in very early stages of development, many features are currently missing. Things can and WILL break!
|
||||
|
||||
Please note that we are not associated with JumpStart or DreamWorks.
|
||||
|
||||
- The SoDOff Team</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>9</ProductGroupID>
|
||||
<Locale>ru-RU</Locale>
|
||||
<Title>Выключение серверов</Title>
|
||||
<Text>Welcome back dragon rider!
|
||||
|
||||
Welcome to SoDOff Experimental Server!
|
||||
SoDOff is a School of Dragons server emulator. The emulator is in very early stages of development, many features are currently missing. Things can and WILL break!
|
||||
|
||||
Please note that we are not associated with JumpStart or DreamWorks.
|
||||
|
||||
- The SoDOff Team</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>9</ProductGroupID>
|
||||
<Locale>th-TH</Locale>
|
||||
<Title>การปิดเซิร์ฟเวอร์</Title>
|
||||
<Text>Welcome back dragon rider!
|
||||
|
||||
Welcome to SoDOff Experimental Server!
|
||||
SoDOff is a School of Dragons server emulator. The emulator is in very early stages of development, many features are currently missing. Things can and WILL break!
|
||||
|
||||
Please note that we are not associated with JumpStart or DreamWorks.
|
||||
|
||||
- The SoDOff Team</Text>
|
||||
</Message>
|
||||
<Message>
|
||||
<ProductGroupID>9</ProductGroupID>
|
||||
<Locale>zh-CN</Locale>
|
||||
<Title>服务器关闭</Title>
|
||||
<Text>Welcome back dragon rider!
|
||||
|
||||
Welcome to SoDOff Experimental Server!
|
||||
SoDOff is a School of Dragons server emulator. The emulator is in very early stages of development, many features are currently missing. Things can and WILL break!
|
||||
|
||||
Please note that we are not associated with JumpStart or DreamWorks.
|
||||
|
||||
- The SoDOff Team</Text>
|
||||
</Message>
|
||||
<NoticeBeforeInDays>300</NoticeBeforeInDays>
|
||||
<DisplayCount>-1</DisplayCount>
|
||||
</Scheduled>
|
||||
</ServerDown>
|
92
src/mods/README-MODDING.md
Normal file
92
src/mods/README-MODDING.md
Normal file
@ -0,0 +1,92 @@
|
||||
# Server Side Modding
|
||||
|
||||
## Mod Installation
|
||||
|
||||
Place mods as individual directories inside `src/mods`.
|
||||
Each mod folder must contain a `manifest.xml` file at its top directory level.
|
||||
For example: `src/mods/MyFirstMod/manifest.xml`
|
||||
|
||||
## `manifest.xml` syntax
|
||||
|
||||
The root node in `manifest.xml` is `<sodoffmod>`. It can include the following child nodes:
|
||||
|
||||
* `<items>` - item database manipulation
|
||||
* `<store>` - store database manipulation (not implemented yet)
|
||||
* ...
|
||||
|
||||
### Item Database Manipulation
|
||||
|
||||
`<items>` may contain `<item>` child nodes. Each of them defines one item modification. The modification type can be specified by the `action` attribute. The supported values are:
|
||||
|
||||
* `add` - add new item
|
||||
* default if the `action` attribute is not present
|
||||
* `remove` - remove item
|
||||
* `replace` - replace item definition for an existed item ID
|
||||
|
||||
`<item>` may contain the following subnodes:
|
||||
|
||||
* `<id>` - item ID
|
||||
* if not used, the item ID will be retrieved from the item definition within `<data>`
|
||||
* `<storeID>` - specifies the store ID to which the item will be added
|
||||
* can be used multiple times
|
||||
* if not used, the item will not be added to any store
|
||||
* `<data>` - item definition (syntax like the `<I>` node in [src/Resources/items.xml](../Resources/items.xml))
|
||||
* can be omitted in the `remove` action
|
||||
|
||||
#### Example
|
||||
|
||||
* remove the Toothless ticket item (item ID `8034`)
|
||||
* add a Night Furry Egg item (item ID `99999`) and add it to store (store ID `92`, for store description see comment in [src/Resources/store.xml](../Resources/store.xml))
|
||||
* The item ID for new items should be unique to prevent mod collisions. The recommended format is: `prefix * 100000 + private_id`, where:
|
||||
* `prefix` must be grater than 0 to avoid collision with the original game and official SoDOff items
|
||||
* `prefix` is a unique mod author prefix
|
||||
* `private_id` ranges from 0 to 99999 and is available for unrestricted use by the author
|
||||
* for instance, if `prefix = 789` and `private_id = 123`, the item ID would be `78900123`
|
||||
|
||||
```
|
||||
<sodoffmod>
|
||||
<items>
|
||||
<item action="remove">
|
||||
<id>8034</id>
|
||||
</item>
|
||||
<item>
|
||||
<storeID>92</storeID>
|
||||
<data>
|
||||
<an>RS_DATA/DragonEgg.unity3d/PfEggDevilishDervish</an>
|
||||
<at>
|
||||
<k>PetTypeID</k>
|
||||
<v>17</v>
|
||||
<id>99999</id>
|
||||
</at>
|
||||
<c>
|
||||
<cid>456</cid>
|
||||
<cn>Dragons Dragon Egg</cn>
|
||||
<i xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
|
||||
<id>99999</id>
|
||||
</c>
|
||||
<c>
|
||||
<cid>550</cid>
|
||||
<cn>Strike Class Eggs</cn>
|
||||
<i xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
|
||||
<id>99999</id>
|
||||
</c>
|
||||
<ct>0</ct>
|
||||
<ct2>250</ct2>
|
||||
<cp>0</cp>
|
||||
<d>Tame the cunning and mischievous Night Furry in your stables</d>
|
||||
<icn>RS_DATA/DragonEgg.unity3d/IcoEggDevilishDervish</icn>
|
||||
<im>-1</im>
|
||||
<id>99999</id>
|
||||
<itn>Night Furry Egg</itn>
|
||||
<l>false</l>
|
||||
<s>false</s>
|
||||
<as>false</as>
|
||||
<sf>10</sf>
|
||||
<u>-1</u>
|
||||
<rf>0</rf>
|
||||
<rtid>0</rtid>
|
||||
</data>
|
||||
</item>
|
||||
</items>
|
||||
</sodoffmod>
|
||||
```
|
Loading…
x
Reference in New Issue
Block a user