void Start()
    {
        checkAndLoadSpriteDump();
        VillagerRamOffset.text      = VillagerRootAddress;
        VillagerHouseRamOffset.text = VillagerHouseAddress;

        for (int i = 0; i < TenVillagers.Length; ++i)
        {
            int tmpVal = i; // non indexed so it doesn't screw up
            TenVillagers[i].GetComponent <Button>().onClick.AddListener(delegate { LoadVillager(tmpVal); });
        }

        VillagerPhrase.onValueChanged.AddListener(delegate { loadedVillager.CatchPhrase = VillagerPhrase.text; });
        MovingOutToggle.onValueChanged.AddListener(delegate { loadedVillager.MovingOut = MovingOutToggle.isOn; });
        ForceMoveOutToggle.onValueChanged.AddListener(delegate {
            ushort[] flags = loadedVillager.GetEventFlagsSave();
            flags[24]      = ForceMoveOutToggle.isOn ? (ushort)1 : (ushort)0;
            loadedVillager.SetEventFlagsSave(flags);
        });

        VillagerRamOffset.onValueChanged.AddListener(delegate { VillagerRootAddress = VillagerRamOffset.text; });
        VillagerHouseRamOffset.onValueChanged.AddListener(delegate { VillagerHouseAddress = VillagerHouseRamOffset.text; });

        DataButton.interactable = false;
    }
    public void VillagerToUI(Villager2 v)
    {
        VillagerName.text           = GameInfo.Strings.GetVillager(v.InternalName);
        VillagerPhrase.text         = v.CatchPhrase;
        MainVillagerTexture.texture = SpriteBehaviour.PullTextureFromParser(villagerSprites, v.InternalName);
        MovingOutToggle.isOn        = v.MovingOut;
        ForceMoveOutToggle.isOn     = v.GetEventFlagsSave()[24] != 0;

        SaveVillagerLabel.text = string.Format("Save villager ({0})", VillagerName.text);

        DataButton.interactable = true;
    }
Beispiel #3
0
 private void checkReloadVillager()
 {
     if (ReloadVillagerToggle.isOn)
     {
         Villager2 v = loadVillagerExternal(currentlyLoadedVillagerIndex, true);
         if (v != null)
         {
             loadedVillager.SetMemories(v.GetMemories());
             loadedVillager.SetEventFlagsSave(v.GetEventFlagsSave());
             loadedVillager.MovingOut = v.MovingOut;
         }
     }
 }
    void Start()
    {
        checkAndLoadSpriteDump();
        VillagerRamOffset.text      = VillagerRootAddress;
        VillagerHouseRamOffset.text = VillagerHouseAddress;

        for (int i = 0; i < TenVillagers.Length; ++i)
        {
            int tmpVal = i; // non indexed so it doesn't screw up
            TenVillagers[i].GetComponent <Button>().onClick.AddListener(delegate { LoadVillager(tmpVal); });
        }

        VillagerPhrase.onValueChanged.AddListener(delegate { loadedVillager.CatchPhrase = VillagerPhrase.text; });
        VillagerFriendship.onValueChanged.AddListener(delegate { VillagerFriendship.text = setCurrentPlayerFriendship(int.Parse(VillagerFriendship.text)).ToString(); });
        MovingOutToggle.onValueChanged.AddListener(delegate {
            ushort[] flags = loadedVillager.GetEventFlagsSave();
            flags[5]       = 1; // flag 5 = MoveInCompletion
            flags[9]       = 0; // flag 9 = AbandonedHouse
            loadedVillager.SetEventFlagsSave(flags);
            loadedVillager.MovingOut = MovingOutToggle.isOn;
        });
        ForceMoveOutToggle.onValueChanged.AddListener(delegate {
            if (ForceMoveOutToggle.isOn)
            {
                loadedVillager.MovingOut = true;
            }
            ushort[] flags = loadedVillager.GetEventFlagsSave();
            flags[24]      = ForceMoveOutToggle.isOn ? (ushort)1 : (ushort)0; // flag 24 = ForceMoveOut
            flags[5]       = 1;                                               // flag 5 = MoveInCompletion
            flags[9]       = 0;                                               // flag 9 = AbandonedHouse
            loadedVillager.SetEventFlagsSave(flags);
        });

        VillagerRamOffset.onValueChanged.AddListener(delegate { VillagerRootAddress = VillagerRamOffset.text; });
        VillagerHouseRamOffset.onValueChanged.AddListener(delegate { VillagerHouseAddress = VillagerHouseRamOffset.text; });

        DataButton.interactable = false;
    }
    public void VillagerToUI(Villager2 v)
    {
        currentSelectedGSaveMemory = 0;
        var mem = v.GetMemory(currentSelectedGSaveMemory);

        VillagerName.text           = GameInfo.Strings.GetVillager(v.InternalName);
        VillagerPhrase.text         = v.CatchPhrase;
        VillagerFriendship.text     = mem.Friendship.ToString();
        PlayerNameGSave.text        = mem.PlayerName;
        PlayerNameGSave.color       = Color.white;
        MainVillagerTexture.texture = SpriteBehaviour.PullTextureFromParser(villagerSprites, v.InternalName);
        MovingOutToggle.isOn        = v.MovingOut;
        ForceMoveOutToggle.isOn     = v.GetEventFlagsSave()[24] != 0;

        SaveVillagerLabel.text = string.Format("Save villager ({0})", VillagerName.text);

        DataButton.interactable = true;
    }
Beispiel #6
0
        public async Task <bool> InjectVillager(VillagerRequest vr, CancellationToken token)
        {
            var vd    = vr.Item;
            var index = vr.Index;

            if (VillagerHouses == null || VillagerShells == null || Connection == null || Bot == null)
            {
                return(false);
            }

            VillagerHouse?house = VillagerHouses.Find(x => x.NPC1 == (sbyte)index);

            if (house == null)
            {
                LogUtil.LogInfo($"House {index} requested but does not exist. Injecting to first available house", Bot.Config.IP);
                for (int i = 0; i < VillagerHouses.Count; ++i)
                {
                    if (VillagerHouses[i].HouseStatus == 0)
                    {
                        house = VillagerHouses[i];
                        break;
                    }
                }
            }

            if (house == null)
            {
                LogUtil.LogInfo($"No house found to inject to.", Bot.Config.IP);
                return(false);
            }

            var houseIndex = VillagerHouses.IndexOf(house);

            var villagerToInject   = (byte[])vd.Villager.Clone();
            var villagerAsVillager = new Villager2(villagerToInject);

            LogUtil.LogInfo($"Beginning injection for: {GameInfo.Strings.GetVillager(villagerAsVillager.InternalName)}", Bot.Config.IP);

            // update moving out state
            villagerAsVillager.MoveType  = 0;
            villagerAsVillager.MovingOut = true;
            ushort[] flags = villagerAsVillager.GetEventFlagsSave();
            flags[05] = 1; // flag 5 = MoveInCompletion
            flags[09] = 0; // flag 9 = AbandonedHouse
            flags[24] = 0; // flag 24 = ForceMoveOut
            villagerAsVillager.SetEventFlagsSave(flags);

            var houseToInject = (byte[])vd.House.Clone();
            var houseAsHouse  = new VillagerHouse(houseToInject)
            {
                HouseStatus = house.HouseStatus == 0 ? 2 : house.HouseStatus,
                NPC1        = house.NPC1 == -1 ? (sbyte)index : house.NPC1,
                NPC2        = house.NPC2
            };

            // inject villager
            await Connection.WriteBytesAsync(villagerAsVillager.Data, (uint)OffsetHelper.VillagerAddress + ((uint)index *Villager2.SIZE), token).ConfigureAwait(false);

            await Connection.WriteBytesAsync(villagerAsVillager.Data, (uint)OffsetHelper.VillagerAddress + ((uint)index *Villager2.SIZE) + (uint)OffsetHelper.BackupSaveDiff, token).ConfigureAwait(false);

            // inject house
            await Connection.WriteBytesAsync(houseAsHouse.Data, (uint)OffsetHelper.VillagerHouseAddress + ((uint)houseIndex *VillagerHouse.SIZE), token).ConfigureAwait(false);

            await Connection.WriteBytesAsync(houseAsHouse.Data, (uint)OffsetHelper.VillagerHouseAddress + ((uint)houseIndex *VillagerHouse.SIZE) + (uint)OffsetHelper.BackupSaveDiff, token).ConfigureAwait(false);

            LogUtil.LogInfo($"Villager injection complete.", Bot.Config.IP);
            vr.OnFinish?.Invoke(true);
            return(true);
        }