├── .gitignore ├── AuthData_pb2.py ├── ClientConfigData_pb2.py ├── ClientLog_pb2.py ├── ClientMetrics_pb2.py ├── ClientTelemetry_pb2.py ├── Common_pb2.py ├── CustomerServiceData_pb2.py ├── Error_pb2.py ├── GambleData_pb2.py ├── GameplayConfigData_pb2.py ├── GetFriendData_pb2.py ├── LandData_pb2.py ├── MatchmakingData_pb2.py ├── OffersData_pb2.py ├── PurchaseData_pb2.py ├── README.md ├── WholeLandTokenData_pb2.py ├── auth_manager.py ├── config.json ├── requirements.txt ├── templates ├── base.html └── dashboard.html ├── towns └── mytown └── tsto_server.py /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.bak 3 | static/ 4 | dlc/ 5 | certs/ 6 | gameassets/ 7 | towns/ -------------------------------------------------------------------------------- /AuthData_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # NO CHECKED-IN PROTOBUF GENCODE 4 | # source: AuthData.proto 5 | # Protobuf Python Version: 5.28.3 6 | """Generated protocol buffer code.""" 7 | from google.protobuf import descriptor as _descriptor 8 | from google.protobuf import descriptor_pool as _descriptor_pool 9 | from google.protobuf import runtime_version as _runtime_version 10 | from google.protobuf import symbol_database as _symbol_database 11 | from google.protobuf.internal import builder as _builder 12 | _runtime_version.ValidateProtobufRuntimeVersion( 13 | _runtime_version.Domain.PUBLIC, 14 | 5, 15 | 28, 16 | 3, 17 | '', 18 | 'AuthData.proto' 19 | ) 20 | # @@protoc_insertion_point(imports) 21 | 22 | _sym_db = _symbol_database.Default() 23 | 24 | 25 | import Error_pb2 as Error__pb2 26 | 27 | 28 | DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0e\x41uthData.proto\x12\x04\x44\x61ta\x1a\x0b\x45rror.proto\"\\\n\x10UserIndirectData\x12\x13\n\x06userId\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0btelemetryId\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\t\n\x07_userIdB\x0e\n\x0c_telemetryId\"=\n\x11\x41nonymousUserData\x12\x18\n\x0bisAnonymous\x18\x01 \x01(\x08H\x00\x88\x01\x01\x42\x0e\n\x0c_isAnonymous\"c\n\tTokenData\x12\x17\n\nsessionKey\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1b\n\x0e\x65xpirationDate\x18\x02 \x01(\x03H\x01\x88\x01\x01\x42\r\n\x0b_sessionKeyB\x11\n\x0f_expirationDate\"y\n\x14UsersResponseMessage\x12)\n\x04user\x18\x01 \x01(\x0b\x32\x16.Data.UserIndirectDataH\x00\x88\x01\x01\x12#\n\x05token\x18\x02 \x01(\x0b\x32\x0f.Data.TokenDataH\x01\x88\x01\x01\x42\x07\n\x05_userB\x08\n\x06_token\"\x9f\x02\n\x08LinkData\x12\x34\n\nsourceType\x18\x01 \x01(\x0e\x32\x1b.Data.LinkData.identityTypeH\x00\x88\x01\x01\x12\x15\n\x08sourceId\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x39\n\x0f\x64\x65stinationType\x18\x03 \x01(\x0e\x32\x1b.Data.LinkData.identityTypeH\x02\x88\x01\x01\x12\x1a\n\rdestinationId\x18\x04 \x01(\tH\x03\x88\x01\x01\"-\n\x0cidentityType\x12\n\n\x06TNT_ID\x10\x00\x12\x11\n\rNUCLEUS_TOKEN\x10\x01\x42\r\n\x0b_sourceTypeB\x0b\n\t_sourceIdB\x12\n\x10_destinationTypeB\x10\n\x0e_destinationId\"\xbf\x01\n\x17LinkUserResponseMessage\x12\x13\n\x06userId\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x17\n\nexternalId\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0c\x65xternalType\x18\x03 \x01(\tH\x02\x88\x01\x01\x12&\n\x05\x65rror\x18\x04 \x01(\x0b\x32\x12.Data.ErrorMessageH\x03\x88\x01\x01\x42\t\n\x07_userIdB\r\n\x0b_externalIdB\x0f\n\r_externalTypeB\x08\n\x06_error\"m\n\x19\x44\x65leteUserResponseMessage\x12\x13\n\x06userId\x18\x01 \x01(\tH\x00\x88\x01\x01\x12&\n\x05\x65rror\x18\x02 \x01(\x0b\x32\x12.Data.ErrorMessageH\x01\x88\x01\x01\x42\t\n\x07_userIdB\x08\n\x06_errorB!\n\x1f\x63om.eamobile.mayhem.plugin.datab\x06proto3') 29 | 30 | _globals = globals() 31 | _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) 32 | _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'AuthData_pb2', _globals) 33 | if not _descriptor._USE_C_DESCRIPTORS: 34 | _globals['DESCRIPTOR']._loaded_options = None 35 | _globals['DESCRIPTOR']._serialized_options = b'\n\037com.eamobile.mayhem.plugin.data' 36 | _globals['_USERINDIRECTDATA']._serialized_start=37 37 | _globals['_USERINDIRECTDATA']._serialized_end=129 38 | _globals['_ANONYMOUSUSERDATA']._serialized_start=131 39 | _globals['_ANONYMOUSUSERDATA']._serialized_end=192 40 | _globals['_TOKENDATA']._serialized_start=194 41 | _globals['_TOKENDATA']._serialized_end=293 42 | _globals['_USERSRESPONSEMESSAGE']._serialized_start=295 43 | _globals['_USERSRESPONSEMESSAGE']._serialized_end=416 44 | _globals['_LINKDATA']._serialized_start=419 45 | _globals['_LINKDATA']._serialized_end=706 46 | _globals['_LINKDATA_IDENTITYTYPE']._serialized_start=595 47 | _globals['_LINKDATA_IDENTITYTYPE']._serialized_end=640 48 | _globals['_LINKUSERRESPONSEMESSAGE']._serialized_start=709 49 | _globals['_LINKUSERRESPONSEMESSAGE']._serialized_end=900 50 | _globals['_DELETEUSERRESPONSEMESSAGE']._serialized_start=902 51 | _globals['_DELETEUSERRESPONSEMESSAGE']._serialized_end=1011 52 | # @@protoc_insertion_point(module_scope) 53 | -------------------------------------------------------------------------------- /ClientConfigData_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # NO CHECKED-IN PROTOBUF GENCODE 4 | # source: ClientConfigData.proto 5 | # Protobuf Python Version: 5.28.3 6 | """Generated protocol buffer code.""" 7 | from google.protobuf import descriptor as _descriptor 8 | from google.protobuf import descriptor_pool as _descriptor_pool 9 | from google.protobuf import runtime_version as _runtime_version 10 | from google.protobuf import symbol_database as _symbol_database 11 | from google.protobuf.internal import builder as _builder 12 | _runtime_version.ValidateProtobufRuntimeVersion( 13 | _runtime_version.Domain.PUBLIC, 14 | 5, 15 | 28, 16 | 3, 17 | '', 18 | 'ClientConfigData.proto' 19 | ) 20 | # @@protoc_insertion_point(imports) 21 | 22 | _sym_db = _symbol_database.Default() 23 | 24 | 25 | 26 | 27 | DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x43lientConfigData.proto\x12\x04\x44\x61ta\"\xd0\x01\n\x14\x43lientConfigResponse\x12:\n\x05items\x18\x02 \x03(\x0b\x32+.Data.ClientConfigResponse.ClientConfigItem\x1a|\n\x10\x43lientConfigItem\x12\x1b\n\x0e\x63lientConfigId\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x11\n\x04name\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05value\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\x11\n\x0f_clientConfigIdB\x07\n\x05_nameB\x08\n\x06_valueB\x16\n\x14\x63om.ea.simpsons.datab\x06proto3') 28 | 29 | _globals = globals() 30 | _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) 31 | _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ClientConfigData_pb2', _globals) 32 | if not _descriptor._USE_C_DESCRIPTORS: 33 | _globals['DESCRIPTOR']._loaded_options = None 34 | _globals['DESCRIPTOR']._serialized_options = b'\n\024com.ea.simpsons.data' 35 | _globals['_CLIENTCONFIGRESPONSE']._serialized_start=33 36 | _globals['_CLIENTCONFIGRESPONSE']._serialized_end=241 37 | _globals['_CLIENTCONFIGRESPONSE_CLIENTCONFIGITEM']._serialized_start=117 38 | _globals['_CLIENTCONFIGRESPONSE_CLIENTCONFIGITEM']._serialized_end=241 39 | # @@protoc_insertion_point(module_scope) 40 | -------------------------------------------------------------------------------- /ClientLog_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # NO CHECKED-IN PROTOBUF GENCODE 4 | # source: ClientLog.proto 5 | # Protobuf Python Version: 5.28.3 6 | """Generated protocol buffer code.""" 7 | from google.protobuf import descriptor as _descriptor 8 | from google.protobuf import descriptor_pool as _descriptor_pool 9 | from google.protobuf import runtime_version as _runtime_version 10 | from google.protobuf import symbol_database as _symbol_database 11 | from google.protobuf.internal import builder as _builder 12 | _runtime_version.ValidateProtobufRuntimeVersion( 13 | _runtime_version.Domain.PUBLIC, 14 | 5, 15 | 28, 16 | 3, 17 | '', 18 | 'ClientLog.proto' 19 | ) 20 | # @@protoc_insertion_point(imports) 21 | 22 | _sym_db = _symbol_database.Default() 23 | 24 | 25 | 26 | 27 | DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0f\x43lientLog.proto\x12\x1a\x63om.ea.simpsons.client.log\"\xb3\x06\n\x10\x43lientLogMessage\x12\x12\n\ntime_stamp\x18\x01 \x01(\x03\x12G\n\x08severity\x18\x02 \x01(\x0e\x32\x35.com.ea.simpsons.client.log.ClientLogMessage.Severity\x12\x0e\n\x06source\x18\x03 \x01(\t\x12\x0c\n\x04text\x18\x04 \x01(\t\x12\x13\n\x06userId\x18\x05 \x01(\tH\x00\x88\x01\x01\x12X\n\x0e\x63onnectionType\x18\x06 \x01(\x0e\x32;.com.ea.simpsons.client.log.ClientLogMessage.ConnectionTypeH\x01\x88\x01\x01\x12\x62\n\x0fserverLogFields\x18\x07 \x01(\x0b\x32\x44.com.ea.simpsons.client.log.ClientLogMessage.ServerProvidedLogFieldsH\x02\x88\x01\x01\x1a\xc7\x02\n\x17ServerProvidedLogFields\x12&\n\x19server_received_timestamp\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12&\n\x19server_received_datestamp\x18\x02 \x01(\tH\x01\x88\x01\x01\x12)\n\x1cserver_received_country_code\x18\x03 \x01(\tH\x02\x88\x01\x01\x12.\n!server_received_clientSessionGUID\x18\x04 \x01(\tH\x03\x88\x01\x01\x42\x1c\n\x1a_server_received_timestampB\x1c\n\x1a_server_received_datestampB\x1f\n\x1d_server_received_country_codeB$\n\"_server_received_clientSessionGUID\" \n\x08Severity\x12\x08\n\x04WARN\x10\x00\x12\n\n\x06SEVERE\x10\x01\"3\n\x0e\x43onnectionType\x12\x08\n\x04WIFI\x10\x00\x12\n\n\x06MOBILE\x10\x01\x12\x0b\n\x07UNKNOWN\x10\x02\x42\t\n\x07_userIdB\x11\n\x0f_connectionTypeB\x12\n\x10_serverLogFieldsB!\n\x14\x63om.ea.simpsons.dataB\tClientLogb\x06proto3') 28 | 29 | _globals = globals() 30 | _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) 31 | _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ClientLog_pb2', _globals) 32 | if not _descriptor._USE_C_DESCRIPTORS: 33 | _globals['DESCRIPTOR']._loaded_options = None 34 | _globals['DESCRIPTOR']._serialized_options = b'\n\024com.ea.simpsons.dataB\tClientLog' 35 | _globals['_CLIENTLOGMESSAGE']._serialized_start=48 36 | _globals['_CLIENTLOGMESSAGE']._serialized_end=867 37 | _globals['_CLIENTLOGMESSAGE_SERVERPROVIDEDLOGFIELDS']._serialized_start=403 38 | _globals['_CLIENTLOGMESSAGE_SERVERPROVIDEDLOGFIELDS']._serialized_end=730 39 | _globals['_CLIENTLOGMESSAGE_SEVERITY']._serialized_start=732 40 | _globals['_CLIENTLOGMESSAGE_SEVERITY']._serialized_end=764 41 | _globals['_CLIENTLOGMESSAGE_CONNECTIONTYPE']._serialized_start=766 42 | _globals['_CLIENTLOGMESSAGE_CONNECTIONTYPE']._serialized_end=817 43 | # @@protoc_insertion_point(module_scope) 44 | -------------------------------------------------------------------------------- /ClientMetrics_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # NO CHECKED-IN PROTOBUF GENCODE 4 | # source: ClientMetrics.proto 5 | # Protobuf Python Version: 5.28.3 6 | """Generated protocol buffer code.""" 7 | from google.protobuf import descriptor as _descriptor 8 | from google.protobuf import descriptor_pool as _descriptor_pool 9 | from google.protobuf import runtime_version as _runtime_version 10 | from google.protobuf import symbol_database as _symbol_database 11 | from google.protobuf.internal import builder as _builder 12 | _runtime_version.ValidateProtobufRuntimeVersion( 13 | _runtime_version.Domain.PUBLIC, 14 | 5, 15 | 28, 16 | 3, 17 | '', 18 | 'ClientMetrics.proto' 19 | ) 20 | # @@protoc_insertion_point(imports) 21 | 22 | _sym_db = _symbol_database.Default() 23 | 24 | 25 | 26 | 27 | DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13\x43lientMetrics.proto\x12\x1e\x63om.ea.simpsons.client.metrics\"\xa0\x01\n\x14\x43lientMetricsMessage\x12G\n\x04type\x18\x01 \x01(\x0e\x32\x39.com.ea.simpsons.client.metrics.ClientMetricsMessage.Type\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\r\n\x05value\x18\x03 \x01(\x03\"\"\n\x04Type\x12\x0b\n\x07\x43OUNTER\x10\x00\x12\r\n\tHISTOGRAM\x10\x01\x42%\n\x14\x63om.ea.simpsons.dataB\rClientMetricsb\x06proto3') 28 | 29 | _globals = globals() 30 | _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) 31 | _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ClientMetrics_pb2', _globals) 32 | if not _descriptor._USE_C_DESCRIPTORS: 33 | _globals['DESCRIPTOR']._loaded_options = None 34 | _globals['DESCRIPTOR']._serialized_options = b'\n\024com.ea.simpsons.dataB\rClientMetrics' 35 | _globals['_CLIENTMETRICSMESSAGE']._serialized_start=56 36 | _globals['_CLIENTMETRICSMESSAGE']._serialized_end=216 37 | _globals['_CLIENTMETRICSMESSAGE_TYPE']._serialized_start=182 38 | _globals['_CLIENTMETRICSMESSAGE_TYPE']._serialized_end=216 39 | # @@protoc_insertion_point(module_scope) 40 | -------------------------------------------------------------------------------- /ClientTelemetry_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # NO CHECKED-IN PROTOBUF GENCODE 4 | # source: ClientTelemetry.proto 5 | # Protobuf Python Version: 5.28.3 6 | """Generated protocol buffer code.""" 7 | from google.protobuf import descriptor as _descriptor 8 | from google.protobuf import descriptor_pool as _descriptor_pool 9 | from google.protobuf import runtime_version as _runtime_version 10 | from google.protobuf import symbol_database as _symbol_database 11 | from google.protobuf.internal import builder as _builder 12 | _runtime_version.ValidateProtobufRuntimeVersion( 13 | _runtime_version.Domain.PUBLIC, 14 | 5, 15 | 28, 16 | 3, 17 | '', 18 | 'ClientTelemetry.proto' 19 | ) 20 | # @@protoc_insertion_point(imports) 21 | 22 | _sym_db = _symbol_database.Default() 23 | 24 | 25 | import PurchaseData_pb2 as PurchaseData__pb2 26 | 27 | 28 | DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x43lientTelemetry.proto\x12 com.ea.simpsons.client.telemetry\x1a\x12PurchaseData.proto\"\xdc\x10\n\x16\x43lientTelemetryMessage\x12q\n\x17\x63lientProvidedTelemetry\x18\x01 \x01(\x0b\x32P.com.ea.simpsons.client.telemetry.ClientTelemetryMessage.ClientProvidedTelemetry\x12q\n\x17serverProvidedTelemetry\x18\x02 \x01(\x0b\x32P.com.ea.simpsons.client.telemetry.ClientTelemetryMessage.ServerProvidedTelemetry\x12r\n\x17nimbleProvidedTelemetry\x18\x03 \x03(\x0b\x32Q.com.ea.simpsons.client.telemetry.ClientTelemetryMessage.NimbleExtractedTelemetry\x1a\x8e\x0b\n\x17\x43lientProvidedTelemetry\x12\x11\n\ttimeStamp\x18\x01 \x01(\x03\x12\x0e\n\x06userId\x18\x02 \x01(\t\x12V\n\x11\x63lientTelemetryId\x18\x03 \x01(\x0b\x32;.com.ea.simpsons.client.telemetry.ClientTelemetryIdentifier\x12\x0f\n\x07\x66ps_min\x18\x04 \x01(\x02\x12\x0f\n\x07\x66ps_max\x18\x05 \x01(\x02\x12\x13\n\x0b\x66ps_average\x18\x06 \x01(\x02\x12Q\n\x10\x61pplicationGUIDs\x18\x07 \x03(\x0b\x32\x37.com.ea.simpsons.client.telemetry.ClientApplicationGUID\x12\x1d\n\x15sessionStartTimestamp\x18\x08 \x01(\x03\x12I\n\x0euserAccountIds\x18\t \x03(\x0b\x32\x31.com.ea.simpsons.client.telemetry.ClientAccountId\x12N\n\x11sharedSessionGUID\x18\n \x01(\x0b\x32\x33.com.ea.simpsons.client.telemetry.SharedSessionGUID\x12\x1c\n\x14touchesDuringSession\x18\x0b \x01(\x03\x12y\n\x14totalAvailableMemory\x18\x0c \x01(\x0b\x32[.com.ea.simpsons.client.telemetry.ClientTelemetryMessage.ClientProvidedTelemetry.MemoryStat\x12o\n\nfreeMemory\x18\r \x01(\x0b\x32[.com.ea.simpsons.client.telemetry.ClientTelemetryMessage.ClientProvidedTelemetry.MemoryStat\x12o\n\nusedMemory\x18\x0e \x01(\x0b\x32[.com.ea.simpsons.client.telemetry.ClientTelemetryMessage.ClientProvidedTelemetry.MemoryStat\x12\x16\n\x0ephysicalMemory\x18\x0f \x01(\x03\x12\x12\n\nuserMemory\x18\x10 \x01(\x03\x12#\n\x1bsessionMismatchAskDisplayed\x18\x11 \x01(\x03\x12\'\n\x1fsessionMismatchConfirmDisplayed\x18\x12 \x01(\x03\x12&\n\x1esessionMismatchConfirmAccepted\x18\x13 \x01(\x03\x12i\n\x07\x64lcInfo\x18\x14 \x01(\x0b\x32X.com.ea.simpsons.client.telemetry.ClientTelemetryMessage.ClientProvidedTelemetry.DlcInfo\x1a\x37\n\nMemoryStat\x12\x0b\n\x03min\x18\x01 \x01(\x03\x12\x0b\n\x03max\x18\x02 \x01(\x03\x12\x0f\n\x07\x61verage\x18\x03 \x01(\x02\x1a\xf2\x01\n\x07\x44lcInfo\x12!\n\x19numPackageCrcChecksFailed\x18\x01 \x01(\r\x12&\n\x1enumPackageDsaSignaturesInvalid\x18\x02 \x01(\r\x12\x1d\n\x15numPackagesToDownload\x18\x03 \x01(\r\x12\x19\n\x11\x61ssetTierTargeted\x18\x04 \x01(\r\x12\x16\n\x0esizeExpectedKB\x18\x05 \x01(\x04\x12\x18\n\x10sizeDownloadedKB\x18\x06 \x01(\x04\x12\x1b\n\x13\x64ownloadTimeSeconds\x18\x07 \x01(\x02\x12\x13\n\x0b\x64ownloadUrl\x18\x08 \x01(\t\x1a\xa1\x02\n\x17ServerProvidedTelemetry\x12\x17\n\x0fmillisTimeStamp\x18\x01 \x01(\x03\x12\x12\n\nauthUserId\x18\x02 \x01(\t\x12\x17\n\x0f\x62gClientVersion\x18\x03 \x01(\t\x12\x17\n\x0fmhClientVersion\x18\x04 \x01(\t\x12\x16\n\x0e\x63lientPlatform\x18\x05 \x01(\t\x12V\n\x11serverTelemetryId\x18\x06 \x01(\x0b\x32;.com.ea.simpsons.client.telemetry.ServerTelemetryIdentifier\x12 \n\x18\x63lientRequestCountryCode\x18\x07 \x01(\t\x12\x15\n\rdlcHashHeader\x18\x08 \x01(\t\x1a\x33\n\x18NimbleExtractedTelemetry\x12\x17\n\x0fnimbleSessionId\x18\x01 \x01(\t\"\'\n\x19\x43lientTelemetryIdentifier\x12\n\n\x02id\x18\x01 \x01(\t\"\'\n\x19ServerTelemetryIdentifier\x12\n\n\x02id\x18\x01 \x01(\t\"I\n\x15\x43lientApplicationGUID\x12$\n\x0c\x64\x65viceIdType\x18\x01 \x01(\x0e\x32\x0e.Data.DeviceId\x12\n\n\x02id\x18\x02 \x01(\t\"f\n\x0f\x43lientAccountId\x12\x42\n\x06idType\x18\x01 \x01(\x0e\x32\x32.com.ea.simpsons.client.telemetry.ServiceAccountId\x12\x0f\n\x07idValue\x18\x02 \x01(\t\"\xbd\x01\n\x11SharedSessionGUID\x12P\n\x12sessionMessageType\x18\x01 \x01(\x0e\x32\x34.com.ea.simpsons.client.telemetry.SessionMessageType\x12V\n\x11sessionIdentifier\x18\x02 \x01(\x0b\x32;.com.ea.simpsons.client.telemetry.ClientTelemetryIdentifier*c\n\x10ServiceAccountId\x12\x12\n\x0eLAND_MAYHEM_ID\x10\x01\x12\n\n\x06TNT_ID\x10\x02\x12\x0e\n\nSYNERGY_ID\x10\x03\x12\x0e\n\nNUCLEUS_ID\x10\x04\x12\x0f\n\x0b\x46\x41\x43\x45\x42OOK_ID\x10\x05*:\n\x12SessionMessageType\x12\x10\n\x0c\x44\x45\x46\x41ULT_NONE\x10\x01\x12\t\n\x05START\x10\x02\x12\x07\n\x03\x45ND\x10\x03\x42\'\n\x14\x63om.ea.simpsons.dataB\x0f\x43lientTelemetry') 29 | 30 | _globals = globals() 31 | _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) 32 | _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ClientTelemetry_pb2', _globals) 33 | if not _descriptor._USE_C_DESCRIPTORS: 34 | _globals['DESCRIPTOR']._loaded_options = None 35 | _globals['DESCRIPTOR']._serialized_options = b'\n\024com.ea.simpsons.dataB\017ClientTelemetry' 36 | _globals['_SERVICEACCOUNTID']._serialized_start=2675 37 | _globals['_SERVICEACCOUNTID']._serialized_end=2774 38 | _globals['_SESSIONMESSAGETYPE']._serialized_start=2776 39 | _globals['_SESSIONMESSAGETYPE']._serialized_end=2834 40 | _globals['_CLIENTTELEMETRYMESSAGE']._serialized_start=80 41 | _globals['_CLIENTTELEMETRYMESSAGE']._serialized_end=2220 42 | _globals['_CLIENTTELEMETRYMESSAGE_CLIENTPROVIDEDTELEMETRY']._serialized_start=453 43 | _globals['_CLIENTTELEMETRYMESSAGE_CLIENTPROVIDEDTELEMETRY']._serialized_end=1875 44 | _globals['_CLIENTTELEMETRYMESSAGE_CLIENTPROVIDEDTELEMETRY_MEMORYSTAT']._serialized_start=1575 45 | _globals['_CLIENTTELEMETRYMESSAGE_CLIENTPROVIDEDTELEMETRY_MEMORYSTAT']._serialized_end=1630 46 | _globals['_CLIENTTELEMETRYMESSAGE_CLIENTPROVIDEDTELEMETRY_DLCINFO']._serialized_start=1633 47 | _globals['_CLIENTTELEMETRYMESSAGE_CLIENTPROVIDEDTELEMETRY_DLCINFO']._serialized_end=1875 48 | _globals['_CLIENTTELEMETRYMESSAGE_SERVERPROVIDEDTELEMETRY']._serialized_start=1878 49 | _globals['_CLIENTTELEMETRYMESSAGE_SERVERPROVIDEDTELEMETRY']._serialized_end=2167 50 | _globals['_CLIENTTELEMETRYMESSAGE_NIMBLEEXTRACTEDTELEMETRY']._serialized_start=2169 51 | _globals['_CLIENTTELEMETRYMESSAGE_NIMBLEEXTRACTEDTELEMETRY']._serialized_end=2220 52 | _globals['_CLIENTTELEMETRYIDENTIFIER']._serialized_start=2222 53 | _globals['_CLIENTTELEMETRYIDENTIFIER']._serialized_end=2261 54 | _globals['_SERVERTELEMETRYIDENTIFIER']._serialized_start=2263 55 | _globals['_SERVERTELEMETRYIDENTIFIER']._serialized_end=2302 56 | _globals['_CLIENTAPPLICATIONGUID']._serialized_start=2304 57 | _globals['_CLIENTAPPLICATIONGUID']._serialized_end=2377 58 | _globals['_CLIENTACCOUNTID']._serialized_start=2379 59 | _globals['_CLIENTACCOUNTID']._serialized_end=2481 60 | _globals['_SHAREDSESSIONGUID']._serialized_start=2484 61 | _globals['_SHAREDSESSIONGUID']._serialized_end=2673 62 | # @@protoc_insertion_point(module_scope) 63 | -------------------------------------------------------------------------------- /Common_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # NO CHECKED-IN PROTOBUF GENCODE 4 | # source: Common.proto 5 | # Protobuf Python Version: 5.28.3 6 | """Generated protocol buffer code.""" 7 | from google.protobuf import descriptor as _descriptor 8 | from google.protobuf import descriptor_pool as _descriptor_pool 9 | from google.protobuf import runtime_version as _runtime_version 10 | from google.protobuf import symbol_database as _symbol_database 11 | from google.protobuf.internal import builder as _builder 12 | _runtime_version.ValidateProtobufRuntimeVersion( 13 | _runtime_version.Domain.PUBLIC, 14 | 5, 15 | 28, 16 | 3, 17 | '', 18 | 'Common.proto' 19 | ) 20 | # @@protoc_insertion_point(imports) 21 | 22 | _sym_db = _symbol_database.Default() 23 | 24 | 25 | 26 | 27 | DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x43ommon.proto\x12\x04\x44\x61ta\"E\n\tNameValue\x12\x11\n\x04name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05value\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x07\n\x05_nameB\x08\n\x06_value\"5\n\x0cNameValueSet\x12%\n\x0cnameValueSet\x18\x01 \x03(\x0b\x32\x0f.Data.NameValueB\x16\n\x14\x63om.ea.simpsons.datab\x06proto3') 28 | 29 | _globals = globals() 30 | _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) 31 | _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'Common_pb2', _globals) 32 | if not _descriptor._USE_C_DESCRIPTORS: 33 | _globals['DESCRIPTOR']._loaded_options = None 34 | _globals['DESCRIPTOR']._serialized_options = b'\n\024com.ea.simpsons.data' 35 | _globals['_NAMEVALUE']._serialized_start=22 36 | _globals['_NAMEVALUE']._serialized_end=91 37 | _globals['_NAMEVALUESET']._serialized_start=93 38 | _globals['_NAMEVALUESET']._serialized_end=146 39 | # @@protoc_insertion_point(module_scope) 40 | -------------------------------------------------------------------------------- /CustomerServiceData_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # NO CHECKED-IN PROTOBUF GENCODE 4 | # source: CustomerServiceData.proto 5 | # Protobuf Python Version: 5.28.3 6 | """Generated protocol buffer code.""" 7 | from google.protobuf import descriptor as _descriptor 8 | from google.protobuf import descriptor_pool as _descriptor_pool 9 | from google.protobuf import runtime_version as _runtime_version 10 | from google.protobuf import symbol_database as _symbol_database 11 | from google.protobuf.internal import builder as _builder 12 | _runtime_version.ValidateProtobufRuntimeVersion( 13 | _runtime_version.Domain.PUBLIC, 14 | 5, 15 | 28, 16 | 3, 17 | '', 18 | 'CustomerServiceData.proto' 19 | ) 20 | # @@protoc_insertion_point(imports) 21 | 22 | _sym_db = _symbol_database.Default() 23 | 24 | 25 | import PurchaseData_pb2 as PurchaseData__pb2 26 | import LandData_pb2 as LandData__pb2 27 | import Error_pb2 as Error__pb2 28 | import WholeLandTokenData_pb2 as WholeLandTokenData__pb2 29 | 30 | 31 | DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x43ustomerServiceData.proto\x12\x04\x44\x61ta\x1a\x12PurchaseData.proto\x1a\x0eLandData.proto\x1a\x0b\x45rror.proto\x1a\x18WholeLandTokenData.proto\"U\n\rPlayerSession\x12\x14\n\x07ownerId\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08hostname\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\n\n\x08_ownerIdB\x0b\n\t_hostname\"\xad\x01\n\x13LandResponseMessage\x12$\n\x04land\x18\x01 \x01(\x0b\x32\x11.Data.LandMessageH\x00\x88\x01\x01\x12)\n\x07session\x18\x02 \x01(\x0b\x32\x13.Data.PlayerSessionH\x01\x88\x01\x01\x12&\n\x05\x65rror\x18\x03 \x01(\x0b\x32\x12.Data.ErrorMessageH\x02\x88\x01\x01\x42\x07\n\x05_landB\n\n\x08_sessionB\x08\n\x06_error\"\x83\x01\n\x17\x43urrencyResponseMessage\x12)\n\x08\x63urrency\x18\x01 \x01(\x0b\x32\x12.Data.CurrencyDataH\x00\x88\x01\x01\x12&\n\x05\x65rror\x18\x02 \x01(\x0b\x32\x12.Data.ErrorMessageH\x01\x88\x01\x01\x42\x0b\n\t_currencyB\x08\n\x06_error\"\x8f\x02\n\x13UserResponseMessage\x12\x13\n\x06gameId\x18\x01 \x01(\tH\x00\x88\x01\x01\x12@\n\x0ereverseMapping\x18\x02 \x03(\x0b\x32(.Data.UserResponseMessage.ReverseMapping\x12&\n\x05\x65rror\x18\x03 \x01(\x0b\x32\x12.Data.ErrorMessageH\x01\x88\x01\x01\x1a\x64\n\x0eReverseMapping\x12\x17\n\nexternalId\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0c\x65xternalType\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\r\n\x0b_externalIdB\x0f\n\r_externalTypeB\t\n\x07_gameIdB\x08\n\x06_error\"\xe6\x01\n\x19LandBackupResponseMessage\x12>\n\nlandBackup\x18\x01 \x03(\x0b\x32*.Data.LandBackupResponseMessage.LandBackup\x12&\n\x05\x65rror\x18\x02 \x01(\x0b\x32\x12.Data.ErrorMessageH\x00\x88\x01\x01\x1aW\n\nLandBackup\x12\x11\n\x04\x64\x61te\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12$\n\x04land\x18\x02 \x01(\x0b\x32\x11.Data.LandMessageH\x01\x88\x01\x01\x42\x07\n\x05_dateB\x07\n\x05_landB\x08\n\x06_error\"\x9d\x01\n\x1dWholeLandTokenResponseMessage\x12\x38\n\rtokenResponse\x18\x01 \x01(\x0b\x32\x1c.Data.WholeLandTokenResponseH\x00\x88\x01\x01\x12&\n\x05\x65rror\x18\x02 \x01(\x0b\x32\x12.Data.ErrorMessageH\x01\x88\x01\x01\x42\x10\n\x0e_tokenResponseB\x08\n\x06_errorB&\n$com.ea.simpsons.customerservice.datab\x06proto3') 32 | 33 | _globals = globals() 34 | _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) 35 | _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'CustomerServiceData_pb2', _globals) 36 | if not _descriptor._USE_C_DESCRIPTORS: 37 | _globals['DESCRIPTOR']._loaded_options = None 38 | _globals['DESCRIPTOR']._serialized_options = b'\n$com.ea.simpsons.customerservice.data' 39 | _globals['_PLAYERSESSION']._serialized_start=110 40 | _globals['_PLAYERSESSION']._serialized_end=195 41 | _globals['_LANDRESPONSEMESSAGE']._serialized_start=198 42 | _globals['_LANDRESPONSEMESSAGE']._serialized_end=371 43 | _globals['_CURRENCYRESPONSEMESSAGE']._serialized_start=374 44 | _globals['_CURRENCYRESPONSEMESSAGE']._serialized_end=505 45 | _globals['_USERRESPONSEMESSAGE']._serialized_start=508 46 | _globals['_USERRESPONSEMESSAGE']._serialized_end=779 47 | _globals['_USERRESPONSEMESSAGE_REVERSEMAPPING']._serialized_start=658 48 | _globals['_USERRESPONSEMESSAGE_REVERSEMAPPING']._serialized_end=758 49 | _globals['_LANDBACKUPRESPONSEMESSAGE']._serialized_start=782 50 | _globals['_LANDBACKUPRESPONSEMESSAGE']._serialized_end=1012 51 | _globals['_LANDBACKUPRESPONSEMESSAGE_LANDBACKUP']._serialized_start=915 52 | _globals['_LANDBACKUPRESPONSEMESSAGE_LANDBACKUP']._serialized_end=1002 53 | _globals['_WHOLELANDTOKENRESPONSEMESSAGE']._serialized_start=1015 54 | _globals['_WHOLELANDTOKENRESPONSEMESSAGE']._serialized_end=1172 55 | # @@protoc_insertion_point(module_scope) 56 | -------------------------------------------------------------------------------- /Error_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # NO CHECKED-IN PROTOBUF GENCODE 4 | # source: Error.proto 5 | # Protobuf Python Version: 5.28.3 6 | """Generated protocol buffer code.""" 7 | from google.protobuf import descriptor as _descriptor 8 | from google.protobuf import descriptor_pool as _descriptor_pool 9 | from google.protobuf import runtime_version as _runtime_version 10 | from google.protobuf import symbol_database as _symbol_database 11 | from google.protobuf.internal import builder as _builder 12 | _runtime_version.ValidateProtobufRuntimeVersion( 13 | _runtime_version.Domain.PUBLIC, 14 | 5, 15 | 28, 16 | 3, 17 | '', 18 | 'Error.proto' 19 | ) 20 | # @@protoc_insertion_point(imports) 21 | 22 | _sym_db = _symbol_database.Default() 23 | 24 | 25 | 26 | 27 | DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0b\x45rror.proto\x12\x04\x44\x61ta\"\xae\x07\n\x0c\x45rrorMessage\x12%\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x17.Data.ErrorMessage.Code\x12%\n\x04type\x18\x02 \x01(\x0e\x32\x17.Data.ErrorMessage.Type\x12\r\n\x05\x66ield\x18\x03 \x01(\t\x12-\n\x08severity\x18\x04 \x01(\x0e\x32\x1b.Data.ErrorMessage.Severity\x12\x0f\n\x07message\x18\x05 \x01(\t\"\xc9\x01\n\x04\x43ode\x12\x10\n\x0cUNKNOWN_CODE\x10\x01\x12\x11\n\x0cUNAUTHORIZED\x10\x91\x03\x12\x0e\n\tNOT_FOUND\x10\x94\x03\x12\r\n\x08\x43ONFLICT\x10\x99\x03\x12\x1a\n\x15INTERNAL_SERVER_ERROR\x10\xf4\x03\x12\x14\n\x0fNOT_IMPLEMENTED\x10\xf5\x03\x12\x18\n\x13SERVICE_UNAVAILABLE\x10\xf7\x03\x12\x1f\n\x1aHTTP_VERSION_NOT_SUPPORTED\x10\xf9\x03\x12\x10\n\x0b\x42\x41\x44_REQUEST\x10\x90\x03\"\xd5\x03\n\x04Type\x12\x11\n\rUNKNOWN_ERROR\x10\x01\x12\x18\n\x14\x41UTHENTICATION_ERROR\x10\x02\x12\x12\n\x0eNO_SUCH_METHOD\x10\x03\x12\x14\n\x10NO_SUCH_RESOURCE\x10\x04\x12\x11\n\rMISSING_VALUE\x10\x05\x12\x11\n\rINVALID_VALUE\x10\x06\x12\x13\n\x0fVALUE_TOO_SMALL\x10\x07\x12\x13\n\x0fVALUE_TOO_LARGE\x10\x08\x12\x1b\n\x17RESOURCE_ALREADY_EXISTS\x10\t\x12\x1b\n\x17METHOD_CALLED_TOO_OFTEN\x10\x17\x12\x1d\n\x19INVALID_PARAMETERS_FORMAT\x10\x18\x12&\n\"LOCK_REQUEST_FAILED_DUE_TO_TIMEOUT\x10\x1a\x12\x15\n\x11PROTOCOL_MISMATCH\x10\x1c\x12\x12\n\x0e\x44\x41TABASE_ERROR\x10\x1d\x12\x1c\n\x18SERVICE_UNAVAILABLE_TYPE\x10\x1e\x12\x18\n\x14NOT_IMPLEMENTED_TYPE\x10\x1f\x12\x10\n\x0cSERVER_ERROR\x10 \x12\x1b\n\x17SHARD_UNDER_MAINTENANCE\x10\"\x12\x13\n\x0fPLUGIN_INACTIVE\x10#\"]\n\x08Severity\x12\x0f\n\x0bLEVEL_DEBUG\x10\x00\x12\x0e\n\nLEVEL_INFO\x10\x01\x12\x0e\n\nLEVEL_WARN\x10\x02\x12\x0f\n\x0bLEVEL_ERROR\x10\x03\x12\x0f\n\x0bLEVEL_FATAL\x10\x04\x42\x16\n\x14\x63om.ea.simpsons.data') 28 | 29 | _globals = globals() 30 | _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) 31 | _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'Error_pb2', _globals) 32 | if not _descriptor._USE_C_DESCRIPTORS: 33 | _globals['DESCRIPTOR']._loaded_options = None 34 | _globals['DESCRIPTOR']._serialized_options = b'\n\024com.ea.simpsons.data' 35 | _globals['_ERRORMESSAGE']._serialized_start=22 36 | _globals['_ERRORMESSAGE']._serialized_end=964 37 | _globals['_ERRORMESSAGE_CODE']._serialized_start=196 38 | _globals['_ERRORMESSAGE_CODE']._serialized_end=397 39 | _globals['_ERRORMESSAGE_TYPE']._serialized_start=400 40 | _globals['_ERRORMESSAGE_TYPE']._serialized_end=869 41 | _globals['_ERRORMESSAGE_SEVERITY']._serialized_start=871 42 | _globals['_ERRORMESSAGE_SEVERITY']._serialized_end=964 43 | # @@protoc_insertion_point(module_scope) 44 | -------------------------------------------------------------------------------- /GambleData_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # NO CHECKED-IN PROTOBUF GENCODE 4 | # source: GambleData.proto 5 | # Protobuf Python Version: 5.28.3 6 | """Generated protocol buffer code.""" 7 | from google.protobuf import descriptor as _descriptor 8 | from google.protobuf import descriptor_pool as _descriptor_pool 9 | from google.protobuf import runtime_version as _runtime_version 10 | from google.protobuf import symbol_database as _symbol_database 11 | from google.protobuf.internal import builder as _builder 12 | _runtime_version.ValidateProtobufRuntimeVersion( 13 | _runtime_version.Domain.PUBLIC, 14 | 5, 15 | 28, 16 | 3, 17 | '', 18 | 'GambleData.proto' 19 | ) 20 | # @@protoc_insertion_point(imports) 21 | 22 | _sym_db = _symbol_database.Default() 23 | 24 | 25 | import Error_pb2 as Error__pb2 26 | import PurchaseData_pb2 as PurchaseData__pb2 27 | 28 | 29 | DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10GambleData.proto\x12\x04\x44\x61ta\x1a\x0b\x45rror.proto\x1a\x12PurchaseData.proto\"\xba\x01\n\x0eGambleResponse\x12\x30\n\x0fupdatedCurrency\x18\x01 \x01(\x0b\x32\x12.Data.CurrencyDataH\x00\x88\x01\x01\x12\x1c\n\x0f\x63urrencyAwarded\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12&\n\x05\x65rror\x18\x03 \x01(\x0b\x32\x12.Data.ErrorMessageH\x02\x88\x01\x01\x42\x12\n\x10_updatedCurrencyB\x12\n\x10_currencyAwardedB\x08\n\x06_errorB\x16\n\x14\x63om.ea.simpsons.datab\x06proto3') 30 | 31 | _globals = globals() 32 | _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) 33 | _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'GambleData_pb2', _globals) 34 | if not _descriptor._USE_C_DESCRIPTORS: 35 | _globals['DESCRIPTOR']._loaded_options = None 36 | _globals['DESCRIPTOR']._serialized_options = b'\n\024com.ea.simpsons.data' 37 | _globals['_GAMBLERESPONSE']._serialized_start=60 38 | _globals['_GAMBLERESPONSE']._serialized_end=246 39 | # @@protoc_insertion_point(module_scope) 40 | -------------------------------------------------------------------------------- /GameplayConfigData_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # NO CHECKED-IN PROTOBUF GENCODE 4 | # source: GameplayConfigData.proto 5 | # Protobuf Python Version: 5.28.3 6 | """Generated protocol buffer code.""" 7 | from google.protobuf import descriptor as _descriptor 8 | from google.protobuf import descriptor_pool as _descriptor_pool 9 | from google.protobuf import runtime_version as _runtime_version 10 | from google.protobuf import symbol_database as _symbol_database 11 | from google.protobuf.internal import builder as _builder 12 | _runtime_version.ValidateProtobufRuntimeVersion( 13 | _runtime_version.Domain.PUBLIC, 14 | 5, 15 | 28, 16 | 3, 17 | '', 18 | 'GameplayConfigData.proto' 19 | ) 20 | # @@protoc_insertion_point(imports) 21 | 22 | _sym_db = _symbol_database.Default() 23 | 24 | 25 | import Error_pb2 as Error__pb2 26 | import Common_pb2 as Common__pb2 27 | 28 | 29 | DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18GameplayConfigData.proto\x12\x04\x44\x61ta\x1a\x0b\x45rror.proto\x1a\x0c\x43ommon.proto\"i\n\x16GameplayConfigResponse\x12\x1d\n\x04item\x18\x01 \x03(\x0b\x32\x0f.Data.NameValue\x12&\n\x05\x65rror\x18\x02 \x01(\x0b\x32\x12.Data.ErrorMessageH\x00\x88\x01\x01\x42\x08\n\x06_errorB\x16\n\x14\x63om.ea.simpsons.datab\x06proto3') 30 | 31 | _globals = globals() 32 | _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) 33 | _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'GameplayConfigData_pb2', _globals) 34 | if not _descriptor._USE_C_DESCRIPTORS: 35 | _globals['DESCRIPTOR']._loaded_options = None 36 | _globals['DESCRIPTOR']._serialized_options = b'\n\024com.ea.simpsons.data' 37 | _globals['_GAMEPLAYCONFIGRESPONSE']._serialized_start=61 38 | _globals['_GAMEPLAYCONFIGRESPONSE']._serialized_end=166 39 | # @@protoc_insertion_point(module_scope) 40 | -------------------------------------------------------------------------------- /GetFriendData_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # NO CHECKED-IN PROTOBUF GENCODE 4 | # source: GetFriendData.proto 5 | # Protobuf Python Version: 5.28.3 6 | """Generated protocol buffer code.""" 7 | from google.protobuf import descriptor as _descriptor 8 | from google.protobuf import descriptor_pool as _descriptor_pool 9 | from google.protobuf import runtime_version as _runtime_version 10 | from google.protobuf import symbol_database as _symbol_database 11 | from google.protobuf.internal import builder as _builder 12 | _runtime_version.ValidateProtobufRuntimeVersion( 13 | _runtime_version.Domain.PUBLIC, 14 | 5, 15 | 28, 16 | 3, 17 | '', 18 | 'GetFriendData.proto' 19 | ) 20 | # @@protoc_insertion_point(imports) 21 | 22 | _sym_db = _symbol_database.Default() 23 | 24 | 25 | import LandData_pb2 as LandData__pb2 26 | import Error_pb2 as Error__pb2 27 | 28 | 29 | DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13GetFriendData.proto\x12\x04\x44\x61ta\x1a\x0eLandData.proto\x1a\x0b\x45rror.proto\"(\n\x14GetFriendDataRequest\x12\x10\n\x08\x66riendId\x18\x01 \x03(\t\"\xdf\x04\n\x15GetFriendDataResponse\x12>\n\nfriendData\x18\x01 \x03(\x0b\x32*.Data.GetFriendDataResponse.FriendDataPair\x12&\n\x05\x65rror\x18\x02 \x01(\x0b\x32\x12.Data.ErrorMessageH\x00\x88\x01\x01\x1a\xd3\x03\n\x0e\x46riendDataPair\x12\x15\n\x08\x66riendId\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x35\n\nfriendData\x18\x02 \x01(\x0b\x32\x1c.Data.LandMessage.FriendDataH\x01\x88\x01\x01\x12N\n\x05\x65rror\x18\x03 \x01(\x0b\x32:.Data.GetFriendDataResponse.FriendDataPair.FriendDataErrorH\x02\x88\x01\x01\x12P\n\x0b\x61uthService\x18\x04 \x01(\x0e\x32\x36.Data.GetFriendDataResponse.FriendDataPair.AuthServiceH\x03\x88\x01\x01\x12\x17\n\nexternalId\x18\x05 \x01(\tH\x04\x88\x01\x01\x1aI\n\x0f\x46riendDataError\x12\x11\n\x04\x63ode\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x11\n\x04type\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x07\n\x05_codeB\x07\n\x05_type\"(\n\x0b\x41uthService\x12\x0b\n\x07NUCLEUS\x10\x00\x12\x0c\n\x08\x46\x41\x43\x45\x42OOK\x10\x01\x42\x0b\n\t_friendIdB\r\n\x0b_friendDataB\x08\n\x06_errorB\x0e\n\x0c_authServiceB\r\n\x0b_externalIdB\x08\n\x06_errorB\x16\n\x14\x63om.ea.simpsons.datab\x06proto3') 30 | 31 | _globals = globals() 32 | _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) 33 | _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'GetFriendData_pb2', _globals) 34 | if not _descriptor._USE_C_DESCRIPTORS: 35 | _globals['DESCRIPTOR']._loaded_options = None 36 | _globals['DESCRIPTOR']._serialized_options = b'\n\024com.ea.simpsons.data' 37 | _globals['_GETFRIENDDATAREQUEST']._serialized_start=58 38 | _globals['_GETFRIENDDATAREQUEST']._serialized_end=98 39 | _globals['_GETFRIENDDATARESPONSE']._serialized_start=101 40 | _globals['_GETFRIENDDATARESPONSE']._serialized_end=708 41 | _globals['_GETFRIENDDATARESPONSE_FRIENDDATAPAIR']._serialized_start=231 42 | _globals['_GETFRIENDDATARESPONSE_FRIENDDATAPAIR']._serialized_end=698 43 | _globals['_GETFRIENDDATARESPONSE_FRIENDDATAPAIR_FRIENDDATAERROR']._serialized_start=514 44 | _globals['_GETFRIENDDATARESPONSE_FRIENDDATAPAIR_FRIENDDATAERROR']._serialized_end=587 45 | _globals['_GETFRIENDDATARESPONSE_FRIENDDATAPAIR_AUTHSERVICE']._serialized_start=589 46 | _globals['_GETFRIENDDATARESPONSE_FRIENDDATAPAIR_AUTHSERVICE']._serialized_end=629 47 | # @@protoc_insertion_point(module_scope) 48 | -------------------------------------------------------------------------------- /LandData_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # NO CHECKED-IN PROTOBUF GENCODE 4 | # source: LandData.proto 5 | # Protobuf Python Version: 5.28.3 6 | """Generated protocol buffer code.""" 7 | from google.protobuf import descriptor as _descriptor 8 | from google.protobuf import descriptor_pool as _descriptor_pool 9 | from google.protobuf import runtime_version as _runtime_version 10 | from google.protobuf import symbol_database as _symbol_database 11 | from google.protobuf.internal import builder as _builder 12 | _runtime_version.ValidateProtobufRuntimeVersion( 13 | _runtime_version.Domain.PUBLIC, 14 | 5, 15 | 28, 16 | 3, 17 | '', 18 | 'LandData.proto' 19 | ) 20 | # @@protoc_insertion_point(imports) 21 | 22 | _sym_db = _symbol_database.Default() 23 | 24 | 25 | import Common_pb2 as Common__pb2 26 | import PurchaseData_pb2 as PurchaseData__pb2 27 | 28 | 29 | DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0eLandData.proto\x12\x04\x44\x61ta\x1a\x0c\x43ommon.proto\x1a\x12PurchaseData.proto\"t\n\x0bVariableSet\x12,\n\x08variable\x18\x01 \x03(\x0b\x32\x1a.Data.VariableSet.Variable\x1a\x37\n\x08Variable\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05\x12\x0e\n\x06\x64value\x18\x03 \x01(\x01\"\x89\x01\n\x11SharedVariableSet\x12\x38\n\x08variable\x18\x01 \x03(\x0b\x32&.Data.SharedVariableSet.SharedVariable\x1a:\n\x0eSharedVariable\x12\r\n\x05owner\x18\x01 \x01(\r\x12\n\n\x02id\x18\x02 \x01(\x05\x12\r\n\x05value\x18\x03 \x01(\x05\"\xaf\x01\n\x0bTimeGateSet\x12,\n\x08timegate\x18\x01 \x03(\x0b\x32\x1a.Data.TimeGateSet.TimeGate\x1ar\n\x08TimeGate\x12\x0e\n\x06gateId\x18\x01 \x01(\x05\x12\x15\n\rusesRemaining\x18\x02 \x01(\x05\x12\x12\n\nrefillTime\x18\x03 \x01(\x03\x12\x12\n\ninstanceId\x18\x04 \x01(\t\x12\x17\n\x0flastRefillCount\x18\x05 \x01(\x05\"\xcc\x02\n\x13\x41\x64vancedVariableSet\x12<\n\x08variable\x18\x01 \x03(\x0b\x32*.Data.AdvancedVariableSet.AdvancedVariable\x1a\xf6\x01\n\x10\x41\x64vancedVariable\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\x12\x13\n\x0b\x63reatedTime\x18\x03 \x01(\x03\x12\x0b\n\x03ttl\x18\x04 \x01(\x03\x12\x13\n\x0bobjectClass\x18\x05 \x01(\r\x12\x10\n\x08serverID\x18\x06 \x01(\r\x12\x14\n\x0cobjectTypeID\x18\x07 \x01(\r\x12\x10\n\x08orphaned\x18\x08 \x01(\x08\x12\x15\n\rcanBeOrphaned\x18\t \x01(\x08\x12\r\n\x05scope\x18\n \x01(\x05\x12\x11\n\tsublandID\x18\x0b \x01(\r\x12\r\n\x05\x66lags\x18\x0c \x01(\r\x12\x0c\n\x04uuid\x18\r \x01(\r\"\xfb\x01\n\x0fTimedAttackData\x12\x12\n\ninstanceID\x18\x01 \x01(\t\x12\x11\n\tsubLandID\x18\x02 \x01(\r\x12\x16\n\x0eobjectServerID\x18\x03 \x01(\r\x12\x13\n\x0bobjectClass\x18\x04 \x01(\r\x12\x13\n\x0bobjectOwner\x18\x05 \x01(\t\x12\x13\n\x0b\x61ttackOwner\x18\x06 \x01(\t\x12\x13\n\x0btimeCreated\x18\x07 \x01(\x03\x12\x10\n\x08lifeSpan\x18\x08 \x01(\x03\x12\x0c\n\x04\x66lag\x18\t \x01(\r\x12\x0f\n\x07\x65ventID\x18\n \x01(\r\x12\x12\n\nnumResUsed\x18\x0b \x01(\x05\x12\x10\n\x08objectID\x18\x0c \x01(\r\"D\n\x12TimedAttackDataSet\x12.\n\x0ftimedAttackData\x18\x01 \x03(\x0b\x32\x15.Data.TimedAttackData\"?\n\x0fObjectVariables\x12,\n\tvariables\x18\x01 \x01(\x0b\x32\x19.Data.AdvancedVariableSet\"B\n\x10SpendableElement\x12\x0c\n\x04type\x18\x01 \x01(\r\x12\x0e\n\x06\x61mount\x18\x02 \x01(\r\x12\x10\n\x08nextTime\x18\x03 \x01(\x03\")\n\tOwnerList\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08userName\x18\x02 \x03(\t\"\x9a\x01\n\x10\x43urrencySaveData\x12\r\n\x05money\x18\x01 \x01(\r\x12\x0f\n\x07premium\x18\x02 \x01(\r\x12\x11\n\trealMoney\x18\x03 \x01(\r\x12\x13\n\x0brealPremium\x18\x04 \x01(\r\x12\x12\n\nnumSpecial\x18\x05 \x01(\r\x12\x13\n\x0bspecialType\x18\x06 \x03(\r\x12\x15\n\rspecialAmount\x18\x07 \x03(\r\"\xb5\xa3\x01\n\x0bLandMessage\x12\n\n\x02id\x18\x01 \x01(\t\x12\x30\n\nfriendData\x18\x02 \x01(\x0b\x32\x1c.Data.LandMessage.FriendData\x12,\n\x08userData\x18\x03 \x01(\x0b\x32\x1a.Data.LandMessage.UserData\x12\x36\n\rinnerLandData\x18\x04 \x01(\x0b\x32\x1f.Data.LandMessage.InnerLandData\x12\x30\n\troadsData\x18\x05 \x01(\x0b\x32\x1d.Data.LandMessage.TerrainData\x12\x31\n\nriversData\x18\x06 \x01(\x0b\x32\x1d.Data.LandMessage.TerrainData\x12\x34\n\x0c\x62uildingData\x18\x07 \x03(\x0b\x32\x1e.Data.LandMessage.BuildingData\x12\x36\n\rcharacterData\x18\x08 \x03(\x0b\x32\x1f.Data.LandMessage.CharacterData\x12\x38\n\x0e\x63onsumableData\x18\t \x03(\x0b\x32 .Data.LandMessage.ConsumableData\x12*\n\x07jobData\x18\n \x03(\x0b\x32\x19.Data.LandMessage.JobData\x12.\n\tquestData\x18\x0b \x03(\x0b\x32\x1b.Data.LandMessage.QuestData\x12<\n\x10notificationData\x18\x0c \x03(\x0b\x32\".Data.LandMessage.NotificationData\x12>\n\x11inventoryItemData\x18\r \x03(\x0b\x32#.Data.LandMessage.InventoryItemData\x12\x42\n\x13memorabiliaItemData\x18\x0e \x03(\x0b\x32%.Data.LandMessage.MemorabiliaItemData\x12\x46\n\x15premiumUnlockItemData\x18\x0f \x03(\x0b\x32\'.Data.LandMessage.PremiumUnlockItemData\x12@\n\x12\x65ventCountListData\x18\x10 \x03(\x0b\x32$.Data.LandMessage.EventCountListData\x12:\n\x0f\x61\x63tionLimitData\x18\x11 \x03(\x0b\x32!.Data.LandMessage.ActionLimitData\x12\x32\n\x0bsidebarData\x18\x12 \x01(\x0b\x32\x1d.Data.LandMessage.SidebarData\x12>\n\x11\x63haracterSetsData\x18\x13 \x01(\x0b\x32#.Data.LandMessage.CharacterSetsData\x12\x46\n\x15pushNotificationsData\x18\x14 \x03(\x0b\x32\'.Data.LandMessage.PushNotificationsData\x12:\n\x0ftimedScriptData\x18\x15 \x03(\x0b\x32!.Data.LandMessage.TimedScriptData\x12<\n\x10\x62onusUnlocksData\x18\x16 \x01(\x0b\x32\".Data.LandMessage.BonusUnlocksData\x12\x44\n\x14\x63haracterUnlocksData\x18\x17 \x03(\x0b\x32&.Data.LandMessage.CharacterUnlocksData\x12:\n\x0fskinUnlocksData\x18\x18 \x01(\x0b\x32!.Data.LandMessage.SkinUnlocksData\x12>\n\x11\x64\x65layedActionData\x18\x19 \x03(\x0b\x32#.Data.LandMessage.DelayedActionData\x12\x38\n\x0espendablesData\x18\x1a \x01(\x0b\x32 .Data.LandMessage.SpendablesData\x12>\n\x11specialEventsData\x18\x1b \x01(\x0b\x32#.Data.LandMessage.SpecialEventsData\x12\x38\n\x0e\x66\x61keFriendData\x18\x1c \x01(\x0b\x32 .Data.LandMessage.FakeFriendData\x12\x38\n\x0equestGroupData\x18\x1d \x03(\x0b\x32 .Data.LandMessage.QuestGroupData\x12*\n\tpurchases\x18\x1e \x03(\x0b\x32\x17.Data.PurchasedItemData\x12\x46\n\x15processedPurchaseData\x18\x1f \x01(\x0b\x32\'.Data.LandMessage.ProcessedPurchaseData\x12H\n\x16\x63ustomFriendActionData\x18 \x03(\x0b\x32(.Data.LandMessage.CustomFriendActionData\x12\x11\n\tdebugLand\x18! \x01(\x08\x12\x30\n\toceanData\x18\" \x01(\x0b\x32\x1d.Data.LandMessage.TerrainData\x12\x38\n\x0egameObjectInfo\x18# \x01(\x0b\x32 .Data.LandMessage.GameObjectInfo\x12\x32\n\x0bsubLandData\x18$ \x03(\x0b\x32\x1d.Data.LandMessage.SubLandData\x12\x34\n\x0cminigameData\x18% \x03(\x0b\x32\x1e.Data.LandMessage.MinigameData\x12=\n\x15stealableBuildingData\x18& \x03(\x0b\x32\x1e.Data.LandMessage.BuildingData\x12\x42\n\x13\x63ollectionItemsData\x18\' \x03(\x0b\x32%.Data.LandMessage.CollectionItemsData\x12\x38\n\x0e\x66riendListData\x18( \x03(\x0b\x32 .Data.LandMessage.FriendListData\x12\x42\n\x15\x61llFriendActionsCount\x18) \x01(\x0b\x32#.Data.LandMessage.FriendActionCount\x12\'\n\x1f\x66riendListDataIsCreatedAndSaved\x18* \x01(\x08\x12.\n\x0fobjectVariables\x18+ \x01(\x0b\x32\x15.Data.ObjectVariables\x12?\n\x0frecommendations\x18, \x03(\x0b\x32&.Data.LandMessage.SavedRecommendations\x12=\n\x12\x61mazonDimensionSet\x18- \x03(\x0b\x32!.Data.LandMessage.AmazonDimension\x12=\n\x11\x64\x61ilyTaskDataList\x18. \x01(\x0b\x32\".Data.LandMessage.DailyTaskMessage\x12@\n\x12roadMapDataMessage\x18/ \x01(\x0b\x32$.Data.LandMessage.RoadMapDataMessage\x12:\n\x0f\x61\x64HocObjectData\x18\x30 \x03(\x0b\x32!.Data.LandMessage.AdHocObjectData\x12\x13\n\x0b\x63ountryCode\x18\x31 \x01(\t\x12.\n\ttimerData\x18\x32 \x03(\x0b\x32\x1b.Data.LandMessage.TimerData\x12\x44\n\x14jobCensusDataMessage\x18\x33 \x01(\x0b\x32&.Data.LandMessage.JobCensusDataMessage\x12\x30\n\ndnaMessage\x18\x34 \x01(\x0b\x32\x1c.Data.LandMessage.DNAMessage\x12N\n\x19groupStorageBundleMessage\x18\x35 \x01(\x0b\x32+.Data.LandMessage.GroupStorageBundleMessage\x1a\xa8\x03\n\nFriendData\x12\x13\n\x0b\x64\x61taVersion\x18\x01 \x01(\x05\x12\x14\n\x0chasLemonTree\x18\x02 \x01(\x08\x12\x10\n\x08language\x18\x03 \x01(\x05\x12\r\n\x05level\x18\x04 \x01(\x05\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x0e\n\x06rating\x18\x06 \x01(\x05\x12)\n\tspendable\x18\x07 \x03(\x0b\x32\x16.Data.SpendableElement\x12\x13\n\x0blandVersion\x18\x08 \x01(\x05\x12>\n\x0csublandInfos\x18\t \x03(\x0b\x32(.Data.LandMessage.FriendData.SublandInfo\x12\x1a\n\x12\x62oardwalkTileCount\x18\n \x01(\x05\x12\x16\n\x0elastPlayedTime\x18\x0b \x01(\x03\x12\x32\n\x11sharedVariableSet\x18\x0c \x01(\x0b\x32\x17.Data.SharedVariableSet\x1aH\n\x0bSublandInfo\x12\x11\n\tsublandId\x18\x01 \x01(\x05\x12\x0e\n\x06rating\x18\x02 \x01(\x05\x12\x16\n\x07\x63reated\x18\x03 \x01(\x08:\x05\x66\x61lse\x1a\x1a\n\x0c\x45ntityHeader\x12\n\n\x02id\x18\x01 \x01(\r\x1a\xdc\x08\n\x08UserData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x1b\n\x13lastBonusCollection\x18\x02 \x01(\x04\x12\r\n\x05level\x18\x03 \x01(\r\x12\x12\n\nexperience\x18\x04 \x01(\r\x12\r\n\x05money\x18\x05 \x01(\r\x12;\n\x0bsavedRating\x18\x06 \x03(\x0b\x32&.Data.LandMessage.UserData.SavedRating\x12\x11\n\tlastBonus\x18\x07 \x01(\r\x12\x17\n\x0f\x66riendsUnlocked\x18\x08 \x01(\x08\x12\x1b\n\x13memorabiliaUnlocked\x18\t \x01(\x08\x12\x1a\n\x12reorganizeUnlocked\x18\n \x01(\x08\x12\x15\n\rfirstPurchase\x18\x0b \x01(\x08\x12\x1a\n\x12sidebarDefaultOpen\x18\x0c \x01(\x08\x12\x13\n\x0bshowLevelUp\x18\r \x01(\x08\x12\x17\n\x0f\x62onusExperience\x18\x0e \x01(\r\x12\x12\n\nbonusLevel\x18\x0f \x01(\r\x12\x17\n\x0fhasPrestigeData\x18\x10 \x01(\x08\x12\x12\n\nprestigeID\x18\x11 \x01(\r\x12\x1a\n\x12prestigeShownFirst\x18\x12 \x01(\x08\x12\x1b\n\x13prestigeShownSecond\x18\x13 \x01(\x08\x12\x1a\n\x12prestigeShownThird\x18\x14 \x01(\x08\x12\x18\n\x10prestigeSelected\x18\x15 \x01(\r\x12\x1d\n\x15prestigeConsumbableID\x18\x16 \x01(\r\x12\x18\n\x10tutorialComplete\x18\x17 \x01(\x08\x12\x19\n\x11pendingConsumable\x18\x18 \x01(\r\x12\x13\n\x0bvisualLevel\x18\x19 \x01(\r\x12\x16\n\x0etimezoneOffset\x18\x1a \x01(\x05\x12\x17\n\x0fuserPreferences\x18\x1b \x01(\r\x12\x15\n\rshouldAnalyze\x18\x1c \x01(\x08\x12\x17\n\x0fgambleOutcomeID\x18\x1d \x01(\x05\x12\x16\n\x0egambleItemType\x18\x1e \x01(\t\x12\x18\n\x10\x66ullDLCCompleted\x18\x1f \x01(\x08\x12-\n\x0fpowerupDataList\x18 \x01(\x0b\x32\x14.Data.PowerupMessage\x12-\n\rsubscriptions\x18! \x03(\x0b\x32\x16.Data.SubscriptionData\x12G\n\x11stickerUnlockData\x18\" \x03(\x0b\x32,.Data.LandMessage.UserData.StickerUnlockData\x12\x10\n\x08resetAge\x18# \x01(\x08\x1a\x41\n\x0bSavedRating\x12\x19\n\x11savedRatingElemID\x18\x01 \x01(\r\x12\x17\n\x0fsavedRatingElem\x18\x02 \x01(\x05\x1a&\n\x11StickerUnlockData\x12\x11\n\tstickerID\x18\x01 \x01(\r\x1a\xc1\x07\n\rInnerLandData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x12\n\nlandBlocks\x18\x02 \x01(\t\x12\x16\n\x0enextInstanceID\x18\x03 \x01(\r\x12\x10\n\x08numChars\x18\x04 \x01(\r\x12\x14\n\x0cnumBuildings\x18\x05 \x01(\r\x12\x16\n\x0enumConsumables\x18\x06 \x01(\r\x12\x0f\n\x07numJobs\x18\x07 \x01(\r\x12\x11\n\tnumQuests\x18\x08 \x01(\r\x12\x12\n\nnumNotices\x18\t \x01(\r\x12\x19\n\x11numInventoryItems\x18\n \x01(\r\x12\x1b\n\x13numMemorabiliaItems\x18\x0b \x01(\r\x12\x1a\n\x12numEventCountLists\x18\x0c \x01(\r\x12\x19\n\x11numPremiumUnlocks\x18\r \x01(\r\x12\x17\n\x0fnumActionLimits\x18\x0e \x01(\r\x12\x1d\n\x15numRunsSincePromotion\x18\x0f \x01(\r\x12\x16\n\x0elevelOfRateAsk\x18\x10 \x01(\r\x12\x12\n\nupdateTime\x18\x11 \x01(\x03\x12\x18\n\x10timeSpentPlaying\x18\x12 \x01(\x03\x12\x1c\n\x14lastLevelUpSpentTime\x18\x13 \x01(\x03\x12\x1c\n\x14lastLevelUpTimeStamp\x18\x14 \x01(\x03\x12\x17\n\x0finitialSaveDone\x18\x15 \x01(\x08\x12\x1f\n\x17lastVandalismFeedPosted\x18\x16 \x01(\x03\x12#\n\x1blastStealBuildingFeedPosted\x18\x17 \x01(\x03\x12\x1e\n\x16lastSideshowBobSpawned\x18\x18 \x01(\x03\x12\x16\n\x0enextCurrencyID\x18\x19 \x01(\r\x12\x16\n\x0enumQuestGroups\x18\x1a \x01(\r\x12\x1c\n\x14scratcherRewardIndex\x18\x1b \x01(\x05\x12#\n\x1bscratcherRewardConsumableID\x18\x1c \x01(\r\x12\x14\n\x0c\x63reationTime\x18\x1d \x01(\x04\x12\x10\n\x08versions\x18\x1e \x03(\t\x12\x17\n\x0f\x62uildingsSorted\x18\x1f \x01(\x08\x12\x17\n\x0fnumSavedFriends\x18 \x01(\r\x12\x16\n\x0elandBlockWidth\x18! \x01(\r\x12\x17\n\x0flandBlockHeight\x18\" \x01(\r\x12\x1a\n\x12landBlockPositionX\x18# \x01(\x05\x12\x1a\n\x12landBlockPositionY\x18$ \x01(\x05\x1a\xd7\x02\n\x0bTerrainData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x13\n\x0bmapDataSize\x18\x02 \x01(\r\x12\x0f\n\x07mapData\x18\x03 \x01(\t\x12>\n\x0bterrainType\x18\x04 \x01(\x0e\x32).Data.LandMessage.TerrainData.TerrainType\"\xb1\x01\n\x0bTerrainType\x12\x0c\n\x08PAVEMENT\x10\x01\x12\t\n\x05ROADS\x10\x02\x12\n\n\x06RIVERS\x10\x03\x12\x14\n\x10KRUSTYLAND_ROADS\x10\x04\x12\t\n\x05OCEAN\x10\x05\x12\x08\n\x04\x44IRT\x10\x06\x12\x0e\n\nDIRT_ROADS\x10\x07\x12\x0f\n\x0b\x43OBBLESTONE\x10\x08\x12\x0c\n\x08ICERIVER\x10\t\x12\x0b\n\x07KLSROAD\x10\n\x12\x0c\n\x08GOLDROAD\x10\x0b\x12\x08\n\x04SAND\x10\x0c\x1a\x9b\x04\n\x0c\x42uildingData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x10\n\x08\x62uilding\x18\x02 \x01(\r\x12\x14\n\x0c\x63reationTime\x18\x03 \x01(\x03\x12\x12\n\nupdateTime\x18\x04 \x01(\x03\x12\x11\n\tpositionX\x18\x05 \x01(\x02\x12\x11\n\tpositionY\x18\x06 \x01(\x02\x12\x0f\n\x07\x66lipped\x18\x07 \x01(\x08\x12\x12\n\nbuildState\x18\x08 \x01(\x05\x12\r\n\x05hurry\x18\t \x01(\x08\x12\x11\n\tcropState\x18\n \x01(\r\x12\x11\n\tbetActive\x18\x0b \x01(\x08\x12\x14\n\x0c\x62\x65tStartTime\x18\x0c \x01(\x03\x12\x11\n\tbetChoice\x18\r \x01(\r\x12\x12\n\nwinningBet\x18\x0e \x01(\x08\x12\x12\n\nvandalized\x18\x0f \x01(\x08\x12\x0f\n\x07namelen\x18\x10 \x01(\x05\x12\x12\n\nvandalName\x18\x11 \x01(\t\x12\x13\n\x0bisOwnerList\x18\x12 \x01(\x08\x12\"\n\townerList\x18\x13 \x01(\x0b\x32\x0f.Data.OwnerList\x12\x0c\n\x04skin\x18\x14 \x01(\x05\x12\x14\n\x0cgrantRewards\x18\x15 \x01(\x08\x12\x11\n\tflipState\x18\x16 \x01(\r\x12\x11\n\tsubLandID\x18\x17 \x01(\r\x12\x17\n\x0ftimeOfVandalism\x18\x18 \x01(\x03\x12\r\n\x05\x66lags\x18\x19 \x01(\r\x1a#\n\x0bVectorFloat\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x1a\x41\n\x10VectorFloatArray\x12-\n\x06vector\x18\x01 \x03(\x0b\x32\x1d.Data.LandMessage.VectorFloat\x1a\x87\x02\n\rCharacterData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x11\n\tcharacter\x18\x02 \x01(\r\x12\x12\n\nupdateTime\x18\x03 \x01(\x03\x12\x11\n\tpositionX\x18\x04 \x01(\x02\x12\x11\n\tpositionY\x18\x05 \x01(\x02\x12\x0c\n\x04skin\x18\x06 \x01(\x05\x12\x12\n\nskinBackup\x18\x07 \x01(\x05\x12\x11\n\tsubLandID\x18\x08 \x01(\r\x12\r\n\x05\x66lags\x18\t \x01(\r\x12\x35\n\tpathCache\x18\n \x01(\x0b\x32\".Data.LandMessage.VectorFloatArray\x1aj\n\x0e\x43onsumableData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x12\n\nconsumable\x18\x02 \x01(\r\x12\x14\n\x0c\x63onsumedTime\x18\x03 \x01(\x03\x1a\xde\x02\n\x07JobData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x0b\n\x03job\x18\x02 \x01(\r\x12\x0f\n\x07\x63harRef\x18\x03 \x01(\r\x12\x13\n\x0b\x62uildingRef\x18\x04 \x01(\r\x12\x12\n\nupdateTime\x18\x05 \x01(\x03\x12\r\n\x05state\x18\x06 \x01(\x05\x12\r\n\x05hurry\x18\x07 \x01(\x08\x12\x13\n\x0bhasBuilding\x18\x08 \x01(\x08\x12\x0f\n\x07hasChar\x18\t \x01(\x08\x12\x15\n\rmoveToCharRef\x18\n \x01(\r\x12\x17\n\x0fproxyCheckFired\x18\x0b \x01(\x08\x12\x15\n\rgridPositionX\x18\x0c \x01(\x05\x12\x15\n\rgridPositionY\x18\r \x01(\x05\x12\x0f\n\x07hasGrid\x18\x0e \x01(\x08\x12\x11\n\tsubLandID\x18\x0f \x01(\r\x12\x16\n\x0esubBuildingRef\x18\x10 \x01(\r\x1a\xe2\x08\n\tQuestData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x0f\n\x07questID\x18\x02 \x01(\r\x12\x12\n\nquestState\x18\x03 \x01(\x05\x12\x18\n\x10questScriptState\x18\x04 \x01(\x05\x12\x15\n\rnumObjectives\x18\x05 \x01(\x05\x12@\n\robjectiveData\x18\x06 \x03(\x0b\x32).Data.LandMessage.QuestData.ObjectiveData\x12\x16\n\x0etimesCompleted\x18\x07 \x01(\x05\x1a\xf4\x06\n\rObjectiveData\x12\x13\n\x0bobjectiveID\x18\x01 \x01(\x05\x12\x16\n\x0eobjectiveState\x18\x02 \x01(\x05\x12\x15\n\robjectiveType\x18\x03 \x01(\x05\x12\x0f\n\x07version\x18\x04 \x01(\x05\x12\x17\n\x0fquestLastRetVal\x18\x05 \x01(\x08\x12\x12\n\nquestLocal\x18\x06 \x01(\x08\x12\x0e\n\x06rushed\x18\x07 \x01(\x08\x12\x10\n\x08keepDone\x18\x08 \x01(\x08\x12\x17\n\x0f\x62lockDoneScript\x18\t \x01(\x08\x12X\n\x12\x62uildingCustomData\x18\n \x01(\x0b\x32<.Data.LandMessage.QuestData.ObjectiveData.BuildingCustomData\x12Z\n\x13resourcesCustomData\x18\x0b \x01(\x0b\x32=.Data.LandMessage.QuestData.ObjectiveData.ResourcesCustomData\x12Z\n\x13itemCountCustomData\x18\x0c \x01(\x0b\x32=.Data.LandMessage.QuestData.ObjectiveData.ItemCountCustomData\x12^\n\x15visitFriendCustomData\x18\r \x01(\x0b\x32?.Data.LandMessage.QuestData.ObjectiveData.VisitFriendCustomData\x12J\n\x0b\x64ynamicData\x18\x0e \x01(\x0b\x32\x35.Data.LandMessage.QuestData.ObjectiveData.DynamicData\x1a!\n\x12\x42uildingCustomData\x12\x0b\n\x03qty\x18\x01 \x01(\x05\x1a\x35\n\x13ResourcesCustomData\x12\r\n\x05money\x18\x01 \x01(\r\x12\x0f\n\x07premium\x18\x02 \x01(\r\x1a$\n\x13ItemCountCustomData\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\x1aJ\n\x15VisitFriendCustomData\x12\x0b\n\x03num\x18\x01 \x01(\x05\x12\x14\n\x0c\x66\x61keIncluded\x18\x02 \x01(\x08\x12\x0e\n\x06\x66riend\x18\x03 \x03(\t\x1a\x1c\n\x0b\x44ynamicData\x12\r\n\x05value\x18\x01 \x01(\x05\x1a\xc0\x13\n\x10NotificationData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x12\n\nbuildingID\x18\x02 \x01(\r\x12\x13\n\x0b\x63haracterID\x18\x03 \x01(\r\x12\x0c\n\x04type\x18\x04 \x01(\r\x12\x12\n\ncallbackID\x18\x05 \x01(\r\x12\x0e\n\x06startX\x18\x06 \x01(\x02\x12\x0e\n\x06startY\x18\x07 \x01(\x02\x12\x0e\n\x06startZ\x18\x08 \x01(\x02\x12\x0c\n\x04\x65ndX\x18\t \x01(\x02\x12\x0c\n\x04\x65ndY\x18\n \x01(\x02\x12\x0c\n\x04\x65ndZ\x18\x0b \x01(\x02\x12\x10\n\x08moveTime\x18\x0c \x01(\x03\x12\x10\n\x08isStatic\x18\r \x01(\x08\x12\x0f\n\x07isSetup\x18\x0e \x01(\x08\x12\x13\n\x0bhasBuilding\x18\x0f \x01(\x08\x12\x0f\n\x07hasChar\x18\x10 \x01(\x08\x12\x13\n\x0bhistoryType\x18\x11 \x01(\r\x12\x14\n\x0chistoryJobID\x18\x12 \x01(\r\x12\x19\n\x11historyBuildingID\x18\x13 \x01(\r\x12\x1a\n\x12historyCharacterID\x18\x14 \x01(\r\x12\x16\n\x0ehistoryQuestID\x18\x15 \x01(\r\x12!\n\x19historyBuildingInstanceID\x18\x16 \x01(\r\x12Q\n\x12\x63onsumableCallback\x18\x17 \x01(\x0b\x32\x35.Data.LandMessage.NotificationData.ConsumableCallback\x12_\n\x19memorabiliaRewardCallback\x18\x18 \x01(\x0b\x32<.Data.LandMessage.NotificationData.MemorabiliaRewardCallback\x12U\n\x14notificationCallback\x18\x19 \x01(\x0b\x32\x37.Data.LandMessage.NotificationData.NotificationCallback\x12\x63\n\x1bgainCharacterRewardCallback\x18\x1a \x01(\x0b\x32>.Data.LandMessage.NotificationData.GainCharacterRewardCallback\x12[\n\x17gainPrizeRewardCallback\x18\x1b \x01(\x0b\x32:.Data.LandMessage.NotificationData.GainPrizeRewardCallback\x12S\n\x13multiRewardCallback\x18\x1c \x01(\x0b\x32\x36.Data.LandMessage.NotificationData.MultiRewardCallback\x12g\n\x1dresourceAndItemRewardCallback\x18\x1d \x01(\x0b\x32@.Data.LandMessage.NotificationData.ResourceAndItemRewardCallback\x12\x11\n\tsubLandID\x18\x1e \x01(\r\x12\"\n\x1ahistoryCharacterInstanceID\x18\x1f \x01(\r\x1ai\n\x12\x43onsumableCallback\x12\x14\n\x0c\x63onsumableID\x18\x01 \x01(\r\x12\x14\n\x0csourceLength\x18\x02 \x01(\x05\x12\x0e\n\x06source\x18\x03 \x01(\t\x12\x17\n\x0f\x63onsumableCount\x18\x04 \x01(\r\x1a\x32\n\x19MemorabiliaRewardCallback\x12\x15\n\rmemorabiliaID\x18\x01 \x01(\r\x1a\xc2\x01\n\x14NotificationCallback\x12\r\n\x05money\x18\x01 \x01(\r\x12\x17\n\x0fpremiumCurrency\x18\x02 \x01(\r\x12\x0b\n\x03\x65xp\x18\x03 \x01(\r\x12\x14\n\x0csourceLength\x18\x04 \x01(\x05\x12\x0e\n\x06source\x18\x05 \x01(\t\x12\x14\n\x0creasonLength\x18\x06 \x01(\x05\x12\x0e\n\x06reason\x18\x07 \x01(\t\x12\x15\n\rspendablesLen\x18\x08 \x01(\x05\x12\x12\n\nspendables\x18\t \x01(\t\x1a\x84\x01\n\x1bGainCharacterRewardCallback\x12\x12\n\nbuildingID\x18\x01 \x01(\r\x12\x13\n\x0b\x63haracterID\x18\x02 \x01(\r\x12\x16\n\x0e\x63haracterCount\x18\x03 \x01(\r\x12\x14\n\x0csourceLength\x18\x04 \x01(\x05\x12\x0e\n\x06source\x18\x05 \x01(\t\x1aI\n\x17GainPrizeRewardCallback\x12\x16\n\x0especialEventID\x18\x01 \x01(\r\x12\x16\n\x0eprizeListIndex\x18\x02 \x01(\r\x1a\xfe\x02\n\x13MultiRewardCallback\x12\r\n\x05money\x18\x01 \x01(\r\x12\x17\n\x0fpremiumCurrency\x18\x02 \x01(\r\x12\x0b\n\x03\x65xp\x18\x03 \x01(\r\x12\x14\n\x0csourceLength\x18\x04 \x01(\x05\x12\x0e\n\x06source\x18\x05 \x01(\t\x12\x14\n\x0creasonLength\x18\x06 \x01(\x05\x12\x0e\n\x06reason\x18\x07 \x01(\t\x12\x12\n\nbuildingID\x18\x08 \x01(\r\x12\x13\n\x0b\x63haracterID\x18\t \x01(\r\x12\x11\n\tpositionX\x18\n \x01(\x02\x12\x11\n\tpositionY\x18\x0b \x01(\x02\x12\x11\n\tpositionZ\x18\x0c \x01(\x02\x12\x15\n\rspendablesLen\x18\r \x01(\x05\x12\x12\n\nspendables\x18\x0e \x01(\t\x12\x14\n\x0c\x63onsumableID\x18\x0f \x01(\r\x12\x17\n\x0f\x63onsumableCount\x18\x10 \x01(\r\x12\x17\n\x0f\x66loatTextLength\x18\x11 \x01(\x05\x12\x11\n\tfloatText\x18\x12 \x01(\t\x1a\xe5\x02\n\x1dResourceAndItemRewardCallback\x12\r\n\x05money\x18\x01 \x01(\r\x12\x17\n\x0fpremiumCurrency\x18\x02 \x01(\r\x12\x0b\n\x03\x65xp\x18\x03 \x01(\r\x12\x14\n\x0csourceLength\x18\x04 \x01(\x05\x12\x0e\n\x06source\x18\x05 \x01(\t\x12\x14\n\x0creasonLength\x18\x06 \x01(\x05\x12\x0e\n\x06reason\x18\x07 \x01(\t\x12\x12\n\nbuildingID\x18\x08 \x01(\r\x12\x13\n\x0b\x63haracterID\x18\t \x01(\r\x12\x15\n\rspendablesLen\x18\n \x01(\x05\x12\x12\n\nspendables\x18\x0b \x01(\t\x12\x18\n\x10rewardBuildingID\x18\x0c \x01(\r\x12\x1a\n\x12rewardConsumableID\x18\r \x01(\r\x12\x17\n\x0f\x66loatTextLength\x18\x0e \x01(\x05\x12\x11\n\tfloatText\x18\x0f \x01(\t\x12\r\n\x05\x66lags\x18\x10 \x01(\x05\x1a\xe2\x01\n\x11InventoryItemData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x10\n\x08itemType\x18\x02 \x01(\x05\x12\x0e\n\x06itemID\x18\x03 \x01(\x05\x12\r\n\x05\x63ount\x18\x04 \x01(\x05\x12\x13\n\x0bisOwnerList\x18\x05 \x01(\x08\x12\"\n\townerList\x18\x06 \x01(\x0b\x32\x0f.Data.OwnerList\x12\x10\n\x08\x66romLand\x18\x07 \x01(\x05\x12\x11\n\tsourceLen\x18\x08 \x01(\x05\x12\x0e\n\x06source\x18\t \x01(\t\x1a\x64\n\x13MemorabiliaItemData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x0e\n\x06itemID\x18\x02 \x01(\r\x12\r\n\x05\x63ount\x18\x03 \x01(\r\x1ai\n\x15PremiumUnlockItemData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x0e\n\x06itemID\x18\x02 \x01(\r\x12\x10\n\x08itemType\x18\x03 \x01(\x05\x1a\xdc\x02\n\x12\x45ventCountListData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x13\n\x0bnumElements\x18\x02 \x01(\x05\x12\x39\n\x05\x65vent\x18\x03 \x03(\x0b\x32*.Data.LandMessage.EventCountListData.Event\x1a\xc5\x01\n\x05\x45vent\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\x12\x0c\n\x04type\x18\x02 \x01(\x05\x12\r\n\x05jobID\x18\x03 \x01(\x05\x12\x0e\n\x06\x63harID\x18\x04 \x01(\x05\x12\x0f\n\x07\x62uildID\x18\x05 \x01(\x05\x12\x11\n\tconsumeID\x18\x06 \x01(\x05\x12\x12\n\nbuildingID\x18\x07 \x01(\x05\x12\x12\n\nfriendLand\x18\x08 \x01(\x05\x12\x13\n\x0b\x63haracterID\x18\t \x01(\x05\x12\x0c\n\x04\x61rg1\x18\n \x01(\x05\x12\x11\n\tupdatedAt\x18\x0b \x01(\x03\x1a\x91\x01\n\x0f\x41\x63tionLimitData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0c\n\x04time\x18\x03 \x01(\x03\x12\r\n\x05\x63ount\x18\x04 \x01(\x05\x12\x0f\n\x07special\x18\x05 \x01(\x05\x12\x12\n\nfakeFriend\x18\x06 \x01(\x08\x1a\xf6\x01\n\x0bSidebarData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x1a\n\x12numSidebarElements\x18\x02 \x01(\x05\x12\x44\n\x0esidebarElement\x18\x03 \x03(\x0b\x32,.Data.LandMessage.SidebarData.SidebarElement\x1aU\n\x0eSidebarElement\x12\x0c\n\x04type\x18\x01 \x01(\x05\x12\x12\n\nidentifier\x18\x02 \x01(\x05\x12\r\n\x05state\x18\x03 \x01(\x05\x12\x12\n\nupdateTime\x18\x04 \x01(\x03\x1a\xd2\x01\n\x11\x43haracterSetsData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x17\n\x0fnumCompleteSets\x18\x02 \x01(\x05\x12\x46\n\x0c\x63haracterSet\x18\x03 \x03(\x0b\x32\x30.Data.LandMessage.CharacterSetsData.CharacterSet\x1a,\n\x0c\x43haracterSet\x12\x0e\n\x06length\x18\x01 \x01(\x05\x12\x0c\n\x04name\x18\x02 \x01(\t\x1a\x9e\x01\n\x15PushNotificationsData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x0c\n\x04type\x18\x02 \x01(\x05\x12\x14\n\x0cpushIDLength\x18\x03 \x01(\x05\x12\x0e\n\x06pushID\x18\x04 \x01(\t\x12\x11\n\thasSource\x18\x05 \x01(\x08\x12\x0e\n\x06source\x18\x06 \x01(\r\x1a\x97\x02\n\x0fTimedScriptData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x14\n\x0c\x63reationTime\x18\x02 \x01(\x03\x12\x10\n\x08waitTime\x18\x03 \x01(\x05\x12\x15\n\rscriptnamelen\x18\x04 \x01(\x05\x12\x18\n\x10scriptpackagelen\x18\x05 \x01(\x05\x12\x12\n\nscriptname\x18\x06 \x01(\t\x12\x15\n\rscriptpackage\x18\x07 \x01(\t\x12\x18\n\x10scriptobjnamelen\x18\x08 \x01(\x05\x12\x15\n\rscriptobjname\x18\t \x01(\t\x12\x10\n\x08\x65ntityID\x18\n \x01(\x05\x12\r\n\x05\x66lags\x18\x0b \x01(\r\x1a\xc2\x01\n\x10\x42onusUnlocksData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x12\n\nnumEntries\x18\x02 \x01(\x05\x12\x41\n\nbonusEntry\x18\x03 \x03(\x0b\x32-.Data.LandMessage.BonusUnlocksData.BonusEntry\x1a\'\n\nBonusEntry\x12\n\n\x02id\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\x08\x1a[\n\x14\x43haracterUnlocksData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x13\n\x0b\x63haracterID\x18\x02 \x01(\r\x1a\x9b\x01\n\x0fSkinUnlocksData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x15\n\rskinUnlockLen\x18\x02 \x01(\x05\x12\x12\n\nskinUnlock\x18\x03 \x01(\t\x12\x17\n\x0fskinReceivedLen\x18\x04 \x01(\x05\x12\x14\n\x0cskinReceived\x18\x05 \x01(\t\x1a\x96\x02\n\x11\x44\x65layedActionData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x0c\n\x04type\x18\x02 \x01(\x05\x12\x11\n\tsourceLen\x18\x03 \x01(\x05\x12\x0e\n\x06source\x18\x04 \x01(\t\x12\x11\n\treasonLen\x18\x05 \x01(\x05\x12\x0e\n\x06reason\x18\x06 \x01(\t\x12\x42\n\nrewardData\x18\x07 \x01(\x0b\x32..Data.LandMessage.DelayedActionData.RewardData\x1a\x39\n\nRewardData\x12\r\n\x05money\x18\x01 \x01(\r\x12\x0b\n\x03\x65xp\x18\x02 \x01(\r\x12\x0f\n\x07premium\x18\x03 \x01(\r\x1ak\n\x0eSpendablesData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12)\n\tspendable\x18\x02 \x03(\x0b\x32\x16.Data.SpendableElement\x1a\xb6\x03\n\x15TimedCharacterDataSet\x12V\n\x12timedCharacterData\x18\x01 \x03(\x0b\x32:.Data.LandMessage.TimedCharacterDataSet.TimedCharacterData\x1a\xc4\x02\n\x12TimedCharacterData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12#\n\x1btimedCharacterInstanceIDLen\x18\x02 \x01(\r\x12 \n\x18timedCharacterInstanceID\x18\x03 \x01(\t\x12\x13\n\x0b\x63haracterID\x18\x04 \x01(\r\x12\x11\n\tsubLandID\x18\x05 \x01(\r\x12\x19\n\x11\x63haracterOwnerLen\x18\x06 \x01(\r\x12\x16\n\x0e\x63haracterOwner\x18\x07 \x01(\t\x12\x14\n\x0clandOwnerLen\x18\x08 \x01(\r\x12\x11\n\tlandOwner\x18\t \x01(\t\x12\x13\n\x0btimeCreated\x18\n \x01(\x03\x12\x10\n\x08lifeSpan\x18\x0b \x01(\x03\x12\x0c\n\x04\x66lag\x18\x0c \x01(\r\x1a\xd1\x03\n\x0b\x42\x61nkDataSet\x12\x38\n\x08\x62\x61nkData\x18\x01 \x03(\x0b\x32&.Data.LandMessage.BankDataSet.BankData\x1a\x8a\x01\n\x07\x44\x65posit\x12$\n\x04\x63ost\x18\x01 \x01(\x0b\x32\x16.Data.CurrencySaveData\x12\x18\n\x10\x64\x65positedByIDLen\x18\x02 \x01(\r\x12\x15\n\rdepositedByID\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65positedAt\x18\x04 \x01(\x03\x12\x13\n\x0b\x62uildingRef\x18\x05 \x01(\r\x1aI\n\x0b\x44\x65positData\x12:\n\x0b\x64\x65positData\x18\x01 \x03(\x0b\x32%.Data.LandMessage.BankDataSet.Deposit\x1a\xaf\x01\n\x08\x42\x61nkData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x13\n\x0b\x62uildingRef\x18\x02 \x01(\r\x12\x11\n\tsubLandID\x18\x03 \x01(\r\x12\x0e\n\x06\x62\x61nkID\x18\x04 \x01(\r\x12;\n\x08\x64\x65posits\x18\x06 \x01(\x0b\x32).Data.LandMessage.BankDataSet.DepositData\x1a\xe2\x08\n\x11SpecialEventsData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x46\n\x0cspecialEvent\x18\x02 \x03(\x0b\x32\x30.Data.LandMessage.SpecialEventsData.SpecialEvent\x1a\xd4\x07\n\x0cSpecialEvent\x12\n\n\x02id\x18\x01 \x01(\r\x12\x12\n\nupdateTime\x18\x04 \x01(\x03\x12$\n\tvariables\x18\x05 \x01(\x0b\x32\x11.Data.VariableSet\x12_\n\x0cprizeDataSet\x18\x06 \x01(\x0b\x32I.Data.LandMessage.SpecialEventsData.SpecialEvent.SpecialEventPrizeDataSet\x12\x46\n\x15timedCharacterDataSet\x18\x07 \x01(\x0b\x32\'.Data.LandMessage.TimedCharacterDataSet\x12\x32\n\x0b\x62\x61nkDataSet\x18\x08 \x01(\x0b\x32\x1d.Data.LandMessage.BankDataSet\x12\x34\n\x12timedAttackDataSet\x18\t \x01(\x0b\x32\x18.Data.TimedAttackDataSet\x12&\n\x0btimeGateSet\x18\n \x01(\x0b\x32\x11.Data.TimeGateSet\x12Z\n\x0egeneralBuffers\x18\x0b \x01(\x0b\x32\x42.Data.LandMessage.SpecialEventsData.SpecialEvent.GeneralBufferSets\x1a\xc5\x02\n\x18SpecialEventPrizeDataSet\x12r\n\tprizeData\x18\x01 \x03(\x0b\x32_.Data.LandMessage.SpecialEventsData.SpecialEvent.SpecialEventPrizeDataSet.SpecialEventPrizeData\x1a\xb4\x01\n\x15SpecialEventPrizeData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x13\n\x0bprizeListID\x18\x02 \x01(\r\x12\x11\n\tnextPrize\x18\x03 \x01(\r\x12\x13\n\x0bprizeChance\x18\x04 \x01(\x02\x12\x17\n\x0fnextPrizeRushed\x18\x05 \x01(\x08\x12\x15\n\rnextResetTime\x18\x06 \x01(\x03\x1a\x9e\x01\n\x11GeneralBufferSets\x12_\n\tbufferSet\x18\x01 \x03(\x0b\x32L.Data.LandMessage.SpecialEventsData.SpecialEvent.GeneralBufferSets.BufferSet\x1a(\n\tBufferSet\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x0f\n\x07\x62uffers\x18\x02 \x03(\x0c\x1a\xd0\x01\n\x0e\x46\x61keFriendData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x11\n\ttownLevel\x18\x02 \x01(\x05\x12\x13\n\x0b\x62uildingLen\x18\x03 \x01(\x05\x12\x10\n\x08\x62uilding\x18\x04 \x01(\t\x12\x15\n\ractionTypeLen\x18\x05 \x01(\x05\x12\x12\n\nactionType\x18\x06 \x01(\t\x12\x15\n\ractionTimeLen\x18\x07 \x01(\x03\x12\x12\n\nactionTime\x18\x08 \x01(\t\x1a\xbc\x02\n\x0eQuestGroupData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x14\n\x0cquestGroupID\x18\x02 \x01(\r\x12\x17\n\x0fquestGroupState\x18\x03 \x01(\x05\x12\x14\n\x0c\x63urrentChild\x18\x04 \x01(\x05\x12\x11\n\tlastChild\x18\x05 \x01(\x05\x12\x13\n\x0bnumChildren\x18\x06 \x01(\x05\x12\x16\n\x0e\x63hildIDListLen\x18\x07 \x01(\x05\x12\x15\n\rweightListLen\x18\x08 \x01(\x05\x12\x13\n\x0b\x63hildIDList\x18\t \x01(\t\x12\x12\n\nweightList\x18\n \x01(\t\x12\x18\n\x10numCompleteDaily\x18\x0b \x01(\r\x12\x1b\n\x13\x64\x61ilyCompletionTime\x18\x0c \x01(\x03\x1az\n\x15ProcessedPurchaseData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x16\n\x0eidAndCountList\x18\x02 \x01(\t\x12\x19\n\x11idAndCountListLen\x18\x03 \x01(\x05\x1a\xcc\x01\n\x16\x43ustomFriendActionData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x18\n\x10\x62uildingInstance\x18\x02 \x01(\r\x12\x12\n\nfriendName\x18\x03 \x01(\t\x12\x15\n\rfriendNameLen\x18\x04 \x01(\x05\x12\x12\n\nactionType\x18\x05 \x01(\t\x12\x15\n\ractionTypeLen\x18\x06 \x01(\x05\x12\x12\n\nisBuilding\x18\x07 \x01(\x08\x1a\xeb\x01\n\x0eGameObjectInfo\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12?\n\ngameObject\x18\x02 \x03(\x0b\x32+.Data.LandMessage.GameObjectInfo.GameObject\x1ah\n\nGameObject\x12\x0e\n\x06\x64\x61taId\x18\x01 \x01(\r\x12\x16\n\x0egameObjectType\x18\x02 \x01(\r\x12\x12\n\nunlockTime\x18\x03 \x01(\x03\x12\x0e\n\x06locked\x18\x04 \x01(\x08\x12\x0e\n\x06viewed\x18\x05 \x01(\x08\x1a\x9a\x02\n\x0bSubLandData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x11\n\tsubLandID\x18\x02 \x01(\r\x12\x12\n\nlandBlocks\x18\x03 \x01(\t\x12\x32\n\x0bterrainData\x18\x04 \x03(\x0b\x32\x1d.Data.LandMessage.TerrainData\x12\x17\n\x0f\x62uildingsSorted\x18\x05 \x01(\x08\x12\x16\n\x0elandBlockWidth\x18\x06 \x01(\r\x12\x17\n\x0flandBlockHeight\x18\x07 \x01(\r\x12\x1a\n\x12landBlockPositionX\x18\x08 \x01(\x05\x12\x1a\n\x12landBlockPositionY\x18\t \x01(\x05\x1a\xe8\x01\n\x0cMinigameData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x12\n\nminigameID\x18\x02 \x01(\r\x12\x15\n\rbuildingRefID\x18\x03 \x01(\r\x12\r\n\x05state\x18\x04 \x01(\r\x12\x12\n\nupdateTime\x18\x05 \x01(\x03\x12\x11\n\tprizeList\x18\x06 \x01(\t\x12\x14\n\x0cprizeListLen\x18\x07 \x01(\x05\x12\x16\n\x0etappedIndecies\x18\x08 \x01(\t\x12\x19\n\x11tappedIndeciesLen\x18\t \x01(\x05\x1ay\n\x13\x43ollectionItemsData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x0e\n\x06itemID\x18\x02 \x01(\r\x12\r\n\x05\x63ount\x18\x03 \x01(\r\x12\x13\n\x0bvisualCount\x18\x04 \x01(\r\x1a\x8f\x01\n\x0e\x46riendListData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x10\n\x08\x66riendID\x18\x02 \x01(\t\x12\x11\n\thideInMap\x18\x03 \x01(\x08\x12\x16\n\x0ehasBeenVisited\x18\x04 \x01(\x08\x12\x10\n\x08isOrigin\x18\x05 \x01(\x08\x1aq\n\x11\x46riendActionCount\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x0c\n\x04time\x18\x02 \x01(\x03\x12\r\n\x05\x63ount\x18\x03 \x01(\x05\x12\x0f\n\x07special\x18\x04 \x01(\x05\x1a\xb8\x01\n\x14SavedRecommendations\x12\x1a\n\x12reccomendationType\x18\x01 \x01(\x05\x12\x11\n\tentryName\x18\x02 \x01(\t\x12\x11\n\tsublandID\x18\x03 \x01(\x05\x12\x0c\n\x04time\x18\x04 \x01(\x03\x12\x15\n\rcharacterName\x18\x05 \x01(\t\x12\x0e\n\x06number\x18\x06 \x01(\x05\x12\x11\n\textraName\x18\x07 \x01(\t\x12\x16\n\x0epopularityTime\x18\x08 \x01(\x02\x1a\xfb\x01\n\x0f\x41mazonDimension\x12R\n\x13\x61mazonDimensionType\x18\x01 \x01(\x0e\x32\x35.Data.LandMessage.AmazonDimension.AmazonDimensionType\x12\x1b\n\x13\x61mazonDimensionName\x18\x02 \x01(\t\x12\x1c\n\x14\x61mazonDimensionValue\x18\x03 \x01(\t\"Y\n\x13\x41mazonDimensionType\x12 \n\x1c\x41MAZON_DIMENSION_TYPE_STRING\x10\x01\x12 \n\x1c\x41MAZON_DIMENSION_TYPE_NUMBER\x10\x02\x1a\xa7\x06\n\x10\x44\x61ilyTaskMessage\x12\x19\n\x11numTasksCompleted\x18\x01 \x01(\x05\x12\x12\n\nlastCancel\x18\x02 \x01(\x03\x12\x16\n\x0enumTasksQueued\x18\x03 \x01(\x05\x12\x13\n\x0btaskSetName\x18\x04 \x01(\t\x12\x46\n\x0ctaskDataList\x18\x05 \x03(\x0b\x32\x30.Data.LandMessage.DailyTaskMessage.DailyTaskData\x12\x12\n\nlastViewed\x18\x06 \x01(\x03\x12R\n\x10TaskCoolDownList\x18\x07 \x03(\x0b\x32\x38.Data.LandMessage.DailyTaskMessage.DailyTaskCoolDownData\x12\x19\n\x11lastTimeTaskAdded\x18\x08 \x01(\x03\x12Z\n\x12rewardCooldownList\x18\t \x03(\x0b\x32>.Data.LandMessage.DailyTaskMessage.DailyTaskRewardCoolDownData\x12\x1a\n\x12\x61\x63tiveMetaRewardID\x18\n \x01(\r\x12\x12\n\nqueuedTask\x18\x0b \x01(\r\x12\x1d\n\x15lastTimeTaskCompleted\x18\x0c \x01(\x03\x12 \n\x18totalChallengesCompleted\x18\r \x01(\x03\x12\x1b\n\x13totalTasksCompleted\x18\x0e \x01(\x03\x1ao\n\rDailyTaskData\x12\x0f\n\x07questID\x18\x01 \x01(\r\x12\x13\n\x0btimeStarted\x18\x02 \x01(\x03\x12\x14\n\x0ctimeFinished\x18\x03 \x01(\x03\x12\x10\n\x08rewardID\x18\x04 \x01(\r\x12\x10\n\x08menuSlot\x18\x05 \x01(\r\x1a\x44\n\x15\x44\x61ilyTaskCoolDownData\x12\x0f\n\x07questID\x18\x01 \x01(\r\x12\x1a\n\x12\x63ooldownExpireTime\x18\x02 \x01(\x03\x1aK\n\x1b\x44\x61ilyTaskRewardCoolDownData\x12\x10\n\x08rewardID\x18\x01 \x01(\r\x12\x1a\n\x12\x63ooldownExpireTime\x18\x02 \x01(\x03\x1aH\n\x12RoadMapDataMessage\x12\x32\n\x0broadMapList\x18\x01 \x03(\x0b\x32\x1d.Data.LandMessage.TerrainData\x1aU\n\x0f\x41\x64HocObjectData\x12.\n\x06header\x18\x01 \x01(\x0b\x32\x1e.Data.LandMessage.EntityHeader\x12\x12\n\nidentifier\x18\x02 \x01(\r\x1at\n\tTimerData\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tdeltaTime\x18\x02 \x01(\x01\x12\x11\n\tstartTime\x18\x03 \x01(\x03\x12\x0f\n\x07\x65ndTime\x18\x04 \x01(\x03\x12\x12\n\nexpiryTime\x18\x05 \x01(\x03\x12\x0e\n\x06paused\x18\x06 \x01(\x08\x1a\xb4\x03\n\x14JobCensusDataMessage\x12K\n\rjobCensusData\x18\x01 \x03(\x0b\x32\x34.Data.LandMessage.JobCensusDataMessage.JobCensusData\x1a\xce\x02\n\rJobCensusData\x12X\n\x07jobData\x18\x01 \x03(\x0b\x32G.Data.LandMessage.JobCensusDataMessage.JobCensusData.JobCensusDataEntry\x12_\n\x0ejobPremiumData\x18\x02 \x03(\x0b\x32G.Data.LandMessage.JobCensusDataMessage.JobCensusData.JobCensusDataEntry\x12\x17\n\x0fjobDataRandSeed\x18\x03 \x01(\r\x12\x12\n\nbuildingID\x18\x04 \x01(\r\x1aU\n\x12JobCensusDataEntry\x12\r\n\x05jobID\x18\x01 \x01(\r\x12\x13\n\x0b\x63haracterID\x18\x02 \x01(\r\x12\x1b\n\x13\x63haracterInstanceID\x18\x03 \x01(\r\x1a\xd1\x04\n\nDNAMessage\x12H\n\x10\x64naSessionEvents\x18\x01 \x03(\x0b\x32..Data.LandMessage.DNAMessage.DNATelemetryEvent\x12\x44\n\x0f\x64naEventsEvents\x18\x02 \x03(\x0b\x32+.Data.LandMessage.DNAMessage.DNAEventsEvent\x12I\n\x11\x64naLifeTimeEvents\x18\x03 \x03(\x0b\x32..Data.LandMessage.DNAMessage.DNATelemetryEvent\x12\x14\n\x0csessionCount\x18\x04 \x01(\x05\x1a\xdf\x01\n\x11\x44NATelemetryEvent\x12\n\n\x02id\x18\x01 \x01(\r\x12\x11\n\ttimestamp\x18\x02 \x01(\x03\x12S\n\tdnaParams\x18\x03 \x03(\x0b\x32@.Data.LandMessage.DNAMessage.DNATelemetryEvent.DNATelemetryParam\x12\x14\n\x0csessioncount\x18\x04 \x01(\r\x1a@\n\x11\x44NATelemetryParam\x12\x0c\n\x04type\x18\x01 \x01(\x05\x12\x0e\n\x06source\x18\x02 \x01(\x05\x12\r\n\x05\x65xtra\x18\x03 \x01(\x05\x1ap\n\x0e\x44NAEventsEvent\x12\x46\n\x0etelemetryEvent\x18\x01 \x03(\x0b\x32..Data.LandMessage.DNAMessage.DNATelemetryEvent\x12\x16\n\x0especialEventID\x18\x02 \x01(\x05\x1a\xd4\x05\n\x19GroupStorageBundleMessage\x12Z\n\x12groupStorageBundle\x18\x01 \x03(\x0b\x32>.Data.LandMessage.GroupStorageBundleMessage.GroupStorageBundle\x1a\xda\x04\n\x12GroupStorageBundle\x12\x7f\n\x1bgroupStorageBundleEntryData\x18\x01 \x03(\x0b\x32Z.Data.LandMessage.GroupStorageBundleMessage.GroupStorageBundle.GroupStorageBundleEntryData\x12{\n\x19groupStorageBundleRoadMap\x18\x02 \x03(\x0b\x32X.Data.LandMessage.GroupStorageBundleMessage.GroupStorageBundle.GroupStorageBundleRoadMap\x12\x12\n\noriginPosX\x18\x03 \x01(\x05\x12\x12\n\noriginPosY\x18\x04 \x01(\x05\x12\x13\n\x0btimestampId\x18\x05 \x01(\x04\x1ax\n\x1bGroupStorageBundleEntryData\x12\x10\n\x08objectID\x18\x01 \x01(\r\x12\x10\n\x08serverID\x18\x02 \x01(\r\x12\x11\n\tpositionX\x18\x03 \x01(\x05\x12\x11\n\tpositionY\x18\x04 \x01(\x05\x12\x0f\n\x07\x66lipped\x18\x05 \x01(\r\x1a\x8e\x01\n\x19GroupStorageBundleRoadMap\x12\x11\n\tsubLandID\x18\x01 \x01(\r\x12\x14\n\x0cmapDataSizeX\x18\x02 \x01(\r\x12\x14\n\x0cmapDataSizeY\x18\x03 \x01(\r\x12\x32\n\x0bterrainData\x18\x04 \x01(\x0b\x32\x1d.Data.LandMessage.TerrainData\"\xe7\x13\n\x0c\x45ventMessage\x12\n\n\x02id\x18\x01 \x01(\t\x12\x12\n\ntoPlayerId\x18\x02 \x01(\t\x12\x14\n\x0c\x66romPlayerId\x18\x03 \x01(\t\x12\x11\n\teventType\x18\x04 \x01(\t\x12\x11\n\tcreatedAt\x18\x05 \x01(\x03\x12\x11\n\tupdatedAt\x18\n \x01(\x03\x12\x0b\n\x03inc\x18\x06 \x01(\x03\x12/\n\teventData\x18\x07 \x01(\x0b\x32\x1c.Data.EventMessage.EventData\x12\x16\n\x0etargetEntityId\x18\x08 \x01(\t\x12\x13\n\x0buniqueEvent\x18\t \x01(\x08\x1a\xfc\x11\n\tEventData\x12\x1a\n\x12\x62uildingInstanceID\x18\x01 \x01(\x05\x12\x13\n\x0brequestTime\x18\x02 \x01(\x03\x12\x13\n\x0brequestType\x18\x03 \x01(\x05\x12M\n\x13\x63haracterGainedData\x18\x04 \x01(\x0b\x32\x30.Data.EventMessage.EventData.CharacterGainedData\x12I\n\x11\x63haracterLostData\x18\x05 \x01(\x0b\x32..Data.EventMessage.EventData.CharacterLostData\x12S\n\x16stealBuildingEventData\x18\x06 \x01(\x0b\x32\x33.Data.EventMessage.EventData.StealBuildingEventData\x12M\n\x13giftMemorabiliaData\x18\x07 \x01(\x0b\x32\x30.Data.EventMessage.EventData.GiftMemorabiliaData\x12I\n\x11shopCollectedData\x18\x08 \x01(\x0b\x32..Data.EventMessage.EventData.ShopCollectedData\x12K\n\x12vandalismEventData\x18\t \x01(\x0b\x32/.Data.EventMessage.EventData.VandalismEventData\x12I\n\x11sidebarUpdateData\x18\n \x01(\x0b\x32..Data.EventMessage.EventData.SidebarUpdateData\x12K\n\x12returnBuildingData\x18\x0b \x01(\x0b\x32/.Data.EventMessage.EventData.ReturnBuildingData\x12\x43\n\x0eplayScriptData\x18\x0c \x01(\x0b\x32+.Data.EventMessage.EventData.PlayScriptData\x12U\n\x17\x63ustomFriendRequestData\x18\r \x01(\x0b\x32\x34.Data.EventMessage.EventData.CustomFriendRequestData\x12W\n\x18playScriptAtPositionData\x18\x0e \x01(\x0b\x32\x35.Data.EventMessage.EventData.PlayScriptAtPositionData\x12\x16\n\x0e\x64isplayNameLen\x18\x0f \x01(\x05\x12\x13\n\x0b\x64isplayName\x18\x10 \x01(\t\x12\x11\n\tupdatedAt\x18\x11 \x01(\x03\x12W\n\x18loseResourcesRequestData\x18\x12 \x01(\x0b\x32\x35.Data.EventMessage.EventData.LoseResourcesRequestData\x1a*\n\x13\x43haracterGainedData\x12\x13\n\x0b\x63haracterID\x18\x01 \x01(\r\x1a(\n\x11\x43haracterLostData\x12\x13\n\x0b\x63haracterID\x18\x01 \x01(\r\x1al\n\x16StealBuildingEventData\x12\x1a\n\x12\x62uildingInstanceID\x18\x01 \x01(\r\x12\x12\n\nbuildingID\x18\x02 \x01(\r\x12\"\n\townerList\x18\x03 \x01(\x0b\x32\x0f.Data.OwnerList\x1a\x34\n\x13GiftMemorabiliaData\x12\r\n\x05setID\x18\x01 \x01(\x05\x12\x0e\n\x06itemID\x18\x02 \x01(\x05\x1a/\n\x11ShopCollectedData\x12\x1a\n\x12\x62uildingInstanceID\x18\x01 \x01(\r\x1a\x82\x01\n\x12VandalismEventData\x12\x1a\n\x12\x62uildingInstanceID\x18\x01 \x01(\r\x12\x12\n\nvandalized\x18\x02 \x01(\x08\x12\x0f\n\x07namelen\x18\x03 \x01(\x05\x12\x12\n\nvandalName\x18\x04 \x01(\t\x12\x17\n\x0ftimeOfVandalism\x18\x05 \x01(\x03\x1aX\n\x11SidebarUpdateData\x12\x0c\n\x04type\x18\x01 \x01(\x05\x12\r\n\x05state\x18\x02 \x01(\x05\x12\x12\n\nidentifier\x18\x03 \x01(\x05\x12\x12\n\nupdateTime\x18\x04 \x01(\x03\x1a\x61\n\x12ReturnBuildingData\x12\x12\n\nbuildingID\x18\x01 \x01(\r\x12\x13\n\x0bisOwnerList\x18\x02 \x01(\x08\x12\"\n\townerList\x18\x03 \x01(\x0b\x32\x0f.Data.OwnerList\x1ak\n\x0ePlayScriptData\x12\x15\n\rplayForFriend\x18\x01 \x01(\x08\x12\x0f\n\x07nameLen\x18\x02 \x01(\x05\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x12\n\npackageLen\x18\x04 \x01(\x05\x12\x0f\n\x07package\x18\x05 \x01(\t\x1a\x97\x01\n\x17\x43ustomFriendRequestData\x12\x12\n\nbuildingID\x18\x01 \x01(\r\x12\x15\n\rfriendNameLen\x18\x02 \x01(\x05\x12\x12\n\nfriendName\x18\x03 \x01(\t\x12\x15\n\ractionTypeLen\x18\x04 \x01(\x05\x12\x12\n\nactionType\x18\x05 \x01(\t\x12\x12\n\nisBuilding\x18\x06 \x01(\x08\x1a\xcd\x01\n\x18PlayScriptAtPositionData\x12\x15\n\rplayForFriend\x18\x01 \x01(\x08\x12\x0f\n\x07nameLen\x18\x02 \x01(\x05\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x12\n\npackageLen\x18\x04 \x01(\x05\x12\x0f\n\x07package\x18\x05 \x01(\t\x12\x0c\n\x04xPos\x18\x06 \x01(\x05\x12\x0c\n\x04yPos\x18\x07 \x01(\x05\x12\x11\n\tsublandId\x18\x08 \x01(\x05\x12\x14\n\x0cvariablesLen\x18\t \x01(\x05\x12\x11\n\tvariables\x18\n \x01(\x0c\x1ai\n\x18LoseResourcesRequestData\x12)\n\tresources\x18\x01 \x01(\x0b\x32\x16.Data.CurrencySaveData\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x12\n\nfriendName\x18\x03 \x01(\t\"2\n\rEventsMessage\x12!\n\x05\x65vent\x18\x01 \x03(\x0b\x32\x12.Data.EventMessage\"\xe5\x06\n\x10\x45xtraLandMessage\x12;\n\rcurrencyDelta\x18\x01 \x03(\x0b\x32$.Data.ExtraLandMessage.CurrencyDelta\x12!\n\x05\x65vent\x18\x02 \x03(\x0b\x32\x12.Data.EventMessage\x12\x41\n\x10pushNotification\x18\x03 \x03(\x0b\x32\'.Data.ExtraLandMessage.PushNotification\x12\x45\n\x12\x63ommunityGoalDelta\x18\x04 \x03(\x0b\x32).Data.ExtraLandMessage.CommunityGoalDelta\x12O\n\x17matchmakingRegistration\x18\x05 \x03(\x0b\x32..Data.ExtraLandMessage.MatchmakingRegistration\x12\x39\n\tdeviceIds\x18\x06 \x03(\x0b\x32&.Data.PurchaseRequestMessage.DeviceIds\x12\x45\n\x0f\x61pplicationInfo\x18\x07 \x01(\x0b\x32,.Data.PurchaseRequestMessage.ApplicationInfo\x12;\n\ndeviceInfo\x18\x08 \x01(\x0b\x32\'.Data.PurchaseRequestMessage.DeviceInfo\x1a\x61\n\rCurrencyDelta\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x0e\n\x06reason\x18\x02 \x01(\t\x12\x0e\n\x06\x61mount\x18\x03 \x01(\x05\x12\x11\n\tupdatedAt\x18\x04 \x01(\x03\x12\x11\n\tproductId\x18\x05 \x01(\t\x1an\n\x10PushNotification\x12\n\n\x02id\x18\x01 \x01(\t\x12\x12\n\ntoPlayerId\x18\x02 \x01(\t\x12\x13\n\x0bscheduledIn\x18\x03 \x01(\x05\x12\x14\n\x0ctemplateName\x18\x04 \x01(\t\x12\x0f\n\x07message\x18\x05 \x01(\t\x1a\x36\n\x12\x43ommunityGoalDelta\x12\x10\n\x08\x63\x61tegory\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\x03\x1aL\n\x17MatchmakingRegistration\x12\x10\n\x08\x63\x61tegory\x18\x01 \x01(\t\x12\x1f\n\x06params\x18\x02 \x03(\x0b\x32\x0f.Data.NameValue\"\xd7\x02\n\x11\x45xtraLandResponse\x12\x44\n\x16processedCurrencyDelta\x18\x01 \x03(\x0b\x32$.Data.ExtraLandMessage.CurrencyDelta\x12*\n\x0eprocessedEvent\x18\x02 \x03(\x0b\x32\x12.Data.EventMessage\x12)\n\rreceivedEvent\x18\x03 \x03(\x0b\x32\x12.Data.EventMessage\x12<\n\rcommunityGoal\x18\x04 \x03(\x0b\x32%.Data.ExtraLandResponse.CommunityGoal\x1ag\n\rCommunityGoal\x12\x10\n\x08\x63\x61tegory\x18\x01 \x01(\t\x12\x15\n\rprogressTotal\x18\x02 \x01(\x03\x12\x14\n\x0cprogressRate\x18\x03 \x01(\x01\x12\x17\n\x0f\x61wardThresholds\x18\x04 \x03(\x03\"\xc7\x01\n\x19\x46riendInteractionParamSet\x12\x46\n\x06params\x18\x01 \x03(\x0b\x32\x36.Data.FriendInteractionParamSet.FriendInteractionParam\x1a\x62\n\x16\x46riendInteractionParam\x12\x11\n\tstringKey\x18\x01 \x01(\t\x12\x13\n\x0bstringValue\x18\x02 \x01(\t\x12\x0e\n\x06intKey\x18\x03 \x01(\x05\x12\x10\n\x08intValue\x18\x04 \x01(\x05\"\xb9\x01\n\x14KinesisCurrencyDelta\x12;\n\rcurrencyDelta\x18\x01 \x03(\x0b\x32$.Data.ExtraLandMessage.CurrencyDelta\x12\x0e\n\x06userId\x18\x02 \x01(\t\x12\x0c\n\x04time\x18\x03 \x01(\x03\x12+\n\x0foldUserCurrency\x18\x04 \x01(\x0b\x32\x12.Data.CurrencyData\x12\x19\n\x11\x63lientSessionGUID\x18\x05 \x01(\t\"\x8c\x02\n\x14ProjectBoardParamSet\x12\x14\n\x0cnumCompleted\x18\x01 \x01(\x05\x12\x13\n\x0bstartedTime\x18\x02 \x01(\x03\x12\x37\n\x06params\x18\x03 \x03(\x0b\x32\'.Data.ProjectBoardParamSet.ProjectParam\x12\x15\n\rdismissedTime\x18\x04 \x01(\x03\x1ay\n\x0cProjectParam\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05setID\x18\x02 \x01(\x05\x12$\n\x04\x63ost\x18\x03 \x01(\x0b\x32\x16.Data.CurrencySaveData\x12&\n\x06reward\x18\x04 \x01(\x0b\x32\x16.Data.CurrencySaveData\"\xb9\x01\n\x18KinesisLandUpdateMessage\x12\"\n\x07newLand\x18\x01 \x01(\x0b\x32\x11.Data.LandMessage\x12\"\n\x07oldLand\x18\x02 \x01(\x0b\x32\x11.Data.LandMessage\x12\x12\n\nupdateTime\x18\x03 \x01(\x03\x12\x15\n\rclientVersion\x18\x04 \x01(\t\x12\x10\n\x08platform\x18\x05 \x01(\t\x12\x18\n\x10\x65ndOfSessionGUID\x18\x06 \x01(\t\"\xbd\x01\n\x0ePowerupMessage\x12\x35\n\x0bpowerupData\x18\x01 \x03(\x0b\x32 .Data.PowerupMessage.PowerupData\x1at\n\x0bPowerupData\x12\x10\n\x08\x65ntityID\x18\x01 \x01(\r\x12\x15\n\rpowerupTypeID\x18\x02 \x01(\r\x12\x13\n\x0btimeBeganMS\x18\x03 \x01(\x03\x12\x11\n\tstateEnum\x18\x04 \x01(\x05\x12\x14\n\x0ctimePausedMS\x18\x05 \x01(\x03\x42\x16\n\x14\x63om.ea.simpsons.data') 30 | 31 | _globals = globals() 32 | _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) 33 | _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'LandData_pb2', _globals) 34 | if not _descriptor._USE_C_DESCRIPTORS: 35 | _globals['DESCRIPTOR']._loaded_options = None 36 | _globals['DESCRIPTOR']._serialized_options = b'\n\024com.ea.simpsons.data' 37 | _globals['_VARIABLESET']._serialized_start=58 38 | _globals['_VARIABLESET']._serialized_end=174 39 | _globals['_VARIABLESET_VARIABLE']._serialized_start=119 40 | _globals['_VARIABLESET_VARIABLE']._serialized_end=174 41 | _globals['_SHAREDVARIABLESET']._serialized_start=177 42 | _globals['_SHAREDVARIABLESET']._serialized_end=314 43 | _globals['_SHAREDVARIABLESET_SHAREDVARIABLE']._serialized_start=256 44 | _globals['_SHAREDVARIABLESET_SHAREDVARIABLE']._serialized_end=314 45 | _globals['_TIMEGATESET']._serialized_start=317 46 | _globals['_TIMEGATESET']._serialized_end=492 47 | _globals['_TIMEGATESET_TIMEGATE']._serialized_start=378 48 | _globals['_TIMEGATESET_TIMEGATE']._serialized_end=492 49 | _globals['_ADVANCEDVARIABLESET']._serialized_start=495 50 | _globals['_ADVANCEDVARIABLESET']._serialized_end=827 51 | _globals['_ADVANCEDVARIABLESET_ADVANCEDVARIABLE']._serialized_start=581 52 | _globals['_ADVANCEDVARIABLESET_ADVANCEDVARIABLE']._serialized_end=827 53 | _globals['_TIMEDATTACKDATA']._serialized_start=830 54 | _globals['_TIMEDATTACKDATA']._serialized_end=1081 55 | _globals['_TIMEDATTACKDATASET']._serialized_start=1083 56 | _globals['_TIMEDATTACKDATASET']._serialized_end=1151 57 | _globals['_OBJECTVARIABLES']._serialized_start=1153 58 | _globals['_OBJECTVARIABLES']._serialized_end=1216 59 | _globals['_SPENDABLEELEMENT']._serialized_start=1218 60 | _globals['_SPENDABLEELEMENT']._serialized_end=1284 61 | _globals['_OWNERLIST']._serialized_start=1286 62 | _globals['_OWNERLIST']._serialized_end=1327 63 | _globals['_CURRENCYSAVEDATA']._serialized_start=1330 64 | _globals['_CURRENCYSAVEDATA']._serialized_end=1484 65 | _globals['_LANDMESSAGE']._serialized_start=1488 66 | _globals['_LANDMESSAGE']._serialized_end=22405 67 | _globals['_LANDMESSAGE_FRIENDDATA']._serialized_start=4518 68 | _globals['_LANDMESSAGE_FRIENDDATA']._serialized_end=4942 69 | _globals['_LANDMESSAGE_FRIENDDATA_SUBLANDINFO']._serialized_start=4870 70 | _globals['_LANDMESSAGE_FRIENDDATA_SUBLANDINFO']._serialized_end=4942 71 | _globals['_LANDMESSAGE_ENTITYHEADER']._serialized_start=4944 72 | _globals['_LANDMESSAGE_ENTITYHEADER']._serialized_end=4970 73 | _globals['_LANDMESSAGE_USERDATA']._serialized_start=4973 74 | _globals['_LANDMESSAGE_USERDATA']._serialized_end=6089 75 | _globals['_LANDMESSAGE_USERDATA_SAVEDRATING']._serialized_start=5984 76 | _globals['_LANDMESSAGE_USERDATA_SAVEDRATING']._serialized_end=6049 77 | _globals['_LANDMESSAGE_USERDATA_STICKERUNLOCKDATA']._serialized_start=6051 78 | _globals['_LANDMESSAGE_USERDATA_STICKERUNLOCKDATA']._serialized_end=6089 79 | _globals['_LANDMESSAGE_INNERLANDDATA']._serialized_start=6092 80 | _globals['_LANDMESSAGE_INNERLANDDATA']._serialized_end=7053 81 | _globals['_LANDMESSAGE_TERRAINDATA']._serialized_start=7056 82 | _globals['_LANDMESSAGE_TERRAINDATA']._serialized_end=7399 83 | _globals['_LANDMESSAGE_TERRAINDATA_TERRAINTYPE']._serialized_start=7222 84 | _globals['_LANDMESSAGE_TERRAINDATA_TERRAINTYPE']._serialized_end=7399 85 | _globals['_LANDMESSAGE_BUILDINGDATA']._serialized_start=7402 86 | _globals['_LANDMESSAGE_BUILDINGDATA']._serialized_end=7941 87 | _globals['_LANDMESSAGE_VECTORFLOAT']._serialized_start=7943 88 | _globals['_LANDMESSAGE_VECTORFLOAT']._serialized_end=7978 89 | _globals['_LANDMESSAGE_VECTORFLOATARRAY']._serialized_start=7980 90 | _globals['_LANDMESSAGE_VECTORFLOATARRAY']._serialized_end=8045 91 | _globals['_LANDMESSAGE_CHARACTERDATA']._serialized_start=8048 92 | _globals['_LANDMESSAGE_CHARACTERDATA']._serialized_end=8311 93 | _globals['_LANDMESSAGE_CONSUMABLEDATA']._serialized_start=8313 94 | _globals['_LANDMESSAGE_CONSUMABLEDATA']._serialized_end=8419 95 | _globals['_LANDMESSAGE_JOBDATA']._serialized_start=8422 96 | _globals['_LANDMESSAGE_JOBDATA']._serialized_end=8772 97 | _globals['_LANDMESSAGE_QUESTDATA']._serialized_start=8775 98 | _globals['_LANDMESSAGE_QUESTDATA']._serialized_end=9897 99 | _globals['_LANDMESSAGE_QUESTDATA_OBJECTIVEDATA']._serialized_start=9013 100 | _globals['_LANDMESSAGE_QUESTDATA_OBJECTIVEDATA']._serialized_end=9897 101 | _globals['_LANDMESSAGE_QUESTDATA_OBJECTIVEDATA_BUILDINGCUSTOMDATA']._serialized_start=9665 102 | _globals['_LANDMESSAGE_QUESTDATA_OBJECTIVEDATA_BUILDINGCUSTOMDATA']._serialized_end=9698 103 | _globals['_LANDMESSAGE_QUESTDATA_OBJECTIVEDATA_RESOURCESCUSTOMDATA']._serialized_start=9700 104 | _globals['_LANDMESSAGE_QUESTDATA_OBJECTIVEDATA_RESOURCESCUSTOMDATA']._serialized_end=9753 105 | _globals['_LANDMESSAGE_QUESTDATA_OBJECTIVEDATA_ITEMCOUNTCUSTOMDATA']._serialized_start=9755 106 | _globals['_LANDMESSAGE_QUESTDATA_OBJECTIVEDATA_ITEMCOUNTCUSTOMDATA']._serialized_end=9791 107 | _globals['_LANDMESSAGE_QUESTDATA_OBJECTIVEDATA_VISITFRIENDCUSTOMDATA']._serialized_start=9793 108 | _globals['_LANDMESSAGE_QUESTDATA_OBJECTIVEDATA_VISITFRIENDCUSTOMDATA']._serialized_end=9867 109 | _globals['_LANDMESSAGE_QUESTDATA_OBJECTIVEDATA_DYNAMICDATA']._serialized_start=9869 110 | _globals['_LANDMESSAGE_QUESTDATA_OBJECTIVEDATA_DYNAMICDATA']._serialized_end=9897 111 | _globals['_LANDMESSAGE_NOTIFICATIONDATA']._serialized_start=9900 112 | _globals['_LANDMESSAGE_NOTIFICATIONDATA']._serialized_end=12396 113 | _globals['_LANDMESSAGE_NOTIFICATIONDATA_CONSUMABLECALLBACK']._serialized_start=11087 114 | _globals['_LANDMESSAGE_NOTIFICATIONDATA_CONSUMABLECALLBACK']._serialized_end=11192 115 | _globals['_LANDMESSAGE_NOTIFICATIONDATA_MEMORABILIAREWARDCALLBACK']._serialized_start=11194 116 | _globals['_LANDMESSAGE_NOTIFICATIONDATA_MEMORABILIAREWARDCALLBACK']._serialized_end=11244 117 | _globals['_LANDMESSAGE_NOTIFICATIONDATA_NOTIFICATIONCALLBACK']._serialized_start=11247 118 | _globals['_LANDMESSAGE_NOTIFICATIONDATA_NOTIFICATIONCALLBACK']._serialized_end=11441 119 | _globals['_LANDMESSAGE_NOTIFICATIONDATA_GAINCHARACTERREWARDCALLBACK']._serialized_start=11444 120 | _globals['_LANDMESSAGE_NOTIFICATIONDATA_GAINCHARACTERREWARDCALLBACK']._serialized_end=11576 121 | _globals['_LANDMESSAGE_NOTIFICATIONDATA_GAINPRIZEREWARDCALLBACK']._serialized_start=11578 122 | _globals['_LANDMESSAGE_NOTIFICATIONDATA_GAINPRIZEREWARDCALLBACK']._serialized_end=11651 123 | _globals['_LANDMESSAGE_NOTIFICATIONDATA_MULTIREWARDCALLBACK']._serialized_start=11654 124 | _globals['_LANDMESSAGE_NOTIFICATIONDATA_MULTIREWARDCALLBACK']._serialized_end=12036 125 | _globals['_LANDMESSAGE_NOTIFICATIONDATA_RESOURCEANDITEMREWARDCALLBACK']._serialized_start=12039 126 | _globals['_LANDMESSAGE_NOTIFICATIONDATA_RESOURCEANDITEMREWARDCALLBACK']._serialized_end=12396 127 | _globals['_LANDMESSAGE_INVENTORYITEMDATA']._serialized_start=12399 128 | _globals['_LANDMESSAGE_INVENTORYITEMDATA']._serialized_end=12625 129 | _globals['_LANDMESSAGE_MEMORABILIAITEMDATA']._serialized_start=12627 130 | _globals['_LANDMESSAGE_MEMORABILIAITEMDATA']._serialized_end=12727 131 | _globals['_LANDMESSAGE_PREMIUMUNLOCKITEMDATA']._serialized_start=12729 132 | _globals['_LANDMESSAGE_PREMIUMUNLOCKITEMDATA']._serialized_end=12834 133 | _globals['_LANDMESSAGE_EVENTCOUNTLISTDATA']._serialized_start=12837 134 | _globals['_LANDMESSAGE_EVENTCOUNTLISTDATA']._serialized_end=13185 135 | _globals['_LANDMESSAGE_EVENTCOUNTLISTDATA_EVENT']._serialized_start=12988 136 | _globals['_LANDMESSAGE_EVENTCOUNTLISTDATA_EVENT']._serialized_end=13185 137 | _globals['_LANDMESSAGE_ACTIONLIMITDATA']._serialized_start=13188 138 | _globals['_LANDMESSAGE_ACTIONLIMITDATA']._serialized_end=13333 139 | _globals['_LANDMESSAGE_SIDEBARDATA']._serialized_start=13336 140 | _globals['_LANDMESSAGE_SIDEBARDATA']._serialized_end=13582 141 | _globals['_LANDMESSAGE_SIDEBARDATA_SIDEBARELEMENT']._serialized_start=13497 142 | _globals['_LANDMESSAGE_SIDEBARDATA_SIDEBARELEMENT']._serialized_end=13582 143 | _globals['_LANDMESSAGE_CHARACTERSETSDATA']._serialized_start=13585 144 | _globals['_LANDMESSAGE_CHARACTERSETSDATA']._serialized_end=13795 145 | _globals['_LANDMESSAGE_CHARACTERSETSDATA_CHARACTERSET']._serialized_start=13751 146 | _globals['_LANDMESSAGE_CHARACTERSETSDATA_CHARACTERSET']._serialized_end=13795 147 | _globals['_LANDMESSAGE_PUSHNOTIFICATIONSDATA']._serialized_start=13798 148 | _globals['_LANDMESSAGE_PUSHNOTIFICATIONSDATA']._serialized_end=13956 149 | _globals['_LANDMESSAGE_TIMEDSCRIPTDATA']._serialized_start=13959 150 | _globals['_LANDMESSAGE_TIMEDSCRIPTDATA']._serialized_end=14238 151 | _globals['_LANDMESSAGE_BONUSUNLOCKSDATA']._serialized_start=14241 152 | _globals['_LANDMESSAGE_BONUSUNLOCKSDATA']._serialized_end=14435 153 | _globals['_LANDMESSAGE_BONUSUNLOCKSDATA_BONUSENTRY']._serialized_start=14396 154 | _globals['_LANDMESSAGE_BONUSUNLOCKSDATA_BONUSENTRY']._serialized_end=14435 155 | _globals['_LANDMESSAGE_CHARACTERUNLOCKSDATA']._serialized_start=14437 156 | _globals['_LANDMESSAGE_CHARACTERUNLOCKSDATA']._serialized_end=14528 157 | _globals['_LANDMESSAGE_SKINUNLOCKSDATA']._serialized_start=14531 158 | _globals['_LANDMESSAGE_SKINUNLOCKSDATA']._serialized_end=14686 159 | _globals['_LANDMESSAGE_DELAYEDACTIONDATA']._serialized_start=14689 160 | _globals['_LANDMESSAGE_DELAYEDACTIONDATA']._serialized_end=14967 161 | _globals['_LANDMESSAGE_DELAYEDACTIONDATA_REWARDDATA']._serialized_start=14910 162 | _globals['_LANDMESSAGE_DELAYEDACTIONDATA_REWARDDATA']._serialized_end=14967 163 | _globals['_LANDMESSAGE_SPENDABLESDATA']._serialized_start=14969 164 | _globals['_LANDMESSAGE_SPENDABLESDATA']._serialized_end=15076 165 | _globals['_LANDMESSAGE_TIMEDCHARACTERDATASET']._serialized_start=15079 166 | _globals['_LANDMESSAGE_TIMEDCHARACTERDATASET']._serialized_end=15517 167 | _globals['_LANDMESSAGE_TIMEDCHARACTERDATASET_TIMEDCHARACTERDATA']._serialized_start=15193 168 | _globals['_LANDMESSAGE_TIMEDCHARACTERDATASET_TIMEDCHARACTERDATA']._serialized_end=15517 169 | _globals['_LANDMESSAGE_BANKDATASET']._serialized_start=15520 170 | _globals['_LANDMESSAGE_BANKDATASET']._serialized_end=15985 171 | _globals['_LANDMESSAGE_BANKDATASET_DEPOSIT']._serialized_start=15594 172 | _globals['_LANDMESSAGE_BANKDATASET_DEPOSIT']._serialized_end=15732 173 | _globals['_LANDMESSAGE_BANKDATASET_DEPOSITDATA']._serialized_start=15734 174 | _globals['_LANDMESSAGE_BANKDATASET_DEPOSITDATA']._serialized_end=15807 175 | _globals['_LANDMESSAGE_BANKDATASET_BANKDATA']._serialized_start=15810 176 | _globals['_LANDMESSAGE_BANKDATASET_BANKDATA']._serialized_end=15985 177 | _globals['_LANDMESSAGE_SPECIALEVENTSDATA']._serialized_start=15988 178 | _globals['_LANDMESSAGE_SPECIALEVENTSDATA']._serialized_end=17110 179 | _globals['_LANDMESSAGE_SPECIALEVENTSDATA_SPECIALEVENT']._serialized_start=16130 180 | _globals['_LANDMESSAGE_SPECIALEVENTSDATA_SPECIALEVENT']._serialized_end=17110 181 | _globals['_LANDMESSAGE_SPECIALEVENTSDATA_SPECIALEVENT_SPECIALEVENTPRIZEDATASET']._serialized_start=16624 182 | _globals['_LANDMESSAGE_SPECIALEVENTSDATA_SPECIALEVENT_SPECIALEVENTPRIZEDATASET']._serialized_end=16949 183 | _globals['_LANDMESSAGE_SPECIALEVENTSDATA_SPECIALEVENT_SPECIALEVENTPRIZEDATASET_SPECIALEVENTPRIZEDATA']._serialized_start=16769 184 | _globals['_LANDMESSAGE_SPECIALEVENTSDATA_SPECIALEVENT_SPECIALEVENTPRIZEDATASET_SPECIALEVENTPRIZEDATA']._serialized_end=16949 185 | _globals['_LANDMESSAGE_SPECIALEVENTSDATA_SPECIALEVENT_GENERALBUFFERSETS']._serialized_start=16952 186 | _globals['_LANDMESSAGE_SPECIALEVENTSDATA_SPECIALEVENT_GENERALBUFFERSETS']._serialized_end=17110 187 | _globals['_LANDMESSAGE_SPECIALEVENTSDATA_SPECIALEVENT_GENERALBUFFERSETS_BUFFERSET']._serialized_start=17070 188 | _globals['_LANDMESSAGE_SPECIALEVENTSDATA_SPECIALEVENT_GENERALBUFFERSETS_BUFFERSET']._serialized_end=17110 189 | _globals['_LANDMESSAGE_FAKEFRIENDDATA']._serialized_start=17113 190 | _globals['_LANDMESSAGE_FAKEFRIENDDATA']._serialized_end=17321 191 | _globals['_LANDMESSAGE_QUESTGROUPDATA']._serialized_start=17324 192 | _globals['_LANDMESSAGE_QUESTGROUPDATA']._serialized_end=17640 193 | _globals['_LANDMESSAGE_PROCESSEDPURCHASEDATA']._serialized_start=17642 194 | _globals['_LANDMESSAGE_PROCESSEDPURCHASEDATA']._serialized_end=17764 195 | _globals['_LANDMESSAGE_CUSTOMFRIENDACTIONDATA']._serialized_start=17767 196 | _globals['_LANDMESSAGE_CUSTOMFRIENDACTIONDATA']._serialized_end=17971 197 | _globals['_LANDMESSAGE_GAMEOBJECTINFO']._serialized_start=17974 198 | _globals['_LANDMESSAGE_GAMEOBJECTINFO']._serialized_end=18209 199 | _globals['_LANDMESSAGE_GAMEOBJECTINFO_GAMEOBJECT']._serialized_start=18105 200 | _globals['_LANDMESSAGE_GAMEOBJECTINFO_GAMEOBJECT']._serialized_end=18209 201 | _globals['_LANDMESSAGE_SUBLANDDATA']._serialized_start=18212 202 | _globals['_LANDMESSAGE_SUBLANDDATA']._serialized_end=18494 203 | _globals['_LANDMESSAGE_MINIGAMEDATA']._serialized_start=18497 204 | _globals['_LANDMESSAGE_MINIGAMEDATA']._serialized_end=18729 205 | _globals['_LANDMESSAGE_COLLECTIONITEMSDATA']._serialized_start=18731 206 | _globals['_LANDMESSAGE_COLLECTIONITEMSDATA']._serialized_end=18852 207 | _globals['_LANDMESSAGE_FRIENDLISTDATA']._serialized_start=18855 208 | _globals['_LANDMESSAGE_FRIENDLISTDATA']._serialized_end=18998 209 | _globals['_LANDMESSAGE_FRIENDACTIONCOUNT']._serialized_start=19000 210 | _globals['_LANDMESSAGE_FRIENDACTIONCOUNT']._serialized_end=19113 211 | _globals['_LANDMESSAGE_SAVEDRECOMMENDATIONS']._serialized_start=19116 212 | _globals['_LANDMESSAGE_SAVEDRECOMMENDATIONS']._serialized_end=19300 213 | _globals['_LANDMESSAGE_AMAZONDIMENSION']._serialized_start=19303 214 | _globals['_LANDMESSAGE_AMAZONDIMENSION']._serialized_end=19554 215 | _globals['_LANDMESSAGE_AMAZONDIMENSION_AMAZONDIMENSIONTYPE']._serialized_start=19465 216 | _globals['_LANDMESSAGE_AMAZONDIMENSION_AMAZONDIMENSIONTYPE']._serialized_end=19554 217 | _globals['_LANDMESSAGE_DAILYTASKMESSAGE']._serialized_start=19557 218 | _globals['_LANDMESSAGE_DAILYTASKMESSAGE']._serialized_end=20364 219 | _globals['_LANDMESSAGE_DAILYTASKMESSAGE_DAILYTASKDATA']._serialized_start=20106 220 | _globals['_LANDMESSAGE_DAILYTASKMESSAGE_DAILYTASKDATA']._serialized_end=20217 221 | _globals['_LANDMESSAGE_DAILYTASKMESSAGE_DAILYTASKCOOLDOWNDATA']._serialized_start=20219 222 | _globals['_LANDMESSAGE_DAILYTASKMESSAGE_DAILYTASKCOOLDOWNDATA']._serialized_end=20287 223 | _globals['_LANDMESSAGE_DAILYTASKMESSAGE_DAILYTASKREWARDCOOLDOWNDATA']._serialized_start=20289 224 | _globals['_LANDMESSAGE_DAILYTASKMESSAGE_DAILYTASKREWARDCOOLDOWNDATA']._serialized_end=20364 225 | _globals['_LANDMESSAGE_ROADMAPDATAMESSAGE']._serialized_start=20366 226 | _globals['_LANDMESSAGE_ROADMAPDATAMESSAGE']._serialized_end=20438 227 | _globals['_LANDMESSAGE_ADHOCOBJECTDATA']._serialized_start=20440 228 | _globals['_LANDMESSAGE_ADHOCOBJECTDATA']._serialized_end=20525 229 | _globals['_LANDMESSAGE_TIMERDATA']._serialized_start=20527 230 | _globals['_LANDMESSAGE_TIMERDATA']._serialized_end=20643 231 | _globals['_LANDMESSAGE_JOBCENSUSDATAMESSAGE']._serialized_start=20646 232 | _globals['_LANDMESSAGE_JOBCENSUSDATAMESSAGE']._serialized_end=21082 233 | _globals['_LANDMESSAGE_JOBCENSUSDATAMESSAGE_JOBCENSUSDATA']._serialized_start=20748 234 | _globals['_LANDMESSAGE_JOBCENSUSDATAMESSAGE_JOBCENSUSDATA']._serialized_end=21082 235 | _globals['_LANDMESSAGE_JOBCENSUSDATAMESSAGE_JOBCENSUSDATA_JOBCENSUSDATAENTRY']._serialized_start=20997 236 | _globals['_LANDMESSAGE_JOBCENSUSDATAMESSAGE_JOBCENSUSDATA_JOBCENSUSDATAENTRY']._serialized_end=21082 237 | _globals['_LANDMESSAGE_DNAMESSAGE']._serialized_start=21085 238 | _globals['_LANDMESSAGE_DNAMESSAGE']._serialized_end=21678 239 | _globals['_LANDMESSAGE_DNAMESSAGE_DNATELEMETRYEVENT']._serialized_start=21341 240 | _globals['_LANDMESSAGE_DNAMESSAGE_DNATELEMETRYEVENT']._serialized_end=21564 241 | _globals['_LANDMESSAGE_DNAMESSAGE_DNATELEMETRYEVENT_DNATELEMETRYPARAM']._serialized_start=21500 242 | _globals['_LANDMESSAGE_DNAMESSAGE_DNATELEMETRYEVENT_DNATELEMETRYPARAM']._serialized_end=21564 243 | _globals['_LANDMESSAGE_DNAMESSAGE_DNAEVENTSEVENT']._serialized_start=21566 244 | _globals['_LANDMESSAGE_DNAMESSAGE_DNAEVENTSEVENT']._serialized_end=21678 245 | _globals['_LANDMESSAGE_GROUPSTORAGEBUNDLEMESSAGE']._serialized_start=21681 246 | _globals['_LANDMESSAGE_GROUPSTORAGEBUNDLEMESSAGE']._serialized_end=22405 247 | _globals['_LANDMESSAGE_GROUPSTORAGEBUNDLEMESSAGE_GROUPSTORAGEBUNDLE']._serialized_start=21803 248 | _globals['_LANDMESSAGE_GROUPSTORAGEBUNDLEMESSAGE_GROUPSTORAGEBUNDLE']._serialized_end=22405 249 | _globals['_LANDMESSAGE_GROUPSTORAGEBUNDLEMESSAGE_GROUPSTORAGEBUNDLE_GROUPSTORAGEBUNDLEENTRYDATA']._serialized_start=22140 250 | _globals['_LANDMESSAGE_GROUPSTORAGEBUNDLEMESSAGE_GROUPSTORAGEBUNDLE_GROUPSTORAGEBUNDLEENTRYDATA']._serialized_end=22260 251 | _globals['_LANDMESSAGE_GROUPSTORAGEBUNDLEMESSAGE_GROUPSTORAGEBUNDLE_GROUPSTORAGEBUNDLEROADMAP']._serialized_start=22263 252 | _globals['_LANDMESSAGE_GROUPSTORAGEBUNDLEMESSAGE_GROUPSTORAGEBUNDLE_GROUPSTORAGEBUNDLEROADMAP']._serialized_end=22405 253 | _globals['_EVENTMESSAGE']._serialized_start=22408 254 | _globals['_EVENTMESSAGE']._serialized_end=24943 255 | _globals['_EVENTMESSAGE_EVENTDATA']._serialized_start=22643 256 | _globals['_EVENTMESSAGE_EVENTDATA']._serialized_end=24943 257 | _globals['_EVENTMESSAGE_EVENTDATA_CHARACTERGAINEDDATA']._serialized_start=23746 258 | _globals['_EVENTMESSAGE_EVENTDATA_CHARACTERGAINEDDATA']._serialized_end=23788 259 | _globals['_EVENTMESSAGE_EVENTDATA_CHARACTERLOSTDATA']._serialized_start=23790 260 | _globals['_EVENTMESSAGE_EVENTDATA_CHARACTERLOSTDATA']._serialized_end=23830 261 | _globals['_EVENTMESSAGE_EVENTDATA_STEALBUILDINGEVENTDATA']._serialized_start=23832 262 | _globals['_EVENTMESSAGE_EVENTDATA_STEALBUILDINGEVENTDATA']._serialized_end=23940 263 | _globals['_EVENTMESSAGE_EVENTDATA_GIFTMEMORABILIADATA']._serialized_start=23942 264 | _globals['_EVENTMESSAGE_EVENTDATA_GIFTMEMORABILIADATA']._serialized_end=23994 265 | _globals['_EVENTMESSAGE_EVENTDATA_SHOPCOLLECTEDDATA']._serialized_start=23996 266 | _globals['_EVENTMESSAGE_EVENTDATA_SHOPCOLLECTEDDATA']._serialized_end=24043 267 | _globals['_EVENTMESSAGE_EVENTDATA_VANDALISMEVENTDATA']._serialized_start=24046 268 | _globals['_EVENTMESSAGE_EVENTDATA_VANDALISMEVENTDATA']._serialized_end=24176 269 | _globals['_EVENTMESSAGE_EVENTDATA_SIDEBARUPDATEDATA']._serialized_start=24178 270 | _globals['_EVENTMESSAGE_EVENTDATA_SIDEBARUPDATEDATA']._serialized_end=24266 271 | _globals['_EVENTMESSAGE_EVENTDATA_RETURNBUILDINGDATA']._serialized_start=24268 272 | _globals['_EVENTMESSAGE_EVENTDATA_RETURNBUILDINGDATA']._serialized_end=24365 273 | _globals['_EVENTMESSAGE_EVENTDATA_PLAYSCRIPTDATA']._serialized_start=24367 274 | _globals['_EVENTMESSAGE_EVENTDATA_PLAYSCRIPTDATA']._serialized_end=24474 275 | _globals['_EVENTMESSAGE_EVENTDATA_CUSTOMFRIENDREQUESTDATA']._serialized_start=24477 276 | _globals['_EVENTMESSAGE_EVENTDATA_CUSTOMFRIENDREQUESTDATA']._serialized_end=24628 277 | _globals['_EVENTMESSAGE_EVENTDATA_PLAYSCRIPTATPOSITIONDATA']._serialized_start=24631 278 | _globals['_EVENTMESSAGE_EVENTDATA_PLAYSCRIPTATPOSITIONDATA']._serialized_end=24836 279 | _globals['_EVENTMESSAGE_EVENTDATA_LOSERESOURCESREQUESTDATA']._serialized_start=24838 280 | _globals['_EVENTMESSAGE_EVENTDATA_LOSERESOURCESREQUESTDATA']._serialized_end=24943 281 | _globals['_EVENTSMESSAGE']._serialized_start=24945 282 | _globals['_EVENTSMESSAGE']._serialized_end=24995 283 | _globals['_EXTRALANDMESSAGE']._serialized_start=24998 284 | _globals['_EXTRALANDMESSAGE']._serialized_end=25867 285 | _globals['_EXTRALANDMESSAGE_CURRENCYDELTA']._serialized_start=25524 286 | _globals['_EXTRALANDMESSAGE_CURRENCYDELTA']._serialized_end=25621 287 | _globals['_EXTRALANDMESSAGE_PUSHNOTIFICATION']._serialized_start=25623 288 | _globals['_EXTRALANDMESSAGE_PUSHNOTIFICATION']._serialized_end=25733 289 | _globals['_EXTRALANDMESSAGE_COMMUNITYGOALDELTA']._serialized_start=25735 290 | _globals['_EXTRALANDMESSAGE_COMMUNITYGOALDELTA']._serialized_end=25789 291 | _globals['_EXTRALANDMESSAGE_MATCHMAKINGREGISTRATION']._serialized_start=25791 292 | _globals['_EXTRALANDMESSAGE_MATCHMAKINGREGISTRATION']._serialized_end=25867 293 | _globals['_EXTRALANDRESPONSE']._serialized_start=25870 294 | _globals['_EXTRALANDRESPONSE']._serialized_end=26213 295 | _globals['_EXTRALANDRESPONSE_COMMUNITYGOAL']._serialized_start=26110 296 | _globals['_EXTRALANDRESPONSE_COMMUNITYGOAL']._serialized_end=26213 297 | _globals['_FRIENDINTERACTIONPARAMSET']._serialized_start=26216 298 | _globals['_FRIENDINTERACTIONPARAMSET']._serialized_end=26415 299 | _globals['_FRIENDINTERACTIONPARAMSET_FRIENDINTERACTIONPARAM']._serialized_start=26317 300 | _globals['_FRIENDINTERACTIONPARAMSET_FRIENDINTERACTIONPARAM']._serialized_end=26415 301 | _globals['_KINESISCURRENCYDELTA']._serialized_start=26418 302 | _globals['_KINESISCURRENCYDELTA']._serialized_end=26603 303 | _globals['_PROJECTBOARDPARAMSET']._serialized_start=26606 304 | _globals['_PROJECTBOARDPARAMSET']._serialized_end=26874 305 | _globals['_PROJECTBOARDPARAMSET_PROJECTPARAM']._serialized_start=26753 306 | _globals['_PROJECTBOARDPARAMSET_PROJECTPARAM']._serialized_end=26874 307 | _globals['_KINESISLANDUPDATEMESSAGE']._serialized_start=26877 308 | _globals['_KINESISLANDUPDATEMESSAGE']._serialized_end=27062 309 | _globals['_POWERUPMESSAGE']._serialized_start=27065 310 | _globals['_POWERUPMESSAGE']._serialized_end=27254 311 | _globals['_POWERUPMESSAGE_POWERUPDATA']._serialized_start=27138 312 | _globals['_POWERUPMESSAGE_POWERUPDATA']._serialized_end=27254 313 | # @@protoc_insertion_point(module_scope) 314 | -------------------------------------------------------------------------------- /MatchmakingData_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # NO CHECKED-IN PROTOBUF GENCODE 4 | # source: MatchmakingData.proto 5 | # Protobuf Python Version: 5.28.3 6 | """Generated protocol buffer code.""" 7 | from google.protobuf import descriptor as _descriptor 8 | from google.protobuf import descriptor_pool as _descriptor_pool 9 | from google.protobuf import runtime_version as _runtime_version 10 | from google.protobuf import symbol_database as _symbol_database 11 | from google.protobuf.internal import builder as _builder 12 | _runtime_version.ValidateProtobufRuntimeVersion( 13 | _runtime_version.Domain.PUBLIC, 14 | 5, 15 | 28, 16 | 3, 17 | '', 18 | 'MatchmakingData.proto' 19 | ) 20 | # @@protoc_insertion_point(imports) 21 | 22 | _sym_db = _symbol_database.Default() 23 | 24 | 25 | import Error_pb2 as Error__pb2 26 | import LandData_pb2 as LandData__pb2 27 | 28 | 29 | DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15MatchmakingData.proto\x12\x04\x44\x61ta\x1a\x0b\x45rror.proto\x1a\x0eLandData.proto\"\x93\x01\n\x1aMatchmakingResponseMessage\x12/\n\x0fmatchedUserLand\x18\x01 \x01(\x0b\x32\x11.Data.LandMessageH\x00\x88\x01\x01\x12&\n\x05\x65rror\x18\x02 \x01(\x0b\x32\x12.Data.ErrorMessageH\x01\x88\x01\x01\x42\x12\n\x10_matchedUserLandB\x08\n\x06_errorB\x16\n\x14\x63om.ea.simpsons.datab\x06proto3') 30 | 31 | _globals = globals() 32 | _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) 33 | _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'MatchmakingData_pb2', _globals) 34 | if not _descriptor._USE_C_DESCRIPTORS: 35 | _globals['DESCRIPTOR']._loaded_options = None 36 | _globals['DESCRIPTOR']._serialized_options = b'\n\024com.ea.simpsons.data' 37 | _globals['_MATCHMAKINGRESPONSEMESSAGE']._serialized_start=61 38 | _globals['_MATCHMAKINGRESPONSEMESSAGE']._serialized_end=208 39 | # @@protoc_insertion_point(module_scope) 40 | -------------------------------------------------------------------------------- /OffersData_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # NO CHECKED-IN PROTOBUF GENCODE 4 | # source: OffersData.proto 5 | # Protobuf Python Version: 5.28.3 6 | """Generated protocol buffer code.""" 7 | from google.protobuf import descriptor as _descriptor 8 | from google.protobuf import descriptor_pool as _descriptor_pool 9 | from google.protobuf import runtime_version as _runtime_version 10 | from google.protobuf import symbol_database as _symbol_database 11 | from google.protobuf.internal import builder as _builder 12 | _runtime_version.ValidateProtobufRuntimeVersion( 13 | _runtime_version.Domain.PUBLIC, 14 | 5, 15 | 28, 16 | 3, 17 | '', 18 | 'OffersData.proto' 19 | ) 20 | # @@protoc_insertion_point(imports) 21 | 22 | _sym_db = _symbol_database.Default() 23 | 24 | 25 | import Error_pb2 as Error__pb2 26 | 27 | 28 | DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10OffersData.proto\x12\x04\x44\x61ta\x1a\x0b\x45rror.proto\"\xd6\x0c\n\x15OffersResponseMessage\x12\x39\n\nofferItems\x18\x01 \x03(\x0b\x32%.Data.OffersResponseMessage.OfferItem\x12K\n\x13popularityRangeList\x18\x02 \x03(\x0b\x32..Data.OffersResponseMessage.ItemPopularityList\x12!\n\x05\x65rror\x18\x03 \x01(\x0b\x32\x12.Data.ErrorMessage\x12\x43\n\x0flevelUpXpOffers\x18\x04 \x03(\x0b\x32*.Data.OffersResponseMessage.LevelUpXpOffer\x12J\n\x12priceOverrideOffer\x18\x05 \x03(\x0b\x32..Data.OffersResponseMessage.PriceOverrideOffer\x1a\xc7\x02\n\tOfferItem\x12\x42\n\tofferType\x18\x01 \x01(\x0e\x32/.Data.OffersResponseMessage.OfferItem.OfferType\x12\x11\n\tproductId\x18\x02 \x01(\t\x12T\n\x12recommendationType\x18\x03 \x01(\x0e\x32\x38.Data.OffersResponseMessage.OfferItem.RecommendationType\"N\n\tOfferType\x12\x07\n\x03MTX\x10\x01\x12\x0b\n\x07PREMIUM\x10\x02\x12\r\n\tCHARACTER\x10\x03\x12\x0c\n\x08\x42UILDING\x10\x04\x12\x0e\n\nCONSUMABLE\x10\x05\"=\n\x12RecommendationType\x12\r\n\tRECOMMEND\x10\x01\x12\t\n\x05WATCH\x10\x02\x12\r\n\tNOCONVERT\x10\x03\x1a\xd1\x02\n\x12ItemPopularityList\x12\x13\n\x0b\x64isplayName\x18\x01 \x01(\t\x12V\n\x12popularityItemList\x18\x03 \x03(\x0b\x32:.Data.OffersResponseMessage.ItemPopularityList.PopularItem\x1a\xcd\x01\n\x0bPopularItem\x12W\n\x0epopularityType\x18\x01 \x01(\x0e\x32?.Data.OffersResponseMessage.ItemPopularityList.PopularItem.Type\x12\n\n\x02id\x18\x02 \x01(\x05\x12\r\n\x05\x63ount\x18\x03 \x01(\x05\"J\n\x04Type\x12\x0c\n\x08\x42UILDING\x10\x01\x12\r\n\tCHARACTER\x10\x02\x12\x0e\n\nCONSUMABLE\x10\x03\x12\x08\n\x04SKIN\x10\x04\x12\x0b\n\x07UNKNOWN\x10\x05\x1a\xfa\x01\n\x0eLevelUpXpOffer\x12\r\n\x05level\x18\x01 \x01(\x05\x12\x16\n\x0expForNextLevel\x18\x02 \x01(\x05\x12\x18\n\x10\x64onutAwardAmount\x18\x03 \x01(\x05\x12\x18\n\x10moneyAwardAmount\x18\x04 \x01(\x05\x12W\n\x11levelUpRecordType\x18\x05 \x01(\x0e\x32<.Data.OffersResponseMessage.LevelUpXpOffer.LevelUpRecordType\"4\n\x11LevelUpRecordType\x12\t\n\x05OFFER\x10\x01\x12\x14\n\x10\x43ONVERSION_EVENT\x10\x02\x1a\xe5\x02\n\x12PriceOverrideOffer\x12Y\n\x10overrideItemType\x18\x01 \x01(\x0e\x32?.Data.OffersResponseMessage.PriceOverrideOffer.OverrideItemType\x12\x11\n\tproductId\x18\x02 \x01(\t\x12[\n\x11\x63urrencyPriceType\x18\x03 \x01(\x0e\x32@.Data.OffersResponseMessage.PriceOverrideOffer.CurrencyPriceType\x12\x16\n\x0e\x63urrencyAmount\x18\x04 \x01(\x05\"?\n\x10OverrideItemType\x12\r\n\tCHARACTER\x10\x01\x12\x0c\n\x08\x42UILDING\x10\x02\x12\x0e\n\nCONSUMABLE\x10\x03\"+\n\x11\x43urrencyPriceType\x12\t\n\x05GRIND\x10\x01\x12\x0b\n\x07PREMIUM\x10\x02\x42\x16\n\x14\x63om.ea.simpsons.data') 29 | 30 | _globals = globals() 31 | _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) 32 | _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'OffersData_pb2', _globals) 33 | if not _descriptor._USE_C_DESCRIPTORS: 34 | _globals['DESCRIPTOR']._loaded_options = None 35 | _globals['DESCRIPTOR']._serialized_options = b'\n\024com.ea.simpsons.data' 36 | _globals['_OFFERSRESPONSEMESSAGE']._serialized_start=40 37 | _globals['_OFFERSRESPONSEMESSAGE']._serialized_end=1662 38 | _globals['_OFFERSRESPONSEMESSAGE_OFFERITEM']._serialized_start=382 39 | _globals['_OFFERSRESPONSEMESSAGE_OFFERITEM']._serialized_end=709 40 | _globals['_OFFERSRESPONSEMESSAGE_OFFERITEM_OFFERTYPE']._serialized_start=568 41 | _globals['_OFFERSRESPONSEMESSAGE_OFFERITEM_OFFERTYPE']._serialized_end=646 42 | _globals['_OFFERSRESPONSEMESSAGE_OFFERITEM_RECOMMENDATIONTYPE']._serialized_start=648 43 | _globals['_OFFERSRESPONSEMESSAGE_OFFERITEM_RECOMMENDATIONTYPE']._serialized_end=709 44 | _globals['_OFFERSRESPONSEMESSAGE_ITEMPOPULARITYLIST']._serialized_start=712 45 | _globals['_OFFERSRESPONSEMESSAGE_ITEMPOPULARITYLIST']._serialized_end=1049 46 | _globals['_OFFERSRESPONSEMESSAGE_ITEMPOPULARITYLIST_POPULARITEM']._serialized_start=844 47 | _globals['_OFFERSRESPONSEMESSAGE_ITEMPOPULARITYLIST_POPULARITEM']._serialized_end=1049 48 | _globals['_OFFERSRESPONSEMESSAGE_ITEMPOPULARITYLIST_POPULARITEM_TYPE']._serialized_start=975 49 | _globals['_OFFERSRESPONSEMESSAGE_ITEMPOPULARITYLIST_POPULARITEM_TYPE']._serialized_end=1049 50 | _globals['_OFFERSRESPONSEMESSAGE_LEVELUPXPOFFER']._serialized_start=1052 51 | _globals['_OFFERSRESPONSEMESSAGE_LEVELUPXPOFFER']._serialized_end=1302 52 | _globals['_OFFERSRESPONSEMESSAGE_LEVELUPXPOFFER_LEVELUPRECORDTYPE']._serialized_start=1250 53 | _globals['_OFFERSRESPONSEMESSAGE_LEVELUPXPOFFER_LEVELUPRECORDTYPE']._serialized_end=1302 54 | _globals['_OFFERSRESPONSEMESSAGE_PRICEOVERRIDEOFFER']._serialized_start=1305 55 | _globals['_OFFERSRESPONSEMESSAGE_PRICEOVERRIDEOFFER']._serialized_end=1662 56 | _globals['_OFFERSRESPONSEMESSAGE_PRICEOVERRIDEOFFER_OVERRIDEITEMTYPE']._serialized_start=1554 57 | _globals['_OFFERSRESPONSEMESSAGE_PRICEOVERRIDEOFFER_OVERRIDEITEMTYPE']._serialized_end=1617 58 | _globals['_OFFERSRESPONSEMESSAGE_PRICEOVERRIDEOFFER_CURRENCYPRICETYPE']._serialized_start=1619 59 | _globals['_OFFERSRESPONSEMESSAGE_PRICEOVERRIDEOFFER_CURRENCYPRICETYPE']._serialized_end=1662 60 | # @@protoc_insertion_point(module_scope) 61 | -------------------------------------------------------------------------------- /PurchaseData_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # NO CHECKED-IN PROTOBUF GENCODE 4 | # source: PurchaseData.proto 5 | # Protobuf Python Version: 5.28.3 6 | """Generated protocol buffer code.""" 7 | from google.protobuf import descriptor as _descriptor 8 | from google.protobuf import descriptor_pool as _descriptor_pool 9 | from google.protobuf import runtime_version as _runtime_version 10 | from google.protobuf import symbol_database as _symbol_database 11 | from google.protobuf.internal import builder as _builder 12 | _runtime_version.ValidateProtobufRuntimeVersion( 13 | _runtime_version.Domain.PUBLIC, 14 | 5, 15 | 28, 16 | 3, 17 | '', 18 | 'PurchaseData.proto' 19 | ) 20 | # @@protoc_insertion_point(imports) 21 | 22 | _sym_db = _symbol_database.Default() 23 | 24 | 25 | 26 | 27 | DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12PurchaseData.proto\x12\x04\x44\x61ta\"S\n\x11PurchasedItemData\x12\x11\n\tproductId\x18\x01 \x01(\t\x12\x15\n\rpurchasePrice\x18\x02 \x01(\t\x12\x14\n\x0cpurchaseDate\x18\x03 \x01(\x03\"\x99\x01\n\x0c\x43urrencyData\x12\n\n\x02id\x18\x01 \x01(\t\x12\x18\n\x10vcTotalPurchased\x18\x02 \x01(\x05\x12\x16\n\x0evcTotalAwarded\x18\x03 \x01(\x05\x12\x11\n\tvcBalance\x18\x04 \x01(\x05\x12\x11\n\tcreatedAt\x18\x05 \x01(\x03\x12\x11\n\tupdatedAt\x18\x06 \x01(\x03\x12\x12\n\nunverified\x18\x07 \x01(\x05\"/\n\x11PurchaseErrorData\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x05\x12\x0c\n\x04type\x18\x02 \x01(\t\"\xe6\x01\n\x17PurchaseResponseMessage\x12$\n\x08\x63urrency\x18\x01 \x01(\x0b\x32\x12.Data.CurrencyData\x12*\n\tpurchases\x18\x02 \x03(\x0b\x32\x17.Data.PurchasedItemData\x12&\n\x05\x65rror\x18\x03 \x01(\x0b\x32\x17.Data.PurchaseErrorData\x12\"\n\torderData\x18\x04 \x03(\x0b\x32\x0f.Data.OrderData\x12-\n\rsubscriptions\x18\x05 \x03(\x0b\x32\x16.Data.SubscriptionData\"\xb1\x07\n\x16PurchaseRequestMessage\x12\x0f\n\x07receipt\x18\x01 \x01(\t\x12\x12\n\nsignedData\x18\x02 \x01(\t\x12\x11\n\tsignature\x18\x03 \x01(\t\x12(\n\x08platform\x18\x04 \x01(\x0e\x32\x16.Data.PurchasePlatform\x12\x15\n\rpurchaseToken\x18\x05 \x01(\t\x12\x14\n\x0c\x61mazonUserId\x18\x06 \x01(\t\x12=\n\x0bpaymentInfo\x18\x07 \x03(\x0b\x32(.Data.PurchaseRequestMessage.PaymentInfo\x12\x39\n\tdeviceIds\x18\x08 \x03(\x0b\x32&.Data.PurchaseRequestMessage.DeviceIds\x12\x45\n\x0f\x61pplicationInfo\x18\t \x01(\x0b\x32,.Data.PurchaseRequestMessage.ApplicationInfo\x12;\n\ndeviceInfo\x18\n \x01(\x0b\x32\'.Data.PurchaseRequestMessage.DeviceInfo\x12\x1c\n\x14synergySystemVersion\x18\x0b \x01(\t\x12\x16\n\x0eisSubscription\x18\x0c \x01(\x08\x1aQ\n\x0bPaymentInfo\x12\x15\n\rtransactionId\x18\x01 \x01(\t\x12\x15\n\rpurchasePrice\x18\x02 \x01(\t\x12\x14\n\x0c\x63urrencyCode\x18\x03 \x01(\t\x1a\x35\n\tDeviceIds\x12\x1c\n\x04type\x18\x01 \x01(\x0e\x32\x0e.Data.DeviceId\x12\n\n\x02id\x18\x02 \x01(\t\x1a\xbb\x01\n\x0f\x41pplicationInfo\x12\x11\n\ttimestamp\x18\x01 \x01(\x03\x12\x10\n\x08\x62undleId\x18\x02 \x01(\t\x12\x0f\n\x07\x61ppName\x18\x03 \x01(\t\x12\x12\n\nappVersion\x18\x04 \x01(\t\x12\x13\n\x0b\x61ppLanguage\x18\x05 \x01(\t\x12\x13\n\x0b\x63ountryCode\x18\x06 \x01(\t\x12\x15\n\rfacebookAppId\x18\x07 \x01(\t\x12\x1d\n\x15\x66\x61\x63\x65\x62ookAttributionId\x18\x08 \x01(\t\x1a\x8b\x01\n\nDeviceInfo\x12\x12\n\nsystemName\x18\x01 \x01(\t\x12\x17\n\x0flimitAdTracking\x18\x02 \x01(\x08\x12\x16\n\x0e\x64\x65viceNativeId\x18\x03 \x01(\t\x12\x12\n\ndeviceType\x18\x04 \x01(\t\x12\x16\n\x0eiadAttribution\x18\x05 \x01(\x08\x12\x0c\n\x04imei\x18\x06 \x01(\t\"\xef\x01\n\tOrderData\x12\x16\n\x0enotificationId\x18\x01 \x01(\t\x12\x0f\n\x07orderId\x18\x02 \x01(\t\x12\x32\n\x05state\x18\x03 \x01(\x0e\x32\x1a.Data.OrderData.OrderState:\x07IGNORED\x12(\n\x08platform\x18\x04 \x01(\x0e\x32\x16.Data.PurchasePlatform\x12\x15\n\rpurchaseToken\x18\x05 \x01(\t\x12\x12\n\nsignedData\x18\x06 \x01(\t\"0\n\nOrderState\x12\t\n\x05VALID\x10\x00\x12\x0b\n\x07IGNORED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\"\x96\x01\n\x10SubscriptionData\x12\x16\n\x0esubscriptionId\x18\x01 \x01(\t\x12\x12\n\npurchaseId\x18\x02 \x01(\t\x12(\n\x08platform\x18\x03 \x01(\x0e\x32\x16.Data.PurchasePlatform\x12\x14\n\x0cpurchaseDate\x18\x04 \x01(\x03\x12\x16\n\x0evalidationDate\x18\x05 \x01(\x03*\x95\x01\n\x10PurchasePlatform\x12\n\n\x06ITUNES\x10\x00\x12\x11\n\rGOOGLEPLAY_V2\x10\x01\x12\x11\n\rGOOGLEPLAY_V3\x10\x02\x12\n\n\x06\x41MAZON\x10\x03\x12 \n\x1cITUNES_GRAND_UNIFIED_RECEIPT\x10\x04\x12\x12\n\x0eNOKIA_NORMANDY\x10\x05\x12\r\n\tAMAZON_V2\x10\x06*e\n\x08\x44\x65viceId\x12\x10\n\x0c\x45\x41_DEVICE_ID\x10\x00\x12\x07\n\x03\x41UT\x10\x01\x12\x11\n\rADVERTISER_ID\x10\x02\x12\r\n\tVENDOR_ID\x10\x03\x12\x0e\n\nANDROID_ID\x10\x04\x12\x0c\n\x08MAC_HASH\x10\x05\x42\x16\n\x14\x63om.ea.simpsons.data') 28 | 29 | _globals = globals() 30 | _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) 31 | _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'PurchaseData_pb2', _globals) 32 | if not _descriptor._USE_C_DESCRIPTORS: 33 | _globals['DESCRIPTOR']._loaded_options = None 34 | _globals['DESCRIPTOR']._serialized_options = b'\n\024com.ea.simpsons.data' 35 | _globals['_PURCHASEPLATFORM']._serialized_start=1895 36 | _globals['_PURCHASEPLATFORM']._serialized_end=2044 37 | _globals['_DEVICEID']._serialized_start=2046 38 | _globals['_DEVICEID']._serialized_end=2147 39 | _globals['_PURCHASEDITEMDATA']._serialized_start=28 40 | _globals['_PURCHASEDITEMDATA']._serialized_end=111 41 | _globals['_CURRENCYDATA']._serialized_start=114 42 | _globals['_CURRENCYDATA']._serialized_end=267 43 | _globals['_PURCHASEERRORDATA']._serialized_start=269 44 | _globals['_PURCHASEERRORDATA']._serialized_end=316 45 | _globals['_PURCHASERESPONSEMESSAGE']._serialized_start=319 46 | _globals['_PURCHASERESPONSEMESSAGE']._serialized_end=549 47 | _globals['_PURCHASEREQUESTMESSAGE']._serialized_start=552 48 | _globals['_PURCHASEREQUESTMESSAGE']._serialized_end=1497 49 | _globals['_PURCHASEREQUESTMESSAGE_PAYMENTINFO']._serialized_start=1029 50 | _globals['_PURCHASEREQUESTMESSAGE_PAYMENTINFO']._serialized_end=1110 51 | _globals['_PURCHASEREQUESTMESSAGE_DEVICEIDS']._serialized_start=1112 52 | _globals['_PURCHASEREQUESTMESSAGE_DEVICEIDS']._serialized_end=1165 53 | _globals['_PURCHASEREQUESTMESSAGE_APPLICATIONINFO']._serialized_start=1168 54 | _globals['_PURCHASEREQUESTMESSAGE_APPLICATIONINFO']._serialized_end=1355 55 | _globals['_PURCHASEREQUESTMESSAGE_DEVICEINFO']._serialized_start=1358 56 | _globals['_PURCHASEREQUESTMESSAGE_DEVICEINFO']._serialized_end=1497 57 | _globals['_ORDERDATA']._serialized_start=1500 58 | _globals['_ORDERDATA']._serialized_end=1739 59 | _globals['_ORDERDATA_ORDERSTATE']._serialized_start=1691 60 | _globals['_ORDERDATA_ORDERSTATE']._serialized_end=1739 61 | _globals['_SUBSCRIPTIONDATA']._serialized_start=1742 62 | _globals['_SUBSCRIPTIONDATA']._serialized_end=1892 63 | # @@protoc_insertion_point(module_scope) 64 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This is a VERY alpha release of a local server that allows you to play your Springfield in the Simpsons: Tapped Out mobile app. 2 | 3 | # How to Setup and Use 4 | Before you run this program, you will need a few things: 5 | 6 | 1) A copy of your world. Save the file to the "towns" directory WITHOUT any file extension. If you don't have your town it is too late to get it. You can leave the towns directory empty and start over with a new world... this time with a LOT of donuts. 7 | 2) Make a directory named "gameassets" in the server's directory and copy ALL of the DLC to this directory. The Internet Archive has a [copy](https://archive.org/details/tsto-dlc-cdn-oct2024) 8 | 3) Install the required packages using the pip command: ```pip install -r requirements.txt``` 9 | 4) Download a copy of the APK of the [The Simpsons: Tapped Out game](https://apkpure.com/the-simpsons%E2%84%A2-tapped-out/com.ea.game.simpsons4_row) 10 | 5) Modify the APK to point to your instance of the TSTO server (see APK generation below) 11 | 6) Install the APK on your Android phone or tablet. Optionally, you can play the game on your PC by using [BlueStacks](https://www.bluestacks.com/download.html). 12 | 7) Modify the config.json file to point to your IP address (change 10.10.10.10 to your IP address!): 13 | ``` 14 | "server_url": "http://10.10.10.10" 15 | ``` 16 | 17 | Once you have done the above, execute the server by using the following command: 18 | 19 | ```python tsto_server.py``` 20 | 21 | Run your modified APK on your Android device. 22 | 23 | # APK generation 24 | In order to use this server, you will need to modify the game APK to point to your local computer. The TappedOutReborn group has provided a very handy tool for generating the modified APK here: [Patch-Apk](https://github.com/TappedOutReborn/Patch-Apk). When using the install.sh script set both the NEW_GAMESERVER_URL to the IP address or domain of the machine hosting your server (e.g. ```http://x.x.x.x```) and NEW_DLCSERVER_URL to the same but with /gameassets/ appended (e.g. ```http://x.x.x.x/gameassets/```). Do not use 127.0.0.1 or localhost for your server's address. 25 | 26 | 27 | # How to play 28 | The system currently leverages the login AND anonymous play system to allow users to select different worlds to play. By default, clicking the "Tap to play anonymously" will load the "mytown" world. If the user wants to play a different town, they should click the EA Login button, then enter an email address that has the username equal to the town's filename in the towns directory. For example, if you want to load a town with the filename "mysupertown" then you would enter "mysupertown@a.a". The @ and . are required by the TSTO application, so any random domain will work. On the next screen, after pressing the "Log In" button, enter any 5 digit code and press "Verify". This will place the user back at the main screen. At this point pressing the "Tap to play anonymously" will load the newly selected world. 29 | 30 | Users of the server have the ability to modify the config.json file to change certain behaviors of the system. Feel free to experiement with those options. 31 | 32 | Admittedly this is a fragile system. It is definitely a work in progress. 33 | 34 | # Running old events 35 | You can run past The Simpsons: Tapped Out events. If you navigate to the server at ```http://x.x.x.x/dashboard``` you will find a simple dashboard that lets you trigger old events/quest lines. This works by tricking the app into thinking the current date is far in the past (specifically the date at the beginning of the selected event). This is generally not a huge problem except if you have running tasks. If you have Homer doing something and then activate an event that was 2 years ago, it will cost ~7800 donuts to complete the task. Donuts are free now, so not a huge deal. But its best to have your citizens NOT in tasks when you make this change. Also, it is recommended to close the app BEFORE you change to a new event. Just makes the transition easier. 36 | 37 | With this feature you can now replay the last 12 years of the game... do individual events when you want. Or, you can reset to the beginning and play the entire 12 years over again in real time! 38 | 39 | # Current state: 40 | * Only works with Android since you need to modify the APK to point to the new server. 41 | * This is still alpha. There are bugs and the code is fragile. Please [report](https://github.com/tjac/tsto_server/issues) any bugs you find. 42 | 43 | # Change log: 44 | * [2024/12/24] - Initial release 45 | * [2025/1/1] - Refactored code. Established framework for persistent configs. Multiple towns can be played by using the login system in the app 46 | * [2025/1/6] - Save functionality! Big thanks to [d-fens](https://github.com/d-fens) for setting the framework necessary to dockerize the server. 47 | * [2025/1/30] - Added dashboard for adjusting which event is running. Minor changes. More framework improvements for version 2. 48 | -------------------------------------------------------------------------------- /WholeLandTokenData_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # NO CHECKED-IN PROTOBUF GENCODE 4 | # source: WholeLandTokenData.proto 5 | # Protobuf Python Version: 5.28.3 6 | """Generated protocol buffer code.""" 7 | from google.protobuf import descriptor as _descriptor 8 | from google.protobuf import descriptor_pool as _descriptor_pool 9 | from google.protobuf import runtime_version as _runtime_version 10 | from google.protobuf import symbol_database as _symbol_database 11 | from google.protobuf.internal import builder as _builder 12 | _runtime_version.ValidateProtobufRuntimeVersion( 13 | _runtime_version.Domain.PUBLIC, 14 | 5, 15 | 28, 16 | 3, 17 | '', 18 | 'WholeLandTokenData.proto' 19 | ) 20 | # @@protoc_insertion_point(imports) 21 | 22 | _sym_db = _symbol_database.Default() 23 | 24 | 25 | 26 | 27 | DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18WholeLandTokenData.proto\x12\x04\x44\x61ta\"=\n\x15WholeLandTokenRequest\x12\x16\n\trequestId\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x0c\n\n_requestId\"Z\n\x16WholeLandTokenResponse\x12\x12\n\x05token\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08\x63onflict\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x08\n\x06_tokenB\x0b\n\t_conflict\"2\n\x12\x44\x65leteTokenRequest\x12\x12\n\x05token\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_token\"5\n\x13\x44\x65leteTokenResponse\x12\x13\n\x06result\x18\x01 \x01(\x08H\x00\x88\x01\x01\x42\t\n\x07_resultB\x16\n\x14\x63om.ea.simpsons.datab\x06proto3') 28 | 29 | _globals = globals() 30 | _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) 31 | _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'WholeLandTokenData_pb2', _globals) 32 | if not _descriptor._USE_C_DESCRIPTORS: 33 | _globals['DESCRIPTOR']._loaded_options = None 34 | _globals['DESCRIPTOR']._serialized_options = b'\n\024com.ea.simpsons.data' 35 | _globals['_WHOLELANDTOKENREQUEST']._serialized_start=34 36 | _globals['_WHOLELANDTOKENREQUEST']._serialized_end=95 37 | _globals['_WHOLELANDTOKENRESPONSE']._serialized_start=97 38 | _globals['_WHOLELANDTOKENRESPONSE']._serialized_end=187 39 | _globals['_DELETETOKENREQUEST']._serialized_start=189 40 | _globals['_DELETETOKENREQUEST']._serialized_end=239 41 | _globals['_DELETETOKENRESPONSE']._serialized_start=241 42 | _globals['_DELETETOKENRESPONSE']._serialized_end=294 43 | # @@protoc_insertion_point(module_scope) 44 | -------------------------------------------------------------------------------- /auth_manager.py: -------------------------------------------------------------------------------- 1 | import base64 2 | from dataclasses import dataclass, field 3 | import datetime 4 | import hashlib 5 | import hmac 6 | import random 7 | from typing import Union 8 | 9 | # pip install pyjwt 10 | import jwt 11 | 12 | @dataclass 13 | class AuthCode: 14 | _type: str # e.g. "authorization_code" 15 | expiration: int # Expiration timestamp (unix format) 16 | 17 | 18 | @dataclass 19 | class AccessToken: 20 | expiration: int # Expiration timestamp (unix format) 21 | client_id: str = "" 22 | persona: "Persona" = None # Persona set associated with token 23 | authenticators: list = field(default_factory=list) # pid_id list 24 | 25 | 26 | @dataclass 27 | class RefreshToken: 28 | expiration: int # Expiration timestamp (unix format) 29 | client_id: str = "" 30 | persona: "Persona" = None # Persona set associated with token 31 | 32 | 33 | @dataclass 34 | class IdToken: 35 | expiration: int # Expiration timestamp (unix format) 36 | body: dict = field(default_factory=dict) # Body of the token in dict form 37 | client_id: str = "" 38 | persona: "Persona" = None # Persona set associated with token 39 | 40 | 41 | @dataclass 42 | class Authenticator: 43 | _type: str 44 | persona: "Persona" 45 | access_token: str 46 | expires_in: int 47 | access_token_expires: int 48 | refresh_token: str 49 | refresh_token_expires_in: int 50 | refresh_token_expires: int 51 | token_type: str = "Bearer" 52 | id_token: Union[str, None] = None 53 | 54 | def to_dict(self) -> dict: 55 | return { 56 | "type": self._type, 57 | "persona_id": self.persona.persona_id, 58 | "access_token": self.access_token, 59 | "expires_in": self.expires_in, 60 | "access_token_expires": self.access_token_expires, 61 | "refresh_token": self.refresh_token, 62 | "refresh_token_expires_in": self.refresh_token_expires_in, 63 | "refresh_token_expires": self.refresh_token_expires, 64 | "token_type": self.token_type, 65 | "id_token": self.id_token, 66 | } 67 | 68 | @dataclass 69 | class AccessProfile: 70 | client_id: str 71 | persona_id: int 72 | pid_id: int 73 | user_id: int 74 | authenticators: list = field(default_factory=list) 75 | 76 | 77 | class AuthManager: 78 | 79 | def __init__(self, config: dict): 80 | self.config: dict = config 81 | 82 | self.debug: bool = self.config.get("debug", False) 83 | 84 | self.access_profiles: dict = {} # the love profiles of access token 85 | self.auth_codes: dict = {} # the authorization code 86 | self.auth_code_personas: dict = {} # xref auth_code to persona 87 | self.access_tokens: dict = {} # access tokens 88 | self.refresh_tokens: dict = {} # maps refresh_token to persona set 89 | self.authenticators: dict = {} # authenticator dictionaries 90 | self.id_tokens: dict = {} # maps id_token to persona set 91 | self.persona_ids: dict = {} # xref persona_id to access_token 92 | self.user_ids: dict = {} # xref user_id to access_token 93 | self.pid_ids: dict = {} # xref pid_id to access_token 94 | 95 | self.secret_key = self.config.get("secret_key") 96 | 97 | ############################################################################## 98 | # Utility functions 99 | ############################################################################## 100 | 101 | def log_debug(self, msg: str): 102 | if self.debug: 103 | print(msg) 104 | 105 | def now_int(self) -> int: 106 | """Returns the current time (UTC) as unix timestamp integer.""" 107 | return int(datetime.datetime.now(datetime.timezone.utc).timestamp()) 108 | 109 | def generate_counter_code(self, offset: int = 0) -> str: 110 | """Generates the base32hex-based timestamp string""" 111 | # Get the current timestamp plus any offset converted into minutes 112 | now: int = int(self.now_int() + offset) // 60 113 | 114 | # Encode the timestamp into a compressed Base32Hex format 115 | now_bin: str = bin(now)[2:] # strip the leading "0b" 116 | 117 | alphabet = { 118 | "00000": "0", "00001": "1", "00010": "2", "00011": "3", 119 | "00100": "4", "00101": "5", "00110": "6", "00111": "7", 120 | "01000": "8", "01001": "9", "01010": "a", "01011": "b", 121 | "01100": "c", "01101": "d", "01110": "e", "01111": "f", 122 | "10000": "g", "10001": "h", "10010": "i", "10011": "j", 123 | "10100": "k", "10101": "l", "10110": "m", "10111": "n", 124 | "11000": "o", "11001": "p", "11010": "q", "11011": "r", 125 | "11100": "s", "11101": "t", "11110": "u", "11111": "v", 126 | } 127 | 128 | if len(now_bin) % 5: 129 | self.log_debug("generate_counter_code: invalid size: {now_bin}") 130 | return "00000" 131 | 132 | counter_code: str = "" 133 | for i in range(len(now_bin) // 5): 134 | sub_val = now_bin[i*5:(i+1)*5] 135 | if sub_val not in alphabet: 136 | self.log_debug("Invalid subvalue found: {sub_val}") 137 | return "00000" 138 | counter_code += alphabet[sub_val] 139 | 140 | # Return the result 141 | return counter_code 142 | 143 | def generate_random_bytes(self, length: int) -> bytes: 144 | """Generates a random sequence of bytes of length.""" 145 | array = bytearray(length) 146 | for i in range(length): 147 | array[i] = random.randint(0,255) 148 | return array 149 | 150 | def b64encode_string(self, input_string: str) -> str: 151 | """Encode a string into a base64 encoded string without padding.""" 152 | return base64.urlsafe_b64encode( 153 | input_string.encode("utf-8") 154 | ).decode("utf-8").replace("=", "") 155 | 156 | def b64encode_bytes(self, bytes_in: bytes) -> str: 157 | return base64.urlsafe_b64encode(bytes_in).decode("utf-8").replace("=", "") 158 | 159 | ############################################################################## 160 | # Code and Token Generation 161 | ############################################################################## 162 | def generate_access_code(self) -> str: 163 | """Generates a new acccess code.""" 164 | access_code = self.generate_random_bytes(29) 165 | access_code[0:4] = b"AC\xA1\x00" # prologue of the token 166 | access_code_str = self.b64encode_bytes(access_code) 167 | return access_code_str 168 | 169 | def generate_access_token(self, id_base: int, expiry: int) -> str: 170 | """Generates an access token, returns token in Base64""" 171 | 172 | # An access token has the following format before being Base64 encoded: 173 | # 174 | # id_base ------- 175 | # v 176 | # AT0:2.0:3.0:1440:KpnQGZO2SIxD0xKZEL9pBauVdBJYRO0NYD2:47082:riqac 177 | # \_________/ ^ ^ ^ 178 | # ^ | | | 179 | # | | | timestamp --- 180 | # | | --- token code (base64 encoded) 181 | # | ------ token life (in minutes) 182 | # --- header ("AuthToken0") 183 | # 184 | # The timestamp is a unix timestamp in minutes (// 60) stored in 185 | # lowercase base32hex encoding 186 | # 187 | # The entire token is returned as a Base64 encoded string. 188 | 189 | # Build an access token 190 | timestamp = self.generate_counter_code() 191 | token_hash = self.b64encode_bytes(self.generate_random_bytes(26)) 192 | access_token_body = f"AT0:2.0:3.0:{expiry}:{token_hash}:{id_base}:{timestamp}" 193 | access_token = self.b64encode_string(access_token_body) 194 | 195 | # Register the access_token 196 | self.access_tokens[access_token] = AccessToken( 197 | self.now_int() + (expiry * 60), 198 | ) 199 | self.log_debug(f"Access token generated for {id_base}: {access_token_body}") 200 | self.log_debug(f"Access token is {access_token}") 201 | return access_token 202 | 203 | def generate_access_token_type1(self, id_base: int, expiry: int) -> str: 204 | """Generates an access token (type AT1), returns token in Base64""" 205 | 206 | # This is identical to generate_Access_token except it uses AT1 instead of 207 | # the AT0 type. 208 | 209 | # Build an access token 210 | timestamp = self.generate_counter_code() 211 | token_hash = self.b64encode_bytes(self.generate_random_bytes(26)) 212 | access_token_body = f"AT1:2.0:3.0:{expiry}:{token_hash}:{id_base}:{timestamp}" 213 | access_token = self.b64encode_string(access_token_body) 214 | 215 | # Register the access_token 216 | self.access_tokens[access_token] = AccessToken( 217 | self.now_int() + (expiry * 60), 218 | ) 219 | 220 | self.log_debug(f"Access token generated for {id_base}: {access_token_body}") 221 | self.log_debug(f"Access token is {access_token}") 222 | return access_token 223 | 224 | def generate_refresh_token(self, id_base: int, expiry: int) -> str: 225 | """Generates an refresh token, returns token in Base64""" 226 | 227 | # A refresh token has the following format before being Base64 encoded, a 228 | # format that is nearly identical to the access token format: 229 | # 230 | # id_base ------- 231 | # v 232 | # RT0:2.0:3.0:1440:KpnQGZO2SIxD0xKZEL9pBauVdBJYRO0NYD2:47082:riqac 233 | # \_________/ ^ ^ ^ 234 | # ^ | | | 235 | # | | | timestamp --- 236 | # | | --- token code (base64 encoded) 237 | # | ------ token life (in minutes) 238 | # --- header ("RefreshToken0") 239 | # 240 | # The timestamp is a unix timestamp in minutes (// 60) stored in 241 | # lowercase base32hex encoding 242 | # 243 | # The entire token is returned as a Base64 encoded string. 244 | 245 | # Build a refresh token 246 | timestamp = self.generate_counter_code() 247 | token_hash = self.b64encode_bytes(self.generate_random_bytes(26)) 248 | refresh_token_body = f"RT0:2.0:3.0:{expiry}:{token_hash}:{id_base}:{timestamp}" 249 | refresh_token = self.b64encode_string(refresh_token_body) 250 | 251 | # Register refresh_token 252 | self.refresh_tokens[refresh_token] = RefreshToken( 253 | self.now_int() + (expiry * 60), 254 | ) 255 | 256 | self.log_debug(f"Refresh tkn generated for {id_base}: {refresh_token_body}") 257 | self.log_debug(f"Refresh token is {refresh_token}") 258 | return refresh_token 259 | 260 | def generate_id_token(self, persona_id: int, expiry: int) -> str: 261 | """Generates a signed id token""" 262 | 263 | # Find the persona by its id 264 | persona = self.user_manager.personas.get(persona_id) 265 | if not persona: 266 | return "" 267 | 268 | now = self.now_int() 269 | expiration = expiry + now 270 | 271 | id_token_body_json = { 272 | "aud": persona.client_id, 273 | "iss": "accounts.ea.com", 274 | "iat": now, 275 | "exp": expiration, 276 | "pid_id": str(persona.pid_id), 277 | "user_id": str(persona.user_id), 278 | "persona_id": persona.persona_id, 279 | "pid_type":"AUTHENTICATOR_ANONYMOUS", 280 | "auth_time": 0 281 | } 282 | 283 | id_token_body = jwt.encode( 284 | id_token_body_json, 285 | self.secret_key, 286 | algorithm = "HS256" 287 | ) 288 | 289 | id_token_sig = base64.b64encode( 290 | hmac.new( 291 | self.secret_key.encode("utf-8"), 292 | id_token_body.encode("utf-8"), 293 | hashlib.sha256 294 | ).digest() 295 | ).decode("utf-8") 296 | 297 | id_token = f"{id_token_body}.{id_token_sig}" 298 | 299 | # Register the id_token 300 | self.id_tokens[id_token] = IdToken( 301 | expiration, 302 | id_token_body_json, 303 | persona.client_id, 304 | persona 305 | ) 306 | 307 | self.log_debug(f"Id token generated for {persona_id}: {id_token_body_json}") 308 | self.log_debug(f"Id token is {id_token}") 309 | self.log_debug(f"{self.id_tokens[id_token]}") 310 | return id_token 311 | 312 | ############################################################################## 313 | # Code management 314 | ############################################################################## 315 | 316 | def new_authorization_code(self, code_type: str, lifetime: int = 600) -> str: 317 | """Generates a new authorization code.""" 318 | # Generate a new code 319 | auth_code = self.generate_access_code() 320 | 321 | # Add the code the list of generated codes 322 | self.auth_codes[auth_code] = AuthCode( 323 | code_type, 324 | self.now_int() + lifetime 325 | ) 326 | 327 | # Perform housekeeping on the auth codes 328 | self.remove_expired_authorization_codes() 329 | 330 | self.log_debug(f"New auth code: {auth_code}") 331 | # return the code 332 | return auth_code 333 | 334 | def is_valid_authorization_code(self, code: str) -> bool: 335 | """Returns True if code is in .auth_code and not expired.""" 336 | info = self.auth_codes.get(code) 337 | if not info: 338 | self.log_debug(f"auth code {code} is unknown.") 339 | return False 340 | if info.expiration < self.now_int(): 341 | self.log_debug(f"auth code {code} is expired.") 342 | return False 343 | 344 | self.log_debug(f"auth code {code} is valid.") 345 | return True 346 | 347 | def remove_expired_authorization_codes(self): 348 | """Clears any expired auth codes from .auth_codes""" 349 | code_list = [ac for ac in self.auth_codes.keys()] 350 | now = self.now_int() 351 | for ac in code_list: 352 | if self.auth_codes[ac].expiration < now: 353 | del self.auth_codes[ac] 354 | self.log_debug(f"auth code {ac} is expired and deleted.") 355 | if ac in self.auth_code_personas: 356 | del self.auth_code_personas[ac] 357 | self.log_debug(f"auth code {ac} removed from persona xref") 358 | 359 | ############################################################################## 360 | # Token management 361 | ############################################################################## 362 | 363 | def register_access_token_persona(self, access_token: str, persona: dict): 364 | """Registers the persona with the access_token""" 365 | if access_token not in self.access_tokens: 366 | self.log_debug(f"Unable to find access token {access_token}.") 367 | return 368 | 369 | self.access_tokens[access_token].persona = persona 370 | self.log_debug(f"{persona} registered to access token {access_token}") 371 | 372 | def register_refresh_token_persona(self, refresh_token: str, persona: dict): 373 | """Registers the persona with the refresh_token""" 374 | if refresh_token not in self.refresh_tokens: 375 | self.log_debug(f"Unable to find refresh token {refresh_token}.") 376 | return 377 | 378 | self.refresh_tokens[refresh_token].persona = persona 379 | self.log_debug(f"{persona} registered to refresh token {refresh_token}") 380 | 381 | def register_authenticator_to_access_token(self, 382 | access_token: str, 383 | pid_id: int 384 | ) -> bool: 385 | """Registers the authentication pid with the access token""" 386 | if access_token not in self.access_tokens: 387 | self.log_debug(f"Unable to find access token {access_token}.") 388 | return False 389 | 390 | self.access_tokens[access_token].authenticators.append(pid_id) 391 | self.log_debug(f"Authenicator {pid_id} registered to access token {access_token}") 392 | self.log_debug(self.access_tokens[access_token]) 393 | return True 394 | 395 | def is_access_token_valid(self, access_token: str) -> bool: 396 | """Returns true if token is still valid""" 397 | # First remove any expired tokens 398 | self.remove_expired_access_tokens() 399 | 400 | # Next, see if our token still exists 401 | if not self.access_tokens.get(access_token): 402 | self.log_debug(f"Access token {access_token} does not exist, invalid") 403 | return False 404 | # Consider the access token valid 405 | self.log_debug(f"Access token {access_token} is valid") 406 | return True 407 | 408 | def remove_expired_access_tokens(self): 409 | """Removes any access token which has expired""" 410 | now = self.now_int() 411 | token_list = [acttok for acttok in self.access_tokens.keys()] 412 | for access_token in token_list: 413 | token_info = self.access_tokens.get(access_token) 414 | if not token_info: 415 | continue 416 | if token_info.expiration < now: 417 | del self.access_tokens[access_token] 418 | self.log_debug(f"Access token {access_token} expired and was deleted") 419 | 420 | def new_lnglv_token(self, username: str, client_id: str, auth_code: str) -> str: 421 | """Generate a new longlive token from login info""" 422 | # Find the user's persona set 423 | persona_set = self.user_manager.get_user_persona(username) 424 | if not persona_set: 425 | # Unknown user, so register one. 426 | persona_set = self.user_manager.register_new_user(username) 427 | if not persona_set: 428 | return "" 429 | 430 | # Generate the access token (this so registers the token) 431 | lnglv_token = self.generate_access_token_type1(persona_set.base_id, 432 | 86400 # 60 days 433 | ) 434 | # Attach the persona to the token 435 | self.register_access_token_persona(lnglv_token, persona_set) 436 | 437 | # Attach the access code to the person 438 | if auth_code: 439 | self.auth_code_personas[auth_code] = persona_set 440 | 441 | # return the token 442 | self.log_debug(f"New lnglv token generated: {lnglv_token}") 443 | return lnglv_token 444 | 445 | def is_lnglv_token(self, access_token: str) -> bool: 446 | """Returns true if the token is a valid lnglv token""" 447 | # Check validity of token first 448 | if not self.is_access_token_valid(access_token): 449 | self.log_debug(f"Access token {access_token} not found.") 450 | return False 451 | 452 | # Check if the token is a lnglv_token 453 | access_token_info = self.access_tokens.get(access_token) 454 | if not access_token_info: 455 | self.log_debug(f"Access token {access_token} not found (2).") 456 | return False 457 | if access_token_info.client_id != "lnglv_token": 458 | self.log_debug(f"Access token {access_token} is not a lnglv_token") 459 | self.log_debug(f"The token belongs to {access_token_info.client_id}") 460 | return False 461 | 462 | self.log_debug(f"Access token {access_token} is not a lnglv_token") 463 | return True 464 | 465 | ############################################################################## 466 | # Authenticator management 467 | ############################################################################## 468 | 469 | def new_authenticator(self, 470 | authenticator_type: str, 471 | client_id: str 472 | ) -> dict: 473 | """Generates a new authenticator type""" 474 | 475 | if authenticator_type not in ["AUTHENTICATOR_ANONYMOUS", "NUCLEUS"]: 476 | return {} 477 | 478 | # Generate a persona set for the authenticator 479 | persona_set = self.user_manager.generate_persona_id_set( 480 | authenticator_type, 481 | client_id = client_id 482 | ) 483 | 484 | # Build the access and refresh tokens, register persona with each 485 | access_token = self.generate_access_token(persona_set.id_base, 720) 486 | self.access_tokens[access_token].client_id = client_id 487 | self.register_access_token_persona(access_token, persona_set) 488 | refresh_token = self.generate_refresh_token(persona_set.id_base, 1440) 489 | self.refresh_tokens[refresh_token].client_id = client_id 490 | self.register_refresh_token_persona(refresh_token, persona_set) 491 | 492 | # Authenicators are referenced primarily by the pid_id 493 | pid_id = persona_set.pid_id 494 | 495 | # Construct the authenticator 496 | now = self.now_int() 497 | authenticator = Authenticator( 498 | authenticator_type, 499 | persona_set, 500 | access_token, 501 | 43200, 502 | now + 43200, 503 | refresh_token, 504 | 86400, 505 | now + 86400, 506 | "Bearer" 507 | ) 508 | 509 | # anonymous authenticators have the id_token 510 | if authenticator_type == "AUTHENTICATOR_ANONYMOUS": 511 | id_token = self.generate_id_token(persona_set.persona_id, 3600) 512 | authenticator.id_token = id_token 513 | 514 | # Add the authenticator to the list of authenticators 515 | self.authenticators[pid_id] = authenticator 516 | 517 | # Return the pid of the authenticator 518 | self.log_debug(f"New authenticator generated: {authenticator}") 519 | return authenticator 520 | 521 | def get_authenticator(self, pid_id: int) -> Authenticator: 522 | """Returns the type of authenticator for the pid or empty if not found.""" 523 | if pid_id not in self.authenticators: 524 | self.log_debug(f"Authenticator {pid_id} is unknown/not found") 525 | return None 526 | return self.authenticators[pid_id] 527 | 528 | def get_access_token_profile(self, access_token: str) -> dict: 529 | """Returns details of the access token""" 530 | # Validate access token 531 | if not self.is_access_token_valid(access_token): 532 | self.log_debug(f"{access_token} not found") 533 | return {} 534 | 535 | # Get the person associated with the token 536 | token_details = self.access_tokens.get(access_token) 537 | if not token_details: 538 | self.log_debug(f"Failed to retrieve details of {access_token}") 539 | return {} 540 | 541 | persona = token_details.persona 542 | if not persona: 543 | self.log_debug(f"No persona attached to {access_token}") 544 | return {} 545 | 546 | expiration = token_details.expiration 547 | time_remaining = expiration - self.now_int() 548 | 549 | access_token_details = { 550 | "client_id": token_details.client_id, 551 | "expires_in": time_remaining, 552 | "persona_id": persona.persona_id, 553 | "pid_id": str(persona.pid_id), 554 | "pid_type": persona._type, 555 | "user_id": str(persona.user_id), 556 | "authenticators": [] 557 | } 558 | 559 | for pid_id in token_details.authenticators: 560 | authenticator = self.get_authenticator(pid_id) 561 | if authenticator: 562 | access_token_details["authenticators"].append(authenticator.to_dict()) 563 | 564 | self.log_debug(f"Access token {access_token}: {access_token_details}") 565 | return access_token_details 566 | 567 | -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "debug": true, 3 | "http_debug": true, 4 | "server_debug_mode": true, 5 | "run_tutorial": false, 6 | "dlc_dir": "gameassets", 7 | "towns_dir": "towns", 8 | "country": "US", 9 | "reverse_proxy": true, 10 | "game_assets_url": "/gameassets/", 11 | "active_town": "mytown", 12 | 13 | "listening_port": 80, 14 | "listening_ip": "0.0.0.0", 15 | "server_url": "http://10.10.10.10", 16 | 17 | "secret_key": "2Tok8RykmQD41uWDv5mI7JTZ7NIhcZAIPtiBm4Z5", 18 | "client_secret": "D0fpQvaBKmAgBRCwGPvROmBf96zHnAuZmNepQht44SgyhbCdCfFgtUTdCezpWpbRI8N6oPtb38aOVg2y", 19 | 20 | "friends_config": 21 | { 22 | "randomize_friends": true, 23 | "max_friends": 50, 24 | "force_friend_name_order_randomization": false 25 | }, 26 | 27 | "identity_info": 28 | { 29 | "auth_base_id": 69834, 30 | "anon_base_id": 59392, 31 | "intm_base_id": 23530, 32 | 33 | "persona_base": 10070000000000, 34 | "authenticator_base": 10020000000000, 35 | "multiplier": 106969 36 | 37 | }, 38 | 39 | "gameplayconfig": 40 | [ 41 | ["MysteryBoxUpgrade_GameConfig:Enable:GambleCall", "0"], 42 | ["System:Disable:DynamicSteamer", "1"], 43 | ["TouchPriority_GameConfig:Enable:TouchPriority", "true"], 44 | ["Casino_GameConfig:Gamblers:LocalTapped_CurrencyAmount", "20"], 45 | ["Casino_GameConfig:Gamblers:LocalTapped_TokenChance", "0.15"], 46 | ["Validator_GameConfig:VariablesValidator:Validator", "1"], 47 | ["Validator_GameConfig:VariablesValidator:ScriptedRequirements", "1"], 48 | ["Validator_GameConfig:VariablesValidator:ScriptedRequirements_Variables", "1"], 49 | ["WildWest_GameConfig:Dates:Wildwest_Start", "2016-04-19 8:00"], 50 | ["WildWest_GameConfig:Dates:Wildwest_ActOne", "2016-04-19 8:00"], 51 | ["WildWest_GameConfig:Dates:Wildwest_ActTwo", "2016-05-03 8:00"], 52 | ["WildWest_GameConfig:Dates:Wildwest_ActThree", "2016-05-17 8:00"], 53 | ["WildWest_GameConfig:Dates:Wildwest_End", "2016-05-30 23:59"], 54 | ["WildWest_GameConfig:Dates:Wildwest_LastChance", "2016-05-24 8:00"], 55 | ["WildWest_GameConfig:Dates:WildWest_GeneralStoreStartTime", "2016-04-19 8:00"], 56 | ["WildWest_GameConfig:Dates:WildWest_GeneralStorePrizeTrackOneEndTime", "2016-05-03 8:00"], 57 | ["WildWest_GameConfig:Dates:WildWest_GeneralStorePrizeTrackTwoEndTime", "2016-05-17 8:00"], 58 | ["WildWest_GameConfig:Dates:WildWest_GeneralStorePrizeTrackThreeEndTime", "2016-05-30 23:59"], 59 | ["WildWest_GameConfig:Dates:WildWest_ReturningContentWave1", "2016-04-26 8:00"], 60 | ["WildWest_GameConfig:Dates:WildWest_ReturningContentWave2", "2016-05-10 8:00"], 61 | ["WildWest_GameConfig:Dates:WildWest_ReturningContentWave3", "2016-05-24 8:00"], 62 | ["WildWestPromo_GameConfig:Dates:WildWestPromo_End", "2016-05-04 08:00"], 63 | ["DSH_GameConfig:Dates:DSH_End", "2016-02-04 7:00:00"], 64 | ["DSH_GameConfig:Dates:DSH_OutroEnd", "2016-03-04 7:00:00"], 65 | ["Casino_GameConfig:Dates:Casino_StartDate", "2016-02-23 8:00"], 66 | ["Casino_GameConfig:Dates:Casino_ActTwo", "2016-03-07 8:00"], 67 | ["Casino_GameConfig:Dates:Casino_ActThree", "2016-03-17 8:00"], 68 | ["Casino_GameConfig:Dates:Casino_EndDate", "2016-03-29 8:00"], 69 | ["Casino_GameConfig:Dates:Casino_ActTwo_Quests", "2016-03-03 8:00"], 70 | ["Casino_GameConfig:Dates:Casino_ActThree_Quests", "2016-03-13 8:00"], 71 | ["Casino_GameConfig:Dates:PlatScratcher_WindowOne_Start", "2016-03-01 8:00"], 72 | ["Casino_GameConfig:Dates:PlatScratcher_WindowOne_End", "2016-03-04 8:00"], 73 | ["Casino_GameConfig:Dates:PlatScratcher_WindowTwo_Start", "2016-03-24 8:00"], 74 | ["Casino_GameConfig:Dates:PlatScratcher_WindowTwo_End", "2016-03-27 8:00"], 75 | ["Casino_GameConfig:Dates:ReferAFriendEnd", "2016-03-23 8:00"], 76 | ["Margeian_GameConfig:Dates:Margeian_Start", "2016-02-04 7:00:00"], 77 | ["Margeian_GameConfig:Dates:Margeian_End", "2016-03-16 8:00:00"], 78 | ["Margeian_GameConfig:Dates:Margeian_Kill", "2016-04-16 8:00:00"], 79 | ["Tailgate_GameConfig:Dates:Tailgate_Start", "2016-01-01 08:00"], 80 | ["Tailgate_GameConfig:Dates:Tailgate_End", "2016-02-09 08:00"], 81 | ["Superheroes_GameConfig:Dates:BeachHouseStartDate", "2015-03-29 8:00"], 82 | ["Superheroes_GameConfig:Dates:BeachHouseEndDate", "2015-04-07 8:00"], 83 | ["Superheroes_GameConfig:Dates:MilhouseStartDate", "2015-03-24 8:00"], 84 | ["Superheroes_GameConfig:Dates:MilhouseEndDate", "2015-03-31 8:00"], 85 | ["Superheroes_GameConfig:Dates:RadStationStartDate", "2015-03-29 8:00"], 86 | ["Superheroes_GameConfig:Dates:RadStationEndDate", "2015-04-07 8:00"], 87 | ["Superheroes_GameConfig:Dates:BartCaveStartDate", "2015-03-29 8:00"], 88 | ["Superheroes_GameConfig:Dates:BartCaveEndDate", "2015-04-07 8:00"], 89 | ["Terwilligers_GameConfig:Dates:Terwilligers_ActOne_Start", "2014-01-01 8:00"], 90 | ["Terwilligers_GameConfig:Dates:Terwilligers_ActTwo_Start", "2014-04-28 8:00"], 91 | ["Terwilligers_GameConfig:Dates:Terwilligers_ActThree_Start", "2014-05-12 8:00"], 92 | ["Terwilligers_GameConfig:Dates:Terwilligers_End", "2014-05-26 8:00"], 93 | ["Terwilligers_GameConfig:Dates:Terwilligers_KillDate", "2014-06-04 8:00"], 94 | ["Terwilligers_GameConfig:Dates:Terwilligers_5MinBeforeActTwo", "2014-04-28 7:55"], 95 | ["Terwilligers_GameConfig:Dates:Terwilligers_5MinBeforeActThree", "2014-05-12 7:55"], 96 | ["June2015_GameConfig:Dates:June2015_StartDate", "2015-05-23 8:00"], 97 | ["June2015_GameConfig:Dates:HomerballActOne", "2015-05-23 8:00"], 98 | ["June2015_GameConfig:Dates:HomerballActTwo", "2015-05-03 8:00"], 99 | ["June2015_GameConfig:Dates:HomerballActThree", "2015-05-13 8:00"], 100 | ["June2015_GameConfig:Dates:HomerballEnd", "2015-05-23 16:00"], 101 | ["June2015_GameConfig:Dates:HomerballActOneCrossover", "2015-05-01 8:00"], 102 | ["June2015_GameConfig:Dates:HomerballActTwoCrossover", "2015-05-11 8:00"], 103 | ["June2015_GameConfig:Dates:JuneStorePhaseTwoStart", "2015-05-03 8:00"], 104 | ["June2015_GameConfig:Dates:JuneStorePhaseThreeStart", "2015-05-13 8:00"], 105 | ["June2015_GameConfig:Dates:RevertToThreePanel", "2015-06-07 8:00"], 106 | ["June2015_GameConfig:Dates:SoccerCupStart", "2015-05-25 8:00"], 107 | ["June2015_GameConfig:Dates:SoccerCupEnd", "2015-05-30 8:00"], 108 | ["June2015_GameConfig:Dates:JuneTakedownEnd", "2015-07-28 8:00"], 109 | ["StEaster_GameConfig:Dates:StEaster_PromoEnd", "2016-03-20 8:00:00"], 110 | ["StEaster_GameConfig:Dates:StEaster_End", "2016-03-30 8:00:00"], 111 | ["StEaster_GameConfig:Dates:StEaster_Switch", "2016-03-23 8:00:00"], 112 | ["StEaster_GameConfig:Dates:StEaster_Kill", "2016-04-29 8:00:00"], 113 | ["StEaster_GameConfig:Dates:CruddySunday", "2016-03-27 8:00:00"], 114 | ["StEaster_GameConfig:Dates:CruddySunday_End", "2016-03-29 8:00:00"], 115 | ["StEaster_GameConfig:Dates:StPatsDay", "2016-03-17 8:00:00"], 116 | ["THOH2015_GameConfig:Dates:THOH2015ActOne", "2015-10-06 8:00"], 117 | ["THOH2015_GameConfig:Dates:THOH2015ActTwo", "2015-10-20 8:00"], 118 | ["THOH2015_GameConfig:Dates:THOH2015ActThree", "2015-11-04 8:00"], 119 | ["THOH2015_GameConfig:Dates:THOH2015ActEnd", "2015-11-17 8:00"], 120 | ["THOH2015_GameConfig:Dates:THOH2015ActKill", "2015-11-27 8:00"], 121 | ["THOH2015_GameConfig:Dates:THOH2015EventEndReminder", "2015-11-14 8:00"], 122 | ["THOH2015_GameConfig:Dates:THOH2015EventEndReminderEnd", "2015-11-14 23:59"], 123 | ["THOH2015_GameConfig:Dates:THOH2015LastDayReminder", "2015-11-17 1:00"], 124 | ["THOH2015_GameConfig:Dates:THOH2015TakedownActive", "2015-11-18 1:00"], 125 | ["THOH2015_GameConfig:Dates:THOH2015PrizeTrackActOneEnd", "2015-10-20 8:00"], 126 | ["XMAS2015_GameConfig:Dates:XMASFifteen_StartDate", "2014-12-08 8:00"], 127 | ["XMAS2015_GameConfig:Dates:XMASFifteen_ActOne", "2014-12-08 8:00"], 128 | ["XMAS2015_GameConfig:Dates:XMASFifteen_ActTwo", "2014-12-19 8:00"], 129 | ["XMAS2015_GameConfig:Dates:XMASFifteen_EndDate", "2015-01-02 8:00"], 130 | ["XMAS2015_GameConfig:Dates:Maggie_Early_StartDate", "2014-12-23 8:00"], 131 | ["XMAS2015_GameConfig:Dates:Maggie_StartDate", "2015-01-02 8:00"], 132 | ["XMAS2015_GameConfig:Dates:Maggie_EndDate", "2015-01-19 8:00"], 133 | ["XMAS2015_GameConfig:Dates:XMASFifteen_NewYearsDay", "2015-01-01 8:00"], 134 | ["XMAS2015_GameConfig:Dates:XMASFifteen_NewYearsStart", "2014-12-29 8:00"], 135 | ["XMAS2015_GameConfig:Dates:XMASFifteen_NewYearsFinale", "2014-12-31 8:00"], 136 | ["XMAS2015_GameConfig:Dates:XMASFifteen_NewYearsEnd", "2015-01-02 8:00"], 137 | ["OldJewishMan_GameConfig:Dates:RoshHashanah_StartDate", "2015-09-13 8:00"], 138 | ["OldJewishMan_GameConfig:Dates:EarlyAccess_OldJewishMan", "2015-09-17 8:00"], 139 | ["OldJewishMan_GameConfig:Dates:RoshHashanah_EndDate", "2015-09-16 8:00"], 140 | ["MathletesFeat_GameConfig:Dates:MathletesFeat_Air", "2015-05-18 0:00"], 141 | ["MathletesFeat_GameConfig:Dates:MathletesFeat_End", "2015-05-19 8:00"], 142 | ["MathletesFeat_GameConfig:Dates:MathletesFeat_Kill", "2015-06-19 8:00"], 143 | ["THOH2015_TieIn_GameConfig:Dates:THOH2015_TieIn_StartDate", "2015-10-21 8:00"], 144 | ["THOH2015_TieIn_GameConfig:Dates:THOH2015_TieIn_AirshipStartDate", "2015-10-23 8:00"], 145 | ["THOH2015_TieIn_GameConfig:Dates:THOH2015_TieIn_AirDate", "2015-10-25 8:00"], 146 | ["THOH2015_TieIn_GameConfig:Dates:THOH2015_TieIn_EndDate", "2015-10-26 8:00"], 147 | ["THOH2015_TieIn_GameConfig:Dates:THOH2015_TieIn_KillDate", "2015-11-26 8:00"], 148 | ["Valentines2016_GameConfig:Dates:Valentines2016_End", "2015-02-17 8:00:00"], 149 | ["Valentines2016_GameConfig:Dates:Valentines2016_Day", "2015-02-14 8:00:00"], 150 | ["Valentines2016_GameConfig:Dates:Valentines2016_Air", "2015-02-15 3:00:00"], 151 | ["Valentines2016_GameConfig:Dates:Valentines2016_DayEnd", "2015-02-15 8:00:00"], 152 | ["Valentines2016_GameConfig:Dates:Valentines2016_MaudeAvailability", "2015-02-24 8:00:00"], 153 | ["HalloweenOfHorror_GameConfig:Dates:THOH2015TieInStart", "2015-10-14 8:00"], 154 | ["HalloweenOfHorror_GameConfig:Dates:THOH2015TieInEnd", "2015-10-19 8:00"], 155 | ["HalloweenOfHorror_GameConfig:Dates:THOH2015TieInKill", "2014-11-19 8:00"], 156 | ["SpringfieldHeights_GameConfig:Dates:SpringfieldHeightsWeekOne", "2015-07-21 8:00"], 157 | ["SpringfieldHeights_GameConfig:Dates:SpringfieldHeightsWeekTwo", "2015-07-28 8:00"], 158 | ["SpringfieldHeights_GameConfig:Dates:SpringfieldHeightsWeekThree", "2015-08-04 8:00"], 159 | ["SpringfieldHeights_GameConfig:Dates:SpringfieldHeightsWeekFour", "2015-08-11 8:00"], 160 | ["SpringfieldHeights_GameConfig:Dates:SpringfieldHeightsWeekNine", "2015-09-15 8:00"], 161 | ["SpringfieldHeights_GameConfig:Dates:SpringfieldHeightsWeekTen", "2015-09-22 8:00"], 162 | ["SpringfieldHeights_GameConfig:Dates:WealthyWednesday_EndTime", "2014-12-04 8:00"], 163 | ["WhackingDayPromo_GameConfig:Dates:WhackingDayPromo_Start", "2016-05-09 7:00"], 164 | ["WhackingDayPromo_GameConfig:Dates:WhackingDayPromo_End", "2016-05-12 7:00"], 165 | ["WhackingDayPromo_GameConfig:Dates:WhackingDayPromo_Kill", "2016-06-11 7:00"], 166 | ["WhackingDayPromo_GameConfig:Dates:HomerLivePromo_Start", "2016-05-09 7:00"], 167 | ["WhackingDayPromo_GameConfig:Dates:HomerLivePromo_End", "2016-05-15 7:00"], 168 | ["Superheroes2_GameConfig:Dates:SuperheroesTwo_QuickBattle", "2016-06-28 7:00"], 169 | ["SpringfieldGames_GameConfig:FirmwareMessage:Enabled", "1"], 170 | ["SciFi_GameConfig:Campaign:Reward1", "60"], 171 | ["SciFi_GameConfig:Campaign:Reward2", "15"], 172 | ["SciFi_GameConfig:Enable:Interactions", "1"], 173 | ["SciFi_SciFighterConfig:SciFighterPayouts:BaseReward_Event", "100"], 174 | ["SciFi_SciFighterConfig:SciFighterPayouts:CompletionReward_Event", "45"], 175 | ["SciFi_SciFighterConfig:SciFighterPayouts:PerSecondReward_Event", "5"], 176 | ["SeasonPremiere2016_GameConfig:Dates:SeasonPremiere2016_4X_End", "2016-10-04 17:00:00"], 177 | ["SeasonPremiere2016_GameConfig:Dates:SeasonPremiere2016_End", "2016-10-04 17:00:00"], 178 | ["NewUserBalancingConfig:XPTarget:Lvl60_TargetToNext", "500000"], 179 | ["NewUserBalancingConfig:XPTarget:PrestigeIncreaseBonusExp", "1000000"], 180 | ["FirstTimeMTX_GameConfig:FirstTimePacks:Enabled", "true"], 181 | ["AroundTheWorld_BalancingConfig:AirportJobs:TicketSpawnTimer", "20m"], 182 | ["TimeTravellingToaster_BalancingConfig:ExcavationSiteRewards:SpecimenLayerCount_Layer1_Base", "1"], 183 | ["TimeTravellingToaster_BalancingConfig:ExcavationSiteRewards:SpecimenLayerCount_Layer1_Range", "3"], 184 | ["TimeTravellingToaster_BalancingConfig:ExcavationSiteRewards:SpecimenLayerValue_Layer1_Base", "61"], 185 | ["TimeTravellingToaster_BalancingConfig:ExcavationSiteRewards:SpecimenLayerValue_Layer1_Range", "33"], 186 | ["TimeTravellingToaster_BalancingConfig:ExcavationSiteRewards:TachyonLayerCount_Layer1_Base", "1"], 187 | ["TimeTravellingToaster_BalancingConfig:ExcavationSiteRewards:TachyonLayerCount_Layer1_Range", "4"], 188 | ["TimeTravellingToaster_BalancingConfig:ExcavationSiteRewards:TachyonLayerValue_Layer1_Base", "14"], 189 | ["TimeTravellingToaster_BalancingConfig:ExcavationSiteRewards:TachyonLayerValue_Layer1_Range", "11"], 190 | ["TimeTravellingToaster_BalancingConfig:ExcavationSiteRewards:SpecimenLayerCount_Layer2_Base", "8"], 191 | ["TimeTravellingToaster_BalancingConfig:ExcavationSiteRewards:SpecimenLayerCount_Layer2_Range", "8"], 192 | ["TimeTravellingToaster_BalancingConfig:ExcavationSiteRewards:SpecimenLayerValue_Layer2_Base", "163"], 193 | ["TimeTravellingToaster_BalancingConfig:ExcavationSiteRewards:TachyonLayerCount_Layer2_Base", "7"], 194 | ["TimeTravellingToaster_BalancingConfig:ExcavationSiteRewards:TachyonLayerCount_Layer", "7"], 195 | ["TimeTravellingToaster_BalancingConfig:ExcavationSiteRewards:TachyonLayerValue_Layer2_Base", "56"], 196 | ["TimeTravellingToaster_BalancingConfig:ExcavationSiteRewards:TachyonLayerValue_Layer2_Range", "44"], 197 | ["TimeTravellingToaster_BalancingConfig:ExcavationSiteRewards:PrizeTrackPerShovelValue", "31"], 198 | ["Music_Spreadsheet_Config:PrizeTrack3:Prize1", "14600"], 199 | ["Music_Spreadsheet_Config:PrizeTrack3:Prize2", "33600"], 200 | ["Music_Spreadsheet_Config:PrizeTrack3:Prize4", "83200"], 201 | ["Music_Spreadsheet_Config:PrizeTrack3:Prize5", "109500"], 202 | ["Music_Spreadsheet_Config:PrizeTrack3:Prize6", "146000"], 203 | ["THOH2017_Config:PrizeTrack2:Prize1", "900"], 204 | ["THOH2017_Config:PrizeTrack2:Prize2", "2800"], 205 | ["THOH2017_Config:PrizeTrack2:Prize3", "5600"], 206 | ["THOH2017_Config:PrizeTrack2:Prize4", "9400"], 207 | ["THOH2017_Config:PrizeTrack2:Prize5", "13200"], 208 | ["THOH2017_Config:PrizeTrack2:Prize6", "17000"], 209 | ["THOH2017_Config:PrizeTrack2:Prize7", "22700"], 210 | ["THOH2017_Config:PrizeTrack3:Prize1", "1300"], 211 | ["THOH2017_Config:PrizeTrack3:Prize2", "3900"], 212 | ["THOH2017_Config:PrizeTrack3:Prize3", "7800"], 213 | ["THOH2017_Config:PrizeTrack3:Prize4", "13000"], 214 | ["THOH2017_Config:PrizeTrack3:Prize5", "18200"], 215 | ["THOH2017_Config:PrizeTrack3:Prize6", "23400"], 216 | ["THOH2017_Config:PrizeTrack3:Prize7", "31200"], 217 | ["BFCM2017_GameConfig:Dates:BlackFriday2017_End", "2017-11-28 8:00"], 218 | ["BFCM2017_GameConfig:Dates:CyberMonday2017_End", "2017-11-28 8:00"], 219 | ["THOH2018_GameConfig:PremiumCosts:Hellscape", "199"], 220 | ["THOHXXX_GameConfig:EnableMTX:THOHXXX_iOSMTXOffersEnabled", "true"], 221 | ["THOHXXX_GameConfig:EnableMTX:THOHXXX_AndroidMTXOffersEnabled", "true"], 222 | ["THOHXXX_GameConfig:Dates:THOHXXX_MERCH_TenCommandments_End", "2019-11-20 14:00"] 223 | ], 224 | 225 | "protoClientConfig": [ 226 | [0,"AppUrl.ios.na","https://apps.apple.com/app/id497595276?ls=1&mt=8"], 227 | [1,"GameClient.MaxBundleSize","50"], 228 | [2,"MinimumVersion.ios","4.69.0"], 229 | [3,"CurrentVersion.ios","4.69.0"], 230 | [5,"LocalSaveInterval","10"], 231 | [6,"ServerSaveInterval","100"], 232 | [7,"AppUrl.ios.row","https://apps.apple.com/app/id498375892?ls=1&mt=8"], 233 | [8,"RateUrl.ios.na","https://apps.apple.com/app/id497595276?ls=1&mt=8"], 234 | [9,"RateUrl.ios.row","https://apps.apple.com/app/id498375892?ls=1&mt=8"], 235 | [10,"CheckDLCInterval","3600"], 236 | [13,"AppUrl.android.na","https://play.google.com/store/apps/details?id=com.ea.game.simpsons4_na"], 237 | [14,"AppUrl.android.row","https://play.google.com/store/apps/details?id=com.ea.game.simpsons4_row"], 238 | [15,"RateUrl.android.na","https://play.google.com/store/apps/details?id=com.ea.game.simpsons4_na"], 239 | [16,"RateUrl.android.row","https://play.google.com/store/apps/details?id=com.ea.game.simpsons4_row"], 240 | [20,"MinimumVersion.android","4.69.0"], 241 | [21,"CurrentVersion.android","4.69.0"], 242 | [22,"AppUrl.android.amazon.azn","amzn://apps/android?p=com.ea.game.simpsonsto_azn"], 243 | [23,"AppUrl.android.amazon.azn_row","amzn://apps/android?p=com.ea.game.simpsons4_azn_row"], 244 | [24,"RateUrl.android.amazon.azn","amzn://apps/android?p=com.ea.game.simpsonsto_azn"], 245 | [25,"RateUrl.android.amazon.azn_row","amzn://apps/android?p=com.ea.game.simpsons4_azn_row"], 246 | [26,"CoppaEnabledNa","1"], 247 | [27,"CoppaEnabledRow","1"], 248 | [28,"MaxBuildingSoftCapEnabled","1"], 249 | [29,"MaxBuildingSoftCapLimit","19500"], 250 | [30,"MaxBuildingSoftCapRepeatAmount","500"], 251 | [31,"MaxBuildingHardCapEnabled","1"], 252 | [32,"MaxBuildingHardCapLimit","24000"], 253 | [41,"ClientConfigInterval","300"], 254 | [43,"TelemetryEnabled.android","0"], 255 | [44,"TelemetryEnabled.ios","0"], 256 | [45,"TelemetryEnabled.android.amazon","0"], 257 | [47,"MinimumVersion.android.amazon","4.69.0"], 258 | [48,"CurrentVersion.android.amazon","4.69.0"], 259 | [52,"OriginAvatarsUrl","https://m.avatar.dm.origin.com"], 260 | [54,"TutorialDLCEnabled.io","1"], 261 | [55,"TutorialDLCEnabled.android","1"], 262 | [56,"TutorialDLCEnabled.android.amazon","1"], 263 | [57,"AppUrl.android.nokia.row","market://details?id=com.ea.game.simpsons4_nokia_row"], 264 | [58,"RateUrl.android.nokia.row","market://details?id=com.ea.game.simpsons4_nokia_row"], 265 | [59,"ParamUrl.android.nokia.row","market://details?id=com.ea.game.simpsons4_nokia_row"], 266 | [60,"TutorialDLCEnabled.android.nokia","1"], 267 | [67,"EnableVBOCache","1"], 268 | [68,"CoppaEnabledRow.ios.row.4.10.2","0"], 269 | [69,"CoppaEnabledRow.android.row.4.10.2","0"], 270 | [70,"CoppaEnabledRow.android.amazon.azn_row.4.10.2","0"], 271 | [71,"CoppaEnabledRow.ios.row.4.10.3","0"], 272 | [72,"CoppaEnabledRow.android.row.4.10.3","0"], 273 | [73,"CoppaEnabledRow.android.amazon.azn_row.4.10.3","0"], 274 | [74,"ExpiredTokenForcedLogoutEnabled","1"], 275 | [75,"SortEnableDAGAndTopo","2"], 276 | [76,"CustomFontEnabled.4.21.1","1"], 277 | [77,"CustomFontEnabled.4.21.2","1"], 278 | [82,"EnableOptAppSwitch.ios","1"], 279 | [83,"FullAppSwitchInterval","86400"], 280 | [85,"AkamaiClientEnabled.android","1"], 281 | [86,"CustomFontEnabled.ios.row.4.13.2","1"], 282 | [87,"CustomFontEnabled.ios.na.4.13.2","1"], 283 | [88,"CustomFontEnabled.android.row.4.13.2","1"], 284 | [89,"CustomFontEnabled.android.na.4.13.2","1"], 285 | [90,"CustomFontEnabled.android.amazon.azn.4.13.2","1"], 286 | [91,"CustomFontEnabled.android.amazon.azn_row.4.13.2","1"], 287 | [92,"EnableOptAppSwitch.android","1"], 288 | [93,"EnableOptAppSwitch.android.amazon","1"], 289 | [101,"TopUpGrindEnabled","1"], 290 | [102,"SynergySendAdditionalPurchaseFields.ios","1"], 291 | [103,"SynergySendAdditionalPurchaseFields.android","1"], 292 | [104,"SynergySendAdditionalPurchaseFields.android.amazon","0"], 293 | [105,"EnableRoadCacheOptimization","1"], 294 | [106,"FixNegativeObjectiveCount","1"], 295 | [107,"LandDataVersionUpgraderEnabled","1"], 296 | [108,"ConfigVersion","131"], 297 | [109,"Game:Enable:JobManagerEnabled","1"], 298 | [114,"MinimumOSVersion.ios","7.0.0"], 299 | [115,"MinimumOSVersion.android","3.0.0"], 300 | [116,"MinimumOSVersion.android.amazon","3.0.0"], 301 | [117,"XZeroSortFix", "1"], 302 | [118,"DefaultJobCensus","1"], 303 | [119,"TntForgotPassURL","https://signin.ea.com/p/originX/resetPassword"], 304 | [120,"Game:Enable:ShowRestorePurchases.ios","1"], 305 | [121,"CountriesWhereUpdatesUnavailable","CN"], 306 | [122,"Game:Enable:ShowRestorePurchases.ios.4.26.0","0"], 307 | [123,"FastQuestReload","0"], 308 | [124,"FastQuestReload.4.26.5","0"], 309 | [125,"DisableQuestAutostartBackups","0"], 310 | [126,"EnableCheckIndex","1"], 311 | [127,"CrashReportingIOSOn","1"], 312 | [128,"CrashReportingKindleOn","1"], 313 | [129,"CrashReportingAndroidOn","1"], 314 | [130,"CrashReportingNokiaOn","1","0"], 315 | [132,"UseNumPadCodeLogin","1"], 316 | [133,"DeleteUserEnabled","1"], 317 | [134,"EnableBGDownloadIos","0"], 318 | [135,"EnableBGDownloadAndroid","0"], 319 | [136,"EnableBGDownloadAmazon","0"], 320 | [137,"MaxSimultaneousBGDownloadsIos","5"], 321 | [138,"MaxSimultaneousBGDownloadsAndroid","1"], 322 | [139,"MaxSimultaneousBGDownloadsAmazon","1"], 323 | [140,"BGDownloadQuickCheckEnabled","0"], 324 | [996,"GeolocationCountryCode","US"], 325 | [997,"GeolocationCountryName","United States"], 326 | [950,"TntAuthUrl", "https://auth.tnt-ea.com"], 327 | [951,"TntWalletUrl", "https://wallet.tnt-ea.com"], 328 | [952,"TntNucleusUrl","https://nucleus.tnt-ea.com"], 329 | [953,"OriginFriendUrl","https://m.friends.dm.origin.com"], 330 | [954,"SynergyUrl", "https://synergy.eamobile.com:443"], 331 | [949,"SynergyFormatUrl","https://%s.sn.eamobile.com"], 332 | [995,"KillswitchAllowFriends","0"], 333 | [994,"ServerVersion","local"], 334 | [1000,"Origin.AppId","febb96fb9f8eb468"], 335 | [1001,"ParamUrl.ea.na","https://kaleidoscope.ea.com?tag=81c4640c68f5eee1"], 336 | [1002,"ParamUrl.ea.row","https://kaleidoscope.ea.com?tag=4dada08e18133a83"], 337 | [1003,"TntUrl","https://tnt-auth.ea.com?trackingKey=3e92a468de3d2c33"], 338 | [1010,"MHVersion", "1"], 339 | [1011,"RequestsPerSecond","29"], 340 | [1011,"MH_Version","2"], 341 | [1015,"FriendsProxyUrl","https://friends.simpsons-ea.com"] 342 | ], 343 | 344 | "server_redirects": [ 345 | "nexus.portal", 346 | "antelope.groups.url", 347 | "service.discovery.url", 348 | "synergy.tracking", 349 | "antelope.friends.url", 350 | "dmg.url", 351 | "avatars.url", 352 | "synergy.m2u", 353 | "akamai.url", 354 | "synergy.pns", 355 | "mayhem.url", 356 | "group.recommendations.url", 357 | "synergy.s2s", 358 | "friend.recommendations.url", 359 | "geoip.url", 360 | "river.pin", 361 | "origincasualserver.url", 362 | "ens.url", 363 | "eadp.friends.host", 364 | "synergy.product", 365 | "synergy.drm", 366 | "synergy.user", 367 | "antelope.inbox.url", 368 | "antelope.rtm.url", 369 | "friends.url", 370 | "aruba.url", 371 | "synergy.cipgl", 372 | "nexus.connect", 373 | "synergy.director", 374 | "pin.aruba.url", 375 | "nexus.proxy" 376 | ] 377 | } 378 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | protobuf>=5.29.2 2 | flask 3 | flask-inflate 4 | Werkzeug 5 | jwt 6 | -------------------------------------------------------------------------------- /templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {% block title %} {% endblock %} - TSTO Private Server 6 | 14 | 15 | 16 |
17 |
18 | {% block content %} {% endblock %} 19 |
20 | 21 | -------------------------------------------------------------------------------- /templates/dashboard.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 |
5 | 6 | 11 | 12 |
13 | {% endblock %} -------------------------------------------------------------------------------- /towns/mytown: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tjac/tsto_server/7c0de3baf1af02a8c0dac727d938c6f9248f4c32/towns/mytown --------------------------------------------------------------------------------