Hello everyone! A few years ago I got some help with a randomizer of mine and it made it into a wonderful little tool to play around with. Link to it here!

I’ve since expanded upon it, and come into a small problem with the more I add to it: unique outputs.

There are, in total, 4 outputs I’m concerned with the most (the types). Is there any way to make it so that the code keeps track of all 4 outputs and insures they are all unique?

I’ve looked over the documentation and I think it’s a touch out of my current skillset. Thank you to anyone who takes the time to help out!

  • VioneTM
    link
    English
    2
    edit-2
    11 days ago

    @[email protected]’s Solution works wonderfully.

    Here is another way using the exclude-items-plugin:

    exclude = {import:exclude-items-plugin}
    
    sentence
      [takenTypes = [], ''] You find yourself in {a} [d=description.selectOne] [b=biome.selectOne].<br> As the area is [d.singularForm.lowerCase], [td = typesdescription.selectOne.evaluateItem, takenTypes.push(td), td] type 'mons are rather prolific. That is in addition to the [typesbiome = exclude(others[b], takenTypes).selectUnique(2).map(a => (takenTypes.push(a), a)).joinItems(" and ")] types that live in the [b] already. <br>Oddly enough, there also seem to be some [s=exclude(stragglers, takenTypes).selectOne, takenTypes.push(s), s] type 'mons in the area as well. <br><br> Pokemon Types: [td] ([d]), [typesbiome] ([b]), [s] (stragglers)
    

    The td = typesdescription.selectOne.evaluateItem makes sure that you have the Type instead of the description stored on the takenTypes list. If you don’t want to add the evaluateItem you could remove the dynamic odds using the d and use td = typesdescription[d].selectOne to select only the type. We push the selected types on the takenTypes list and use it to exclude the already selected types on the next selection with the exclude-items-plugin.

  • BluePower
    link
    fedilink
    English
    2
    edit-2
    11 days ago

    Here’s my solution so far - create a variable that’ll hold the generated types in and then change the code of the sentence list to never use any of these already-generated types:

    // Create a new "takenTypes" array variable to store the already generated types
    takenTypes = [[]]
    
    sentence
      [takenTypes = [], ""]You find yourself in {a} [d=description.selectOne] [b=biome.selectOne].<br> As the area is [d.singularForm.lowerCase], [td = typesdescription.selectOne, uniqueReturn(td)] type 'mons are rather prolific. That is in addition to the [removeDups(others[b]).selectUnique(2).map(x => uniqueReturn(x)).join(" and ")] types that live in the [b] already. <br>Oddly enough, there also seem to be some [s=removeDups(stragglers).selectOne, uniqueReturn(s)] type 'mons in the area as well.
    
    // Returns a new list that does not contain the entries already shown in the output
    removeDups(list) => return list.selectAll.filter(x => !takenTypes.includes(x));
    // Adds the entry into the "takenTypes" variable so they never show up again in the same output
    uniqueReturn(i) => takenTypes.push(i); return i;
    
  • TAPgiles
    link
    English
    112 days ago

    Does selectUnique and consumableList not cover you?

    • @scarfflesOP
      link
      English
      112 days ago

      I did try using that but I was still getting duplicate answers. I likely wasn’t implementing it properly but I’m not sure where it was going wrong with the implementation, if that makes sense.

      • TAPgiles
        link
        English
        111 days ago

        Could you just paste the code you are talking about here? I’m trying to guess at which part you are talking about but it’s very difficult. If I could see the code you are talking about I might see the issue.

          • TAPgiles
            link
            English
            011 days ago

            Yes, I looked at the code at that link. There’s a lot of code though, so I don’t know which part of the code isn’t producing what you want it to produce. Hence I asked you to just paste in the specific code you’re having trouble with–not the entire page.