I think i broke Quest.-Take command screwed up.

-Edit, Installing quest 7.1 seems to have fixed it

Welp, you always forget to check the things that seem like they couldn't possibly break when working, this time I think i somehow broke the simple "take" function, because this is the result i get..

"Error running script: Cannot foreach over 'Object: Aniversary Present' as it is not a list"

and of course it happens for each and every takeable item, it has propagated to older aslx files as well for some odd reason..
However when I directly play the quest file rather than opening for editing and previewing it works (On a known good file)

I've tried running
recently updated to quest 7.2 but doubt that would have an effect,

  if (HasAttribute(obj, "flavor")) {
    MoveObject (obj, Flavor Items)
  }
  else if (HasAttribute(obj, "trophy")) {
    MoveObject (obj, Flavor Items)
  }
  else {
    DoTake (obj, multiple)
  }
}

Is my customized take function I've had for quite some time, to automatically sort items for the player when picked up


K.V.

Does your game's code contain either the take command's script or the DoTake() function?

If so, post that code, please.


If you have modified the take command/function in 5.7.1, and 5.7.2 has a new (different) take command/function than 7.1, then that would explain everything. See if the two versions have any differences; if so, you'll have to re-modify your customized take code in 7.2, assuming you want to upgrade.

I had this problem with a modified put command going from 5.6.3 to 5.7.1. There were some changes to the 7.1 put command, but Quest was using my old modified 6.3 put command.


I had similar problems with wear/remove and just decided I needed to retest thoroughly after each update.


Yep, The modified take command is very likely what the causing that issue, so going to take a look at how to redo it properly when i next try to update quest..currently 7.2 has nothing I really need in itthough so I have time


Hi. I have the same problem in Quest 5.8.0 beta 1.


K.V.

Did you have a modified TAKE command?

If you're not certain, just look in the tree. If take is there, flip to Full Code View, copy the entire TAKE code, and post it here. We can fix you up!


K.V.

This is the TAKE command as of Quest 5.7.2:

  <command name="take">
    <pattern>take #object#; get #object#; pick up #object#</pattern>
    <multiple>
      takeList = NewObjectList()
      foreach (obj, ListExclude(ScopeVisibleNotHeldNotScenery(), game.pov)) {
        if (obj.parent = game.pov.parent) {
          list add (takeList, obj)
        }
      }
      return (takeList)
    </multiple>
    <scope>notheld</scope>
    <multipleobjects type="script">
      game.pov.currentcommandpendingobjectscope = NewObjectList()
      objlist = ListExclude(ScopeVisibleNotHeldNotScenery(), game.pov)
      objlist = ListExclude(objlist, FilterByAttribute(objlist,"not_all",true))
      foreach (obj, objlist) {
        if (obj.parent = game.pov.parent and not DoesInherit(obj, "npc_type")) {
          list add (game.pov.currentcommandpendingobjectscope, obj)
        }
      }
    </multipleobjects>
    <script>
      if (multiple and ListCount(object) = 0) {
        msg ("Nothing here to take.")
      }
      else {
        foreach (obj, object) {
          DoTake (obj, multiple)
        }
      }
    </script>
  </command>

This is the 5.7.1 TAKE command:

  <command name="take" template="take">
    <multiple>
      takeList = NewObjectList()
      foreach (obj, ListExclude(ScopeVisibleNotHeldNotScenery(), game.pov)) {
        if (obj.parent = game.pov.parent) {
          list add(takeList, obj)
        }
      }
      return (takeList)
    </multiple>
    <scope>notheld</scope>
    <script>
      foreach (obj, object) {
        DoTake(obj, multiple)
      }
    </script>
  </command>

And the TAKE command from 5.6.3:

  <command name="take" template="take">
    <multiple>
      takeList = NewObjectList()
      foreach (obj, ListExclude(ScopeVisibleNotHeldNotScenery(), game.pov)) {
        if (obj.parent = game.pov.parent) {
          list add(takeList, obj)
        }
      }
      return (takeList)
    </multiple>
    <script>
      foreach (obj, object) {
        DoTake(obj, multiple)
      }
    </script>
  </command>

Okay. It's done. I actually overwrote the take-verb. I'm all right now. Thanks for the help.


This topic is now closed. Topics are closed after 60 days of inactivity.

Support

Forums