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; }
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; }
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); }