# maimai2 dev notes ## Item types | ItemKind | Name | |----------|-------------------------| | 1 | Nameplate | | 2 | Title | | 3 | Icon | | 5 | Music Unlock | | 6 | Music Master Unlock | | 7 | Music Re:Master Unlock | | 8 | Music Strong Unlock (?) | | 9 | Character | | 10 | Partner | | 11 | Frame | | 12 | Tickets | | 13 | Mile | | 14 | Intimate Item | | 15 | Kaleidx Scope Key | ## Multiplayer ### Party Host/Client/Member Manager.Party.Party/**Host.cs** : Host : * TCP **Listen** 50100 (Accept into Member) * UDP Broadcast 50100 * Send: StartRecruit, FinishRecruit PartyLink/**Party.cs** : Party.Host : Exact same as Host.cs Manager.Party.Party/**Member.cs** : Member : * TCP Connect 50100 * Send: JoinResult, Kick, StartPlay, StartClientState, PartyMember{Info/State}, PartyPlayInfo, RequestMeasure * Recv: RequestJoin, ClientState, ClientPlayInfo, UpdateMechaInfo, ResponseMeasure, FinishNews PartyLink/**Party.cs** : Party.Member : Exact same as Member.cs Manager.Party.Party/**Client.cs** : Client : * UDP **Listen** 50100 * Recv: StartRecruit, FinishRecruit * TCP Connect 50100 * Recv: JoinResult, Kick, StartPlay, StartClientState,PartyMember{Info/State}, PartyPlayInfo, RequestMeasure * Send: RequestJoin, ClientState, ClientPlayInfo, UpdateMechaInfo, ResponseMeasure, FinishNews PartyLink/**Party.cs** : Party.Client : Exact same as Client.cs **Enums** * **ClientStateID**: {Setup, Wait, Connect, Request, Joined, FinishSetting, ToReady, BeginPlay, AllBeginPlay, Ready, Sync, Play, FinishPlay, News, NewsEnd, Result, Disconnected, Finish, Error} * **JoinResult**: {Success, Full, NoRecruit, Disconnect, AlreadyJoined, DifferentGroup, DifferentMusic, DifferentEventMode} **Models** * **MechaInfo**: IsJoin (bool), IP Address, MusicID, Entries[2], UserIDs[2], Rating[2], ... * **RecruitInfo**: MechaInfo, MusicID, GroupID, EventModeID, JoinNumber, PartyStance, Start time, Recv time * **MemberPlayInfo**: IP Address, Rankings[2], Achieves[2], Combos[2], Miss[2], ... * **ChainHistory**: PacketNo (int), Chain (int) **Commands** * **StartRecruit/FinishRecruit**: RecruitInfo * **JoinResult**: JoinResult (enum) * **RequestJoin**: MechaInfo, GroupID, EventModeID * **UpdateMechaInfo**: MechaInfo * **Kick**: RecruitInfo, KickBy {Cancel, Start, Disconnect} * **RequestMeasure/ResponseMeasure**: {} - Sync delay * **StartPlay**: MaxMeasure (long), MyMeasure (long) - Sync delay * **StartClientState**: ClientStateID (enum) * **ClientState**: ClientStateID (enum) * **PartyMemberInfo**: MechaInfo[2] * **PartyMemberState**: ClientStateID[2] * **PartyPlayInfo**: MemberPlayInfo[2], ChainHistory[10], Chain (int), ChainMiss (int), MaxChain (int), IsFullChain (bool), CalcStatus (int) * **ClientPlayInfo**: IP Address, Count, IsValids[2], Achieves[2], Combos[2], Miss[2], ... * **FinishNews**: IP Address, IsValids[2], GaugeClears[2], GaugeStockNums[2] ### Setting Host/Client/Member > This might be for synchronizing event settings across different cabs, > I'm not sure if this is relevant for multiplayer. PartyLink/**Setting.cs** : Setting.**Host** : * TCP **Listen** 50101 (Accept into Setting.Member) * UDP Broadcast 50101 * Send: SettingHostAddress * UDP **Listen** 50101 * Recv: SettingHostAddress (Check duplicate host) PartyLink/**Setting.cs** : Setting.**Client** : * TCP Connect 50101 * Send: SettingRequest * Recv: SettingResponse, HeartBeat{} * UDP **Listen** 50101 * Recv: SettingHostAddress PartyLink/**Setting.cs** : Setting.**Member** : * TCP Connect 50101 * Recv: SettingRequest, HeartBeat{} * Send: SettingResponse, HeartBeat{} **Models** * **SettingHostAddress**: IP Address (u32), Group (int) * **SettingRequest**: Group (int) * **SettingResponse**: Group (int), Data (isEventMode, eventModeMusicCount, memberNumber) ### Advertise > For finding IP addresses of other cabs and checking their latency. PartyLink/**Advertise.cs** : Advertise.Manager : * UDP **Listen** 50102 * Recv: AdvertiseRequest, AdvertiseResponse, AdvertiseGo * UDP Broadcast 50102 * Send: AdvertiseRequest, AdvertiseResponse, AdvertiseGo **Models** * **AdvertiseRequest**: IP Address (u32), Group (int), Kind (int) * **AdvertiseResponse**: IP Address (u32), Group (int), Kind (int) * **AdvertiseGo**: IP Address (u32), Group (int), Kind (int), MaxUsec (long), MyUsec (long) !! sendTo is not necessarily broadcast !! ### DeliveryChecker PartyLink/**DeliveryChecker** : DeliveryChecker.Manager : * UDP **Listen** 50103 * Recv: AdvocateDelivery * UDP Broadcast 50103 * Send: AdvocateDelivery **Models** * **AdvocateDelivery**: IP Address (u32)