source: binary-improvements/7dtd-server-fixes/src/PersistentData/Player.cs@ 325

Last change on this file since 325 was 325, checked in by alloc, 6 years ago

Code style cleanup (mostly whitespace changes, enforcing braces, using cleanup)

File size: 4.7 KB
Line 
1using System;
2using System.Runtime.Serialization;
3using UnityEngine;
4
5namespace AllocsFixes.PersistentData {
6 [Serializable]
7 public class Player {
8 private readonly string steamId;
9 private int entityId;
10 private string name;
11 private string ip;
12 private long totalPlayTime;
13
14 [OptionalField] private DateTime lastOnline;
15
16 private Inventory inventory;
17
18 [OptionalField] private int lastPositionX, lastPositionY, lastPositionZ;
19
20 [OptionalField] [Obsolete ("experience no longer available, use level and expToNextLevel instead")]
21 private uint experience;
22
23 [OptionalField] private bool chatMuted;
24 [OptionalField] private int maxChatLength;
25 [OptionalField] private string chatColor;
26 [OptionalField] private bool chatName;
27 [OptionalField] private uint expToNextLevel;
28 [OptionalField] private int level;
29
30 [NonSerialized] private ClientInfo clientInfo;
31
32 public string SteamID {
33 get { return steamId; }
34 }
35
36 public int EntityID {
37 get { return entityId; }
38 }
39
40 public string Name {
41 get { return name == null ? string.Empty : name; }
42 }
43
44 public string IP {
45 get { return ip == null ? string.Empty : ip; }
46 }
47
48 public Inventory Inventory {
49 get {
50 if (inventory == null) {
51 inventory = new Inventory ();
52 }
53
54 return inventory;
55 }
56 }
57
58 public bool IsOnline {
59 get { return clientInfo != null; }
60 }
61
62 public ClientInfo ClientInfo {
63 get { return clientInfo; }
64 }
65
66 public EntityPlayer Entity {
67 get {
68 if (IsOnline) {
69 return GameManager.Instance.World.Players.dict [clientInfo.entityId];
70 }
71
72 return null;
73 }
74 }
75
76 public long TotalPlayTime {
77 get {
78 if (IsOnline) {
79 return totalPlayTime + (long) (DateTime.Now - lastOnline).TotalSeconds;
80 }
81
82 return totalPlayTime;
83 }
84 }
85
86 public DateTime LastOnline {
87 get {
88 if (IsOnline) {
89 return DateTime.Now;
90 }
91
92 return lastOnline;
93 }
94 }
95
96 public Vector3i LastPosition {
97 get {
98 if (IsOnline) {
99 return new Vector3i (Entity.GetPosition ());
100 }
101
102 return new Vector3i (lastPositionX, lastPositionY, lastPositionZ);
103 }
104 }
105
106 public bool LandProtectionActive {
107 get {
108 return GameManager.Instance.World.IsLandProtectionValidForPlayer (GameManager.Instance
109 .GetPersistentPlayerList ().GetPlayerData (SteamID));
110 }
111 }
112
113 public float LandProtectionMultiplier {
114 get {
115 return GameManager.Instance.World.GetLandProtectionHardnessModifierForPlayer (GameManager.Instance
116 .GetPersistentPlayerList ().GetPlayerData (SteamID));
117 }
118 }
119
120
121 [Obsolete ("Experience no longer available, use Level instead")]
122 public uint Experience {
123 get { return 0; }
124 }
125
126 public float Level {
127 get {
128 float expForNextLevel =
129 (int) Math.Min (Progression.BaseExpToLevel * Mathf.Pow (Progression.ExpMultiplier, level + 1),
130 int.MaxValue);
131 float fLevel = level + 1f - expToNextLevel / expForNextLevel;
132 return fLevel;
133 }
134 }
135
136 public bool IsChatMuted {
137 get { return chatMuted; }
138 set { chatMuted = value; }
139 }
140
141 public int MaxChatLength {
142 get {
143 if (maxChatLength == 0) {
144 maxChatLength = 255;
145 }
146
147 return maxChatLength;
148 }
149 set { maxChatLength = value; }
150 }
151
152 public string ChatColor {
153 get {
154 if (chatColor == null || chatColor == "") {
155 chatColor = "";
156 }
157
158 return chatColor;
159 }
160
161 set { chatColor = value; }
162 }
163
164 public bool ChatName {
165 get { return chatName; }
166
167 set { chatName = value; }
168 }
169
170 public Player (string steamId) {
171 this.steamId = steamId;
172 inventory = new Inventory ();
173 }
174
175 public void SetOffline () {
176 if (clientInfo != null) {
177 Log.Out ("Player set to offline: " + steamId);
178 lastOnline = DateTime.Now;
179 try {
180 Vector3i lastPos = new Vector3i (Entity.GetPosition ());
181 lastPositionX = lastPos.x;
182 lastPositionY = lastPos.y;
183 lastPositionZ = lastPos.z;
184 totalPlayTime += (long) (Time.timeSinceLevelLoad - Entity.CreationTimeSinceLevelLoad);
185 } catch (NullReferenceException) {
186 Log.Out ("Entity not available. Something seems to be wrong here...");
187 }
188
189 clientInfo = null;
190 }
191 }
192
193 public void SetOnline (ClientInfo ci) {
194 Log.Out ("Player set to online: " + steamId);
195 clientInfo = ci;
196 entityId = ci.entityId;
197 name = ci.playerName;
198 ip = ci.ip;
199 lastOnline = DateTime.Now;
200 }
201
202 public void Update (PlayerDataFile _pdf) {
203 UpdateProgression (_pdf);
204 inventory.Update (_pdf);
205 }
206
207 private void UpdateProgression (PlayerDataFile _pdf) {
208 if (_pdf.progressionData.Length > 0) {
209 using (PooledBinaryReader pbr = MemoryPools.poolBinaryReader.AllocSync (false)) {
210 pbr.SetBaseStream (_pdf.progressionData);
211 Progression p = Progression.Read (pbr, null);
212 expToNextLevel = (uint) p.ExpToNextLevel;
213 level = p.Level;
214 }
215 }
216 }
217 }
218}
Note: See TracBrowser for help on using the repository browser.