mirror of
https://github.com/SoDOff-Project/sodoff.git
synced 2025-10-11 16:28:50 -07:00
update README, add sample files for localhosting
This commit is contained in:
parent
b7720af330
commit
e3d18df86e
68
README.md
68
README.md
@ -1,33 +1,69 @@
|
||||
# SoD-Off - 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.
|
||||
At that time, SoD-Off was born. Currently, it is an (almost) complete implementation of the API server for SoD (and some other JS games).
|
||||
It allows you to run SoD offline as well as host private online servers.
|
||||
|
||||
We provide also MMO server implementation for SoD (https://github.com/SoDOff-Project/sodoff-mmo).
|
||||
We recommend using it even in offline mode, as some aspects of the single-player game depend on the MMO connection.
|
||||
|
||||
## Discord
|
||||
[](https://discord.gg/bqHtMRbhM3)
|
||||
|
||||
## Licence
|
||||
|
||||
SoD-Off is open source, distributed under [AGPL](LICENSE) license.
|
||||
This license does not cover resources obtained from the game or from responses of original api distributed with the API server, especially:
|
||||
`missions.xml`, `items.xml`, `allranks.xml` and `store.xml` files from `src/Resources` directory and files inside `src/assets` directory.
|
||||
|
||||
|
||||
## Getting started
|
||||
|
||||
For the first time setup, run the following command:
|
||||
You need dotnet 6.0 SDK to build api server from sources. To do this (and start server) just run:
|
||||
|
||||
```
|
||||
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.
|
||||
### Modify client
|
||||
|
||||
To play game you need to modify game client to use `http://localhost:5001/.com/DWADragonsUnity/` instead `http://media.jumpstart.com/DWADragonsUnity/` for getting main XML config file (`DWADragonsMain.xml`).
|
||||
You can do this editing `DOMain_Data/resources.assets` in hex-editor and replace those URLs.
|
||||
|
||||
### Server configuration
|
||||
|
||||
Most configuration of server is set in `appsettings.json`. See `"// ..."` keys in this file for options description.
|
||||
|
||||
#### supported clients
|
||||
|
||||
Each version of supported client need own file `assets/DWADragonsUnity/{PLATFORM}/{VERSION}/DWADragonsMain.xml`.
|
||||
By default (can be changed in `appsettings.json`) files for version 2.5.0 and newer will be automatically encrypted (in accordance with the client's expectations).
|
||||
|
||||
Sample file for `{PLATFORM} = WIN`, `{VERSION} = 3.31.0` is provided.
|
||||
It assumes that the server address is `localhost:5000` (for api) and `localhost:5000` (for assets). When running a public server, the addresses must be adjusted.
|
||||
|
||||
#### asset server
|
||||
|
||||
Multiple options of asset server can be customized. Most important of them is `ProviderURL` indicating the source of assets downloading in `partial` mode.
|
||||
By default it's set to archive.org. Please do not abuse this server (especially do not disable `UseCache` option and do not get rid of `asset-cache` dir content).
|
||||
|
||||
#### listening address/port
|
||||
|
||||
By default server listening on all IPv4 and IPv6 addresses on ports 5000 (api) and 5001 (assets).
|
||||
This can be changed in `appsettings.json`, but it can also requires changes in `DWADragonsMain.xml` and in clients (on change assets server address)
|
||||
|
||||
### Server side modding
|
||||
|
||||
Server support server side modding like adding new items, adding them to store without modification server source.
|
||||
For details see [src/mods/README-MODDING.md](src/mods/README-MODDING.md).
|
||||
|
||||
|
||||
## Status
|
||||
|
||||
### What works
|
||||
|
||||
Almost everything:
|
||||
|
||||
- register/login
|
||||
- create profile
|
||||
- list profiles
|
||||
@ -41,6 +77,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 api server - allow set 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 api server - allow set 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 builtin asset server",
|
||||
"Enabled": true,
|
||||
|
||||
"// ListenIP": "listening ip address for asset server, default * -> all IPv4 and IPv6 addresses",
|
||||
"ListenIP": "*",
|
||||
|
||||
"// Port": "listening port number for asset server (should be different than for serer api)",
|
||||
"Port": 5001,
|
||||
|
||||
"// URLPrefix": "extra prefix in url, is omitted while getting path from requested URL ... if set to .com then request to http://localhost/.com/abc will return assets/abc file",
|
||||
"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": "regexp matched against URL local part -> if match returned file will be encrypted on fly using 3DES with AutoEncryptKey as 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 you only have Low, it will return Low instead of downloading (partial mode) or error 404 (full mode)",
|
||||
"SubstituteMissingLocalAssets": true,
|
||||
|
||||
"// UseCache": "when true store downloading in partial mode assets in assets-cache for use on next 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:5003/.com/DWADragonsUnity/WIN/{Version}/Mid/</RootURL>
|
||||
<ContentDataURL>http://localhost:5003/.com/DWADragonsUnity/WIN/{Version}/Mid/contentdata</ContentDataURL>
|
||||
<DataURL>http://localhost:5003/.com/DWADragonsUnity/WIN/{Version}/Mid/data</DataURL>
|
||||
<SceneURL>http://localhost:5003/.com/DWADragonsUnity/WIN/{Version}/Mid/scene</SceneURL>
|
||||
<SharedDataURL>http://localhost:5003/.com/DWADragonsUnity/WIN/{Version}/Mid/shareddata</SharedDataURL>
|
||||
<SoundURL>http://localhost:5003/.com/DWADragonsUnity/WIN/{Version}/Mid/sound</SoundURL>
|
||||
<MoviesURL>http://localhost:5003/.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 installations
|
||||
|
||||
Place mods as directory inside `src/mods`.
|
||||
The mod directory must contain `manifest.xml` file in the first directory tree level.
|
||||
For example: `src/mods/MyFirstMod/manifest.xml`
|
||||
|
||||
## `manifest.xml` syntax
|
||||
|
||||
Root node for `manifest.xml` is `<sodoffmod>`. It can contain child nodes:
|
||||
|
||||
* `<items>` - item database manipulation
|
||||
* `<store>` - store database manipulation (not implemented yet)
|
||||
* ...
|
||||
|
||||
### item database manipulation
|
||||
|
||||
`<items>` may contain may `<item>` child nodes. Each of them define one item modification. Modification type can be specified by `action` attribute, supported values:
|
||||
|
||||
* `add` - add new item
|
||||
* default when no `action` attribute
|
||||
* `remove` - remove item
|
||||
* `replace` - replace item definition for existed item id
|
||||
|
||||
`<item>` node may contains subnodes:
|
||||
|
||||
* `<id>` - specify item id
|
||||
* if not used item id will be read from item definition in `<data>`
|
||||
* `<storeID>` - specify store id to add item to them
|
||||
* can occur multiple times
|
||||
* if not used item will be not added to any store
|
||||
* `<data>` - item definition (syntax like `<I>` node in [src/Resources/items.xml](../Resources/items.xml))
|
||||
* can be committed in `remove` action`
|
||||
|
||||
#### Example
|
||||
|
||||
* remove Toothless ticket item (item id `8034`)
|
||||
* add Night Furry Egg item (item id `29999`) and add it to store (store id `92`, for store description see comment in [src/Resources/store.xml](../Resources/store.xml).
|
||||
* item id (for new items) should be unique to avoid mod collision, recommended format to use: `prefix * 10000 + private_id`, where:
|
||||
* `prefix` must be grater than 2 to avoid collision with original game and official SoDOff items
|
||||
* `prefix` is unique mod author prefix (see SoDOff discord for details)
|
||||
* `private_id` is for digit number (0-9999) to free use by the this author
|
||||
* for example for `prefix = 789` and `private_id = 13` item id will be `7890013`
|
||||
|
||||
```
|
||||
<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>29999</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>29999</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>29999</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>29999</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