mirror of
https://github.com/rafi1212122/PemukulPaku
synced 2025-12-13 12:04:34 +01:00
lobby part 1, idk what i'm doing
This commit is contained in:
116
GameServer/MPModule/Lobby.cs
Normal file
116
GameServer/MPModule/Lobby.cs
Normal file
@@ -0,0 +1,116 @@
|
||||
using System;
|
||||
using Common;
|
||||
using Common.Resources.Proto;
|
||||
|
||||
namespace PemukulPaku.GameServer.MPModule
|
||||
{
|
||||
public class Lobby
|
||||
{
|
||||
private static Lobby? Instance;
|
||||
public readonly Dictionary<uint, Team> Teams = new();
|
||||
|
||||
public static Lobby GetInstance()
|
||||
{
|
||||
return Instance ??= new Lobby();
|
||||
}
|
||||
|
||||
public Team CreateTeam(Team team)
|
||||
{
|
||||
if (Teams.GetValueOrDefault(team.LeaderUid) is null)
|
||||
Teams.Add(team.LeaderUid, team);
|
||||
|
||||
SyncTeam(team.LeaderUid);
|
||||
return team;
|
||||
}
|
||||
|
||||
public void SyncTeam(uint teamId)
|
||||
{
|
||||
Teams.TryGetValue(teamId, out Team? team);
|
||||
if (team is null)
|
||||
return;
|
||||
|
||||
MpTeamSyncNotify teamSyncNotify = new()
|
||||
{
|
||||
TeamData = new()
|
||||
{
|
||||
LeaderUid = team.LeaderUid,
|
||||
TeamId = teamId,
|
||||
LobbyEnterType = team.LobbyEnterType,
|
||||
LobbyStatus = team.LobbyStatus,
|
||||
MinLevel = team.MinLevel,
|
||||
MaxLevel = 0,
|
||||
StageId = team.StageId,
|
||||
TeamName = team.Name,
|
||||
Status = MpTeamStatus.TeamStatusInLobby
|
||||
}
|
||||
};
|
||||
|
||||
teamSyncNotify.TeamData.MemberLists.AddRange(team.Members.Select(member =>
|
||||
{
|
||||
return new MpTeamMember()
|
||||
{
|
||||
Index = member.Index,
|
||||
Uid = member.Session.Player.User.Uid,
|
||||
MpExp = 0,
|
||||
Stamina = (uint)member.Session.Player.User.Stamina,
|
||||
HeadAvatarId = member.Session.Player.GetDetailData().LeaderAvatar.AvatarId,
|
||||
DressId = member.Session.Player.GetDetailData().LeaderAvatar.DressId,
|
||||
PunishEndTime = 0,
|
||||
MemberInfo = new()
|
||||
{
|
||||
Card = member.Session.Player.GetCardData(),
|
||||
Detail = member.Session.Player.GetDetailData()
|
||||
},
|
||||
Status = member.Status,
|
||||
ClientStatus = member.ClientStatus,
|
||||
AvatarTrialId = 0,
|
||||
IsWild = true,
|
||||
RegionName = Global.config.Gameserver.RegionName,
|
||||
FrameId = member.Session.Player.GetDetailData().FrameId,
|
||||
CustomHeadId = member.Session.Player.GetDetailData().CustomHeadId,
|
||||
NewbieId = 0
|
||||
};
|
||||
}));
|
||||
|
||||
foreach (Session session in team.Members.Select(x => x.Session))
|
||||
{
|
||||
session.Send(Packet.FromProto(teamSyncNotify, CmdId.MpTeamSyncNotify));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Team
|
||||
{
|
||||
public uint StageId { get; set; }
|
||||
public uint MinLevel;
|
||||
public uint LeaderUid;
|
||||
public LobbyEnterType LobbyEnterType;
|
||||
public LobbyStatus LobbyStatus = LobbyStatus.LobbyPreparing;
|
||||
public List<TeamMember> Members;
|
||||
public string Name;
|
||||
|
||||
public Team(uint stageId, uint minLevel, LobbyEnterType lobbyEnterType, in Session leader, string name)
|
||||
{
|
||||
StageId = stageId;
|
||||
MinLevel = minLevel;
|
||||
LobbyEnterType = lobbyEnterType;
|
||||
Members = new List<TeamMember> { new(leader) };
|
||||
LeaderUid = leader.Player.User.Uid;
|
||||
Name = name;
|
||||
}
|
||||
}
|
||||
|
||||
public class TeamMember
|
||||
{
|
||||
public Session Session;
|
||||
public uint Index;
|
||||
public LobbyClientStatus ClientStatus { get; set; } = LobbyClientStatus.LobbyClientNone;
|
||||
public LobbyMemberStatus Status { get; set; } = LobbyMemberStatus.LobbyMemberReady;
|
||||
|
||||
public TeamMember(Session session, uint index = 1)
|
||||
{
|
||||
Session = session;
|
||||
Index = index;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user