├── .browserslistrc ├── .eslintrc.js ├── .github └── workflows │ └── main.yml ├── .gitignore ├── README.md ├── babel.config.js ├── package-lock.json ├── package.json ├── public ├── bootstrap.bundle.min.js ├── bootstrap.bundle.min.js.map ├── favicon.ico └── index.html ├── src ├── App.vue ├── assets │ └── logo.png ├── components │ └── PacketStructure.vue ├── data │ ├── 1.13c │ │ ├── client2sid.json │ │ └── gs2client.json │ ├── 1.14d │ │ ├── client2gs.json │ │ ├── client2mcps.json │ │ ├── client2sid.json │ │ ├── gs2client.json │ │ ├── mcps2client.json │ │ └── sid2client.json │ └── 1.15 │ │ ├── client2gs.json │ │ └── gs2client.json ├── main.js └── styles │ ├── accessible-colors.scss │ ├── base.scss │ ├── mixins.scss │ ├── normalize.scss │ ├── page.scss │ ├── utilities.scss │ └── variables.scss └── vue.config.js /.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true 5 | }, 6 | 'extends': [ 7 | 'plugin:vue/essential', 8 | 'eslint:recommended' 9 | ], 10 | parserOptions: { 11 | parser: 'babel-eslint' 12 | }, 13 | rules: { 14 | 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 15 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off' 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: CI 4 | 5 | # Controls when the action will run. 6 | on: 7 | # Triggers the workflow on push or pull request events but only for the main branch 8 | push: 9 | branches: [ main ] 10 | pull_request: 11 | branches: [ main ] 12 | 13 | # Allows you to run this workflow manually from the Actions tab 14 | workflow_dispatch: 15 | 16 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 17 | jobs: 18 | # This workflow contains a single job called "build" 19 | build: 20 | # The type of runner that the job will run on 21 | runs-on: ubuntu-latest 22 | 23 | # Steps represent a sequence of tasks that will be executed as part of the job 24 | steps: 25 | - uses: actions/setup-node@v3 26 | with: 27 | node-version: 12 28 | 29 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 30 | - uses: actions/checkout@v2 31 | 32 | # Set up a cache for the node modules to speed up builds 33 | - name: Cache node modules 34 | uses: actions/cache@v2 35 | env: 36 | cache-name: cache-node-modules 37 | with: 38 | # npm cache files are stored in `~/.npm` on Linux/macOS 39 | path: ~/.npm 40 | key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} 41 | restore-keys: | 42 | ${{ runner.os }}-build-${{ env.cache-name }}- 43 | ${{ runner.os }}-build- 44 | ${{ runner.os }}- 45 | 46 | # Runs a single command using the runners shell 47 | - name: Install Build Tools 48 | run: npm install 49 | 50 | # Runs a set of commands using the runners shell 51 | - name: Build App 52 | run: npm run build 53 | 54 | # Deploy the new built app but only for push. PR should not be able to deploy ... 55 | - name: Deploy 🚀 56 | if: ${{ github.event_name == 'push' }} 57 | uses: JamesIves/github-pages-deploy-action@3.7.1 58 | with: 59 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 60 | BRANCH: docs # The branch the action should deploy to. 61 | FOLDER: docs # The folder the action should deploy. 62 | CLEAN: true # Automatically remove deleted files from the deploy branch 63 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /docs 4 | 5 | # local env files 6 | .env.local 7 | .env.*.local 8 | 9 | # Log files 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | pnpm-debug.log* 14 | 15 | # Editor directories and files 16 | .idea 17 | .vscode 18 | *.suo 19 | *.ntvs* 20 | *.njsproj 21 | *.sln 22 | *.sw? 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Diablo 2 Packets Data 2 | 3 | The main data for this repo lives in `src/data/`, so any updates to the packet data should be done there. 4 | 5 | To set up the app for local testing run `npm install` in the repo root folder (requires node.js). 6 | 7 | To locally test the app run `npm start`. 8 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/cli-plugin-babel/preset' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hello-world", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "vue-cli-service serve", 7 | "build": "vue-cli-service build", 8 | "lint": "vue-cli-service lint" 9 | }, 10 | "dependencies": { 11 | "core-js": "^3.6.5", 12 | "vue": "^2.6.11" 13 | }, 14 | "devDependencies": { 15 | "@vue/cli-plugin-babel": "~4.5.0", 16 | "@vue/cli-plugin-eslint": "~4.5.0", 17 | "@vue/cli-service": "~4.5.0", 18 | "babel-eslint": "^10.1.0", 19 | "eslint": "^6.7.2", 20 | "eslint-plugin-vue": "^6.2.2", 21 | "node-sass": "^4.12.0", 22 | "sass-loader": "^8.0.2", 23 | "vue-template-compiler": "^2.6.11", 24 | "elliptic": "^6.5.4", 25 | "ssri": ">=8.0.1", 26 | "is-svg": ">=4.2.2" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blizzhackers/Diablo2PacketsData/3663daf9375ca9ebaa69e9ec41e92aa9e1923915/public/favicon.ico -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | D2 Packet Browser 9 | 10 | 11 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 41 | 42 | 248 | 249 | 254 | -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blizzhackers/Diablo2PacketsData/3663daf9375ca9ebaa69e9ec41e92aa9e1923915/src/assets/logo.png -------------------------------------------------------------------------------- /src/components/PacketStructure.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 30 | 31 | 32 | 34 | -------------------------------------------------------------------------------- /src/data/1.13c/client2sid.json: -------------------------------------------------------------------------------- 1 | { 2 | "SID_NULL" : { 3 | "PacketId" : "0x00", 4 | "Description" : "", 5 | "Structure" : [ 6 | { "SidHeader" : [ 7 | { "BYTE" : "AlwaysFF" }, 8 | { "BYTE" : "PacketId" }, 9 | { "short" : "nSize" } 10 | ] 11 | } 12 | ] 13 | }, 14 | "SID_STOPADV" : { 15 | "PacketId" : "0x02", 16 | "Description" : "", 17 | "Structure" : [ 18 | { "SidHeader" : [ 19 | { "BYTE" : "AlwaysFF" }, 20 | { "BYTE" : "PacketId" }, 21 | { "short" : "nSize" } 22 | ] 23 | } 24 | ] 25 | }, 26 | "SID_GETADVLISTEX" : { 27 | "PacketId" : "0x09", 28 | "Description" : "", 29 | "Structure" : [ 30 | { "SidHeader" : [ 31 | { "BYTE" : "AlwaysFF" }, 32 | { "BYTE" : "PacketId" }, 33 | { "short" : "nSize" } 34 | ] 35 | }, 36 | { "short" : "GameType" }, 37 | { "short" : "GameSubType" }, 38 | { "int" : "ViewingFilter" }, 39 | { "int" : "Zero" }, 40 | { "int" : "NumberOfGames" }, 41 | { "std::string" : "GameName" }, 42 | { "std::string" : "GamePass" }, 43 | { "std::string" : "GameDesc" } 44 | ] 45 | }, 46 | "SID_ENTERCHAT" : { 47 | "PacketId" : "0x0A", 48 | "Description" : "", 49 | "Structure" : [ 50 | { "SidHeader" : [ 51 | { "BYTE" : "AlwaysFF" }, 52 | { "BYTE" : "PacketId" }, 53 | { "short" : "nSize" } 54 | ] 55 | }, 56 | { "std::string" : "Username" }, 57 | { "std::string" : "Statstring" } 58 | ] 59 | }, 60 | "SID_GETCHANNELLIST" : { 61 | "PacketId" : "0x0B", 62 | "Description" : "", 63 | "Structure" : [ 64 | { "SidHeader" : [ 65 | { "BYTE" : "AlwaysFF" }, 66 | { "BYTE" : "PacketId" }, 67 | { "short" : "nSize" } 68 | ] 69 | }, 70 | { "int" : "ProductCode" } 71 | ] 72 | }, 73 | "SID_JOINCHANNEL" : { 74 | "PacketId" : "0x0C", 75 | "Description" : "", 76 | "Structure" : [ 77 | { "SidHeader" : [ 78 | { "BYTE" : "AlwaysFF" }, 79 | { "BYTE" : "PacketId" }, 80 | { "short" : "nSize" } 81 | ] 82 | }, 83 | { "int" : "Flags" }, 84 | { "std::string" : "Channel" } 85 | ] 86 | }, 87 | "SID_CHATCOMMAND" : { 88 | "PacketId" : "0x0E", 89 | "Description" : "", 90 | "Structure" : [ 91 | { "SidHeader" : [ 92 | { "BYTE" : "AlwaysFF" }, 93 | { "BYTE" : "PacketId" }, 94 | { "short" : "nSize" } 95 | ] 96 | }, 97 | { "std::string" : "Text" } 98 | ] 99 | }, 100 | "SID_LEAVECHAT" : { 101 | "PacketId" : "0x10", 102 | "Description" : "", 103 | "Structure" : [ 104 | { "SidHeader" : [ 105 | { "BYTE" : "AlwaysFF" }, 106 | { "BYTE" : "PacketId" }, 107 | { "short" : "nSize" } 108 | ] 109 | } 110 | ] 111 | }, 112 | "SID_CHECKAD" : { 113 | "PacketId" : "0x15", 114 | "Description" : "", 115 | "Structure" : [ 116 | { "SidHeader" : [ 117 | { "BYTE" : "AlwaysFF" }, 118 | { "BYTE" : "PacketId" }, 119 | { "short" : "nSize" } 120 | ] 121 | }, 122 | { "int" : "PlatformCode" }, 123 | { "int" : "ProductCode" }, 124 | { "int" : "BannerID" }, 125 | { "int" : "CurrentTime" } 126 | ] 127 | }, 128 | "SID_CLICKAD" : { 129 | "PacketId" : "0x16", 130 | "Description" : "", 131 | "Structure" : [ 132 | { "SidHeader" : [ 133 | { "BYTE" : "AlwaysFF" }, 134 | { "BYTE" : "PacketId" }, 135 | { "short" : "nSize" } 136 | ] 137 | }, 138 | { "int" : "AdID" }, 139 | { "int" : "RequestType" } 140 | ] 141 | }, 142 | "SID_REGISTRY" : { 143 | "PacketId" : "0x18", 144 | "Description" : "", 145 | "Structure" : [ 146 | { "SidHeader" : [ 147 | { "BYTE" : "AlwaysFF" }, 148 | { "BYTE" : "PacketId" }, 149 | { "short" : "nSize" } 150 | ] 151 | }, 152 | { "int" : "Cookie" }, 153 | { "std::string" : "KeyValue" } 154 | ] 155 | }, 156 | "SID_STARTADVEX3" : { 157 | "PacketId" : "0x1C", 158 | "Description" : "", 159 | "Structure" : [ 160 | { "SidHeader" : [ 161 | { "BYTE" : "AlwaysFF" }, 162 | { "BYTE" : "PacketId" }, 163 | { "short" : "nSize" } 164 | ] 165 | }, 166 | { "int" : "IsPrivateGame" }, 167 | { "int" : "Uptime" }, 168 | { "short" : "GameType" }, 169 | { "short" : "GameSubtype" }, 170 | { "int" : "ProviderVersion" }, 171 | { "int" : "LadderType" }, 172 | { "std::string" : "GameName" }, 173 | { "std::string" : "GamePass" }, 174 | { "std::string" : "GameStatString" } 175 | ] 176 | }, 177 | "SID_LEAVEGAME" : { 178 | "PacketId" : "0x1F", 179 | "Description" : "", 180 | "Structure" : [ 181 | { "SidHeader" : [ 182 | { "BYTE" : "AlwaysFF" }, 183 | { "BYTE" : "PacketId" }, 184 | { "short" : "nSize" } 185 | ] 186 | } 187 | ] 188 | }, 189 | "SID_DISPLAYAD" : { 190 | "PacketId" : "0x21", 191 | "Description" : "", 192 | "Structure" : [ 193 | { "SidHeader" : [ 194 | { "BYTE" : "AlwaysFF" }, 195 | { "BYTE" : "PacketId" }, 196 | { "short" : "nSize" } 197 | ] 198 | }, 199 | { "int" : "PlatformCode" }, 200 | { "int" : "ProductCode" }, 201 | { "int" : "AdID" }, 202 | { "std::string" : "Filename" }, 203 | { "std::string" : "URL" } 204 | ] 205 | }, 206 | "SID_NOTIFYJOIN" : { 207 | "PacketId" : "0x22", 208 | "Description" : "", 209 | "Structure" : [ 210 | { "SidHeader" : [ 211 | { "BYTE" : "AlwaysFF" }, 212 | { "BYTE" : "PacketId" }, 213 | { "short" : "nSize" } 214 | ] 215 | }, 216 | { "int" : "ProductCode" }, 217 | { "int" : "ProductVersion" }, 218 | { "std::string" : "GameName" }, 219 | { "std::string" : "GamePass" } 220 | ] 221 | }, 222 | "SID_PING" : { 223 | "PacketId" : "0x25", 224 | "Description" : "", 225 | "Structure" : [ 226 | { "SidHeader" : [ 227 | { "BYTE" : "AlwaysFF" }, 228 | { "BYTE" : "PacketId" }, 229 | { "short" : "nSize" } 230 | ] 231 | }, 232 | { "int" : "Value" } 233 | ] 234 | }, 235 | "SID_READUSERDATA" : { 236 | "PacketId" : "0x26", 237 | "Description" : "", 238 | "Structure" : [ 239 | { "SidHeader" : [ 240 | { "BYTE" : "AlwaysFF" }, 241 | { "BYTE" : "PacketId" }, 242 | { "short" : "nSize" } 243 | ] 244 | }, 245 | { "int" : "AccountsCount" }, 246 | { "int" : "KeysCount" }, 247 | { "int" : "RequestId" }, 248 | { "std::string" : "Accounts[AccountsCount]" }, 249 | { "std::string" : "Keys[KeysCount]" } 250 | ] 251 | }, 252 | "SID_WRITEUSERDATA" : { 253 | "PacketId" : "0x27", 254 | "Description" : "", 255 | "Structure" : [ 256 | { "SidHeader" : [ 257 | { "BYTE" : "AlwaysFF" }, 258 | { "BYTE" : "PacketId" }, 259 | { "short" : "nSize" } 260 | ] 261 | }, 262 | { "int" : "AccountsCount" }, 263 | { "int" : "KeysCount" }, 264 | { "std::string" : "Accounts[AccountsCount]" }, 265 | { "std::string" : "Keys[KeysCount]" }, 266 | { "std::string" : "Values[KeysCount]" } 267 | ] 268 | }, 269 | "SID_CHANGEPASSWORD" : { 270 | "PacketId" : "0x31", 271 | "Description" : "", 272 | "Structure" : [ 273 | { "SidHeader" : [ 274 | { "BYTE" : "AlwaysFF" }, 275 | { "BYTE" : "PacketId" }, 276 | { "short" : "nSize" } 277 | ] 278 | }, 279 | { "int" : "ClientToken" }, 280 | { "int" : "ServerToken" }, 281 | { "BYTE" : "OldDoubleHashPassword[20]" }, 282 | { "BYTE" : "NewPasswordHash[20]" }, 283 | { "std::string" : "Account" } 284 | ] 285 | }, 286 | "SID_GETFILETIME" : { 287 | "PacketId" : "0x33", 288 | "Description" : "", 289 | "Structure" : [ 290 | { "SidHeader" : [ 291 | { "BYTE" : "AlwaysFF" }, 292 | { "BYTE" : "PacketId" }, 293 | { "short" : "nSize" } 294 | ] 295 | }, 296 | { "int" : "RequestId" }, 297 | { "int" : "Unknown" }, 298 | { "std::string" : "Filename" } 299 | ] 300 | }, 301 | "SID_LOGONRESPONSE2" : { 302 | "PacketId" : "0x3A", 303 | "Description" : "", 304 | "Structure" : [ 305 | { "SidHeader" : [ 306 | { "BYTE" : "AlwaysFF" }, 307 | { "BYTE" : "PacketId" }, 308 | { "short" : "nSize" } 309 | ] 310 | }, 311 | { "int" : "ClientToken" }, 312 | { "int" : "ServerToken" }, 313 | { "BYTE" : "PWHash[20]" }, 314 | { "std::string" : "Username" } 315 | ] 316 | }, 317 | "SID_CREATEACCOUNT2" : { 318 | "PacketId" : "0x3D", 319 | "Description" : "", 320 | "Structure" : [ 321 | { "SidHeader" : [ 322 | { "BYTE" : "AlwaysFF" }, 323 | { "BYTE" : "PacketId" }, 324 | { "short" : "nSize" } 325 | ] 326 | }, 327 | { "BYTE" : "PasswordHash[20]" }, 328 | { "std::string" : "AccountName" } 329 | ] 330 | }, 331 | "SID_LOGONREALMEX" : { 332 | "PacketId" : "0x3E", 333 | "Description" : "", 334 | "Structure" : [ 335 | { "SidHeader" : [ 336 | { "BYTE" : "AlwaysFF" }, 337 | { "BYTE" : "PacketId" }, 338 | { "short" : "nSize" } 339 | ] 340 | }, 341 | { "int" : "ClientToken" }, 342 | { "BYTE" : "HashedRealmPassword[20]" }, 343 | { "std::string" : "RealmTitle" } 344 | ] 345 | }, 346 | "SID_QUERYREALMS2" : { 347 | "PacketId" : "0x40", 348 | "Description" : "", 349 | "Structure" : [ 350 | { "SidHeader" : [ 351 | { "BYTE" : "AlwaysFF" }, 352 | { "BYTE" : "PacketId" }, 353 | { "short" : "nSize" } 354 | ] 355 | } 356 | ] 357 | }, 358 | "SID_NEWS_INFO" : { 359 | "PacketId" : "0x46", 360 | "Description" : "", 361 | "Structure" : [ 362 | { "SidHeader" : [ 363 | { "BYTE" : "AlwaysFF" }, 364 | { "BYTE" : "PacketId" }, 365 | { "short" : "nSize" } 366 | ] 367 | }, 368 | { "int" : "Timestamp" } 369 | ] 370 | }, 371 | "SID_EXTRAWORK" : { 372 | "PacketId" : "0x4B", 373 | "Description" : "", 374 | "Structure" : [ 375 | { "SidHeader" : [ 376 | { "BYTE" : "AlwaysFF" }, 377 | { "BYTE" : "PacketId" }, 378 | { "short" : "nSize" } 379 | ] 380 | }, 381 | { "short" : "GameType" }, 382 | { "short" : "Length" }, 383 | { "BYTE" : "Stream[Length]" } 384 | ] 385 | }, 386 | "SID_AUTH_INFO" : { 387 | "PacketId" : "0x50", 388 | "Description" : "", 389 | "Structure" : [ 390 | { "SidHeader" : [ 391 | { "BYTE" : "AlwaysFF" }, 392 | { "BYTE" : "PacketId" }, 393 | { "short" : "nSize" } 394 | ] 395 | }, 396 | { "int" : "ProtocolID" }, 397 | { "int" : "PlatformCode" }, 398 | { "int" : "ProductCode" }, 399 | { "int" : "ProductVersion" }, 400 | { "int" : "ProductLanguage" }, 401 | { "int" : "LocalIP" }, 402 | { "int" : "TimeZoneBias" }, 403 | { "int" : "LocaleID" }, 404 | { "int" : "LanguageID" }, 405 | { "std::string" : "CountryAbreviation" }, 406 | { "std::string" : "Coutry" } 407 | ] 408 | }, 409 | "SID_AUTH_CHECK" : { 410 | "PacketId" : "0x51", 411 | "Description" : "", 412 | "Structure" : [ 413 | { "SidHeader" : [ 414 | { "BYTE" : "AlwaysFF" }, 415 | { "BYTE" : "PacketId" }, 416 | { "short" : "nSize" } 417 | ] 418 | }, 419 | { "int" : "ClientToken" }, 420 | { "int" : "ExeVersion" }, 421 | { "int" : "ExeHash" }, 422 | { "int" : "CDKeyCount" }, 423 | { "int" : "Spawn" }, 424 | { "CDKeys[CDKeyCount]" : [ 425 | { "int" : "Length" }, 426 | { "int" : "Product" }, 427 | { "int" : "Public" }, 428 | { "int" : "Unknown" }, 429 | { "BYTE" : "Private[20]" } 430 | ] 431 | }, 432 | { "std::string" : "ExeInfo" }, 433 | { "std::string" : "Owner" } 434 | ] 435 | }, 436 | "SID_RESETPASSWORD" : { 437 | "PacketId" : "0x5A", 438 | "Description" : "", 439 | "Structure" : [ 440 | { "SidHeader" : [ 441 | { "BYTE" : "AlwaysFF" }, 442 | { "BYTE" : "PacketId" }, 443 | { "short" : "nSize" } 444 | ] 445 | }, 446 | { "std::string" : "Account" }, 447 | { "std::string" : "eMail" } 448 | ] 449 | }, 450 | "SID_CHANGEEMAIL" : { 451 | "PacketId" : "0x5B", 452 | "Description" : "", 453 | "Structure" : [ 454 | { "SidHeader" : [ 455 | { "BYTE" : "AlwaysFF" }, 456 | { "BYTE" : "PacketId" }, 457 | { "short" : "nSize" } 458 | ] 459 | }, 460 | { "std::string" : "Account" }, 461 | { "std::string" : "eMailOld" }, 462 | { "std::string" : "eMailNew" } 463 | ] 464 | }, 465 | "SID_SETEMAIL" : { 466 | "PacketId" : "0x59", 467 | "Description" : "", 468 | "Structure" : [ 469 | { "SidHeader" : [ 470 | { "BYTE" : "AlwaysFF" }, 471 | { "BYTE" : "PacketId" }, 472 | { "short" : "nSize" } 473 | ] 474 | }, 475 | { "std::string" : "eMail" } 476 | ] 477 | } 478 | } -------------------------------------------------------------------------------- /src/data/1.14d/client2gs.json: -------------------------------------------------------------------------------- 1 | { 2 | "D2GS_WALKTOLOCATION" : { 3 | "PacketId" : "0x01", 4 | "Description" : "", 5 | "Size" : 5, 6 | "Structure" : [ 7 | { "BYTE" : "PacketId" }, 8 | { "short" : "nTargetX" }, 9 | { "short" : "nTargetY" } 10 | ] 11 | }, 12 | "D2GS_WALKTOENTITY" : { 13 | "PacketId" : "0x02", 14 | "Description" : "", 15 | "Size" : 9, 16 | "Structure" : [ 17 | { "BYTE" : "PacketId" }, 18 | { "int" : "nUnitType" }, 19 | { "int" : "nUnitGUID" } 20 | ] 21 | }, 22 | "D2GS_RUNTOLOCATION" : { 23 | "PacketId" : "0x03", 24 | "Description" : "", 25 | "Size" : 5, 26 | "Structure" : [ 27 | { "BYTE" : "PacketId" }, 28 | { "short" : "nTargetX" }, 29 | { "short" : "nTargetY" } 30 | ] 31 | }, 32 | "D2GS_RUNTOENTITY" : { 33 | "PacketId" : "0x04", 34 | "Description" : "", 35 | "Size" : 9, 36 | "Structure" : [ 37 | { "BYTE" : "PacketId" }, 38 | { "int" : "nUnitType" }, 39 | { "int" : "nUnitGUID" } 40 | ] 41 | }, 42 | "D2GS_LEFTSKILLONLOCATION" : { 43 | "PacketId" : "0x05", 44 | "Description" : "", 45 | "Size" : 5, 46 | "Structure" : [ 47 | { "BYTE" : "PacketId" }, 48 | { "short" : "nTargetX" }, 49 | { "short" : "nTargetY" } 50 | ] 51 | }, 52 | "D2GS_LEFTSKILLONENTITY" : { 53 | "PacketId" : "0x06", 54 | "Description" : "", 55 | "Size" : 9, 56 | "Structure" : [ 57 | { "BYTE" : "PacketId" }, 58 | { "int" : "nUnitType" }, 59 | { "int" : "nUnitGUID" } 60 | ] 61 | }, 62 | "D2GS_LEFTSKILLONENTITYEX" : { 63 | "PacketId" : "0x07", 64 | "Description" : "", 65 | "Size" : 9, 66 | "Structure" : [ 67 | { "BYTE" : "PacketId" }, 68 | { "int" : "nUnitType" }, 69 | { "int" : "nUnitGUID" } 70 | ] 71 | }, 72 | "D2GS_LEFTSKILLONLOCATIONEX" : { 73 | "PacketId" : "0x08", 74 | "Description" : "", 75 | "Size" : 5, 76 | "Structure" : [ 77 | { "BYTE" : "PacketId" }, 78 | { "short" : "nTargetX" }, 79 | { "short" : "nTargetY" } 80 | ] 81 | }, 82 | "D2GS_LEFTSKILLONENTITYEX2" : { 83 | "PacketId" : "0x09", 84 | "Description" : "", 85 | "Size" : 9, 86 | "Structure" : [ 87 | { "BYTE" : "PacketId" }, 88 | { "int" : "nUnitType" }, 89 | { "int" : "nUnitGUID" } 90 | ] 91 | }, 92 | "D2GS_LEFTSKILLONENTITYEX3" : { 93 | "PacketId" : "0x0A", 94 | "Description" : "", 95 | "Size" : 9, 96 | "Structure" : [ 97 | { "BYTE" : "PacketId" }, 98 | { "int" : "nUnitType" }, 99 | { "int" : "nUnitGUID" } 100 | ] 101 | }, 102 | "D2GS_RIGHTSKILLONLOCATION" : { 103 | "PacketId" : "0x0C", 104 | "Description" : "", 105 | "Size" : 5, 106 | "Structure" : [ 107 | { "BYTE" : "PacketId" }, 108 | { "short" : "nTargetX" }, 109 | { "short" : "nTargetY" } 110 | ] 111 | }, 112 | "D2GS_RIGHTSKILLONENTITY" : { 113 | "PacketId" : "0x0D", 114 | "Description" : "", 115 | "Size" : 9, 116 | "Structure" : [ 117 | { "BYTE" : "PacketId" }, 118 | { "int" : "nUnitType" }, 119 | { "int" : "nUnitGUID" } 120 | ] 121 | }, 122 | "D2GS_RIGHTSKILLONENTITYEX" : { 123 | "PacketId" : "0x0E", 124 | "Description" : "", 125 | "Size" : 9, 126 | "Structure" : [ 127 | { "BYTE" : "PacketId" }, 128 | { "int" : "nUnitType" }, 129 | { "int" : "nUnitGUID" } 130 | ] 131 | }, 132 | "D2GS_RIGHTSKILLONLOCATIONEX" : { 133 | "PacketId" : "0x0F", 134 | "Description" : "", 135 | "Size" : 5, 136 | "Structure" : [ 137 | { "BYTE" : "PacketId" }, 138 | { "short" : "nTargetX" }, 139 | { "short" : "nTargetY" } 140 | ] 141 | }, 142 | "D2GS_RIGHTSKILLONENTITYEX2" : { 143 | "PacketId" : "0x10", 144 | "Description" : "", 145 | "Size" : 9, 146 | "Structure" : [ 147 | { "BYTE" : "PacketId" }, 148 | { "int" : "nUnitType" }, 149 | { "int" : "nUnitGUID" } 150 | ] 151 | }, 152 | "D2GS_RIGHTSKILLONENTITYEX3" : { 153 | "PacketId" : "0x11", 154 | "Description" : "", 155 | "Size" : 9, 156 | "Structure" : [ 157 | { "BYTE" : "PacketId" }, 158 | { "int" : "nUnitType" }, 159 | { "int" : "nUnitGUID" } 160 | ] 161 | }, 162 | "D2GS_SET_INFERNO_STATE" : { 163 | "PacketId" : "0x12", 164 | "Description" : "", 165 | "Size" : 1, 166 | "Structure" : [ 167 | { "BYTE" : "PacketId" } 168 | ] 169 | }, 170 | "D2GS_INTERACTWITHENTITY" : { 171 | "PacketId" : "0x13", 172 | "Description" : "", 173 | "Size" : 9, 174 | "Structure" : [ 175 | { "BYTE" : "PacketId" }, 176 | { "int" : "nUnitType" }, 177 | { "int" : "nUnitGUID" } 178 | ] 179 | }, 180 | "D2GS_OVERHEADMESSAGE" : { 181 | "PacketId" : "0x14", 182 | "Description" : "nType is ignored by server", 183 | "Size" : -1, 184 | "Structure" : [ 185 | { "BYTE" : "PacketId" }, 186 | { "BYTE" : "nType" }, 187 | { "BYTE" : "nLanguageCode" }, 188 | { "std::string" : "szMessage" }, 189 | { "std::string" : "szTarget" }, 190 | { "std::string" : "szUnknown" } 191 | ] 192 | }, 193 | "D2GS_CHAT" : { 194 | "PacketId" : "0x15", 195 | "Description" : "", 196 | "Size" : -1, 197 | "Structure" : [ 198 | { "BYTE" : "PacketId" }, 199 | { "BYTE" : "nType" }, 200 | { "BYTE" : "nLanguageCode" }, 201 | { "std::string" : "szMessage" }, 202 | { "std::string" : "szTarget" }, 203 | { "std::string" : "szUnknown" } 204 | ] 205 | }, 206 | "D2GS_PICKUPITEM" : { 207 | "PacketId" : "0x16", 208 | "Description" : "", 209 | "Size" : 13, 210 | "Structure" : [ 211 | { "BYTE" : "PacketId" }, 212 | { "int" : "nItemType" }, 213 | { "int" : "nItemGUID" }, 214 | { "int" : "bCursor" } 215 | ] 216 | }, 217 | "D2GS_DROPITEM" : { 218 | "PacketId" : "0x17", 219 | "Description" : "", 220 | "Size" : 5, 221 | "Structure" : [ 222 | { "BYTE" : "PacketId" }, 223 | { "int" : "nItemGUID" } 224 | ] 225 | }, 226 | "D2GS_ITEMTOBUFFER" : { 227 | "PacketId" : "0x18", 228 | "Description" : "", 229 | "Size" : 17, 230 | "Structure" : [ 231 | { "BYTE" : "PacketId" }, 232 | { "int" : "nItemGUID" }, 233 | { "int" : "nTargetX" }, 234 | { "int" : "nTargetY" }, 235 | { "int" : "nBuffer" } 236 | ] 237 | }, 238 | "D2GS_PICKUPBUFFERITEM" : { 239 | "PacketId" : "0x19", 240 | "Description" : "", 241 | "Size" : 5, 242 | "Structure" : [ 243 | { "BYTE" : "PacketId" }, 244 | { "int" : "nItemGUID" } 245 | ] 246 | }, 247 | "D2GS_ITEMTOBODY" : { 248 | "PacketId" : "0x1A", 249 | "Description" : "", 250 | "Size" : 9, 251 | "Structure" : [ 252 | { "BYTE" : "PacketId" }, 253 | { "int" : "nItemGUID" }, 254 | { "int" : "nBodyLocation" } 255 | ] 256 | }, 257 | "D2GS_SWAP2HANDEDITEM" : { 258 | "PacketId" : "0x1B", 259 | "Description" : "", 260 | "Size" : 9, 261 | "Structure" : [ 262 | { "BYTE" : "PacketId" }, 263 | { "int" : "nItemGUID" }, 264 | { "int" : "nBodyLocation" } 265 | ] 266 | }, 267 | "D2GS_PICKUPBODYITEM" : { 268 | "PacketId" : "0x1C", 269 | "Description" : "", 270 | "Size" : 3, 271 | "Structure" : [ 272 | { "BYTE" : "PacketId" }, 273 | { "short" : "nBodyLocation" } 274 | ] 275 | }, 276 | "D2GS_SWITCHBODYITEM" : { 277 | "PacketId" : "0x1D", 278 | "Description" : "", 279 | "Size" : 9, 280 | "Structure" : [ 281 | { "BYTE" : "PacketId" }, 282 | { "int" : "nItemGUID" }, 283 | { "int" : "nBodyLocation" } 284 | ] 285 | }, 286 | "D2GS_SWITCH1H_2H" : { 287 | "PacketId" : "0x1E", 288 | "Description" : "", 289 | "Size" : 9, 290 | "Structure" : [ 291 | { "BYTE" : "PacketId" }, 292 | { "int" : "nItemGUID" }, 293 | { "int" : "nBodyLocation" } 294 | ] 295 | }, 296 | "D2GS_SWITCHINVENTORYITEM" : { 297 | "PacketId" : "0x1F", 298 | "Description" : "", 299 | "Size" : 17, 300 | "Structure" : [ 301 | { "BYTE" : "PacketId" }, 302 | { "int" : "nItemCursorGUID" }, 303 | { "int" : "nItemTargetGUID" }, 304 | { "int" : "nTargetX" }, 305 | { "int" : "nTargetY" } 306 | ] 307 | }, 308 | "D2GS_USEITEM" : { 309 | "PacketId" : "0x20", 310 | "Description" : "", 311 | "Size" : 13, 312 | "Structure" : [ 313 | { "BYTE" : "PacketId" }, 314 | { "int" : "nItemGUID" }, 315 | { "int" : "nItemX" }, 316 | { "int" : "nItemY" } 317 | ] 318 | }, 319 | "D2GS_STACKITEM" : { 320 | "PacketId" : "0x21", 321 | "Description" : "", 322 | "Size" : 9, 323 | "Structure" : [ 324 | { "BYTE" : "PacketId" }, 325 | { "int" : "nItemCursorGUID" }, 326 | { "int" : "nItemTargetGUID" } 327 | ] 328 | }, 329 | "D2GS_REMOVESTACKITEM" : { 330 | "PacketId" : "0x22", 331 | "Description" : "", 332 | "Size" : 5, 333 | "Structure" : [ 334 | { "BYTE" : "PacketId" }, 335 | { "int" : "nItemGUID" } 336 | ] 337 | }, 338 | "D2GS_ITEMTOBELT" : { 339 | "PacketId" : "0x23", 340 | "Description" : "", 341 | "Size" : 9, 342 | "Structure" : [ 343 | { "BYTE" : "PacketId" }, 344 | { "int" : "nItemGUID" }, 345 | { "int" : "nLocation" } 346 | ] 347 | }, 348 | "D2GS_REMOVEBELTITEM" : { 349 | "PacketId" : "0x24", 350 | "Description" : "", 351 | "Size" : 5, 352 | "Structure" : [ 353 | { "BYTE" : "PacketId" }, 354 | { "int" : "nItemGUID" } 355 | ] 356 | }, 357 | "D2GS_SWITCHBELTITEM" : { 358 | "PacketId" : "0x25", 359 | "Description" : "", 360 | "Size" : 9, 361 | "Structure" : [ 362 | { "BYTE" : "PacketId" }, 363 | { "int" : "nItemCursorGUID" }, 364 | { "int" : "nItemTargetGUID" } 365 | ] 366 | }, 367 | "D2GS_USEBELTITEM" : { 368 | "PacketId" : "0x26", 369 | "Description" : "", 370 | "Size" : 13, 371 | "Structure" : [ 372 | { "BYTE" : "PacketId" }, 373 | { "int" : "nItemGUID" }, 374 | { "int" : "bOnMerc" }, 375 | { "int" : "Unused" } 376 | ] 377 | }, 378 | "D2GS_IDENTIFYITEM" : { 379 | "PacketId" : "0x27", 380 | "Description" : "", 381 | "Size" : 9, 382 | "Structure" : [ 383 | { "BYTE" : "PacketId" }, 384 | { "int" : "nItemGUID" }, 385 | { "int" : "nScroolGUID" } 386 | ] 387 | }, 388 | "D2GS_INSERTSOCKETITEM" : { 389 | "PacketId" : "0x28", 390 | "Description" : "", 391 | "Size" : 9, 392 | "Structure" : [ 393 | { "BYTE" : "PacketId" }, 394 | { "int" : "nItemCursorGUID" }, 395 | { "int" : "nItemTargetGUID" } 396 | ] 397 | }, 398 | "D2GS_SCROLLTOTOME" : { 399 | "PacketId" : "0x29", 400 | "Description" : "", 401 | "Size" : 9, 402 | "Structure" : [ 403 | { "BYTE" : "PacketId" }, 404 | { "int" : "nItemCursorGUID" }, 405 | { "int" : "nItemTargetGUID" } 406 | ] 407 | }, 408 | "D2GS_ITEMTOCUBE" : { 409 | "PacketId" : "0x2A", 410 | "Description" : "", 411 | "Size" : 9, 412 | "Structure" : [ 413 | { "BYTE" : "PacketId" }, 414 | { "int" : "nItemCursorGUID" }, 415 | { "int" : "nCubeGUID" } 416 | ] 417 | }, 418 | "D2GS_NPC_INIT" : { 419 | "PacketId" : "0x2F", 420 | "Description" : "", 421 | "Size" : 9, 422 | "Structure" : [ 423 | { "BYTE" : "PacketId" }, 424 | { "int" : "nActionType" }, 425 | { "int" : "nUnitGUID" } 426 | ] 427 | }, 428 | "D2GS_NPC_CANCEL" : { 429 | "PacketId" : "0x30", 430 | "Description" : "", 431 | "Size" : 9, 432 | "Structure" : [ 433 | { "BYTE" : "PacketId" }, 434 | { "int" : "nActionType" }, 435 | { "int" : "nUnitGUID" } 436 | ] 437 | }, 438 | "D2GS_QUESTMESSAGE" : { 439 | "PacketId" : "0x31", 440 | "Description" : "", 441 | "Size" : 9, 442 | "Structure" : [ 443 | { "BYTE" : "PacketId" }, 444 | { "int" : "nUnitGUID" }, 445 | { "int" : "nMessageID" } 446 | ] 447 | }, 448 | "D2GS_NPC_BUY" : { 449 | "PacketId" : "0x32", 450 | "Description" : "", 451 | "Size" : 17, 452 | "Structure" : [ 453 | { "BYTE" : "PacketId" }, 454 | { "int" : "nUnitGUID" }, 455 | { "int" : "nItemGUID" }, 456 | { "int" : "nBuyType" }, 457 | { "int" : "nCost" } 458 | ] 459 | }, 460 | "D2GS_NPC_SELL" : { 461 | "PacketId" : "0x33", 462 | "Description" : "Sells item to NPC", 463 | "Size" : 17, 464 | "Structure" : [ 465 | { "BYTE" : "PacketId" }, 466 | { "int" : "nNpcGUID" }, 467 | { "int" : "nItemGUID" }, 468 | { "WORD" : "nMode" }, 469 | { "BYTE" : "Padding[6]" } 470 | ] 471 | }, 472 | "D2GS_NPC_IDENTIFYITEMS" : { 473 | "PacketId" : "0x34", 474 | "Description" : "Identifies all items if player can afford it", 475 | "Size" : 5, 476 | "Structure" : [ 477 | { "BYTE" : "PacketId" }, 478 | { "int" : "nNpcGUID" } 479 | ] 480 | }, 481 | "D2GS_REPAIR" : { 482 | "PacketId" : "0x35", 483 | "Description" : "This is used to repair broken items. \nIf you set bRepairOne to 1 it will repair just this one item but when it is set to 0 it will repair all items.", 484 | "Size" : 17, 485 | "Structure" : [ 486 | { "BYTE" : "PacketId" }, 487 | { "int" : "nUnitGUID" }, 488 | { "int" : "nItemGUID" }, 489 | { "int" : "bRepairOne" }, 490 | { "int" : "nUnused" } 491 | ] 492 | }, 493 | "D2GS_HIREMERC" : { 494 | "PacketId" : "0x36", 495 | "Description" : "", 496 | "Size" : 9, 497 | "Structure" : [ 498 | { "BYTE" : "PacketId" }, 499 | { "int" : "nUnitGUID" }, 500 | { "int" : "nMercID" } 501 | ] 502 | }, 503 | "D2GS_IDENTIFYGAMBLE" : { 504 | "PacketId" : "0x37", 505 | "Description" : "", 506 | "Size" : 5, 507 | "Structure" : [ 508 | { "BYTE" : "PacketId" }, 509 | { "int" : "nItemGUID" } 510 | ] 511 | }, 512 | "D2GS_ENTITYACTION" : { 513 | "PacketId" : "0x38", 514 | "Description" : "", 515 | "Size" : 13, 516 | "Structure" : [ 517 | { "BYTE" : "PacketId" }, 518 | { "int" : "nAction" }, 519 | { "int" : "nUnitGUID" }, 520 | { "int" : "nComplement" } 521 | ] 522 | }, 523 | "D2GS_ADDSTAT" : { 524 | "PacketId" : "0x3A", 525 | "Description" : "", 526 | "Size" : 3, 527 | "Structure" : [ 528 | { "BYTE" : "PacketId" }, 529 | { "BYTE" : "nStatID" }, 530 | { "BYTE" : "nCountSubOne" } 531 | ] 532 | }, 533 | "D2GS_ADDSKILL" : { 534 | "PacketId" : "0x3B", 535 | "Description" : "", 536 | "Size" : 3, 537 | "Structure" : [ 538 | { "BYTE" : "PacketId" }, 539 | { "short" : "nSkillID" } 540 | ] 541 | }, 542 | "D2GS_SELECTSKILL" : { 543 | "PacketId" : "0x3C", 544 | "Description" : "", 545 | "Size" : 9, 546 | "Structure" : [ 547 | { "BYTE" : "PacketId" }, 548 | { "short" : "nSkillID" }, 549 | { "BYTE" : "Zero" }, 550 | { "BYTE" : "nHand" }, 551 | { "int" : "nItemGUID" } 552 | ] 553 | }, 554 | "D2GS_UNKNOWN_3D" : { 555 | "PacketId" : "0x3D", 556 | "Description" : "", 557 | "Size" : 5, 558 | "Structure" : [ 559 | { "BYTE" : "PacketId" }, 560 | { "int" : "nUnitGUID" } 561 | ] 562 | }, 563 | "D2GS_ACTIVATEITEM" : { 564 | "PacketId" : "0x3E", 565 | "Description" : "", 566 | "Size" : 5, 567 | "Structure" : [ 568 | { "BYTE" : "PacketId" }, 569 | { "int" : "nItemGUID" } 570 | ] 571 | }, 572 | "D2GS_CHARACTERPHRASE" : { 573 | "PacketId" : "0x3F", 574 | "Description" : "", 575 | "Size" : 3, 576 | "Structure" : [ 577 | { "BYTE" : "PacketId" }, 578 | { "short" : "nPhraseID" } 579 | ] 580 | }, 581 | "D2GS_UDPATEQUESTS" : { 582 | "PacketId" : "0x40", 583 | "Description" : "", 584 | "Size" : 1, 585 | "Structure" : [ 586 | { "BYTE" : "PacketId" } 587 | ] 588 | }, 589 | "D2GS_RESURRECT" : { 590 | "PacketId" : "0x41", 591 | "Description" : "", 592 | "Size" : 1, 593 | "Structure" : [ 594 | { "BYTE" : "PacketId" } 595 | ] 596 | }, 597 | "D2GS_STAFFINORIFICE" : { 598 | "PacketId" : "0x44", 599 | "Description" : "", 600 | "Size" : 17, 601 | "Structure" : [ 602 | { "BYTE" : "PacketId" }, 603 | { "int" : "nOrificeType" }, 604 | { "int" : "nOrificeGUID" }, 605 | { "int" : "nStaffGUID" }, 606 | { "int" : "nEntityState" } 607 | ] 608 | }, 609 | "D2GS_MERC_INTERACT" : { 610 | "PacketId" : "0x46", 611 | "Description" : "", 612 | "Size" : 13, 613 | "Structure" : [ 614 | { "BYTE" : "PacketId" }, 615 | { "int" : "nMercGUID" }, 616 | { "int" : "nUnitGUID" }, 617 | { "int" : "nUnitType" } 618 | ] 619 | }, 620 | "D2GS_MERC_MOVE" : { 621 | "PacketId" : "0x47", 622 | "Description" : "", 623 | "Size" : 13, 624 | "Structure" : [ 625 | { "BYTE" : "PacketId" }, 626 | { "int" : "nMercGUID" }, 627 | { "short" : "nTargetX" }, 628 | { "short" : "PaddingX" }, 629 | { "short" : "nTargetY" }, 630 | { "short" : "PaddingY" } 631 | ] 632 | }, 633 | "D2GS_BUSYSTATE_OFF" : { 634 | "PacketId" : "0x48", 635 | "Description" : "", 636 | "Size" : 1, 637 | "Structure" : [ 638 | { "BYTE" : "PacketId" } 639 | ] 640 | }, 641 | "D2GS_WAYPOINT" : { 642 | "PacketId" : "0x49", 643 | "Description" : "", 644 | "Size" : 9, 645 | "Structure" : [ 646 | { "BYTE" : "PacketId" }, 647 | { "int" : "nWaypointGUID" }, 648 | { "int" : "nDestination" } 649 | ] 650 | }, 651 | "D2GS_REQUESTENTITYUPDATE" : { 652 | "PacketId" : "0x4B", 653 | "Description" : "", 654 | "Size" : 9, 655 | "Structure" : [ 656 | { "BYTE" : "PacketId" }, 657 | { "int" : "nUnitType" }, 658 | { "int" : "nUnitGUID" } 659 | ] 660 | }, 661 | "D2GS_TRANSMORGIFY" : { 662 | "PacketId" : "0x4C", 663 | "Description" : "", 664 | "Size" : 5, 665 | "Structure" : [ 666 | { "BYTE" : "PacketId" }, 667 | { "int" : "nObjectGUID" } 668 | ] 669 | }, 670 | "D2GS_PLAYNPCMESSAGE" : { 671 | "PacketId" : "0x4D", 672 | "Description" : "", 673 | "Size" : 3, 674 | "Structure" : [ 675 | { "BYTE" : "PacketId" }, 676 | { "short" : "nMonStatsId" } 677 | ] 678 | }, 679 | "D2GS_CLICKBUTTON" : { 680 | "PacketId" : "0x4F", 681 | "Description" : "", 682 | "Size" : 7, 683 | "Structure" : [ 684 | { "BYTE" : "PacketId" }, 685 | { "short" : "nButtonId" }, 686 | { "short" : "HiWORDGold" }, 687 | { "short" : "LoWORDGold" } 688 | ] 689 | }, 690 | "D2GS_DROPGOLD" : { 691 | "PacketId" : "0x50", 692 | "Description" : "", 693 | "Size" : 9, 694 | "Structure" : [ 695 | { "BYTE" : "PacketId" }, 696 | { "int" : "nUnitGUID" }, 697 | { "int" : "nGoldAmount" } 698 | ] 699 | }, 700 | "D2GS_BINDHOTKEY" : { 701 | "PacketId" : "0x51", 702 | "Description" : "", 703 | "Size" : 9, 704 | "Structure" : [ 705 | { "BYTE" : "PacketId" }, 706 | { "BYTE" : "nSkillID" }, 707 | { "BYTE" : "nHand" }, 708 | { "short" : "nHotkey" }, 709 | { "int" : "nItemGUID" } 710 | ] 711 | }, 712 | "D2GS_STAMINA_ON" : { 713 | "PacketId" : "0x53", 714 | "Description" : "", 715 | "Size" : 1, 716 | "Structure" : [ 717 | { "BYTE" : "PacketId" } 718 | ] 719 | }, 720 | "D2GS_STAMINA_OFF" : { 721 | "PacketId" : "0x54", 722 | "Description" : "", 723 | "Size" : 1, 724 | "Structure" : [ 725 | { "BYTE" : "PacketId" } 726 | ] 727 | }, 728 | "D2GS_QUESTCOMPLETED" : { 729 | "PacketId" : "0x58", 730 | "Description" : "", 731 | "Size" : 3, 732 | "Structure" : [ 733 | { "BYTE" : "PacketId" }, 734 | { "short" : "nQuestID" } 735 | ] 736 | }, 737 | "D2GS_MAKEENTITYMOVE" : { 738 | "PacketId" : "0x59", 739 | "Description" : "", 740 | "Size" : 17, 741 | "Structure" : [ 742 | { "BYTE" : "PacketId" }, 743 | { "int" : "nUnitType" }, 744 | { "int" : "nUnitGUID" }, 745 | { "int" : "nTargetX" }, 746 | { "int" : "nTargetY" } 747 | ] 748 | }, 749 | "D2GS_SQUELCH_HOSTILE" : { 750 | "PacketId" : "0x5D", 751 | "Description" : "", 752 | "Size" : 7, 753 | "Structure" : [ 754 | { "BYTE" : "PacketId" }, 755 | { "BYTE" : "nActionType" }, 756 | { "BYTE" : "bToggle" }, 757 | { "int" : "nPlayerGUID" } 758 | ] 759 | }, 760 | "D2GS_PARTY" : { 761 | "PacketId" : "0x5E", 762 | "Description" : "", 763 | "Size" : 6, 764 | "Structure" : [ 765 | { "BYTE" : "PacketId" }, 766 | { "BYTE" : "nActionType" }, 767 | { "int" : "nPlayerGUID" } 768 | ] 769 | }, 770 | "D2GS_UPDATEPLAYERPOS" : { 771 | "PacketId" : "0x5F", 772 | "Description" : "", 773 | "Size" : 5, 774 | "Structure" : [ 775 | { "BYTE" : "PacketId" }, 776 | { "short" : "nX" }, 777 | { "short" : "nY" } 778 | ] 779 | }, 780 | "D2GS_SWAPWEAPON" : { 781 | "PacketId" : "0x60", 782 | "Description" : "", 783 | "Size" : 1, 784 | "Structure" : [ 785 | { "BYTE" : "PacketId" } 786 | ] 787 | }, 788 | "D2GS_MERC_ITEM" : { 789 | "PacketId" : "0x61", 790 | "Description" : "", 791 | "Size" : 3, 792 | "Structure" : [ 793 | { "BYTE" : "PacketId" }, 794 | { "short" : "nPosition" } 795 | ] 796 | }, 797 | "D2GS_MERC_RESSURECT" : { 798 | "PacketId" : "0x62", 799 | "Description" : "", 800 | "Size" : 5, 801 | "Structure" : [ 802 | { "BYTE" : "PacketId" }, 803 | { "int" : "nUnitGUID" } 804 | ] 805 | }, 806 | "D2GS_ITEM_TOBELT" : { 807 | "PacketId" : "0x63", 808 | "Description" : "", 809 | "Size" : 5, 810 | "Structure" : [ 811 | { "BYTE" : "PacketId" }, 812 | { "int" : "nItemGUID" } 813 | ] 814 | }, 815 | "D2GS_WARDEN" : { 816 | "PacketId" : "0x66", 817 | "Description" : "", 818 | "Size" : -1, 819 | "Structure" : [ 820 | { "BYTE" : "PacketId" }, 821 | { "short" : "nStreamSize" }, 822 | { "BYTE" : "Stream[nStreamSize]" } 823 | ] 824 | }, 825 | "D2GS_GAMELOGON_SP" : { 826 | "PacketId" : "0x67", 827 | "Description" : "", 828 | "Size" : 46, 829 | "Structure" : [ 830 | { "BYTE" : "PacketId" }, 831 | { "char" : "szGameName[16]" }, 832 | { "BYTE" : "nGameType" }, 833 | { "BYTE" : "nCharClass" }, 834 | { "BYTE" : "nTemplate" }, 835 | { "BYTE" : "nSelectedDiff" }, 836 | { "char" : "szCharName[16]" }, 837 | { "short" : "nUnknown4" }, 838 | { "int" : "eArenaFlags" }, 839 | { "BYTE" : "nUnknown6" }, 840 | { "BYTE" : "nUnknown7" }, 841 | { "BYTE" : "nLanguageCode" } 842 | ] 843 | }, 844 | "D2GS_GAMELOGON_MULTI" : { 845 | "PacketId" : "0x68", 846 | "Description" : "nMinorGameVersion:\n\t- 1.14\t\t= 0x0000000E\n\t- 1.13\t\t= 0x0000000D\n\t- 1.12\t\t= 0x0000000C\n\t- 1.11\t\t= 0x0000000B\nnVersionConstant:\n\t- Classic \t= 0x2185EDD6\n\t- Expansion \t= 0xED5DCC50\nnConstant:\n\t\t\t= 0x91A519B6", 847 | "Size" : 37, 848 | "Structure" : [ 849 | { "BYTE" : "PacketId" }, 850 | { "int" : "nGameHash" }, 851 | { "short" : "nGameToken" }, 852 | { "BYTE" : "nCharClass" }, 853 | { "int" : "nMinorGameVersion" }, 854 | { "int" : "nVersionConstant" }, 855 | { "int" : "nConstant" }, 856 | { "BYTE" : "nLanguageCode" }, 857 | { "char" : "szCharName[16]" } 858 | ] 859 | }, 860 | "D2GS_LEAVEGAME" : { 861 | "PacketId" : "0x69", 862 | "Description" : "", 863 | "Size" : 1, 864 | "Structure" : [ 865 | { "BYTE" : "PacketId" } 866 | ] 867 | }, 868 | "D2GS_REQUESTHOSTEDGAMES" : { 869 | "PacketId" : "0x6A", 870 | "Description" : "", 871 | "Size" : 1, 872 | "Structure" : [ 873 | { "BYTE" : "PacketId" } 874 | ] 875 | }, 876 | "D2GS_JOINGAME" : { 877 | "PacketId" : "0x6B", 878 | "Description" : "", 879 | "Size" : 1, 880 | "Structure" : [ 881 | { "BYTE" : "PacketId" } 882 | ] 883 | }, 884 | "D2GS_UPLOADSAVE" : { 885 | "PacketId" : "0x6C", 886 | "Description" : "", 887 | "Size" : -1, 888 | "Structure" : [ 889 | { "BYTE" : "PacketId" }, 890 | { "BYTE" : "nChunkSize" }, 891 | { "int" : "nFullSize" }, 892 | { "BYTE" : "Bytes[nChunkSize]" }, 893 | { "BYTE" : "Terminator" } 894 | ] 895 | }, 896 | "D2GS_PING" : { 897 | "PacketId" : "0x6D", 898 | "Description" : "", 899 | "Size" : 13, 900 | "Structure" : [ 901 | { "BYTE" : "PacketId" }, 902 | { "int" : "nTickCount" }, 903 | { "int" : "nDelay" }, 904 | { "int" : "nWardenOrZero" } 905 | ] 906 | }, 907 | "D2GS_FINDME_6E" : { 908 | "PacketId" : "0x6E", 909 | "Description" : "", 910 | "Size" : 1, 911 | "Structure" : [ 912 | { "BYTE" : "PacketId" } 913 | ] 914 | }, 915 | "D2GS_FINDME_70" : { 916 | "PacketId" : "0x70", 917 | "Description" : "", 918 | "Size" : 1, 919 | "Structure" : [ 920 | { "BYTE" : "PacketId" } 921 | ] 922 | } 923 | } 924 | -------------------------------------------------------------------------------- /src/data/1.14d/client2mcps.json: -------------------------------------------------------------------------------- 1 | { 2 | "MCP_STARTUP" : { 3 | "PacketId" : "0x01", 4 | "Description" : "", 5 | "Structure" : [ 6 | { "McpHeader" : [ 7 | { "short" : "nSize" }, 8 | { "BYTE" : "PacketId" } 9 | ] 10 | }, 11 | { "int" : "MCPCookie" }, 12 | { "int" : "MCPStatus" }, 13 | { "BYTE" : "MCPChunk1[8]" }, 14 | { "BYTE" : "MCPChunk2[48]" }, 15 | { "std::string" : "BnetName" } 16 | ] 17 | }, 18 | "MCP_CHARCREATE" : { 19 | "PacketId" : "0x02", 20 | "Description" : "", 21 | "Structure" : [ 22 | { "McpHeader" : [ 23 | { "short" : "nSize" }, 24 | { "BYTE" : "PacketId" } 25 | ] 26 | }, 27 | { "int" : "Class" }, 28 | { "short" : "Flags" }, 29 | { "std::string" : "CharName" } 30 | ] 31 | }, 32 | "MCP_CREATEGAME" : { 33 | "PacketId" : "0x03", 34 | "Description" : "", 35 | "Structure" : [ 36 | { "McpHeader" : [ 37 | { "short" : "nSize" }, 38 | { "BYTE" : "PacketId" } 39 | ] 40 | }, 41 | { "short" : "RequestId" }, 42 | { "int" : "nGameFlags" }, 43 | { "BYTE" : "Unknown1" }, 44 | { "BYTE" : "Difference" }, 45 | { "BYTE" : "MaxPlayers" }, 46 | { "std::string" : "Name" }, 47 | { "std::string" : "Password" }, 48 | { "std::string" : "Description" } 49 | ] 50 | }, 51 | "MCP_JOINGAME" : { 52 | "PacketId" : "0x04", 53 | "Description" : "", 54 | "Structure" : [ 55 | { "McpHeader" : [ 56 | { "short" : "nSize" }, 57 | { "BYTE" : "PacketId" } 58 | ] 59 | }, 60 | { "short" : "RequestId" }, 61 | { "std::string" : "GameName" }, 62 | { "std::string" : "GamePass" } 63 | ] 64 | }, 65 | "MCP_GAMELIST" : { 66 | "PacketId" : "0x05", 67 | "Description" : "", 68 | "Structure" : [ 69 | { "McpHeader" : [ 70 | { "short" : "nSize" }, 71 | { "BYTE" : "PacketId" } 72 | ] 73 | }, 74 | { "short" : "RequestId" }, 75 | { "int" : "HardcoreFlag" }, 76 | { "std::string" : "SearchString" } 77 | ] 78 | }, 79 | "MCP_GAMEINFO" : { 80 | "PacketId" : "0x06", 81 | "Description" : "", 82 | "Structure" : [ 83 | { "McpHeader" : [ 84 | { "short" : "nSize" }, 85 | { "BYTE" : "PacketId" } 86 | ] 87 | }, 88 | { "short" : "RequestId" }, 89 | { "std::string" : "GameName" } 90 | ] 91 | }, 92 | "MCP_CHARLOGON" : { 93 | "PacketId" : "0x07", 94 | "Description" : "", 95 | "Structure" : [ 96 | { "McpHeader" : [ 97 | { "short" : "nSize" }, 98 | { "BYTE" : "PacketId" } 99 | ] 100 | }, 101 | { "std::string" : "CharName" } 102 | ] 103 | }, 104 | "MCP_CHARDELETE" : { 105 | "PacketId" : "0x0A", 106 | "Description" : "", 107 | "Structure" : [ 108 | { "McpHeader" : [ 109 | { "short" : "nSize" }, 110 | { "BYTE" : "PacketId" } 111 | ] 112 | }, 113 | { "short" : "RequestId" }, 114 | { "std::string" : "CharName" } 115 | ] 116 | }, 117 | "MCP_REQUESTLADDERDATA" : { 118 | "PacketId" : "0x11", 119 | "Description" : "", 120 | "Structure" : [ 121 | { "McpHeader" : [ 122 | { "short" : "nSize" }, 123 | { "BYTE" : "PacketId" } 124 | ] 125 | }, 126 | { "BYTE" : "LadderType" }, 127 | { "short" : "StartPosition" } 128 | ] 129 | }, 130 | "MCP_MOTD" : { 131 | "PacketId" : "0x12", 132 | "Description" : "", 133 | "Structure" : [ 134 | { "McpHeader" : [ 135 | { "short" : "nSize" }, 136 | { "BYTE" : "PacketId" } 137 | ] 138 | } 139 | ] 140 | }, 141 | "MCP_CANCELGAMECREATE" : { 142 | "PacketId" : "0x13", 143 | "Description" : "", 144 | "Structure" : [ 145 | { "McpHeader" : [ 146 | { "short" : "nSize" }, 147 | { "BYTE" : "PacketId" } 148 | ] 149 | } 150 | ] 151 | }, 152 | "MCP_CHARRANK" : { 153 | "PacketId" : "0x16", 154 | "Description" : "", 155 | "Structure" : [ 156 | { "McpHeader" : [ 157 | { "short" : "nSize" }, 158 | { "BYTE" : "PacketId" } 159 | ] 160 | }, 161 | { "int" : "Hardcore" }, 162 | { "int" : "Expansion" }, 163 | { "std::string" : "CharName" } 164 | ] 165 | }, 166 | "MCP_CHARLIST" : { 167 | "PacketId" : "0x17", 168 | "Description" : "", 169 | "Structure" : [ 170 | { "McpHeader" : [ 171 | { "short" : "nSize" }, 172 | { "BYTE" : "PacketId" } 173 | ] 174 | }, 175 | { "int" : "Quantity" } 176 | ] 177 | }, 178 | "MCP_CHARUPGRADE" : { 179 | "PacketId" : "0x18", 180 | "Description" : "", 181 | "Structure" : [ 182 | { "McpHeader" : [ 183 | { "short" : "nSize" }, 184 | { "BYTE" : "PacketId" } 185 | ] 186 | }, 187 | { "std::string" : "CharName" } 188 | ] 189 | }, 190 | "MCP_CHARLIST2" : { 191 | "PacketId" : "0x19", 192 | "Description" : "", 193 | "Structure" : [ 194 | { "McpHeader" : [ 195 | { "short" : "nSize" }, 196 | { "BYTE" : "PacketId" } 197 | ] 198 | }, 199 | { "int" : "RequestCount" } 200 | ] 201 | } 202 | } -------------------------------------------------------------------------------- /src/data/1.14d/client2sid.json: -------------------------------------------------------------------------------- 1 | { 2 | "SID_NULL" : { 3 | "PacketId" : "0x00", 4 | "Description" : "", 5 | "Structure" : [ 6 | { "SidHeader" : [ 7 | { "BYTE" : "AlwaysFF" }, 8 | { "BYTE" : "PacketId" }, 9 | { "short" : "nSize" } 10 | ] 11 | } 12 | ] 13 | }, 14 | "SID_STOPADV" : { 15 | "PacketId" : "0x02", 16 | "Description" : "", 17 | "Structure" : [ 18 | { "SidHeader" : [ 19 | { "BYTE" : "AlwaysFF" }, 20 | { "BYTE" : "PacketId" }, 21 | { "short" : "nSize" } 22 | ] 23 | } 24 | ] 25 | }, 26 | "SID_GETADVLISTEX" : { 27 | "PacketId" : "0x09", 28 | "Description" : "", 29 | "Structure" : [ 30 | { "SidHeader" : [ 31 | { "BYTE" : "AlwaysFF" }, 32 | { "BYTE" : "PacketId" }, 33 | { "short" : "nSize" } 34 | ] 35 | }, 36 | { "short" : "GameType" }, 37 | { "short" : "GameSubType" }, 38 | { "int" : "ViewingFilter" }, 39 | { "int" : "Zero" }, 40 | { "int" : "NumberOfGames" }, 41 | { "std::string" : "GameName" }, 42 | { "std::string" : "GamePass" }, 43 | { "std::string" : "GameDesc" } 44 | ] 45 | }, 46 | "SID_ENTERCHAT" : { 47 | "PacketId" : "0x0A", 48 | "Description" : "", 49 | "Structure" : [ 50 | { "SidHeader" : [ 51 | { "BYTE" : "AlwaysFF" }, 52 | { "BYTE" : "PacketId" }, 53 | { "short" : "nSize" } 54 | ] 55 | }, 56 | { "std::string" : "Username" }, 57 | { "std::string" : "Statstring" } 58 | ] 59 | }, 60 | "SID_GETCHANNELLIST" : { 61 | "PacketId" : "0x0B", 62 | "Description" : "", 63 | "Structure" : [ 64 | { "SidHeader" : [ 65 | { "BYTE" : "AlwaysFF" }, 66 | { "BYTE" : "PacketId" }, 67 | { "short" : "nSize" } 68 | ] 69 | }, 70 | { "int" : "ProductCode" } 71 | ] 72 | }, 73 | "SID_JOINCHANNEL" : { 74 | "PacketId" : "0x0C", 75 | "Description" : "", 76 | "Structure" : [ 77 | { "SidHeader" : [ 78 | { "BYTE" : "AlwaysFF" }, 79 | { "BYTE" : "PacketId" }, 80 | { "short" : "nSize" } 81 | ] 82 | }, 83 | { "int" : "Flags" }, 84 | { "std::string" : "Channel" } 85 | ] 86 | }, 87 | "SID_CHATCOMMAND" : { 88 | "PacketId" : "0x0E", 89 | "Description" : "", 90 | "Structure" : [ 91 | { "SidHeader" : [ 92 | { "BYTE" : "AlwaysFF" }, 93 | { "BYTE" : "PacketId" }, 94 | { "short" : "nSize" } 95 | ] 96 | }, 97 | { "std::string" : "Text" } 98 | ] 99 | }, 100 | "SID_LEAVECHAT" : { 101 | "PacketId" : "0x10", 102 | "Description" : "", 103 | "Structure" : [ 104 | { "SidHeader" : [ 105 | { "BYTE" : "AlwaysFF" }, 106 | { "BYTE" : "PacketId" }, 107 | { "short" : "nSize" } 108 | ] 109 | } 110 | ] 111 | }, 112 | "SID_CHECKAD" : { 113 | "PacketId" : "0x15", 114 | "Description" : "", 115 | "Structure" : [ 116 | { "SidHeader" : [ 117 | { "BYTE" : "AlwaysFF" }, 118 | { "BYTE" : "PacketId" }, 119 | { "short" : "nSize" } 120 | ] 121 | }, 122 | { "int" : "PlatformCode" }, 123 | { "int" : "ProductCode" }, 124 | { "int" : "BannerID" }, 125 | { "int" : "CurrentTime" } 126 | ] 127 | }, 128 | "SID_CLICKAD" : { 129 | "PacketId" : "0x16", 130 | "Description" : "", 131 | "Structure" : [ 132 | { "SidHeader" : [ 133 | { "BYTE" : "AlwaysFF" }, 134 | { "BYTE" : "PacketId" }, 135 | { "short" : "nSize" } 136 | ] 137 | }, 138 | { "int" : "AdID" }, 139 | { "int" : "RequestType" } 140 | ] 141 | }, 142 | "SID_REGISTRY" : { 143 | "PacketId" : "0x18", 144 | "Description" : "", 145 | "Structure" : [ 146 | { "SidHeader" : [ 147 | { "BYTE" : "AlwaysFF" }, 148 | { "BYTE" : "PacketId" }, 149 | { "short" : "nSize" } 150 | ] 151 | }, 152 | { "int" : "Cookie" }, 153 | { "std::string" : "KeyValue" } 154 | ] 155 | }, 156 | "SID_STARTADVEX3" : { 157 | "PacketId" : "0x1C", 158 | "Description" : "", 159 | "Structure" : [ 160 | { "SidHeader" : [ 161 | { "BYTE" : "AlwaysFF" }, 162 | { "BYTE" : "PacketId" }, 163 | { "short" : "nSize" } 164 | ] 165 | }, 166 | { "int" : "IsPrivateGame" }, 167 | { "int" : "Uptime" }, 168 | { "short" : "GameType" }, 169 | { "short" : "GameSubtype" }, 170 | { "int" : "ProviderVersion" }, 171 | { "int" : "LadderType" }, 172 | { "std::string" : "GameName" }, 173 | { "std::string" : "GamePass" }, 174 | { "std::string" : "GameStatString" } 175 | ] 176 | }, 177 | "SID_LEAVEGAME" : { 178 | "PacketId" : "0x1F", 179 | "Description" : "", 180 | "Structure" : [ 181 | { "SidHeader" : [ 182 | { "BYTE" : "AlwaysFF" }, 183 | { "BYTE" : "PacketId" }, 184 | { "short" : "nSize" } 185 | ] 186 | } 187 | ] 188 | }, 189 | "SID_DISPLAYAD" : { 190 | "PacketId" : "0x21", 191 | "Description" : "", 192 | "Structure" : [ 193 | { "SidHeader" : [ 194 | { "BYTE" : "AlwaysFF" }, 195 | { "BYTE" : "PacketId" }, 196 | { "short" : "nSize" } 197 | ] 198 | }, 199 | { "int" : "PlatformCode" }, 200 | { "int" : "ProductCode" }, 201 | { "int" : "AdID" }, 202 | { "std::string" : "Filename" }, 203 | { "std::string" : "URL" } 204 | ] 205 | }, 206 | "SID_NOTIFYJOIN" : { 207 | "PacketId" : "0x22", 208 | "Description" : "", 209 | "Structure" : [ 210 | { "SidHeader" : [ 211 | { "BYTE" : "AlwaysFF" }, 212 | { "BYTE" : "PacketId" }, 213 | { "short" : "nSize" } 214 | ] 215 | }, 216 | { "int" : "ProductCode" }, 217 | { "int" : "ProductVersion" }, 218 | { "std::string" : "GameName" }, 219 | { "std::string" : "GamePass" } 220 | ] 221 | }, 222 | "SID_PING" : { 223 | "PacketId" : "0x25", 224 | "Description" : "", 225 | "Structure" : [ 226 | { "SidHeader" : [ 227 | { "BYTE" : "AlwaysFF" }, 228 | { "BYTE" : "PacketId" }, 229 | { "short" : "nSize" } 230 | ] 231 | }, 232 | { "int" : "Value" } 233 | ] 234 | }, 235 | "SID_READUSERDATA" : { 236 | "PacketId" : "0x26", 237 | "Description" : "", 238 | "Structure" : [ 239 | { "SidHeader" : [ 240 | { "BYTE" : "AlwaysFF" }, 241 | { "BYTE" : "PacketId" }, 242 | { "short" : "nSize" } 243 | ] 244 | }, 245 | { "int" : "AccountsCount" }, 246 | { "int" : "KeysCount" }, 247 | { "int" : "RequestId" }, 248 | { "std::string" : "Accounts[AccountsCount]" }, 249 | { "std::string" : "Keys[KeysCount]" } 250 | ] 251 | }, 252 | "SID_WRITEUSERDATA" : { 253 | "PacketId" : "0x27", 254 | "Description" : "", 255 | "Structure" : [ 256 | { "SidHeader" : [ 257 | { "BYTE" : "AlwaysFF" }, 258 | { "BYTE" : "PacketId" }, 259 | { "short" : "nSize" } 260 | ] 261 | }, 262 | { "int" : "AccountsCount" }, 263 | { "int" : "KeysCount" }, 264 | { "std::string" : "Accounts[AccountsCount]" }, 265 | { "std::string" : "Keys[KeysCount]" }, 266 | { "std::string" : "Values[KeysCount]" } 267 | ] 268 | }, 269 | "SID_CHANGEPASSWORD" : { 270 | "PacketId" : "0x31", 271 | "Description" : "", 272 | "Structure" : [ 273 | { "SidHeader" : [ 274 | { "BYTE" : "AlwaysFF" }, 275 | { "BYTE" : "PacketId" }, 276 | { "short" : "nSize" } 277 | ] 278 | }, 279 | { "int" : "ClientToken" }, 280 | { "int" : "ServerToken" }, 281 | { "BYTE" : "OldDoubleHashPassword[20]" }, 282 | { "BYTE" : "NewPasswordHash[20]" }, 283 | { "std::string" : "Account" } 284 | ] 285 | }, 286 | "SID_GETFILETIME" : { 287 | "PacketId" : "0x33", 288 | "Description" : "", 289 | "Structure" : [ 290 | { "SidHeader" : [ 291 | { "BYTE" : "AlwaysFF" }, 292 | { "BYTE" : "PacketId" }, 293 | { "short" : "nSize" } 294 | ] 295 | }, 296 | { "int" : "RequestId" }, 297 | { "int" : "Unknown" }, 298 | { "std::string" : "Filename" } 299 | ] 300 | }, 301 | "SID_LOGONRESPONSE2" : { 302 | "PacketId" : "0x3A", 303 | "Description" : "", 304 | "Structure" : [ 305 | { "SidHeader" : [ 306 | { "BYTE" : "AlwaysFF" }, 307 | { "BYTE" : "PacketId" }, 308 | { "short" : "nSize" } 309 | ] 310 | }, 311 | { "int" : "ClientToken" }, 312 | { "int" : "ServerToken" }, 313 | { "BYTE" : "PWHash[20]" }, 314 | { "std::string" : "Username" } 315 | ] 316 | }, 317 | "SID_CREATEACCOUNT2" : { 318 | "PacketId" : "0x3D", 319 | "Description" : "", 320 | "Structure" : [ 321 | { "SidHeader" : [ 322 | { "BYTE" : "AlwaysFF" }, 323 | { "BYTE" : "PacketId" }, 324 | { "short" : "nSize" } 325 | ] 326 | }, 327 | { "BYTE" : "PasswordHash[20]" }, 328 | { "std::string" : "AccountName" } 329 | ] 330 | }, 331 | "SID_LOGONREALMEX" : { 332 | "PacketId" : "0x3E", 333 | "Description" : "", 334 | "Structure" : [ 335 | { "SidHeader" : [ 336 | { "BYTE" : "AlwaysFF" }, 337 | { "BYTE" : "PacketId" }, 338 | { "short" : "nSize" } 339 | ] 340 | }, 341 | { "int" : "ClientToken" }, 342 | { "BYTE" : "HashedRealmPassword[20]" }, 343 | { "std::string" : "RealmTitle" } 344 | ] 345 | }, 346 | "SID_QUERYREALMS2" : { 347 | "PacketId" : "0x40", 348 | "Description" : "", 349 | "Structure" : [ 350 | { "SidHeader" : [ 351 | { "BYTE" : "AlwaysFF" }, 352 | { "BYTE" : "PacketId" }, 353 | { "short" : "nSize" } 354 | ] 355 | } 356 | ] 357 | }, 358 | "SID_NEWS_INFO" : { 359 | "PacketId" : "0x46", 360 | "Description" : "", 361 | "Structure" : [ 362 | { "SidHeader" : [ 363 | { "BYTE" : "AlwaysFF" }, 364 | { "BYTE" : "PacketId" }, 365 | { "short" : "nSize" } 366 | ] 367 | }, 368 | { "int" : "Timestamp" } 369 | ] 370 | }, 371 | "SID_EXTRAWORK" : { 372 | "PacketId" : "0x4B", 373 | "Description" : "", 374 | "Structure" : [ 375 | { "SidHeader" : [ 376 | { "BYTE" : "AlwaysFF" }, 377 | { "BYTE" : "PacketId" }, 378 | { "short" : "nSize" } 379 | ] 380 | }, 381 | { "short" : "GameType" }, 382 | { "short" : "Length" }, 383 | { "BYTE" : "Stream[Length]" } 384 | ] 385 | }, 386 | "SID_AUTH_INFO" : { 387 | "PacketId" : "0x50", 388 | "Description" : "", 389 | "Structure" : [ 390 | { "SidHeader" : [ 391 | { "BYTE" : "AlwaysFF" }, 392 | { "BYTE" : "PacketId" }, 393 | { "short" : "nSize" } 394 | ] 395 | }, 396 | { "int" : "ProtocolID" }, 397 | { "int" : "PlatformCode" }, 398 | { "int" : "ProductCode" }, 399 | { "int" : "ProductVersion" }, 400 | { "int" : "ProductLanguage" }, 401 | { "int" : "LocalIP" }, 402 | { "int" : "TimeZoneBias" }, 403 | { "int" : "LocaleID" }, 404 | { "int" : "LanguageID" }, 405 | { "std::string" : "CountryAbreviation" }, 406 | { "std::string" : "Coutry" } 407 | ] 408 | }, 409 | "SID_AUTH_CHECK" : { 410 | "PacketId" : "0x51", 411 | "Description" : "", 412 | "Structure" : [ 413 | { "SidHeader" : [ 414 | { "BYTE" : "AlwaysFF" }, 415 | { "BYTE" : "PacketId" }, 416 | { "short" : "nSize" } 417 | ] 418 | }, 419 | { "int" : "ClientToken" }, 420 | { "int" : "ExeVersion" }, 421 | { "int" : "ExeHash" }, 422 | { "int" : "CDKeyCount" }, 423 | { "int" : "Spawn" }, 424 | { "CDKeys[CDKeyCount]" : [ 425 | { "int" : "Length" }, 426 | { "int" : "Product" }, 427 | { "int" : "Public" }, 428 | { "int" : "Unknown" }, 429 | { "BYTE" : "Private[20]" } 430 | ] 431 | }, 432 | { "std::string" : "ExeInfo" }, 433 | { "std::string" : "Owner" } 434 | ] 435 | }, 436 | "SID_RESETPASSWORD" : { 437 | "PacketId" : "0x5A", 438 | "Description" : "", 439 | "Structure" : [ 440 | { "SidHeader" : [ 441 | { "BYTE" : "AlwaysFF" }, 442 | { "BYTE" : "PacketId" }, 443 | { "short" : "nSize" } 444 | ] 445 | }, 446 | { "std::string" : "Account" }, 447 | { "std::string" : "eMail" } 448 | ] 449 | }, 450 | "SID_CHANGEEMAIL" : { 451 | "PacketId" : "0x5B", 452 | "Description" : "", 453 | "Structure" : [ 454 | { "SidHeader" : [ 455 | { "BYTE" : "AlwaysFF" }, 456 | { "BYTE" : "PacketId" }, 457 | { "short" : "nSize" } 458 | ] 459 | }, 460 | { "std::string" : "Account" }, 461 | { "std::string" : "eMailOld" }, 462 | { "std::string" : "eMailNew" } 463 | ] 464 | }, 465 | "SID_SETEMAIL" : { 466 | "PacketId" : "0x59", 467 | "Description" : "", 468 | "Structure" : [ 469 | { "SidHeader" : [ 470 | { "BYTE" : "AlwaysFF" }, 471 | { "BYTE" : "PacketId" }, 472 | { "short" : "nSize" } 473 | ] 474 | }, 475 | { "std::string" : "eMail" } 476 | ] 477 | }, 478 | "SID_NEWPACKET" : { 479 | "PacketId" : "0xDE", 480 | "Description" : "", 481 | "Structure" : [ 482 | { "SidHeader" : [ 483 | { "BYTE" : "AlwaysFF" }, 484 | { "BYTE" : "PacketId" }, 485 | { "short" : "nSize" } 486 | ] 487 | }, 488 | { "BYTE" : "Something1" }, 489 | { "BYTE" : "Size" }, 490 | { "BYTE" : "Something2" }, 491 | { "BYTE" : "Stream[Size]" } 492 | ] 493 | } 494 | } -------------------------------------------------------------------------------- /src/data/1.14d/mcps2client.json: -------------------------------------------------------------------------------- 1 | { 2 | "MCP_NULL" : { 3 | "PacketId" : "0x00", 4 | "Description" : "", 5 | "Structure" : [ 6 | { "McpHeader" : [ 7 | { "short" : "nSize" }, 8 | { "BYTE" : "PacketId" } 9 | ] 10 | } 11 | ] 12 | }, 13 | "MCP_STARTUP" : { 14 | "PacketId" : "0x01", 15 | "Description" : "", 16 | "Structure" : [ 17 | { "McpHeader" : [ 18 | { "short" : "nSize" }, 19 | { "BYTE" : "PacketId" } 20 | ] 21 | }, 22 | { "int" : "Result" } 23 | ] 24 | }, 25 | "MCP_CHARCREATE" : { 26 | "PacketId" : "0x02", 27 | "Description" : "", 28 | "Structure" : [ 29 | { "McpHeader" : [ 30 | { "short" : "nSize" }, 31 | { "BYTE" : "PacketId" } 32 | ] 33 | }, 34 | { "int" : "Result" } 35 | ] 36 | }, 37 | "MCP_CREATEGAME" : { 38 | "PacketId" : "0x03", 39 | "Description" : "", 40 | "Structure" : [ 41 | { "McpHeader" : [ 42 | { "short" : "nSize" }, 43 | { "BYTE" : "PacketId" } 44 | ] 45 | }, 46 | { "short" : "RequestId" }, 47 | { "short" : "GameToken" }, 48 | { "short" : "Unknown" }, 49 | { "int" : "Result" } 50 | ] 51 | }, 52 | "MCP_JOINGAME" : { 53 | "PacketId" : "0x04", 54 | "Description" : "", 55 | "Structure" : [ 56 | { "McpHeader" : [ 57 | { "short" : "nSize" }, 58 | { "BYTE" : "PacketId" } 59 | ] 60 | }, 61 | { "short" : "RequestId" }, 62 | { "short" : "GameToken" }, 63 | { "short" : "Unknown" }, 64 | { "int" : "GameIP" }, 65 | { "int" : "GameHash" }, 66 | { "int" : "Result" } 67 | ] 68 | }, 69 | "MCP_GAMELIST" : { 70 | "PacketId" : "0x05", 71 | "Description" : "", 72 | "Structure" : [ 73 | { "McpHeader" : [ 74 | { "short" : "nSize" }, 75 | { "BYTE" : "PacketId" } 76 | ] 77 | }, 78 | { "short" : "RequestId" }, 79 | { "int" : "Index" }, 80 | { "BYTE" : "Players" }, 81 | { "int" : "Status" }, 82 | { "std::string" : "GameName" }, 83 | { "std::string" : "GameDesc" } 84 | ] 85 | }, 86 | "MCP_GAMEINFO" : { 87 | "PacketId" : "0x06", 88 | "Description" : "", 89 | "Structure" : [ 90 | { "McpHeader" : [ 91 | { "short" : "nSize" }, 92 | { "BYTE" : "PacketId" } 93 | ] 94 | }, 95 | { "short" : "RequestId" }, 96 | { "int" : "Status" }, 97 | { "int" : "Uptime" }, 98 | { "BYTE" : "CreatorLevel" }, 99 | { "BYTE" : "Difference" }, 100 | { "BYTE" : "MaxPayers" }, 101 | { "BYTE" : "CharsInGame" }, 102 | { "BYTE" : "Class[8]" }, 103 | { "BYTE" : "Something1[8]" }, 104 | { "BYTE" : "Level[8]" }, 105 | { "BYTE" : "Something2[8]" }, 106 | { "std::string" : "Description" }, 107 | { "std::string" : "Nick[CharsInGame]" } 108 | ] 109 | }, 110 | "MCP_CHARLOGON" : { 111 | "PacketId" : "0x07", 112 | "Description" : "", 113 | "Structure" : [ 114 | { "McpHeader" : [ 115 | { "short" : "nSize" }, 116 | { "BYTE" : "PacketId" } 117 | ] 118 | }, 119 | { "int" : "Result" } 120 | ] 121 | }, 122 | "MCP_CHARDELETE" : { 123 | "PacketId" : "0x0A", 124 | "Description" : "", 125 | "Structure" : [ 126 | { "McpHeader" : [ 127 | { "short" : "nSize" }, 128 | { "BYTE" : "PacketId" } 129 | ] 130 | }, 131 | { "int" : "Result" } 132 | ] 133 | }, 134 | "MCP_REQUESTLADDERDATA" : { 135 | "PacketId" : "0x11", 136 | "Description" : "", 137 | "Structure" : [ 138 | { "McpHeader" : [ 139 | { "short" : "nSize" }, 140 | { "BYTE" : "PacketId" } 141 | ] 142 | }, 143 | { "BYTE" : "LadderType" }, 144 | { "short" : "TotalSize" }, 145 | { "short" : "CurrentSize" }, 146 | { "short" : "SizeLeft" }, 147 | { "short" : "RankFirst" }, 148 | { "short" : "Unknown0" }, 149 | { "int" : "Count" }, 150 | { "int" : "Unknown1" }, 151 | { "Entry[(CurrentSize - 22) / 28]" : [ 152 | { "long long" : "Experience" }, 153 | { "BYTE" : "Flags" }, 154 | { "BYTE" : "Act" }, 155 | { "short" : "Level" }, 156 | { "char" : "szName[16]" } 157 | ] 158 | } 159 | ] 160 | }, 161 | "MCP_MOTD" : { 162 | "PacketId" : "0x12", 163 | "Description" : "", 164 | "Structure" : [ 165 | { "McpHeader" : [ 166 | { "short" : "nSize" }, 167 | { "BYTE" : "PacketId" } 168 | ] 169 | }, 170 | { "BYTE" : "Unknown" }, 171 | { "std::string" : "Text" } 172 | ] 173 | }, 174 | "MCP_CREATEQUEUE" : { 175 | "PacketId" : "0x14", 176 | "Description" : "", 177 | "Structure" : [ 178 | { "McpHeader" : [ 179 | { "short" : "nSize" }, 180 | { "BYTE" : "PacketId" } 181 | ] 182 | }, 183 | { "int" : "Position" } 184 | ] 185 | }, 186 | "MCP_CHARLIST" : { 187 | "PacketId" : "0x17", 188 | "Description" : "", 189 | "Structure" : [ 190 | { "McpHeader" : [ 191 | { "short" : "nSize" }, 192 | { "BYTE" : "PacketId" } 193 | ] 194 | }, 195 | { "short" : "RequestCount" }, 196 | { "int" : "ExistCount" }, 197 | { "short" : "ReturnCount" }, 198 | { "Characters[ReturnCount]" : [ 199 | { "std::string" : "Name" }, 200 | { "std::string" : "Statstring" } 201 | ] 202 | } 203 | ] 204 | }, 205 | "MCP_CHARUPGRADE" : { 206 | "PacketId" : "0x18", 207 | "Description" : "", 208 | "Structure" : [ 209 | { "McpHeader" : [ 210 | { "short" : "nSize" }, 211 | { "BYTE" : "PacketId" } 212 | ] 213 | }, 214 | { "int" : "Result" } 215 | ] 216 | }, 217 | "MCP_CHARLIST2" : { 218 | "PacketId" : "0x19", 219 | "Description" : "", 220 | "Structure" : [ 221 | { "McpHeader" : [ 222 | { "short" : "nSize" }, 223 | { "BYTE" : "PacketId" } 224 | ] 225 | }, 226 | { "short" : "RequestCount" }, 227 | { "int" : "ExistCount" }, 228 | { "short" : "ReturnCount" }, 229 | { "Characters[ReturnCount]" : [ 230 | { "int" : "ExpireTime" }, 231 | { "std::string" : "Name" }, 232 | { "std::string" : "Statstring" } 233 | ] 234 | } 235 | ] 236 | } 237 | } -------------------------------------------------------------------------------- /src/data/1.14d/sid2client.json: -------------------------------------------------------------------------------- 1 | { 2 | "SID_NULL" : { 3 | "PacketId" : "0x00", 4 | "Description" : "", 5 | "Structure" : [ 6 | { "SidHeader" : [ 7 | { "BYTE" : "AlwaysFF" }, 8 | { "BYTE" : "PacketId" }, 9 | { "short" : "nSize" } 10 | ] 11 | } 12 | ] 13 | }, 14 | "SID_SERVERLIST" : { 15 | "PacketId" : "0x04", 16 | "Description" : "", 17 | "Structure" : [ 18 | { "SidHeader" : [ 19 | { "BYTE" : "AlwaysFF" }, 20 | { "BYTE" : "PacketId" }, 21 | { "short" : "nSize" } 22 | ] 23 | }, 24 | { "int" : "ServerVersion" }, 25 | { "std::string" : "ServerList" } 26 | ] 27 | }, 28 | "SID_GETADVLISTEX" : { 29 | "PacketId" : "0x09", 30 | "Description" : "", 31 | "Structure" : [ 32 | { "SidHeader" : [ 33 | { "BYTE" : "AlwaysFF" }, 34 | { "BYTE" : "PacketId" }, 35 | { "short" : "nSize" } 36 | ] 37 | }, 38 | { "int" : "Count" }, 39 | { "Game[Count]" : [ 40 | { "short" : "GameType" }, 41 | { "short" : "GameSubType" }, 42 | { "int" : "LanguageCode" }, 43 | { "short" : "AddressFamily" }, 44 | { "short" : "GamePort" }, 45 | { "int" : "GameIP" }, 46 | { "int" : "Sin0_1" }, 47 | { "int" : "Sin0_2" }, 48 | { "int" : "GameStatus" }, 49 | { "int" : "ElapsedTime" }, 50 | { "std::string" : "GameName" }, 51 | { "std::string" : "GamePass" }, 52 | { "std::string" : "GameDesc" } 53 | ] 54 | } 55 | ] 56 | }, 57 | "SID_ENTERCHAT" : { 58 | "PacketId" : "0x0A", 59 | "Description" : "", 60 | "Structure" : [ 61 | { "SidHeader" : [ 62 | { "BYTE" : "AlwaysFF" }, 63 | { "BYTE" : "PacketId" }, 64 | { "short" : "nSize" } 65 | ] 66 | }, 67 | { "std::string" : "Username" }, 68 | { "std::string" : "Statstring" }, 69 | { "std::string" : "Account" } 70 | ] 71 | }, 72 | "SID_GETCHANNELLIST" : { 73 | "PacketId" : "0x0B", 74 | "Description" : "", 75 | "Structure" : [ 76 | { "SidHeader" : [ 77 | { "BYTE" : "AlwaysFF" }, 78 | { "BYTE" : "PacketId" }, 79 | { "short" : "nSize" } 80 | ] 81 | }, 82 | { "std::string[]" : "Channels" } 83 | ] 84 | }, 85 | "SID_CHATEVENT" : { 86 | "PacketId" : "0x0F", 87 | "Description" : "", 88 | "Structure" : [ 89 | { "SidHeader" : [ 90 | { "BYTE" : "AlwaysFF" }, 91 | { "BYTE" : "PacketId" }, 92 | { "short" : "nSize" } 93 | ] 94 | }, 95 | { "int" : "EventID" }, 96 | { "int" : "UserFlags" }, 97 | { "int" : "Ping" }, 98 | { "int" : "Ip" }, 99 | { "int" : "AccountID" }, 100 | { "int" : "RegistrationAuth" }, 101 | { "std::string" : "Username" }, 102 | { "std::string" : "Text" } 103 | ] 104 | }, 105 | "SID_FLOODDETECTED" : { 106 | "PacketId" : "0x13", 107 | "Description" : "", 108 | "Structure" : [ 109 | { "SidHeader" : [ 110 | { "BYTE" : "AlwaysFF" }, 111 | { "BYTE" : "PacketId" }, 112 | { "short" : "nSize" } 113 | ] 114 | } 115 | ] 116 | }, 117 | "SID_CHECKAD" : { 118 | "PacketId" : "0x15", 119 | "Description" : "", 120 | "Structure" : [ 121 | { "SidHeader" : [ 122 | { "BYTE" : "AlwaysFF" }, 123 | { "BYTE" : "PacketId" }, 124 | { "short" : "nSize" } 125 | ] 126 | }, 127 | { "int" : "AdID" }, 128 | { "int" : "Extension" }, 129 | { "FILETIME" : "Filetime" }, 130 | { "std::string" : "Filename" }, 131 | { "std::string" : "URL" } 132 | ] 133 | }, 134 | "SID_REGISTRY" : { 135 | "PacketId" : "0x18", 136 | "Description" : "", 137 | "Structure" : [ 138 | { "SidHeader" : [ 139 | { "BYTE" : "AlwaysFF" }, 140 | { "BYTE" : "PacketId" }, 141 | { "short" : "nSize" } 142 | ] 143 | }, 144 | { "int" : "Cookie" }, 145 | { "int" : "HKEY" }, 146 | { "std::string" : "RegistryPath" }, 147 | { "std::string" : "RegistryKey" } 148 | ] 149 | }, 150 | "SID_STARTADVEX3" : { 151 | "PacketId" : "0x1C", 152 | "Description" : "", 153 | "Structure" : [ 154 | { "SidHeader" : [ 155 | { "BYTE" : "AlwaysFF" }, 156 | { "BYTE" : "PacketId" }, 157 | { "short" : "nSize" } 158 | ] 159 | }, 160 | { "int" : "Result" } 161 | ] 162 | }, 163 | "SID_PING" : { 164 | "PacketId" : "0x25", 165 | "Description" : "", 166 | "Structure" : [ 167 | { "SidHeader" : [ 168 | { "BYTE" : "AlwaysFF" }, 169 | { "BYTE" : "PacketId" }, 170 | { "short" : "nSize" } 171 | ] 172 | }, 173 | { "int" : "Value" } 174 | ] 175 | }, 176 | "SID_READUSERDATA" : { 177 | "PacketId" : "0x26", 178 | "Description" : "", 179 | "Structure" : [ 180 | { "SidHeader" : [ 181 | { "BYTE" : "AlwaysFF" }, 182 | { "BYTE" : "PacketId" }, 183 | { "short" : "nSize" } 184 | ] 185 | }, 186 | { "int" : "AccountsCount" }, 187 | { "int" : "KeysCount" }, 188 | { "int" : "RequestId" }, 189 | { "std::string" : "Values[KeysCount]" } 190 | ] 191 | }, 192 | "SID_CHANGEPASSWORD" : { 193 | "PacketId" : "0x31", 194 | "Description" : "", 195 | "Structure" : [ 196 | { "SidHeader" : [ 197 | { "BYTE" : "AlwaysFF" }, 198 | { "BYTE" : "PacketId" }, 199 | { "short" : "nSize" } 200 | ] 201 | }, 202 | { "int" : "Result" } 203 | ] 204 | }, 205 | "SID_GETFILETIME" : { 206 | "PacketId" : "0x33", 207 | "Description" : "", 208 | "Structure" : [ 209 | { "SidHeader" : [ 210 | { "BYTE" : "AlwaysFF" }, 211 | { "BYTE" : "PacketId" }, 212 | { "short" : "nSize" } 213 | ] 214 | }, 215 | { "int" : "RequestId" }, 216 | { "int" : "Unknown" }, 217 | { "FILETIME" : "Filetime" }, 218 | { "std::string" : "Filename" } 219 | ] 220 | }, 221 | "SID_LOGONRESPONSE2" : { 222 | "PacketId" : "0x3A", 223 | "Description" : "", 224 | "Structure" : [ 225 | { "SidHeader" : [ 226 | { "BYTE" : "AlwaysFF" }, 227 | { "BYTE" : "PacketId" }, 228 | { "short" : "nSize" } 229 | ] 230 | }, 231 | { "int" : "Status" } 232 | ] 233 | }, 234 | "SID_CREATEACCOUNT2" : { 235 | "PacketId" : "0x3D", 236 | "Description" : "", 237 | "Structure" : [ 238 | { "SidHeader" : [ 239 | { "BYTE" : "AlwaysFF" }, 240 | { "BYTE" : "PacketId" }, 241 | { "short" : "nSize" } 242 | ] 243 | }, 244 | { "int" : "Result" }, 245 | { "BYTE" : "Unknown1" }, 246 | { "short" : "Something" } 247 | ] 248 | }, 249 | "SID_LOGONREALMEX" : { 250 | "PacketId" : "0x3E", 251 | "Description" : "", 252 | "Structure" : [ 253 | { "SidHeader" : [ 254 | { "BYTE" : "AlwaysFF" }, 255 | { "BYTE" : "PacketId" }, 256 | { "short" : "nSize" } 257 | ] 258 | }, 259 | { "int" : "MCPCookie" }, 260 | { "int" : "MCPStatus" }, 261 | { "BYTE" : "MCPChunk1[8]" }, 262 | { "int" : "RealmIP" }, 263 | { "int" : "RealmPort" }, 264 | { "BYTE" : "MCPChunk2[48]" }, 265 | { "std::string" : "Name" } 266 | ] 267 | }, 268 | "SID_QUERYREALMS2" : { 269 | "PacketId" : "0x40", 270 | "Description" : "", 271 | "Structure" : [ 272 | { "SidHeader" : [ 273 | { "BYTE" : "AlwaysFF" }, 274 | { "BYTE" : "PacketId" }, 275 | { "short" : "nSize" } 276 | ] 277 | }, 278 | { "int" : "Unknown" }, 279 | { "int" : "Count" }, 280 | { "Realms[Count]" : [ 281 | { "int" : "Unknown" }, 282 | { "std::string" : "Title" }, 283 | { "std::string" : "Description" } 284 | ] 285 | } 286 | ] 287 | }, 288 | "SID_NEWS_INFO" : { 289 | "PacketId" : "0x46", 290 | "Description" : "", 291 | "Structure" : [ 292 | { "SidHeader" : [ 293 | { "BYTE" : "AlwaysFF" }, 294 | { "BYTE" : "PacketId" }, 295 | { "short" : "nSize" } 296 | ] 297 | }, 298 | { "BYTE" : "Count" }, 299 | { "int" : "LastLogon" }, 300 | { "int" : "OldestNews" }, 301 | { "int" : "LatestNews" }, 302 | { "News[Count]" : [ 303 | { "int" : "Timestamp" }, 304 | { "std::string" : "Description" } 305 | ] 306 | } 307 | ] 308 | }, 309 | "SID_OPTIONALWORK" : { 310 | "PacketId" : "0x4A", 311 | "Description" : "", 312 | "Structure" : [ 313 | { "SidHeader" : [ 314 | { "BYTE" : "AlwaysFF" }, 315 | { "BYTE" : "PacketId" }, 316 | { "short" : "nSize" } 317 | ] 318 | }, 319 | { "std::string" : "Filename" } 320 | ] 321 | }, 322 | "SID_REQUIREDWORK" : { 323 | "PacketId" : "0x4C", 324 | "Description" : "", 325 | "Structure" : [ 326 | { "SidHeader" : [ 327 | { "BYTE" : "AlwaysFF" }, 328 | { "BYTE" : "PacketId" }, 329 | { "short" : "nSize" } 330 | ] 331 | }, 332 | { "std::string" : "Filename" } 333 | ] 334 | }, 335 | "SID_AUTH_INFO" : { 336 | "PacketId" : "0x50", 337 | "Description" : "", 338 | "Structure" : [ 339 | { "SidHeader" : [ 340 | { "BYTE" : "AlwaysFF" }, 341 | { "BYTE" : "PacketId" }, 342 | { "short" : "nSize" } 343 | ] 344 | }, 345 | { "int" : "LogonType" }, 346 | { "int" : "ServerToken" }, 347 | { "int" : "UDPValue" }, 348 | { "FILETIME" : "MPQFILETIME" }, 349 | { "std::string" : "Filename" }, 350 | { "std::string" : "ValueString" } 351 | ] 352 | }, 353 | "SID_AUTH_CHECK" : { 354 | "PacketId" : "0x51", 355 | "Description" : "", 356 | "Structure" : [ 357 | { "SidHeader" : [ 358 | { "BYTE" : "AlwaysFF" }, 359 | { "BYTE" : "PacketId" }, 360 | { "short" : "nSize" } 361 | ] 362 | }, 363 | { "int" : "Result" }, 364 | { "std::string" : "AdditionalInfo" } 365 | ] 366 | }, 367 | "SID_SETEMAIL" : { 368 | "PacketId" : "0x59", 369 | "Description" : "", 370 | "Structure" : [ 371 | { "SidHeader" : [ 372 | { "BYTE" : "AlwaysFF" }, 373 | { "BYTE" : "PacketId" }, 374 | { "short" : "nSize" } 375 | ] 376 | } 377 | ] 378 | } 379 | } 380 | -------------------------------------------------------------------------------- /src/data/1.15/client2gs.json: -------------------------------------------------------------------------------- 1 | { 2 | "D2GS_WALKTOLOCATION" : { 3 | "PacketId" : "0x01", 4 | "Description" : "", 5 | "Size" : 5, 6 | "Structure" : [ 7 | { "BYTE" : "PacketId" }, 8 | { "short" : "nTargetX" }, 9 | { "short" : "nTargetY" } 10 | ] 11 | }, 12 | "D2GS_WALKTOENTITY" : { 13 | "PacketId" : "0x02", 14 | "Description" : "", 15 | "Size" : 9, 16 | "Structure" : [ 17 | { "BYTE" : "PacketId" }, 18 | { "int" : "nUnitType" }, 19 | { "int" : "nUnitGUID" } 20 | ] 21 | }, 22 | "D2GS_RUNTOLOCATION" : { 23 | "PacketId" : "0x03", 24 | "Description" : "", 25 | "Size" : 5, 26 | "Structure" : [ 27 | { "BYTE" : "PacketId" }, 28 | { "short" : "nTargetX" }, 29 | { "short" : "nTargetY" } 30 | ] 31 | }, 32 | "D2GS_RUNTOENTITY" : { 33 | "PacketId" : "0x04", 34 | "Description" : "", 35 | "Size" : 9, 36 | "Structure" : [ 37 | { "BYTE" : "PacketId" }, 38 | { "int" : "nUnitType" }, 39 | { "int" : "nUnitGUID" } 40 | ] 41 | }, 42 | "D2GS_LEFTSKILLONLOCATION" : { 43 | "PacketId" : "0x05", 44 | "Description" : "", 45 | "Size" : 5, 46 | "Structure" : [ 47 | { "BYTE" : "PacketId" }, 48 | { "short" : "nTargetX" }, 49 | { "short" : "nTargetY" } 50 | ] 51 | }, 52 | "D2GS_LEFTSKILLONENTITY" : { 53 | "PacketId" : "0x06", 54 | "Description" : "", 55 | "Size" : 9, 56 | "Structure" : [ 57 | { "BYTE" : "PacketId" }, 58 | { "int" : "nUnitType" }, 59 | { "int" : "nUnitGUID" } 60 | ] 61 | }, 62 | "D2GS_LEFTSKILLONENTITYEX" : { 63 | "PacketId" : "0x07", 64 | "Description" : "", 65 | "Size" : 9, 66 | "Structure" : [ 67 | { "BYTE" : "PacketId" }, 68 | { "int" : "nUnitType" }, 69 | { "int" : "nUnitGUID" } 70 | ] 71 | }, 72 | "D2GS_LEFTSKILLONLOCATIONEX" : { 73 | "PacketId" : "0x08", 74 | "Description" : "", 75 | "Size" : 5, 76 | "Structure" : [ 77 | { "BYTE" : "PacketId" }, 78 | { "short" : "nTargetX" }, 79 | { "short" : "nTargetY" } 80 | ] 81 | }, 82 | "D2GS_LEFTSKILLONENTITYEX2" : { 83 | "PacketId" : "0x09", 84 | "Description" : "", 85 | "Size" : 9, 86 | "Structure" : [ 87 | { "BYTE" : "PacketId" }, 88 | { "int" : "nUnitType" }, 89 | { "int" : "nUnitGUID" } 90 | ] 91 | }, 92 | "D2GS_LEFTSKILLONENTITYEX3" : { 93 | "PacketId" : "0x0A", 94 | "Description" : "", 95 | "Size" : 9, 96 | "Structure" : [ 97 | { "BYTE" : "PacketId" }, 98 | { "int" : "nUnitType" }, 99 | { "int" : "nUnitGUID" } 100 | ] 101 | }, 102 | "D2GS_RIGHTSKILLONLOCATION" : { 103 | "PacketId" : "0x0C", 104 | "Description" : "", 105 | "Size" : 5, 106 | "Structure" : [ 107 | { "BYTE" : "PacketId" }, 108 | { "short" : "nTargetX" }, 109 | { "short" : "nTargetY" } 110 | ] 111 | }, 112 | "D2GS_RIGHTSKILLONENTITY" : { 113 | "PacketId" : "0x0D", 114 | "Description" : "", 115 | "Size" : 9, 116 | "Structure" : [ 117 | { "BYTE" : "PacketId" }, 118 | { "int" : "nUnitType" }, 119 | { "int" : "nUnitGUID" } 120 | ] 121 | }, 122 | "D2GS_RIGHTSKILLONENTITYEX" : { 123 | "PacketId" : "0x0E", 124 | "Description" : "", 125 | "Size" : 9, 126 | "Structure" : [ 127 | { "BYTE" : "PacketId" }, 128 | { "int" : "nUnitType" }, 129 | { "int" : "nUnitGUID" } 130 | ] 131 | }, 132 | "D2GS_RIGHTSKILLONLOCATIONEX" : { 133 | "PacketId" : "0x0F", 134 | "Description" : "", 135 | "Size" : 5, 136 | "Structure" : [ 137 | { "BYTE" : "PacketId" }, 138 | { "short" : "nTargetX" }, 139 | { "short" : "nTargetY" } 140 | ] 141 | }, 142 | "D2GS_RIGHTSKILLONENTITYEX2" : { 143 | "PacketId" : "0x10", 144 | "Description" : "", 145 | "Size" : 9, 146 | "Structure" : [ 147 | { "BYTE" : "PacketId" }, 148 | { "int" : "nUnitType" }, 149 | { "int" : "nUnitGUID" } 150 | ] 151 | }, 152 | "D2GS_RIGHTSKILLONENTITYEX3" : { 153 | "PacketId" : "0x11", 154 | "Description" : "", 155 | "Size" : 9, 156 | "Structure" : [ 157 | { "BYTE" : "PacketId" }, 158 | { "int" : "nUnitType" }, 159 | { "int" : "nUnitGUID" } 160 | ] 161 | }, 162 | "D2GS_SET_INFERNO_STATE" : { 163 | "PacketId" : "0x12", 164 | "Description" : "", 165 | "Size" : 1, 166 | "Structure" : [ 167 | { "BYTE" : "PacketId" } 168 | ] 169 | }, 170 | "D2GS_INTERACTWITHENTITY" : { 171 | "PacketId" : "0x13", 172 | "Description" : "", 173 | "Size" : 9, 174 | "Structure" : [ 175 | { "BYTE" : "PacketId" }, 176 | { "int" : "nUnitType" }, 177 | { "int" : "nUnitGUID" } 178 | ] 179 | }, 180 | "D2GS_OVERHEADMESSAGE" : { 181 | "PacketId" : "0x14", 182 | "Description" : "nType is ignored by server", 183 | "Size" : -1, 184 | "Structure" : [ 185 | { "BYTE" : "PacketId" }, 186 | { "BYTE" : "nType" }, 187 | { "BYTE" : "nLanguageCode" }, 188 | { "std::string" : "szMessage" }, 189 | { "std::string" : "szTarget" }, 190 | { "std::string" : "szUnknown" } 191 | ] 192 | }, 193 | "D2GS_CHAT" : { 194 | "PacketId" : "0x15", 195 | "Description" : "", 196 | "Size" : -1, 197 | "Structure" : [ 198 | { "BYTE" : "PacketId" }, 199 | { "BYTE" : "nType" }, 200 | { "BYTE" : "nLanguageCode" }, 201 | { "std::string" : "szMessage" }, 202 | { "std::string" : "szTarget" }, 203 | { "std::string" : "szUnknown" } 204 | ] 205 | }, 206 | "D2GS_PICKUPITEM" : { 207 | "PacketId" : "0x16", 208 | "Description" : "", 209 | "Size" : 13, 210 | "Structure" : [ 211 | { "BYTE" : "PacketId" }, 212 | { "int" : "nItemType" }, 213 | { "int" : "nItemGUID" }, 214 | { "int" : "bCursor" } 215 | ] 216 | }, 217 | "D2GS_DROPITEM" : { 218 | "PacketId" : "0x17", 219 | "Description" : "", 220 | "Size" : 5, 221 | "Structure" : [ 222 | { "BYTE" : "PacketId" }, 223 | { "int" : "nItemGUID" } 224 | ] 225 | }, 226 | "D2GS_ITEMTOBUFFER" : { 227 | "PacketId" : "0x18", 228 | "Description" : "", 229 | "Size" : 17, 230 | "Structure" : [ 231 | { "BYTE" : "PacketId" }, 232 | { "int" : "nItemGUID" }, 233 | { "int" : "nTargetX" }, 234 | { "int" : "nTargetY" }, 235 | { "int" : "nBuffer" } 236 | ] 237 | }, 238 | "D2GS_PICKUPBUFFERITEM" : { 239 | "PacketId" : "0x19", 240 | "Description" : "", 241 | "Size" : 5, 242 | "Structure" : [ 243 | { "BYTE" : "PacketId" }, 244 | { "int" : "nItemGUID" } 245 | ] 246 | }, 247 | "D2GS_ITEMTOBODY" : { 248 | "PacketId" : "0x1A", 249 | "Description" : "", 250 | "Size" : 9, 251 | "Structure" : [ 252 | { "BYTE" : "PacketId" }, 253 | { "int" : "nItemGUID" }, 254 | { "int" : "nBodyLocation" } 255 | ] 256 | }, 257 | "D2GS_SWAP2HANDEDITEM" : { 258 | "PacketId" : "0x1B", 259 | "Description" : "", 260 | "Size" : 9, 261 | "Structure" : [ 262 | { "BYTE" : "PacketId" }, 263 | { "int" : "nItemGUID" }, 264 | { "int" : "nBodyLocation" } 265 | ] 266 | }, 267 | "D2GS_PICKUPBODYITEM" : { 268 | "PacketId" : "0x1C", 269 | "Description" : "", 270 | "Size" : 3, 271 | "Structure" : [ 272 | { "BYTE" : "PacketId" }, 273 | { "short" : "nBodyLocation" } 274 | ] 275 | }, 276 | "D2GS_SWITCHBODYITEM" : { 277 | "PacketId" : "0x1D", 278 | "Description" : "", 279 | "Size" : 9, 280 | "Structure" : [ 281 | { "BYTE" : "PacketId" }, 282 | { "int" : "nItemGUID" }, 283 | { "int" : "nBodyLocation" } 284 | ] 285 | }, 286 | "D2GS_SWITCH1H_2H" : { 287 | "PacketId" : "0x1E", 288 | "Description" : "", 289 | "Size" : 9, 290 | "Structure" : [ 291 | { "BYTE" : "PacketId" }, 292 | { "int" : "nItemGUID" }, 293 | { "int" : "nBodyLocation" } 294 | ] 295 | }, 296 | "D2GS_SWITCHINVENTORYITEM" : { 297 | "PacketId" : "0x1F", 298 | "Description" : "", 299 | "Size" : 17, 300 | "Structure" : [ 301 | { "BYTE" : "PacketId" }, 302 | { "int" : "nItemCursorGUID" }, 303 | { "int" : "nItemTargetGUID" }, 304 | { "int" : "nTargetX" }, 305 | { "int" : "nTargetY" } 306 | ] 307 | }, 308 | "D2GS_USEITEM" : { 309 | "PacketId" : "0x20", 310 | "Description" : "", 311 | "Size" : 13, 312 | "Structure" : [ 313 | { "BYTE" : "PacketId" }, 314 | { "int" : "nItemGUID" }, 315 | { "int" : "nItemX" }, 316 | { "int" : "nItemY" } 317 | ] 318 | }, 319 | "D2GS_STACKITEM" : { 320 | "PacketId" : "0x21", 321 | "Description" : "", 322 | "Size" : 9, 323 | "Structure" : [ 324 | { "BYTE" : "PacketId" }, 325 | { "int" : "nItemCursorGUID" }, 326 | { "int" : "nItemTargetGUID" } 327 | ] 328 | }, 329 | "D2GS_REMOVESTACKITEM" : { 330 | "PacketId" : "0x22", 331 | "Description" : "", 332 | "Size" : 5, 333 | "Structure" : [ 334 | { "BYTE" : "PacketId" }, 335 | { "int" : "nItemGUID" } 336 | ] 337 | }, 338 | "D2GS_ITEMTOBELT" : { 339 | "PacketId" : "0x23", 340 | "Description" : "", 341 | "Size" : 9, 342 | "Structure" : [ 343 | { "BYTE" : "PacketId" }, 344 | { "int" : "nItemGUID" }, 345 | { "int" : "nLocation" } 346 | ] 347 | }, 348 | "D2GS_REMOVEBELTITEM" : { 349 | "PacketId" : "0x24", 350 | "Description" : "", 351 | "Size" : 5, 352 | "Structure" : [ 353 | { "BYTE" : "PacketId" }, 354 | { "int" : "nItemGUID" } 355 | ] 356 | }, 357 | "D2GS_SWITCHBELTITEM" : { 358 | "PacketId" : "0x25", 359 | "Description" : "", 360 | "Size" : 9, 361 | "Structure" : [ 362 | { "BYTE" : "PacketId" }, 363 | { "int" : "nItemCursorGUID" }, 364 | { "int" : "nItemTargetGUID" } 365 | ] 366 | }, 367 | "D2GS_USEBELTITEM" : { 368 | "PacketId" : "0x26", 369 | "Description" : "", 370 | "Size" : 13, 371 | "Structure" : [ 372 | { "BYTE" : "PacketId" }, 373 | { "int" : "nItemGUID" }, 374 | { "int" : "bOnMerc" }, 375 | { "int" : "Unused" } 376 | ] 377 | }, 378 | "D2GS_IDENTIFYITEM" : { 379 | "PacketId" : "0x27", 380 | "Description" : "", 381 | "Size" : 9, 382 | "Structure" : [ 383 | { "BYTE" : "PacketId" }, 384 | { "int" : "nItemGUID" }, 385 | { "int" : "nScroolGUID" } 386 | ] 387 | }, 388 | "D2GS_INSERTSOCKETITEM" : { 389 | "PacketId" : "0x28", 390 | "Description" : "", 391 | "Size" : 9, 392 | "Structure" : [ 393 | { "BYTE" : "PacketId" }, 394 | { "int" : "nItemCursorGUID" }, 395 | { "int" : "nItemTargetGUID" } 396 | ] 397 | }, 398 | "D2GS_SCROLLTOTOME" : { 399 | "PacketId" : "0x29", 400 | "Description" : "", 401 | "Size" : 9, 402 | "Structure" : [ 403 | { "BYTE" : "PacketId" }, 404 | { "int" : "nItemCursorGUID" }, 405 | { "int" : "nItemTargetGUID" } 406 | ] 407 | }, 408 | "D2GS_ITEMTOCUBE" : { 409 | "PacketId" : "0x2A", 410 | "Description" : "", 411 | "Size" : 9, 412 | "Structure" : [ 413 | { "BYTE" : "PacketId" }, 414 | { "int" : "nItemCursorGUID" }, 415 | { "int" : "nCubeGUID" } 416 | ] 417 | }, 418 | "D2GS_NPC_INIT" : { 419 | "PacketId" : "0x2F", 420 | "Description" : "", 421 | "Size" : 9, 422 | "Structure" : [ 423 | { "BYTE" : "PacketId" }, 424 | { "int" : "nActionType" }, 425 | { "int" : "nUnitGUID" } 426 | ] 427 | }, 428 | "D2GS_NPC_CANCEL" : { 429 | "PacketId" : "0x30", 430 | "Description" : "", 431 | "Size" : 9, 432 | "Structure" : [ 433 | { "BYTE" : "PacketId" }, 434 | { "int" : "nActionType" }, 435 | { "int" : "nUnitGUID" } 436 | ] 437 | }, 438 | "D2GS_QUESTMESSAGE" : { 439 | "PacketId" : "0x31", 440 | "Description" : "", 441 | "Size" : 9, 442 | "Structure" : [ 443 | { "BYTE" : "PacketId" }, 444 | { "int" : "nUnitGUID" }, 445 | { "int" : "nMessageID" } 446 | ] 447 | }, 448 | "D2GS_NPC_BUY" : { 449 | "PacketId" : "0x32", 450 | "Description" : "", 451 | "Size" : 17, 452 | "Structure" : [ 453 | { "BYTE" : "PacketId" }, 454 | { "int" : "nUnitGUID" }, 455 | { "int" : "nItemGUID" }, 456 | { "int" : "nBuyType" }, 457 | { "int" : "nCost" } 458 | ] 459 | }, 460 | "D2GS_NPC_SELL" : { 461 | "PacketId" : "0x33", 462 | "Description" : "Sells item to NPC", 463 | "Size" : 17, 464 | "Structure" : [ 465 | { "BYTE" : "PacketId" }, 466 | { "int" : "nNpcGUID" }, 467 | { "int" : "nItemGUID" }, 468 | { "WORD" : "nMode" }, 469 | { "BYTE" : "Padding[6]" } 470 | ] 471 | }, 472 | "D2GS_NPC_IDENTIFYITEMS" : { 473 | "PacketId" : "0x34", 474 | "Description" : "Identifies all items if player can afford it", 475 | "Size" : 5, 476 | "Structure" : [ 477 | { "BYTE" : "PacketId" }, 478 | { "int" : "nNpcGUID" } 479 | ] 480 | }, 481 | "D2GS_REPAIR" : { 482 | "PacketId" : "0x35", 483 | "Description" : "This is used to repair broken items. \nIf you set bRepairOne to 1 it will repair just this one item but when it is set to 0 it will repair all items.", 484 | "Size" : 17, 485 | "Structure" : [ 486 | { "BYTE" : "PacketId" }, 487 | { "int" : "nUnitGUID" }, 488 | { "int" : "nItemGUID" }, 489 | { "int" : "bRepairOne" }, 490 | { "int" : "nUnused" } 491 | ] 492 | }, 493 | "D2GS_HIREMERC" : { 494 | "PacketId" : "0x36", 495 | "Description" : "", 496 | "Size" : 17, 497 | "Structure" : [ 498 | { "BYTE" : "PacketId" }, 499 | { "int" : "nUnitGUID" }, 500 | { "int" : "nMercID" }, 501 | { "int" : "nUnk" }, 502 | { "int" : "nUnk2" } 503 | ] 504 | }, 505 | "D2GS_IDENTIFYGAMBLE" : { 506 | "PacketId" : "0x37", 507 | "Description" : "", 508 | "Size" : 5, 509 | "Structure" : [ 510 | { "BYTE" : "PacketId" }, 511 | { "int" : "nItemGUID" } 512 | ] 513 | }, 514 | "D2GS_ENTITYACTION" : { 515 | "PacketId" : "0x38", 516 | "Description" : "", 517 | "Size" : 13, 518 | "Structure" : [ 519 | { "BYTE" : "PacketId" }, 520 | { "int" : "nAction" }, 521 | { "int" : "nUnitGUID" }, 522 | { "int" : "nComplement" } 523 | ] 524 | }, 525 | "D2GS_ADDSTAT" : { 526 | "PacketId" : "0x3A", 527 | "Description" : "", 528 | "Size" : 3, 529 | "Structure" : [ 530 | { "BYTE" : "PacketId" }, 531 | { "BYTE" : "nStatID" }, 532 | { "BYTE" : "nCountSubOne" } 533 | ] 534 | }, 535 | "D2GS_ADDSKILL" : { 536 | "PacketId" : "0x3B", 537 | "Description" : "", 538 | "Size" : 3, 539 | "Structure" : [ 540 | { "BYTE" : "PacketId" }, 541 | { "short" : "nSkillID" } 542 | ] 543 | }, 544 | "D2GS_SELECTSKILL" : { 545 | "PacketId" : "0x3C", 546 | "Description" : "", 547 | "Size" : 9, 548 | "Structure" : [ 549 | { "BYTE" : "PacketId" }, 550 | { "short" : "nSkillID" }, 551 | { "BYTE" : "Zero" }, 552 | { "BYTE" : "nHand" }, 553 | { "int" : "nItemGUID" } 554 | ] 555 | }, 556 | "D2GS_UNKNOWN_3D" : { 557 | "PacketId" : "0x3D", 558 | "Description" : "", 559 | "Size" : 5, 560 | "Structure" : [ 561 | { "BYTE" : "PacketId" }, 562 | { "int" : "nUnitGUID" } 563 | ] 564 | }, 565 | "D2GS_ACTIVATEITEM" : { 566 | "PacketId" : "0x3E", 567 | "Description" : "", 568 | "Size" : 5, 569 | "Structure" : [ 570 | { "BYTE" : "PacketId" }, 571 | { "int" : "nItemGUID" } 572 | ] 573 | }, 574 | "D2GS_CHARACTERPHRASE" : { 575 | "PacketId" : "0x3F", 576 | "Description" : "", 577 | "Size" : 3, 578 | "Structure" : [ 579 | { "BYTE" : "PacketId" }, 580 | { "short" : "nPhraseID" } 581 | ] 582 | }, 583 | "D2GS_UDPATEQUESTS" : { 584 | "PacketId" : "0x40", 585 | "Description" : "", 586 | "Size" : 1, 587 | "Structure" : [ 588 | { "BYTE" : "PacketId" } 589 | ] 590 | }, 591 | "D2GS_RESURRECT" : { 592 | "PacketId" : "0x41", 593 | "Description" : "", 594 | "Size" : 1, 595 | "Structure" : [ 596 | { "BYTE" : "PacketId" } 597 | ] 598 | }, 599 | "D2GS_STAFFINORIFICE" : { 600 | "PacketId" : "0x44", 601 | "Description" : "", 602 | "Size" : 17, 603 | "Structure" : [ 604 | { "BYTE" : "PacketId" }, 605 | { "int" : "nOrificeType" }, 606 | { "int" : "nOrificeGUID" }, 607 | { "int" : "nStaffGUID" }, 608 | { "int" : "nEntityState" } 609 | ] 610 | }, 611 | "D2GS_CONTROLLERMOVE" : { 612 | "PacketId" : "0x45", 613 | "Description" : "", 614 | "Size" : 3, 615 | "Structure" : [ 616 | { "BYTE" : "PacketId" }, 617 | { "short" : "nAngle" } 618 | ] 619 | }, 620 | "D2GS_MERC_INTERACT" : { 621 | "PacketId" : "0x46", 622 | "Description" : "", 623 | "Size" : 13, 624 | "Structure" : [ 625 | { "BYTE" : "PacketId" }, 626 | { "int" : "nMercGUID" }, 627 | { "int" : "nUnitGUID" }, 628 | { "int" : "nUnitType" } 629 | ] 630 | }, 631 | "D2GS_MERC_MOVE" : { 632 | "PacketId" : "0x47", 633 | "Description" : "", 634 | "Size" : 13, 635 | "Structure" : [ 636 | { "BYTE" : "PacketId" }, 637 | { "int" : "nMercGUID" }, 638 | { "short" : "nTargetX" }, 639 | { "short" : "PaddingX" }, 640 | { "short" : "nTargetY" }, 641 | { "short" : "PaddingY" } 642 | ] 643 | }, 644 | "D2GS_BUSYSTATE_OFF" : { 645 | "PacketId" : "0x48", 646 | "Description" : "", 647 | "Size" : 1, 648 | "Structure" : [ 649 | { "BYTE" : "PacketId" } 650 | ] 651 | }, 652 | "D2GS_REQUESTENTITYUPDATE" : { 653 | "PacketId" : "0x4B", 654 | "Description" : "", 655 | "Size" : 9, 656 | "Structure" : [ 657 | { "BYTE" : "PacketId" }, 658 | { "int" : "nUnitType" }, 659 | { "int" : "nUnitGUID" } 660 | ] 661 | }, 662 | "D2GS_TRANSMORGIFY" : { 663 | "PacketId" : "0x4C", 664 | "Description" : "", 665 | "Size" : 5, 666 | "Structure" : [ 667 | { "BYTE" : "PacketId" }, 668 | { "int" : "nObjectGUID" } 669 | ] 670 | }, 671 | "D2GS_PLAYNPCMESSAGE" : { 672 | "PacketId" : "0x4D", 673 | "Description" : "", 674 | "Size" : 3, 675 | "Structure" : [ 676 | { "BYTE" : "PacketId" }, 677 | { "short" : "nMonStatsId" } 678 | ] 679 | }, 680 | "D2GS_CLICKBUTTON" : { 681 | "PacketId" : "0x4F", 682 | "Description" : "", 683 | "Size" : 7, 684 | "Structure" : [ 685 | { "BYTE" : "PacketId" }, 686 | { "short" : "nButtonId" }, 687 | { "short" : "HiWORDGold" }, 688 | { "short" : "LoWORDGold" } 689 | ] 690 | }, 691 | "D2GS_DROPGOLD" : { 692 | "PacketId" : "0x50", 693 | "Description" : "", 694 | "Size" : 9, 695 | "Structure" : [ 696 | { "BYTE" : "PacketId" }, 697 | { "int" : "nUnitGUID" }, 698 | { "int" : "nGoldAmount" } 699 | ] 700 | }, 701 | "D2GS_BINDHOTKEY" : { 702 | "PacketId" : "0x51", 703 | "Description" : "", 704 | "Size" : 9, 705 | "Structure" : [ 706 | { "BYTE" : "PacketId" }, 707 | { "BYTE" : "nSkillID" }, 708 | { "BYTE" : "nHand" }, 709 | { "short" : "nHotkey" }, 710 | { "int" : "nItemGUID" } 711 | ] 712 | }, 713 | "D2GS_STAMINA_ON" : { 714 | "PacketId" : "0x53", 715 | "Description" : "", 716 | "Size" : 1, 717 | "Structure" : [ 718 | { "BYTE" : "PacketId" } 719 | ] 720 | }, 721 | "D2GS_STAMINA_OFF" : { 722 | "PacketId" : "0x54", 723 | "Description" : "", 724 | "Size" : 1, 725 | "Structure" : [ 726 | { "BYTE" : "PacketId" } 727 | ] 728 | }, 729 | "D2GS_WAYPOINTOPEN" : { 730 | "PacketId" : "0x55", 731 | "Description" : "", 732 | "Size" : 1, 733 | "Structure" : [ 734 | { "BYTE" : "PacketId" } 735 | ] 736 | }, 737 | "D2GS_WAYPOINTINTERACT" : { 738 | "PacketId" : "0x57", 739 | "Description" : "", 740 | "Size" : 5, 741 | "Structure" : [ 742 | { "BYTE" : "PacketId" }, 743 | { "int" : "nDestination" } 744 | ] 745 | }, 746 | "D2GS_QUESTCOMPLETED" : { 747 | "PacketId" : "0x58", 748 | "Description" : "", 749 | "Size" : 3, 750 | "Structure" : [ 751 | { "BYTE" : "PacketId" }, 752 | { "short" : "nQuestID" } 753 | ] 754 | }, 755 | "D2GS_MAKEENTITYMOVE" : { 756 | "PacketId" : "0x59", 757 | "Description" : "", 758 | "Size" : 17, 759 | "Structure" : [ 760 | { "BYTE" : "PacketId" }, 761 | { "int" : "nUnitType" }, 762 | { "int" : "nUnitGUID" }, 763 | { "int" : "nTargetX" }, 764 | { "int" : "nTargetY" } 765 | ] 766 | }, 767 | "D2GS_SQUELCH_HOSTILE" : { 768 | "PacketId" : "0x5D", 769 | "Description" : "", 770 | "Size" : 7, 771 | "Structure" : [ 772 | { "BYTE" : "PacketId" }, 773 | { "BYTE" : "nActionType" }, 774 | { "BYTE" : "bToggle" }, 775 | { "int" : "nPlayerGUID" } 776 | ] 777 | }, 778 | "D2GS_PARTY" : { 779 | "PacketId" : "0x5E", 780 | "Description" : "", 781 | "Size" : 6, 782 | "Structure" : [ 783 | { "BYTE" : "PacketId" }, 784 | { "BYTE" : "nActionType" }, 785 | { "int" : "nPlayerGUID" } 786 | ] 787 | }, 788 | "D2GS_UPDATEPLAYERPOS" : { 789 | "PacketId" : "0x5F", 790 | "Description" : "", 791 | "Size" : 5, 792 | "Structure" : [ 793 | { "BYTE" : "PacketId" }, 794 | { "short" : "nX" }, 795 | { "short" : "nY" } 796 | ] 797 | }, 798 | "D2GS_SWAPWEAPON" : { 799 | "PacketId" : "0x60", 800 | "Description" : "", 801 | "Size" : 1, 802 | "Structure" : [ 803 | { "BYTE" : "PacketId" } 804 | ] 805 | }, 806 | "D2GS_MERC_ITEM" : { 807 | "PacketId" : "0x61", 808 | "Description" : "", 809 | "Size" : 3, 810 | "Structure" : [ 811 | { "BYTE" : "PacketId" }, 812 | { "short" : "nPosition" } 813 | ] 814 | }, 815 | "D2GS_MERC_RESSURECT" : { 816 | "PacketId" : "0x62", 817 | "Description" : "", 818 | "Size" : 5, 819 | "Structure" : [ 820 | { "BYTE" : "PacketId" }, 821 | { "int" : "nUnitGUID" } 822 | ] 823 | }, 824 | "D2GS_ITEM_TOBELT" : { 825 | "PacketId" : "0x63", 826 | "Description" : "", 827 | "Size" : 5, 828 | "Structure" : [ 829 | { "BYTE" : "PacketId" }, 830 | { "int" : "nItemGUID" } 831 | ] 832 | }, 833 | "D2GS_CONTROLLERSTOP" : { 834 | "PacketId" : "0x64", 835 | "Description" : "", 836 | "Size" : 1, 837 | "Structure" : [ 838 | { "BYTE" : "PacketId" } 839 | ] 840 | }, 841 | "D2GS_WARDEN" : { 842 | "PacketId" : "0x66", 843 | "Description" : "", 844 | "Size" : -1, 845 | "Structure" : [ 846 | { "BYTE" : "PacketId" }, 847 | { "short" : "nStreamSize" }, 848 | { "BYTE" : "Stream[nStreamSize]" } 849 | ] 850 | }, 851 | "D2GS_GAMELOGON_SP" : { 852 | "PacketId" : "0x67", 853 | "Description" : "", 854 | "Size" : 46, 855 | "Structure" : [ 856 | { "BYTE" : "PacketId" }, 857 | { "char" : "szGameName[16]" }, 858 | { "BYTE" : "nGameType" }, 859 | { "BYTE" : "nCharClass" }, 860 | { "BYTE" : "nTemplate" }, 861 | { "BYTE" : "nSelectedDiff" }, 862 | { "char" : "szCharName[16]" }, 863 | { "short" : "nUnknown4" }, 864 | { "int" : "eArenaFlags" }, 865 | { "BYTE" : "nUnknown6" }, 866 | { "BYTE" : "nUnknown7" }, 867 | { "BYTE" : "nLanguageCode" } 868 | ] 869 | }, 870 | "D2GS_GAMELOGON_MULTI" : { 871 | "PacketId" : "0x68", 872 | "Description" : "nMinorGameVersion:\n\t- 1.14\t\t= 0x0000000E\n\t- 1.13\t\t= 0x0000000D\n\t- 1.12\t\t= 0x0000000C\n\t- 1.11\t\t= 0x0000000B\nnVersionConstant:\n\t- Classic \t= 0x2185EDD6\n\t- Expansion \t= 0xED5DCC50\nnConstant:\n\t\t\t= 0x91A519B6", 873 | "Size" : 45, 874 | "Structure" : [ 875 | { "BYTE" : "PacketId" }, 876 | { "int" : "nGameHash" }, 877 | { "short" : "nGameToken" }, 878 | { "BYTE" : "nCharClass" }, 879 | { "int" : "nMinorGameVersion" }, 880 | { "int" : "nVersionConstant" }, 881 | { "int" : "nConstant" }, 882 | { "int" : "magic1"}, 883 | { "int" : "magic2"}, 884 | { "BYTE" : "nLanguageCode" }, 885 | { "char" : "szCharName[16]" } 886 | ] 887 | }, 888 | "D2GS_LEAVEGAME" : { 889 | "PacketId" : "0x69", 890 | "Description" : "", 891 | "Size" : 1, 892 | "Structure" : [ 893 | { "BYTE" : "PacketId" } 894 | ] 895 | }, 896 | "D2GS_REQUESTHOSTEDGAMES" : { 897 | "PacketId" : "0x6A", 898 | "Description" : "", 899 | "Size" : 1, 900 | "Structure" : [ 901 | { "BYTE" : "PacketId" } 902 | ] 903 | }, 904 | "D2GS_JOINGAME" : { 905 | "PacketId" : "0x6B", 906 | "Description" : "", 907 | "Size" : 1, 908 | "Structure" : [ 909 | { "BYTE" : "PacketId" } 910 | ] 911 | }, 912 | "D2GS_UPLOADSAVE" : { 913 | "PacketId" : "0x6C", 914 | "Description" : "", 915 | "Size" : -1, 916 | "Structure" : [ 917 | { "BYTE" : "PacketId" }, 918 | { "BYTE" : "nChunkSize" }, 919 | { "int" : "nFullSize" }, 920 | { "BYTE" : "Bytes[nChunkSize]" }, 921 | { "BYTE" : "Terminator" } 922 | ] 923 | }, 924 | "D2GS_PING" : { 925 | "PacketId" : "0x6D", 926 | "Description" : "", 927 | "Size" : 13, 928 | "Structure" : [ 929 | { "BYTE" : "PacketId" }, 930 | { "int" : "nTickCount" }, 931 | { "int" : "nDelay" }, 932 | { "int" : "nWardenOrZero" } 933 | ] 934 | }, 935 | "D2GS_FINDME_6E" : { 936 | "PacketId" : "0x6E", 937 | "Description" : "", 938 | "Size" : 1, 939 | "Structure" : [ 940 | { "BYTE" : "PacketId" } 941 | ] 942 | }, 943 | "D2GS_FINDME_70" : { 944 | "PacketId" : "0x70", 945 | "Description" : "", 946 | "Size" : 1, 947 | "Structure" : [ 948 | { "BYTE" : "PacketId" } 949 | ] 950 | } 951 | } 952 | -------------------------------------------------------------------------------- /src/data/1.15/gs2client.json: -------------------------------------------------------------------------------- 1 | { 2 | "D2GS_GAMELOADING" : { 3 | "PacketId" : "0x00", 4 | "Description" : "", 5 | "Size" : 1, 6 | "Structure" : [ 7 | { "BYTE" : "PacketId" } 8 | ] 9 | }, 10 | "D2GS_GAMEFLAGS" : { 11 | "PacketId" : "0x01", 12 | "Description" : "eArenaFlags contains informatons about current game.\n eArenaFlags & 0x00000004 = Unknown (Always set) \n eArenaFlags & 0x00000800 = Hardcore \n eArenaFlags & 0x00100000 = Expansion", 13 | "Size" : 8, 14 | "Structure" : [ 15 | { "BYTE" : "PacketId" }, 16 | { "BYTE" : "nDifficulty" }, 17 | { "int" : "eArenaFlags" }, 18 | { "BYTE" : "bIsExpansion" }, 19 | { "BYTE" : "bIsLadder" } 20 | ] 21 | }, 22 | "D2GS_LOADSUCCESSFUL" : { 23 | "PacketId" : "0x02", 24 | "Description" : "", 25 | "Size" : 1, 26 | "Structure" : [ 27 | { "BYTE" : "PacketId" } 28 | ] 29 | }, 30 | "D2GS_LOADACT" : { 31 | "PacketId" : "0x03", 32 | "Description" : "", 33 | "Size" : 12, 34 | "Structure" : [ 35 | { "BYTE" : "PacketId" }, 36 | { "BYTE" : "nAct" }, 37 | { "int" : "nMapID" }, 38 | { "short" : "nArea" }, 39 | { "int" : "nAutomap" } 40 | ] 41 | }, 42 | "D2GS_LOADCOMPLETE" : { 43 | "PacketId" : "0x04", 44 | "Description" : "", 45 | "Size" : 1, 46 | "Structure" : [ 47 | { "BYTE" : "PacketId" } 48 | ] 49 | }, 50 | "D2GS_UNLOADCOMPLETE" : { 51 | "PacketId" : "0x05", 52 | "Description" : "", 53 | "Size" : 1, 54 | "Structure" : [ 55 | { "BYTE" : "PacketId" } 56 | ] 57 | }, 58 | "D2GS_GAMEEXIT" : { 59 | "PacketId" : "0x06", 60 | "Description" : "", 61 | "Size" : 1, 62 | "Structure" : [ 63 | { "BYTE" : "PacketId" } 64 | ] 65 | }, 66 | "D2GS_MAPREVEAL" : { 67 | "PacketId" : "0x07", 68 | "Description" : "", 69 | "Size" : 6, 70 | "Structure" : [ 71 | { "BYTE" : "PacketId" }, 72 | { "short" : "nTileX" }, 73 | { "short" : "nTileY" }, 74 | { "BYTE" : "nAreaID" } 75 | ] 76 | }, 77 | "D2GS_MAPHIDE" : { 78 | "PacketId" : "0x08", 79 | "Description" : "", 80 | "Size" : 6, 81 | "Structure" : [ 82 | { "BYTE" : "PacketId" }, 83 | { "short" : "nTileX" }, 84 | { "short" : "nTileY" }, 85 | { "BYTE" : "nAreaID" } 86 | ] 87 | }, 88 | "D2GS_ASSIGNLVLWARP" : { 89 | "PacketId" : "0x09", 90 | "Description" : "", 91 | "Size" : 11, 92 | "Structure" : [ 93 | { "BYTE" : "PacketId" }, 94 | { "BYTE" : "nWarpType" }, 95 | { "int" : "nWarpGUID" }, 96 | { "BYTE" : "nWarpClassId" }, 97 | { "short" : "nWarpX" }, 98 | { "short" : "nWarpY" } 99 | ] 100 | }, 101 | "D2GS_REMOVEOBJECT" : { 102 | "PacketId" : "0x0A", 103 | "Description" : "", 104 | "Size" : 6, 105 | "Structure" : [ 106 | { "BYTE" : "PacketId" }, 107 | { "BYTE" : "nUnitType" }, 108 | { "int" : "nUnitGUID" } 109 | ] 110 | }, 111 | "D2GS_GAMEHANDSHAKE" : { 112 | "PacketId" : "0x0B", 113 | "Description" : "", 114 | "Size" : 6, 115 | "Structure" : [ 116 | { "BYTE" : "PacketId" }, 117 | { "BYTE" : "nUnitType" }, 118 | { "int" : "nUnitGUID" } 119 | ] 120 | }, 121 | "D2GS_NPC_HIT" : { 122 | "PacketId" : "0x0C", 123 | "Description" : "", 124 | "Size" : 9, 125 | "Structure" : [ 126 | { "BYTE" : "PacketId" }, 127 | { "BYTE" : "nUnitType" }, 128 | { "int" : "nUnitGUID" }, 129 | { "BYTE" : "nUnitHitType" }, 130 | { "BYTE" : "nUnitHitClass" }, 131 | { "BYTE" : "nUnitLife" } 132 | ] 133 | }, 134 | "D2GS_PLAYERSTOP" : { 135 | "PacketId" : "0x0D", 136 | "Description" : "", 137 | "Size" : 13, 138 | "Structure" : [ 139 | { "BYTE" : "PacketId" }, 140 | { "BYTE" : "nUnitType" }, 141 | { "int" : "nUnitGUID" }, 142 | { "BYTE" : "bHitClass" }, 143 | { "short" : "nUnitX" }, 144 | { "short" : "nUnitY" }, 145 | { "BYTE" : "nUnitHitClass" }, 146 | { "BYTE" : "nUnitLife" } 147 | ] 148 | }, 149 | "D2GS_OBJECTSTATE" : { 150 | "PacketId" : "0x0E", 151 | "Description" : "", 152 | "Size" : 12, 153 | "Structure" : [ 154 | { "BYTE" : "PacketId" }, 155 | { "BYTE" : "nUnitType" }, 156 | { "int" : "nUnitGUID" }, 157 | { "BYTE" : "nPortalFlags" }, 158 | { "BYTE" : "bFlagIsTargetable" }, 159 | { "int" : "nUnitState" } 160 | ] 161 | }, 162 | "D2GS_PLAYERMOVE" : { 163 | "PacketId" : "0x0F", 164 | "Description" : "", 165 | "Size" : 16, 166 | "Structure" : [ 167 | { "BYTE" : "PacketId" }, 168 | { "BYTE" : "nUnitType" }, 169 | { "int" : "nUnitGUID" }, 170 | { "BYTE" : "nMoveType" }, 171 | { "short" : "nTargetX" }, 172 | { "short" : "nTargetY" }, 173 | { "BYTE" : "nUnitHitClass" }, 174 | { "short" : "nUnitX" }, 175 | { "short" : "nUnitY" } 176 | ] 177 | }, 178 | "D2GS_CHARTOOBJ" : { 179 | "PacketId" : "0x10", 180 | "Description" : "", 181 | "Size" : 16, 182 | "Structure" : [ 183 | { "BYTE" : "PacketId" }, 184 | { "BYTE" : "nPlayerType" }, 185 | { "int" : "nPlayerGUID" }, 186 | { "BYTE" : "nMoveType" }, 187 | { "BYTE" : "nTargetType" }, 188 | { "int" : "nTargetGUID" }, 189 | { "short" : "nTargetX" }, 190 | { "short" : "nTargetY" } 191 | ] 192 | }, 193 | "D2GS_REPORTKILL" : { 194 | "PacketId" : "0x11", 195 | "Description" : "", 196 | "Size" : 8, 197 | "Structure" : [ 198 | { "BYTE" : "PacketId" }, 199 | { "BYTE" : "nUnitType" }, 200 | { "int" : "nUnitGUID" }, 201 | { "short" : "nOverlay" } 202 | ] 203 | }, 204 | "D2GS_REASSIGNPLAYER" : { 205 | "PacketId" : "0x15", 206 | "Description" : "", 207 | "Size" : 11, 208 | "Structure" : [ 209 | { "BYTE" : "PacketId" }, 210 | { "BYTE" : "nUnitType" }, 211 | { "int" : "nUnitGUID" }, 212 | { "short" : "nX" }, 213 | { "short" : "nY" }, 214 | { "BYTE" : "bBool" } 215 | ] 216 | }, 217 | "D2GS_MANYUNITSCOORDSUPDATE" : { 218 | "PacketId" : "0x16", 219 | "Description" : "", 220 | "Size" : -1, 221 | "Structure" : [ 222 | { "BYTE" : "PacketId" }, 223 | { "BYTE" : "Unused1" }, 224 | { "BYTE" : "Unused2" }, 225 | { "BYTE" : "Count" }, 226 | { "sUnitInfo[Count]" : [ 227 | { "BYTE" : "nUnitType" }, 228 | { "int" : "nUnitGUID" }, 229 | { "short" : "nUnitX" }, 230 | { "short" : "nUnitY" } 231 | ] 232 | } 233 | ] 234 | }, 235 | "D2GS_UNKNOWN_17" : { 236 | "PacketId" : "0x17", 237 | "Description" : "", 238 | "Size" : 0, 239 | "Structure" : [ 240 | { "BYTE" : "PacketId" }, 241 | { "BYTE" : "nUnitType" }, 242 | { "int" : "nUnitGUID" }, 243 | { "short" : "nUnitX" }, 244 | { "short" : "nUnitY" }, 245 | { "short" : "Unknown3" } 246 | ] 247 | }, 248 | "D2GS_HPMPUPDATE2" : { 249 | "PacketId" : "0x18", 250 | "Description" : "BitStream data contains:\n HP (15bits) \n MP (15bits) \n Stamina (15bits) \n HPRegen (7bits) \n MPRegen (7bits) \n X (16bits) \n Y (16bits) \n dX (8bits) \n dY (8bits)", 251 | "Size" : 15, 252 | "Structure" : [ 253 | { "BYTE" : "PacketId" }, 254 | { "BYTE" : "aBitStream[14]" } 255 | ] 256 | }, 257 | "D2GS_SMALLGOLDPICKUP" : { 258 | "PacketId" : "0x19", 259 | "Description" : "", 260 | "Size" : 2, 261 | "Structure" : [ 262 | { "BYTE" : "PacketId" }, 263 | { "BYTE" : "nAmount" } 264 | ] 265 | }, 266 | "D2GS_ADDEXP_BYTE" : { 267 | "PacketId" : "0x1A", 268 | "Description" : "", 269 | "Size" : 2, 270 | "Structure" : [ 271 | { "BYTE" : "PacketId" }, 272 | { "BYTE" : "nAmount" } 273 | ] 274 | }, 275 | "D2GS_ADDEXP_WORD" : { 276 | "PacketId" : "0x1B", 277 | "Description" : "", 278 | "Size" : 3, 279 | "Structure" : [ 280 | { "BYTE" : "PacketId" }, 281 | { "short" : "nAmount" } 282 | ] 283 | }, 284 | "D2GS_ADDEXP_DWORD" : { 285 | "PacketId" : "0x1C", 286 | "Description" : "", 287 | "Size" : 5, 288 | "Structure" : [ 289 | { "BYTE" : "PacketId" }, 290 | { "int" : "nAmount" } 291 | ] 292 | }, 293 | "D2GS_SETATTR_BYTE" : { 294 | "PacketId" : "0x1D", 295 | "Description" : "", 296 | "Size" : 3, 297 | "Structure" : [ 298 | { "BYTE" : "PacketId" }, 299 | { "BYTE" : "nAttribute" }, 300 | { "BYTE" : "nValue" } 301 | ] 302 | }, 303 | "D2GS_SETATTR_WORD" : { 304 | "PacketId" : "0x1E", 305 | "Description" : "", 306 | "Size" : 4, 307 | "Structure" : [ 308 | { "BYTE" : "PacketId" }, 309 | { "BYTE" : "nAttribute" }, 310 | { "short" : "nValue" } 311 | ] 312 | }, 313 | "D2GS_SETATTR_DWORD" : { 314 | "PacketId" : "0x1F", 315 | "Description" : "", 316 | "Size" : 6, 317 | "Structure" : [ 318 | { "BYTE" : "PacketId" }, 319 | { "BYTE" : "nAttribute" }, 320 | { "int" : "nValue" } 321 | ] 322 | }, 323 | "D2GS_ATTRIBUTEUPDATE" : { 324 | "PacketId" : "0x20", 325 | "Description" : "", 326 | "Size" : 10, 327 | "Structure" : [ 328 | { "BYTE" : "PacketId" }, 329 | { "int" : "nUnitGUID" }, 330 | { "BYTE" : "nAttribute" }, 331 | { "int" : "nAmount" } 332 | ] 333 | }, 334 | "D2GS_UPDATEITEM_OSKILL" : { 335 | "PacketId" : "0x21", 336 | "Description" : "", 337 | "Size" : 12, 338 | "Structure" : [ 339 | { "BYTE" : "PacketId" }, 340 | { "BYTE" : "nUnitType" }, 341 | { "BYTE" : "bDelete" }, 342 | { "int" : "nUnitGUID" }, 343 | { "short" : "nSkillID" }, 344 | { "BYTE" : "nBaseLevel" }, 345 | { "BYTE" : "nBonusLevel" }, 346 | { "BYTE" : "Padding" } 347 | ] 348 | }, 349 | "D2GS_UPDATEITEM_SKILL" : { 350 | "PacketId" : "0x22", 351 | "Description" : "", 352 | "Size" : 12, 353 | "Structure" : [ 354 | { "BYTE" : "PacketId" }, 355 | { "BYTE" : "nUnitType" }, 356 | { "BYTE" : "bDelete" }, 357 | { "int" : "nUnitGUID" }, 358 | { "short" : "nSkillID" }, 359 | { "BYTE" : "nQuantity" }, 360 | { "BYTE" : "Padding" }, 361 | { "BYTE" : "bBody" } 362 | ] 363 | }, 364 | "D2GS_SETSKILL" : { 365 | "PacketId" : "0x23", 366 | "Description" : "", 367 | "Size" : 13, 368 | "Structure" : [ 369 | { "BYTE" : "PacketId" }, 370 | { "BYTE" : "nUnitTypeUnused" }, 371 | { "int" : "nUnitGUID" }, 372 | { "BYTE" : "nHand" }, 373 | { "short" : "nSkillId" }, 374 | { "int" : "nItemGUID" } 375 | ] 376 | }, 377 | "D2GS_CHAT" : { 378 | "PacketId" : "0x26", 379 | "Description" : "", 380 | "Size" : -1, 381 | "Structure" : [ 382 | { "BYTE" : "PacketId" }, 383 | { "BYTE" : "nChatType" }, 384 | { "BYTE" : "nLanguageCode" }, 385 | { "BYTE" : "nUnitType" }, 386 | { "int" : "nUnitGUID" }, 387 | { "BYTE" : "nChatColor" }, 388 | { "BYTE" : "nChatSubType" }, 389 | { "std::string" : "szNick" }, 390 | { "std::string" : "szMessage" } 391 | ] 392 | }, 393 | "D2GS_NPC_INFO" : { 394 | "PacketId" : "0x27", 395 | "Description" : "", 396 | "Size" : 40, 397 | "Structure" : [ 398 | { "BYTE" : "PacketId" }, 399 | { "BYTE" : "nUnitType" }, 400 | { "int" : "nUnitGUID" }, 401 | { "BYTE" : "nCount" }, 402 | { "BYTE" : "Unknown" }, 403 | { "sUnitMessages[8]" : [ 404 | { "BYTE" : "bShow" }, 405 | { "BYTE" : "NotUsed" }, 406 | { "short" : "nMsgID" } 407 | ] 408 | } 409 | ] 410 | }, 411 | "D2GS_PLAYERQUESTINFO" : { 412 | "PacketId" : "0x28", 413 | "Description" : "", 414 | "Size" : 103, 415 | "Structure" : [ 416 | { "BYTE" : "PacketId" }, 417 | { "BYTE" : "nUpdateType" }, 418 | { "int" : "nUnitGUID" }, 419 | { "BYTE" : "nActionType" }, 420 | { "BYTE" : "aQuestBitStream[96]" } 421 | ] 422 | }, 423 | "D2GS_GAMEQUESTLOG" : { 424 | "PacketId" : "0x29", 425 | "Description" : "", 426 | "Size" : 97, 427 | "Structure" : [ 428 | { "BYTE" : "PacketId" }, 429 | { "BYTE" : "aQuestBitStream[96]" } 430 | ] 431 | }, 432 | "D2GS_NPCTRANSACTION" : { 433 | "PacketId" : "0x2A", 434 | "Description" : "", 435 | "Size" : 15, 436 | "Structure" : [ 437 | { "BYTE" : "PacketId" }, 438 | { "BYTE" : "nTradeType" }, 439 | { "BYTE" : "nResult" }, 440 | { "int" : "Unused" }, 441 | { "int" : "nUnitGUID" }, 442 | { "int" : "nInventoryGold" } 443 | ] 444 | }, 445 | "D2GS_PLAYSOUND" : { 446 | "PacketId" : "0x2C", 447 | "Description" : "", 448 | "Size" : 8, 449 | "Structure" : [ 450 | { "BYTE" : "PacketId" }, 451 | { "BYTE" : "nType" }, 452 | { "int" : "nUnitGUID" }, 453 | { "short" : "nSoundID" } 454 | ] 455 | }, 456 | "D2GS_UPDATEITEMSTATS" : { 457 | "PacketId" : "0x3E", 458 | "Description" : "", 459 | "Size" : -1, 460 | "Structure" : [ 461 | { "BYTE" : "PacketId" }, 462 | { "BYTE" : "nFullPacketSize" }, 463 | { "BYTE" : "StatBitStream[nFullPacketSize - 2]" } 464 | ] 465 | }, 466 | "D2GS_USESTACKABLEITEM" : { 467 | "PacketId" : "0x3F", 468 | "Description" : "", 469 | "Size" : 8, 470 | "Structure" : [ 471 | { "BYTE" : "PacketId" }, 472 | { "BYTE" : "nSpellIcon" }, 473 | { "int" : "nItemGUID" }, 474 | { "short" : "nSkillID" } 475 | ] 476 | }, 477 | "D2GS_ITEMFLAGSETTER" : { 478 | "PacketId" : "0x40", 479 | "Description" : "", 480 | "Size" : 13, 481 | "Structure" : [ 482 | { "BYTE" : "PacketId" }, 483 | { "int" : "nUnitGUID" }, 484 | { "int" : "nItemFlag" }, 485 | { "int" : "bRemove" } 486 | ] 487 | }, 488 | "D2GS_CLEARCURSOR" : { 489 | "PacketId" : "0x42", 490 | "Description" : "", 491 | "Size" : 6, 492 | "Structure" : [ 493 | { "BYTE" : "PacketId" }, 494 | { "BYTE" : "nUnitType" }, 495 | { "int" : "nUnitGUID" } 496 | ] 497 | }, 498 | "D2GS_RELATOR1" : { 499 | "PacketId" : "0x47", 500 | "Description" : "", 501 | "Size" : 11, 502 | "Structure" : [ 503 | { "BYTE" : "PacketId" }, 504 | { "BYTE" : "nUnitType" }, 505 | { "BYTE" : "Gap" }, 506 | { "int" : "nUnitGUID" }, 507 | { "BYTE" : "Padding[4]" } 508 | ] 509 | }, 510 | "D2GS_RELATOR2" : { 511 | "PacketId" : "0x48", 512 | "Description" : "", 513 | "Size" : 11, 514 | "Structure" : [ 515 | { "BYTE" : "PacketId" }, 516 | { "BYTE" : "nUnitType" }, 517 | { "BYTE" : "Gap" }, 518 | { "int" : "nUnitGUID" }, 519 | { "BYTE" : "Padding[4]" } 520 | ] 521 | }, 522 | "D2GS_UNITCASTSKILL_TARGET" : { 523 | "PacketId" : "0x4C", 524 | "Description" : "", 525 | "Size" : 16, 526 | "Structure" : [ 527 | { "BYTE" : "PacketId" }, 528 | { "BYTE" : "nAttackerType" }, 529 | { "int" : "nAttackerGUID" }, 530 | { "short" : "nSkillID" }, 531 | { "BYTE" : "nSkillLevel" }, 532 | { "BYTE" : "nTargetType" }, 533 | { "int" : "nTargetGUID" }, 534 | { "short" : "Zero" } 535 | ] 536 | }, 537 | "D2GS_UNITCASTSKILL_XY" : { 538 | "PacketId" : "0x4D", 539 | "Description" : "", 540 | "Size" : 17, 541 | "Structure" : [ 542 | { "BYTE" : "PacketId" }, 543 | { "BYTE" : "nAttackerType" }, 544 | { "int" : "nAttackerGUID" }, 545 | { "short" : "nSkillID" }, 546 | { "short" : "Filler" }, 547 | { "BYTE" : "nSkillLevel" }, 548 | { "short" : "nTargetX" }, 549 | { "short" : "nTargetY" }, 550 | { "short" : "Zero" } 551 | ] 552 | }, 553 | "D2GS_MERCFORHIRE" : { 554 | "PacketId" : "0x4E", 555 | "Description" : "", 556 | "Size" : 7, 557 | "Structure" : [ 558 | { "BYTE" : "PacketId" }, 559 | { "short" : "nNameStringID" }, 560 | { "int" : "nSeed" } 561 | ] 562 | }, 563 | "D2GS_CLEARMERCLIST" : { 564 | "PacketId" : "0x4F", 565 | "Description" : "", 566 | "Size" : 1, 567 | "Structure" : [ 568 | { "BYTE" : "PacketId" } 569 | ] 570 | }, 571 | "D2GS_QUEST_SPECIAL" : { 572 | "PacketId" : "0x50", 573 | "Description" : "", 574 | "Size" : 15, 575 | "Structure" : [ 576 | { "BYTE" : "PacketId" }, 577 | { "short" : "nMessageType" }, 578 | { "short" : "nArg1" }, 579 | { "short" : "nArg2" }, 580 | { "short" : "nArg3" }, 581 | { "short" : "nArg4" }, 582 | { "short" : "nArg5" }, 583 | { "short" : "nArg6" } 584 | ] 585 | }, 586 | "D2GS_WORLDOBJECT" : { 587 | "PacketId" : "0x51", 588 | "Description" : "", 589 | "Size" : 14, 590 | "Structure" : [ 591 | { "BYTE" : "PacketId" }, 592 | { "BYTE" : "nObjectType" }, 593 | { "int" : "nObjectGUID" }, 594 | { "short" : "nClassID" }, 595 | { "short" : "nObjectX" }, 596 | { "short" : "nObjectY" }, 597 | { "BYTE" : "nState" }, 598 | { "BYTE" : "nInteraction" } 599 | ] 600 | }, 601 | "D2GS_PLAYERQUESTLOG" : { 602 | "PacketId" : "0x52", 603 | "Description" : "", 604 | "Size" : 42, 605 | "Structure" : [ 606 | { "BYTE" : "PacketId" }, 607 | { "BYTE" : "aQuestBitStream[41]" } 608 | ] 609 | }, 610 | "D2GS_DARKNESS" : { 611 | "PacketId" : "0x53", 612 | "Description" : "", 613 | "Size" : 10, 614 | "Structure" : [ 615 | { "BYTE" : "PacketId" }, 616 | { "int" : "nAct" }, 617 | { "int" : "nAngle" }, 618 | { "BYTE" : "bDarknessOnOff" } 619 | ] 620 | }, 621 | "D2GS_NPC_ENCHANTS" : { 622 | "PacketId" : "0x57", 623 | "Description" : "", 624 | "Size" : 14, 625 | "Structure" : [ 626 | { "BYTE" : "PacketId" }, 627 | { "int" : "nMonsterGUID" }, 628 | { "BYTE" : "nMonsterType" }, 629 | { "short" : "nMonsterNameIDX" }, 630 | { "BYTE" : "aEnchant[3]" }, 631 | { "BYTE" : "Filler" }, 632 | { "short" : "nMonsterIsChampion" } 633 | ] 634 | }, 635 | "D2GS_OPENUI" : { 636 | "PacketId" : "0x58", 637 | "Description" : "", 638 | "Size" : 7, 639 | "Structure" : [ 640 | { "BYTE" : "PacketId" }, 641 | { "int" : "nUnitGUID" }, 642 | { "BYTE" : "nUIType" }, 643 | { "BYTE" : "bBool" } 644 | ] 645 | }, 646 | "D2GS_ASSIGNPLAYER" : { 647 | "PacketId" : "0x59", 648 | "Description" : "", 649 | "Size" : 26, 650 | "Structure" : [ 651 | { "BYTE" : "PacketId" }, 652 | { "int" : "nUnitGUID" }, 653 | { "BYTE" : "nUnitType" }, 654 | { "char" : "szUnitName[16]" }, 655 | { "short" : "nUnitX" }, 656 | { "short" : "nUnitY" } 657 | ] 658 | }, 659 | "D2GS_EVENTMESSAGES" : { 660 | "PacketId" : "0x5A", 661 | "Description" : "", 662 | "Size" : 40, 663 | "Structure" : [ 664 | { "BYTE" : "PacketId" }, 665 | { "BYTE" : "nMessageType" }, 666 | { "BYTE" : "nColor" }, 667 | { "int" : "nArg" }, 668 | { "BYTE" : "nArgTypes" }, 669 | { "char" : "szName1[16]" }, 670 | { "char" : "szName2[16]" } 671 | ] 672 | }, 673 | "D2GS_PLAYER_JOIN" : { 674 | "PacketId" : "0x5B", 675 | "Description" : "", 676 | "Size" : -1, 677 | "Structure" : [ 678 | { "BYTE" : "PacketId" }, 679 | { "short" : "nPacketLength" }, 680 | { "int" : "nPlayerGUID" }, 681 | { "BYTE" : "nCharType" }, 682 | { "char" : "szPlayerName[16]" }, 683 | { "short" : "nPlayerLevel" }, 684 | { "short" : "nPartyId" }, 685 | { "short" : "nUnused" }, 686 | { "short" : "nUnk1" }, 687 | { "short" : "nUnk2" }, 688 | { "std::string" : "szUnk1" }, 689 | { "std::string" : "szUnk2" } 690 | ] 691 | }, 692 | "D2GS_PLAYER_LEAVE" : { 693 | "PacketId" : "0x5C", 694 | "Description" : "", 695 | "Size" : 5, 696 | "Structure" : [ 697 | { "BYTE" : "PacketId" }, 698 | { "int" : "nPlayerGUID" } 699 | ] 700 | }, 701 | "D2GS_QUESTSTATE" : { 702 | "PacketId" : "0x5D", 703 | "Description" : "", 704 | "Size" : 6, 705 | "Structure" : [ 706 | { "BYTE" : "PacketId" }, 707 | { "BYTE" : "nQuestID" }, 708 | { "BYTE" : "nAlertFlags" }, 709 | { "BYTE" : "nFilterStatus" }, 710 | { "short" : "nExtra" } 711 | ] 712 | }, 713 | "D2GS_GAME_QUESTS_AVAILABILITY" : { 714 | "PacketId" : "0x5E", 715 | "Description" : "", 716 | "Size" : 38, 717 | "Structure" : [ 718 | { "BYTE" : "PacketId" }, 719 | { "BYTE" : "aQuestBitStream[37]" } 720 | ] 721 | }, 722 | "D2GS_PORTAL_FLAGS" : { 723 | "PacketId" : "0x5F", 724 | "Description" : "", 725 | "Size" : 5, 726 | "Structure" : [ 727 | { "BYTE" : "PacketId" }, 728 | { "int" : "nPortalFlags" } 729 | ] 730 | }, 731 | "D2GS_TOWNPORTALSTATE" : { 732 | "PacketId" : "0x60", 733 | "Description" : "", 734 | "Size" : 7, 735 | "Structure" : [ 736 | { "BYTE" : "PacketId" }, 737 | { "BYTE" : "nState" }, 738 | { "BYTE" : "nAreaID" }, 739 | { "int" : "nUnitGUID" } 740 | ] 741 | }, 742 | "D2GS_CANGOTOACT" : { 743 | "PacketId" : "0x61", 744 | "Description" : "", 745 | "Size" : 2, 746 | "Structure" : [ 747 | { "BYTE" : "PacketId" }, 748 | { "BYTE" : "nAct" } 749 | ] 750 | }, 751 | "D2GS_MAKEUNITTARGETABLE" : { 752 | "PacketId" : "0x62", 753 | "Description" : "", 754 | "Size" : 7, 755 | "Structure" : [ 756 | { "BYTE" : "PacketId" }, 757 | { "BYTE" : "nUnitType" }, 758 | { "int" : "nUnitGUID" }, 759 | { "BYTE" : "Unused" } 760 | ] 761 | }, 762 | "D2GS_WAYPOINTMENU" : { 763 | "PacketId" : "0x63", 764 | "Description" : "", 765 | "Size" : 17, 766 | "Structure" : [ 767 | { "BYTE" : "PacketId" }, 768 | { "short" : "Unknown102" }, 769 | { "BYTE" : "aWaypointBitStream[8]" }, 770 | { "int" : "Padding" } 771 | ] 772 | }, 773 | "D2GS_WAYPOINTCURRENT" : { 774 | "PacketId" : "0x64", 775 | "Description" : "", 776 | "Size" : 4, 777 | "Structure" : [ 778 | { "BYTE" : "PacketId" }, 779 | { "short" : "Unknown1" }, 780 | { "BYTE" : "Unknown2" } 781 | ] 782 | }, 783 | "D2GS_PLAYERKILLCOUNT" : { 784 | "PacketId" : "0x65", 785 | "Description" : "", 786 | "Size" : 7, 787 | "Structure" : [ 788 | { "BYTE" : "PacketId" }, 789 | { "int" : "nPlayerGUID" }, 790 | { "short" : "nCount" } 791 | ] 792 | }, 793 | "D2GS_NPC_MOVE" : { 794 | "PacketId" : "0x67", 795 | "Description" : "", 796 | "Size" : 16, 797 | "Structure" : [ 798 | { "BYTE" : "PacketId" }, 799 | { "int" : "nUnitGUID" }, 800 | { "BYTE" : "nMoveType" }, 801 | { "short" : "nTargetX" }, 802 | { "short" : "nTargetY" }, 803 | { "BYTE" : "Unknown" }, 804 | { "BYTE" : "Unknown1" }, 805 | { "BYTE" : "Unknown2" }, 806 | { "short" : "nVelocity" }, 807 | { "BYTE" : "Unknown4" } 808 | ] 809 | }, 810 | "D2GS_NPC_MOVETOENTITY" : { 811 | "PacketId" : "0x68", 812 | "Description" : "", 813 | "Size" : 21, 814 | "Structure" : [ 815 | { "BYTE" : "PacketId" }, 816 | { "int" : "nUnitGUID" }, 817 | { "BYTE" : "nMoveType" }, 818 | { "short" : "nTargetX" }, 819 | { "short" : "nTargetY" }, 820 | { "BYTE" : "nTargetType" }, 821 | { "int" : "nTargetGUID" }, 822 | { "BYTE" : "Unknown1" }, 823 | { "BYTE" : "Unknown2" }, 824 | { "BYTE" : "Unknown3" }, 825 | { "short" : "NotUsed" }, 826 | { "BYTE" : "Unknown4" } 827 | ] 828 | }, 829 | "D2GS_NPC_STATE" : { 830 | "PacketId" : "0x69", 831 | "Description" : "", 832 | "Size" : 12, 833 | "Structure" : [ 834 | { "BYTE" : "PacketId" }, 835 | { "int" : "nUnitGUID" }, 836 | { "BYTE" : "nState" }, 837 | { "short" : "nUnitX" }, 838 | { "short" : "nUnitY" }, 839 | { "BYTE" : "nUnitLife" }, 840 | { "BYTE" : "nHitClass" } 841 | ] 842 | }, 843 | "D2GS_NPC_UNKNOWN_0x6A" : { 844 | "PacketId" : "0x6A", 845 | "Description" : "", 846 | "Size" : 12, 847 | "Structure" : [ 848 | { "BYTE" : "PacketId" }, 849 | { "int" : "nUnitGUID" }, 850 | { "BYTE" : "nState" }, 851 | { "BYTE" : "Unknown1" }, 852 | { "int" : "Unknown2" }, 853 | { "BYTE" : "Unknown3" } 854 | ] 855 | }, 856 | "D2GS_NPC_ACTION" : { 857 | "PacketId" : "0x6B", 858 | "Description" : "", 859 | "Size" : 16, 860 | "Structure" : [ 861 | { "BYTE" : "PacketId" }, 862 | { "int" : "nUnitGUID" }, 863 | { "BYTE" : "nAction" }, 864 | { "BYTE" : "Padding[6]" }, 865 | { "short" : "nUnitX" }, 866 | { "short" : "nUnitY" } 867 | ] 868 | }, 869 | "D2GS_NPC_ATTACK" : { 870 | "PacketId" : "0x6C", 871 | "Description" : "", 872 | "Size" : 16, 873 | "Structure" : [ 874 | { "BYTE" : "PacketId" }, 875 | { "int" : "nUnitGUID" }, 876 | { "short" : "nAttackType" }, 877 | { "int" : "nTargetGUID" }, 878 | { "BYTE" : "nTargetType" }, 879 | { "short" : "nTargetX" }, 880 | { "short" : "nTargetY" } 881 | ] 882 | }, 883 | "D2GS_NPC_STOP" : { 884 | "PacketId" : "0x6D", 885 | "Description" : "", 886 | "Size" : 10, 887 | "Structure" : [ 888 | { "BYTE" : "PacketId" }, 889 | { "int" : "nUnitGUID" }, 890 | { "short" : "nUnitX" }, 891 | { "short" : "nUnitY" }, 892 | { "BYTE" : "nUnitLife" } 893 | ] 894 | }, 895 | "D2GS_MISSILEDATA" : { 896 | "PacketId" : "0x73", 897 | "Description" : "nCurrentFrame might be wrong", 898 | "Size" : 32, 899 | "Structure" : [ 900 | { "BYTE" : "PacketId" }, 901 | { "int" : "Unused" }, 902 | { "short" : "nMissileClassId" }, 903 | { "int" : "nMissileX" }, 904 | { "int" : "nMissileY" }, 905 | { "int" : "nTargetX" }, 906 | { "int" : "nTargetY" }, 907 | { "short" : "nCurrentFrame" }, 908 | { "BYTE" : "nOwnerType" }, 909 | { "int" : "nOwnerGUID" }, 910 | { "BYTE" : "nSkillLevel" }, 911 | { "BYTE" : "nPierceIdxValue" } 912 | ] 913 | }, 914 | "D2GS_PLAYERCORPSEASSIGN" : { 915 | "PacketId" : "0x74", 916 | "Description" : "", 917 | "Size" : 10, 918 | "Structure" : [ 919 | { "BYTE" : "PacketId" }, 920 | { "BYTE" : "bAssign" }, 921 | { "int" : "nOwnerGUID" }, 922 | { "int" : "nCorpseGUID" } 923 | ] 924 | }, 925 | "D2GS_PLAYERPARTYINFO" : { 926 | "PacketId" : "0x75", 927 | "Description" : "", 928 | "Size" : 13, 929 | "Structure" : [ 930 | { "BYTE" : "PacketId" }, 931 | { "int" : "nUnitGUID" }, 932 | { "short" : "nPartyId" }, 933 | { "short" : "nCharLevel" }, 934 | { "short" : "nRelationship" }, 935 | { "short" : "nInParty" } 936 | ] 937 | }, 938 | "D2GS_PLAYERINPROXIMITY" : { 939 | "PacketId" : "0x76", 940 | "Description" : "", 941 | "Size" : 6, 942 | "Structure" : [ 943 | { "BYTE" : "PacketId" }, 944 | { "BYTE" : "nUnitType" }, 945 | { "int" : "nUnitGUID" } 946 | ] 947 | }, 948 | "D2GS_TRADEACTION" : { 949 | "PacketId" : "0x77", 950 | "Description" : "", 951 | "Size" : 2, 952 | "Structure" : [ 953 | { "BYTE" : "PacketId" }, 954 | { "BYTE" : "nRequestType" } 955 | ] 956 | }, 957 | "D2GS_TRADEACCEPTED" : { 958 | "PacketId" : "0x78", 959 | "Description" : "", 960 | "Size" : 21, 961 | "Structure" : [ 962 | { "BYTE" : "PacketId" }, 963 | { "char" : "szCharName[16]" }, 964 | { "int" : "nUnitGUID" } 965 | ] 966 | }, 967 | "D2GS_GOLDINTRADE" : { 968 | "PacketId" : "0x79", 969 | "Description" : "", 970 | "Size" : 6, 971 | "Structure" : [ 972 | { "BYTE" : "PacketId" }, 973 | { "BYTE" : "nOwnerGUID" }, 974 | { "int" : "nAmount" } 975 | ] 976 | }, 977 | "D2GS_SUMMONLOG" : { 978 | "PacketId" : "0x7A", 979 | "Description" : "", 980 | "Size" : 13, 981 | "Structure" : [ 982 | { "BYTE" : "PacketId" }, 983 | { "BYTE" : "nAction" }, 984 | { "BYTE" : "nSkillID" }, 985 | { "short" : "nSummonType" }, 986 | { "int" : "nPlayerGUID" }, 987 | { "int" : "nSummonGUID" } 988 | ] 989 | }, 990 | "D2GS_ASSIGNHOTKEY" : { 991 | "PacketId" : "0x7B", 992 | "Description" : "", 993 | "Size" : 8, 994 | "Structure" : [ 995 | { "BYTE" : "PacketId" }, 996 | { "BYTE" : "nSlot" }, 997 | { "BYTE" : "nSkillID" }, 998 | { "BYTE" : "nHand" }, 999 | { "int" : "nItemGUID" } 1000 | ] 1001 | }, 1002 | "D2GS_USESCROLL" : { 1003 | "PacketId" : "0x7C", 1004 | "Description" : "", 1005 | "Size" : 6, 1006 | "Structure" : [ 1007 | { "BYTE" : "PacketId" }, 1008 | { "BYTE" : "nScroolType" }, 1009 | { "int" : "nScroolGUID" } 1010 | ] 1011 | }, 1012 | "D2GS_SETITEMFLAGS" : { 1013 | "PacketId" : "0x7D", 1014 | "Description" : "", 1015 | "Size" : 18, 1016 | "Structure" : [ 1017 | { "BYTE" : "PacketId" }, 1018 | { "BYTE" : "nUnitType" }, 1019 | { "int" : "nUnitGUID" }, 1020 | { "int" : "nItemGUID" }, 1021 | { "int" : "AndValue" }, 1022 | { "int" : "nFlagsAfterAnd" } 1023 | ] 1024 | }, 1025 | "D2GS_CMNCOF" : { 1026 | "PacketId" : "0x7E", 1027 | "Description" : "", 1028 | "Size" : 5, 1029 | "Structure" : [ 1030 | { "BYTE" : "PacketId" }, 1031 | { "BYTE" : "Unused[4]" } 1032 | ] 1033 | }, 1034 | "D2GS_ALLYPARTYINFO" : { 1035 | "PacketId" : "0x7F", 1036 | "Description" : "", 1037 | "Size" : 10, 1038 | "Structure" : [ 1039 | { "BYTE" : "PacketId" }, 1040 | { "BYTE" : "nUnitType" }, 1041 | { "short" : "nUnitLife" }, 1042 | { "int" : "nUnitGUID" }, 1043 | { "short" : "nAreaID" } 1044 | ] 1045 | }, 1046 | "D2GS_ASSIGNMERC" : { 1047 | "PacketId" : "0x81", 1048 | "Description" : "", 1049 | "Size" : 20, 1050 | "Structure" : [ 1051 | { "BYTE" : "PacketId" }, 1052 | { "BYTE" : "nSkillId" }, 1053 | { "short" : "nSummonType" }, 1054 | { "int" : "nOwnerGUID" }, 1055 | { "int" : "nMercGUID" }, 1056 | { "int" : "nSeed2" }, 1057 | { "int" : "nInitSeed" } 1058 | ] 1059 | }, 1060 | "D2GS_PORTALOWNERSHIP" : { 1061 | "PacketId" : "0x82", 1062 | "Description" : "Seems like nPortalGUID1 and nPortalGUID2 contains portals GUID for both ends of each portal.", 1063 | "Size" : 29, 1064 | "Structure" : [ 1065 | { "BYTE" : "PacketId" }, 1066 | { "int" : "nOwnerGUID" }, 1067 | { "char" : "szOwnerName[16]" }, 1068 | { "int" : "nPortalGUID1" }, 1069 | { "int" : "nPortalGUID2" } 1070 | ] 1071 | }, 1072 | "D2GS_UNIQUEEVENTS" : { 1073 | "PacketId" : "0x89", 1074 | "Description" : "", 1075 | "Size" : 2, 1076 | "Structure" : [ 1077 | { "BYTE" : "PacketId" }, 1078 | { "BYTE" : "nEventType" } 1079 | ] 1080 | }, 1081 | "D2GS_NPC_WANTSINTERACT" : { 1082 | "PacketId" : "0x8A", 1083 | "Description" : "", 1084 | "Size" : 6, 1085 | "Structure" : [ 1086 | { "BYTE" : "PacketId" }, 1087 | { "BYTE" : "nUnitType" }, 1088 | { "int" : "nUnitGUID" } 1089 | ] 1090 | }, 1091 | "D2GS_PLAYERRELATIONSHIP" : { 1092 | "PacketId" : "0x8B", 1093 | "Description" : "", 1094 | "Size" : 6, 1095 | "Structure" : [ 1096 | { "BYTE" : "PacketId" }, 1097 | { "int" : "nUnitGUID" }, 1098 | { "BYTE" : "nInParty" } 1099 | ] 1100 | }, 1101 | "D2GS_RELATIONSHIPUPDATE" : { 1102 | "PacketId" : "0x8C", 1103 | "Description" : "", 1104 | "Size" : 11, 1105 | "Structure" : [ 1106 | { "BYTE" : "PacketId" }, 1107 | { "int" : "nUnitAGUID" }, 1108 | { "int" : "nUnitBGUID" }, 1109 | { "short" : "nRelation" } 1110 | ] 1111 | }, 1112 | "D2GS_ASSIGNPLAYERTOPARTY" : { 1113 | "PacketId" : "0x8D", 1114 | "Description" : "", 1115 | "Size" : 7, 1116 | "Structure" : [ 1117 | { "BYTE" : "PacketId" }, 1118 | { "int" : "nPlayerGUID" }, 1119 | { "short" : "nPartyId" } 1120 | ] 1121 | }, 1122 | "D2GS_CORPSEASSIGN" : { 1123 | "PacketId" : "0x8E", 1124 | "Description" : "", 1125 | "Size" : 10, 1126 | "Structure" : [ 1127 | { "BYTE" : "PacketId" }, 1128 | { "BYTE" : "bAssign" }, 1129 | { "int" : "nOwnerGUID" }, 1130 | { "int" : "nCorpseGUID" } 1131 | ] 1132 | }, 1133 | "D2GS_PONG" : { 1134 | "PacketId" : "0x8F", 1135 | "Description" : "", 1136 | "Size" : 33, 1137 | "Structure" : [ 1138 | { "BYTE" : "PacketId" }, 1139 | { "int" : "nPong1" }, 1140 | { "int" : "nPong2" }, 1141 | { "int" : "nPong3" }, 1142 | { "int" : "nTickCount" }, 1143 | { "int" : "nPong5" }, 1144 | { "int" : "nPong6WardenRequest" }, 1145 | { "int" : "nPong7Warden" }, 1146 | { "int" : "nPong8Warden" } 1147 | ] 1148 | }, 1149 | "D2GS_PARTYAUTOMAPINFO" : { 1150 | "PacketId" : "0x90", 1151 | "Description" : "", 1152 | "Size" : 13, 1153 | "Structure" : [ 1154 | { "BYTE" : "PacketId" }, 1155 | { "int" : "nPlayerGUID" }, 1156 | { "int" : "nPlayerX" }, 1157 | { "int" : "nPlayerY" } 1158 | ] 1159 | }, 1160 | "D2GS_NPCGOSSIP" : { 1161 | "PacketId" : "0x91", 1162 | "Description" : "Add intro (! above head) to NPC", 1163 | "Size" : 26, 1164 | "Structure" : [ 1165 | { "BYTE" : "PacketId" }, 1166 | { "BYTE" : "nAct" }, 1167 | { "WORD" : "nNpcID[12]" } 1168 | ] 1169 | }, 1170 | "D2GS_REMOVEITEMSDISPLAY" : { 1171 | "PacketId" : "0x92", 1172 | "Description" : "", 1173 | "Size" : 6, 1174 | "Structure" : [ 1175 | { "BYTE" : "PacketId" }, 1176 | { "BYTE" : "nUnitType" }, 1177 | { "int" : "nUnitGUID" } 1178 | ] 1179 | }, 1180 | "D2GS_UNKNOWN_UNITSKILL_0x93" : { 1181 | "PacketId" : "0x93", 1182 | "Description" : "", 1183 | "Size" : 8, 1184 | "Structure" : [ 1185 | { "BYTE" : "PacketId" }, 1186 | { "int" : "nPlayerGUID" }, 1187 | { "BYTE" : "Unknown1" }, 1188 | { "BYTE" : "nType" }, 1189 | { "BYTE" : "nSkillPage" } 1190 | ] 1191 | }, 1192 | "D2GS_SKILLSLIST" : { 1193 | "PacketId" : "0x94", 1194 | "Description" : "", 1195 | "Size" : -1, 1196 | "Structure" : [ 1197 | { "BYTE" : "PacketId" }, 1198 | { "BYTE" : "nSkillsCount" }, 1199 | { "int" : "nPlayerGUID" }, 1200 | { "sSkills[nSkillsCount]" : [ 1201 | { "short" : "nSkillId" }, 1202 | { "BYTE" : "nLevel" } 1203 | ] 1204 | } 1205 | ] 1206 | }, 1207 | "D2GS_HPMPUPDATE" : { 1208 | "PacketId" : "0x95", 1209 | "Description" : "BitStream data contains:\n HP (15bits) \n MP (15bits) \n Stamina (15bits) \n X (16bits) \n Y (16bits) \n dX (8bits) \n dY (8bits)", 1210 | "Size" : 13, 1211 | "Structure" : [ 1212 | { "BYTE" : "PacketId" }, 1213 | { "BYTE" : "aBitStream[12]" } 1214 | ] 1215 | }, 1216 | "D2GS_WALKVERIFY" : { 1217 | "PacketId" : "0x96", 1218 | "Description" : "BitStream data contains:\n Stamina (15bits) \n X (16bits) \n Y (16bits) \n dX (8bits) \n dY (8bits)", 1219 | "Size" : 9, 1220 | "Structure" : [ 1221 | { "BYTE" : "PacketId" }, 1222 | { "BYTE" : "aBitStream[8]" } 1223 | ] 1224 | }, 1225 | "D2GS_WEAPONSWITCH" : { 1226 | "PacketId" : "0x97", 1227 | "Description" : "", 1228 | "Size" : 1, 1229 | "Structure" : [ 1230 | { "BYTE" : "PacketId" } 1231 | ] 1232 | }, 1233 | "D2GS_EVILHUT" : { 1234 | "PacketId" : "0x98", 1235 | "Description" : "", 1236 | "Size" : 7, 1237 | "Structure" : [ 1238 | { "BYTE" : "PacketId" }, 1239 | { "int" : "nUnitGUID" }, 1240 | { "short" : "nValue" } 1241 | ] 1242 | }, 1243 | "D2GS_UNITSKILLCAST_TARGET" : { 1244 | "PacketId" : "0x99", 1245 | "Description" : "", 1246 | "Size" : 16, 1247 | "Structure" : [ 1248 | { "BYTE" : "PacketId" }, 1249 | { "BYTE" : "nAttackerType" }, 1250 | { "int" : "nAttackerGUID" }, 1251 | { "short" : "nSkillID" }, 1252 | { "BYTE" : "nSkillLevel" }, 1253 | { "BYTE" : "nTargetType" }, 1254 | { "int" : "nTargetGUID" }, 1255 | { "short" : "Zero" } 1256 | ] 1257 | }, 1258 | "D2GS_UNITSKILLCAST_XY" : { 1259 | "PacketId" : "0x9A", 1260 | "Description" : "", 1261 | "Size" : 17, 1262 | "Structure" : [ 1263 | { "BYTE" : "PacketId" }, 1264 | { "BYTE" : "nAttackerType" }, 1265 | { "int" : "nAttackerGUID" }, 1266 | { "short" : "nSkillId" }, 1267 | { "short" : "Padding" }, 1268 | { "BYTE" : "nSkillLevel" }, 1269 | { "short" : "nTargetX" }, 1270 | { "short" : "nTargetY" }, 1271 | { "short" : "Zero" } 1272 | ] 1273 | }, 1274 | "D2GS_MERCREVIVECOST" : { 1275 | "PacketId" : "0x9B", 1276 | "Description" : "", 1277 | "Size" : 7, 1278 | "Structure": [ 1279 | { "BYTE": "PacketId" }, 1280 | { "short": "nMercNameId" }, 1281 | { "short": "nReviveCost" }, 1282 | { "short": "wPad" } 1283 | ] 1284 | }, 1285 | "D2GS_ITEM_WORLD" : { 1286 | "PacketId" : "0x9C", 1287 | "Description" : "", 1288 | "Size" : -1, 1289 | "Structure" : [ 1290 | { "BYTE" : "PacketId" }, 1291 | { "BYTE" : "nAction" }, 1292 | { "BYTE" : "nFullPacketSize" }, 1293 | { "BYTE" : "nCategory" }, 1294 | { "int" : "nItemGUID" }, 1295 | { "BYTE" : "BitStream[nFullPacketSize - 8]" } 1296 | ] 1297 | }, 1298 | "D2GS_ITEM_OWNED" : { 1299 | "PacketId" : "0x9D", 1300 | "Description" : "", 1301 | "Size" : -1, 1302 | "Structure" : [ 1303 | { "BYTE" : "PacketId" }, 1304 | { "BYTE" : "nAction" }, 1305 | { "BYTE" : "nFullPacketSize" }, 1306 | { "BYTE" : "nCategory" }, 1307 | { "int" : "nItemGUID" }, 1308 | { "BYTE" : "nOwnerType" }, 1309 | { "int" : "nOwnerGUID" }, 1310 | { "BYTE" : "BitStream[nFullPacketSize - 13]" } 1311 | ] 1312 | }, 1313 | "D2GS_MERCATTRIBUTE_BYTE" : { 1314 | "PacketId" : "0x9E", 1315 | "Description" : "", 1316 | "Size" : 7, 1317 | "Structure" : [ 1318 | { "BYTE" : "PacketId" }, 1319 | { "BYTE" : "nStatID" }, 1320 | { "int" : "nMercGUID" }, 1321 | { "BYTE" : "nValue" } 1322 | ] 1323 | }, 1324 | "D2GS_MERCATTRIBUTE_WORD" : { 1325 | "PacketId" : "0x9F", 1326 | "Description" : "", 1327 | "Size" : 8, 1328 | "Structure" : [ 1329 | { "BYTE" : "PacketId" }, 1330 | { "BYTE" : "nStatID" }, 1331 | { "int" : "nMercGUID" }, 1332 | { "short" : "nValue" } 1333 | ] 1334 | }, 1335 | "D2GS_MERCATTRIBUTE_DWORD" : { 1336 | "PacketId" : "0xA0", 1337 | "Description" : "", 1338 | "Size" : 10, 1339 | "Structure" : [ 1340 | { "BYTE" : "PacketId" }, 1341 | { "BYTE" : "nStatID" }, 1342 | { "int" : "nMercGUID" }, 1343 | { "int" : "nValue" } 1344 | ] 1345 | }, 1346 | "D2GS_MERC_ADDEXP_BYTE" : { 1347 | "PacketId" : "0xA1", 1348 | "Description" : "", 1349 | "Size" : 7, 1350 | "Structure" : [ 1351 | { "BYTE" : "PacketId" }, 1352 | { "BYTE" : "nStatID" }, 1353 | { "int" : "nMercGUID" }, 1354 | { "BYTE" : "nValue" } 1355 | ] 1356 | }, 1357 | "D2GS_MERC_ADDEXP_WORD" : { 1358 | "PacketId" : "0xA2", 1359 | "Description" : "", 1360 | "Size" : 8, 1361 | "Structure" : [ 1362 | { "BYTE" : "PacketId" }, 1363 | { "BYTE" : "nStatID" }, 1364 | { "int" : "nMercGUID" }, 1365 | { "short" : "nValue" } 1366 | ] 1367 | }, 1368 | "D2GS_SKILL_AURA_STAT" : { 1369 | "PacketId" : "0xA3", 1370 | "Description" : "", 1371 | "Size" : 24, 1372 | "Structure" : [ 1373 | { "BYTE" : "PacketId" }, 1374 | { "BYTE" : "nAuraStatId" }, 1375 | { "short" : "nSkillID" }, 1376 | { "short" : "nSkillLevel" }, 1377 | { "BYTE" : "nUnitType" }, 1378 | { "int" : "nUnitGUID" }, 1379 | { "BYTE" : "nTargetType" }, 1380 | { "int" : "nTargetGUID" }, 1381 | { "int" : "nTargetX" }, 1382 | { "int" : "nTargetY" } 1383 | ] 1384 | }, 1385 | "D2GS_BAALWAVES" : { 1386 | "PacketId" : "0xA4", 1387 | "Description" : "", 1388 | "Size" : 3, 1389 | "Structure" : [ 1390 | { "BYTE" : "PacketId" }, 1391 | { "short" : "nClassID" } 1392 | ] 1393 | }, 1394 | "D2GS_STATE_SKILL_MOVE" : { 1395 | "PacketId" : "0xA5", 1396 | "Description" : "", 1397 | "Size" : 8, 1398 | "Structure" : [ 1399 | { "BYTE" : "PacketId" }, 1400 | { "BYTE" : "nUnitType" }, 1401 | { "int" : "nUnitGUID" }, 1402 | { "short" : "nSkillID" } 1403 | ] 1404 | }, 1405 | "D2GS_RUNES_TXT" : { 1406 | "PacketId" : "0xA6", 1407 | "Description" : "This packet has it's handler in game code but it seems like it is never used.", 1408 | "Size" : -1, 1409 | "Structure" : [ 1410 | { "BYTE" : "PacketId" }, 1411 | { "BYTE" : "nMustBeZero" }, 1412 | { "short" : "nFullPacketSize" }, 1413 | { "short" : "nTxtRunesSize" }, 1414 | { "BYTE" : "BitStream[nFullPacketSize - 6]" } 1415 | ] 1416 | }, 1417 | "D2GS_DELAYSTATE" : { 1418 | "PacketId" : "0xA7", 1419 | "Description" : "", 1420 | "Size" : 7, 1421 | "Structure" : [ 1422 | { "BYTE" : "PacketId" }, 1423 | { "BYTE" : "nUnitType" }, 1424 | { "int" : "nUnitGUID" }, 1425 | { "BYTE" : "nStateID" } 1426 | ] 1427 | }, 1428 | "D2GS_SETSTATE" : { 1429 | "PacketId" : "0xA8", 1430 | "Description" : "", 1431 | "Size" : -1, 1432 | "Structure" : [ 1433 | { "BYTE" : "PacketId" }, 1434 | { "BYTE" : "nUnitType" }, 1435 | { "int" : "nUnitGUID" }, 1436 | { "BYTE" : "nFullPacketSize" }, 1437 | { "BYTE" : "State" }, 1438 | { "BYTE" : "BitStream[nFullPacketSize - 8]" } 1439 | ] 1440 | }, 1441 | "D2GS_ENDSTATE" : { 1442 | "PacketId" : "0xA9", 1443 | "Description" : "", 1444 | "Size" : 7, 1445 | "Structure" : [ 1446 | { "BYTE" : "PacketId" }, 1447 | { "BYTE" : "nUnitType" }, 1448 | { "int" : "nUnitGUID" }, 1449 | { "BYTE" : "nStateID" } 1450 | ] 1451 | }, 1452 | "D2GS_MULTISTATES" : { 1453 | "PacketId" : "0xAA", 1454 | "Description" : "", 1455 | "Size" : -1, 1456 | "Structure" : [ 1457 | { "BYTE" : "PacketId" }, 1458 | { "BYTE" : "nUnitType" }, 1459 | { "int" : "nUnitGUID" }, 1460 | { "BYTE" : "nFullPacketSize" }, 1461 | { "BYTE" : "BitStream[nFullPacketSize - 7]" } 1462 | ] 1463 | }, 1464 | "D2GS_NPC_HEAL" : { 1465 | "PacketId" : "0xAB", 1466 | "Description" : "", 1467 | "Size" : 7, 1468 | "Structure" : [ 1469 | { "BYTE" : "PacketId" }, 1470 | { "BYTE" : "nUnitType" }, 1471 | { "int" : "nUnitGUID" }, 1472 | { "BYTE" : "nUnitLife" } 1473 | ] 1474 | }, 1475 | "D2GS_MONSTERPACKET" : { 1476 | "PacketId" : "0xAC", 1477 | "Description" : "", 1478 | "Size" : -1, 1479 | "Structure" : [ 1480 | { "BYTE" : "PacketId" }, 1481 | { "int" : "nUnitGUID" }, 1482 | { "short" : "nUnitClassID" }, 1483 | { "short" : "nUnitX" }, 1484 | { "short" : "nUnitY" }, 1485 | { "BYTE" : "nHPPercent" }, 1486 | { "BYTE" : "nFullPacketSize" }, 1487 | { "BYTE" : "BitStream[nFullPacketSize - 13]" } 1488 | ] 1489 | }, 1490 | "D2GS_MONSTERPACKET2" : { 1491 | "PacketId" : "0xAD", 1492 | "Description" : "", 1493 | "Size" : -1, 1494 | "Structure" : [ 1495 | { "BYTE" : "PacketId" }, 1496 | { "short" : "nUnitClassID" }, 1497 | { "short" : "Unknown1" }, 1498 | { "BYTE" : "Unknown2" }, 1499 | { "int" : "nUnitGUID" }, 1500 | { "short" : "nAnimation" }, 1501 | { "BYTE" : "nHPPercent" } 1502 | ] 1503 | }, 1504 | "D2GS_WARDEN" : { 1505 | "PacketId" : "0xAE", 1506 | "Description" : "", 1507 | "Size" : -1, 1508 | "Structure" : [ 1509 | { "BYTE" : "PacketId" }, 1510 | { "short" : "nStreamSize" }, 1511 | { "BYTE" : "Stream[nStreamSize]" } 1512 | ] 1513 | }, 1514 | "D2GS_STARTLOGON" : { 1515 | "PacketId" : "0xAF", 1516 | "Description" : "", 1517 | "Size" : -1, 1518 | "Structure" : [ 1519 | { "BYTE" : "PacketId" }, 1520 | { "BYTE" : "bUseCompression" } 1521 | ] 1522 | }, 1523 | "D2GS_CONNECTIONTERMINATED" : { 1524 | "PacketId" : "0xB0", 1525 | "Description" : "", 1526 | "Size" : 1, 1527 | "Structure" : [ 1528 | { "BYTE" : "PacketId" } 1529 | ] 1530 | }, 1531 | "D2GS_GAMESINFO" : { 1532 | "PacketId" : "0xB2", 1533 | "Description" : "", 1534 | "Size" : 53, 1535 | "Structure" : [ 1536 | { "BYTE" : "PacketId" }, 1537 | { "char" : "szUnk1[16]" }, 1538 | { "char" : "szUnk2[16]" }, 1539 | { "char" : "szUnk3[16]" }, 1540 | { "short" : "nClientsCount" }, 1541 | { "short" : "nGameToken" } 1542 | ] 1543 | }, 1544 | "D2GS_DOWNLOADSAVE" : { 1545 | "PacketId" : "0xB3", 1546 | "Description" : "", 1547 | "Size" : -1, 1548 | "Structure" : [ 1549 | { "BYTE" : "PacketId" }, 1550 | { "BYTE" : "nChunkSize" }, 1551 | { "BYTE" : "bFirst" }, 1552 | { "int" : "nFullSize" }, 1553 | { "BYTE" : "Stream[nChunkSize]" } 1554 | ] 1555 | }, 1556 | "D2GS_CONNECTIONREFUSED" : { 1557 | "PacketId" : "0xB4", 1558 | "Description" : "", 1559 | "Size" : 5, 1560 | "Structure" : [ 1561 | { "BYTE" : "PacketId" }, 1562 | { "int" : "nReason" } 1563 | ] 1564 | } 1565 | } 1566 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | 4 | Vue.config.productionTip = false 5 | 6 | new Vue({ 7 | render: h => h(App), 8 | }).$mount('#app') 9 | -------------------------------------------------------------------------------- /src/styles/accessible-colors.scss: -------------------------------------------------------------------------------- 1 | // accessible-colors.scss - colors generated with accessibility-friendly color contrast 2 | 3 | // contrast ratio must be 4.5+ for AA accessibility 4 | // white and black have a contrast ratio of 21 together 5 | 6 | // light and dark colors have contrast ratio of 4.5+ 7 | // extra light and dark colors have even higher contrast ratios 8 | // so hue and saturation is interchangable 9 | 10 | // hue: 0, saturation: 0% 11 | $color_0_0: #757575; // Contrast on white & black: 4.61 & 4.56 12 | $color_light_0_0: #c9c9c9; 13 | $color_dark_0_0: #545454; // Contrast against each other: 4.57 14 | $color_extra_light_0_0: #eeeeee; // Contrast against dark color: 6.53 15 | 16 | // hue: 0, saturation: 100% 17 | $color_0_100: #ec0000; // Contrast on white & black: 4.6 & 4.57 18 | $color_light_0_100: #ffb6b6; 19 | $color_dark_0_100: #ac0000; // Contrast against each other: 4.58 20 | $color_extra_light_0_100: #ffe9e9; // Contrast against dark color: 6.57 21 | // hue: 0, saturation: 80% 22 | $color_0_80: #e61d1d; // Contrast on white & black: 4.61 & 4.56 23 | $color_light_0_80: #f8b9b9; 24 | $color_dark_0_80: #a81212; // Contrast against each other: 4.58 25 | $color_extra_light_0_80: #fdeaea; // Contrast against dark color: 6.57 26 | // hue: 0, saturation: 60% 27 | $color_0_60: #d04343; // Contrast on white & black: 4.6 & 4.57 28 | $color_light_0_60: #efbdbd; 29 | $color_dark_0_60: #9d2727; // Contrast against each other: 4.61 30 | $color_extra_light_0_60: #faeaea; // Contrast against dark color: 6.55 31 | // hue: 0, saturation: 40% 32 | $color_0_40: #b75858; // Contrast on white & black: 4.62 & 4.55 33 | $color_light_0_40: #e5c1c1; 34 | $color_dark_0_40: #8a3b3b; // Contrast against each other: 4.6 35 | $color_extra_light_0_40: #f7ebeb; // Contrast against dark color: 6.51 36 | // hue: 0, saturation: 20% 37 | $color_0_20: #9a6868; // Contrast on white & black: 4.61 & 4.55 38 | $color_light_0_20: #d8c4c4; 39 | $color_dark_0_20: #6f4a4a; // Contrast against each other: 4.58 40 | $color_extra_light_0_20: #f3eded; // Contrast against dark color: 6.59 41 | 42 | // hue: 15, saturation: 100% 43 | $color_15_100: #db3700; // Contrast on white & black: 4.61 & 4.56 44 | $color_light_15_100: #ffb8a1; 45 | $color_dark_15_100: #9f2700; // Contrast against each other: 4.57 46 | $color_extra_light_15_100: #ffe9e2; // Contrast against dark color: 6.51 47 | // hue: 15, saturation: 80% 48 | $color_15_80: #d04517; // Contrast on white & black: 4.62 & 4.55 49 | $color_light_15_80: #f6bca9; 50 | $color_dark_15_80: #963210; // Contrast against each other: 4.6 51 | $color_extra_light_15_80: #fceae4; // Contrast against dark color: 6.53 52 | // hue: 15, saturation: 60% 53 | $color_15_60: #c05430; // Contrast on white & black: 4.61 & 4.55 54 | $color_light_15_60: #ecbfb0; 55 | $color_dark_15_60: #8a3c22; // Contrast against each other: 4.6 56 | $color_extra_light_15_60: #f9ebe6; // Contrast against dark color: 6.56 57 | // hue: 15, saturation: 40% 58 | $color_15_40: #ab6249; // Contrast on white & black: 4.59 & 4.57 59 | $color_light_15_40: #e1c3b8; 60 | $color_dark_15_40: #7a4634; // Contrast against each other: 4.61 61 | $color_extra_light_15_40: #f6ece9; // Contrast against dark color: 6.57 62 | // hue: 15, saturation: 20% 63 | $color_15_20: #916d61; // Contrast on white & black: 4.6 & 4.56 64 | $color_light_15_20: #d6c6c1; 65 | $color_dark_15_20: #684e45; // Contrast against each other: 4.6 66 | $color_extra_light_15_20: #f2edeb; // Contrast against dark color: 6.54 67 | 68 | // hue: 30, saturation: 100% 69 | $color_30_100: #b85c00; // Contrast on white & black: 4.6 & 4.57 70 | $color_light_30_100: #ffbb77; 71 | $color_dark_30_100: #844200; // Contrast against each other: 4.57 72 | $color_extra_light_30_100: #ffebd6; // Contrast against dark color: 6.56 73 | // hue: 30, saturation: 80% 74 | $color_30_80: #af6113; // Contrast on white & black: 4.62 & 4.54 75 | $color_light_30_80: #f3bf8c; 76 | $color_dark_30_80: #7e460e; // Contrast against each other: 4.56 77 | $color_extra_light_30_80: #fbebdb; // Contrast against dark color: 6.5 78 | // hue: 30, saturation: 60% 79 | $color_30_60: #a46729; // Contrast on white & black: 4.61 & 4.55 80 | $color_light_30_60: #e7c39e; 81 | $color_dark_30_60: #764a1d; // Contrast against each other: 4.59 82 | $color_extra_light_30_60: #f8ece1; // Contrast against dark color: 6.53 83 | // hue: 30, saturation: 40% 84 | $color_30_40: #976c41; // Contrast on white & black: 4.63 & 4.54 85 | $color_light_30_40: #dcc5ae; 86 | $color_dark_30_40: #6c4d2e; // Contrast against each other: 4.62 87 | $color_extra_light_30_40: #f4ede5; // Contrast against dark color: 6.61 88 | // hue: 30, saturation: 20% 89 | $color_30_20: #88715a; // Contrast on white & black: 4.61 & 4.56 90 | $color_light_30_20: #d2c7bc; 91 | $color_dark_30_20: #615141; // Contrast against each other: 4.58 92 | $color_extra_light_30_20: #f1edea; // Contrast against dark color: 6.53 93 | 94 | // hue: 45, saturation: 100% 95 | $color_45_100: #946f00; // Contrast on white & black: 4.63 & 4.53 96 | $color_light_45_100: #febf00; 97 | $color_dark_45_100: #6a5000; // Contrast against each other: 4.59 98 | $color_extra_light_45_100: #ffedb6; // Contrast against dark color: 6.54 99 | // hue: 45, saturation: 80% 100 | $color_45_80: #917110; // Contrast on white & black: 4.59 & 4.57 101 | $color_light_45_80: #ecc550; 102 | $color_dark_45_80: #68510b; // Contrast against each other: 4.57 103 | $color_extra_light_45_80: #faeeca; // Contrast against dark color: 6.55 104 | // hue: 45, saturation: 60% 105 | $color_45_60: #8c7223; // Contrast on white & black: 4.62 & 4.55 106 | $color_light_45_60: #dfc77f; 107 | $color_dark_45_60: #645219; // Contrast against each other: 4.57 108 | $color_extra_light_45_60: #f5eed7; // Contrast against dark color: 6.55 109 | // hue: 45, saturation: 40% 110 | $color_45_40: #87733a; // Contrast on white & black: 4.62 & 4.54 111 | $color_light_45_40: #d6c89f; 112 | $color_dark_45_40: #605229; // Contrast against each other: 4.61 113 | $color_extra_light_45_40: #f2eee1; // Contrast against dark color: 6.61 114 | // hue: 45, saturation: 20% 115 | $color_45_20: #7f7455; // Contrast on white & black: 4.63 & 4.53 116 | $color_light_45_20: #cfc9b7; 117 | $color_dark_45_20: #5b533c; // Contrast against each other: 4.62 118 | $color_extra_light_45_20: #f0eee8; // Contrast against dark color: 6.59 119 | 120 | // hue: 60, saturation: 100% 121 | $color_60_100: #797900; // Contrast on white & black: 4.62 & 4.55 122 | $color_light_60_100: #d0d000; 123 | $color_dark_60_100: #575700; // Contrast against each other: 4.59 124 | $color_extra_light_60_100: #f6f600; // Contrast against dark color: 6.54 125 | // hue: 60, saturation: 80% 126 | $color_60_80: #79790d; // Contrast on white & black: 4.61 & 4.55 127 | $color_light_60_80: #d0d018; 128 | $color_dark_60_80: #575709; // Contrast against each other: 4.59 129 | $color_extra_light_60_80: #f3f391; // Contrast against dark color: 6.51 130 | // hue: 60, saturation: 60% 131 | $color_60_60: #79791e; // Contrast on white & black: 4.6 & 4.57 132 | $color_light_60_60: #cfcf3e; 133 | $color_dark_60_60: #565615; // Contrast against each other: 4.62 134 | $color_extra_light_60_60: #f1f1c4; // Contrast against dark color: 6.62 135 | // hue: 60, saturation: 40% 136 | $color_60_40: #787834; // Contrast on white & black: 4.63 & 4.53 137 | $color_light_60_40: #cdcd89; 138 | $color_dark_60_40: #565625; // Contrast against each other: 4.61 139 | $color_extra_light_60_40: #efefda; // Contrast against dark color: 6.55 140 | // hue: 60, saturation: 20% 141 | $color_60_20: #77774f; // Contrast on white & black: 4.63 & 4.54 142 | $color_light_60_20: #cbcbb0; 143 | $color_dark_60_20: #555539; // Contrast against each other: 4.63 144 | $color_extra_light_60_20: #eeeee6; // Contrast against dark color: 6.56 145 | 146 | // hue: 75, saturation: 100% 147 | $color_75_100: #607f00; // Contrast on white & black: 4.63 & 4.53 148 | $color_light_75_100: #a4db00; 149 | $color_dark_75_100: #445b00; // Contrast against each other: 4.64 150 | $color_extra_light_75_100: #cfff3c; // Contrast against dark color: 6.57 151 | // hue: 75, saturation: 80% 152 | $color_75_80: #637f0e; // Contrast on white & black: 4.59 & 4.57 153 | $color_light_75_80: #a9d919; 154 | $color_dark_75_80: #465b0a; // Contrast against each other: 4.57 155 | $color_extra_light_75_80: #e4f6ac; // Contrast against dark color: 6.55 156 | // hue: 75, saturation: 60% 157 | $color_75_60: #667e1f; // Contrast on white & black: 4.6 & 4.57 158 | $color_light_75_60: #b6d557; 159 | $color_dark_75_60: #495a16; // Contrast against each other: 4.59 160 | $color_extra_light_75_60: #e9f2cb; // Contrast against dark color: 6.54 161 | // hue: 75, saturation: 40% 162 | $color_75_40: #6a7c35; // Contrast on white & black: 4.62 & 4.55 163 | $color_light_75_40: #c0d091; 164 | $color_dark_75_40: #4c5926; // Contrast against each other: 4.58 165 | $color_extra_light_75_40: #ebf0dc; // Contrast against dark color: 6.52 166 | // hue: 75, saturation: 20% 167 | $color_75_20: #6f7951; // Contrast on white & black: 4.64 & 4.53 168 | $color_light_75_20: #c6ccb2; 169 | $color_dark_75_20: #50573a; // Contrast against each other: 4.59 170 | $color_extra_light_75_20: #edefe7; // Contrast against dark color: 6.55 171 | 172 | // hue: 90, saturation: 100% 173 | $color_90_100: #428400; // Contrast on white & black: 4.63 & 4.53 174 | $color_light_90_100: #72e300; 175 | $color_dark_90_100: #2f5f00; // Contrast against each other: 4.61 176 | $color_extra_light_90_100: #c4ff89; // Contrast against dark color: 6.53 177 | // hue: 90, saturation: 80% 178 | $color_90_80: #49830f; // Contrast on white & black: 4.63 & 4.54 179 | $color_light_90_80: #7de119; 180 | $color_dark_90_80: #345e0a; // Contrast against each other: 4.6 181 | $color_extra_light_90_80: #d9f8bb; // Contrast against dark color: 6.58 182 | // hue: 90, saturation: 60% 183 | $color_90_60: #518220; // Contrast on white & black: 4.6 & 4.56 184 | $color_light_90_60: #a0d967; 185 | $color_dark_90_60: #3a5d17; // Contrast against each other: 4.57 186 | $color_extra_light_90_60: #e2f4d1; // Contrast against dark color: 6.56 187 | // hue: 90, saturation: 40% 188 | $color_90_40: #5b7f37; // Contrast on white & black: 4.63 & 4.54 189 | $color_light_90_40: #b4d296; 190 | $color_dark_90_40: #415b27; // Contrast against each other: 4.58 191 | $color_extra_light_90_40: #e8f1de; // Contrast against dark color: 6.57 192 | // hue: 90, saturation: 20% 193 | $color_90_20: #677b52; // Contrast on white & black: 4.63 & 4.53 194 | $color_light_90_20: #c1cdb4; 195 | $color_dark_90_20: #49583b; // Contrast against each other: 4.62 196 | $color_extra_light_90_20: #ebefe7; // Contrast against dark color: 6.58 197 | 198 | // hue: 105, saturation: 100% 199 | $color_105_100: #228700; // Contrast on white & black: 4.63 & 4.53 200 | $color_light_105_100: #3ae700; 201 | $color_dark_105_100: #186100; // Contrast against each other: 4.59 202 | $color_extra_light_105_100: #bdffa7; // Contrast against dark color: 6.56 203 | // hue: 105, saturation: 80% 204 | $color_105_80: #2d860f; // Contrast on white & black: 4.64 & 4.53 205 | $color_light_105_80: #4de61b; 206 | $color_dark_105_80: #20600a; // Contrast against each other: 4.62 207 | $color_extra_light_105_80: #d2f9c5; // Contrast against dark color: 6.61 208 | // hue: 105, saturation: 60% 209 | $color_105_60: #3a8521; // Contrast on white & black: 4.61 & 4.56 210 | $color_light_105_60: #8ddc73; 211 | $color_dark_105_60: #295f17; // Contrast against each other: 4.6 212 | $color_extra_light_105_60: #ddf5d5; // Contrast against dark color: 6.6 213 | // hue: 105, saturation: 40% 214 | $color_105_40: #4a8238; // Contrast on white & black: 4.62 & 4.54 215 | $color_light_105_40: #aad59c; 216 | $color_dark_105_40: #355d28; // Contrast against each other: 4.62 217 | $color_extra_light_105_40: #e4f2e0; // Contrast against dark color: 6.58 218 | // hue: 105, saturation: 20% 219 | $color_105_20: #5e7d54; // Contrast on white & black: 4.63 & 4.54 220 | $color_light_105_20: #bcceb6; 221 | $color_dark_105_20: #435a3c; // Contrast against each other: 4.57 222 | $color_extra_light_105_20: #eaf0e8; // Contrast against dark color: 6.55 223 | 224 | // hue: 120, saturation: 100% 225 | $color_120_100: #008800; // Contrast on white & black: 4.64 & 4.52 226 | $color_light_120_100: #00e900; 227 | $color_dark_120_100: #006200; // Contrast against each other: 4.61 228 | $color_extra_light_120_100: #b7ffb7; // Contrast against dark color: 6.55 229 | // hue: 120, saturation: 80% 230 | $color_120_80: #0f880f; // Contrast on white & black: 4.62 & 4.55 231 | $color_light_120_80: #2be82b; 232 | $color_dark_120_80: #0a620a; // Contrast against each other: 4.59 233 | $color_extra_light_120_80: #ccfacc; // Contrast against dark color: 6.55 234 | // hue: 120, saturation: 60% 235 | $color_120_60: #228722; // Contrast on white & black: 4.61 & 4.56 236 | $color_light_120_60: #7cdf7c; 237 | $color_dark_120_60: #186118; // Contrast against each other: 4.6 238 | $color_extra_light_120_60: #d8f6d8; // Contrast against dark color: 6.55 239 | // hue: 120, saturation: 40% 240 | $color_120_40: #398439; // Contrast on white & black: 4.63 & 4.53 241 | $color_light_120_40: #a0d6a0; 242 | $color_dark_120_40: #285f28; // Contrast against each other: 4.58 243 | $color_extra_light_120_40: #e1f3e1; // Contrast against dark color: 6.57 244 | // hue: 120, saturation: 20% 245 | $color_120_20: #557f55; // Contrast on white & black: 4.61 & 4.55 246 | $color_light_120_20: #b7cfb7; 247 | $color_dark_120_20: #3c5b3c; // Contrast against each other: 4.58 248 | $color_extra_light_120_20: #e8f0e8; // Contrast against dark color: 6.56 249 | 250 | // hue: 135, saturation: 100% 251 | $color_135_100: #008822; // Contrast on white & black: 4.62 & 4.54 252 | $color_light_135_100: #00e83a; 253 | $color_dark_135_100: #006218; // Contrast against each other: 4.57 254 | $color_extra_light_135_100: #b2ffc6; // Contrast against dark color: 6.53 255 | // hue: 135, saturation: 80% 256 | $color_135_80: #0f872d; // Contrast on white & black: 4.64 & 4.52 257 | $color_light_135_80: #25e755; 258 | $color_dark_135_80: #0a6120; // Contrast against each other: 4.61 259 | $color_extra_light_135_80: #cafad6; // Contrast against dark color: 6.62 260 | // hue: 135, saturation: 60% 261 | $color_135_60: #22863b; // Contrast on white & black: 4.62 & 4.54 262 | $color_light_135_60: #79de92; 263 | $color_dark_135_60: #18602a; // Contrast against each other: 4.62 264 | $color_extra_light_135_60: #d7f5df; // Contrast against dark color: 6.56 265 | // hue: 135, saturation: 40% 266 | $color_135_40: #38844b; // Contrast on white & black: 4.59 & 4.57 267 | $color_light_135_40: #9ed6ac; 268 | $color_dark_135_40: #285e36; // Contrast against each other: 4.62 269 | $color_extra_light_135_40: #e1f2e5; // Contrast against dark color: 6.57 270 | // hue: 135, saturation: 20% 271 | $color_135_20: #547e5f; // Contrast on white & black: 4.64 & 4.53 272 | $color_light_135_20: #b7cfbd; 273 | $color_dark_135_20: #3c5a44; // Contrast against each other: 4.63 274 | $color_extra_light_135_20: #e8f0ea; // Contrast against dark color: 6.6 275 | 276 | // hue: 150, saturation: 100% 277 | $color_150_100: #008744; // Contrast on white & black: 4.62 & 4.55 278 | $color_light_150_100: #00e774; 279 | $color_dark_150_100: #006130; // Contrast against each other: 4.61 280 | $color_extra_light_150_100: #acffd6; // Contrast against dark color: 6.55 281 | // hue: 150, saturation: 80% 282 | $color_150_80: #0f864b; // Contrast on white & black: 4.63 & 4.53 283 | $color_light_150_80: #1ae680; 284 | $color_dark_150_80: #0a6035; // Contrast against each other: 4.63 285 | $color_extra_light_150_80: #c7f9e0; // Contrast against dark color: 6.6 286 | // hue: 150, saturation: 60% 287 | $color_150_60: #218553; // Contrast on white & black: 4.62 & 4.54 288 | $color_light_150_60: #75dda9; 289 | $color_dark_150_60: #175f3b; // Contrast against each other: 4.63 290 | $color_extra_light_150_60: #d6f5e6; // Contrast against dark color: 6.6 291 | // hue: 150, saturation: 40% 292 | $color_150_40: #38835d; // Contrast on white & black: 4.59 & 4.57 293 | $color_light_150_40: #9dd5b9; 294 | $color_dark_150_40: #285e43; // Contrast against each other: 4.56 295 | $color_extra_light_150_40: #e0f2e9; // Contrast against dark color: 6.51 296 | // hue: 150, saturation: 20% 297 | $color_150_20: #547e69; // Contrast on white & black: 4.6 & 4.57 298 | $color_light_150_20: #b6cfc2; 299 | $color_dark_150_20: #3c5a4b; // Contrast against each other: 4.61 300 | $color_extra_light_150_20: #e8f0ec; // Contrast against dark color: 6.57 301 | 302 | // hue: 165, saturation: 100% 303 | $color_165_100: #008564; // Contrast on white & black: 4.63 & 4.54 304 | $color_light_165_100: #00e4ab; 305 | $color_dark_165_100: #006048; // Contrast against each other: 4.58 306 | $color_extra_light_165_100: #a2ffe8; // Contrast against dark color: 6.51 307 | // hue: 165, saturation: 80% 308 | $color_165_80: #0f8567; // Contrast on white & black: 4.59 & 4.57 309 | $color_light_165_80: #1ae3b1; 310 | $color_dark_165_80: #0a5f4a; // Contrast against each other: 4.61 311 | $color_extra_light_165_80: #c4f9ec; // Contrast against dark color: 6.59 312 | // hue: 165, saturation: 60% 313 | $color_165_60: #21846b; // Contrast on white & black: 4.59 & 4.58 314 | $color_light_165_60: #70dcc1; 315 | $color_dark_165_60: #175e4d; // Contrast against each other: 4.63 316 | $color_extra_light_165_60: #d5f5ed; // Contrast against dark color: 6.6 317 | // hue: 165, saturation: 40% 318 | $color_165_40: #37816f; // Contrast on white & black: 4.63 & 4.53 319 | $color_light_165_40: #9bd4c6; 320 | $color_dark_165_40: #275d4f; // Contrast against each other: 4.57 321 | $color_extra_light_165_40: #e0f2ed; // Contrast against dark color: 6.54 322 | // hue: 165, saturation: 20% 323 | $color_165_20: #537d73; // Contrast on white & black: 4.62 & 4.55 324 | $color_light_165_20: #b6cec8; 325 | $color_dark_165_20: #3b5952; // Contrast against each other: 4.62 326 | $color_extra_light_165_20: #e8f0ee; // Contrast against dark color: 6.62 327 | 328 | // hue: 180, saturation: 100% 329 | $color_180_100: #008383; // Contrast on white & black: 4.59 & 4.57 330 | $color_light_180_100: #00dfdf; 331 | $color_dark_180_100: #005e5e; // Contrast against each other: 4.57 332 | $color_extra_light_180_100: #94ffff; // Contrast against dark color: 6.52 333 | // hue: 180, saturation: 80% 334 | $color_180_80: #0e8282; // Contrast on white & black: 4.63 & 4.53 335 | $color_light_180_80: #19dfdf; 336 | $color_dark_180_80: #0a5d5d; // Contrast against each other: 4.63 337 | $color_extra_light_180_80: #c0f8f8; // Contrast against dark color: 6.59 338 | // hue: 180, saturation: 60% 339 | $color_180_60: #208282; // Contrast on white & black: 4.59 & 4.58 340 | $color_light_180_60: #6adada; 341 | $color_dark_180_60: #175d5d; // Contrast against each other: 4.58 342 | $color_extra_light_180_60: #d3f4f4; // Contrast against dark color: 6.53 343 | // hue: 180, saturation: 40% 344 | $color_180_40: #378080; // Contrast on white & black: 4.6 & 4.56 345 | $color_light_180_40: #99d4d4; 346 | $color_dark_180_40: #275c5c; // Contrast against each other: 4.59 347 | $color_extra_light_180_40: #dff2f2; // Contrast against dark color: 6.54 348 | // hue: 180, saturation: 20% 349 | $color_180_20: #537c7c; // Contrast on white & black: 4.62 & 4.54 350 | $color_light_180_20: #b5cece; 351 | $color_dark_180_20: #3b5959; // Contrast against each other: 4.6 352 | $color_extra_light_180_20: #e8f0f0; // Contrast against dark color: 6.58 353 | 354 | // hue: 195, saturation: 100% 355 | $color_195_100: #007ea8; // Contrast on white & black: 4.62 & 4.55 356 | $color_light_195_100: #5ed7ff; 357 | $color_dark_195_100: #005b79; // Contrast against each other: 4.56 358 | $color_extra_light_195_100: #d1f4ff; // Contrast against dark color: 6.53 359 | // hue: 195, saturation: 80% 360 | $color_195_80: #127ea2; // Contrast on white & black: 4.63 & 4.53 361 | $color_light_195_80: #7fd5f1; 362 | $color_dark_195_80: #0d5b75; // Contrast against each other: 4.58 363 | $color_extra_light_195_80: #d8f2fb; // Contrast against dark color: 6.5 364 | // hue: 195, saturation: 60% 365 | $color_195_60: #277e9b; // Contrast on white & black: 4.62 & 4.54 366 | $color_light_195_60: #97d2e5; 367 | $color_dark_195_60: #1b5a6f; // Contrast against each other: 4.62 368 | $color_extra_light_195_60: #dff1f7; // Contrast against dark color: 6.6 369 | // hue: 195, saturation: 40% 370 | $color_195_40: #3e7d92; // Contrast on white & black: 4.61 & 4.55 371 | $color_light_195_40: #abcfdb; 372 | $color_dark_195_40: #2c5968; // Contrast against each other: 4.63 373 | $color_extra_light_195_40: #e4f0f4; // Contrast against dark color: 6.6 374 | // hue: 195, saturation: 20% 375 | $color_195_20: #597a85; // Contrast on white & black: 4.62 & 4.55 376 | $color_light_195_20: #bbccd2; 377 | $color_dark_195_20: #3f575f; // Contrast against each other: 4.63 378 | $color_extra_light_195_20: #e9eff1; // Contrast against dark color: 6.6 379 | 380 | // hue: 210, saturation: 100% 381 | $color_210_100: #0072e5; // Contrast on white & black: 4.63 & 4.54 382 | $color_light_210_100: #9cceff; 383 | $color_dark_210_100: #0052a5; // Contrast against each other: 4.61 384 | $color_extra_light_210_100: #e0f0ff; // Contrast against dark color: 6.57 385 | // hue: 210, saturation: 80% 386 | $color_210_80: #1775d3; // Contrast on white & black: 4.64 & 4.52 387 | $color_light_210_80: #a5cdf5; 388 | $color_dark_210_80: #105498; // Contrast against each other: 4.61 389 | $color_extra_light_210_80: #e3f0fc; // Contrast against dark color: 6.61 390 | // hue: 210, saturation: 60% 391 | $color_210_60: #3078bf; // Contrast on white & black: 4.6 & 4.56 392 | $color_light_210_60: #aecceb; 393 | $color_dark_210_60: #225689; // Contrast against each other: 4.58 394 | $color_extra_light_210_60: #e5eff9; // Contrast against dark color: 6.54 395 | // hue: 210, saturation: 40% 396 | $color_210_40: #4878a8; // Contrast on white & black: 4.64 & 4.53 397 | $color_light_210_40: #b7cbe0; 398 | $color_dark_210_40: #335679; // Contrast against each other: 4.6 399 | $color_extra_light_210_40: #e8eff5; // Contrast against dark color: 6.59 400 | // hue: 210, saturation: 20% 401 | $color_210_20: #60778f; // Contrast on white & black: 4.63 & 4.53 402 | $color_light_210_20: #c0cad5; 403 | $color_dark_210_20: #445567; // Contrast against each other: 4.62 404 | $color_extra_light_210_20: #ebeef2; // Contrast against dark color: 6.58 405 | 406 | // hue: 225, saturation: 100% 407 | $color_225_100: #3567ff; // Contrast on white & black: 4.63 & 4.54 408 | $color_light_225_100: #b5c8ff; 409 | $color_dark_225_100: #003ae8; // Contrast against each other: 4.57 410 | $color_extra_light_225_100: #e8eeff; // Contrast against dark color: 6.54 411 | // hue: 225, saturation: 80% 412 | $color_225_80: #426cea; // Contrast on white & black: 4.6 & 4.56 413 | $color_light_225_80: #b8c8f8; 414 | $color_dark_225_80: #1644ce; // Contrast against each other: 4.6 415 | $color_extra_light_225_80: #e9eefd; // Contrast against dark color: 6.58 416 | // hue: 225, saturation: 60% 417 | $color_225_60: #4e6fd3; // Contrast on white & black: 4.63 & 4.54 418 | $color_light_225_60: #bcc8ef; 419 | $color_dark_225_60: #2b4caf; // Contrast against each other: 4.59 420 | $color_extra_light_225_60: #eaeefa; // Contrast against dark color: 6.57 421 | // hue: 225, saturation: 40% 422 | $color_225_40: #5b72b9; // Contrast on white & black: 4.61 & 4.55 423 | $color_light_225_40: #bfc9e4; 424 | $color_dark_225_40: #3c518e; // Contrast against each other: 4.6 425 | $color_extra_light_225_40: #ebeef7; // Contrast against dark color: 6.56 426 | // hue: 225, saturation: 20% 427 | $color_225_20: #67749a; // Contrast on white & black: 4.62 & 4.54 428 | $color_light_225_20: #c4c9d8; 429 | $color_dark_225_20: #4a536f; // Contrast against each other: 4.6 430 | $color_extra_light_225_20: #eceef3; // Contrast against dark color: 6.56 431 | 432 | // hue: 240, saturation: 100% 433 | $color_240_100: #5f5fff; // Contrast on white & black: 4.6 & 4.57 434 | $color_light_240_100: #c4c4ff; 435 | $color_dark_240_100: #2424ff; // Contrast against each other: 4.58 436 | $color_extra_light_240_100: #ececff; // Contrast against dark color: 6.5 437 | // hue: 240, saturation: 80% 438 | $color_240_80: #6363ee; // Contrast on white & black: 4.62 & 4.55 439 | $color_light_240_80: #c4c4f9; 440 | $color_dark_240_80: #3232e8; // Contrast against each other: 4.57 441 | $color_extra_light_240_80: #ededfd; // Contrast against dark color: 6.58 442 | // hue: 240, saturation: 60% 443 | $color_240_60: #6868d9; // Contrast on white & black: 4.59 & 4.57 444 | $color_light_240_60: #c5c5f1; 445 | $color_dark_240_60: #3d3dce; // Contrast against each other: 4.58 446 | $color_extra_light_240_60: #ededfb; // Contrast against dark color: 6.57 447 | // hue: 240, saturation: 40% 448 | $color_240_40: #6c6cc0; // Contrast on white & black: 4.62 & 4.54 449 | $color_light_240_40: #c6c6e7; 450 | $color_dark_240_40: #4848a8; // Contrast against each other: 4.56 451 | $color_extra_light_240_40: #ededf8; // Contrast against dark color: 6.53 452 | // hue: 240, saturation: 20% 453 | $color_240_20: #7171a0; // Contrast on white & black: 4.59 & 4.57 454 | $color_light_240_20: #c7c7da; 455 | $color_dark_240_20: #505078; // Contrast against each other: 4.57 456 | $color_extra_light_240_20: #ededf3; // Contrast against dark color: 6.53 457 | 458 | // hue: 255, saturation: 100% 459 | $color_255_100: #7e53ff; // Contrast on white & black: 4.6 & 4.57 460 | $color_light_255_100: #d0c0ff; 461 | $color_dark_255_100: #480bff; // Contrast against each other: 4.58 462 | $color_extra_light_255_100: #f0ebff; // Contrast against dark color: 6.52 463 | // hue: 255, saturation: 80% 464 | $color_255_80: #7e59ed; // Contrast on white & black: 4.63 & 4.54 465 | $color_light_255_80: #cfc1f9; 466 | $color_dark_255_80: #5423e6; // Contrast against each other: 4.58 467 | $color_extra_light_255_80: #f0ecfd; // Contrast against dark color: 6.57 468 | // hue: 255, saturation: 60% 469 | $color_255_60: #7e60d7; // Contrast on white & black: 4.62 & 4.54 470 | $color_light_255_60: #cec3f0; 471 | $color_dark_255_60: #5933cc; // Contrast against each other: 4.58 472 | $color_extra_light_255_60: #f0ecfb; // Contrast against dark color: 6.53 473 | // hue: 255, saturation: 40% 474 | $color_255_40: #7d67be; // Contrast on white & black: 4.61 & 4.56 475 | $color_light_255_40: #cdc4e6; 476 | $color_dark_255_40: #5a449f; // Contrast against each other: 4.57 477 | $color_extra_light_255_40: #efedf7; // Contrast against dark color: 6.56 478 | // hue: 255, saturation: 20% 479 | $color_255_20: #7a6e9e; // Contrast on white & black: 4.61 & 4.55 480 | $color_light_255_20: #cbc6d9; 481 | $color_dark_255_20: #584e75; // Contrast against each other: 4.57 482 | $color_extra_light_255_20: #efedf3; // Contrast against dark color: 6.55 483 | 484 | // hue: 270, saturation: 100% 485 | $color_270_100: #9e3cff; // Contrast on white & black: 4.62 & 4.54 486 | $color_light_270_100: #ddbbff; 487 | $color_dark_270_100: #7000e0; // Contrast against each other: 4.57 488 | $color_extra_light_270_100: #f5eaff; // Contrast against dark color: 6.54 489 | // hue: 270, saturation: 80% 490 | $color_270_80: #9a4aeb; // Contrast on white & black: 4.61 & 4.55 491 | $color_light_270_80: #dbbdf8; 492 | $color_dark_270_80: #7317d0; // Contrast against each other: 4.58 493 | $color_extra_light_270_80: #f4eafd; // Contrast against dark color: 6.53 494 | // hue: 270, saturation: 60% 495 | $color_270_60: #9555d5; // Contrast on white & black: 4.63 & 4.54 496 | $color_light_270_60: #d8c0f0; 497 | $color_dark_270_60: #712db6; // Contrast against each other: 4.62 498 | $color_extra_light_270_60: #f3ebfa; // Contrast against dark color: 6.57 499 | // hue: 270, saturation: 40% 500 | $color_270_40: #8e60bb; // Contrast on white & black: 4.62 & 4.54 501 | $color_light_270_40: #d4c2e5; 502 | $color_dark_270_40: #6a3f94; // Contrast against each other: 4.6 503 | $color_extra_light_270_40: #f1ecf7; // Contrast against dark color: 6.57 504 | // hue: 270, saturation: 20% 505 | $color_270_20: #836b9c; // Contrast on white & black: 4.62 & 4.55 506 | $color_light_270_20: #cfc5d9; 507 | $color_dark_270_20: #5f4c72; // Contrast against each other: 4.57 508 | $color_extra_light_270_20: #f0edf3; // Contrast against dark color: 6.55 509 | 510 | // hue: 285, saturation: 100% 511 | $color_285_100: #bd00fb; // Contrast on white & black: 4.61 & 4.56 512 | $color_light_285_100: #edb5ff; 513 | $color_dark_285_100: #8a00b8; // Contrast against each other: 4.56 514 | $color_extra_light_285_100: #fae8ff; // Contrast against dark color: 6.51 515 | // hue: 285, saturation: 80% 516 | $color_285_80: #b82be7; // Contrast on white & black: 4.63 & 4.54 517 | $color_light_285_80: #e8b8f8; 518 | $color_dark_285_80: #8813af; // Contrast against each other: 4.58 519 | $color_extra_light_285_80: #f8e9fd; // Contrast against dark color: 6.55 520 | // hue: 285, saturation: 60% 521 | $color_285_60: #ae45d0; // Contrast on white & black: 4.6 & 4.56 522 | $color_light_285_60: #e2bcef; 523 | $color_dark_285_60: #8228a0; // Contrast against each other: 4.59 524 | $color_extra_light_285_60: #f6eafa; // Contrast against dark color: 6.55 525 | // hue: 285, saturation: 40% 526 | $color_285_40: #9f58b7; // Contrast on white & black: 4.61 & 4.55 527 | $color_light_285_40: #dbc0e4; 528 | $color_dark_285_40: #763b8a; // Contrast against each other: 4.59 529 | $color_extra_light_285_40: #f4ebf7; // Contrast against dark color: 6.54 530 | // hue: 285, saturation: 20% 531 | $color_285_20: #8d679a; // Contrast on white & black: 4.63 & 4.54 532 | $color_light_285_20: #d3c4d8; 533 | $color_dark_285_20: #654a6f; // Contrast against each other: 4.58 534 | $color_extra_light_285_20: #f1ecf3; // Contrast against dark color: 6.53 535 | 536 | // hue: 300, saturation: 100% 537 | $color_300_100: #cf00cf; // Contrast on white & black: 4.61 & 4.55 538 | $color_light_300_100: #ffadff; 539 | $color_dark_300_100: #970097; // Contrast against each other: 4.59 540 | $color_extra_light_300_100: #ffe6ff; // Contrast against dark color: 6.52 541 | // hue: 300, saturation: 80% 542 | $color_300_80: #cc17cc; // Contrast on white & black: 4.6 & 4.56 543 | $color_light_300_80: #f7b2f7; 544 | $color_dark_300_80: #941094; // Contrast against each other: 4.59 545 | $color_extra_light_300_80: #fde8fd; // Contrast against dark color: 6.57 546 | // hue: 300, saturation: 60% 547 | $color_300_60: #c331c3; // Contrast on white & black: 4.62 & 4.55 548 | $color_light_300_60: #eeb8ee; 549 | $color_dark_300_60: #8d238d; // Contrast against each other: 4.62 550 | $color_extra_light_300_60: #fae9fa; // Contrast against dark color: 6.56 551 | // hue: 300, saturation: 40% 552 | $color_300_40: #b14cb1; // Contrast on white & black: 4.63 & 4.54 553 | $color_light_300_40: #e3bde3; 554 | $color_dark_300_40: #803680; // Contrast against each other: 4.59 555 | $color_extra_light_300_40: #f6eaf6; // Contrast against dark color: 6.54 556 | // hue: 300, saturation: 20% 557 | $color_300_20: #966496; // Contrast on white & black: 4.61 & 4.56 558 | $color_light_300_20: #d7c3d7; 559 | $color_dark_300_20: #6b476b; // Contrast against each other: 4.63 560 | $color_extra_light_300_20: #f3ecf3; // Contrast against dark color: 6.61 561 | 562 | // hue: 315, saturation: 100% 563 | $color_315_100: #db00a4; // Contrast on white & black: 4.62 & 4.55 564 | $color_light_315_100: #ffb0ec; 565 | $color_dark_315_100: #a00078; // Contrast against each other: 4.58 566 | $color_extra_light_315_100: #ffe7f9; // Contrast against dark color: 6.53 567 | // hue: 315, saturation: 80% 568 | $color_315_80: #d618a7; // Contrast on white & black: 4.62 & 4.55 569 | $color_light_315_80: #f7b4e6; 570 | $color_dark_315_80: #9c1179; // Contrast against each other: 4.56 571 | $color_extra_light_315_80: #fde8f8; // Contrast against dark color: 6.53 572 | // hue: 315, saturation: 60% 573 | $color_315_60: #cb33a5; // Contrast on white & black: 4.61 & 4.56 574 | $color_light_315_60: #eeb9e1; 575 | $color_dark_315_60: #932477; // Contrast against each other: 4.59 576 | $color_extra_light_315_60: #fae9f6; // Contrast against dark color: 6.54 577 | // hue: 315, saturation: 40% 578 | $color_315_40: #b4509b; // Contrast on white & black: 4.6 & 4.56 579 | $color_light_315_40: #e3beda; 580 | $color_dark_315_40: #833870; // Contrast against each other: 4.57 581 | $color_extra_light_315_40: #f7ebf4; // Contrast against dark color: 6.56 582 | // hue: 315, saturation: 20% 583 | $color_315_20: #97658b; // Contrast on white & black: 4.62 & 4.55 584 | $color_light_315_20: #d7c3d2; 585 | $color_dark_315_20: #6c4863; // Contrast against each other: 4.6 586 | $color_extra_light_315_20: #f3ecf1; // Contrast against dark color: 6.59 587 | 588 | // hue: 330, saturation: 100% 589 | $color_330_100: #e40072; // Contrast on white & black: 4.62 & 4.54 590 | $color_light_330_100: #ffb2d9; 591 | $color_dark_330_100: #a70053; // Contrast against each other: 4.56 592 | $color_extra_light_330_100: #ffe8f4; // Contrast against dark color: 6.54 593 | // hue: 330, saturation: 80% 594 | $color_330_80: #df197c; // Contrast on white & black: 4.6 & 4.57 595 | $color_light_330_80: #f7b6d7; 596 | $color_dark_330_80: #a2125a; // Contrast against each other: 4.56 597 | $color_extra_light_330_80: #fde9f3; // Contrast against dark color: 6.54 598 | // hue: 330, saturation: 60% 599 | $color_330_60: #ce3a84; // Contrast on white & black: 4.6 & 4.56 600 | $color_light_330_60: #eebad4; 601 | $color_dark_330_60: #97255e; // Contrast against each other: 4.6 602 | $color_extra_light_330_60: #faeaf2; // Contrast against dark color: 6.61 603 | // hue: 330, saturation: 40% 604 | $color_330_40: #b55384; // Contrast on white & black: 4.63 & 4.54 605 | $color_light_330_40: #e4bfd1; 606 | $color_dark_330_40: #85395f; // Contrast against each other: 4.61 607 | $color_extra_light_330_40: #f7ebf1; // Contrast against dark color: 6.59 608 | // hue: 330, saturation: 20% 609 | $color_330_20: #99667f; // Contrast on white & black: 4.6 & 4.56 610 | $color_light_330_20: #d8c4ce; 611 | $color_dark_330_20: #6d495b; // Contrast against each other: 4.61 612 | $color_extra_light_330_20: #f3ecef; // Contrast against dark color: 6.56 613 | 614 | // hue: 345, saturation: 100% 615 | $color_345_100: #ea003a; // Contrast on white & black: 4.61 & 4.56 616 | $color_light_345_100: #ffb4c7; 617 | $color_dark_345_100: #ab002a; // Contrast against each other: 4.56 618 | $color_extra_light_345_100: #ffe8ee; // Contrast against dark color: 6.52 619 | // hue: 345, saturation: 80% 620 | $color_345_80: #e4194c; // Contrast on white & black: 4.62 & 4.54 621 | $color_light_345_80: #f8b8c8; 622 | $color_dark_345_80: #a61237; // Contrast against each other: 4.59 623 | $color_extra_light_345_80: #fde9ee; // Contrast against dark color: 6.54 624 | // hue: 345, saturation: 60% 625 | $color_345_60: #cf3f63; // Contrast on white & black: 4.62 & 4.54 626 | $color_light_345_60: #efbcc8; 627 | $color_dark_345_60: #9b2644; // Contrast against each other: 4.61 628 | $color_extra_light_345_60: #faeaee; // Contrast against dark color: 6.56 629 | // hue: 345, saturation: 40% 630 | $color_345_40: #b6566e; // Contrast on white & black: 4.62 & 4.55 631 | $color_light_345_40: #e4c0c9; 632 | $color_dark_345_40: #883a4d; // Contrast against each other: 4.6 633 | $color_extra_light_345_40: #f7ebee; // Contrast against dark color: 6.55 634 | // hue: 345, saturation: 20% 635 | $color_345_20: #9a6774; // Contrast on white & black: 4.6 & 4.57 636 | $color_light_345_20: #d8c4c9; 637 | $color_dark_345_20: #6e4953; // Contrast against each other: 4.62 638 | $color_extra_light_345_20: #f3ecee; // Contrast against dark color: 6.58 -------------------------------------------------------------------------------- /src/styles/base.scss: -------------------------------------------------------------------------------- 1 | @import "normalize"; 2 | @import "accessible-colors"; 3 | @import "variables"; 4 | @import "mixins"; 5 | @import "page"; 6 | @import "utilities"; 7 | -------------------------------------------------------------------------------- /src/styles/mixins.scss: -------------------------------------------------------------------------------- 1 | @mixin ie-only { 2 | 3 | @media all and (-ms-high-contrast: none), 4 | (-ms-high-contrast: active) { 5 | @content; 6 | } 7 | } 8 | 9 | @mixin min-small { 10 | @media (min-width: 576px) { 11 | @content; 12 | } 13 | } 14 | 15 | @mixin min-medium { 16 | @media (min-width: 768px) { 17 | @content; 18 | } 19 | } 20 | 21 | @mixin min-large { 22 | @media (min-width: 992px) { 23 | @content; 24 | } 25 | } 26 | 27 | @mixin min-xlarge { 28 | @media (min-width: 1200px) { 29 | @content; 30 | } 31 | } 32 | 33 | @mixin max-xsmall { 34 | @media (max-width: 575.98px) { 35 | @content; 36 | } 37 | } 38 | 39 | @mixin max-small { 40 | @media (max-width: 767.98px) { 41 | @content; 42 | } 43 | } 44 | 45 | @mixin max-medium { 46 | @media (max-width: 991.98px) { 47 | @content; 48 | } 49 | } 50 | 51 | @mixin max-large { 52 | @media (max-width: 1199.98px) { 53 | @content; 54 | } 55 | } 56 | 57 | @mixin input-type-button { 58 | 59 | button, 60 | .button, 61 | .btn, 62 | input[type="button"], 63 | input[type="submit"], 64 | input[type="reset"], 65 | input[type="file"] { 66 | @content; 67 | } 68 | } 69 | 70 | @mixin input-type-box { 71 | 72 | textarea, 73 | select, 74 | datalist, 75 | input[type="color"], 76 | input[type="date"], 77 | input[type="datetime-local"], 78 | input[type="email"], 79 | input[type="month"], 80 | input[type="number"], 81 | input[type="password"], 82 | input[type="search"], 83 | input[type="tel"], 84 | input[type="text"], 85 | input[type="time"], 86 | input[type="url"], 87 | input[type="week"] { 88 | &:not(.visually-hidden) { 89 | @content; 90 | } 91 | } 92 | } 93 | 94 | @mixin input-type-checkbox { 95 | input[type="checkbox"] { 96 | &:not(.visually-hidden) { 97 | @content; 98 | } 99 | } 100 | } 101 | 102 | @mixin input-type-radio { 103 | input[type="radio"] { 104 | &:not(.visually-hidden) { 105 | @content; 106 | } 107 | } 108 | } 109 | 110 | @mixin input-type-image { 111 | input[type="image"] { 112 | &:not(.visually-hidden) { 113 | @content; 114 | } 115 | } 116 | } 117 | 118 | @mixin flex-row($child-display: null) { 119 | display: flex; 120 | flex-wrap: nowrap; 121 | flex-direction: row; 122 | justify-content: center; 123 | align-items: stretch; 124 | 125 | >* { 126 | flex: 1 1 1px; 127 | 128 | @if $child-display { 129 | display: $child-display; 130 | } 131 | } 132 | } 133 | 134 | @mixin flex-column($child-display: null) { 135 | display: flex; 136 | flex-wrap: nowrap; 137 | flex-direction: column; 138 | justify-content: center; 139 | align-items: stretch; 140 | 141 | >* { 142 | flex: 1 1 auto; 143 | 144 | @if $child-display { 145 | display: $child-display; 146 | } 147 | } 148 | } 149 | 150 | @mixin anchor($color: $color_0_100, $hover_color: $color_0_40, $underline: true, $important: false) { 151 | 152 | &, 153 | &:visited, 154 | &:active { 155 | color: $color #{if($important, '!important', '')}; 156 | text-decoration: none #{if($important, '!important', '')}; 157 | cursor: pointer #{if($important, '!important', '')}; 158 | } 159 | 160 | &:hover { 161 | color: $hover_color #{if($important, '!important', '')}; 162 | 163 | @if $underline { 164 | text-decoration: underline #{if($important, '!important', '')}; 165 | } 166 | 167 | @else { 168 | text-decoration: none #{if($important, '!important', '')}; 169 | } 170 | } 171 | } 172 | 173 | @mixin button($color, $hover_color, $text_color, $important: false) { 174 | display: inline-block #{if($important, '!important', '')}; 175 | font-style: normal #{if($important, '!important', '')}; 176 | text-decoration: none #{if($important, '!important', '')}; 177 | padding: $normal_padding #{if($important, '!important', '')}; 178 | border: 2px solid $color #{if($important, '!important', '')}; 179 | border-radius: $border_radius #{if($important, '!important', '')}; 180 | transition: all 150ms #{if($important, '!important', '')}; 181 | white-space: nowrap #{if($important, '!important', '')}; 182 | cursor: pointer #{if($important, '!important', '')}; 183 | 184 | color: $text_color #{if($important, '!important', '')}; 185 | background-color: $color #{if($important, '!important', '')}; 186 | text-decoration: none #{if($important, '!important', '')}; 187 | 188 | &:hover { 189 | color: $text_color #{if($important, '!important', '')}; 190 | background-color: $color #{if($important, '!important', '')}; 191 | text-decoration: none #{if($important, '!important', '')}; 192 | border: 2px solid $hover_color #{if($important, '!important', '')}; 193 | } 194 | } 195 | 196 | @mixin badge($color, $hover_color, $text_color, $important: false) { 197 | display: inline-block #{if($important, '!important', '')}; 198 | font-size: 0.75em #{if($important, '!important', '')}; 199 | font-weight: bold #{if($important, '!important', '')}; 200 | font-style: normal #{if($important, '!important', '')}; 201 | vertical-align: middle #{if($important, '!important', '')}; 202 | text-decoration: none #{if($important, '!important', '')}; 203 | padding: $tight_padding #{if($important, '!important', '')}; 204 | border: 2px solid $color #{if($important, '!important', '')}; 205 | border-radius: $border_radius #{if($important, '!important', '')}; 206 | transition: all 150ms #{if($important, '!important', '')}; 207 | white-space: nowrap #{if($important, '!important', '')}; 208 | 209 | color: $text_color #{if($important, '!important', '')}; 210 | background-color: $color #{if($important, '!important', '')}; 211 | text-decoration: none #{if($important, '!important', '')}; 212 | 213 | &:hover { 214 | color: $text_color #{if($important, '!important', '')}; 215 | background-color: $color #{if($important, '!important', '')}; 216 | text-decoration: none #{if($important, '!important', '')}; 217 | border: 2px solid $hover_color #{if($important, '!important', '')}; 218 | } 219 | } 220 | -------------------------------------------------------------------------------- /src/styles/normalize.scss: -------------------------------------------------------------------------------- 1 | /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ 2 | 3 | /* Document 4 | ========================================================================== */ 5 | 6 | /** 7 | * 1. Correct the line height in all browsers. 8 | * 2. Prevent adjustments of font size after orientation changes in iOS. 9 | */ 10 | 11 | html { 12 | line-height: 1.15; 13 | /* 1 */ 14 | -webkit-text-size-adjust: 100%; 15 | /* 2 */ 16 | } 17 | 18 | /* Sections 19 | ========================================================================== */ 20 | 21 | /** 22 | * Remove the margin in all browsers. 23 | */ 24 | 25 | body { 26 | margin: 0; 27 | } 28 | 29 | /** 30 | * Render the `main` element consistently in IE. 31 | */ 32 | 33 | main { 34 | display: block; 35 | } 36 | 37 | /** 38 | * Correct the font size and margin on `h1` elements within `section` and 39 | * `article` contexts in Chrome, Firefox, and Safari. 40 | */ 41 | 42 | h1 { 43 | font-size: 2em; 44 | margin: 0.67em 0; 45 | } 46 | 47 | /* Grouping content 48 | ========================================================================== */ 49 | 50 | /** 51 | * 1. Add the correct box sizing in Firefox. 52 | * 2. Show the overflow in Edge and IE. 53 | */ 54 | 55 | hr { 56 | box-sizing: content-box; 57 | /* 1 */ 58 | height: 0; 59 | /* 1 */ 60 | overflow: visible; 61 | /* 2 */ 62 | } 63 | 64 | /** 65 | * 1. Correct the inheritance and scaling of font size in all browsers. 66 | * 2. Correct the odd `em` font sizing in all browsers. 67 | */ 68 | 69 | pre { 70 | font-family: monospace, monospace; 71 | /* 1 */ 72 | font-size: 1em; 73 | /* 2 */ 74 | } 75 | 76 | /* Text-level semantics 77 | ========================================================================== */ 78 | 79 | /** 80 | * Remove the gray background on active links in IE 10. 81 | */ 82 | 83 | a { 84 | background-color: transparent; 85 | } 86 | 87 | /** 88 | * 1. Remove the bottom border in Chrome 57- 89 | * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. 90 | */ 91 | 92 | abbr[title] { 93 | border-bottom: none; 94 | /* 1 */ 95 | text-decoration: underline; 96 | /* 2 */ 97 | text-decoration: underline dotted; 98 | /* 2 */ 99 | } 100 | 101 | /** 102 | * Add the correct font weight in Chrome, Edge, and Safari. 103 | */ 104 | 105 | b, 106 | strong { 107 | font-weight: bolder; 108 | } 109 | 110 | /** 111 | * 1. Correct the inheritance and scaling of font size in all browsers. 112 | * 2. Correct the odd `em` font sizing in all browsers. 113 | */ 114 | 115 | code, 116 | kbd, 117 | samp { 118 | font-family: monospace, monospace; 119 | /* 1 */ 120 | font-size: 1em; 121 | /* 2 */ 122 | } 123 | 124 | /** 125 | * Add the correct font size in all browsers. 126 | */ 127 | 128 | small { 129 | font-size: 80%; 130 | } 131 | 132 | /** 133 | * Prevent `sub` and `sup` elements from affecting the line height in 134 | * all browsers. 135 | */ 136 | 137 | sub, 138 | sup { 139 | font-size: 75%; 140 | line-height: 0; 141 | position: relative; 142 | vertical-align: baseline; 143 | } 144 | 145 | sub { 146 | bottom: -0.25em; 147 | } 148 | 149 | sup { 150 | top: -0.5em; 151 | } 152 | 153 | /* Embedded content 154 | ========================================================================== */ 155 | 156 | /** 157 | * Remove the border on images inside links in IE 10. 158 | */ 159 | 160 | img { 161 | border-style: none; 162 | } 163 | 164 | /* Forms 165 | ========================================================================== */ 166 | 167 | /** 168 | * 1. Change the font styles in all browsers. 169 | * 2. Remove the margin in Firefox and Safari. 170 | */ 171 | 172 | button, 173 | input, 174 | optgroup, 175 | select, 176 | textarea { 177 | font-family: inherit; 178 | /* 1 */ 179 | font-size: 100%; 180 | /* 1 */ 181 | line-height: 1.15; 182 | /* 1 */ 183 | margin: 0; 184 | /* 2 */ 185 | } 186 | 187 | /** 188 | * Show the overflow in IE. 189 | * 1. Show the overflow in Edge. 190 | */ 191 | 192 | button, 193 | input { 194 | /* 1 */ 195 | overflow: visible; 196 | } 197 | 198 | /** 199 | * Remove the inheritance of text transform in Edge, Firefox, and IE. 200 | * 1. Remove the inheritance of text transform in Firefox. 201 | */ 202 | 203 | button, 204 | select { 205 | /* 1 */ 206 | text-transform: none; 207 | } 208 | 209 | /** 210 | * Correct the inability to style clickable types in iOS and Safari. 211 | */ 212 | 213 | button, 214 | [type="button"], 215 | [type="reset"], 216 | [type="submit"] { 217 | -webkit-appearance: button; 218 | } 219 | 220 | /** 221 | * Remove the inner border and padding in Firefox. 222 | */ 223 | 224 | button::-moz-focus-inner, 225 | [type="button"]::-moz-focus-inner, 226 | [type="reset"]::-moz-focus-inner, 227 | [type="submit"]::-moz-focus-inner { 228 | border-style: none; 229 | padding: 0; 230 | } 231 | 232 | /** 233 | * Restore the focus styles unset by the previous rule. 234 | */ 235 | 236 | button:-moz-focusring, 237 | [type="button"]:-moz-focusring, 238 | [type="reset"]:-moz-focusring, 239 | [type="submit"]:-moz-focusring { 240 | outline: 1px dotted ButtonText; 241 | } 242 | 243 | /** 244 | * Correct the padding in Firefox. 245 | */ 246 | 247 | fieldset { 248 | padding: 0.35em 0.75em 0.625em; 249 | } 250 | 251 | /** 252 | * 1. Correct the text wrapping in Edge and IE. 253 | * 2. Correct the color inheritance from `fieldset` elements in IE. 254 | * 3. Remove the padding so developers are not caught out when they zero out 255 | * `fieldset` elements in all browsers. 256 | */ 257 | 258 | legend { 259 | box-sizing: border-box; 260 | /* 1 */ 261 | color: inherit; 262 | /* 2 */ 263 | display: table; 264 | /* 1 */ 265 | max-width: 100%; 266 | /* 1 */ 267 | padding: 0; 268 | /* 3 */ 269 | white-space: normal; 270 | /* 1 */ 271 | } 272 | 273 | /** 274 | * Add the correct vertical alignment in Chrome, Firefox, and Opera. 275 | */ 276 | 277 | progress { 278 | vertical-align: baseline; 279 | } 280 | 281 | /** 282 | * Remove the default vertical scrollbar in IE 10+. 283 | */ 284 | 285 | textarea { 286 | overflow: auto; 287 | } 288 | 289 | /** 290 | * 1. Add the correct box sizing in IE 10. 291 | * 2. Remove the padding in IE 10. 292 | */ 293 | 294 | [type="checkbox"], 295 | [type="radio"] { 296 | box-sizing: border-box; 297 | /* 1 */ 298 | padding: 0; 299 | /* 2 */ 300 | } 301 | 302 | /** 303 | * Correct the cursor style of increment and decrement buttons in Chrome. 304 | */ 305 | 306 | [type="number"]::-webkit-inner-spin-button, 307 | [type="number"]::-webkit-outer-spin-button { 308 | height: auto; 309 | } 310 | 311 | /** 312 | * 1. Correct the odd appearance in Chrome and Safari. 313 | * 2. Correct the outline style in Safari. 314 | */ 315 | 316 | [type="search"] { 317 | -webkit-appearance: textfield; 318 | /* 1 */ 319 | outline-offset: -2px; 320 | /* 2 */ 321 | } 322 | 323 | /** 324 | * Remove the inner padding in Chrome and Safari on macOS. 325 | */ 326 | 327 | [type="search"]::-webkit-search-decoration { 328 | -webkit-appearance: none; 329 | } 330 | 331 | /** 332 | * 1. Correct the inability to style clickable types in iOS and Safari. 333 | * 2. Change font properties to `inherit` in Safari. 334 | */ 335 | 336 | ::-webkit-file-upload-button { 337 | -webkit-appearance: button; 338 | /* 1 */ 339 | font: inherit; 340 | /* 2 */ 341 | } 342 | 343 | /* Interactive 344 | ========================================================================== */ 345 | 346 | /* 347 | * Add the correct display in Edge, IE 10+, and Firefox. 348 | */ 349 | 350 | details { 351 | display: block; 352 | } 353 | 354 | /* 355 | * Add the correct display in all browsers. 356 | */ 357 | 358 | summary { 359 | display: list-item; 360 | } 361 | 362 | /* Misc 363 | ========================================================================== */ 364 | 365 | /** 366 | * Add the correct display in IE 10+. 367 | */ 368 | 369 | template { 370 | display: none; 371 | } 372 | 373 | /** 374 | * Add the correct display in IE 10. 375 | */ 376 | 377 | [hidden] { 378 | display: none; 379 | } -------------------------------------------------------------------------------- /src/styles/page.scss: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Inconsolata:wght@200;400;700;900&display=swap'); 2 | 3 | * { 4 | box-sizing: border-box; 5 | font-weight: inherit; 6 | 7 | &:focus { 8 | outline: none; 9 | } 10 | } 11 | 12 | html, 13 | body, 14 | p, 15 | .p, 16 | div, 17 | header, 18 | footer, 19 | section, 20 | nav, 21 | h1, 22 | h2, 23 | h3, 24 | h4, 25 | h5, 26 | h6, 27 | span, 28 | label, 29 | .label, 30 | a, 31 | ol, 32 | ul { 33 | margin: 0; 34 | } 35 | 36 | html, 37 | body, 38 | p, 39 | .p, 40 | div, 41 | header, 42 | footer, 43 | section, 44 | nav, 45 | h1, 46 | h2, 47 | h3, 48 | h4, 49 | h5, 50 | h6, 51 | span, 52 | label, 53 | .label, 54 | a { 55 | padding: 0; 56 | } 57 | 58 | ol, 59 | ul { 60 | padding: 0 0 0 1em; 61 | } 62 | 63 | html, 64 | body, 65 | p, 66 | .p, 67 | div, 68 | header, 69 | footer, 70 | section, 71 | nav, 72 | h1, 73 | h2, 74 | h3, 75 | h4, 76 | h5, 77 | h6 { 78 | display: block; 79 | } 80 | 81 | span, 82 | label, 83 | .label, 84 | a { 85 | display: inline; 86 | } 87 | 88 | /* Extended from type-scale.com */ 89 | h1 { 90 | font-size: 2.000rem; 91 | } 92 | 93 | h2 { 94 | font-size: 1.741rem; 95 | } 96 | 97 | h3 { 98 | font-size: 1.516rem; 99 | } 100 | 101 | h4 { 102 | font-size: 1.320rem; 103 | } 104 | 105 | h5 { 106 | font-size: 1.149rem; 107 | } 108 | 109 | h6 { 110 | font-size: 1.000rem; 111 | } 112 | 113 | h1, 114 | h2, 115 | h3, 116 | h4, 117 | h5, 118 | h6, 119 | b, 120 | strong, 121 | label { 122 | font-weight: 700; 123 | } 124 | 125 | h1:not(.page-title), 126 | h2, 127 | h3, 128 | h4, 129 | h5, 130 | h6 { 131 | &:not(.field__label) { 132 | margin-bottom: 0.5rem; 133 | } 134 | } 135 | 136 | p { 137 | margin-top: 0.5rem; 138 | margin-bottom: 0.5rem; 139 | } 140 | 141 | html { 142 | font-family: 'Inconsolata', monospace; 143 | font-size: 18px; 144 | height: 100%; 145 | } 146 | 147 | html, body { 148 | display: flex; 149 | flex-direction: column; 150 | } 151 | 152 | body, .app { 153 | flex: 1 1 auto; 154 | position: relative; 155 | } 156 | 157 | .theme-button { 158 | position: absolute; 159 | left: 0; 160 | top: 0; 161 | } 162 | 163 | .search-input, .filter-input { 164 | margin-bottom: 1rem; 165 | } 166 | 167 | .filter-input-group:not(:first-child) { 168 | margin-left: 0.25rem; 169 | } 170 | 171 | .filter-button:not(:first-child) { 172 | margin-left: 0.25rem; 173 | } 174 | 175 | .result { 176 | overflow: hidden; 177 | border: 1px solid $color_0_0; 178 | border-radius: $border_radius; 179 | 180 | &:not(:first-child) { 181 | margin-top: 0.5rem; 182 | } 183 | } 184 | 185 | .result-title { 186 | padding: $normal_padding; 187 | } 188 | 189 | .result-details { 190 | border-top: 1px solid $color_0_0; 191 | padding: $normal_padding; 192 | } 193 | 194 | .field-row { 195 | margin-bottom: 0.5rem; 196 | } 197 | 198 | .field:not(:first-child) { 199 | margin-left: 0.5rem; 200 | } 201 | 202 | .border { 203 | border-radius: $border_radius; 204 | } 205 | 206 | .list { 207 | border: 1px solid $color_0_0; 208 | border-radius: $border_radius; 209 | } 210 | 211 | .list-item { 212 | padding: $normal_padding; 213 | 214 | &:not(:first-child) { 215 | border-top: 1px solid $color_0_0; 216 | } 217 | } 218 | 219 | @include input-type-box { 220 | border: 1px solid $color_0_0; 221 | border-radius: $border_radius; 222 | padding: $normal_padding; 223 | width: 100%; 224 | } 225 | 226 | .app-content { 227 | padding: $normal_padding; 228 | border-radius: $border_radius; 229 | } 230 | 231 | @each $name, $color, $bg_color, $title_bg_color, $colors in $themes { 232 | .app.#{$name} { 233 | background-color: hsl(210, 10%, 20%); 234 | 235 | .app-content { 236 | color: $color; 237 | background-color: $bg_color; 238 | } 239 | 240 | .background { 241 | background-color: $title_bg_color; 242 | } 243 | 244 | .result, .result-details { 245 | border-color: $color; 246 | } 247 | 248 | @each $name, $color, $hover_color, $subtle_color, $text_color in $colors { 249 | a:not(.button):not(.btn):not(.badge) { 250 | @if $name { 251 | &.#{$name} { 252 | @include anchor($color, $hover_color); 253 | } 254 | } @else { 255 | @include anchor($color, $hover_color); 256 | } 257 | } 258 | 259 | @include input-type-button { 260 | @if $name { 261 | &.#{$name} { 262 | @include button($color, $hover_color, $text_color); 263 | } 264 | } @else { 265 | @include button($color, $hover_color, $text_color); 266 | } 267 | } 268 | 269 | .list { 270 | @if $name { 271 | &.#{$name} { 272 | background-color: $subtle_color; 273 | border-color: $color; 274 | color: $hover_color; 275 | } 276 | } @else { 277 | background-color: $subtle_color; 278 | border-color: $color; 279 | color: $hover_color; 280 | } 281 | } 282 | 283 | .list-item { 284 | @if $name { 285 | &.#{$name} { 286 | background-color: $subtle_color; 287 | border-color: $color; 288 | color: $hover_color; 289 | } 290 | } @else { 291 | background-color: $subtle_color; 292 | border-color: $color; 293 | color: $hover_color; 294 | } 295 | } 296 | 297 | .border { 298 | @if $name { 299 | &.#{$name} { 300 | border: 2px solid $color; 301 | } 302 | } @else { 303 | border: 2px solid $color; 304 | } 305 | } 306 | 307 | .badge { 308 | @if $name { 309 | &.#{$name} { 310 | @include badge($color, $color, $text_color); 311 | } 312 | } @else { 313 | @include badge($color, $color, $text_color); 314 | } 315 | } 316 | } 317 | 318 | @include input-type-box { 319 | color: $color; 320 | background-color: $bg_color; 321 | } 322 | } 323 | } 324 | -------------------------------------------------------------------------------- /src/styles/utilities.scss: -------------------------------------------------------------------------------- 1 | /* Utility styles inspired by boostrap */ 2 | 3 | /* Font Size - Extended from type-scale.com */ 4 | .h0 { 5 | font-size: 2.297rem !important; 6 | } 7 | 8 | .h1 { 9 | font-size: 2.000rem; 10 | } 11 | 12 | .h2 { 13 | font-size: 1.741rem; 14 | } 15 | 16 | .h3 { 17 | font-size: 1.516rem; 18 | } 19 | 20 | .h4 { 21 | font-size: 1.320rem; 22 | } 23 | 24 | .h5 { 25 | font-size: 1.149rem; 26 | } 27 | 28 | .h6, 29 | .font-size-normal { 30 | font-size: 1rem !important; 31 | } 32 | 33 | .h7 { 34 | font-size: 0.871rem !important; 35 | } 36 | 37 | .h8 { 38 | font-size: 0.758rem !important; 39 | } 40 | 41 | .h9 { 42 | font-size: 0.660rem !important; 43 | } 44 | 45 | .h0, 46 | .h1, 47 | .h2, 48 | .h3, 49 | .h4, 50 | .h5, 51 | .h6, 52 | .h7, 53 | .h8, 54 | .h9 { 55 | font-weight: 700 !important; 56 | } 57 | 58 | /* Margin and Padding */ 59 | @each $class, 60 | $value in $sizes { 61 | 62 | .m-#{$class}, 63 | .my-#{$class}, 64 | .mt-#{$class} { 65 | margin-top: $value !important; 66 | } 67 | 68 | .m-#{$class}, 69 | .my-#{$class}, 70 | .mb-#{$class} { 71 | margin-bottom: $value !important; 72 | } 73 | 74 | .m-#{$class}, 75 | .mx-#{$class}, 76 | .ml-#{$class} { 77 | margin-left: $value !important; 78 | } 79 | 80 | .m-#{$class}, 81 | .mx-#{$class}, 82 | .mr-#{$class} { 83 | margin-right: $value !important; 84 | } 85 | 86 | .p-#{$class}, 87 | .py-#{$class}, 88 | .pt-#{$class} { 89 | padding-top: $value !important; 90 | } 91 | 92 | .p-#{$class}, 93 | .py-#{$class}, 94 | .pb-#{$class} { 95 | padding-bottom: $value !important; 96 | } 97 | 98 | .p-#{$class}, 99 | .px-#{$class}, 100 | .pl-#{$class} { 101 | padding-left: $value !important; 102 | } 103 | 104 | .p-#{$class}, 105 | .px-#{$class}, 106 | .pr-#{$class} { 107 | padding-right: $value !important; 108 | } 109 | } 110 | 111 | .p-n { 112 | padding: $tight_padding !important; 113 | } 114 | 115 | /* Text */ 116 | .text-left { 117 | text-align: left !important; 118 | } 119 | 120 | .text-right { 121 | text-align: right !important; 122 | } 123 | 124 | .text-center { 125 | text-align: center !important; 126 | } 127 | 128 | .text-justify { 129 | text-align: justify !important; 130 | } 131 | 132 | .text-wrap { 133 | white-space: normal !important; 134 | } 135 | 136 | .text-nowrap { 137 | white-space: nowrap !important; 138 | } 139 | 140 | .text-truncate { 141 | overflow: hidden !important; 142 | text-overflow: ellipsis !important; 143 | white-space: nowrap !important; 144 | } 145 | 146 | .text-break { 147 | word-break: break-word !important; 148 | overflow-wrap: break-word !important; 149 | } 150 | 151 | .text-lowercase { 152 | text-transform: lowercase !important; 153 | } 154 | 155 | .text-uppercase { 156 | text-transform: uppercase !important; 157 | } 158 | 159 | .text-capitalize { 160 | text-transform: capitalize !important; 161 | } 162 | 163 | .text-muted { 164 | color: $color_0_0 !important; 165 | } 166 | 167 | .font-weight-bold { 168 | font-weight: 700 !important; 169 | } 170 | 171 | .font-weight-bolder { 172 | font-weight: bolder !important; 173 | } 174 | 175 | .font-weight-normal { 176 | font-weight: 400 !important; 177 | } 178 | 179 | .font-weight-light { 180 | font-weight: 300 !important; 181 | } 182 | 183 | .font-weight-lighter { 184 | font-weight: lighter !important; 185 | } 186 | 187 | .font-italic { 188 | font-style: italic !important; 189 | } 190 | 191 | /* Float */ 192 | .float-left { 193 | float: left !important; 194 | } 195 | 196 | .float-right { 197 | float: right !important; 198 | } 199 | 200 | .float-none { 201 | float: none !important; 202 | } 203 | 204 | .clearfix::after { 205 | display: block; 206 | content: ""; 207 | clear: both; 208 | } 209 | 210 | /* Sizing */ 211 | .w-0 { 212 | width: 0 !important; 213 | } 214 | 215 | .w-25 { 216 | width: 25% !important; 217 | } 218 | 219 | .w-50 { 220 | width: 50% !important; 221 | } 222 | 223 | .w-75 { 224 | width: 75% !important; 225 | } 226 | 227 | .w-100 { 228 | width: 100% !important; 229 | } 230 | 231 | .w-auto { 232 | width: auto !important; 233 | } 234 | 235 | .h-0 { 236 | height: 0 !important; 237 | } 238 | 239 | .h-25 { 240 | height: 25% !important; 241 | } 242 | 243 | .h-50 { 244 | height: 50% !important; 245 | } 246 | 247 | .h-75 { 248 | height: 75% !important; 249 | } 250 | 251 | .h-100 { 252 | height: 100% !important; 253 | } 254 | 255 | .h-auto { 256 | height: auto !important; 257 | } 258 | 259 | .mw-0 { 260 | max-width: 0 !important; 261 | } 262 | 263 | .mw-25 { 264 | max-width: 25% !important; 265 | } 266 | 267 | .mw-50 { 268 | max-width: 50% !important; 269 | } 270 | 271 | .mw-75 { 272 | max-width: 75% !important; 273 | } 274 | 275 | .mw-100 { 276 | max-width: 100% !important; 277 | } 278 | 279 | .mw-auto { 280 | max-width: auto !important; 281 | } 282 | 283 | .mh-0 { 284 | max-height: 0 !important; 285 | } 286 | 287 | .mh-25 { 288 | max-height: 25% !important; 289 | } 290 | 291 | .mh-50 { 292 | max-height: 50% !important; 293 | } 294 | 295 | .mh-75 { 296 | max-height: 75% !important; 297 | } 298 | 299 | .mh-100 { 300 | max-height: 100% !important; 301 | } 302 | 303 | .mh-auto { 304 | max-height: auto !important; 305 | } 306 | 307 | .container, 308 | .container-fluid { 309 | margin: 0 auto; 310 | padding: 0; 311 | width: 100%; 312 | } 313 | 314 | .container-fluid { 315 | padding: 0 0.5rem; 316 | } 317 | 318 | @include min-small { 319 | .container { 320 | width: 540px; 321 | } 322 | } 323 | 324 | @include min-medium { 325 | .container { 326 | width: 720px; 327 | } 328 | } 329 | 330 | @include min-large { 331 | .container { 332 | width: 960px; 333 | } 334 | 335 | .row>* { 336 | flex: 1 0 0px; 337 | display: block; 338 | } 339 | 340 | .row>.col-auto { 341 | flex: 0 0 auto; 342 | } 343 | 344 | .row, 345 | .row>.row { 346 | display: flex; 347 | flex-direction: row; 348 | align-items: flex-start; 349 | justify-content: flex-start; 350 | flex-wrap: wrap; 351 | } 352 | } 353 | 354 | @include min-xlarge { 355 | .container { 356 | width: 1140px; 357 | } 358 | } 359 | 360 | .drawer { 361 | transition: all 350ms ease; 362 | display: block; 363 | 364 | &.closed { 365 | display: none; 366 | } 367 | } 368 | 369 | .rounded { 370 | border-radius: 99999px !important; 371 | } 372 | 373 | .pill { 374 | padding: $tight_padding !important; 375 | border-radius: 99999px !important; 376 | } 377 | -------------------------------------------------------------------------------- /src/styles/variables.scss: -------------------------------------------------------------------------------- 1 | $border_radius: 3px; 2 | $normal_padding: 0.5em 0.75em; 3 | $tight_padding: 0 0.25em; 4 | 5 | $sizes: ("0": 0, 6 | "1": 0.25rem, 7 | "2": 0.5rem, 8 | "3": 1rem, 9 | "4": 2rem, 10 | "5": 3rem, 11 | ); 12 | 13 | $light_colors: ( 14 | null $color_210_60 $color_dark_210_60 $color_light_210_60 #fff, 15 | "secondary" $color_dark_0_0 #000 $color_light_0_0 #fff, 16 | "light" $color_light_0_0 #fff $color_dark_0_0 #000, 17 | "success" $color_135_60 $color_dark_135_60 $color_light_135_60 #fff, 18 | "danger" $color_0_60 $color_dark_0_60 $color_light_0_60 #fff, 19 | "inner" #fff $color_light_0_0 $color_dark_0_0 #000, 20 | "color-1" $color_180_60 $color_dark_180_60 $color_light_180_60 #fff, 21 | "color-2" $color_150_60 $color_dark_150_60 $color_light_150_60 #fff, 22 | "color-3" $color_120_60 $color_dark_120_60 $color_light_120_60 #fff, 23 | "color-4" $color_90_60 $color_dark_90_60 $color_light_90_60 #fff, 24 | ); 25 | 26 | $dark_colors: ( 27 | null $color_210_60 $color_light_210_60 $color_dark_210_60 #000, 28 | "secondary" $color_light_0_0 #fff $color_dark_0_0 #000, 29 | "light" $color_light_0_0 #fff $color_dark_0_0 #000, 30 | "success" $color_135_60 $color_light_135_60 $color_dark_135_60 #000, 31 | "danger" $color_0_60 $color_light_0_60 $color_dark_0_60 #000, 32 | "inner" #000 $color_dark_0_0 $color_light_0_0 #fff, 33 | "color-1" $color_180_60 $color_light_180_60 $color_dark_180_60 #000, 34 | "color-2" $color_150_60 $color_light_150_60 $color_dark_150_60 #000, 35 | "color-3" $color_120_60 $color_light_120_60 $color_dark_120_60 #000, 36 | "color-4" $color_90_60 $color_light_90_60 $color_dark_90_60 #000, 37 | ); 38 | 39 | $themes: ( 40 | "light" $color_dark_0_0 #fff #ccc $light_colors, 41 | "dark" $color_light_0_0 #000 #333 $dark_colors, 42 | ); -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | const path = require("path"); 2 | 3 | module.exports = { 4 | outputDir: path.resolve(__dirname, "./docs"), 5 | publicPath: './', 6 | }; 7 | --------------------------------------------------------------------------------