PSF-LoginServer/common/src/test/scala/game/objectcreatedetailed/DetailedCharacterDataTest.scala
2019-10-08 18:47:03 -04:00

3398 lines
186 KiB
Scala

// Copyright (c) 2017 PSForever
package game.objectcreatedetailed
import org.specs2.mutable._
import net.psforever.packet._
import net.psforever.packet.game.{ObjectCreateDetailedMessage, _}
import net.psforever.packet.game.objectcreate._
import net.psforever.types._
import scodec.bits._
class DetailedCharacterDataTest extends Specification {
val string = hex"18 570C0000 BC8 4B00 6C2D7 65535 CA16 0 00 01 34 40 00 0970 49006C006C006C004900490049006C006C006C0049006C0049006C006C0049006C006C006C0049006C006C004900 84 52 70 76 1E 80 80 00 00 00 00 00 3FFFC 0 00 00 00 20 00 00 0F F6 A7 03 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 90 01 90 00 64 00 00 01 00 7E C8 00 C8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 C0 00 42 C5 46 86 C7 00 00 00 80 00 00 12 40 78 70 65 5F 73 61 6E 63 74 75 61 72 79 5F 68 65 6C 70 90 78 70 65 5F 74 68 5F 66 69 72 65 6D 6F 64 65 73 8B 75 73 65 64 5F 62 65 61 6D 65 72 85 6D 61 70 31 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 0A 23 02 60 04 04 40 00 00 10 00 06 02 08 14 D0 08 0C 80 00 02 00 02 6B 4E 00 82 88 00 00 02 00 00 C0 41 C0 9E 01 01 90 00 00 64 00 44 2A 00 10 91 00 00 00 40 00 18 08 38 94 40 20 32 00 00 00 80 19 05 48 02 17 20 00 00 08 00 70 29 80 43 64 00 00 32 00 0E 05 40 08 9C 80 00 06 40 01 C0 AA 01 19 90 00 00 C8 00 3A 15 80 28 72 00 00 19 00 04 0A B8 05 26 40 00 03 20 06 C2 58 00 A7 88 00 00 02 00 00 80 00 00"
val string_seated =
hex"181f0c000066d5bc84b00808000012e049006c006c006c004900490049006c006c006c0049006c0049006c006c0049006c006c006c004900" ++
hex"6c006c0049008452700000000000000000000000000000002000000fe6a703fffffffffffffffffffffffffffffffc000000000000000000" ++
hex"00000000000000000000019001900064000001007ec800c80000000000000000000000000000000000000001c00042c54686c70000008000" ++
hex"0012407870655f73616e6374756172795f68656c70907870655f74685f666972656d6f6465738b757365645f6265616d6572856d61703133" ++
hex"0000000000000000000000000000000000000000000000000000000000010a2302600404400000100006020814d0080c80000200026b4e00" ++
hex"82880000020000c041c09e01019000006400442a001091000000400018083894402032000000801905480217200000080070298043640000" ++
hex"32000e0540089c8000064001c0aa0119900000c8003a1580287200001900040ab805264000032006c25800a7880000020000800000"
val string_max =
hex"187d280000bc8010063cb74a247ad390000080400008a048006100480061004100540052004d00610078004a727bb69e808000000000003f" ++
hex"ffc000000020000000400703ffffffffffffffffffffffffffffffff14ec000000000000000000000000000000000001e001e00102040001" ++
hex"007ec800c800000000000000000000000000000000000000000000000140004686c840000600000012207870655f626174746c655f72616e" ++
hex"6b5f33917870655f62696e645f666163696c697479927870655f696e7374616e745f616374696f6e917870655f626174746c655f72616e6b" ++
hex"5f34917870655f626174746c655f72616e6b5f32927870655f73616e6374756172795f68656c708c7870655f64726f705f706f6493787065" ++
hex"5f6f72626974616c5f73687574746c65917870655f626174746c655f72616e6b5f358e7870655f74685f6e6f6e73616e638f7870655f7468" ++
hex"5f67726f756e645f708b7870655f74685f616d6d6f907870655f74685f666972656d6f6465738a7870655f74685f6d617897766973697465" ++
hex"645f73706974666972655f74757272657493766973697465645f77616c6c5f74757272657495766973697465645f7265736f757263655f73" ++
hex"696c6f9e766973697465645f63657274696669636174696f6e5f7465726d696e616c94766973697465645f6d65645f7465726d696e616c9a" ++
hex"766973697465645f62726f6164636173745f77617270676174658c757365645f7068616c616e789c766973697465645f6169725f76656869" ++
hex"636c655f7465726d696e616c94766973697465645f6266725f7465726d696e616c8b757365645f6379636c657297766973697465645f6761" ++
hex"6c6178795f7465726d696e616c98766973697465645f696d706c616e745f7465726d696e616c9a766973697465645f65787465726e616c5f" ++
hex"646f6f725f6c6f636b98766973697465645f7265737061776e5f7465726d696e616c8e766973697465645f6c6f636b657295766973697465" ++
hex"645f6d6f74696f6e5f73656e736f7293757365645f6772656e6164655f706c61736d6188757365645f72656b8d757365645f726570656174" ++
hex"65729f766973697465645f6465636f6e737472756374696f6e5f7465726d696e616c99766973697465645f7365636f6e646172795f636170" ++
hex"747572658f757365645f73757070726573736f7292757365645f74726865765f6275727374657295757365645f74726865765f6475616c63" ++
hex"79636c657292757365645f74726865765f706f756e64657298766973697465645f636170747572655f7465726d696e616c96766973697465" ++
hex"645f6f726465725f7465726d696e616c9f766973697465645f67726f756e645f76656869636c655f7465726d696e616c856d61703132856d" ++
hex"61703130856d61703039856d61703035856d61703033856d6170303200000000000000000000000000000000000000000000000000000000" ++
hex"0001131e5810040040000010000606049030080c800019000092080103900003200012414020b20000640015e01802102000000800030107" ++
hex"10380406400000100320840042e400000100049090086c80000480009214011590000190001242c023b20000320002486004964000064000" ++
hex"490d00c6c80000c8000921c019590000190001243c033b20000320002488006964000064000c211000086c80000020018424000115900000" ++
hex"04003084c00023b2000000800610a00004964000001000c2150000a6c8000002001842c00015590000004003085c0002bb2000000800610c" ++
hex"000059640000010000"
val string_br32 = hex"18 2c e0 00 00 bc 84 B0 00 0b ea 00 6c 7d f1 10 00 00 02 40 00 08 60 4b 00 69 00 43 00 6b 00 4a 00 72 00 02 31 3a cc 82 c0 00 00 00 00 00 00 00 00 3e df 42 00 20 00 0e 00 40 43 40 4c 04 00 02 e8 00 00 03 a8 00 00 01 9c 04 00 00 b8 99 84 00 0e 68 28 00 00 00 00 00 00 00 00 00 00 00 00 01 90 01 90 00 c8 00 00 01 00 7e c8 00 5c 00 00 01 29 c1 cc 80 00 00 00 00 00 00 00 00 00 00 00 00 03 c0 00 40 81 01 c4 45 46 86 c8 88 c9 09 4a 4a 80 50 0c 13 00 00 15 00 80 00 48 00 7870655f6f766572686561645f6d6170 8d7870655f776172705f676174658f7870655f666f726d5f6f75746669748c7870655f626c61636b6f7073927870655f636f6d6d616e645f72616e6b5f35927870655f636f6d6d616e645f72616e6b5f33927870655f73616e6374756172795f68656c70927870655f626174746c655f72616e6b5f3133927870655f626174746c655f72616e6b5f3132927870655f626174746c655f72616e6b5f3130927870655f626174746c655f72616e6b5f3134927870655f626174746c655f72616e6b5f3135937870655f6f72626974616c5f73687574746c658c7870655f64726f705f706f64917870655f62696e645f666163696c697479917870655f626174746c655f72616e6b5f33917870655f626174746c655f72616e6b5f35917870655f626174746c655f72616e6b5f348e7870655f6a6f696e5f73717561648e7870655f666f726d5f7371756164927870655f696e7374616e745f616374696f6e917870655f626174746c655f72616e6b5f32937870655f776172705f676174655f7573616765917870655f626174746c655f72616e6b5f38927870655f626174746c655f72616e6b5f3131917870655f626174746c655f72616e6b5f368e7870655f6d61696c5f616c657274927870655f636f6d6d616e645f72616e6b5f31927870655f626174746c655f72616e6b5f3230927870655f626174746c655f72616e6b5f3138927870655f626174746c655f72616e6b5f3139907870655f6a6f696e5f706c61746f6f6e927870655f626174746c655f72616e6b5f3137927870655f626174746c655f72616e6b5f31368f7870655f6a6f696e5f6f7574666974927870655f626174746c655f72616e6b5f3235927870655f626174746c655f72616e6b5f3234927870655f636f6d6d616e645f72616e6b5f34907870655f666f726d5f706c61746f6f6e8c7870655f62696e645f616d73917870655f626174746c655f72616e6b5f39917870655f626174746c655f72616e6b5f378d7870655f74685f726f757465728c7870655f74685f666c61696c8a7870655f74685f616e748a7870655f74685f616d738f7870655f74685f67726f756e645f708c7870655f74685f6169725f708c7870655f74685f686f7665728d7870655f74685f67726f756e648a7870655f74685f626672927870655f74685f61667465726275726e65728a7870655f74685f6169728c7870655f74685f636c6f616b89757365645f6f69637791757365645f616476616e6365645f61636597766973697465645f73706974666972655f74757272657498766973697465645f73706974666972655f636c6f616b656493766973697465645f73706974666972655f616192766973697465645f74616e6b5f7472617073a1766973697465645f706f727461626c655f6d616e6e65645f7475727265745f6e63a1766973697465645f706f727461626c655f6d616e6e65645f7475727265745f74728e757365645f6d61676375747465728f757365645f636861696e626c6164658f757365645f666f726365626c61646593766973697465645f77616c6c5f74757272657498766973697465645f616e6369656e745f7465726d696e616c8b766973697465645f616d738b766973697465645f616e7490766973697465645f64726f707368697091766973697465645f6c6962657261746f7294766973697465645f6c6967687467756e7368697091766973697465645f6c696768746e696e6790766973697465645f6d616772696465728f766973697465645f70726f776c657293766973697465645f71756164737465616c746890766973697465645f736b7967756172649a766973697465645f74687265656d616e686561767962756767799d766973697465645f74776f5f6d616e5f61737361756c745f627567677998766973697465645f74776f6d616e6865617679627567677998766973697465645f74776f6d616e686f766572627567677990766973697465645f76616e67756172648d766973697465645f666c61696c8e766973697465645f726f7574657293766973697465645f737769746368626c6164658e766973697465645f6175726f726193766973697465645f626174746c657761676f6e8c766973697465645f6675727993766973697465645f7175616461737361756c7496766973697465645f67616c6178795f67756e736869708e766973697465645f6170635f74728e766973697465645f6170635f767390766973697465645f6c6f64657374617290766973697465645f7068616e7461736d91766973697465645f7468756e64657265728e766973697465645f6170635f6e638f766973697465645f76756c747572658c766973697465645f7761737090766973697465645f6d6f73717569746f97766973697465645f617068656c696f6e5f666c6967687497766973697465645f617068656c696f6e5f67756e6e657297766973697465645f636f6c6f737375735f666c6967687497766973697465645f636f6c6f737375735f67756e6e657298766973697465645f706572656772696e655f666c6967687498766973697465645f706572656772696e655f67756e6e657289757365645f62616e6b95766973697465645f7265736f757263655f73696c6f9e766973697465645f63657274696669636174696f6e5f7465726d696e616c94766973697465645f6d65645f7465726d696e616c93757365645f6e616e6f5f64697370656e73657295766973697465645f73656e736f725f736869656c649a766973697465645f62726f6164636173745f77617270676174658c757365645f7068616c616e7894757365645f7068616c616e785f6176636f6d626f96757365645f7068616c616e785f666c616b636f6d626f96766973697465645f77617270676174655f736d616c6c91757365645f666c616d657468726f7765729a757365645f616e6369656e745f7475727265745f776561706f6e92766973697465645f4c4c555f736f636b657492757365645f656e657267795f67756e5f6e6397766973697465645f6d656469756d7472616e73706f72749f757365645f617068656c696f6e5f696d6d6f6c6174696f6e5f63616e6e6f6e93757365645f6772656e6164655f706c61736d6193757365645f6772656e6164655f6a616d6d657298766973697465645f736869656c645f67656e657261746f7295766973697465645f6d6f74696f6e5f73656e736f7296766973697465645f6865616c74685f6372797374616c96766973697465645f7265706169725f6372797374616c97766973697465645f76656869636c655f6372797374616c91757365645f6772656e6164655f6672616788757365645f61636598766973697465645f6164765f6d65645f7465726d696e616c8b757365645f6265616d657290757365645f626f6c745f6472697665728b757365645f6379636c65728a757365645f676175737391757365645f68756e7465727365656b657288757365645f6973708b757365645f6c616e6365728b757365645f6c61736865728e757365645f6d61656c7374726f6d8c757365645f70686f656e69788b757365645f70756c7361728d757365645f70756e69736865728e757365645f725f73686f7467756e8d757365645f7261646961746f7288757365645f72656b8d757365645f72657065617465728c757365645f726f636b6c65748c757365645f737472696b65728f757365645f73757070726573736f728c757365645f7468756d7065729c766973697465645f76616e755f636f6e74726f6c5f636f6e736f6c6598766973697465645f636170747572655f7465726d696e616c92757365645f6d696e695f636861696e67756e91757365645f6c617a655f706f696e7465728c757365645f74656c657061648b757365645f7370696b657291757365645f68656176795f736e6970657293757365645f636f6d6d616e645f75706c696e6b8d757365645f66697265626972648e757365645f666c6563686574746594757365645f68656176795f7261696c5f6265616d89757365645f696c63399a766973697465645f67656e657261746f725f7465726d696e616c8e766973697465645f6c6f636b65729a766973697465645f65787465726e616c5f646f6f725f6c6f636b9c766973697465645f6169725f76656869636c655f7465726d696e616c97766973697465645f67616c6178795f7465726d696e616c98766973697465645f696d706c616e745f7465726d696e616c99766973697465645f7365636f6e646172795f6361707475726590757365645f32356d6d5f63616e6e6f6e99757365645f6c6962657261746f725f626f6d6261726469657293766973697465645f7265706169725f73696c6f93766973697465645f76616e755f6d6f64756c6591757365645f666c61696c5f776561706f6e8b757365645f73637974686598766973697465645f7265737061776e5f7465726d696e616c8c757365645f62616c6c67756e92757365645f656e657267795f67756e5f747295757365645f616e6e69766572736172795f67756e6195757365645f616e6e69766572736172795f67756e6294757365645f616e6e69766572736172795f67756e90757365645f37356d6d5f63616e6e6f6e92757365645f6170635f6e635f776561706f6e92757365645f6170635f74725f776561706f6e92757365645f6170635f76735f776561706f6e90757365645f666c75785f63616e6e6f6e9f757365645f617068656c696f6e5f706c61736d615f726f636b65745f706f6491757365645f617068656c696f6e5f7070618c757365645f666c7578706f6494766973697465645f6266725f7465726d696e616c9e757365645f636f6c6f737375735f636c75737465725f626f6d625f706f64a0757365645f636f6c6f737375735f6475616c5f3130306d6d5f63616e6e6f6e7399757365645f636f6c6f737375735f74616e6b5f63616e6e6f6e96766973697465645f656e657267795f6372797374616c9b757365645f68656176795f6772656e6164655f6c61756e6368657298757365645f33356d6d5f726f74617279636861696e67756e8b757365645f6b6174616e6190757365645f33356d6d5f63616e6e6f6e93757365645f7265617665725f776561706f6e7396757365645f6c696768746e696e675f776561706f6e738c757365645f6d65645f61707090757365645f32306d6d5f63616e6e6f6e98766973697465645f6d6f6e6f6c6974685f616d657269736899766973697465645f6d6f6e6f6c6974685f636572797368656e97766973697465645f6d6f6e6f6c6974685f637973736f7297766973697465645f6d6f6e6f6c6974685f6573616d697299766973697465645f6d6f6e6f6c6974685f666f72736572616c99766973697465645f6d6f6e6f6c6974685f697368756e64617298766973697465645f6d6f6e6f6c6974685f7365617268757397766973697465645f6d6f6e6f6c6974685f736f6c73617292757365645f6e635f6865765f66616c636f6e99757365645f6e635f6865765f7363617474657263616e6e6f6e93757365645f6e635f6865765f73706172726f7791757365645f61726d6f725f736970686f6e9f757365645f706572656772696e655f6475616c5f6d616368696e655f67756e9f757365645f706572656772696e655f6475616c5f726f636b65745f706f647399757365645f706572656772696e655f6d65636868616d6d65729e757365645f706572656772696e655f7061727469636c655f63616e6e6f6e96757365645f706572656772696e655f73706172726f7791757365645f3130356d6d5f63616e6e6f6e92757365645f31356d6d5f636861696e67756ea0757365645f70756c7365645f7061727469636c655f616363656c657261746f7293757365645f726f74617279636861696e67756e9f766973697465645f6465636f6e737472756374696f6e5f7465726d696e616c95757365645f736b7967756172645f776561706f6e7391766973697465645f67656e657261746f7291757365645f67617573735f63616e6e6f6e89757365645f7472656b95757365645f76616e67756172645f776561706f6e73a4766973697465645f616e6369656e745f6169725f76656869636c655f7465726d696e616ca2766973697465645f616e6369656e745f65717569706d656e745f7465726d696e616c96766973697465645f6f726465725f7465726d696e616ca7766973697465645f616e6369656e745f67726f756e645f76656869636c655f7465726d696e616c9f766973697465645f67726f756e645f76656869636c655f7465726d696e616c97757365645f76756c747572655f626f6d6261726469657298757365645f76756c747572655f6e6f73655f63616e6e6f6e98757365645f76756c747572655f7461696c5f63616e6e6f6e97757365645f776173705f776561706f6e5f73797374656d91766973697465645f636861726c6965303191766973697465645f636861726c6965303291766973697465645f636861726c6965303391766973697465645f636861726c6965303491766973697465645f636861726c6965303591766973697465645f636861726c6965303691766973697465645f636861726c6965303791766973697465645f636861726c6965303891766973697465645f636861726c6965303996766973697465645f67696e6765726d616e5f6174617298766973697465645f67696e6765726d616e5f646168616b6196766973697465645f67696e6765726d616e5f6876617296766973697465645f67696e6765726d616e5f697a686199766973697465645f67696e6765726d616e5f6a616d7368696498766973697465645f67696e6765726d616e5f6d697468726198766973697465645f67696e6765726d616e5f726173686e7599766973697465645f67696e6765726d616e5f7372616f73686198766973697465645f67696e6765726d616e5f79617a61746195766973697465645f67696e6765726d616e5f7a616c8e766973697465645f736c656430318e766973697465645f736c656430328e766973697465645f736c656430348e766973697465645f736c656430358e766973697465645f736c656430368e766973697465645f736c656430378e766973697465645f736c6564303897766973697465645f736e6f776d616e5f616d657269736898766973697465645f736e6f776d616e5f636572797368656e96766973697465645f736e6f776d616e5f637973736f7296766973697465645f736e6f776d616e5f6573616d697298766973697465645f736e6f776d616e5f666f72736572616c96766973697465645f736e6f776d616e5f686f7373696e98766973697465645f736e6f776d616e5f697368756e64617297766973697465645f736e6f776d616e5f7365617268757396766973697465645f736e6f776d616e5f736f6c736172857567643036857567643035857567643034857567643033857567643032857567643031856d61703939856d61703938856d61703937856d61703936856d61703135856d61703134856d61703131856d61703038856d61703034856d61703035856d61703033856d61703031856d61703036856d61703032856d61703039856d61703037856d617031300300000091747261696e696e675f73746172745f6e638b747261696e696e675f75698c747261696e696e675f6d61700000000000000000000000000000000000000000800000003d0c04d350840240000010000602429660f80c80000c8004200c1b81480000020000c046f18a47019000019000ca4644304900000040001809e6bb052032000008001a84787211200000080003010714889c06400000100320ff0a42e4000001009e95a7342e03200000080003010408c914064000000001198990c4e4000001000060223b9b2180c800000a00081c20c92c800003600414ec172d900000040001808de1284a0320000320008ef1c336b20000078011d830e6f6400000600569c417e2c80000020000c04102502f019000008c00ce31027d99000000400018099e6146203200004b0015a7d44002f720000008000301040c18dc064000023000b1240800636400000100006020e0e92280c80000c800081650c00cfc800006400ce32a1801a59000000400018099e6fc3e03200004b00058b14680463200000080003010742610c064000043000b16c8880916400000100006020e0d01580c80000c8006714e24012cc80000020000c04cf25c190190000258001032e240307900000c8019c74470061b2000000800030133ced8fc0640000960012d9a8d00f0640000010025b9c1401e4c8000002004b6b23c03d1900000040098f585007b3200000080131a58c00f864000001002536f1c01f4c8000002004a64e2a03f190000004015e1b4580873200000080003010711f8a406400000100110a00c010ee400000100006020e2a51380c8000002002218d21021ec80000020000c041c40249019000000400af18a44043f90000004000180838b44760320000008015e38c80088320000008000301071490cc064000001002bc35890110e400000100006020e2052180c800000200221f90d0222c80000020000c041c5e447019000000400442e62e044790000004000180838af032032000000800886d08c089320000008000301071738740640000010011098898112e400000100006020e2361c80c8000002002212a1b0226c80000020000c041c512170190000004004420a32044f900000040001808389104a0320000008008874c8808a3200000080003010715907c06400000100110c0898114e400000100006020e2771a80c800000200578bd13022ac80000020000c041c424330190000004004423848045790000004000180838bfc32032000000801a86506008b320000008000301071030dc06400000100129f68a0117640000010026353110232c8000002004b69438046d90000004015e2887008eb200000080003010715909406400000100350fb8e011de400000100006020e2881980c8000002005786d0f023cc80000020000c041c4cc3b019000000400af1ba1c047b90000004000180838af872032000000800886344408fb20000008000301071620d406400000100110c10b011fe400000100006020e2870d80c800000200578f30c0240c80000020000c041c5863b019000000400442ee300483900000040001808388605e032000000801a86f03c090b200000080003010712a8fc064000001002bc0d858121e400000100006020e2521c80c800000200578b7230244c80000020000c041c49629019000000400d434026048b90000004000180838afc42032000000801a86d864091b200000080003010711989c064000001003508c8c8123e400000100006020e2a82280c8000002006a14f110248c80000020000c041c4be21019000000400af12640049390000004000180838a54720320000008015e33430092b20000008000301071228cc064000001003546e8d432400000100004f34a631139000004001b0834723120000008000204000c2ed0fa1c800000200a8432234a90000004000180952b248a0320000018004024c569d20000008000250a4d0ebc480000020000c04a24bc43019000000c00e0"
val string_ccrider = hex"18 4a c7 00 00 bc 84 B0 0c 0b 95 59 9a 84 40 b0 00 01 32 00 00 08 70 43 00 43 00 52 00 49 00 44 00 45 00 52 00 82 28 c9 3d 04 40 03 c0 01 40 02 80 00 40 35 18 40 00 25 40 42 00 6c 00 61 00 63 00 6b 00 20 00 41 00 72 00 6d 00 6f 00 72 00 65 00 64 00 20 00 52 00 65 00 61 00 70 00 65 00 72 00 73 00 0f 00 00 03 02 0c 00 00 03 88 00 00 00 d4 00 00 01 9c 04 00 00 09 19 90 02 04 3c 28 00 00 00 00 00 00 00 00 00 00 00 00 01 90 01 90 00 64 00 00 01 00 7e c8 00 c8 00 00 01 b9 53 4c 00 00 00 00 00 00 00 00 00 00 00 00 00 03 40 00 40 81 c6 86 c8 48 88 c9 09 49 8a 67 86 e0 00 01 25 e0 32 d8 09 6c 00 00 3c 04 00 02 30 7870655f626c61636b6f7073917870655f626174746c655f72616e6b5f39927870655f626174746c655f72616e6b5f3233927870655f636f6d6d616e645f72616e6b5f318f7870655f666f726d5f6f75746669748e7870655f6d61696c5f616c657274927870655f626174746c655f72616e6b5f3232927870655f636f6d6d616e645f72616e6b5f33907870655f666f726d5f706c61746f6f6e927870655f626174746c655f72616e6b5f3133927870655f626174746c655f72616e6b5f3132927870655f626174746c655f72616e6b5f3130927870655f626174746c655f72616e6b5f3134927870655f626174746c655f72616e6b5f3135917870655f626174746c655f72616e6b5f38927870655f626174746c655f72616e6b5f3131927870655f626174746c655f72616e6b5f3231927870655f626174746c655f72616e6b5f3230927870655f626174746c655f72616e6b5f3138927870655f626174746c655f72616e6b5f3139907870655f6a6f696e5f706c61746f6f6e927870655f626174746c655f72616e6b5f3137927870655f626174746c655f72616e6b5f31368f7870655f6a6f696e5f6f7574666974927870655f626174746c655f72616e6b5f3235927870655f626174746c655f72616e6b5f3234917870655f626174746c655f72616e6b5f37917870655f62696e645f666163696c6974798c7870655f62696e645f616d73927870655f636f6d6d616e645f72616e6b5f35927870655f636f6d6d616e645f72616e6b5f32927870655f696e7374616e745f616374696f6e8e7870655f666f726d5f7371756164917870655f626174746c655f72616e6b5f34937870655f776172705f676174655f7573616765917870655f626174746c655f72616e6b5f32917870655f626174746c655f72616e6b5f33927870655f73616e6374756172795f68656c708c7870655f64726f705f706f64937870655f6f72626974616c5f73687574746c65917870655f626174746c655f72616e6b5f368e7870655f6a6f696e5f7371756164917870655f626174746c655f72616e6b5f35927870655f74685f737769746368626c6164658d7870655f74685f726f757465728c7870655f74685f666c61696c8a7870655f74685f616e748a7870655f74685f616d738a7870655f74685f62667289757365645f6f69637791757365645f616476616e6365645f61636597766973697465645f73706974666972655f74757272657498766973697465645f73706974666972655f636c6f616b656493766973697465645f73706974666972655f616192766973697465645f74616e6b5f7472617073a1766973697465645f706f727461626c655f6d616e6e65645f7475727265745f6e638e757365645f6d616763757474657293766973697465645f77616c6c5f7475727265748b766973697465645f616d738b766973697465645f616e7490766973697465645f64726f707368697091766973697465645f6c6962657261746f7294766973697465645f6c6967687467756e7368697091766973697465645f6c696768746e696e6790766973697465645f6d616772696465728f766973697465645f70726f776c657293766973697465645f71756164737465616c746890766973697465645f736b7967756172649a766973697465645f74687265656d616e686561767962756767799d766973697465645f74776f5f6d616e5f61737361756c745f627567677998766973697465645f74776f6d616e6865617679627567677998766973697465645f74776f6d616e686f766572627567677990766973697465645f76616e67756172648d766973697465645f666c61696c8e766973697465645f726f7574657293766973697465645f737769746368626c6164658e766973697465645f6175726f726193766973697465645f626174746c657761676f6e8c766973697465645f6675727993766973697465645f7175616461737361756c7496766973697465645f67616c6178795f67756e736869708e766973697465645f6170635f74728e766973697465645f6170635f767390766973697465645f6c6f64657374617290766973697465645f7068616e7461736d91766973697465645f7468756e64657265728e766973697465645f6170635f6e638f766973697465645f76756c747572658c766973697465645f7761737090766973697465645f6d6f73717569746f97766973697465645f617068656c696f6e5f666c6967687497766973697465645f617068656c696f6e5f67756e6e657297766973697465645f636f6c6f737375735f666c6967687497766973697465645f636f6c6f737375735f67756e6e657298766973697465645f706572656772696e655f666c6967687498766973697465645f706572656772696e655f67756e6e657289757365645f62616e6b95766973697465645f7265736f757263655f73696c6f9e766973697465645f63657274696669636174696f6e5f7465726d696e616c94766973697465645f6d65645f7465726d696e616c93757365645f6e616e6f5f64697370656e73657295766973697465645f73656e736f725f736869656c649a766973697465645f62726f6164636173745f77617270676174658c757365645f7068616c616e7894757365645f7068616c616e785f6176636f6d626f96757365645f7068616c616e785f666c616b636f6d626f96766973697465645f77617270676174655f736d616c6c91757365645f666c616d657468726f7765729a757365645f616e6369656e745f7475727265745f776561706f6e92766973697465645f4c4c555f736f636b657492757365645f656e657267795f67756e5f6e6397766973697465645f6d656469756d7472616e73706f72749f757365645f617068656c696f6e5f696d6d6f6c6174696f6e5f63616e6e6f6e93757365645f6772656e6164655f706c61736d6193757365645f6772656e6164655f6a616d6d657298766973697465645f736869656c645f67656e657261746f7295766973697465645f6d6f74696f6e5f73656e736f7296766973697465645f6865616c74685f6372797374616c96766973697465645f7265706169725f6372797374616c97766973697465645f76656869636c655f6372797374616c91757365645f6772656e6164655f6672616788757365645f61636598766973697465645f6164765f6d65645f7465726d696e616c8b757365645f6265616d657290757365645f626f6c745f6472697665728b757365645f6379636c65728a757365645f676175737391757365645f68756e7465727365656b657288757365645f6973708b757365645f6c616e6365728b757365645f6c61736865728e757365645f6d61656c7374726f6d8c757365645f70686f656e69788b757365645f70756c7361728d757365645f70756e69736865728e757365645f725f73686f7467756e8d757365645f7261646961746f7288757365645f72656b8d757365645f72657065617465728c757365645f726f636b6c65748c757365645f737472696b65728f757365645f73757070726573736f728c757365645f7468756d7065729c766973697465645f76616e755f636f6e74726f6c5f636f6e736f6c6598766973697465645f636170747572655f7465726d696e616c92757365645f6d696e695f636861696e67756e91757365645f6c617a655f706f696e7465728c757365645f74656c657061648b757365645f7370696b657291757365645f68656176795f736e6970657293757365645f636f6d6d616e645f75706c696e6b8d757365645f66697265626972648e757365645f666c6563686574746594757365645f68656176795f7261696c5f6265616d89757365645f696c63399a766973697465645f67656e657261746f725f7465726d696e616c8e766973697465645f6c6f636b65729a766973697465645f65787465726e616c5f646f6f725f6c6f636b9c766973697465645f6169725f76656869636c655f7465726d696e616c97766973697465645f67616c6178795f7465726d696e616c98766973697465645f696d706c616e745f7465726d696e616c99766973697465645f7365636f6e646172795f6361707475726590757365645f32356d6d5f63616e6e6f6e99757365645f6c6962657261746f725f626f6d6261726469657293766973697465645f7265706169725f73696c6f93766973697465645f76616e755f6d6f64756c6591757365645f666c61696c5f776561706f6e8b757365645f73637974686598766973697465645f7265737061776e5f7465726d696e616c8c757365645f62616c6c67756e95757365645f616e6e69766572736172795f67756e6195757365645f616e6e69766572736172795f67756e6294757365645f616e6e69766572736172795f67756e90757365645f37356d6d5f63616e6e6f6e92757365645f6170635f6e635f776561706f6e92757365645f6170635f74725f776561706f6e92757365645f6170635f76735f776561706f6e90757365645f666c75785f63616e6e6f6e93757365645f617068656c696f6e5f6c617365729f757365645f617068656c696f6e5f706c61736d615f726f636b65745f706f6491757365645f617068656c696f6e5f70706196757365645f617068656c696f6e5f73746172666972658c757365645f666c7578706f6494766973697465645f6266725f7465726d696e616c95757365645f636f6c6f737375735f6275727374657296757365645f636f6c6f737375735f636861696e67756e9e757365645f636f6c6f737375735f636c75737465725f626f6d625f706f64a0757365645f636f6c6f737375735f6475616c5f3130306d6d5f63616e6e6f6e7399757365645f636f6c6f737375735f74616e6b5f63616e6e6f6e96766973697465645f64616d6167655f6372797374616c96766973697465645f656e657267795f6372797374616c9b757365645f68656176795f6772656e6164655f6c61756e6368657298757365645f33356d6d5f726f74617279636861696e67756e8b757365645f6b6174616e6190757365645f33356d6d5f63616e6e6f6e93757365645f7265617665725f776561706f6e7396757365645f6c696768746e696e675f776561706f6e738c757365645f6d65645f61707090757365645f32306d6d5f63616e6e6f6e98766973697465645f6d6f6e6f6c6974685f616d657269736899766973697465645f6d6f6e6f6c6974685f636572797368656e97766973697465645f6d6f6e6f6c6974685f637973736f7297766973697465645f6d6f6e6f6c6974685f6573616d697299766973697465645f6d6f6e6f6c6974685f666f72736572616c97766973697465645f6d6f6e6f6c6974685f686f7373696e99766973697465645f6d6f6e6f6c6974685f697368756e64617298766973697465645f6d6f6e6f6c6974685f7365617268757397766973697465645f6d6f6e6f6c6974685f736f6c73617292757365645f6e635f6865765f66616c636f6e99757365645f6e635f6865765f7363617474657263616e6e6f6e93757365645f6e635f6865765f73706172726f7791757365645f61726d6f725f736970686f6e9f757365645f706572656772696e655f6475616c5f6d616368696e655f67756e9f757365645f706572656772696e655f6475616c5f726f636b65745f706f647399757365645f706572656772696e655f6d65636868616d6d65728f757365645f6e74755f736970686f6e9e757365645f706572656772696e655f7061727469636c655f63616e6e6f6e96757365645f706572656772696e655f73706172726f7791757365645f3130356d6d5f63616e6e6f6e92757365645f31356d6d5f636861696e67756ea0757365645f70756c7365645f7061727469636c655f616363656c657261746f7293757365645f726f74617279636861696e67756e9f766973697465645f6465636f6e737472756374696f6e5f7465726d696e616c95757365645f736b7967756172645f776561706f6e7391766973697465645f67656e657261746f7291757365645f67617573735f63616e6e6f6e89757365645f7472656b95757365645f76616e67756172645f776561706f6e73a4766973697465645f616e6369656e745f6169725f76656869636c655f7465726d696e616ca2766973697465645f616e6369656e745f65717569706d656e745f7465726d696e616c96766973697465645f6f726465725f7465726d696e616ca7766973697465645f616e6369656e745f67726f756e645f76656869636c655f7465726d696e616c9f766973697465645f67726f756e645f76656869636c655f7465726d696e616c97757365645f76756c747572655f626f6d6261726469657298757365645f76756c747572655f6e6f73655f63616e6e6f6e98757365645f76756c747572655f7461696c5f63616e6e6f6e97757365645f776173705f776561706f6e5f73797374656d91766973697465645f636861726c6965303591766973697465645f636861726c6965303691766973697465645f636861726c6965303791766973697465645f636861726c6965303891766973697465645f636861726c696530398e766973697465645f736c656430348e766973697465645f736c656430358e766973697465645f736c656430368e766973697465645f736c656430378e766973697465645f736c65643038857567643036857567643035857567643034857567643033857567643032857567643031856d61703939856d61703938856d61703937856d61703936856d61703135856d61703134856d61703133856d61703132856d61703131856d61703034856d61703035856d61703033856d61703031856d61703036856d61703032856d61703039856d61703037856d617031300800000092747261696e696e675f776561706f6e73303192747261696e696e675f7761727067617465738c747261696e696e675f6d617092747261696e696e675f696e76656e746f727990747261696e696e675f6865616c696e678d747261696e696e675f686172748f747261696e696e675f61726d6f727390747261696e696e675f77656c636f6d650000000000000000000000000000000000000000ab000480000005000000058000000800000008800000090000000f0000000f8000001000000012800000130000001a0000001a8000001c800000228000002e00000031800000320000003580000036000000368000003700000039000000398000003a0000003a8000003b0000003f800000400000004080000041000000418000004e000000518000005580000059000000598000005a0000005a800000610000006180000063000000648000006b8000006c0000006c8000006f0000006f800000700000007080000071000000718000007280000073000000798000007a0000000080800004808000050080000a8080000b0080000d8080000e0080000e8080000f0080001080800011008000140080001c808000270080002a8080002b00800033808000388080003c0080003c8080004000800043808000440080004480800045008000470080004c0080004f808000520080005400800000002f0a26c9313c024000001000060279a272780c80000100026b271682480000020000c041c0464f019000006400d43541d08900000040001808388946a0320000008019041c821700000008046ce915631018000000400018083822c6a030000019001d2338421b00000008000301070438ac060000032003a4630c466000000100006020e06c1e80c000006400748e01c92c00000020000c041c11e4101800000c800e90a02331800000040001808381b06e030000019001989ec436b000000080003010c81d924060000019003310e87f0600000010000602190d31780c000003200662fa22e6c00000020000c04320a82f018000006400e90683bd9800000040001808381205a030000019000205808bcb000001900040e4908058e0000032006629c1d00b4c00000020000c043209c35018000006400cc480320175800000040001808642084a03000000c80198880540303000000080003010c87d86c060000019000b17e9100636000000100006020e01f2080c00000c800081580f010bc000006400414961a022f800000040001808de0004603000003200082818840477000000080003011bc0a11406000006400040a28680b2e000003200569271a017ac00000020000c041037435018000008c00ce2e04003498000000400018099e6c46e03000004b0019c4483406b70000000800030133cc28ec06000009600040ad8e80dfe0000032006710e1201fec00000020000c04cf2a837018000025800ce37432040f8000000400018099e7586a03000004b00058b18480843000000080003010702f11406000006400040f690010ce0000032000e0222786c8000064001c1d82b13900000c800380205233200001900074559050e40000320079afa0fa4c800002000d84b64f4e9000000400010300380"
val string_xrider912 = hex"18cf8c0000bc83e0d97fc6204c5f20800008e00000089078005200690064006500720039003100320082084295c4c000c000c0000000001ed00000248048006f006f006b006500640020004f006e00200049006e00730061006e006900740079000500000302ac0000016c04000114000001a004000220e46c03cb4000000000000000000000000000019001900064000001007ec800c8000001abc44480000000000000000000000000030000408101c686c888c9094a7e8a40000125e012d8196c000344000002487870655f636f6d6d616e645f72616e6b5f32907870655f6a6f696e5f706c61746f6f6e927870655f626174746c655f72616e6b5f3230927870655f626174746c655f72616e6b5f3231927870655f626174746c655f72616e6b5f32328f7870655f666f726d5f6f75746669748c7870655f626c61636b6f7073927870655f626174746c655f72616e6b5f3133927870655f626174746c655f72616e6b5f3132927870655f626174746c655f72616e6b5f3130927870655f626174746c655f72616e6b5f3134927870655f626174746c655f72616e6b5f3135917870655f626174746c655f72616e6b5f358e7870655f6a6f696e5f73717561648e7870655f666f726d5f7371756164927870655f696e7374616e745f616374696f6e917870655f626174746c655f72616e6b5f38927870655f626174746c655f72616e6b5f3131917870655f626174746c655f72616e6b5f36927870655f626174746c655f72616e6b5f3138927870655f626174746c655f72616e6b5f3139927870655f626174746c655f72616e6b5f3137927870655f626174746c655f72616e6b5f31368f7870655f6a6f696e5f6f7574666974917870655f626174746c655f72616e6b5f39917870655f626174746c655f72616e6b5f37927870655f636f6d6d616e645f72616e6b5f31937870655f6f72626974616c5f73687574746c658c7870655f64726f705f706f64927870655f73616e6374756172795f68656c70917870655f62696e645f666163696c697479917870655f626174746c655f72616e6b5f33917870655f626174746c655f72616e6b5f32937870655f776172705f676174655f75736167658c7870655f62696e645f616d73917870655f626174746c655f72616e6b5f348e7870655f74685f6e6f6e73616e638d7870655f74685f726f757465728c7870655f74685f666c61696c8a7870655f74685f616e748a7870655f74685f616d738f7870655f74685f67726f756e645f708c7870655f74685f6169725f708c7870655f74685f686f7665728d7870655f74685f67726f756e648a7870655f74685f626672927870655f74685f61667465726275726e65728a7870655f74685f6169728b7870655f74685f616d6d6f907870655f74685f666972656d6f6465738c7870655f74685f636c6f616b8a7870655f74685f6d617889757365645f6f69637791757365645f616476616e6365645f61636597766973697465645f73706974666972655f74757272657498766973697465645f73706974666972655f636c6f616b656493766973697465645f73706974666972655f616192766973697465645f74616e6b5f7472617073a1766973697465645f706f727461626c655f6d616e6e65645f7475727265745f74728f757365645f636861696e626c61646593766973697465645f77616c6c5f7475727265748b766973697465645f616d738b766973697465645f616e7490766973697465645f64726f707368697091766973697465645f6c6962657261746f7294766973697465645f6c6967687467756e7368697091766973697465645f6c696768746e696e678f766973697465645f70726f776c657293766973697465645f71756164737465616c746890766973697465645f736b7967756172649a766973697465645f74687265656d616e686561767962756767799d766973697465645f74776f5f6d616e5f61737361756c745f627567677998766973697465645f74776f6d616e6865617679627567677998766973697465645f74776f6d616e686f766572627567677990766973697465645f76616e67756172648d766973697465645f666c61696c8e766973697465645f726f7574657293766973697465645f626174746c657761676f6e8c766973697465645f6675727993766973697465645f7175616461737361756c7496766973697465645f67616c6178795f67756e736869708e766973697465645f6170635f747290766973697465645f6c6f64657374617290766973697465645f7068616e7461736d8e766973697465645f6170635f6e638f766973697465645f76756c747572658c766973697465645f7761737090766973697465645f6d6f73717569746f97766973697465645f636f6c6f737375735f666c6967687489757365645f62616e6b95766973697465645f7265736f757263655f73696c6f9e766973697465645f63657274696669636174696f6e5f7465726d696e616c94766973697465645f6d65645f7465726d696e616c93757365645f6e616e6f5f64697370656e73657295766973697465645f73656e736f725f736869656c649a766973697465645f62726f6164636173745f77617270676174658c757365645f7068616c616e7896757365645f7068616c616e785f666c616b636f6d626f96766973697465645f77617270676174655f736d616c6c91757365645f666c616d657468726f7765729a757365645f616e6369656e745f7475727265745f776561706f6e92766973697465645f4c4c555f736f636b657497766973697465645f6d656469756d7472616e73706f727493757365645f6772656e6164655f706c61736d6193757365645f6772656e6164655f6a616d6d657298766973697465645f736869656c645f67656e657261746f7295766973697465645f6d6f74696f6e5f73656e736f7297766973697465645f76656869636c655f6372797374616c91757365645f6772656e6164655f6672616788757365645f61636598766973697465645f6164765f6d65645f7465726d696e616c90757365645f626f6c745f6472697665728b757365645f6379636c65728a757365645f676175737391757365645f68756e7465727365656b657288757365645f6973708b757365645f6c616e6365728b757365645f6c61736865728e757365645f6d61656c7374726f6d8c757365645f70686f656e69788b757365645f70756c7361728d757365645f70756e69736865728e757365645f725f73686f7467756e8d757365645f7261646961746f7288757365645f72656b8d757365645f72657065617465728c757365645f726f636b6c65748c757365645f737472696b65728f757365645f73757070726573736f728c757365645f7468756d70657292757365645f74726865765f6275727374657295757365645f74726865765f6475616c6379636c657292757365645f74726865765f706f756e6465729c766973697465645f76616e755f636f6e74726f6c5f636f6e736f6c6598766973697465645f636170747572655f7465726d696e616c92757365645f6d696e695f636861696e67756e91757365645f6c617a655f706f696e7465728c757365645f74656c657061648b757365645f7370696b657291757365645f68656176795f736e697065728d757365645f66697265626972648e757365645f666c6563686574746594757365645f68656176795f7261696c5f6265616d9a766973697465645f67656e657261746f725f7465726d696e616c8e766973697465645f6c6f636b65729a766973697465645f65787465726e616c5f646f6f725f6c6f636b9c766973697465645f6169725f76656869636c655f7465726d696e616c97766973697465645f67616c6178795f7465726d696e616c98766973697465645f696d706c616e745f7465726d696e616c99766973697465645f7365636f6e646172795f6361707475726590757365645f32356d6d5f63616e6e6f6e99757365645f6c6962657261746f725f626f6d6261726469657293766973697465645f7265706169725f73696c6f93766973697465645f76616e755f6d6f64756c6591757365645f666c61696c5f776561706f6e98766973697465645f7265737061776e5f7465726d696e616c92757365645f656e657267795f67756e5f747295757365645f616e6e69766572736172795f67756e6195757365645f616e6e69766572736172795f67756e6292757365645f6170635f74725f776561706f6e90757365645f666c75785f63616e6e6f6e94766973697465645f6266725f7465726d696e616ca0757365645f636f6c6f737375735f6475616c5f3130306d6d5f63616e6e6f6e7399757365645f636f6c6f737375735f74616e6b5f63616e6e6f6e9b757365645f68656176795f6772656e6164655f6c61756e6368657298757365645f33356d6d5f726f74617279636861696e67756e8b757365645f6b6174616e6190757365645f33356d6d5f63616e6e6f6e93757365645f7265617665725f776561706f6e7396757365645f6c696768746e696e675f776561706f6e738c757365645f6d65645f61707090757365645f32306d6d5f63616e6e6f6e99766973697465645f6d6f6e6f6c6974685f666f72736572616c91757365645f3130356d6d5f63616e6e6f6e92757365645f31356d6d5f636861696e67756e93757365645f726f74617279636861696e67756e9f766973697465645f6465636f6e737472756374696f6e5f7465726d696e616c95757365645f736b7967756172645f776561706f6e7391766973697465645f67656e657261746f7289757365645f7472656b95757365645f76616e67756172645f776561706f6e73a4766973697465645f616e6369656e745f6169725f76656869636c655f7465726d696e616ca2766973697465645f616e6369656e745f65717569706d656e745f7465726d696e616c96766973697465645f6f726465725f7465726d696e616c9f766973697465645f67726f756e645f76656869636c655f7465726d696e616c97757365645f76756c747572655f626f6d6261726469657298757365645f76756c747572655f6e6f73655f63616e6e6f6e98757365645f76756c747572655f7461696c5f63616e6e6f6e97757365645f776173705f776561706f6e5f73797374656d857567643035857567643034857567643033857567643032857567643031856d61703939856d61703938856d61703937856d61703135856d61703134856d61703132856d61703034856d61703035856d61703033856d61703031856d61703036856d61703032856d61703039856d61703037856d617031300000000000000000000000000000000000000000000000008b00048000000800000008800000228000003580000036000000390000003980000043000000558000005900000062000000638000006f000000728000000d808000148080002d8080003400800043808000478080005280800000002146d2890d80080000020000c041c1141d0190000050004d6822704100000040001808382004a03200000c8015e0103610200000080003010716107406400000100320db0a42e000000100889949102a03000000080003013cd5d8b4060000010003294084c4e0000001000060279a2b0e80c0000020006524c0f92c00000020000c04f35fa17018000004000443142b3b800000040001808389304e0300000008019c5b42b6b0000000800030133cf284406000009600338fa8a71e00000010000602679e41580c000012c00652fc16ecc00000020000c04f350a2d018000004000ce2222801698000000400018099e7202e03000004b0019c5ec4402f70000000800030133cc688406000009600338808780636000000100006026796d1580c000012c00671eb0f010ec00000020000c04cf2c623018000025800ce21824022f8000000400018099e4d42603000004b0019499c300483000000080003013cd798a406000001000329078a80b8e0000001000060279af10a80c0000020006522011017ac00000020000c04f34001d018000004000415ec100397800000040001808de1385603000002700194bdc4c0747000000080003013cd6609c06000000f000701108c364000032000e0dc0d89c8000064001c00e2119900000c800380ec52872000019000744a875264000032006c27b12a708000002000081001c"
"DetailedCharacterData" should {
"decode" in {
PacketCoding.DecodePacket(string).require match {
case ObjectCreateDetailedMessage(len, cls, guid, parent, data) =>
len mustEqual 3159
cls mustEqual ObjectClass.avatar
guid mustEqual PlanetSideGUID(75)
parent.isDefined mustEqual false
data match {
case DetailedPlayerData(Some(pos), basic, char, inv, hand) =>
pos.coord mustEqual Vector3(3674.8438f, 2726.789f, 91.15625f)
pos.orient mustEqual Vector3(0, 0, 36.5625f)
pos.vel.isDefined mustEqual false
basic match {
case CharacterAppearanceData(a, b, ribbons) =>
a.app.name mustEqual "IlllIIIlllIlIllIlllIllI"
a.app.faction mustEqual PlanetSideEmpire.VS
a.app.sex mustEqual CharacterGender.Female
a.app.head mustEqual 41
a.app.voice mustEqual CharacterVoice.Voice1
a.data.bops mustEqual false
a.data.v1 mustEqual true
a.data.v2.isEmpty mustEqual true
a.data.v3 mustEqual false
a.data.v4.isEmpty mustEqual true
a.data.v5.isEmpty mustEqual true
a.exosuit mustEqual ExoSuitType.Standard
a.unk5 mustEqual 0
a.char_id mustEqual 41605313L
a.unk7 mustEqual 0
a.unk8 mustEqual 0
a.unk9 mustEqual 0
a.unkA mustEqual 65535
b.outfit_name mustEqual ""
b.outfit_logo mustEqual 0
b.backpack mustEqual false
b.facingPitch mustEqual 2.8125f
b.facingYawUpper mustEqual 61.875f
b.lfs mustEqual true
b.grenade_state mustEqual GrenadeState.None
b.is_cloaking mustEqual false
b.charging_pose mustEqual false
b.on_zipline.isEmpty mustEqual true
b.unk0 mustEqual 0L
b.unk1 mustEqual false
b.unk2 mustEqual false
b.unk3 mustEqual false
b.unk4 mustEqual false
b.unk5 mustEqual false
b.unk6 mustEqual false
b.unk7 mustEqual false
ribbons.upper mustEqual MeritCommendation.None
ribbons.middle mustEqual MeritCommendation.None
ribbons.lower mustEqual MeritCommendation.None
ribbons.tos mustEqual MeritCommendation.None
case _ =>
ko
}
char match {
case DetailedCharacterData(a, b) =>
a.bep mustEqual 0L
a.cep mustEqual 0L
a.healthMax mustEqual 100
a.health mustEqual 100
a.armor mustEqual 50 //standard exosuit value
a.staminaMax mustEqual 100
a.stamina mustEqual 100
a.max_field.isEmpty mustEqual true
a.certs mustEqual List(
CertificationType.StandardAssault,
CertificationType.MediumAssault,
CertificationType.ATV,
CertificationType.Harasser,
CertificationType.StandardExoSuit,
CertificationType.AgileExoSuit,
CertificationType.ReinforcedExoSuit
)
a.unk1 mustEqual 0L
a.unk2 mustEqual 0L
a.unk3 mustEqual 0L
a.unk4 mustEqual false
a.unk5 mustEqual 32831L
a.unk6 mustEqual 0
a.unk7 mustEqual 0
a.unk8 mustEqual 0L
a.unk9 mustEqual List(0, 0, 0, 0, 0, 0)
b.implants mustEqual List()
b.firstTimeEvents mustEqual List(
"xpe_sanctuary_help",
"xpe_th_firemodes",
"used_beamer",
"map13"
)
b.tutorials mustEqual Nil
b.cosmetics.isEmpty mustEqual true
b.unk1.isEmpty mustEqual true
b.unk2 mustEqual Nil
b.unk3 mustEqual Nil
b.unk4 mustEqual 0L
b.unk5 mustEqual 0L
b.unk6 mustEqual 0L
b.unk7 mustEqual 0L
b.unk8 mustEqual 0L
b.unk9.contains(DCDExtra2(0, 0)) mustEqual true
b.unkA mustEqual Nil
b.unkB mustEqual Nil
b.unkC mustEqual false
case _ =>
ko
}
inv.isDefined mustEqual true
val inventory = inv.get.contents
inventory.size mustEqual 10
//0
inventory.head.objectClass mustEqual ObjectClass.beamer
inventory.head.guid mustEqual PlanetSideGUID(76)
inventory.head.parentSlot mustEqual 0
var wep = inventory.head.obj.asInstanceOf[DetailedWeaponData]
wep.ammo.head.objectClass mustEqual ObjectClass.energy_cell
wep.ammo.head.guid mustEqual PlanetSideGUID(77)
wep.ammo.head.parentSlot mustEqual 0
wep.ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 16
//1
inventory(1).objectClass mustEqual ObjectClass.suppressor
inventory(1).guid mustEqual PlanetSideGUID(78)
inventory(1).parentSlot mustEqual 2
wep = inventory(1).obj.asInstanceOf[DetailedWeaponData]
wep.ammo.head.objectClass mustEqual ObjectClass.bullet_9mm
wep.ammo.head.guid mustEqual PlanetSideGUID(79)
wep.ammo.head.parentSlot mustEqual 0
wep.ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 25
//2
inventory(2).objectClass mustEqual ObjectClass.forceblade
inventory(2).guid mustEqual PlanetSideGUID(80)
inventory(2).parentSlot mustEqual 4
wep = inventory(2).obj.asInstanceOf[DetailedWeaponData]
wep.ammo.head.objectClass mustEqual ObjectClass.melee_ammo
wep.ammo.head.guid mustEqual PlanetSideGUID(81)
wep.ammo.head.parentSlot mustEqual 0
wep.ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 1
//3
inventory(3).objectClass mustEqual ObjectClass.locker_container
inventory(3).guid mustEqual PlanetSideGUID(82)
inventory(3).parentSlot mustEqual 5
inventory(3).obj.isInstanceOf[DetailedLockerContainerData] mustEqual true
inventory(3).obj.asInstanceOf[DetailedLockerContainerData].inventory.isDefined mustEqual false
//4
inventory(4).objectClass mustEqual ObjectClass.bullet_9mm
inventory(4).guid mustEqual PlanetSideGUID(83)
inventory(4).parentSlot mustEqual 6
inventory(4).obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 50
//5
inventory(5).objectClass mustEqual ObjectClass.bullet_9mm
inventory(5).guid mustEqual PlanetSideGUID(84)
inventory(5).parentSlot mustEqual 9
inventory(5).obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 50
//6
inventory(6).objectClass mustEqual ObjectClass.bullet_9mm
inventory(6).guid mustEqual PlanetSideGUID(85)
inventory(6).parentSlot mustEqual 12
inventory(6).obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 50
//7
inventory(7).objectClass mustEqual ObjectClass.bullet_9mm_AP
inventory(7).guid mustEqual PlanetSideGUID(86)
inventory(7).parentSlot mustEqual 33
inventory(7).obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 50
//8
inventory(8).objectClass mustEqual ObjectClass.energy_cell
inventory(8).guid mustEqual PlanetSideGUID(87)
inventory(8).parentSlot mustEqual 36
inventory(8).obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 50
//9
inventory(9).objectClass mustEqual ObjectClass.remote_electronics_kit
inventory(9).guid mustEqual PlanetSideGUID(88)
inventory(9).parentSlot mustEqual 39
//the rek has data but none worth testing here
hand mustEqual DrawnSlot.Pistol1
case _ =>
ko
}
case _ =>
ko
}
}
"decode (character, seated)" in {
PacketCoding.DecodePacket(string_seated).require match {
case ObjectCreateDetailedMessage(len, cls, guid, parent, data) =>
len mustEqual 3103
cls mustEqual ObjectClass.avatar
guid mustEqual PlanetSideGUID(75)
parent.isDefined mustEqual true
parent.get.guid mustEqual PlanetSideGUID(43981)
parent.get.slot mustEqual 0
data match {
case DetailedPlayerData(None, basic, char, inv, hand) =>
basic match {
case CharacterAppearanceData(a, b, ribbons) =>
a.app.name mustEqual "IlllIIIlllIlIllIlllIllI"
a.app.faction mustEqual PlanetSideEmpire.VS
a.app.sex mustEqual CharacterGender.Female
a.app.head mustEqual 41
a.app.voice mustEqual CharacterVoice.Voice1
a.data.bops mustEqual false
a.data.v1 mustEqual false
a.data.v2.isEmpty mustEqual true
a.data.v3 mustEqual false
a.data.v4.isEmpty mustEqual true
a.data.v5.isEmpty mustEqual true
a.exosuit mustEqual ExoSuitType.Standard
a.unk5 mustEqual 0
a.char_id mustEqual 192L
a.unk7 mustEqual 0
a.unk8 mustEqual 0
a.unk9 mustEqual 0
a.unkA mustEqual 0
b.outfit_name mustEqual ""
b.outfit_logo mustEqual 0
b.backpack mustEqual false
b.facingPitch mustEqual 5.625f
b.facingYawUpper mustEqual 61.875f
b.lfs mustEqual true
b.grenade_state mustEqual GrenadeState.None
b.is_cloaking mustEqual false
b.charging_pose mustEqual false
b.on_zipline.isEmpty mustEqual true
b.unk0 mustEqual 0L
b.unk1 mustEqual false
b.unk2 mustEqual false
b.unk3 mustEqual false
b.unk4 mustEqual false
b.unk5 mustEqual false
b.unk6 mustEqual false
b.unk7 mustEqual false
ribbons.upper mustEqual MeritCommendation.None
ribbons.middle mustEqual MeritCommendation.None
ribbons.lower mustEqual MeritCommendation.None
ribbons.tos mustEqual MeritCommendation.None
case _ =>
ko
}
char match {
case DetailedCharacterData(a, b) =>
a.bep mustEqual 0L
a.cep mustEqual 0L
a.healthMax mustEqual 100
a.health mustEqual 100
a.armor mustEqual 50 //standard exosuit value
a.staminaMax mustEqual 100
a.stamina mustEqual 100
a.max_field.isEmpty mustEqual true
a.certs mustEqual List(
CertificationType.StandardAssault,
CertificationType.MediumAssault,
CertificationType.ATV,
CertificationType.Harasser,
CertificationType.StandardExoSuit,
CertificationType.AgileExoSuit,
CertificationType.ReinforcedExoSuit
)
a.unk1 mustEqual 0L
a.unk2 mustEqual 0L
a.unk3 mustEqual 0L
a.unk4 mustEqual false
a.unk5 mustEqual 32831L
a.unk6 mustEqual 0
a.unk7 mustEqual 0
a.unk8 mustEqual 0L
a.unk9 mustEqual List(0, 0, 0, 0, 0, 0)
b.implants mustEqual List()
b.firstTimeEvents mustEqual List(
"xpe_sanctuary_help",
"xpe_th_firemodes",
"used_beamer",
"map13"
)
b.tutorials mustEqual Nil
b.cosmetics.isEmpty mustEqual true
b.unk1.isEmpty mustEqual true
b.unk2 mustEqual Nil
b.unk3 mustEqual Nil
b.unk4 mustEqual 0L
b.unk5 mustEqual 0L
b.unk6 mustEqual 0L
b.unk7 mustEqual 0L
b.unk8 mustEqual 0L
b.unk9.contains(DCDExtra2(0, 0)) mustEqual true
b.unkA mustEqual Nil
b.unkB mustEqual Nil
b.unkC mustEqual false
case _ =>
ko
}
inv.isDefined mustEqual true
val inventory = inv.get.contents
inventory.size mustEqual 10
//0
inventory.head.objectClass mustEqual ObjectClass.beamer
inventory.head.guid mustEqual PlanetSideGUID(76)
inventory.head.parentSlot mustEqual 0
var wep = inventory.head.obj.asInstanceOf[DetailedWeaponData]
wep.ammo.head.objectClass mustEqual ObjectClass.energy_cell
wep.ammo.head.guid mustEqual PlanetSideGUID(77)
wep.ammo.head.parentSlot mustEqual 0
wep.ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 16
//1
inventory(1).objectClass mustEqual ObjectClass.suppressor
inventory(1).guid mustEqual PlanetSideGUID(78)
inventory(1).parentSlot mustEqual 2
wep = inventory(1).obj.asInstanceOf[DetailedWeaponData]
wep.ammo.head.objectClass mustEqual ObjectClass.bullet_9mm
wep.ammo.head.guid mustEqual PlanetSideGUID(79)
wep.ammo.head.parentSlot mustEqual 0
wep.ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 25
//2
inventory(2).objectClass mustEqual ObjectClass.forceblade
inventory(2).guid mustEqual PlanetSideGUID(80)
inventory(2).parentSlot mustEqual 4
wep = inventory(2).obj.asInstanceOf[DetailedWeaponData]
wep.ammo.head.objectClass mustEqual ObjectClass.melee_ammo
wep.ammo.head.guid mustEqual PlanetSideGUID(81)
wep.ammo.head.parentSlot mustEqual 0
wep.ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 1
//3
inventory(3).objectClass mustEqual ObjectClass.locker_container
inventory(3).guid mustEqual PlanetSideGUID(82)
inventory(3).parentSlot mustEqual 5
inventory(3).obj.isInstanceOf[DetailedLockerContainerData] mustEqual true
inventory(3).obj.asInstanceOf[DetailedLockerContainerData].inventory.isDefined mustEqual false
//4
inventory(4).objectClass mustEqual ObjectClass.bullet_9mm
inventory(4).guid mustEqual PlanetSideGUID(83)
inventory(4).parentSlot mustEqual 6
inventory(4).obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 50
//5
inventory(5).objectClass mustEqual ObjectClass.bullet_9mm
inventory(5).guid mustEqual PlanetSideGUID(84)
inventory(5).parentSlot mustEqual 9
inventory(5).obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 50
//6
inventory(6).objectClass mustEqual ObjectClass.bullet_9mm
inventory(6).guid mustEqual PlanetSideGUID(85)
inventory(6).parentSlot mustEqual 12
inventory(6).obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 50
//7
inventory(7).objectClass mustEqual ObjectClass.bullet_9mm_AP
inventory(7).guid mustEqual PlanetSideGUID(86)
inventory(7).parentSlot mustEqual 33
inventory(7).obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 50
//8
inventory(8).objectClass mustEqual ObjectClass.energy_cell
inventory(8).guid mustEqual PlanetSideGUID(87)
inventory(8).parentSlot mustEqual 36
inventory(8).obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 50
//9
inventory(9).objectClass mustEqual ObjectClass.remote_electronics_kit
inventory(9).guid mustEqual PlanetSideGUID(88)
inventory(9).parentSlot mustEqual 39
//the rek has data but none worth testing here
hand mustEqual DrawnSlot.Pistol1
case _ =>
ko
}
case _ =>
ko
}
}
"decode (max)" in {
PacketCoding.DecodePacket(string_max).require match {
case ObjectCreateDetailedMessage(_, _, _, _, data) =>
//this test is mainly for an alternate bitstream parsing order
//the object produced is massive and most of it is already covered in other tests
//only certain details towards the end of the stream will be checked
data match {
case DetailedPlayerData(Some(_), basic, char, inv, hand) =>
basic match {
case CharacterAppearanceData(a, b, ribbons) =>
a.app.name mustEqual "HaHaATRMax"
a.app.faction mustEqual PlanetSideEmpire.TR
a.app.sex mustEqual CharacterGender.Male
a.app.head mustEqual 57
a.app.voice mustEqual CharacterVoice.Voice1
a.data.bops mustEqual false
a.data.v1 mustEqual true
a.data.v2.isEmpty mustEqual true
a.data.v3 mustEqual false
a.data.v4.isEmpty mustEqual true
a.data.v5.isEmpty mustEqual true
a.exosuit mustEqual ExoSuitType.MAX
a.unk5 mustEqual 1
a.char_id mustEqual 41605870L
a.unk7 mustEqual 0
a.unk8 mustEqual 0
a.unk9 mustEqual 0
a.unkA mustEqual 65535
b.outfit_name mustEqual ""
b.outfit_logo mustEqual 0
b.backpack mustEqual false
b.facingPitch mustEqual 348.75f
b.facingYawUpper mustEqual 0
b.lfs mustEqual true
b.grenade_state mustEqual GrenadeState.None
b.is_cloaking mustEqual false
b.charging_pose mustEqual false
b.on_zipline.isEmpty mustEqual true
b.unk0 mustEqual 0L
b.unk1 mustEqual false
b.unk2 mustEqual false
b.unk3 mustEqual false
b.unk4 mustEqual false
b.unk5 mustEqual false
b.unk6 mustEqual false
b.unk7 mustEqual false
ribbons.upper mustEqual MeritCommendation.None
ribbons.middle mustEqual MeritCommendation.None
ribbons.lower mustEqual MeritCommendation.None
ribbons.tos mustEqual MeritCommendation.None
case _ =>
ko
}
DetailedCharacterData.isBR24(char.a.bep) mustEqual false //br5+
char match {
case DetailedCharacterData(a, b) =>
a.bep mustEqual 15301L
a.cep mustEqual 0L
a.healthMax mustEqual 120
a.health mustEqual 120
a.armor mustEqual 641
a.staminaMax mustEqual 100
a.stamina mustEqual 100
a.max_field.contains(0) mustEqual true //important!
a.certs mustEqual List(
CertificationType.StandardAssault,
CertificationType.MediumAssault,
CertificationType.StandardExoSuit,
CertificationType.AgileExoSuit,
CertificationType.UniMAX
)
a.unk1 mustEqual 0L
a.unk2 mustEqual 0L
a.unk3 mustEqual 0L
a.unk4 mustEqual false
a.unk5 mustEqual 32831L
a.unk6 mustEqual 0
a.unk7 mustEqual 0
a.unk8 mustEqual 0L
a.unk9 mustEqual List(0, 0, 0, 0, 0, 0)
b.implants mustEqual Nil
b.firstTimeEvents mustEqual List(
"xpe_battle_rank_3",
"xpe_bind_facility",
"xpe_instant_action",
"xpe_battle_rank_4",
"xpe_battle_rank_2",
"xpe_sanctuary_help",
"xpe_drop_pod",
"xpe_orbital_shuttle",
"xpe_battle_rank_5",
"xpe_th_nonsanc",
"xpe_th_ground_p",
"xpe_th_ammo",
"xpe_th_firemodes",
"xpe_th_max",
"visited_spitfire_turret",
"visited_wall_turret",
"visited_resource_silo",
"visited_certification_terminal",
"visited_med_terminal",
"visited_broadcast_warpgate",
"used_phalanx",
"visited_air_vehicle_terminal",
"visited_bfr_terminal",
"used_cycler",
"visited_galaxy_terminal",
"visited_implant_terminal",
"visited_external_door_lock",
"visited_respawn_terminal",
"visited_locker",
"visited_motion_sensor",
"used_grenade_plasma",
"used_rek",
"used_repeater",
"visited_deconstruction_terminal",
"visited_secondary_capture",
"used_suppressor",
"used_trhev_burster",
"used_trhev_dualcycler",
"used_trhev_pounder",
"visited_capture_terminal",
"visited_order_terminal",
"visited_ground_vehicle_terminal",
"map12",
"map10",
"map09",
"map05",
"map03",
"map02"
)
b.tutorials mustEqual Nil
b.cosmetics.isEmpty mustEqual true
b.unk1.isEmpty mustEqual true
b.unk2 mustEqual Nil
b.unk3 mustEqual Nil
b.unk4 mustEqual 0L
b.unk5 mustEqual 0L
b.unk6 mustEqual 0L
b.unk7 mustEqual 0L
b.unk8 mustEqual 0L
b.unk9.contains(DCDExtra2(0, 0)) mustEqual true
b.unkA mustEqual Nil
b.unkB mustEqual Nil
b.unkC mustEqual false
case _ =>
ko
}
//inventory
inv.isDefined mustEqual true
inv.get.contents.size mustEqual 19
val contents = inv.get.contents
//0
contents.head mustEqual InternalSlot(889, PlanetSideGUID(2), 0,
DetailedWeaponData(
CommonFieldData(PlanetSideEmpire.TR, false, false, true, None, false, None, None, PlanetSideGUID(0)),
0,
List(
InternalSlot(265, PlanetSideGUID(3), 0, DetailedAmmoBoxData(8,200)),
InternalSlot(265, PlanetSideGUID(4), 1, DetailedAmmoBoxData(8,200)),
InternalSlot(265, PlanetSideGUID(5), 2, DetailedAmmoBoxData(8,200))
)
)
)
contents(1) mustEqual InternalSlot(175, PlanetSideGUID(6), 4,
DetailedWeaponData(
CommonFieldData(PlanetSideEmpire.TR, false, false, true, None, false, None, None, PlanetSideGUID(0)),
0,
List(
InternalSlot(540, PlanetSideGUID(7), 0, DetailedAmmoBoxData(8,1))
)
)
)
contents(2) mustEqual InternalSlot(456, PlanetSideGUID(8), 5, DetailedLockerContainerData(
CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)),
None
))
contents(3) mustEqual InternalSlot(265, PlanetSideGUID(9), 6, DetailedAmmoBoxData(8, 36))
contents(4) mustEqual InternalSlot(265, PlanetSideGUID(10), 10, DetailedAmmoBoxData(8, 100))
contents(5) mustEqual InternalSlot(265, PlanetSideGUID(11), 14, DetailedAmmoBoxData(8, 100))
contents(6) mustEqual InternalSlot(265, PlanetSideGUID(12), 18, DetailedAmmoBoxData(8, 100))
contents(7) mustEqual InternalSlot(265, PlanetSideGUID(13), 70, DetailedAmmoBoxData(8, 100))
contents(8) mustEqual InternalSlot(265, PlanetSideGUID(14), 74, DetailedAmmoBoxData(8, 100))
contents(9) mustEqual InternalSlot(265, PlanetSideGUID(15), 78, DetailedAmmoBoxData(8, 100))
contents(10) mustEqual InternalSlot(265, PlanetSideGUID(16), 82, DetailedAmmoBoxData(8, 100))
contents(11) mustEqual InternalSlot(536, PlanetSideGUID(17), 134, DetailedAmmoBoxData(8, 1))
contents(12) mustEqual InternalSlot(536, PlanetSideGUID(18), 138, DetailedAmmoBoxData(8, 1))
contents(13) mustEqual InternalSlot(536, PlanetSideGUID(19), 142, DetailedAmmoBoxData(8, 1))
contents(14) mustEqual InternalSlot(536, PlanetSideGUID(20), 146, DetailedAmmoBoxData(8, 1))
contents(15) mustEqual InternalSlot(536, PlanetSideGUID(21), 166, DetailedAmmoBoxData(8, 1))
contents(16) mustEqual InternalSlot(536, PlanetSideGUID(22), 170, DetailedAmmoBoxData(8, 1))
contents(17) mustEqual InternalSlot(536, PlanetSideGUID(23), 174, DetailedAmmoBoxData(8, 1))
contents(18) mustEqual InternalSlot(536, PlanetSideGUID(24), 178, DetailedAmmoBoxData(8, 1))
hand mustEqual DrawnSlot.Pistol1
case _ =>
ko
}
case _ =>
ko
}
}
"decode (BR32)" in {
PacketCoding.DecodePacket(string_br32).require match {
case ObjectCreateDetailedMessage(_, _, _, _, data) =>
//this test is mainly for an alternate bitstream parsing order
//the object produced is massive and most of it is already covered in other tests
//only certain details towards the end of the stream will be checked
data match {
case DetailedPlayerData(Some(_), basic, char, inv, hand) =>
basic match {
case CharacterAppearanceData(a, b, ribbons) =>
a.app.name mustEqual "KiCkJr"
a.app.faction mustEqual PlanetSideEmpire.NC
a.app.sex mustEqual CharacterGender.Male
a.app.head mustEqual 24
a.app.voice mustEqual CharacterVoice.Voice4
a.data.bops mustEqual false
a.data.v1 mustEqual true
a.data.v2.isEmpty mustEqual true
a.data.v3 mustEqual false
a.data.v4.isEmpty mustEqual true
a.data.v5.isEmpty mustEqual true
a.exosuit mustEqual ExoSuitType.Agile
a.unk5 mustEqual 0
a.char_id mustEqual 733931L
a.unk7 mustEqual 0
a.unk8 mustEqual 0
a.unk9 mustEqual 0
a.unkA mustEqual 0
b.outfit_name mustEqual ""
b.outfit_logo mustEqual 14
b.backpack mustEqual false
b.facingPitch mustEqual 348.75f
b.facingYawUpper mustEqual 348.75f
b.lfs mustEqual false
b.grenade_state mustEqual GrenadeState.None
b.is_cloaking mustEqual false
b.charging_pose mustEqual false
b.on_zipline.isEmpty mustEqual true
b.unk0 mustEqual 556539L
b.unk1 mustEqual false
b.unk2 mustEqual false
b.unk3 mustEqual false
b.unk4 mustEqual false
b.unk5 mustEqual true
b.unk6 mustEqual false
b.unk7 mustEqual false
ribbons.upper mustEqual MeritCommendation.Loser4
ribbons.middle mustEqual MeritCommendation.EventNCElite
ribbons.lower mustEqual MeritCommendation.HeavyAssault6
ribbons.tos mustEqual MeritCommendation.SixYearNC
case _ =>
ko
}
DetailedCharacterData.isBR24(char.a.bep) mustEqual true
char match {
case DetailedCharacterData(a, b) =>
a.bep mustEqual 6366766L
a.cep mustEqual 694787L
a.healthMax mustEqual 100
a.health mustEqual 100
a.armor mustEqual 100 //standard exosuit value
a.staminaMax mustEqual 100
a.stamina mustEqual 46
a.max_field.isEmpty mustEqual true
a.certs mustEqual List(
CertificationType.StandardAssault,
CertificationType.MediumAssault,
CertificationType.HeavyAssault,
CertificationType.AntiVehicular,
CertificationType.AirCavalryScout,
CertificationType.GroundSupport,
CertificationType.Harasser,
CertificationType.StandardExoSuit,
CertificationType.AgileExoSuit,
CertificationType.Medical,
CertificationType.AdvancedMedical,
CertificationType.Hacking,
CertificationType.AdvancedHacking,
CertificationType.Engineering,
CertificationType.CombatEngineering
)
a.unk1 mustEqual 0L
a.unk2 mustEqual 0L
a.unk3 mustEqual 0L
a.unk4 mustEqual false
a.unk5 mustEqual 32831L
a.unk6 mustEqual 0
a.unk7 mustEqual 4
a.unk8 mustEqual 3278759L
a.unk9 mustEqual List(0, 0, 0, 0, 0, 0)
b.implants mustEqual List(
ImplantEntry(ImplantType.AudioAmplifier, None, false),
ImplantEntry(ImplantType.Targeting, None, false),
ImplantEntry(ImplantType.Surge, None, false)
)
b.firstTimeEvents mustEqual List(
"xpe_overhead_map",
"xpe_warp_gate",
"xpe_form_outfit",
"xpe_blackops",
"xpe_command_rank_5",
"xpe_command_rank_3",
"xpe_sanctuary_help",
"xpe_battle_rank_13",
"xpe_battle_rank_12",
"xpe_battle_rank_10",
"xpe_battle_rank_14",
"xpe_battle_rank_15",
"xpe_orbital_shuttle",
"xpe_drop_pod",
"xpe_bind_facility",
"xpe_battle_rank_3",
"xpe_battle_rank_5",
"xpe_battle_rank_4",
"xpe_join_squad",
"xpe_form_squad",
"xpe_instant_action",
"xpe_battle_rank_2",
"xpe_warp_gate_usage",
"xpe_battle_rank_8",
"xpe_battle_rank_11",
"xpe_battle_rank_6",
"xpe_mail_alert",
"xpe_command_rank_1",
"xpe_battle_rank_20",
"xpe_battle_rank_18",
"xpe_battle_rank_19",
"xpe_join_platoon",
"xpe_battle_rank_17",
"xpe_battle_rank_16",
"xpe_join_outfit",
"xpe_battle_rank_25",
"xpe_battle_rank_24",
"xpe_command_rank_4",
"xpe_form_platoon",
"xpe_bind_ams",
"xpe_battle_rank_9",
"xpe_battle_rank_7",
"xpe_th_router",
"xpe_th_flail",
"xpe_th_ant",
"xpe_th_ams",
"xpe_th_ground_p",
"xpe_th_air_p",
"xpe_th_hover",
"xpe_th_ground",
"xpe_th_bfr",
"xpe_th_afterburner",
"xpe_th_air",
"xpe_th_cloak",
"used_oicw",
"used_advanced_ace",
"visited_spitfire_turret",
"visited_spitfire_cloaked",
"visited_spitfire_aa",
"visited_tank_traps",
"visited_portable_manned_turret_nc",
"visited_portable_manned_turret_tr",
"used_magcutter",
"used_chainblade",
"used_forceblade",
"visited_wall_turret",
"visited_ancient_terminal",
"visited_ams",
"visited_ant",
"visited_dropship",
"visited_liberator",
"visited_lightgunship",
"visited_lightning",
"visited_magrider",
"visited_prowler",
"visited_quadstealth",
"visited_skyguard",
"visited_threemanheavybuggy",
"visited_two_man_assault_buggy",
"visited_twomanheavybuggy",
"visited_twomanhoverbuggy",
"visited_vanguard",
"visited_flail",
"visited_router",
"visited_switchblade",
"visited_aurora",
"visited_battlewagon",
"visited_fury",
"visited_quadassault",
"visited_galaxy_gunship",
"visited_apc_tr",
"visited_apc_vs",
"visited_lodestar",
"visited_phantasm",
"visited_thunderer",
"visited_apc_nc",
"visited_vulture",
"visited_wasp",
"visited_mosquito",
"visited_aphelion_flight",
"visited_aphelion_gunner",
"visited_colossus_flight",
"visited_colossus_gunner",
"visited_peregrine_flight",
"visited_peregrine_gunner",
"used_bank",
"visited_resource_silo",
"visited_certification_terminal",
"visited_med_terminal",
"used_nano_dispenser",
"visited_sensor_shield",
"visited_broadcast_warpgate",
"used_phalanx",
"used_phalanx_avcombo",
"used_phalanx_flakcombo",
"visited_warpgate_small",
"used_flamethrower",
"used_ancient_turret_weapon",
"visited_LLU_socket",
"used_energy_gun_nc",
"visited_mediumtransport",
"used_aphelion_immolation_cannon",
"used_grenade_plasma",
"used_grenade_jammer",
"visited_shield_generator",
"visited_motion_sensor",
"visited_health_crystal",
"visited_repair_crystal",
"visited_vehicle_crystal",
"used_grenade_frag",
"used_ace",
"visited_adv_med_terminal",
"used_beamer",
"used_bolt_driver",
"used_cycler",
"used_gauss",
"used_hunterseeker",
"used_isp",
"used_lancer",
"used_lasher",
"used_maelstrom",
"used_phoenix",
"used_pulsar",
"used_punisher",
"used_r_shotgun",
"used_radiator",
"used_rek",
"used_repeater",
"used_rocklet",
"used_striker",
"used_suppressor",
"used_thumper",
"visited_vanu_control_console",
"visited_capture_terminal",
"used_mini_chaingun",
"used_laze_pointer",
"used_telepad",
"used_spiker",
"used_heavy_sniper",
"used_command_uplink",
"used_firebird",
"used_flechette",
"used_heavy_rail_beam",
"used_ilc9",
"visited_generator_terminal",
"visited_locker",
"visited_external_door_lock",
"visited_air_vehicle_terminal",
"visited_galaxy_terminal",
"visited_implant_terminal",
"visited_secondary_capture",
"used_25mm_cannon",
"used_liberator_bombardier",
"visited_repair_silo",
"visited_vanu_module",
"used_flail_weapon",
"used_scythe",
"visited_respawn_terminal",
"used_ballgun",
"used_energy_gun_tr",
"used_anniversary_guna",
"used_anniversary_gunb",
"used_anniversary_gun",
"used_75mm_cannon",
"used_apc_nc_weapon",
"used_apc_tr_weapon",
"used_apc_vs_weapon",
"used_flux_cannon",
"used_aphelion_plasma_rocket_pod",
"used_aphelion_ppa",
"used_fluxpod",
"visited_bfr_terminal",
"used_colossus_cluster_bomb_pod",
"used_colossus_dual_100mm_cannons",
"used_colossus_tank_cannon",
"visited_energy_crystal",
"used_heavy_grenade_launcher",
"used_35mm_rotarychaingun",
"used_katana",
"used_35mm_cannon",
"used_reaver_weapons",
"used_lightning_weapons",
"used_med_app",
"used_20mm_cannon",
"visited_monolith_amerish",
"visited_monolith_ceryshen",
"visited_monolith_cyssor",
"visited_monolith_esamir",
"visited_monolith_forseral",
"visited_monolith_ishundar",
"visited_monolith_searhus",
"visited_monolith_solsar",
"used_nc_hev_falcon",
"used_nc_hev_scattercannon",
"used_nc_hev_sparrow",
"used_armor_siphon",
"used_peregrine_dual_machine_gun",
"used_peregrine_dual_rocket_pods",
"used_peregrine_mechhammer",
"used_peregrine_particle_cannon",
"used_peregrine_sparrow",
"used_105mm_cannon",
"used_15mm_chaingun",
"used_pulsed_particle_accelerator",
"used_rotarychaingun",
"visited_deconstruction_terminal",
"used_skyguard_weapons",
"visited_generator",
"used_gauss_cannon",
"used_trek",
"used_vanguard_weapons",
"visited_ancient_air_vehicle_terminal",
"visited_ancient_equipment_terminal",
"visited_order_terminal",
"visited_ancient_ground_vehicle_terminal",
"visited_ground_vehicle_terminal",
"used_vulture_bombardier",
"used_vulture_nose_cannon",
"used_vulture_tail_cannon",
"used_wasp_weapon_system",
"visited_charlie01",
"visited_charlie02",
"visited_charlie03",
"visited_charlie04",
"visited_charlie05",
"visited_charlie06",
"visited_charlie07",
"visited_charlie08",
"visited_charlie09",
"visited_gingerman_atar",
"visited_gingerman_dahaka",
"visited_gingerman_hvar",
"visited_gingerman_izha",
"visited_gingerman_jamshid",
"visited_gingerman_mithra",
"visited_gingerman_rashnu",
"visited_gingerman_sraosha",
"visited_gingerman_yazata",
"visited_gingerman_zal",
"visited_sled01",
"visited_sled02",
"visited_sled04",
"visited_sled05",
"visited_sled06",
"visited_sled07",
"visited_sled08",
"visited_snowman_amerish",
"visited_snowman_ceryshen",
"visited_snowman_cyssor",
"visited_snowman_esamir",
"visited_snowman_forseral",
"visited_snowman_hossin",
"visited_snowman_ishundar",
"visited_snowman_searhus",
"visited_snowman_solsar",
"ugd06",
"ugd05",
"ugd04",
"ugd03",
"ugd02",
"ugd01",
"map99",
"map98",
"map97",
"map96",
"map15",
"map14",
"map11",
"map08",
"map04",
"map05",
"map03",
"map01",
"map06",
"map02",
"map09",
"map07",
"map10"
)
b.tutorials mustEqual List(
"training_start_nc",
"training_ui",
"training_map"
)
b.cosmetics match {
case Some(c : Cosmetics) =>
c.Styles mustEqual Set(PersonalStyle.NoHelmet, PersonalStyle.Beret, PersonalStyle.Sunglasses, PersonalStyle.Earpiece)
case None =>
ko
}
b.unk1.isEmpty mustEqual true
b.unk2 mustEqual Nil
b.unk3 mustEqual Nil
b.unk4 mustEqual 0L
b.unk5 mustEqual 0L
b.unk6 mustEqual 0L
b.unk7 mustEqual 0L
b.unk8 mustEqual 0L
b.unk9.isEmpty mustEqual true
b.unkA mustEqual Nil
b.unkB mustEqual Nil
b.unkC mustEqual false
case _ =>
ko
}
//inventory (but just briefly)
inv.isDefined mustEqual true
inv.get.contents.size mustEqual 12
//0
inv.get.contents.head.objectClass mustEqual 531
inv.get.contents.head.guid mustEqual PlanetSideGUID(4202)
inv.get.contents.head.parentSlot mustEqual 0
inv.get.contents.head.obj match {
case DetailedWeaponData(CommonFieldData(faction, bops, alternate, v1, v2, v3, v4, v5, fguid), fmode, ammo, _) =>
faction mustEqual PlanetSideEmpire.NC
bops mustEqual false
alternate mustEqual false
v1 mustEqual true
v2.isEmpty mustEqual true
v3 mustEqual false
v4.isEmpty mustEqual true
v5.isEmpty mustEqual true
fguid mustEqual PlanetSideGUID(0)
fmode mustEqual 0
ammo.head.objectClass mustEqual 389
ammo.head.guid mustEqual PlanetSideGUID(3942)
ammo.head.parentSlot mustEqual 0
ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].data.v1 mustEqual true
ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 100
case _ =>
ko
}
//4
inv.get.contents(4).objectClass mustEqual 456
inv.get.contents(4).guid mustEqual PlanetSideGUID(5374)
inv.get.contents(4).parentSlot mustEqual 5
inv.get.contents(4).obj.asInstanceOf[DetailedLockerContainerData].inventory.get.contents.size mustEqual 61
//10
inv.get.contents(10).objectClass mustEqual 32
inv.get.contents(10).guid mustEqual PlanetSideGUID(5523)
inv.get.contents(10).parentSlot mustEqual 39
inv.get.contents(10).obj match {
case cdata : DetailedConstructionToolData =>
cdata.data.faction mustEqual PlanetSideEmpire.NC
cdata.data.bops mustEqual false
cdata.data.alternate mustEqual false
cdata.data.v1 mustEqual true
cdata.data.v2.isEmpty mustEqual true
cdata.data.v3 mustEqual false
cdata.data.v4.isEmpty mustEqual true
cdata.data.v5.isEmpty mustEqual true
cdata.data.guid mustEqual PlanetSideGUID(0)
case _ =>
ko
}
//11
inv.get.contents(11).objectClass mustEqual 673
inv.get.contents(11).guid mustEqual PlanetSideGUID(3661)
inv.get.contents(11).parentSlot mustEqual 60
inv.get.contents(11).obj match {
case DetailedWeaponData(CommonFieldData(faction, bops, alternate, v1, v2, v3, v4, v5, fguid), fmode, ammo, _) =>
faction mustEqual PlanetSideEmpire.NC
bops mustEqual false
alternate mustEqual false
v1 mustEqual true
v2.isEmpty mustEqual true
v3 mustEqual false
v4.isEmpty mustEqual true
v5.isEmpty mustEqual true
fguid mustEqual PlanetSideGUID(0)
fmode mustEqual 0
ammo.head.objectClass mustEqual 674
ammo.head.guid mustEqual PlanetSideGUID(8542)
ammo.head.parentSlot mustEqual 0
ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].data.v1 mustEqual true
ammo.head.obj.asInstanceOf[DetailedAmmoBoxData].magazine mustEqual 3
case _ =>
ko
}
hand mustEqual DrawnSlot.None
case _ =>
ko
}
case _ =>
ko
}
}
"decode (ccrider)" in {
PacketCoding.DecodePacket(string_ccrider).require match {
case ObjectCreateDetailedMessage(len, _, _, None, data) =>
len mustEqual 51018L
data match {
case DetailedPlayerData(_, basic, char, inv, _) =>
basic match {
case CharacterAppearanceData(a, b, ribbons) =>
a.app mustEqual BasicCharacterData("CCRIDER", PlanetSideEmpire.NC, CharacterGender.Male, 20, CharacterVoice.Voice3)
a.data.bops mustEqual false
a.data.alternate mustEqual false
a.data.v1 mustEqual false
a.data.v2.isEmpty mustEqual true
a.data.v3 mustEqual false
a.data.v4.isEmpty mustEqual true
a.data.v5.isEmpty mustEqual true
a.exosuit mustEqual ExoSuitType.Standard
a.unk5 mustEqual 0
a.char_id mustEqual 1176612L
a.unk7 mustEqual 15
a.unk8 mustEqual 5
a.unk9 mustEqual 10
a.unkA mustEqual 1
b.unk0 mustEqual 25044L
b.outfit_name mustEqual "Black Armored Reapers"
b.outfit_logo mustEqual 15
b.unk1 mustEqual false
b.backpack mustEqual false
b.unk2 mustEqual false
b.unk3 mustEqual false
b.unk4 mustEqual false
b.facingPitch mustEqual 0
b.facingYawUpper mustEqual 0
b.lfs mustEqual false
b.grenade_state mustEqual GrenadeState.None
b.is_cloaking mustEqual false
b.unk5 mustEqual false
b.unk6 mustEqual false
b.charging_pose mustEqual false
b.unk7 mustEqual false
b.on_zipline.isEmpty mustEqual true
ribbons.upper mustEqual MeritCommendation.DefenseNC5
ribbons.middle mustEqual MeritCommendation.HackingSupport5
ribbons.lower mustEqual MeritCommendation.BFRAdvanced2
ribbons.tos mustEqual MeritCommendation.SixYearNC
case _ =>
ko
}
char match {
case DetailedCharacterData(a, b) =>
a.bep mustEqual 6571522L
a.cep mustEqual 659329L
a.unk1 mustEqual 0L
a.unk2 mustEqual 0L
a.unk3 mustEqual 0L
a.healthMax mustEqual 100
a.health mustEqual 100
a.unk4 mustEqual false
a.armor mustEqual 50
a.unk5 mustEqual 32831L
a.staminaMax mustEqual 100
a.stamina mustEqual 100
a.max_field.isEmpty mustEqual true
a.unk6 mustEqual 0
a.unk7 mustEqual 6
a.unk8 mustEqual 3165669L
a.unk9 mustEqual List(0, 0, 0, 0, 0, 0)
a.certs mustEqual List(
CertificationType.StandardAssault,
CertificationType.MediumAssault,
CertificationType.HeavyAssault,
CertificationType.AirCavalryScout,
CertificationType.StandardExoSuit,
CertificationType.AgileExoSuit,
CertificationType.UniMAX,
CertificationType.Medical,
CertificationType.AdvancedMedical,
CertificationType.Hacking,
CertificationType.AdvancedHacking,
CertificationType.ExpertHacking,
CertificationType.Engineering
)
b.unk1.contains(14140) mustEqual true
b.implants mustEqual List(
ImplantEntry(ImplantType.Surge, Some(94), false),
ImplantEntry(ImplantType.DarklightVision, Some(91), false),
ImplantEntry(ImplantType.Targeting, Some(91), false)
)
b.unk2 mustEqual List()
b.unk3 mustEqual List()
b.firstTimeEvents.size mustEqual 271 //too many to bother listing; see encoding test
b.tutorials mustEqual List(
"training_weapons01",
"training_warpgates",
"training_map",
"training_inventory",
"training_healing",
"training_hart",
"training_armors",
"training_welcome"
)
b.unk4 mustEqual 0L
b.unk5 mustEqual 0L
b.unk6 mustEqual 0L
b.unk7 mustEqual 0L
b.unk8 mustEqual 0L
b.unk9.isEmpty mustEqual true
b.unkA.size mustEqual 86
b.unkA mustEqual List(
9,
10, 11, 16, 17, 18, 30, 31, 32,
37, 38, 52, 53, 57, 69, 92, 99,
100, 107, 108, 109, 110, 114, 115, 116, 117, 118,
127, 128, 129, 130, 131, 156, 163, 171, 178, 179,
180, 181, 194, 195, 198, 201, 215, 216, 217, 222,
223, 224, 225, 226, 227, 229, 230, 243, 244, 257,
265, 266, 277, 278, 283, 284, 285, 286, 289, 290,
296, 313, 334, 341, 342, 359, 369, 376, 377, 384,
391, 392, 393, 394, 398, 408, 415, 420, 424
)
b.unkB mustEqual List()
b.unkC mustEqual false
b.cosmetics match {
case Some(c : Cosmetics) =>
c.Styles mustEqual Set(PersonalStyle.NoHelmet, PersonalStyle.Sunglasses, PersonalStyle.Earpiece, PersonalStyle.BrimmedCap)
case None =>
ko
}
b.cosmetics.contains(Cosmetics(true, false, true, true, true)) mustEqual true
case _ =>
ko
}
case _ =>
ko
}
case _ =>
ko
}
}
"decode (xRider912)" in {
PacketCoding.DecodePacket(string_xrider912).require match {
case ObjectCreateDetailedMessage(len, cls, guid, parentInfo, data) =>
len mustEqual 36047
cls mustEqual ObjectClass.avatar
guid mustEqual PlanetSideGUID(3390)
parentInfo.isEmpty mustEqual true
data match {
case DetailedPlayerData(Some(pos), basic , char, Some(inv), hand) =>
pos mustEqual PlacementData(3577.1797f, 2712.25f, 35.78125f, 0, 0, 50.625f)
basic match {
case CharacterAppearanceData(a, b, ribbons) =>
a.app mustEqual BasicCharacterData("xRider912", PlanetSideEmpire.TR, CharacterGender.Male, 4, CharacterVoice.Voice1)
a.data.bops mustEqual false
a.data.alternate mustEqual false
a.data.v1 mustEqual false
a.data.v2.isEmpty mustEqual true
a.data.v3 mustEqual false
a.data.v4.isEmpty mustEqual true
a.data.v5.isEmpty mustEqual true
a.exosuit mustEqual ExoSuitType.Standard
a.unk5 mustEqual 0
a.char_id mustEqual 1267466L
a.unk7 mustEqual 3
a.unk8 mustEqual 3
a.unk9 mustEqual 0
a.unkA mustEqual 0
b.unk0 mustEqual 16507L
b.outfit_name mustEqual "Hooked On Insanity"
b.outfit_logo mustEqual 5
b.unk1 mustEqual false
b.backpack mustEqual false
b.unk2 mustEqual false
b.unk3 mustEqual false
b.unk4 mustEqual false
b.facingPitch mustEqual 0
b.facingYawUpper mustEqual 0
b.lfs mustEqual false
b.grenade_state mustEqual GrenadeState.None
b.is_cloaking mustEqual false
b.unk5 mustEqual false
b.unk6 mustEqual false
b.charging_pose mustEqual false
b.unk7 mustEqual false
b.on_zipline.isEmpty mustEqual true
ribbons.upper mustEqual MeritCommendation.EmeraldVeteran
ribbons.middle mustEqual MeritCommendation.ScavengerTR1
ribbons.lower mustEqual MeritCommendation.BlackOpsParticipant
ribbons.tos mustEqual MeritCommendation.SixYearTR
case _ =>
ko
}
DetailedCharacterData.isBR24(char.a.bep) mustEqual false
char match {
case DetailedCharacterData(a, b) =>
a.bep mustEqual 1784200L
a.cep mustEqual 53490L
a.unk1 mustEqual 0L
a.unk2 mustEqual 0L
a.unk3 mustEqual 0L
a.healthMax mustEqual 100
a.health mustEqual 100
a.unk4 mustEqual false
a.armor mustEqual 50
a.unk5 mustEqual 32831L
a.staminaMax mustEqual 100
a.stamina mustEqual 100
a.max_field.isEmpty mustEqual true
a.unk6 mustEqual 0
a.unk7 mustEqual 6
a.unk8 mustEqual 1184175L
a.unk9 mustEqual List(0, 0, 0, 0, 0, 0)
a.certs mustEqual List(
CertificationType.StandardAssault,
CertificationType.MediumAssault,
CertificationType.HeavyAssault,
CertificationType.AntiVehicular,
CertificationType.AirCavalryScout,
CertificationType.StandardExoSuit,
CertificationType.AgileExoSuit,
CertificationType.Medical,
CertificationType.AdvancedMedical,
CertificationType.Hacking,
CertificationType.AdvancedHacking,
CertificationType.Engineering
)
b.unk1.contains(21236) mustEqual true
b.implants mustEqual List(
ImplantEntry(ImplantType.Surge, Some(94), false),
ImplantEntry(ImplantType.Targeting, Some(91), false),
ImplantEntry(ImplantType.DarklightVision, Some(91), false)
)
b.unk2 mustEqual List()
b.unk3 mustEqual List()
b.firstTimeEvents.size mustEqual 209 //too many to bother listing; see encoding test
b.tutorials mustEqual List()
b.unk4 mustEqual 0L
b.unk5 mustEqual 0L
b.unk6 mustEqual 0L
b.unk7 mustEqual 0L
b.unk8 mustEqual 0L
b.unk9.isEmpty mustEqual true
b.unkA mustEqual List(
9, 16, 17, 69, 107, 108,
114, 115, 134, 171, 178,
196, 199, 222, 229, 283,
297, 347, 360, 391, 399, 421
)
b.unkB mustEqual List()
b.unkC mustEqual false
b.cosmetics.isEmpty mustEqual true
case _ =>
ko
}
inv.contents.length mustEqual 10
//check first and last entries of inventory for accuracy
inv.contents.head mustEqual InternalSlot(
730, PlanetSideGUID(3465), 0,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.TR, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(
InternalSlot(28, PlanetSideGUID(3722), 0,
DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 20)
)
), false)
)
//...
inv.contents(9) mustEqual InternalSlot(
728, PlanetSideGUID(4731), 39,
DetailedREKData(CommonFieldData(PlanetSideEmpire.TR, false, false, true, None, false, Some(false), None, PlanetSideGUID(0)), 16)
)
hand mustEqual DrawnSlot.None
case _ =>
ko
}
case _ =>
ko
}
}
"encode" in {
val pos : PlacementData = PlacementData(
3674.8438f, 2726.789f, 91.15625f,
0, 0, 36.5625f
)
val aa : Int=>CharacterAppearanceA = CharacterAppearanceA(
BasicCharacterData(
"IlllIIIlllIlIllIlllIllI",
PlanetSideEmpire.VS,
CharacterGender.Female,
41,
CharacterVoice.Voice1
),
CommonFieldData(
PlanetSideEmpire.VS,
false,
false,
true,
None,
false,
None,
None,
PlanetSideGUID(0)
),
ExoSuitType.Standard,
0,
41605313L,
0,
0,
0,
65535
)
val ab : (Boolean,Int)=>CharacterAppearanceB = CharacterAppearanceB(
0L,
"",
0,
false,
false,
false,
false,
false,
2.8125f, 61.875f,
true,
GrenadeState.None,
false,
false,
false,
false,
false,
None
)
val app : Int=>CharacterAppearanceData = CharacterAppearanceData(
aa, ab,
RibbonBars(
MeritCommendation.None,
MeritCommendation.None,
MeritCommendation.None,
MeritCommendation.None
)
)
val ba : DetailedCharacterA = DetailedCharacterA(
0L,
0L,
0L, 0L, 0L,
100, 100,
false,
50,
32831L,
100, 100,
None,
0, 0, 0L,
List(0, 0, 0, 0, 0, 0),
List(
CertificationType.StandardAssault,
CertificationType.MediumAssault,
CertificationType.ATV,
CertificationType.Harasser,
CertificationType.StandardExoSuit,
CertificationType.AgileExoSuit,
CertificationType.ReinforcedExoSuit
)
)
val bb : (Long, Option[Int])=>DetailedCharacterB = DetailedCharacterB(
None,
Nil,
Nil, Nil,
List(
"xpe_sanctuary_help",
"xpe_th_firemodes",
"used_beamer",
"map13"
),
Nil,
0L, 0L, 0L, 0L, 0L,
Some(DCDExtra2(0, 0)),
Nil, Nil, false,
None
)
val char : Option[Int]=>DetailedCharacterData =
(pad_length : Option[Int]) => DetailedCharacterData(ba, bb(ba.bep, pad_length))(pad_length)
val inv = InventoryData(List(
InventoryItemData(ObjectClass.beamer, PlanetSideGUID(76), 0,
DetailedWeaponData(
CommonFieldData(PlanetSideEmpire.VS, false, false, true, None, false, None, None, PlanetSideGUID(0)),
0,
List(InternalSlot(ObjectClass.energy_cell, PlanetSideGUID(77), 0, DetailedAmmoBoxData(8, 16)))
)
),
InventoryItemData(ObjectClass.suppressor, PlanetSideGUID(78), 2,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.VS, false, false, true, None, false, None, None, PlanetSideGUID(0)),
0,
List(InternalSlot(ObjectClass.bullet_9mm, PlanetSideGUID(79), 0, DetailedAmmoBoxData(8, 25)))
)
),
InventoryItemData(ObjectClass.forceblade, PlanetSideGUID(80), 4,
DetailedWeaponData(
CommonFieldData(PlanetSideEmpire.VS, false, false, true, None, false, None, None, PlanetSideGUID(0)),
0,
List(InternalSlot(ObjectClass.melee_ammo, PlanetSideGUID(81), 0, DetailedAmmoBoxData(8, 1)))
)
),
InventoryItemData(ObjectClass.locker_container, PlanetSideGUID(82), 5, DetailedLockerContainerData(8)),
InventoryItemData(ObjectClass.bullet_9mm, PlanetSideGUID(83), 6, DetailedAmmoBoxData(8, 50)),
InventoryItemData(ObjectClass.bullet_9mm, PlanetSideGUID(84), 9, DetailedAmmoBoxData(8, 50)),
InventoryItemData(ObjectClass.bullet_9mm, PlanetSideGUID(85), 12, DetailedAmmoBoxData(8, 50)),
InventoryItemData(ObjectClass.bullet_9mm_AP, PlanetSideGUID(86), 33, DetailedAmmoBoxData(8, 50)),
InventoryItemData(ObjectClass.energy_cell, PlanetSideGUID(87), 36, DetailedAmmoBoxData(8, 50)),
InventoryItemData(ObjectClass.remote_electronics_kit, PlanetSideGUID(88), 39, DetailedREKData(CommonFieldData(PlanetSideEmpire.VS, false, false, true, None, false, Some(false), None, PlanetSideGUID(0))))
))
val obj = DetailedPlayerData.apply(pos, app, char, inv, DrawnSlot.Pistol1)
val msg = ObjectCreateDetailedMessage(0x79, PlanetSideGUID(75), obj)
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
val pkt_bitv = pkt.toBitVector
val ori_bitv = string.toBitVector
pkt_bitv.take(724) mustEqual ori_bitv.take(724) //skip 1; this is the highest bit of facingPitch
pkt_bitv.drop(725) mustEqual ori_bitv.drop(725)
//TODO work on DetailedCharacterData to make this pass as a single stream
}
"encode (character, seated)" in {
val aa : Int=>CharacterAppearanceA = CharacterAppearanceA(
BasicCharacterData(
"IlllIIIlllIlIllIlllIllI",
PlanetSideEmpire.VS,
CharacterGender.Female,
41,
CharacterVoice.Voice1
),
CommonFieldData(
PlanetSideEmpire.VS,
false,
false,
false,
None,
false,
None,
None,
PlanetSideGUID(0)
),
ExoSuitType.Standard,
0,
192L,
0,
0,
0,
0
)
val ab : (Boolean,Int)=>CharacterAppearanceB = CharacterAppearanceB(
0L,
"",
0,
false,
false,
false,
false,
false,
5.625f, 61.875f,
true,
GrenadeState.None,
false,
false,
false,
false,
false,
None
)
val app : Int=>CharacterAppearanceData = CharacterAppearanceData(
aa, ab,
RibbonBars(
MeritCommendation.None,
MeritCommendation.None,
MeritCommendation.None,
MeritCommendation.None
)
)
val ba : DetailedCharacterA = DetailedCharacterA(
0L,
0L,
0L, 0L, 0L,
100, 100,
false,
50,
32831L,
100, 100,
None,
0, 0, 0L,
List(0, 0, 0, 0, 0, 0),
List(
CertificationType.StandardAssault,
CertificationType.MediumAssault,
CertificationType.ATV,
CertificationType.Harasser,
CertificationType.StandardExoSuit,
CertificationType.AgileExoSuit,
CertificationType.ReinforcedExoSuit
)
)
val bb : (Long, Option[Int])=>DetailedCharacterB = DetailedCharacterB(
None,
Nil,
Nil, Nil,
List(
"xpe_sanctuary_help",
"xpe_th_firemodes",
"used_beamer",
"map13"
),
Nil,
0L, 0L, 0L, 0L, 0L,
Some(DCDExtra2(0, 0)),
Nil, Nil, false,
None
)
val char : Option[Int]=>DetailedCharacterData =
(pad_length : Option[Int]) => DetailedCharacterData(ba, bb(ba.bep, pad_length))(pad_length)
val inv = InventoryData(List(
InventoryItemData(ObjectClass.beamer, PlanetSideGUID(76), 0,
DetailedWeaponData(
CommonFieldData(PlanetSideEmpire.VS, false, false, true, None, false, None, None, PlanetSideGUID(0)),
0,
List(InternalSlot(ObjectClass.energy_cell, PlanetSideGUID(77), 0, DetailedAmmoBoxData(8, 16)))
)
),
InventoryItemData(ObjectClass.suppressor, PlanetSideGUID(78), 2,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.VS, false, false, true, None, false, None, None, PlanetSideGUID(0)),
0,
List(InternalSlot(ObjectClass.bullet_9mm, PlanetSideGUID(79), 0, DetailedAmmoBoxData(8, 25)))
)
),
InventoryItemData(ObjectClass.forceblade, PlanetSideGUID(80), 4,
DetailedWeaponData(
CommonFieldData(PlanetSideEmpire.VS, false, false, true, None, false, None, None, PlanetSideGUID(0)),
0,
List(InternalSlot(ObjectClass.melee_ammo, PlanetSideGUID(81), 0, DetailedAmmoBoxData(8, 1)))
)
),
InventoryItemData(ObjectClass.locker_container, PlanetSideGUID(82), 5, DetailedLockerContainerData(8)),
InventoryItemData(ObjectClass.bullet_9mm, PlanetSideGUID(83), 6, DetailedAmmoBoxData(8, 50)),
InventoryItemData(ObjectClass.bullet_9mm, PlanetSideGUID(84), 9, DetailedAmmoBoxData(8, 50)),
InventoryItemData(ObjectClass.bullet_9mm, PlanetSideGUID(85), 12, DetailedAmmoBoxData(8, 50)),
InventoryItemData(ObjectClass.bullet_9mm_AP, PlanetSideGUID(86), 33, DetailedAmmoBoxData(8, 50)),
InventoryItemData(ObjectClass.energy_cell, PlanetSideGUID(87), 36, DetailedAmmoBoxData(8, 50)),
InventoryItemData(ObjectClass.remote_electronics_kit, PlanetSideGUID(88), 39, DetailedREKData(CommonFieldData(PlanetSideEmpire.VS, false, false, true, None, false, Some(false), None, PlanetSideGUID(0))))
))
val obj = DetailedPlayerData.apply(app, char, inv, DrawnSlot.Pistol1)
//it shouldn't be Pistol1 if he's seated but it's fine for the test
val msg = ObjectCreateDetailedMessage(0x79, PlanetSideGUID(75), ObjectCreateMessageParent(PlanetSideGUID(43981), 0), obj)
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
val pkt_bitv = pkt.toBitVector
val ori_bitv = string_seated.toBitVector
pkt_bitv.take(668) mustEqual ori_bitv.take(668) //skip 1; this is the highest bit of facingPitch
pkt_bitv.drop(670) mustEqual ori_bitv.drop(670)
//TODO work on DetailedCharacterData to make this pass as a single stream
}
"encode (max)" in {
val pos : PlacementData = PlacementData(
Vector3(3990.7734f, 3656.5781f, 230.70312f),
Vector3(0, 0, 67.5f),
None
)
val aa : Int=>CharacterAppearanceA = CharacterAppearanceA(
BasicCharacterData(
"HaHaATRMax",
PlanetSideEmpire.TR,
CharacterGender.Male,
57,
CharacterVoice.Voice1
),CommonFieldData(
PlanetSideEmpire.TR,
false,
false,
true,
None,
false,
None,
None,
PlanetSideGUID(0)
),
ExoSuitType.MAX,
1,
41605870L,
0,
0,
0,
65535
)
val ab : (Boolean,Int)=>CharacterAppearanceB = CharacterAppearanceB(
0L,
"",
0,
false,
false,
false,
false,
false,
348.75f, 0,
true,
GrenadeState.None,
false,
false,
false,
false,
false,
None
)
val app : Int=>CharacterAppearanceData = CharacterAppearanceData(
aa, ab,
RibbonBars()
)
val ba : DetailedCharacterA = DetailedCharacterA(
15301L,
0L,
0L, 0L, 0L,
120, 120,
false,
641,
32831L,
100, 100,
Some(0),
0, 0, 0L,
List(0, 0, 0, 0, 0, 0),
List(
CertificationType.StandardAssault,
CertificationType.MediumAssault,
CertificationType.StandardExoSuit,
CertificationType.AgileExoSuit,
CertificationType.UniMAX
)
)
val bb : (Long, Option[Int])=>DetailedCharacterB = DetailedCharacterB(
None,
Nil,
Nil, Nil,
List(
"xpe_battle_rank_3",
"xpe_bind_facility",
"xpe_instant_action",
"xpe_battle_rank_4",
"xpe_battle_rank_2",
"xpe_sanctuary_help",
"xpe_drop_pod",
"xpe_orbital_shuttle",
"xpe_battle_rank_5",
"xpe_th_nonsanc",
"xpe_th_ground_p",
"xpe_th_ammo",
"xpe_th_firemodes",
"xpe_th_max",
"visited_spitfire_turret",
"visited_wall_turret",
"visited_resource_silo",
"visited_certification_terminal",
"visited_med_terminal",
"visited_broadcast_warpgate",
"used_phalanx",
"visited_air_vehicle_terminal",
"visited_bfr_terminal",
"used_cycler",
"visited_galaxy_terminal",
"visited_implant_terminal",
"visited_external_door_lock",
"visited_respawn_terminal",
"visited_locker",
"visited_motion_sensor",
"used_grenade_plasma",
"used_rek",
"used_repeater",
"visited_deconstruction_terminal",
"visited_secondary_capture",
"used_suppressor",
"used_trhev_burster",
"used_trhev_dualcycler",
"used_trhev_pounder",
"visited_capture_terminal",
"visited_order_terminal",
"visited_ground_vehicle_terminal",
"map12",
"map10",
"map09",
"map05",
"map03",
"map02"
),
Nil,
0L, 0L, 0L, 0L, 0L,
Some(DCDExtra2(0, 0)),
Nil, Nil, false,
None
)
val char : Option[Int]=>DetailedCharacterData =
(pad_length : Option[Int]) => DetailedCharacterData(ba, bb(ba.bep, pad_length))(pad_length)
val inv = InventoryData(
List(
InternalSlot(889, PlanetSideGUID(2), 0,
DetailedWeaponData(
CommonFieldData(PlanetSideEmpire.TR, false, false, true, None, false, None, None, PlanetSideGUID(0)),
0,
List(
InternalSlot(265, PlanetSideGUID(3), 0, DetailedAmmoBoxData(8,200)),
InternalSlot(265, PlanetSideGUID(4), 1, DetailedAmmoBoxData(8,200)),
InternalSlot(265, PlanetSideGUID(5), 2, DetailedAmmoBoxData(8,200))
)
)
),
InternalSlot(175, PlanetSideGUID(6), 4,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.TR, false, false, true, None, false, None, None, PlanetSideGUID(0)),
0,
List(
InternalSlot(540, PlanetSideGUID(7), 0, DetailedAmmoBoxData(8,1))
)
)
),
InternalSlot(456, PlanetSideGUID(8), 5, DetailedLockerContainerData(
CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)),
None
)),
InternalSlot(265, PlanetSideGUID(9), 6, DetailedAmmoBoxData(8, 36)),
InternalSlot(265, PlanetSideGUID(10), 10, DetailedAmmoBoxData(8, 100)),
InternalSlot(265, PlanetSideGUID(11), 14, DetailedAmmoBoxData(8, 100)),
InternalSlot(265, PlanetSideGUID(12), 18, DetailedAmmoBoxData(8, 100)),
InternalSlot(265, PlanetSideGUID(13), 70, DetailedAmmoBoxData(8, 100)),
InternalSlot(265, PlanetSideGUID(14), 74, DetailedAmmoBoxData(8, 100)),
InternalSlot(265, PlanetSideGUID(15), 78, DetailedAmmoBoxData(8, 100)),
InternalSlot(265, PlanetSideGUID(16), 82, DetailedAmmoBoxData(8, 100)),
InternalSlot(536, PlanetSideGUID(17), 134, DetailedAmmoBoxData(8, 1)),
InternalSlot(536, PlanetSideGUID(18), 138, DetailedAmmoBoxData(8, 1)),
InternalSlot(536, PlanetSideGUID(19), 142, DetailedAmmoBoxData(8, 1)),
InternalSlot(536, PlanetSideGUID(20), 146, DetailedAmmoBoxData(8, 1)),
InternalSlot(536, PlanetSideGUID(21), 166, DetailedAmmoBoxData(8, 1)),
InternalSlot(536, PlanetSideGUID(22), 170, DetailedAmmoBoxData(8, 1)),
InternalSlot(536, PlanetSideGUID(23), 174, DetailedAmmoBoxData(8, 1)),
InternalSlot(536, PlanetSideGUID(24), 178, DetailedAmmoBoxData(8, 1))
)
)
val obj = DetailedPlayerData(pos, app, char, inv, DrawnSlot.Pistol1)
val msg = ObjectCreateDetailedMessage(ObjectClass.avatar, PlanetSideGUID(1), obj)
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
pkt mustEqual string_max
}
"encode (BR32)" in {
val pos : PlacementData = PlacementData(
Vector3(5500.0f, 3800.0f, 71.484375f),
Vector3(0, 0, 90.0f),
None
)
val aa : Int=>CharacterAppearanceA = CharacterAppearanceA(
BasicCharacterData(
"KiCkJr",
PlanetSideEmpire.NC,
CharacterGender.Male,
24,
CharacterVoice.Voice4
),
CommonFieldData(
PlanetSideEmpire.NC,
false,
false,
true,
None,
false,
None,
None,
PlanetSideGUID(0)
),
ExoSuitType.Agile,
0,
733931L,
0,
0,
0,
0
)
val ab : (Boolean,Int)=>CharacterAppearanceB = CharacterAppearanceB(
556539L,
"",
14,
false,
false,
false,
false,
false,
348.75f, 348.75f,
false,
GrenadeState.None,
false,
true,
false,
false,
false,
None
)
val app : Int=>CharacterAppearanceData = CharacterAppearanceData(
aa, ab,
RibbonBars(
MeritCommendation.Loser4,
MeritCommendation.EventNCElite,
MeritCommendation.HeavyAssault6,
MeritCommendation.SixYearNC
)
)
val ba : DetailedCharacterA = DetailedCharacterA(
6366766L,
694787L,
0L, 0L, 0L,
100, 100,
false,
100,
32831L,
100, 46,
None,
0, 4, 3278759L,
List(0, 0, 0, 0, 0, 0),
List(
CertificationType.StandardAssault,
CertificationType.MediumAssault,
CertificationType.HeavyAssault,
CertificationType.AntiVehicular,
CertificationType.AirCavalryScout,
CertificationType.GroundSupport,
CertificationType.Harasser,
CertificationType.StandardExoSuit,
CertificationType.AgileExoSuit,
CertificationType.Medical,
CertificationType.AdvancedMedical,
CertificationType.Hacking,
CertificationType.AdvancedHacking,
CertificationType.Engineering,
CertificationType.CombatEngineering
)
)
val bb : (Long, Option[Int])=>DetailedCharacterB = DetailedCharacterB(
None,
List(
ImplantEntry(ImplantType.AudioAmplifier, None),
ImplantEntry(ImplantType.Targeting, None),
ImplantEntry(ImplantType.Surge, None)
),
Nil, Nil,
List(
"xpe_overhead_map",
"xpe_warp_gate",
"xpe_form_outfit",
"xpe_blackops",
"xpe_command_rank_5",
"xpe_command_rank_3",
"xpe_sanctuary_help",
"xpe_battle_rank_13",
"xpe_battle_rank_12",
"xpe_battle_rank_10",
"xpe_battle_rank_14",
"xpe_battle_rank_15",
"xpe_orbital_shuttle",
"xpe_drop_pod",
"xpe_bind_facility",
"xpe_battle_rank_3",
"xpe_battle_rank_5",
"xpe_battle_rank_4",
"xpe_join_squad",
"xpe_form_squad",
"xpe_instant_action",
"xpe_battle_rank_2",
"xpe_warp_gate_usage",
"xpe_battle_rank_8",
"xpe_battle_rank_11",
"xpe_battle_rank_6",
"xpe_mail_alert",
"xpe_command_rank_1",
"xpe_battle_rank_20",
"xpe_battle_rank_18",
"xpe_battle_rank_19",
"xpe_join_platoon",
"xpe_battle_rank_17",
"xpe_battle_rank_16",
"xpe_join_outfit",
"xpe_battle_rank_25",
"xpe_battle_rank_24",
"xpe_command_rank_4",
"xpe_form_platoon",
"xpe_bind_ams",
"xpe_battle_rank_9",
"xpe_battle_rank_7",
"xpe_th_router",
"xpe_th_flail",
"xpe_th_ant",
"xpe_th_ams",
"xpe_th_ground_p",
"xpe_th_air_p",
"xpe_th_hover",
"xpe_th_ground",
"xpe_th_bfr",
"xpe_th_afterburner",
"xpe_th_air",
"xpe_th_cloak",
"used_oicw",
"used_advanced_ace",
"visited_spitfire_turret",
"visited_spitfire_cloaked",
"visited_spitfire_aa",
"visited_tank_traps",
"visited_portable_manned_turret_nc",
"visited_portable_manned_turret_tr",
"used_magcutter",
"used_chainblade",
"used_forceblade",
"visited_wall_turret",
"visited_ancient_terminal",
"visited_ams",
"visited_ant",
"visited_dropship",
"visited_liberator",
"visited_lightgunship",
"visited_lightning",
"visited_magrider",
"visited_prowler",
"visited_quadstealth",
"visited_skyguard",
"visited_threemanheavybuggy",
"visited_two_man_assault_buggy",
"visited_twomanheavybuggy",
"visited_twomanhoverbuggy",
"visited_vanguard",
"visited_flail",
"visited_router",
"visited_switchblade",
"visited_aurora",
"visited_battlewagon",
"visited_fury",
"visited_quadassault",
"visited_galaxy_gunship",
"visited_apc_tr",
"visited_apc_vs",
"visited_lodestar",
"visited_phantasm",
"visited_thunderer",
"visited_apc_nc",
"visited_vulture",
"visited_wasp",
"visited_mosquito",
"visited_aphelion_flight",
"visited_aphelion_gunner",
"visited_colossus_flight",
"visited_colossus_gunner",
"visited_peregrine_flight",
"visited_peregrine_gunner",
"used_bank",
"visited_resource_silo",
"visited_certification_terminal",
"visited_med_terminal",
"used_nano_dispenser",
"visited_sensor_shield",
"visited_broadcast_warpgate",
"used_phalanx",
"used_phalanx_avcombo",
"used_phalanx_flakcombo",
"visited_warpgate_small",
"used_flamethrower",
"used_ancient_turret_weapon",
"visited_LLU_socket",
"used_energy_gun_nc",
"visited_mediumtransport",
"used_aphelion_immolation_cannon",
"used_grenade_plasma",
"used_grenade_jammer",
"visited_shield_generator",
"visited_motion_sensor",
"visited_health_crystal",
"visited_repair_crystal",
"visited_vehicle_crystal",
"used_grenade_frag",
"used_ace",
"visited_adv_med_terminal",
"used_beamer",
"used_bolt_driver",
"used_cycler",
"used_gauss",
"used_hunterseeker",
"used_isp",
"used_lancer",
"used_lasher",
"used_maelstrom",
"used_phoenix",
"used_pulsar",
"used_punisher",
"used_r_shotgun",
"used_radiator",
"used_rek",
"used_repeater",
"used_rocklet",
"used_striker",
"used_suppressor",
"used_thumper",
"visited_vanu_control_console",
"visited_capture_terminal",
"used_mini_chaingun",
"used_laze_pointer",
"used_telepad",
"used_spiker",
"used_heavy_sniper",
"used_command_uplink",
"used_firebird",
"used_flechette",
"used_heavy_rail_beam",
"used_ilc9",
"visited_generator_terminal",
"visited_locker",
"visited_external_door_lock",
"visited_air_vehicle_terminal",
"visited_galaxy_terminal",
"visited_implant_terminal",
"visited_secondary_capture",
"used_25mm_cannon",
"used_liberator_bombardier",
"visited_repair_silo",
"visited_vanu_module",
"used_flail_weapon",
"used_scythe",
"visited_respawn_terminal",
"used_ballgun",
"used_energy_gun_tr",
"used_anniversary_guna",
"used_anniversary_gunb",
"used_anniversary_gun",
"used_75mm_cannon",
"used_apc_nc_weapon",
"used_apc_tr_weapon",
"used_apc_vs_weapon",
"used_flux_cannon",
"used_aphelion_plasma_rocket_pod",
"used_aphelion_ppa",
"used_fluxpod",
"visited_bfr_terminal",
"used_colossus_cluster_bomb_pod",
"used_colossus_dual_100mm_cannons",
"used_colossus_tank_cannon",
"visited_energy_crystal",
"used_heavy_grenade_launcher",
"used_35mm_rotarychaingun",
"used_katana",
"used_35mm_cannon",
"used_reaver_weapons",
"used_lightning_weapons",
"used_med_app",
"used_20mm_cannon",
"visited_monolith_amerish",
"visited_monolith_ceryshen",
"visited_monolith_cyssor",
"visited_monolith_esamir",
"visited_monolith_forseral",
"visited_monolith_ishundar",
"visited_monolith_searhus",
"visited_monolith_solsar",
"used_nc_hev_falcon",
"used_nc_hev_scattercannon",
"used_nc_hev_sparrow",
"used_armor_siphon",
"used_peregrine_dual_machine_gun",
"used_peregrine_dual_rocket_pods",
"used_peregrine_mechhammer",
"used_peregrine_particle_cannon",
"used_peregrine_sparrow",
"used_105mm_cannon",
"used_15mm_chaingun",
"used_pulsed_particle_accelerator",
"used_rotarychaingun",
"visited_deconstruction_terminal",
"used_skyguard_weapons",
"visited_generator",
"used_gauss_cannon",
"used_trek",
"used_vanguard_weapons",
"visited_ancient_air_vehicle_terminal",
"visited_ancient_equipment_terminal",
"visited_order_terminal",
"visited_ancient_ground_vehicle_terminal",
"visited_ground_vehicle_terminal",
"used_vulture_bombardier",
"used_vulture_nose_cannon",
"used_vulture_tail_cannon",
"used_wasp_weapon_system",
"visited_charlie01",
"visited_charlie02",
"visited_charlie03",
"visited_charlie04",
"visited_charlie05",
"visited_charlie06",
"visited_charlie07",
"visited_charlie08",
"visited_charlie09",
"visited_gingerman_atar",
"visited_gingerman_dahaka",
"visited_gingerman_hvar",
"visited_gingerman_izha",
"visited_gingerman_jamshid",
"visited_gingerman_mithra",
"visited_gingerman_rashnu",
"visited_gingerman_sraosha",
"visited_gingerman_yazata",
"visited_gingerman_zal",
"visited_sled01",
"visited_sled02",
"visited_sled04",
"visited_sled05",
"visited_sled06",
"visited_sled07",
"visited_sled08",
"visited_snowman_amerish",
"visited_snowman_ceryshen",
"visited_snowman_cyssor",
"visited_snowman_esamir",
"visited_snowman_forseral",
"visited_snowman_hossin",
"visited_snowman_ishundar",
"visited_snowman_searhus",
"visited_snowman_solsar",
"ugd06",
"ugd05",
"ugd04",
"ugd03",
"ugd02",
"ugd01",
"map99",
"map98",
"map97",
"map96",
"map15",
"map14",
"map11",
"map08",
"map04",
"map05",
"map03",
"map01",
"map06",
"map02",
"map09",
"map07",
"map10"
),
List(
"training_start_nc",
"training_ui",
"training_map"
),
0L, 0L, 0L, 0L, 0L,
None,
Nil, Nil, false,
Some(Cosmetics(true, true, true, true, false))
)
val char : Option[Int]=>DetailedCharacterData =
(pad_length : Option[Int]) => DetailedCharacterData(ba, bb(ba.bep, pad_length))(pad_length)
val inv = InventoryData(
List(
InternalSlot(531, PlanetSideGUID(4202), 0,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NC, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(389, PlanetSideGUID(3942), 0,DetailedAmmoBoxData(8, 100))))
),
InternalSlot(132, PlanetSideGUID(6924), 1,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NC, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(111, PlanetSideGUID(9157), 0, DetailedAmmoBoxData(8, 100))))
),
InternalSlot(714, PlanetSideGUID(8498), 2,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NC, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(755, PlanetSideGUID(5356), 0, DetailedAmmoBoxData(8, 16))))
),
InternalSlot(468, PlanetSideGUID(7198), 4,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NC, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(5009), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(456, PlanetSideGUID(5374), 5,
DetailedLockerContainerData(
CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)),
Some(InventoryData(List(
InternalSlot(429, PlanetSideGUID(3021), 0,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(272, PlanetSideGUID(8729), 0, DetailedAmmoBoxData(8, 0))))
),
InternalSlot(838, PlanetSideGUID(8467), 9,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(839, PlanetSideGUID(8603), 0, DetailedAmmoBoxData(8, 5))))
),
InternalSlot(272, PlanetSideGUID(3266), 18, DetailedAmmoBoxData(8, 27)),
InternalSlot(577, PlanetSideGUID(2934), 22,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(111, PlanetSideGUID(4682), 0, DetailedAmmoBoxData(8, 100))))
),
InternalSlot(839, PlanetSideGUID(3271), 90, DetailedAmmoBoxData(8, 15)),
InternalSlot(839, PlanetSideGUID(7174), 94, DetailedAmmoBoxData(8, 6)),
InternalSlot(429, PlanetSideGUID(6084), 98,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(272, PlanetSideGUID(5928), 0, DetailedAmmoBoxData(8, 35))))
),
InternalSlot(462, PlanetSideGUID(5000), 108,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(463, PlanetSideGUID(6277), 0, DetailedAmmoBoxData(8, 150))))
),
InternalSlot(429, PlanetSideGUID(4341), 189,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(272, PlanetSideGUID(7043), 0, DetailedAmmoBoxData(8, 35))))
),
InternalSlot(556, PlanetSideGUID(4168), 198,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(28, PlanetSideGUID(8937), 0, DetailedAmmoBoxData(8, 100))))
),
InternalSlot(272, PlanetSideGUID(3173), 207, DetailedAmmoBoxData(8, 50)),
InternalSlot(462, PlanetSideGUID(3221), 210,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(463, PlanetSideGUID(4031), 0, DetailedAmmoBoxData(8, 150))))
),
InternalSlot(556, PlanetSideGUID(6853), 280,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(29, PlanetSideGUID(8524), 0, DetailedAmmoBoxData(8, 67))))
),
InternalSlot(556, PlanetSideGUID(4569), 290,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(28, PlanetSideGUID(5584), 0, DetailedAmmoBoxData(8, 100))))
),
InternalSlot(462, PlanetSideGUID(9294), 300,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(463, PlanetSideGUID(3118), 0, DetailedAmmoBoxData(8, 150))))
),
InternalSlot(272, PlanetSideGUID(4759), 387, DetailedAmmoBoxData(8, 50)),
InternalSlot(462, PlanetSideGUID(7377), 390,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(463, PlanetSideGUID(8155), 0, DetailedAmmoBoxData(8, 150))))
),
InternalSlot(843, PlanetSideGUID(6709), 480, DetailedAmmoBoxData(8, 1)),
InternalSlot(843, PlanetSideGUID(5276), 484, DetailedAmmoBoxData(8, 1)),
InternalSlot(843, PlanetSideGUID(7769), 488, DetailedAmmoBoxData(8, 1)),
InternalSlot(844, PlanetSideGUID(5334), 492, DetailedAmmoBoxData(8, 1)),
InternalSlot(844, PlanetSideGUID(6219), 496, DetailedAmmoBoxData(8, 1)),
InternalSlot(842, PlanetSideGUID(7279), 500, DetailedAmmoBoxData(8, 1)),
InternalSlot(842, PlanetSideGUID(5415), 504, DetailedAmmoBoxData(8, 1)),
InternalSlot(175, PlanetSideGUID(5741), 540,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(5183), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(324, PlanetSideGUID(6208), 541,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(5029), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(324, PlanetSideGUID(8589), 542,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(9217), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(175, PlanetSideGUID(8901), 543,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(7633), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(175, PlanetSideGUID(8419), 544,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(6546), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(175, PlanetSideGUID(4715), 545,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(8453), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(324, PlanetSideGUID(3577), 546,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(9202), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(324, PlanetSideGUID(6003), 547,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(3260), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(324, PlanetSideGUID(9140), 548,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540,PlanetSideGUID(3815),0,DetailedAmmoBoxData(8, 1))))
),
InternalSlot(324, PlanetSideGUID(4913), 549,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540,PlanetSideGUID(7222),0,DetailedAmmoBoxData(8, 1))))
),
InternalSlot(324, PlanetSideGUID(6954), 550,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540,PlanetSideGUID(2953),0,DetailedAmmoBoxData(8, 1))))
),
InternalSlot(324, PlanetSideGUID(6405), 551,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540,PlanetSideGUID(4676),0,DetailedAmmoBoxData(8, 1))))
),
InternalSlot(324, PlanetSideGUID(8915), 552,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540,PlanetSideGUID(4018),0,DetailedAmmoBoxData(8, 1))))
),
InternalSlot(324, PlanetSideGUID(4993), 553,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540,PlanetSideGUID(6775),0,DetailedAmmoBoxData(8, 1))))
),
InternalSlot(175, PlanetSideGUID(5053), 554,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540,PlanetSideGUID(6418),0,DetailedAmmoBoxData(8, 1))))
),
InternalSlot(324, PlanetSideGUID(9244), 555,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540,PlanetSideGUID(3327),0,DetailedAmmoBoxData(8, 1))))
),
InternalSlot(468, PlanetSideGUID(6292), 556,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540,PlanetSideGUID(6918),0,DetailedAmmoBoxData(8, 1))))
),
InternalSlot(842, PlanetSideGUID(5357), 558, DetailedAmmoBoxData(8, 1)),
InternalSlot(844, PlanetSideGUID(4435), 562, DetailedAmmoBoxData(8, 1)),
InternalSlot(843, PlanetSideGUID(7242), 566, DetailedAmmoBoxData(8, 1)),
InternalSlot(175, PlanetSideGUID(7330), 570,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(4786), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(468, PlanetSideGUID(7415), 571,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(6536), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(175, PlanetSideGUID(3949), 572,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(7526), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(175, PlanetSideGUID(3805), 573,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(7358), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(324, PlanetSideGUID(4493), 574,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(6852), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(324, PlanetSideGUID(5762), 575,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(3463), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(175, PlanetSideGUID(3315), 576,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(7619), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(324, PlanetSideGUID(6263), 577,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(5912), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(468, PlanetSideGUID(4028), 578,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(8021), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(175, PlanetSideGUID(2843), 579,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(7250), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(175, PlanetSideGUID(9143), 580,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(5195), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(468, PlanetSideGUID(5024), 581,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(4287), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(468, PlanetSideGUID(6582), 582,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(4915), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(468, PlanetSideGUID(6425), 583,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(8872), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(468, PlanetSideGUID(4431), 584,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(4191), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(175, PlanetSideGUID(8339), 585,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(7317), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(175, PlanetSideGUID(3277), 586,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(6469), 0, DetailedAmmoBoxData(8, 1))))
)
)
)))
),
InternalSlot(213, PlanetSideGUID(6877), 6, DetailedCommandDetonaterData(CommonFieldData(PlanetSideEmpire.NC, false, false, true, None, false, None, None, PlanetSideGUID(0)))),
InternalSlot(755, PlanetSideGUID(6227), 9, DetailedAmmoBoxData(8, 16)),
InternalSlot(728, PlanetSideGUID(7181), 12, DetailedREKData(CommonFieldData(PlanetSideEmpire.NC, false, false, true, None, false, Some(false), None, PlanetSideGUID(0)), 16)),
InternalSlot(536, PlanetSideGUID(4077), 33, DetailedAmmoBoxData(8, 1)),
InternalSlot(680, PlanetSideGUID(4377), 37,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NC, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(681, PlanetSideGUID(8905), 0, DetailedAmmoBoxData(8, 3))))
),
InternalSlot(32, PlanetSideGUID(5523), 39, DetailedConstructionToolData(
CommonFieldData(PlanetSideEmpire.NC, false, false, true, None, false, None, None, PlanetSideGUID(0))
)),
InternalSlot(673, PlanetSideGUID(3661), 60,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NC, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(674, PlanetSideGUID(8542), 0, DetailedAmmoBoxData(8, 3))))
)
)
)
val obj = DetailedPlayerData(pos, app, char, inv, DrawnSlot.None)
val msg = ObjectCreateDetailedMessage(ObjectClass.avatar, PlanetSideGUID(75), obj)
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
pkt mustEqual string_br32
}
"encode (ccrider)" in {
val pos : PlacementData = PlacementData(
Vector3(2931.5f, 4404.6953f, 45.0625f),
Vector3.z(36.5625f),
None
)
val aa : Int=>CharacterAppearanceA = CharacterAppearanceA(
BasicCharacterData(
"CCRIDER",
PlanetSideEmpire.NC,
CharacterGender.Male,
20,
CharacterVoice.Voice3
),
CommonFieldData(
PlanetSideEmpire.NC,
false,
false,
false,
None,
false,
None,
None,
PlanetSideGUID(0)
),
ExoSuitType.Standard,
0,
1176612L,
15,
5,
10,
1
)
val ab : (Boolean, Int)=>CharacterAppearanceB = CharacterAppearanceB(
25044L,
"Black Armored Reapers",
15,
false,
false,
false,
false,
false,
0, 0,
false,
GrenadeState.None,
false,
false,
false,
false,
false,
None
)
val app : Int=>CharacterAppearanceData = CharacterAppearanceData(
aa, ab,
RibbonBars(
MeritCommendation.DefenseNC5,
MeritCommendation.HackingSupport5,
MeritCommendation.BFRAdvanced2,
MeritCommendation.SixYearNC
)
)
val ba : DetailedCharacterA = DetailedCharacterA(
6571522L,
659329L,
0L, 0L, 0L,
100, 100,
false,
50,
32831,
100, 100,
None,
0,
6,
3165669,
List(0, 0, 0, 0, 0, 0),
List(
CertificationType.StandardAssault,
CertificationType.MediumAssault,
CertificationType.HeavyAssault,
CertificationType.AirCavalryScout,
CertificationType.StandardExoSuit,
CertificationType.AgileExoSuit,
CertificationType.UniMAX,
CertificationType.Medical,
CertificationType.AdvancedMedical,
CertificationType.Hacking,
CertificationType.AdvancedHacking,
CertificationType.ExpertHacking,
CertificationType.Engineering
)
)
val bb : (Long, Option[Int])=>DetailedCharacterB = DetailedCharacterB(
Some(14140),
List(
ImplantEntry(ImplantType.Surge, Some(94), false),
ImplantEntry(ImplantType.DarklightVision, Some(91), false),
ImplantEntry(ImplantType.Targeting, Some(91), false)
),
List(), List(),
List(
"xpe_blackops",
"xpe_battle_rank_9",
"xpe_battle_rank_23",
"xpe_command_rank_1",
"xpe_form_outfit",
"xpe_mail_alert",
"xpe_battle_rank_22",
"xpe_command_rank_3",
"xpe_form_platoon",
"xpe_battle_rank_13",
"xpe_battle_rank_12",
"xpe_battle_rank_10",
"xpe_battle_rank_14",
"xpe_battle_rank_15",
"xpe_battle_rank_8",
"xpe_battle_rank_11",
"xpe_battle_rank_21",
"xpe_battle_rank_20",
"xpe_battle_rank_18",
"xpe_battle_rank_19",
"xpe_join_platoon",
"xpe_battle_rank_17",
"xpe_battle_rank_16",
"xpe_join_outfit",
"xpe_battle_rank_25",
"xpe_battle_rank_24",
"xpe_battle_rank_7",
"xpe_bind_facility",
"xpe_bind_ams",
"xpe_command_rank_5",
"xpe_command_rank_2",
"xpe_instant_action",
"xpe_form_squad",
"xpe_battle_rank_4",
"xpe_warp_gate_usage",
"xpe_battle_rank_2",
"xpe_battle_rank_3",
"xpe_sanctuary_help",
"xpe_drop_pod",
"xpe_orbital_shuttle",
"xpe_battle_rank_6",
"xpe_join_squad",
"xpe_battle_rank_5",
"xpe_th_switchblade",
"xpe_th_router",
"xpe_th_flail",
"xpe_th_ant",
"xpe_th_ams",
"xpe_th_bfr",
"used_oicw",
"used_advanced_ace",
"visited_spitfire_turret",
"visited_spitfire_cloaked",
"visited_spitfire_aa",
"visited_tank_traps",
"visited_portable_manned_turret_nc",
"used_magcutter",
"visited_wall_turret",
"visited_ams",
"visited_ant",
"visited_dropship",
"visited_liberator",
"visited_lightgunship",
"visited_lightning",
"visited_magrider",
"visited_prowler",
"visited_quadstealth",
"visited_skyguard",
"visited_threemanheavybuggy",
"visited_two_man_assault_buggy",
"visited_twomanheavybuggy",
"visited_twomanhoverbuggy",
"visited_vanguard",
"visited_flail",
"visited_router",
"visited_switchblade",
"visited_aurora",
"visited_battlewagon",
"visited_fury",
"visited_quadassault",
"visited_galaxy_gunship",
"visited_apc_tr",
"visited_apc_vs",
"visited_lodestar",
"visited_phantasm",
"visited_thunderer",
"visited_apc_nc",
"visited_vulture",
"visited_wasp",
"visited_mosquito",
"visited_aphelion_flight",
"visited_aphelion_gunner",
"visited_colossus_flight",
"visited_colossus_gunner",
"visited_peregrine_flight",
"visited_peregrine_gunner",
"used_bank",
"visited_resource_silo",
"visited_certification_terminal",
"visited_med_terminal",
"used_nano_dispenser",
"visited_sensor_shield",
"visited_broadcast_warpgate",
"used_phalanx",
"used_phalanx_avcombo",
"used_phalanx_flakcombo",
"visited_warpgate_small",
"used_flamethrower",
"used_ancient_turret_weapon",
"visited_LLU_socket",
"used_energy_gun_nc",
"visited_mediumtransport",
"used_aphelion_immolation_cannon",
"used_grenade_plasma",
"used_grenade_jammer",
"visited_shield_generator",
"visited_motion_sensor",
"visited_health_crystal",
"visited_repair_crystal",
"visited_vehicle_crystal",
"used_grenade_frag",
"used_ace",
"visited_adv_med_terminal",
"used_beamer",
"used_bolt_driver",
"used_cycler",
"used_gauss",
"used_hunterseeker",
"used_isp",
"used_lancer",
"used_lasher",
"used_maelstrom",
"used_phoenix",
"used_pulsar",
"used_punisher",
"used_r_shotgun",
"used_radiator",
"used_rek",
"used_repeater",
"used_rocklet",
"used_striker",
"used_suppressor",
"used_thumper",
"visited_vanu_control_console",
"visited_capture_terminal",
"used_mini_chaingun",
"used_laze_pointer",
"used_telepad",
"used_spiker",
"used_heavy_sniper",
"used_command_uplink",
"used_firebird",
"used_flechette",
"used_heavy_rail_beam",
"used_ilc9",
"visited_generator_terminal",
"visited_locker",
"visited_external_door_lock",
"visited_air_vehicle_terminal",
"visited_galaxy_terminal",
"visited_implant_terminal",
"visited_secondary_capture",
"used_25mm_cannon",
"used_liberator_bombardier",
"visited_repair_silo",
"visited_vanu_module",
"used_flail_weapon",
"used_scythe",
"visited_respawn_terminal",
"used_ballgun",
"used_anniversary_guna",
"used_anniversary_gunb",
"used_anniversary_gun",
"used_75mm_cannon",
"used_apc_nc_weapon",
"used_apc_tr_weapon",
"used_apc_vs_weapon",
"used_flux_cannon",
"used_aphelion_laser",
"used_aphelion_plasma_rocket_pod",
"used_aphelion_ppa",
"used_aphelion_starfire",
"used_fluxpod",
"visited_bfr_terminal",
"used_colossus_burster",
"used_colossus_chaingun",
"used_colossus_cluster_bomb_pod",
"used_colossus_dual_100mm_cannons",
"used_colossus_tank_cannon",
"visited_damage_crystal",
"visited_energy_crystal",
"used_heavy_grenade_launcher",
"used_35mm_rotarychaingun",
"used_katana",
"used_35mm_cannon",
"used_reaver_weapons",
"used_lightning_weapons",
"used_med_app",
"used_20mm_cannon",
"visited_monolith_amerish",
"visited_monolith_ceryshen",
"visited_monolith_cyssor",
"visited_monolith_esamir",
"visited_monolith_forseral",
"visited_monolith_hossin",
"visited_monolith_ishundar",
"visited_monolith_searhus",
"visited_monolith_solsar",
"used_nc_hev_falcon",
"used_nc_hev_scattercannon",
"used_nc_hev_sparrow",
"used_armor_siphon",
"used_peregrine_dual_machine_gun",
"used_peregrine_dual_rocket_pods",
"used_peregrine_mechhammer",
"used_ntu_siphon",
"used_peregrine_particle_cannon",
"used_peregrine_sparrow",
"used_105mm_cannon",
"used_15mm_chaingun",
"used_pulsed_particle_accelerator",
"used_rotarychaingun",
"visited_deconstruction_terminal",
"used_skyguard_weapons",
"visited_generator",
"used_gauss_cannon",
"used_trek",
"used_vanguard_weapons",
"visited_ancient_air_vehicle_terminal",
"visited_ancient_equipment_terminal",
"visited_order_terminal",
"visited_ancient_ground_vehicle_terminal",
"visited_ground_vehicle_terminal",
"used_vulture_bombardier",
"used_vulture_nose_cannon",
"used_vulture_tail_cannon",
"used_wasp_weapon_system",
"visited_charlie05",
"visited_charlie06",
"visited_charlie07",
"visited_charlie08",
"visited_charlie09",
"visited_sled04",
"visited_sled05",
"visited_sled06",
"visited_sled07",
"visited_sled08",
"ugd06",
"ugd05",
"ugd04",
"ugd03",
"ugd02",
"ugd01",
"map99",
"map98",
"map97",
"map96",
"map15",
"map14",
"map13",
"map12",
"map11",
"map04",
"map05",
"map03",
"map01",
"map06",
"map02",
"map09",
"map07",
"map10"
),
List(
"training_weapons01",
"training_warpgates",
"training_map",
"training_inventory",
"training_healing",
"training_hart",
"training_armors",
"training_welcome"
),
0,
0,
0,
0,
0,
None,
List(
9,
10, 11, 16, 17, 18, 30, 31, 32,
37, 38, 52, 53, 57, 69, 92, 99,
100, 107, 108, 109, 110, 114, 115, 116, 117, 118,
127, 128, 129, 130, 131, 156, 163, 171, 178, 179,
180, 181, 194, 195, 198, 201, 215, 216, 217, 222,
223, 224, 225, 226, 227, 229, 230, 243, 244, 257,
265, 266, 277, 278, 283, 284, 285, 286, 289, 290,
296, 313, 334, 341, 342, 359, 369, 376, 377, 384,
391, 392, 393, 394, 398, 408, 415, 420, 424
),
List(),
false,
Some(Cosmetics(true, false, true, true, true))
)
val char : Option[Int]=>DetailedCharacterData =
(pad_length : Option[Int]) => DetailedCharacterData(ba, bb(ba.bep, pad_length))(pad_length)
val inv : InventoryData = InventoryData(List(
InternalSlot(411, PlanetSideGUID(10022), 0,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NC, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(755, PlanetSideGUID(10023), 0, DetailedAmmoBoxData(8, 8))))
),
InternalSlot(845, PlanetSideGUID(5671), 2,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NC, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(28, PlanetSideGUID(10019), 0, DetailedAmmoBoxData(8, 25))))
),
InternalSlot(468, PlanetSideGUID(3754), 4,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NC, false, false, true, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(540, PlanetSideGUID(6693), 0, DetailedAmmoBoxData(8, 1))))
),
InternalSlot(456, PlanetSideGUID(8199), 5,
DetailedLockerContainerData(
CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)),
Some(InventoryData(List(
InternalSlot(233, PlanetSideGUID(6315), 0,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(28, PlanetSideGUID(6795), 0, DetailedAmmoBoxData(0, 50))))
),
InternalSlot(233, PlanetSideGUID(4302), 6,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(28, PlanetSideGUID(5511), 0, DetailedAmmoBoxData(0, 50))))
),
InternalSlot(233, PlanetSideGUID(6342), 12,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(28, PlanetSideGUID(7788), 0, DetailedAmmoBoxData(0, 50))))
),
InternalSlot(233, PlanetSideGUID(7392), 18,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(28, PlanetSideGUID(8335), 0, DetailedAmmoBoxData(0, 50))))
),
InternalSlot(233, PlanetSideGUID(4432), 24,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(28, PlanetSideGUID(7020), 0, DetailedAmmoBoxData(0,50))))
),
InternalSlot(716, PlanetSideGUID(4219), 90,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(50, PlanetSideGUID(9275), 0, DetailedAmmoBoxData(0, 25))))
),
InternalSlot(716, PlanetSideGUID(3869), 96,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(50, PlanetSideGUID(6099), 0, DetailedAmmoBoxData(0, 25))))
),
InternalSlot(716, PlanetSideGUID(8954), 102,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(50, PlanetSideGUID(5972), 0, DetailedAmmoBoxData(0, 25))))
),
InternalSlot(233, PlanetSideGUID(7476), 108,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(28, PlanetSideGUID(5704), 0, DetailedAmmoBoxData(0, 50))))
),
InternalSlot(272, PlanetSideGUID(8800), 114, DetailedAmmoBoxData(0, 50)),
InternalSlot(272, PlanetSideGUID(8649), 177, DetailedAmmoBoxData(0, 50)),
InternalSlot(716, PlanetSideGUID(7580), 180,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(50, PlanetSideGUID(6734), 0, DetailedAmmoBoxData(0, 25))))
),
InternalSlot(716, PlanetSideGUID(6464), 186,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(50, PlanetSideGUID(4738), 0, DetailedAmmoBoxData(0, 25))))
),
InternalSlot(716, PlanetSideGUID(5408), 192,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(50, PlanetSideGUID(3579), 0, DetailedAmmoBoxData(0, 25))))
),
InternalSlot(556, PlanetSideGUID(8957), 198,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(28, PlanetSideGUID(8223), 0, DetailedAmmoBoxData(0, 100))))
),
InternalSlot(272, PlanetSideGUID(3928), 267, DetailedAmmoBoxData(0, 50)),
InternalSlot(577, PlanetSideGUID(3403), 279,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(111, PlanetSideGUID(4352), 0, DetailedAmmoBoxData(0, 100))))
),
InternalSlot(577, PlanetSideGUID(8454), 285,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(111, PlanetSideGUID(8724), 0, DetailedAmmoBoxData(0,100))))
),
InternalSlot(272, PlanetSideGUID(3397), 357, DetailedAmmoBoxData(0, 50)),
InternalSlot(429, PlanetSideGUID(6695), 378,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(272, PlanetSideGUID(6842), 0, DetailedAmmoBoxData(0, 35))))
),
InternalSlot(462, PlanetSideGUID(8304), 420,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(463, PlanetSideGUID(7089), 0, DetailedAmmoBoxData(0, 150))))
),
InternalSlot(462, PlanetSideGUID(3346), 429,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(463, PlanetSideGUID(7557), 0, DetailedAmmoBoxData(0, 150))))
),
InternalSlot(272, PlanetSideGUID(7515), 447, DetailedAmmoBoxData(0, 50)),
InternalSlot(462, PlanetSideGUID(4622), 510,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(463, PlanetSideGUID(6996), 0, DetailedAmmoBoxData(0, 150))))
),
InternalSlot(462, PlanetSideGUID(6586), 519,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(463, PlanetSideGUID(6870), 0, DetailedAmmoBoxData(0, 150))))
),
InternalSlot(556, PlanetSideGUID(4806), 528,
DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL, false, false, false, None, false, None, None, PlanetSideGUID(0)), 0, List(InternalSlot(28, PlanetSideGUID(8798), 0, DetailedAmmoBoxData(0, 100))))
),
InternalSlot(272, PlanetSideGUID(8429), 537, DetailedAmmoBoxData(0, 50))
))
))
),
InternalSlot(28, PlanetSideGUID(10018), 6, DetailedAmmoBoxData(8, 50)),
InternalSlot(28, PlanetSideGUID(5612), 9, DetailedAmmoBoxData(8, 50)),
InternalSlot(28, PlanetSideGUID(5128), 12, DetailedAmmoBoxData(8, 50)),
InternalSlot(29, PlanetSideGUID(8363), 33, DetailedAmmoBoxData(8, 50)),
InternalSlot(755, PlanetSideGUID(4090), 36, DetailedAmmoBoxData(8, 16)),
InternalSlot(728, PlanetSideGUID(10075), 39, DetailedREKData(CommonFieldData(PlanetSideEmpire.NC, false, false, true, None, false, Some(false), None, PlanetSideGUID(0)), 24))
))
val obj = DetailedPlayerData.apply(pos, app, char, inv, DrawnSlot.None)
val msg = ObjectCreateDetailedMessage(0x79, PlanetSideGUID(75), obj)
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
pkt mustEqual string_ccrider
}
"encode (xRider912)" in {
val pos : PlacementData = PlacementData(
Vector3(3577.1797f, 2712.25f, 35.78125f),
Vector3.z(50.625f),
None
)
val aa : Int=>CharacterAppearanceA = CharacterAppearanceA(
BasicCharacterData(
"xRider912",
PlanetSideEmpire.TR,
CharacterGender.Male,
4,
CharacterVoice.Voice1
),
CommonFieldData(
PlanetSideEmpire.TR,
false,
false,
false,
None,
false,
None,
None,
PlanetSideGUID(0)
),
ExoSuitType.Standard,
0,
1267466L,
3,
3,
0,
0
)
val ab : (Boolean, Int)=>CharacterAppearanceB = CharacterAppearanceB(
16507L,
"Hooked On Insanity",
5,
false,
false,
false,
false,
false,
0, 0,
false,
GrenadeState.None,
false,
false,
false,
false,
false,
None
)
val app : Int=>CharacterAppearanceData = CharacterAppearanceData(
aa, ab,
RibbonBars(
MeritCommendation.EmeraldVeteran,
MeritCommendation.ScavengerTR1,
MeritCommendation.BlackOpsParticipant,
MeritCommendation.SixYearTR
)
)
val ba : DetailedCharacterA = DetailedCharacterA(
1784200L,
53490L,
0L, 0L, 0L,
100, 100,
false,
50,
32831,
100, 100,
None,
0,
6,
1184175,
List(0, 0, 0, 0, 0, 0),
List(
CertificationType.StandardAssault,
CertificationType.MediumAssault,
CertificationType.HeavyAssault,
CertificationType.AntiVehicular,
CertificationType.AirCavalryScout,
CertificationType.StandardExoSuit,
CertificationType.AgileExoSuit,
CertificationType.Medical,
CertificationType.AdvancedMedical,
CertificationType.Hacking,
CertificationType.AdvancedHacking,
CertificationType.Engineering
)
)
val bb : (Long, Option[Int])=>DetailedCharacterB = DetailedCharacterB(
Some(21236),
List(
ImplantEntry(ImplantType.Surge, Some(94), false),
ImplantEntry(ImplantType.Targeting, Some(91), false),
ImplantEntry(ImplantType.DarklightVision, Some(91), false)
),
List(), List(),
List(
"xpe_command_rank_2",
"xpe_join_platoon",
"xpe_battle_rank_20",
"xpe_battle_rank_21",
"xpe_battle_rank_22",
"xpe_form_outfit",
"xpe_blackops",
"xpe_battle_rank_13",
"xpe_battle_rank_12",
"xpe_battle_rank_10",
"xpe_battle_rank_14",
"xpe_battle_rank_15",
"xpe_battle_rank_5",
"xpe_join_squad",
"xpe_form_squad",
"xpe_instant_action",
"xpe_battle_rank_8",
"xpe_battle_rank_11",
"xpe_battle_rank_6",
"xpe_battle_rank_18",
"xpe_battle_rank_19",
"xpe_battle_rank_17",
"xpe_battle_rank_16",
"xpe_join_outfit",
"xpe_battle_rank_9",
"xpe_battle_rank_7",
"xpe_command_rank_1",
"xpe_orbital_shuttle",
"xpe_drop_pod",
"xpe_sanctuary_help",
"xpe_bind_facility",
"xpe_battle_rank_3",
"xpe_battle_rank_2",
"xpe_warp_gate_usage",
"xpe_bind_ams",
"xpe_battle_rank_4",
"xpe_th_nonsanc",
"xpe_th_router",
"xpe_th_flail",
"xpe_th_ant",
"xpe_th_ams",
"xpe_th_ground_p",
"xpe_th_air_p",
"xpe_th_hover",
"xpe_th_ground",
"xpe_th_bfr",
"xpe_th_afterburner",
"xpe_th_air",
"xpe_th_ammo",
"xpe_th_firemodes",
"xpe_th_cloak",
"xpe_th_max",
"used_oicw",
"used_advanced_ace",
"visited_spitfire_turret",
"visited_spitfire_cloaked",
"visited_spitfire_aa",
"visited_tank_traps",
"visited_portable_manned_turret_tr",
"used_chainblade",
"visited_wall_turret",
"visited_ams",
"visited_ant",
"visited_dropship",
"visited_liberator",
"visited_lightgunship",
"visited_lightning",
"visited_prowler",
"visited_quadstealth",
"visited_skyguard",
"visited_threemanheavybuggy",
"visited_two_man_assault_buggy",
"visited_twomanheavybuggy",
"visited_twomanhoverbuggy",
"visited_vanguard",
"visited_flail",
"visited_router",
"visited_battlewagon",
"visited_fury",
"visited_quadassault",
"visited_galaxy_gunship",
"visited_apc_tr",
"visited_lodestar",
"visited_phantasm",
"visited_apc_nc",
"visited_vulture",
"visited_wasp",
"visited_mosquito",
"visited_colossus_flight",
"used_bank",
"visited_resource_silo",
"visited_certification_terminal",
"visited_med_terminal",
"used_nano_dispenser",
"visited_sensor_shield",
"visited_broadcast_warpgate",
"used_phalanx",
"used_phalanx_flakcombo",
"visited_warpgate_small",
"used_flamethrower",
"used_ancient_turret_weapon",
"visited_LLU_socket",
"visited_mediumtransport",
"used_grenade_plasma",
"used_grenade_jammer",
"visited_shield_generator",
"visited_motion_sensor",
"visited_vehicle_crystal",
"used_grenade_frag",
"used_ace",
"visited_adv_med_terminal",
"used_bolt_driver",
"used_cycler",
"used_gauss",
"used_hunterseeker",
"used_isp",
"used_lancer",
"used_lasher",
"used_maelstrom",
"used_phoenix",
"used_pulsar",
"used_punisher",
"used_r_shotgun",
"used_radiator",
"used_rek",
"used_repeater",
"used_rocklet",
"used_striker",
"used_suppressor",
"used_thumper",
"used_trhev_burster",
"used_trhev_dualcycler",
"used_trhev_pounder",
"visited_vanu_control_console",
"visited_capture_terminal",
"used_mini_chaingun",
"used_laze_pointer",
"used_telepad",
"used_spiker",
"used_heavy_sniper",
"used_firebird",
"used_flechette",
"used_heavy_rail_beam",
"visited_generator_terminal",
"visited_locker",
"visited_external_door_lock",
"visited_air_vehicle_terminal",
"visited_galaxy_terminal",
"visited_implant_terminal",
"visited_secondary_capture",
"used_25mm_cannon",
"used_liberator_bombardier",
"visited_repair_silo",
"visited_vanu_module",
"used_flail_weapon",
"visited_respawn_terminal",
"used_energy_gun_tr",
"used_anniversary_guna",
"used_anniversary_gunb",
"used_apc_tr_weapon",
"used_flux_cannon",
"visited_bfr_terminal",
"used_colossus_dual_100mm_cannons",
"used_colossus_tank_cannon",
"used_heavy_grenade_launcher",
"used_35mm_rotarychaingun",
"used_katana",
"used_35mm_cannon",
"used_reaver_weapons",
"used_lightning_weapons",
"used_med_app",
"used_20mm_cannon",
"visited_monolith_forseral",
"used_105mm_cannon",
"used_15mm_chaingun",
"used_rotarychaingun",
"visited_deconstruction_terminal",
"used_skyguard_weapons",
"visited_generator",
"used_trek",
"used_vanguard_weapons",
"visited_ancient_air_vehicle_terminal",
"visited_ancient_equipment_terminal",
"visited_order_terminal",
"visited_ground_vehicle_terminal",
"used_vulture_bombardier",
"used_vulture_nose_cannon",
"used_vulture_tail_cannon",
"used_wasp_weapon_system",
"ugd05",
"ugd04",
"ugd03",
"ugd02",
"ugd01",
"map99",
"map98",
"map97",
"map15",
"map14",
"map12",
"map04",
"map05",
"map03",
"map01",
"map06",
"map02",
"map09",
"map07",
"map10"
),
List(),
0,
0,
0,
0,
0,
None,
List(
9, 16, 17, 69, 107, 108, 114, 115, 134, 171, 178, 196,
199, 222, 229, 283, 297, 347, 360, 391, 399, 421
),
List(),
false,
None
)
val char : Option[Int]=>DetailedCharacterData =
(pad_length : Option[Int]) => DetailedCharacterData(ba, bb(ba.bep, pad_length))(pad_length)
val inv : InventoryData = InventoryData(List(
InternalSlot(730,PlanetSideGUID(3465),0,DetailedWeaponData(CommonFieldData(PlanetSideEmpire.TR,false,false,true,None,false,None,None,PlanetSideGUID(0)),0,List(InternalSlot(28,PlanetSideGUID(3722),0,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,true,None,false,None,None,PlanetSideGUID(0)),20))),false)),
InternalSlot(845,PlanetSideGUID(4929),2,DetailedWeaponData(CommonFieldData(PlanetSideEmpire.TR,false,false,true,None,false,None,None,PlanetSideGUID(0)),0,List(InternalSlot(28,PlanetSideGUID(4736),0,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,true,None,false,None,None,PlanetSideGUID(0)),25))),false)),
InternalSlot(175,PlanetSideGUID(3332),4,DetailedWeaponData(CommonFieldData(PlanetSideEmpire.TR,false,false,true,None,false,None,None,PlanetSideGUID(0)),0,List(InternalSlot(540,PlanetSideGUID(3778),0,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,true,None,false,None,None,PlanetSideGUID(0)),1))),false)),
InternalSlot(456,PlanetSideGUID(5302),5,DetailedLockerContainerData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),Some(InventoryData(List(
InternalSlot(714,PlanetSideGUID(2628),0,DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),0,List(InternalSlot(755,PlanetSideGUID(5819),0,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),16))),false)),
InternalSlot(714,PlanetSideGUID(2433),9,DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),0,List(InternalSlot(755,PlanetSideGUID(3627),0,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),16))),false)),
InternalSlot(714,PlanetSideGUID(3916),18,DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),0,List(InternalSlot(755,PlanetSideGUID(3069),0,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),16))),false)),
InternalSlot(324,PlanetSideGUID(5514),29,DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),0,List(InternalSlot(540,PlanetSideGUID(4940),0,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),1))),false)),
InternalSlot(462,PlanetSideGUID(2669),90,DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),0,List(InternalSlot(463,PlanetSideGUID(2277),0,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),150))),false)),
InternalSlot(462,PlanetSideGUID(5365),99,DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),0,List(InternalSlot(463,PlanetSideGUID(5604),0,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),150))),false)),
InternalSlot(714,PlanetSideGUID(5884),108,DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),0,List(InternalSlot(755,PlanetSideGUID(5765),0,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),16))),false)),
InternalSlot(462,PlanetSideGUID(5137),180,DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),0,List(InternalSlot(463,PlanetSideGUID(3016),0,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),150))),false)),
InternalSlot(462,PlanetSideGUID(4475),189,DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),0,List(InternalSlot(463,PlanetSideGUID(4237),0,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),150))),false)),
InternalSlot(462,PlanetSideGUID(3841),198,DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),0,List(InternalSlot(463,PlanetSideGUID(5485),0,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),150))),false)),
InternalSlot(462,PlanetSideGUID(4075),270,DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),0,List(InternalSlot(463,PlanetSideGUID(4451),0,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),150))),false)),
InternalSlot(462,PlanetSideGUID(4620),279,DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),0,List(InternalSlot(463,PlanetSideGUID(2357),0,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),150))),false)),
InternalSlot(714,PlanetSideGUID(3175),288,DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),0,List(InternalSlot(755,PlanetSideGUID(5363),0,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),16))),false)),
InternalSlot(714,PlanetSideGUID(5391),369,DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),0,List(InternalSlot(755,PlanetSideGUID(2801),0,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),16))),false)),
InternalSlot(714,PlanetSideGUID(4384),378,DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),0,List(InternalSlot(755,PlanetSideGUID(3584),0,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),16))),false)),
InternalSlot(577,PlanetSideGUID(2294),459,DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),0,List(InternalSlot(111,PlanetSideGUID(5454),0,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),78))),false)),
InternalSlot(714,PlanetSideGUID(5111),465,DetailedWeaponData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),0,List(InternalSlot(755,PlanetSideGUID(5068),0,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,false,None,false,None,None,PlanetSideGUID(0)),15))),false))
))))),
InternalSlot(28,PlanetSideGUID(4386),6,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,true,None,false,None,None,PlanetSideGUID(0)),50)),
InternalSlot(28,PlanetSideGUID(3548),9,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,true,None,false,None,None,PlanetSideGUID(0)),50)),
InternalSlot(28,PlanetSideGUID(4103),12,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,true,None,false,None,None,PlanetSideGUID(0)),50)),
InternalSlot(28,PlanetSideGUID(5179),33,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,true,None,false,None,None,PlanetSideGUID(0)),50)),
InternalSlot(29,PlanetSideGUID(3733),36,DetailedAmmoBoxData(CommonFieldData(PlanetSideEmpire.NEUTRAL,false,false,true,None,false,None,None,PlanetSideGUID(0)),50)),
InternalSlot(728,PlanetSideGUID(4731),39,DetailedREKData(CommonFieldData(PlanetSideEmpire.TR,false,false,true,None,false,Some(false),None,PlanetSideGUID(0)),16))
))
val obj = DetailedPlayerData.apply(pos, app, char, inv, DrawnSlot.None)
val msg = ObjectCreateDetailedMessage(0x79, PlanetSideGUID(3390), obj)
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
val pkt_bitv = pkt.toBitVector
val ori_bitv = string_xrider912.toBitVector
pkt_bitv.take(140) mustEqual ori_bitv.take(140) //skip 1; this is the highest bit of PlacementData::Orientation::z
pkt_bitv.drop(141) mustEqual ori_bitv.drop(141)
//TODO work on DetailedCharacterData to make this pass as a single stream
}
}
}