-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGame.cs
136 lines (102 loc) · 3.29 KB
/
Game.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
using Sandbox;
using charleroi.client;
using charleroi.server.DAL;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Linq;
namespace charleroi
{
public partial class Game : Sandbox.Game {
HUD hud;
public static Game Instance {
get => Current as Game;
}
[Net] public IList<CItem> Items { get; set; }
public IDictionary<ulong, CItem> DItems { get; protected set; }
[Net] public IList<CJob> Jobs { get; set; }
public IDictionary<ulong, CJob> DJobs { get; protected set; }
[Net] public IList<CSkill> Skills { get; set; }
public IDictionary<ulong, CSkill> DSkills { get; protected set; }
[Net] public IList<CCraft> Crafts { get; set; }
public IDictionary<ulong, CCraft> DCraft { get; protected set; }
public Game()
{
Transmit = TransmitType.Always;
if ( IsServer ) {
hud = new HUD();
_ = InitializeDB();
}
if ( IsClient ) {
// ...
}
}
public async Task<bool> InitializeDB() {
var uow = new UnitofWork();
Instance.DItems = new Dictionary<ulong, CItem>();
var items = await uow.SItem.GetAll();
foreach ( var item in items )
Instance.DItems.Add( item.Id, item as CItem );
Instance.Items = Instance.DItems.Values.ToList();
Log.Info( "CItem.Dictionnary initialized with " + Instance.Items.Count );
Instance.DJobs = new Dictionary<ulong, CJob>();
var jobs = await uow.SJob.GetAll();
foreach ( var job in jobs )
Instance.DJobs.Add( job.Id, job as CJob );
Instance.Jobs = Instance.DJobs.Values.ToList();
Log.Info( "CJob.Dictionnary initialized with " + Instance.Jobs.Count );
Instance.DSkills = new Dictionary<ulong, CSkill>();
var skills = await uow.SSkill.GetAll();
foreach ( var skill in skills )
Instance.DSkills.Add(skill.Id, skill as CSkill );
Instance.Skills = Instance.DSkills.Values.ToList();
Log.Info( "CSkill.Dictionnary initialized with " + Instance.Skills.Count );
Instance.DCraft = new Dictionary<ulong, CCraft>();
var crafts = await uow.SCraft.GetAll();
foreach ( var craft in crafts )
Instance.DCraft.Add( craft.Id, craft as CCraft );
Instance.Crafts = Instance.DCraft.Values.ToList();
Log.Info( "CCraft.Dictionnary initialized with " + Instance.Crafts.Count );
return true;
}
[Event.Hotload]
public void ReloadUI() {
if ( IsServer ) {
hud.Delete();
hud = new HUD();
_ = InitializeDB();
}
}
private async Task<bool> LoadPlayerData( CPlayer player )
{
var uow = new UnitofWork();
SPlayer data = await uow.SPlayer.Get( player.SteamID );
if ( data != null )
player.Load( data );
else
await uow.SPlayer.Update( player );
player.Respawn();
return true;
}
private async Task<bool> SavePlayerData( CPlayer player )
{
var uow = new UnitofWork();
await uow.SPlayer.Update( player );
return true;
}
public override void ClientJoined( Client client ) {
base.ClientJoined( client );
var player = new CPlayer();
client.Pawn = player;
player.SteamID = (ulong)client.PlayerId;
player.Job = "Chomeur";
player.Respawn();
_ = LoadPlayerData( player);
}
public override void ClientDisconnect( Client client, NetworkDisconnectionReason reason )
{
var player = client.Pawn as CPlayer;
_ = SavePlayerData( player );
base.ClientDisconnect( client, reason );
}
}
}