martinsileno / pubg-typescript-api

TypeScript wrapper on official PUBG API.
MIT License
12 stars 9 forks source link

Cannot read property error during telemetry data parsing #9

Closed Otrozone closed 6 years ago

Otrozone commented 6 years ago

During telemetry data parsing two TypeError: Cannot read property can occur.

It looks like it is possible that during the PlayerAttack event, event.vehicle object can be null:

Stack:

TypeError: Cannot read property 'vehicleType' of null
    at new Vehicle (http://localhost:4200/vendor.js:106095:37)
    at new PlayerAttack (http://localhost:4200/vendor.js:105288:25)
    at Telemetry.telemetryData.forEach.elem (http://localhost:4200/vendor.js:106207:51)
    at Array.forEach (<anonymous>)
    at new Telemetry (http://localhost:4200/vendor.js:106161:23)

Event object:

_D:"2018-08-05T16:28:49.010Z"
_T:"LogPlayerAttack"
attacker:Object {name: "SuperGaber", teamId: 1, health: 100, …}
attackId:1
attackType:"Weapon"
common:Object {isGame: 0}
vehicle:null <---
weapon:Object {itemId: "", stackCount: 374883072, category: "", …}
__proto__:Object {constructor: , __defineG...

The same situation can heppen in PlayerTakeDamage event. The event.attacker can be null.

Stack:

TypeError: Cannot read property 'name' of null
    at new Character (http://localhost:4200/vendor.js:105867:32)
    at new PlayerTakeDamage (http://localhost:4200/vendor.js:105577:26)
    at Telemetry.telemetryData.forEach.elem (http://localhost:4200/vendor.js:106233:55)
    at Array.forEach (<anonymous>)
    at new Telemetry (http://localhost:4200/vendor.js:106163:23)

Event object:

_D:"2018-08-05T16:31:11.795Z"
_T:"LogPlayerTakeDamage"
attacker:null <---
attackId:-1
common:Object {isGame: 0.10000000149011612}
damage:0
damageCauserName:"PlayerMale_A_C"
damageReason:"None"
damageTypeCategory:"Damage_Groggy"
victim:Object {name: "sergeach", teamId: 23, health: 0, …}
__proto__:Object {constructor: , __defineG

Checking of objects can help to parse whole telemetry object data:

pubg-typescript-api\entities\telemetry\events\playerAttack.js

        if (event.vehicle) {
            this._vehicle = new vehicle_1.Vehicle(event.vehicle);
        }

pubg-typescript-api\entities\telemetry\events\playerTakeDamage.js

        if (event.attacker) {
            this._attacker = new character_1.Character(event.attacker);
        } 
martinsileno commented 6 years ago

Thanks for reporting!

Fixed in #10 (v1.4.1)

Let me know if you find more (unexpected) undefined values in telemetry results.