Add 471 support.
Updated config Updated readme Add default values, remove null
This commit is contained in:
parent
c7deb8f970
commit
c142516b00
@ -63,6 +63,10 @@
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
|
||||
</None>
|
||||
<None Update="db\music471.db3">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@ -9,4 +9,6 @@ public interface IDataResponse
|
||||
long NotAfterUnixTime { get; }
|
||||
|
||||
string Md5 { get; }
|
||||
|
||||
int Index { get; }
|
||||
}
|
@ -1,27 +1,71 @@
|
||||
{
|
||||
"AvatarCount": 323,
|
||||
"NavigatorCount": 94,
|
||||
"AvatarCount": 356,
|
||||
"NavigatorCount": 118,
|
||||
"ItemCount": 21,
|
||||
"SkinCount": 21,
|
||||
"SeCount": 26,
|
||||
"TitleCount": 5273,
|
||||
"TitleCount": 5530,
|
||||
"CardDbName": "card.db3",
|
||||
"MusicDbName": "music4MAX465.db3",
|
||||
"MusicDbName": "music471.db3",
|
||||
"ServerIp": "127.0.0.1",
|
||||
"RelayServer": "127.0.0.1",
|
||||
"RelayPort": 54321,
|
||||
"RelayServer": "26.56.10.224",
|
||||
"RelayPort": 54321,
|
||||
"ResponseData": [
|
||||
{
|
||||
"FileName": "/event_031_20160112.evt",
|
||||
"NotBeforeUnixTime": 1272260187,
|
||||
"NotAfterUnixTime": 1903412187,
|
||||
"Md5": "28a12ed884747db261b188bc2c97c555"
|
||||
"FileName": "/event_103_20201125.evt",
|
||||
"NotBeforeUnixTime": 1335677127,
|
||||
"NotAfterUnixTime": 1966397127,
|
||||
"Md5": "9ef6c4d5ca381583a2d99b626ce06b5e",
|
||||
"Index": 0
|
||||
},
|
||||
{
|
||||
"FileName": "/event_20201125_reg.jpg",
|
||||
"NotBeforeUnixTime": 1335677127,
|
||||
"NotAfterUnixTime": 1966397127,
|
||||
"Md5": "8e3fe25bf50dcbed13dbb54cc18b1efa",
|
||||
"Index": 1
|
||||
},
|
||||
{
|
||||
"FileName": "/event_20201125_sgreg.png",
|
||||
"NotBeforeUnixTime": 1335677127,
|
||||
"NotAfterUnixTime": 1966397127,
|
||||
"Md5": "e0abb0503fe0c530d8a68e36994264c6",
|
||||
"Index": 2
|
||||
},
|
||||
{
|
||||
"FileName": "/news_big_20201125_0.jpg",
|
||||
"NotBeforeUnixTime": 1335677127,
|
||||
"NotAfterUnixTime": 1966397127,
|
||||
"Md5": "4a0f66431f6449279dc046149d1dd882",
|
||||
"Index": 0
|
||||
},
|
||||
{
|
||||
"FileName": "/news_big_20201125_2.jpg",
|
||||
"NotBeforeUnixTime": 1335677127,
|
||||
"NotAfterUnixTime": 1966397127,
|
||||
"Md5": "8e3fe25bf50dcbed13dbb54cc18b1efa",
|
||||
"Index": 2
|
||||
},
|
||||
{
|
||||
"FileName": "/news_small_20201125_1.jpg",
|
||||
"NotBeforeUnixTime": 1335677127,
|
||||
"NotAfterUnixTime": 1966397127,
|
||||
"Md5": "e20135bcd41c98875aec2b52eb9fcd06",
|
||||
"Index": 1
|
||||
},
|
||||
{
|
||||
"FileName": "/telop_20201125.txt",
|
||||
"NotBeforeUnixTime": 1272260187,
|
||||
"NotAfterUnixTime": 1903412187,
|
||||
"Md5": "86fb269d190d2c85f6e0468ceca42a20"
|
||||
"NotBeforeUnixTime": 1335677127,
|
||||
"NotAfterUnixTime": 1966397127,
|
||||
"Md5": "ee228de44d6656a9ec0bb7f1a0ca64e1",
|
||||
"Index": 0
|
||||
},
|
||||
{
|
||||
"FileName": "/event_unlock_20201125.cmp",
|
||||
"NotBeforeUnixTime": 1335677127,
|
||||
"NotAfterUnixTime": 1966397127,
|
||||
"Md5": "623b0f10125cbe19c5394d992930ae8c",
|
||||
"Index": 8
|
||||
}
|
||||
]
|
||||
}
|
@ -114,7 +114,8 @@ public class RankController : WebApiController
|
||||
{
|
||||
Rows = 30,
|
||||
TableName = "play_num_rank",
|
||||
Status = 1
|
||||
Status = 1,
|
||||
EndDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
|
||||
};
|
||||
|
||||
var playNumRankContainer = new PlayNumRankContainer
|
||||
|
@ -99,7 +99,7 @@ public class ServerController : WebApiController
|
||||
for (var i = 0; i < count; i++)
|
||||
{
|
||||
var data = responseList[i];
|
||||
dataString.Append($"{i},{data.FileName},{data.NotBeforeUnixTime},{data.NotAfterUnixTime},{data.Md5},file");
|
||||
dataString.Append($"{i},{data.FileName},{data.NotBeforeUnixTime},{data.NotAfterUnixTime},{data.Md5},{data.Index}");
|
||||
dataString.Append('\n');
|
||||
}
|
||||
|
||||
|
BIN
GC-local-server-rewrite/db/music471.db3
Normal file
BIN
GC-local-server-rewrite/db/music471.db3
Normal file
Binary file not shown.
@ -11,10 +11,10 @@ public class Avatar : Record , IIdModel, ICardIdModel
|
||||
public int AvatarId { get; set; }
|
||||
|
||||
[XmlElement("created")]
|
||||
public string? Created { get; set; } = "1";
|
||||
public string Created { get; set; } = "1";
|
||||
|
||||
[XmlElement("modified")]
|
||||
public string? Modified { get; set; } = "1";
|
||||
public string Modified { get; set; } = "1";
|
||||
|
||||
[XmlElement("new_flag")]
|
||||
public int NewFlag { get; set; } = 1;
|
||||
|
@ -11,12 +11,12 @@ public class Card : ICardIdModel
|
||||
[Column("card_id")]
|
||||
[ChoXmlElementRecordField(FieldName = "card_id")]
|
||||
[XmlElement(ElementName = "card_id")]
|
||||
public long? CardId { get; set; }
|
||||
public long CardId { get; set; }
|
||||
|
||||
[Column("player_name")]
|
||||
[ChoXmlElementRecordField(FieldName = "player_name")]
|
||||
[XmlElement(ElementName = "player_name")]
|
||||
public string? PlayerName { get; set; }
|
||||
public string PlayerName { get; set; } = "player";
|
||||
|
||||
[Column("score_i1")]
|
||||
[ChoXmlElementRecordField(FieldName = "score_i1")]
|
||||
@ -41,7 +41,7 @@ public class Card : ICardIdModel
|
||||
[Column("achieve_status")]
|
||||
[ChoXmlElementRecordField(FieldName = "achieve_status")]
|
||||
[XmlElement("achieve_status")]
|
||||
public string? AchieveStatus { get; set; } = string.Empty;
|
||||
public string AchieveStatus { get; set; } = string.Empty;
|
||||
|
||||
[Column("created")]
|
||||
[ChoXmlElementRecordField(FieldName = "created")]
|
||||
|
@ -11,7 +11,7 @@ public class CardBData : ICardIdModel
|
||||
[Column("card_id")]
|
||||
[ChoXmlElementRecordField(FieldName = "card_id")]
|
||||
[XmlElement(ElementName = "card_id")]
|
||||
public long? CardId { get; set; }
|
||||
public long CardId { get; set; }
|
||||
|
||||
[Column("bdata")]
|
||||
[ChoXmlElementRecordField(FieldName = "bdata")]
|
||||
|
@ -17,8 +17,8 @@ public class Coin
|
||||
public int MonthlyCoins { get; set; }
|
||||
|
||||
[XmlElement("created")]
|
||||
public string? Created { get; set; } = "1";
|
||||
public string Created { get; set; } = "1";
|
||||
|
||||
[XmlElement("modified")]
|
||||
public string? Modified { get; set; } = "1";
|
||||
public string Modified { get; set; } = "1";
|
||||
}
|
@ -14,10 +14,10 @@ public class Item : Record, IIdModel, ICardIdModel
|
||||
public int ItemNum { get; set; } = 90;
|
||||
|
||||
[XmlElement("created")]
|
||||
public string? Created { get; set; } = "1";
|
||||
public string Created { get; set; } = "1";
|
||||
|
||||
[XmlElement("modified")]
|
||||
public string? Modified { get; set; } = "1";
|
||||
public string Modified { get; set; } = "1";
|
||||
|
||||
[XmlElement("new_flag")]
|
||||
public int NewFlag { get; set; }
|
||||
|
@ -12,20 +12,20 @@ public class Music : Record
|
||||
public int MusicId { get; set; }
|
||||
|
||||
[Column("title")]
|
||||
[XmlElement(ElementName = "title", IsNullable = true)]
|
||||
public string? Title { get; set; }
|
||||
[XmlElement(ElementName = "title")]
|
||||
public string? Title { get; set; } = string.Empty;
|
||||
|
||||
[Column("artist")]
|
||||
[XmlElement(ElementName = "artist", IsNullable = true)]
|
||||
public string? Artist { get; set; }
|
||||
[XmlElement(ElementName = "artist")]
|
||||
public string Artist { get; set; } = string.Empty;
|
||||
|
||||
[Column("release_date")]
|
||||
[XmlElement(ElementName = "release_date", IsNullable = true)]
|
||||
public string? ReleaseDate { get; set; }
|
||||
[XmlElement(ElementName = "release_date")]
|
||||
public string ReleaseDate { get; set; } = "2013-01-01 08:00:00";
|
||||
|
||||
[Column("end_date")]
|
||||
[XmlElement(ElementName = "end_date", IsNullable = true)]
|
||||
public string? EndDate { get; set; }
|
||||
[XmlElement(ElementName = "end_date")]
|
||||
public string EndDate { get; set; } = "2030-01-01 08:00:00";
|
||||
|
||||
[Column("new_flag")]
|
||||
[XmlElement("new_flag")]
|
||||
|
@ -11,10 +11,10 @@ public class Navigator : Record, IIdModel, ICardIdModel
|
||||
public int NavigatorId { get; set; }
|
||||
|
||||
[XmlElement("created")]
|
||||
public string? Created { get; set; } = "1";
|
||||
public string Created { get; set; } = "1";
|
||||
|
||||
[XmlElement("modified")]
|
||||
public string? Modified { get; set; } = "1";
|
||||
public string Modified { get; set; } = "1";
|
||||
|
||||
[XmlElement("new_flag")]
|
||||
public int NewFlag { get; set; }
|
||||
|
@ -5,14 +5,14 @@ namespace GCLocalServerRewrite.models;
|
||||
[XmlType("ranking_status")]
|
||||
public class RankStatus
|
||||
{
|
||||
[XmlElement("table_name")]
|
||||
public string? TableName { get; set; }
|
||||
[XmlElement("table_name")]
|
||||
public string TableName { get; set; } = "rank_table";
|
||||
|
||||
[XmlElement("start_date")]
|
||||
public string StartDate { get; set; } = "2021-05-30 08:00:00";
|
||||
public string StartDate { get; set; } = "2021-05-30";
|
||||
|
||||
[XmlElement("end_date")]
|
||||
public string EndDate { get; set; } = "2022-06-08 08:00:00";
|
||||
public string EndDate { get; set; } = "2022-06-08";
|
||||
|
||||
[XmlElement("status")]
|
||||
public int Status { get; set; }
|
||||
|
@ -7,11 +7,11 @@ public class Session
|
||||
[XmlElement(ElementName = "card_id")]
|
||||
public long CardId { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "mac_addr")]
|
||||
public string? Mac { get; set; }
|
||||
[XmlElement(ElementName = "mac_addr")]
|
||||
public string Mac { get; set; } = "000000000000";
|
||||
|
||||
[XmlElement(ElementName = "session_id")]
|
||||
public string? SessionId { get; set; }
|
||||
public string SessionId { get; set; } = "12345678901234567890123456789012";
|
||||
|
||||
[XmlElement(ElementName = "expires")]
|
||||
public int Expires { get; set; }
|
||||
|
@ -11,10 +11,10 @@ public class Skin : Record, IIdModel, ICardIdModel
|
||||
public int SkinId { get; set; }
|
||||
|
||||
[XmlElement("created")]
|
||||
public string? Created { get; set; } = "1";
|
||||
public string Created { get; set; } = "1";
|
||||
|
||||
[XmlElement("modified")]
|
||||
public string? Modified { get; set; } = "1";
|
||||
public string Modified { get; set; } = "1";
|
||||
|
||||
[XmlElement("new_flag")]
|
||||
public int NewFlag { get; set; }
|
||||
|
@ -11,10 +11,10 @@ public class SoundEffect : Record, IIdModel, ICardIdModel
|
||||
public int SeId { get; set; }
|
||||
|
||||
[XmlElement("created")]
|
||||
public string? Created { get; set; } = "1";
|
||||
public string Created { get; set; } = "1";
|
||||
|
||||
[XmlElement("modified")]
|
||||
public string? Modified { get; set; } = "1";
|
||||
public string Modified { get; set; } = "1";
|
||||
|
||||
[XmlElement("new_flag")]
|
||||
public int NewFlag { get; set; }
|
||||
|
@ -11,10 +11,10 @@ public class Title : Record, IIdModel, ICardIdModel
|
||||
public int TitleId { get; set; }
|
||||
|
||||
[XmlElement("created")]
|
||||
public string? Created { get; set; } = "1";
|
||||
public string Created { get; set; } = "1";
|
||||
|
||||
[XmlElement("modified")]
|
||||
public string? Modified { get; set; } = "1";
|
||||
public string Modified { get; set; } = "1";
|
||||
|
||||
[XmlElement("new_flag")]
|
||||
public int NewFlag { get; set; }
|
||||
|
@ -26,8 +26,8 @@ public class UnlockKeynum : Record
|
||||
public int CashFlag { get; set; }
|
||||
|
||||
[XmlElement("created")]
|
||||
public string? Created { get; set; } = "1";
|
||||
public string Created { get; set; } = "1";
|
||||
|
||||
[XmlElement("modified")]
|
||||
public string? Modified { get; set; } = "1";
|
||||
public string Modified { get; set; } = "1";
|
||||
}
|
@ -14,16 +14,16 @@ public class UnlockReward : Record
|
||||
public int RewardType { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "open_date")]
|
||||
public string? OpenDate { get; set; } = "2021-05-30";
|
||||
public string OpenDate { get; set; } = "2021-05-30";
|
||||
|
||||
[XmlElement(ElementName = "close_date")]
|
||||
public string? CloseDate { get; set; } = "2030-05-30";
|
||||
public string CloseDate { get; set; } = "2030-05-30";
|
||||
|
||||
[XmlElement(ElementName = "open_time")]
|
||||
public string? OpenTime { get; set; } = "00:00:01";
|
||||
public string OpenTime { get; set; } = "00:00:01";
|
||||
|
||||
[XmlElement(ElementName = "close_time")]
|
||||
public string? CloseTime { get; set; } = "23:59:59";
|
||||
public string CloseTime { get; set; } = "23:59:59";
|
||||
|
||||
[XmlElement(ElementName = "target_id")]
|
||||
public int TargetId { get; set; }
|
||||
@ -50,8 +50,8 @@ public class UnlockReward : Record
|
||||
public long CloseUnixTime { get; set; } = 1906387199;
|
||||
|
||||
[XmlElement("created")]
|
||||
public string? Created { get; set; } = "1";
|
||||
public string Created { get; set; } = "1";
|
||||
|
||||
[XmlElement("modified")]
|
||||
public string? Modified { get; set; } = "1";
|
||||
public string Modified { get; set; } = "1";
|
||||
}
|
68
README.md
68
README.md
@ -29,9 +29,11 @@ Open game using teknoparrot loader (you can find that in discord). The loader sh
|
||||
|
||||
# Config
|
||||
|
||||
The config file is ~~GC-local-server-rewrite.exe.config~~ config.json
|
||||
The config file is ~~GC-local-server-rewrite.exe.config~~ config.json
|
||||
|
||||
If you are using 4MAX 4.65 data, it should work out of box.
|
||||
If you are using 4MAX 4.71 data, it should work out of box.
|
||||
|
||||
If you are using 4MAX 4.65 data, MusicDbName=music4MAX465.db3
|
||||
|
||||
If you are using 4MAX 4.61 data, first change MusicDbName to bundled music4MAX.db3
|
||||
|
||||
@ -48,16 +50,60 @@ You can now add solo events. In the config file, change the following section
|
||||
```
|
||||
"ResponseData": [
|
||||
{
|
||||
"FileName": "/event_031_20160112.evt", // This is the file name of the file to be read
|
||||
"NotBeforeUnixTime": 1272260187,
|
||||
"NotAfterUnixTime": 1903412187,// Be sure that NotBeforeUnixTime<= current time <= NotAfterUnixTime
|
||||
"Md5": "28a12ed884747db261b188bc2c97c555" // File MD5, must match
|
||||
"FileName": "/event_103_20201125.evt", // This is the file name of the file to be read
|
||||
"NotBeforeUnixTime": 1335677127,
|
||||
"NotAfterUnixTime": 1966397127, // Be sure that NotBeforeUnixTime<= current time <= NotAfterUnixTime
|
||||
"Md5": "9ef6c4d5ca381583a2d99b626ce06b5e", // File MD5, must match
|
||||
"Index": 0 // Special value, must be 0 for .evt file, this is the file controlling event
|
||||
},
|
||||
{
|
||||
"FileName": "/event_20201125_reg.jpg",
|
||||
"NotBeforeUnixTime": 1335677127,
|
||||
"NotAfterUnixTime": 1966397127,
|
||||
"Md5": "8e3fe25bf50dcbed13dbb54cc18b1efa",
|
||||
"Index": 1 // Special value, must be 1 for event_reg.jpg
|
||||
},
|
||||
{
|
||||
"FileName": "/event_20201125_sgreg.png",
|
||||
"NotBeforeUnixTime": 1335677127,
|
||||
"NotAfterUnixTime": 1966397127,
|
||||
"Md5": "e0abb0503fe0c530d8a68e36994264c6",
|
||||
"Index": 2 // Special value, must be 2 for event_sreg.jpg, this is the event picture in mode selection
|
||||
},
|
||||
{
|
||||
"FileName": "/news_big_20201125_0.jpg",
|
||||
"NotBeforeUnixTime": 1335677127,
|
||||
"NotAfterUnixTime": 1966397127,
|
||||
"Md5": "4a0f66431f6449279dc046149d1dd882",
|
||||
"Index": 0 // Special value, must be 0 for first news_big.jpg, this is the picture shown before demo
|
||||
},
|
||||
{
|
||||
"FileName": "/news_big_20201125_2.jpg",
|
||||
"NotBeforeUnixTime": 1335677127,
|
||||
"NotAfterUnixTime": 1966397127,
|
||||
"Md5": "8e3fe25bf50dcbed13dbb54cc18b1efa",
|
||||
"Index": 2 // Special value, can be 2~9 for 2nd to 9th news_big.jpg, so there can be up to 9 of these
|
||||
},
|
||||
{
|
||||
"FileName": "/news_small_20201125_1.jpg",
|
||||
"NotBeforeUnixTime": 1335677127,
|
||||
"NotAfterUnixTime": 1966397127,
|
||||
"Md5": "e20135bcd41c98875aec2b52eb9fcd06",
|
||||
"Index": 1 // Special value, must be 1 for news_small.jpg, this is shown after game over
|
||||
},
|
||||
{
|
||||
"FileName": "/telop_20201125.txt",
|
||||
"NotBeforeUnixTime": 1272260187,
|
||||
"NotAfterUnixTime": 1903412187,
|
||||
"Md5": "86fb269d190d2c85f6e0468ceca42a20"
|
||||
"NotBeforeUnixTime": 1335677127,
|
||||
"NotAfterUnixTime": 1966397127,
|
||||
"Md5": "ee228de44d6656a9ec0bb7f1a0ca64e1",
|
||||
"Index": 0 // Special value, must be 1 for telop, this is the text in scrolling banner
|
||||
},
|
||||
{
|
||||
"FileName": "/event_unlock_20201125.cmp",
|
||||
"NotBeforeUnixTime": 1335677127,
|
||||
"NotAfterUnixTime": 1966397127,
|
||||
"Md5": "623b0f10125cbe19c5394d992930ae8c",
|
||||
"Index": 8 // Special value, must be 8 for .cmp file
|
||||
}
|
||||
]
|
||||
```
|
||||
@ -96,7 +142,7 @@ reward0.navigator = 0
|
||||
|
||||
File name starts with `telop` is the scrolling banner, it's just a plain text file with banner content.
|
||||
|
||||
Other files like `news`, `option` and `cap` should also be possible, but I have not tested these.
|
||||
Other files like `news`, `option` and `cap` should also be possible, but I have not tested these.
|
||||
|
||||
The configured file should be put into the `event` folder, which you can change the position by using jconfig (regedit->event path)
|
||||
|
||||
@ -111,7 +157,7 @@ The configured file should be put into the `event` folder, which you can change
|
||||
|
||||
# Difficulty unlocking
|
||||
|
||||
This is processed on client side, so if you like to unlock all difficuties, just use bemani patcher.
|
||||
This is processed on client side, so if you like to unlock all difficulties, just use Bemani patcher.
|
||||
|
||||
# Deteled songs
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user