コード例 #1
0
        public FF7BattleMap GetBattleMap()
        {
            var bytes = new byte[Addresses.BattleMapStart.NumBytes];

            _memory.ReadMem(Settings.ProcessName, Addresses.BattleMapStart.Address, bytes);
            var isBattleByte = new byte[1];

            _memory.ReadMem(Settings.ProcessName, Addresses.ActiveBattleState.Address, isBattleByte);

            return(new FF7BattleMap(bytes, isBattleByte.Single()));
        }
コード例 #2
0
        public void RemoveWeaponMateria(CharNames charNames, int keep = 0)
        {
            CharMemLoc charMemLoc = CharMemLoc.ByName(charNames);

            byte[] emptyRow = { byte.MaxValue, byte.MaxValue, byte.MaxValue, byte.MaxValue };

            for (int i = ItemSize * keep; i < charMemLoc.WeaponMateria.NumBytes; i += ItemSize)
            {
                IntPtr address = IntPtr.Add(charMemLoc.WeaponMateria.Address, i);
                var    bytes   = new byte[ItemSize];
                _memory.ReadMem(Settings.ProcessName, address, bytes);
                var materia = new MateriaSlot(bytes);
                AddMateria(materia.MateriaId, materia.Experience);
                _memory.WriteMem(Settings.ProcessName, address, emptyRow);
            }
        }
コード例 #3
0
        public byte GetCharacterEquipment(CharNames charName, Func <CharMemLoc, IntPtr> addressSelector)
        {
            CharMemLoc charMemLoc = CharMemLoc.ByName(charName);
            var        bytes      = new byte[1];

            _memoryAccessor.ReadMem(Settings.ProcessName, addressSelector(charMemLoc), bytes);
            return(bytes[0]);
        }
コード例 #4
0
        private int GetTrueStatus(Allies actor)
        {
            var bytes = new byte[4];

            _memoryAccessor.ReadMem(ProcessName, actor.SecondaryStatus.Address, bytes);
            int status = BitConverter.ToInt32(bytes);

            return(status);
        }
コード例 #5
0
        public string GetCharacterName(CharNames charName)
        {
            CharMemLoc cml = CharMemLoc.ByName(charName);

            byte[] bytes = new byte[cml.Name.NumBytes];
            _memoryAccessor.ReadMem(ProcessName, cml.Name.Address, bytes);

            string characterName = bytes.MapFf7BytesToString();

            return(characterName);
        }
コード例 #6
0
        public MenuColors GetMenuColors(string processName)
        {
            byte[] topLeftBuffer  = new byte[3];
            byte[] botLeftBuffer  = new byte[3];
            byte[] topRightBuffer = new byte[3];
            byte[] botRightBuffer = new byte[3];

            if (_memoryAccessor.ReadMem(processName, Addresses.MenuTopLeft.Address, topLeftBuffer) &&
                _memoryAccessor.ReadMem(processName, Addresses.MenuBotLeft.Address, botLeftBuffer) &&
                _memoryAccessor.ReadMem(processName, Addresses.MenuTopRight.Address, topRightBuffer) &&
                _memoryAccessor.ReadMem(processName, Addresses.MenuBotRight.Address, botRightBuffer))
            {
                return(new MenuColors
                {
                    TopLeft = topLeftBuffer.ToColor(),
                    BotLeft = botLeftBuffer.ToColor(),
                    TopRight = topRightBuffer.ToColor(),
                    BotRight = botRightBuffer.ToColor(),
                });
            }

            return(_currentColor);
        }
コード例 #7
0
        public Scene GetCurrentScene()
        {
            var buffer = new byte[Addresses.SceneMapStart.NumBytes];

            _memoryAccessor.ReadMem(ProcessName, Addresses.SceneMapStart.Address, buffer);

            string[] enemyNames = new string[3];
            for (int i = 0; i < 3; i++)
            {
                var nameBytes = buffer.Skip(SceneMapConst.ActorSize * i + SceneMapConst.EnemyNameOffset)
                                .TakeWhile(x => x != SceneMapConst.EnemyNameEnd).ToArray();
                enemyNames[i] = nameBytes.MapFf7BytesToString(nameBytes.Length);
            }

            return(new Scene(enemyNames));
        }
コード例 #8
0
        public ushort GetGp()
        {
            try
            {
                lock (Padlock)
                {
                    var buffer = new byte[Addresses.Gp.NumBytes];
                    _memoryAccessor.ReadMem(Settings.ProcessName, Addresses.Gp.Address, buffer);
                    return(BitConverter.ToUInt16(buffer));
                }
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Error setting player GP.");
            }

            return(0);
        }
コード例 #9
0
 private void TryUpdateMoment()
 {
     try
     {
         if (DateTime.UtcNow >= _nextMomentCheckAllowed)
         {
             lock (Padlock)
             {
                 if (DateTime.UtcNow >= _nextMomentCheckAllowed)
                 {
                     _nextMomentCheckAllowed = DateTime.UtcNow.AddSeconds(2);
                     byte[] bytes = new byte[Addresses.GameMoment.NumBytes];
                     _memoryAccessor.ReadMem(ProcessName, Addresses.GameMoment.Address, bytes);
                     _lastCheckedMoment = (ushort)((bytes[1] << 8) + bytes[0]);
                 }
             }
         }
     }
     catch (Exception e)
     {
         _logger.LogError(e, "Error fetching game moment.");
     }
 }
コード例 #10
0
 public MenuFlags GetMenuStatus()
 {
     byte[] bytes = new byte[Addresses.MenuLock.NumBytes];
     _memoryAccessor.ReadMem(ProcessName, Addresses.MenuLock.Address, bytes);
     return((MenuFlags)BitConverter.ToUInt16(bytes));
 }