<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>にゃんこ大戦争配布</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      background: linear-gradient(135deg, #1e3c72, #2a5298);
      color: #fff;
      display: flex;
      flex-direction: column;
      justify-content: center;
      align-items: center;
      height: 100vh;
      margin: 0;
    }
    button {
      background: #ff7f50;
      border: none;
      color: white;
      font-size: 18px;
      font-weight: bold;
      padding: 15px 25px;
      margin: 10px;
      border-radius: 8px;
      cursor: pointer;
      transition: all 0.3s ease;
      box-shadow: 0 4px 6px rgba(0, 0, 0, 0.2);
    }
    button:hover {
      background: #ff6347;
      transform: translateY(-3px);
      box-shadow: 0 6px 8px rgba(0, 0, 0, 0.3);
    }
    button:active {
      transform: translateY(0);
      box-shadow: 0 4px 6px rgba(0,0,0,.2);
    }
  </style>
</head>
<body>
  <span>にゃんこ大戦争配布 by rhgrive(アプデ自動対応)</span>
  <button onclick="nekokan()">ネコカン</button>
  <button onclick="changeXP()">経験値</button>

<script>
/*
try { if (h5gg) {}
  } catch(e) {
    while(true) {
      alert('h5ggで起動してください');
    }
}*/
window.onload = function() {
  h5gg.clearResults();
  h5gg.searchNumber('32400','I32','0x100000000','0x110000000');  
  base = Number(h5gg.getResults('1')[0].address); 
  setWindowDrag(0,0,300,60);
  CallOffset();
}

function findPattern(arr, pattern, Index, Up) {

    let isReal = (num) => num >= -255 && num <= 256;
    let isRandom = (num) => num <= -256 || num >= 257;
    let indices = [];

    for (let i = 0; i <= arr.length - pattern.length; i++) {
        let match = true; 
        for (let j = 0; j < pattern.length; j++) {
            let check = pattern[j] === 1 ? isReal : isRandom;
            if (!check(arr[i + j])) {
                match = false;
                break;
            }
        }
        if (match) {
            indices.push(i + pattern.indexOf(Index, Up));
        }
    }
    return indices;
}

function CallOffset() {
  let data = [];                
  for (let k = 0;k < 0xfff; k++) {
     data.push(h5gg.getValue(base - 4*k,'I32'));
  }
  let result = Number(findPattern(data,[1,0,0,0,1],0,3));
      neko = base - result*4;
      data = [];                

  for (let k = 0;k < 0x150; k++) {
     data.push(h5gg.getValue(base + 4*k,'I32'));
  }
      result = Number(findPattern(data,[1,0,0,0,0,1],0));
      xp = base + result*4;
}

let neko = 0;
let xp = 0;
  
function nekokan() {
  let val = prompt();
  h5gg.setValue(neko,val,'I32');
  h5gg.setValue(neko + 0x4,0,'I32');
}
function changeXP() {
  let val = prompt();
  h5gg.setValue(xp,val,'I32');
  h5gg.setValue(xp + 0x4,0,'I32');
}
</script>