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

Last change on this file since 314 was 301, checked in by alloc, 8 years ago

Fixes

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