Jump to content

lalolalo9

Members
  • Posts

    6
  • Joined

  • Last visited

Reputation

7 Neutral

About lalolalo9

  • Rank
    (0) Nub
    (0) Nub
  1. Hi Actually enabling Magran's fires challenge mode (combat doesn't end once started) and take any Rogue combination. Then start combat and use Gouging strike on Dorudugan. Kite him to the north of the map. Go invisible and walk all the way south. Leave PC running for a whole day and congratulations you killed Dorudugan Easiest and longest boss of my life Sincerely Lalolalo9
  2. Actually ModScriptHook was the key. So what I did was make a ModScripthook that calls a GlobalScript after 2 hours. This GlobalScripthoook will then call itself every 2 hours. It will check what the player is doing on the world map (walking) and if thee player hast been ambushed at night yet it will trigger an encounter, if he has been ambushed, then it will wait until daytime to reset the globalvalue, it works quite well actually. Now only thing left is to generate those random encounter and put in an nice mix of mobs in these encounters. How I'll find out Code snippet CallGlobalScriptAfterTimePasses(Lalolalo9RandomEncounter, 0, 1, 10, 0, True) if { IsWorldMapTransitMode(Walking) and IsGlobalValue(Lalolalo9_ambushedToday, EqualTo, 0) and IsCurrentlyNighttime() } then LaunchRandomEncounter(RE_Lalolalo9Repeatable_encounter) if { IsGlobalValue(Lalolalo9_ambushedToday, NotEqualTo, 0) and IsCurrentlyDaytime() } then SetGlobalValue(Lalolalo9_ambushedToday, 0)
  3. Hey Noqn Thanks alot for Apotheosis, you cannot imagine how grateful I am About the user scripts! It works, I made a simple script to make all unique items craftable. If you are interested in the code it looks something like this. int count = 0; string[] debugnames = { "" } ; string[] debugnamesID = { "" } ; // Creates a new recipe category called uniques if (TryCreateGameData<RecipeCategory>("Lalolalo9_Unique_Crafting", out var Lalolalo9_Unique_CraftingCat)) { if (Lalolalo9_Unique_CraftingCat.TryGetComponent(out RecipeCategoryComponent rcc)) { var stringindex = rcc.DisplayName.AppendStringTableEntry("Uniques"); rcc.DisplayName = stringindex; } } else { // If the catergory already exist assing Lalolalo9_Unique_CraftingCat var to it. if(TryGetGameData<RecipeCategory>("Lalolalo9_Unique_Crafting", out Lalolalo9_Unique_CraftingCat)) { } } // Starts adding all unique to a new list because creating new gamedataobjects while looping through it throws errors foreach (var equipitemGDO in GameData.OfType<EquippableGameData>()) { // If the item does not have an itemcomponent return if (!TryGetGameData(equipitemGDO.DebugName, out _, out ItemComponent itemC)) { return; } // Check the name of the item, if its empty chnaces are it does not exist in game // Tip adding a + "" converts most objects in the game to string especially useful if working with enumerators like FilterTypes in Itemcomponent var itemdisplayname = itemC.DisplayName.GetStringTableText() + ""; // We only want unique items and not quest related and items with names that are not empty if (itemC.IsUnique == true && (itemC.FilterType + "") != "Quest" && (itemC.DisplayName.GetStringTableText() + "") != "") { // Recipe order in crafitn GUI are not alfabethic or anything, I found out that they are sorted according to when each items was made. // This step makes the debugnames uniform and when we will sort it the items will be grouped nicely in crafting window if (equipitemGDO.TryGetComponent(out EquippableComponent EquipCDOPreSorted)) { // counting how many items are eligible count = count + 1; // preparation to assing correct debugnames so the lsit is nicely sorted string filtertype = itemC.FilterType + "a"; string DebugNameToAdd = "Default"; string EquipTypeSubstituted = (EquipCDOPreSorted.EquipmentType + "").Replace("SmallShield","ShieldS").Replace("MediumShield","ShieldM").Replace("LargeShield","ShieldL"); if(EquipCDOPreSorted.EquipmentType != 0) { DebugNameToAdd = filtertype.FirstOrDefault() + "" + EquipTypeSubstituted + "_" + equipitemGDO.DebugName; } else { DebugNameToAdd = filtertype.FirstOrDefault() + "" + EquipCDOPreSorted.EquipmentSlot + "_" + equipitemGDO.DebugName; } // Adding items to the array debugnames = debugnames.Concat(new string[] { DebugNameToAdd }).ToArray(); debugnamesID = debugnamesID.Concat(new string[] { equipitemGDO.DebugName }).ToArray(); } } } // Sorts the list of debugnames based on the new debugnames Array.Sort(debugnames, debugnamesID); // Now we are making the RecipeData items for (int i = 1; i < count ; i++) { // We check if the item can be created, if it exist which I doubt this will run if (TryCreateGameData<RecipeData>("LalRecipe"+debugnames[i], out var createdRecipe)) { // We want the recipe component so we can modify it if (createdRecipe.TryGetComponent(out RecipeComponent recipeComponent)) { // We want the item which we are adding a recipe to // Actually all these step may be put together and using try create gamedata as the latest would be best to prevent any unneccesary objects created if (TryGetGameData<ItemGameData>(debugnamesID[i], out var itemde)) { // Adding the item to the output list of our recipe component RecipeProduct itemtoAdd = RecipeProduct.Default with { ItemID = itemde.ID}; recipeComponent.Output = recipeComponent.Output.Add(itemtoAdd); // Here we need the name again of our string so we can assign it as the recipe name in our overview if (itemde.TryGetComponent(out EquippableComponent EquipCDO)) { if (itemde.TryGetComponent(out ItemComponent itemCDO)) { string NameToAdd = "Default"; // Some replacement to make in game a little bit more readable string EquipTypeSubstitutedGUI = (EquipCDO.EquipmentType + "").Replace("SmallShield","ShieldS").Replace("MediumShield","ShieldM").Replace("LargeShield","ShieldL"); string EquipSlotSubstitutedGUI = (EquipCDO.EquipmentSlot + "").Replace("GrimoireOrTrinket","GrimTrin").Replace("RingAnyHand","Ring"); if(EquipCDO.EquipmentType != 0) { NameToAdd = EquipTypeSubstitutedGUI + " " + itemCDO.DisplayName.GetStringTableText(); } else { NameToAdd = EquipSlotSubstitutedGUI + " " + itemCDO.DisplayName.GetStringTableText(); } // Assigning the name to the recipe component var stringindex = recipeComponent.DisplayName.AppendStringTableEntry(NameToAdd); recipeComponent.DisplayName = stringindex; } } } // Setting the category and cost recipeComponent.Category = Lalolalo9_Unique_CraftingCat.ID; recipeComponent.Cost = 100; } } } Please forgive the main newbie mistakes but hey if it works it works About the AI conditionals, its still a work in progess to create all those conditions because it needs alot of testing. However a another great idea came to mind. I would like to add some random encounters in Deadfire but I fear, I need to edit the Worldmap scene to that, and so far did not have any luck. But once I know how, I will make a randomized beast spawner using Userscripts to make some challenges during adventure. Something like the scripted interaction where you aim at the orlan during your trip, but instead when travelling on island there is a certain chance you will be ambushed by something. I think that sounds fun to make combat more rewarding. But still in the initial stages. Just wanted to shout out and say thanks alot for Apotheosis!! Sincerely Lalolalo9
  4. Hi Hi Amazing work with Apotheosis, even the name is wonderfully chosen! I have been having a blast putting in more AI conditionals and stuff like that However as I am just an amateur at programming I'm not sure how to acces the names / string names of certain fields in the User scripts. For example I know I need string number 253, but idk how to get the localized name for this string. I am trying to see if I can add all spell buffs as a CustomAIConditionalScriptSet. This so I can realize my grand master plan AI first for my own party, then for mobs :D I know how to do it manually but doing it in an automated way sounds cool to try But first things first, making the spell CustomAIConditionalCategory for each class. However I am lost with the stringindextable and stuff like that, I can't solve an easy thing like the following: Where I just want to make an extra category for each existing class SetGameDataPath("ai.gamedatabundle"); foreach (var POEClass in Components<CharacterClassComponent>()) { CustomAIConditionalCategoryComponent test = new CustomAIConditionalCategoryComponent { CategoryName = POEClass.DisplayName }; } Sincerely lalolalo9
  5. Dear I have reason to believe that Nalvi pet wide party effect doesn't reduce recovery time. Atleast in-game tooltips doesn't show it. I compared it to Abraham who does. Base Nalvi Abraham. Deck of Endless possibilities keeps being used endlessly when AI uses it. It will show -3/0 uses per encounter left and keeps counting down everytime it's used. Greetings
×
×
  • Create New...