Ejemplo n.º 1
0
        /// <summary>
        /// Refresh the actor to force the game to load any changed values for appearance.
        /// </summary>
        public async Task RefreshAsync()
        {
            if (this.Pointer == null)
            {
                return;
            }

            this.IsRefreshing = true;
            MemoryModes oldMode = this.MemoryMode;

            this.MemoryMode = MemoryModes.Read;

            // Use direct pointers here so that we can write the values we need to update
            // for the refresh without the rest of the model's values, as writing most of the other
            // values will crash the game.
            IntPtr actorPointer      = (IntPtr)this.Pointer;
            IntPtr objectKindPointer = actorPointer + 0x008c;
            IntPtr renderModePointer = actorPointer + 0x0104;

            if (this.ObjectKind == ActorTypes.Player)
            {
                MemoryService.Write(objectKindPointer, (byte)ActorTypes.BattleNpc);

                MemoryService.Write(renderModePointer, (int)RenderModes.Unload);
                await Task.Delay(50);

                MemoryService.Write(renderModePointer, (int)RenderModes.Draw);
                await Task.Delay(50);

                MemoryService.Write(objectKindPointer, (byte)ActorTypes.Player);
                MemoryService.Write(renderModePointer, (int)RenderModes.Draw);
            }
            else
            {
                MemoryService.Write(renderModePointer, (int)RenderModes.Unload);
                await Task.Delay(50);

                MemoryService.Write(renderModePointer, (int)RenderModes.Draw);
            }

            await Task.Delay(50);

            this.IsRefreshing = false;
            this.MemoryMode   = oldMode;
        }
Ejemplo n.º 2
0
        public double[,] InitWeights(MemoryModes memoryMode)
        {
            var weights = new double[NeuronsCount, PrevLayerNeuronsCount];

            Console.WriteLine($"{NeuronType} layer weights are being initialized...");
            var memoryDoc = new XmlDocument();

            memoryDoc.Load(Path.Combine("../../../", Path.Combine("Memory", $"{NeuronType}_memory.xml")));
            var memoryEl = memoryDoc.DocumentElement;

            switch (memoryMode)
            {
            case MemoryModes.Get:
                for (var l = 0; l < weights.GetLength(0); ++l)
                {
                    for (var k = 0; k < weights.GetLength(1); ++k)
                    {
                        weights[l, k] = double.Parse(memoryEl.ChildNodes.Item(k + weights.GetLength(1) * l).InnerText.Replace(',', '.'), CultureInfo.InvariantCulture);
                    }
                }
                break;

            case MemoryModes.Set:
                for (var l = 0; l < Neurons.Length; ++l)
                {
                    for (var k = 0; k < PrevLayerNeuronsCount; ++k)
                    {
                        memoryEl.ChildNodes.Item(k + PrevLayerNeuronsCount * l).InnerText = Neurons[l].Weights[k].ToString(CultureInfo.InvariantCulture);
                    }
                }
                break;
            }
            memoryDoc.Save($"{NeuronType}_memory.xml");
            Console.WriteLine($"{NeuronType} layer weights have been initialized...");
            return(weights);
        }