Let's Move Item, Together, Again (#445)

* mix-in code for akka messaging move item, currently testing on infantry only

* adjusted structure of COntainable so callbacks are separate from message-producing functions, are separate from message-sending functionality; massaged LockerContainer until it could support control agency and created a wrapper for its Equipment interfacing; the control structure starts and stops when PlayerControl starts and stops, and it converts whenever necessary

* added failsafe conditions to Containable, such as blocking certain messages while completing a MoveItem call, or blocking all messages to reset disruptive MoveItem calls; depiction message callbacks for Player, Locker, and Vehicle, to properly depict the manipulation of items; eliminated the old code from WSA

* added useful comments to Containable; moved functionality for deployables, and for container'ing, and dropping logic out from WSA and distributed it appropriately

* handling terminal operations - buying an exosuit and selecting an infantry loadout; starting work on support for more persistent equipment timers local to the avatar (that were removed in this update; see wsa changes)

* linked terminal page/message with routing policy

* tuning vehicle loadout management and display

* separated use time from purchase time and applied a system that limits either if that same event would recur too soon; tuning exosuit and loadout changes

* some ask timeout handling and comments

* normalizing item on ground interactions

* rearranging the project structure

* merged with master; commas removed

* fixing tests

* added description strings to Tasks; adjusted the completion conditions for some Tasks

* a failed purchase will not block future purchases; increased timeout on move-item tasks

* corpses, even one's own, should have properly moveable inventories

* for better persistence, until GlobalDefinitions is renovated, moved the object id->name map onto the avatar object, for the purpose of timers; replaced a use of values in GridInventory for a map conversion

* max loadouts and max exosuit switch use same cooldown now; hopefully better clarifcation regarding held arm position

* manual merge-rebase of master with hand reconstruction of WorldSessionActor and PlayerControl, and variations for other files necessary to maintain both inventory operations and login reliability

* test fixes; MAX exo-suit cooldown is now five minutes again
This commit is contained in:
Fate-JH 2020-06-04 16:39:08 -04:00 committed by GitHub
parent d6397d54a1
commit bd82d332fa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
42 changed files with 3166 additions and 1819 deletions

View file

@ -525,4 +525,136 @@ class InventoryTest extends Specification {
ok
}
}
"InventoryEquiupmentSlot" should {
"insert, collide, insert" in {
val obj : GridInventory = GridInventory(7, 7)
obj.Slot(16).Equipment = bullet9mmBox1
//confirm all squares
obj.Slot( 8).Equipment.nonEmpty mustEqual false
obj.Slot( 9).Equipment.nonEmpty mustEqual false
obj.Slot( 10).Equipment.nonEmpty mustEqual false
obj.Slot( 11).Equipment.nonEmpty mustEqual false
obj.Slot( 12).Equipment.nonEmpty mustEqual false
//
obj.Slot(15).Equipment.nonEmpty mustEqual false
obj.Slot(16).Equipment.nonEmpty mustEqual true
obj.Slot(17).Equipment.nonEmpty mustEqual true
obj.Slot(18).Equipment.nonEmpty mustEqual true
obj.Slot(19).Equipment.nonEmpty mustEqual false
//
obj.Slot(22).Equipment.nonEmpty mustEqual false
obj.Slot(23).Equipment.nonEmpty mustEqual true
obj.Slot(24).Equipment.nonEmpty mustEqual true
obj.Slot(25).Equipment.nonEmpty mustEqual true
obj.Slot(26).Equipment.nonEmpty mustEqual false
//
obj.Slot(29).Equipment.nonEmpty mustEqual false
obj.Slot(30).Equipment.nonEmpty mustEqual true
obj.Slot(31).Equipment.nonEmpty mustEqual true
obj.Slot(32).Equipment.nonEmpty mustEqual true
obj.Slot(33).Equipment.nonEmpty mustEqual false
//
obj.Slot(36).Equipment.nonEmpty mustEqual false
obj.Slot(37).Equipment.nonEmpty mustEqual false
obj.Slot(38).Equipment.nonEmpty mustEqual false
obj.Slot(39).Equipment.nonEmpty mustEqual false
obj.Slot(40).Equipment.nonEmpty mustEqual false
//
//remove
obj.Slot(16).Equipment = None
obj.Slot( 8).Equipment.nonEmpty mustEqual false
obj.Slot( 9).Equipment.nonEmpty mustEqual false
obj.Slot( 10).Equipment.nonEmpty mustEqual false
obj.Slot( 11).Equipment.nonEmpty mustEqual false
obj.Slot( 12).Equipment.nonEmpty mustEqual false
//
obj.Slot(15).Equipment.nonEmpty mustEqual false
obj.Slot(16).Equipment.nonEmpty mustEqual false
obj.Slot(17).Equipment.nonEmpty mustEqual false
obj.Slot(18).Equipment.nonEmpty mustEqual false
obj.Slot(19).Equipment.nonEmpty mustEqual false
//
obj.Slot(22).Equipment.nonEmpty mustEqual false
obj.Slot(23).Equipment.nonEmpty mustEqual false
obj.Slot(24).Equipment.nonEmpty mustEqual false
obj.Slot(25).Equipment.nonEmpty mustEqual false
obj.Slot(26).Equipment.nonEmpty mustEqual false
//
obj.Slot(29).Equipment.nonEmpty mustEqual false
obj.Slot(30).Equipment.nonEmpty mustEqual false
obj.Slot(31).Equipment.nonEmpty mustEqual false
obj.Slot(32).Equipment.nonEmpty mustEqual false
obj.Slot(33).Equipment.nonEmpty mustEqual false
//
obj.Slot(36).Equipment.nonEmpty mustEqual false
obj.Slot(37).Equipment.nonEmpty mustEqual false
obj.Slot(38).Equipment.nonEmpty mustEqual false
obj.Slot(39).Equipment.nonEmpty mustEqual false
obj.Slot(40).Equipment.nonEmpty mustEqual false
//insert again
obj.Slot(16).Equipment = bullet9mmBox2
obj.Slot( 8).Equipment.nonEmpty mustEqual false
obj.Slot( 9).Equipment.nonEmpty mustEqual false
obj.Slot( 10).Equipment.nonEmpty mustEqual false
obj.Slot( 11).Equipment.nonEmpty mustEqual false
obj.Slot( 12).Equipment.nonEmpty mustEqual false
//
obj.Slot(15).Equipment.nonEmpty mustEqual false
obj.Slot(16).Equipment.nonEmpty mustEqual true
obj.Slot(17).Equipment.nonEmpty mustEqual true
obj.Slot(18).Equipment.nonEmpty mustEqual true
obj.Slot(19).Equipment.nonEmpty mustEqual false
//
obj.Slot(22).Equipment.nonEmpty mustEqual false
obj.Slot(23).Equipment.nonEmpty mustEqual true
obj.Slot(24).Equipment.nonEmpty mustEqual true
obj.Slot(25).Equipment.nonEmpty mustEqual true
obj.Slot(26).Equipment.nonEmpty mustEqual false
//
obj.Slot(29).Equipment.nonEmpty mustEqual false
obj.Slot(30).Equipment.nonEmpty mustEqual true
obj.Slot(31).Equipment.nonEmpty mustEqual true
obj.Slot(32).Equipment.nonEmpty mustEqual true
obj.Slot(33).Equipment.nonEmpty mustEqual false
//
obj.Slot(36).Equipment.nonEmpty mustEqual false
obj.Slot(37).Equipment.nonEmpty mustEqual false
obj.Slot(38).Equipment.nonEmpty mustEqual false
obj.Slot(39).Equipment.nonEmpty mustEqual false
obj.Slot(40).Equipment.nonEmpty mustEqual false
//
//remove
obj.Slot(16).Equipment = None
obj.Slot( 8).Equipment.nonEmpty mustEqual false
obj.Slot( 9).Equipment.nonEmpty mustEqual false
obj.Slot( 10).Equipment.nonEmpty mustEqual false
obj.Slot( 11).Equipment.nonEmpty mustEqual false
obj.Slot( 12).Equipment.nonEmpty mustEqual false
//
obj.Slot(15).Equipment.nonEmpty mustEqual false
obj.Slot(16).Equipment.nonEmpty mustEqual false
obj.Slot(17).Equipment.nonEmpty mustEqual false
obj.Slot(18).Equipment.nonEmpty mustEqual false
obj.Slot(19).Equipment.nonEmpty mustEqual false
//
obj.Slot(22).Equipment.nonEmpty mustEqual false
obj.Slot(23).Equipment.nonEmpty mustEqual false
obj.Slot(24).Equipment.nonEmpty mustEqual false
obj.Slot(25).Equipment.nonEmpty mustEqual false
obj.Slot(26).Equipment.nonEmpty mustEqual false
//
obj.Slot(29).Equipment.nonEmpty mustEqual false
obj.Slot(30).Equipment.nonEmpty mustEqual false
obj.Slot(31).Equipment.nonEmpty mustEqual false
obj.Slot(32).Equipment.nonEmpty mustEqual false
obj.Slot(33).Equipment.nonEmpty mustEqual false
//
obj.Slot(36).Equipment.nonEmpty mustEqual false
obj.Slot(37).Equipment.nonEmpty mustEqual false
obj.Slot(38).Equipment.nonEmpty mustEqual false
obj.Slot(39).Equipment.nonEmpty mustEqual false
obj.Slot(40).Equipment.nonEmpty mustEqual false
}
}
}