• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

First Machine Age's Mods (Combined repo.)


Commit MetaInfo

Revisão124616167119a9d0ef61f449e74845e4fa50bc66 (tree)
Hora2019-11-18 08:28:10
Autormelchior <melchior@user...>
Commitermelchior

Mensagem de Log

W.I.P. #6: Almost working

Mudança Sumário

Diff

--- a/AccessControls/AccessControlMod.cs
+++ b/AccessControls/AccessControlMod.cs
@@ -293,20 +293,19 @@ namespace FirstMachineAge
293293
294294 public void ApplyLock(BlockSelection blockSel, IPlayer player, ItemSlot itemSlot, string desc = null)
295295 {
296- bool success = true;
296+ bool commitACN = true;
297297
298298 GenericLock theLock = itemSlot.Itemstack.Item as GenericLock;
299299 string material = theLock.Variant[_lockMaterial];
300300
301301 BlockPos blockPos = blockSel.Position.Copy( );
302302
303-
304303 //TODO: Adjust position(s) with N block high doors, but player selected 'lower' part...
305304 AdjustBlockPostionForMultiBlockStructure(ref blockPos);
306305
307306 //Client path only updates local cache?
308307 if (CoreAPI.Side.IsClient( )) {
309- AddLock_ClientCache(blockPos, theLock);
308+ AddLock_ClientCache(blockPos, theLock, player);
310309 return;
311310 }
312311
@@ -324,8 +323,10 @@ namespace FirstMachineAge
324323 newLockACN.CombinationCode = theLock.CombinationCode(itemSlot);
325324 newLockACN.Tier = theLock.LockTier;
326325
327- if (newLockACN.CombinationCode == null) {
326+ if (newLockACN.CombinationCode == null)
327+ {
328328 Mod.Logger.Warning("Undefined Combination # for existant lock - can't apply!");
329+ commitACN = false;
329330 }
330331 }
331332
@@ -342,27 +343,23 @@ namespace FirstMachineAge
342343 //Mark slot dirty?
343344 }
344345
345- if (Server_ACN.ContainsKey(chunkPos)) {
346- Server_ACN[chunkPos].Entries.Add(blockPos, newLockACN);
346+ if (Server_ACN.ContainsKey(chunkPos) && commitACN)
347+ {
348+ Mod.Logger.Debug("Appending to ChunkACNodes at {0}", chunkPos);
349+ Server_ACN[chunkPos].Entries.Add(blockPos, newLockACN);
350+ Server_ACN[chunkPos].Altered = true;
347351 }
348352 else
349353 {
350354 Mod.Logger.Debug("Created ChunkACNodes for {0}", chunkPos);
351355 Server_ACN.Add(chunkPos, new ChunkACNodes(chunkPos));
352356 Server_ACN[chunkPos].Entries.Add(blockPos, newLockACN);
357+ Server_ACN[chunkPos].Altered = true;
353358 }
354-
355- if (success) {
356- //Mark this host chunk had an ACL added, thus altered.
357- Server_ACN[chunkPos].Altered = true;
358-
359- //Send message to player that object was locked with X type lock (and combo / key#)
360- //Send out ACN update selective broadcast msg...
361- UpdateBroadcast(serverPlayer, blockPos, newLockACN );
362- }
363-
364-
365-
359+
360+ //Send message to player that object was locked with X type lock (and combo / key#)
361+ //Send out ACN update selective broadcast msg...
362+ if (commitACN) UpdateBroadcast(serverPlayer, blockPos, newLockACN );
366363
367364 }
368365
--- a/AccessControls/AccessControls.csproj
+++ b/AccessControls/AccessControls.csproj
@@ -110,7 +110,9 @@
110110 <None Include="assets\fma\shapes\item\access_controls\key1.json">
111111 <CopyToOutputDirectory>Always</CopyToOutputDirectory>
112112 </None>
113- <None Include="assets\fma\shapes\item\access_controls\barrel_lock.json" />
113+ <None Include="assets\fma\shapes\item\access_controls\barrel_lock.json">
114+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
115+ </None>
114116 </ItemGroup>
115117 <ItemGroup>
116118 <ProjectReference Include="..\FirstMachineAge_Common\Common.csproj">
--- a/AccessControls/AccessControls_Internals.cs
+++ b/AccessControls/AccessControls_Internals.cs
@@ -139,18 +139,7 @@ namespace FirstMachineAge
139139 targetChunk = ServerAPI.WorldManager.GetChunk(chunkPos.X, chunkPos.Y, chunkPos.Z);
140140 }
141141
142- //TODO: Remove when bug in API is fixed!
143- if (targetChunk is ServerChunk)
144- {
145- ServerChunk srvChunk = targetChunk as ServerChunk;
146-
147- if (srvChunk.ServerSideModdata == null)
148- {
149- srvChunk.ServerSideModdata = new Dictionary<string, byte[ ]>( );
150- }
151-
152- data = srvChunk.GetServerModdata(_AccessControlNodesKey);
153- }
142+
154143
155144 if (data != null && data.Length > 0) {
156145 #if DEBUG
@@ -163,7 +152,7 @@ namespace FirstMachineAge
163152 }
164153 else if (targetChunk != null){
165154 #if DEBUG
166- Mod.Logger.VerboseDebug("Absent ACN structures for chunk: {0}", chunkPos);
155+ Mod.Logger.VerboseDebug("Absent ACN structures for chunk: {0} !", chunkPos);
167156 #endif
168157 //Setup new AC Node list for this chunk.
169158 ChunkACNodes newAcNodes = new ChunkACNodes( );
@@ -189,6 +178,9 @@ namespace FirstMachineAge
189178 {
190179 Mod.Logger.Debug("ACN Data persistence routines activated");
191180
181+ var alteredCount = Server_ACN.Count(ac => ac.Value.Altered == true);
182+ if (alteredCount > 0) Mod.Logger.Debug("There are {0} unsaved chunk Nodes ( should be zero !)", alteredCount);
183+
192184 foreach (var entry in this.Server_ACN) {
193185 if (entry.Value.Altered == false) continue;
194186
@@ -200,16 +192,6 @@ namespace FirstMachineAge
200192
201193 byte[ ] data = SerializerUtil.Serialize<ChunkACNodes>(entry.Value);
202194
203- //TODO: Remove when bug in API is fixed!
204- if (targetChunk is ServerChunk) {
205- ServerChunk srvChunk = targetChunk as ServerChunk;
206-
207- if (srvChunk.ServerSideModdata == null) {
208- srvChunk.ServerSideModdata = new Dictionary<string, byte[ ]>( );
209- }
210-
211- data = srvChunk.GetServerModdata(_AccessControlNodesKey);
212- }
213195
214196 targetChunk.SetServerModdata(_AccessControlNodesKey, data);
215197 }
@@ -242,7 +224,7 @@ namespace FirstMachineAge
242224 /// </summary>
243225 /// <param name="pos">Block Position.</param>
244226 /// <param name="theLock">The subject lock.</param>
245- protected void AddLock_ClientCache(BlockPos pos, GenericLock theLock)
227+ protected void AddLock_ClientCache(BlockPos pos, GenericLock theLock, IPlayer owner)
246228 {
247229 if (this.Client_LockLookup.ContainsKey(pos.Copy( ))) {
248230 Mod.Logger.Warning("Can't overwrite cached lock entry located: {0}", pos);
@@ -251,6 +233,7 @@ namespace FirstMachineAge
251233 var lockStateNode = new LockCacheNode( );
252234
253235 lockStateNode.Tier = theLock.LockTier;
236+ lockStateNode.OwnerName = owner.PlayerName;
254237
255238 switch (theLock.LockStyle) {
256239 case LockKinds.None:
@@ -327,7 +310,7 @@ namespace FirstMachineAge
327310
328311 if (networkMessage != null && networkMessage.LockStatesByBlockPos != null) {
329312 #if DEBUG
330- Mod.Logger.VerboseDebug("ACN Rx from Server; {0} nodes", networkMessage.LockStatesByBlockPos.Count);
313+ Mod.Logger.VerboseDebug("ACN Rx from Server; {0} AC-nodes", networkMessage.LockStatesByBlockPos.Count);
331314 #endif
332315
333316 foreach (var update in networkMessage.LockStatesByBlockPos) {
@@ -377,7 +360,7 @@ namespace FirstMachineAge
377360
378361 private void UpdateBroadcast(IServerPlayer byPlayer, BlockPos blockPos, AccessControlNode updatedLock)
379362 {
380-
363+ Mod.Logger.Debug("Broadcast single ACN @{0} ", blockPos);
381364 foreach (IServerPlayer tgtPlayer in ServerAPI.World.AllOnlinePlayers)
382365 {
383366 LockStatusList specificLSL = ComputeLSLFromACN(blockPos, updatedLock, tgtPlayer);
@@ -410,7 +393,7 @@ namespace FirstMachineAge
410393 Mod.Logger.VerboseDebug("Portunus re-trigger [{0}]", portunus_thread.ThreadState);
411394 #endif
412395
413- if (portunus_thread.ThreadState.HasFlag(ThreadState.Unstarted) ){
396+ if (portunus_thread.ThreadState.HasFlag(ThreadState.Unstarted) ){
414397 portunus_thread.Start( );
415398 }
416399 else if (portunus_thread.ThreadState.HasFlag(ThreadState.WaitSleepJoin)) {
@@ -468,8 +451,10 @@ namespace FirstMachineAge
468451 }
469452
470453 //Persist & SAVE-COMMIT Altered ACNs !
454+ var alteredCount = Server_ACN.Count(ac => ac.Value.Altered == true);
455+ if (alteredCount > 0) Mod.Logger.Debug("There are {0} altered chunk Nodes to persist", alteredCount);
471456
472- foreach (var alteredEntry in Server_ACN.TakeWhile(node => node.Value.Altered == true)) {
457+ foreach (var alteredEntry in Server_ACN.Where(node => node.Value.Altered == true).ToList()) {
473458 byte[ ] data = SerializerUtil.Serialize<ChunkACNodes>(alteredEntry.Value);
474459
475460 IServerChunk updatingChunk = ServerAPI.WorldManager.GetChunk(alteredEntry.Key.X, alteredEntry.Key.Y, alteredEntry.Key.Z);
@@ -477,7 +462,7 @@ namespace FirstMachineAge
477462 updatingChunk.SetServerModdata(_AccessControlNodesKey, data);
478463
479464 alteredEntry.Value.Altered = false;
480- Mod.Logger.VerboseDebug("Stored ACN for pos {0}", alteredEntry.Key);
465+ Mod.Logger.VerboseDebug("Stored ACN(s) for pos {0}", alteredEntry.Key);
481466 }
482467
483468 //Then sleep until interupted again, and repeat
@@ -516,15 +501,18 @@ namespace FirstMachineAge
516501
517502 case LockKinds.Classic:
518503 lcn.LockState = locked ? LockStatus.Locked : LockStatus.Unlocked;
504+ lcn.OwnerName = ServerAPI.World.PlayerByUid(entry.Value.OwnerPlayerUID).PlayerName;
519505 break;
520506
521507 case LockKinds.Combination:
522508 lcn.LockState = locked ? LockStatus.ComboUnknown : LockStatus.ComboKnown;
509+ lcn.OwnerName = ServerAPI.World.PlayerByUid(entry.Value.OwnerPlayerUID).PlayerName;
523510 lcn.Tier = entry.Value.Tier;
524511 break;
525512
526513 case LockKinds.Key:
527514 lcn.LockState = locked ? LockStatus.KeyNope : LockStatus.KeyHave;
515+ lcn.OwnerName = ServerAPI.World.PlayerByUid(entry.Value.OwnerPlayerUID).PlayerName;
528516 break;
529517 }
530518
@@ -548,18 +536,21 @@ namespace FirstMachineAge
548536
549537 case LockKinds.Classic:
550538 lcn.LockState = locked ? LockStatus.Locked : LockStatus.Unlocked;
539+ lcn.OwnerName = ServerAPI.World.PlayerByUid(updatedLock.OwnerPlayerUID).PlayerName;
551540 break;
552541
553542 case LockKinds.Combination:
554543 lcn.LockState = locked ? LockStatus.ComboUnknown : LockStatus.ComboKnown;
544+ lcn.OwnerName = ServerAPI.World.PlayerByUid(updatedLock.OwnerPlayerUID).PlayerName;
555545 lcn.Tier = updatedLock.Tier;
556546 break;
557547
558548 case LockKinds.Key:
559549 lcn.LockState = locked ? LockStatus.KeyNope : LockStatus.KeyHave;
550+ lcn.OwnerName = ServerAPI.World.PlayerByUid(updatedLock.OwnerPlayerUID).PlayerName;
560551 break;
561- }
562-
552+ }
553+
563554 LockStatusList singleLockState = new LockStatusList(blockPos, lcn);
564555
565556 return singleLockState;
@@ -634,7 +625,7 @@ namespace FirstMachineAge
634625 {
635626 var keyId = GenericKey.KeyID(slot.Itemstack);
636627 //PlayerUID ?
637- keyIds.Add(keyId);
628+ if (keyId > 0) keyIds.Add(keyId);
638629 }
639630 }
640631
--- a/AccessControls/behaviors/BlockBehaviorComplexLockable.cs
+++ b/AccessControls/behaviors/BlockBehaviorComplexLockable.cs
@@ -83,13 +83,16 @@ namespace FirstMachineAge
8383
8484 if (acm != null)
8585 {
86- LockStatus lockstate = acm.LockState(pos.Copy( ), forPlayer);
86+ BlockPos adjPos = pos.Copy( );
87+ acm.AdjustBlockPostionForMultiBlockStructure(ref adjPos);
88+
89+ LockStatus lockstate = acm.LockState(adjPos, forPlayer);
8790
8891 if (lockstate != LockStatus.None)
8992 {
90- var locktier = acm.LockTier(pos.Copy( ), forPlayer);
91- var lockowner = acm.LockOwnerName(pos.Copy( ), forPlayer);
92- lockInfo.AppendFormat("LockState: {0}, Owner: {1} - Tier: {2}", lockstate,lockowner, locktier);
93+ var locktier = acm.LockTier(adjPos, forPlayer);
94+ var lockowner = acm.LockOwnerName(adjPos, forPlayer);
95+ lockInfo.AppendFormat("LockStatus: {0}, Owner: {1} @ Tier:{2}", lockstate,lockowner, locktier);
9396
9497 return lockInfo.ToString( );
9598 }
--- a/AccessControls/data/AccessControlNode.cs
+++ b/AccessControls/data/AccessControlNode.cs
@@ -91,12 +91,12 @@ namespace FirstMachineAge
9191 [ProtoContract]
9292 public class AccessEntry
9393 {
94- [ProtoMember(0)]
94+ [ProtoMember(1)]
9595 public string PlayerUID;
9696
9797 //Access type; Player or Group ?
9898
99- [ProtoMember(1)]
99+ [ProtoMember(2)]
100100 public int? GroupID;
101101
102102
--- a/AccessControls/items/GenericLock.cs
+++ b/AccessControls/items/GenericLock.cs
@@ -124,12 +124,12 @@ namespace FirstMachineAge
124124 }
125125 else if (this.LockStyle == LockKinds.Key)
126126 {
127- var keyId = KeyID(slot);
127+ //var keyId = KeyID(slot);
128128
129- if (keyId.HasValue == false)
130- {
131- GenerateKeyId(slot, this);
132- }
129+ //if (keyId.HasValue == false)
130+ //{
131+ //GenerateKeyId(slot, this);
132+ //}
133133 }
134134
135135 }