Problem using a stringlist attribute with the FilterByAttribute function

PolAlonso
13 Nov 2020, 08:38

Hello Quest people,

it hasn't been long until I encountered my next problem:

I'm trying to run this code to first filter all the objects that the player is wearing and then get just the objects that are worn in a certain slot, called "armadis"

clothes = FilterByAttribute (GetAllChildObjects (game.pov), "worn", true)
slot = FilterByAttribute (clothes, "wear_slots", "armadis")

The first line alone works, but when I add the second it does not. I think it may be because the attribute "wear_slots" is a string list and this causes some sort of error. Why is this happening? How could I solve this?

Thanks in advance and happy gaming :)

(Sorry I don't know why this was posted twice)


mrangel
13 Nov 2020, 13:16

FilterByAttribute returns all members of an objectlist for which an attribute is equal to the specified value. So the second line would find all worn items for which their wear_stols attribute is the string "armadis".

I believe wear_slots is a stringlist, so can't be equal to a string. To do this, you'd want to loop over the list yourself and find the matching elements. So something like:

result = NewObjectList()
foreach (obj, GetAllChildObjects (game.pov)) {
  if (GetBoolean (obj, "worn") and EndsWith (TypeOf (obj, "wear_slots"), "list")) {
    if (ListContains (obj.wear_slots, "armadis")) {
      list add (result, obj)
    }
  }
}

PolAlonso
13 Nov 2020, 14:02

Thanks! I put that code and it worked