brucedeity/pwhexparser

PHP package for reading PW's octets

v1.22 2024-12-29 19:31 UTC

This package is auto-updated.

Last update: 2025-06-29 01:51:35 UTC


README

This project is able to decode PW's hexadecimal strings based on their predefined structure.

Features

  • Decode the structure for Weapon, Armor, Fashion, Jewelry, Flight, Role Property and more.
  • Retrieve the decoded data as json.
  • Error handling and validation for input data.

Installation

You can install the package via composer:

composer require brucedeity/pwhexparser

Example

Here's an example usage of the PWHexParser library:

<?php

require __DIR__ . '/../vendor/autoload.php';

$decoder = new App\Decoder();
$decoder->setItemType('Fashion'); // Weapon, Armor, Charm, Jewelry, Flight, Card...
$decoder->sethexString('1e00000092470100010a620072007500630065000000'); //Mandarin Silk Gown
$result = $decoder->decode();

header('Content-Type: application/json');
echo json_encode($result, JSON_PRETTY_PRINT);

Which will output:

{
  "level_req": 30,
  "color": 18322,
  "gender": 1,
  "creator_type": 1,
  "name_length": 5,
  "name": "bruce",
  "color_mask": 0
}

Guessing item type:

You can also guess the item type based on the item's mask:

<?php

require __DIR__ . '/../vendor/autoload.php';

$mask = 1; // Weapon

$decoder = new App\Decoder();
$decoder->guessItemType($mask);
$decoder->sethexString('5a00ff001001000031000000b4610000786900002c00040a4200720075006300650000000000090000000b00000000000000930200009b0500000000000000000000180000000000604000000000010000000000000003000000114500009200000001000000f02300004d000000cf2500000e000000');
$result = $decoder->decode();

header('Content-Type: application/json');
echo json_encode($result, JSON_PRETTY_PRINT);

Output:

{
  "level": 90,
  "class": 255,
  "strength": 272,
  "vitality": 0,
  "dexterity": 49,
  "magic": 0,
  "min_durability": 250,
  "max_durability": 270,
  "item_type": 44,
  "item_flag": 4,
  "name_length": 10,
  "name": "Bruce",
  "ranged_type": 0,
  "weapon_type": 9,
  "weapon_grade": 11,
  "ammunition_type": 0,
  "min_physical_damage": 659,
  "max_physical_damage": 1435,
  "min_magic_damage": 0,
  "max_magic_damage": 0,
  "attack_rate": 0.83,
  "attack_range": 3.5,
  "minimum_range": 0,
  "sockets_count": 1,
  "sockets": [
    0
  ],
  "addons_count": 3,
  "addons": {
    "special_addons": [
      {
        "id": 1297,
        "value": 146,
        "level": 1
      }
    ],
    "normal_addons": [
      {
        "id": 1008,
        "value": 77
      },
      {
        "id": 1487,
        "value": 14
      }
    ],
    "refine_addons": [
      
    ],
    "socket_addons": [
      
    ]
  }
}

Translating fields:

<?php
$mask = 1; // Weapon

$decoder = new Decoder;
$decoder->guessItemType($mask);
$decoder->setLang('pt-BR');
$decoder->sethexString('64002000360000002e0100008c7b0000007d00002c000406480075007a0002000000c55c00000f00000000000000ad02000004040000000000000000000010000000000020400000000002000900d0070000d007000005000000db21000003000000852500005e010000cc25000012000000e1a1000064000000e1a1000064000000');
$decoder->setLang('pt-BR');

echo json_encode($decoder->translate(), JSON_PRETTY_PRINT);