Difference between revisions of "GameObj"

From Legends of Aria Admin and Modding Wiki
Jump to: navigation, search
(Game Object Properties)
(Basic Game Object Properties)
Line 10: Line 10:
  
 
* '''<code>Client Id</code>''': The type of gameobject, it defines the visual look, like Human Female Model, A Rock, a House, whatever.  
 
* '''<code>Client Id</code>''': The type of gameobject, it defines the visual look, like Human Female Model, A Rock, a House, whatever.  
**Getter: <code>mType = mObj:GetCreationTemplateId()</code>
+
**Getter: <code>mClientId = mObj:GetCreationTemplateId()</code>
 
**Setter: <code>mObj:SetAppearanceFromTemplate(mTemplateName)</code> Sets the Client Id and appearance of the object to the Client Id set in the referenced template. Its a bit of an indirect way of setting it, instead of directly using the Client Id, but thats how it works right now (0.3.5)
 
**Setter: <code>mObj:SetAppearanceFromTemplate(mTemplateName)</code> Sets the Client Id and appearance of the object to the Client Id set in the referenced template. Its a bit of an indirect way of setting it, instead of directly using the Client Id, but thats how it works right now (0.3.5)
  
Line 20: Line 20:
 
** Getter: <code>mHue = mObj:GetHue()</code>
 
** Getter: <code>mHue = mObj:GetHue()</code>
 
** Setter: <code>mObj:SetHue("FF0000")</code>
 
** Setter: <code>mObj:SetHue("FF0000")</code>
 +
 +
For mobiles:
 +
* '''<code>Base Movement Speed</code>''': Guess what? This is how fast the mob can move. ;)
 +
** Getter: <code>mSpeed = mObj:GetBaseMoveSpeed()</code>
 +
** Setter: <code>mObj:SetBaseMoveSpeed(3)</code> Run, Forrest, run ....
  
 
* '''<code>Location</code>''': Location of the object in the world
 
* '''<code>Location</code>''': Location of the object in the world
Line 38: Line 43:
 
** Getter: <code>mValue = mObj:GetObjVar("MyVariable")</code>
 
** Getter: <code>mValue = mObj:GetObjVar("MyVariable")</code>
 
** Getter2: <code>mBool = mObj:HasObjVar("MyVariable")</code> Returns a boolean if the ObjVar exists.
 
** Getter2: <code>mBool = mObj:HasObjVar("MyVariable")</code> Returns a boolean if the ObjVar exists.
** Getter3: <code>mTable = mObj:GetAllObjVars()</code> Returns a Dictionary with ObjVar names as keys and values as values
+
** Getter3: <code>mObjVarTable = mObj:GetAllObjVars()</code> Returns a Dictionary with ObjVar names as keys and values as values
 
** Setter: <code>mObj:SetObjVar("MyVariable", SomeValue)</code> Type of the ObjVar is the type of the value assigned.
 
** Setter: <code>mObj:SetObjVar("MyVariable", SomeValue)</code> Type of the ObjVar is the type of the value assigned.
 
** Deletion: <code>mObj:DelObjVar("MyVariable")</code>
 
** Deletion: <code>mObj:DelObjVar("MyVariable")</code>
Line 44: Line 49:
  
 
* '''<code>Shared Object Properties</code>''': A gameobject can have [[Shared Object Properties]], additional data we can assign, query, change and delete from script and which is shared with the client. Generally this data is data the clients needs for certain tasks, like displaying the object properly. Which of this data can be used depends on the object type, given by its ClientId and is predefined in the engine.
 
* '''<code>Shared Object Properties</code>''': A gameobject can have [[Shared Object Properties]], additional data we can assign, query, change and delete from script and which is shared with the client. Generally this data is data the clients needs for certain tasks, like displaying the object properly. Which of this data can be used depends on the object type, given by its ClientId and is predefined in the engine.
** Getter: <code>mValue = mObj:GetObjVar("MyVariable")</code>
+
** Shared Object Properties can be Numbers, Strings, Booleans (Not sure about Integers and other non-Lua types here right now ~Y.)
** Getter2: <code>mBool = mObj:HasObjVar("MyVariable")</code> Returns a boolean if the ObjVar exists.
+
** Getter: <code>mValue = mObj:GetSharedObjectProperty("NoInteract")</code>This would return the Interaction flag for the object, a boolean in this case.
** Getter3: <code>mTable = mObj:GetAllObjVars()</code> Returns a Dictionary with ObjVar names as keys and values as values
+
** Getter2: <code>mSharedPropTable = mObj:GetAllSharedObjectProperties()</code> Returns a Dictionary with Shared Object Property names as keys and values as values
** Setter: <code>mObj:SetObjVar("MyVariable", SomeValue)</code> Type of the ObjVar is the type of the value assigned.
+
** Setter: <code>mObj:SetSharedObjectProperty("Weight", -1)</code> Object cannot be lifted anymore and is "glued to the ground".
** Deletion: <code>mObj:DelObjVar("MyVariable")</code>
+
** Deletion: ???
** Caveat: SetObjVar is asynchronous, when used from another object and synchronous when used from script attached to the object itself. This means, setting an objvar on another object than the one the script is running on will not be executed immediately !!!
+
** Caveat: SetSharedObjectProperty might probably be asynchronous, when used from another object (CS pls confirm). Tests are necessary.
  
 
== Tips ==
 
== Tips ==

Revision as of 13:35, 1 November 2016

Game Object (GameObj) is a Dynamic object within the game that can occupy a position of the world, including a Container. Game Objects are the most common of all Objects and can have Variables and/or Modules attached to them.

A potion, a monster, a door, and a sword are all examples of GameObjs.

Basic Game Object Properties

Official Docs and GameObj engine API: [Game Object Functions]

  • Id:The unique Id of a GameObject, Ids are unique on a per cluster basis.
    • Getting the Id of a gameObject: mId = mObj.Id
    • Setter: Gameobject Ids cannot be set. They are created and assigned by the engine on object creation.
    • Referencing a gameobject from a known Id(=number): mGameObj = GameObj(mId)
  • Client Id: The type of gameobject, it defines the visual look, like Human Female Model, A Rock, a House, whatever.
    • Getter: mClientId = mObj:GetCreationTemplateId()
    • Setter: mObj:SetAppearanceFromTemplate(mTemplateName) Sets the Client Id and appearance of the object to the Client Id set in the referenced template. Its a bit of an indirect way of setting it, instead of directly using the Client Id, but thats how it works right now (0.3.5)
  • Name: The name of a gameobject, visible in game.
    • Getter: mName = mObj:GetName()
    • Setter: mObj:SetName("Samogh the Blacksmith")
  • Hue: The hue of an object which mixes with the texture colors. You cannot force an object to be magenta, when its texture color is green.
    • Getter: mHue = mObj:GetHue()
    • Setter: mObj:SetHue("FF0000")
For mobiles:
  • Base Movement Speed: Guess what? This is how fast the mob can move. ;)
    • Getter: mSpeed = mObj:GetBaseMoveSpeed()
    • Setter: mObj:SetBaseMoveSpeed(3) Run, Forrest, run ....
  • Location: Location of the object in the world
    • Getter: mLoc = mObj:GetLoc()
    • Setter: mObj:SetWorldPosition(Loc(0,0,0)) The example positions the object at the world origin.
    • Setter2: mObj:MoveToContainer(mBag, Loc(0,0,0)) Object gets put into container mBag at relative coordinates 0,0,0 inside the container.
    • You can use SetWorldPosition() to move an object out of a container into the world.
  • Rotation: Rotation of the object in its own local coordinate system
    • Getter: mRot = mObj:GetRotation() Returns a Loc object whith three angles in degrees which describe the object rotation around the axis x,y and z. The order of rotation is: z, y, x (The Unity standard of rotation)
    • Setter: mObj:SetRotation(Loc(45,30,60)) The example sets the rotation of the object to 60° around its Z axis, 45° around its X axis and 30° around its Y axis.
  • Scale: Scaling of the object in its own local coordinate system
    • Getter: mScale = mObj:GetScale() Returns a Loc object whith three scale factors which describe the object scaling in each axis x,y and z.
    • Setter: mObj:SetScale(Loc(2,4,2)) The example sets the scale of the object to 2x at its x and Z axis, and 4x at its X axis. So it is 2 times taller than wide and stretched up high (y-axis). This has been changed. Formerly (pre 0.3.5) Scale was only scalar, now its a vector.
  • Object Variables: A gameobject can have Object Variables, additional data we can assign, query, change and delete from script.
    • Getter: mValue = mObj:GetObjVar("MyVariable")
    • Getter2: mBool = mObj:HasObjVar("MyVariable") Returns a boolean if the ObjVar exists.
    • Getter3: mObjVarTable = mObj:GetAllObjVars() Returns a Dictionary with ObjVar names as keys and values as values
    • Setter: mObj:SetObjVar("MyVariable", SomeValue) Type of the ObjVar is the type of the value assigned.
    • Deletion: mObj:DelObjVar("MyVariable")
    • Caveat: SetObjVar is asynchronous, when used from another object and synchronous when used from script attached to the object itself. This means, setting an objvar on another object than the one the script is running on will not be executed immediately !!!
  • Shared Object Properties: A gameobject can have Shared Object Properties, additional data we can assign, query, change and delete from script and which is shared with the client. Generally this data is data the clients needs for certain tasks, like displaying the object properly. Which of this data can be used depends on the object type, given by its ClientId and is predefined in the engine.
    • Shared Object Properties can be Numbers, Strings, Booleans (Not sure about Integers and other non-Lua types here right now ~Y.)
    • Getter: mValue = mObj:GetSharedObjectProperty("NoInteract")This would return the Interaction flag for the object, a boolean in this case.
    • Getter2: mSharedPropTable = mObj:GetAllSharedObjectProperties() Returns a Dictionary with Shared Object Property names as keys and values as values
    • Setter: mObj:SetSharedObjectProperty("Weight", -1) Object cannot be lifted anymore and is "glued to the ground".
    • Deletion: ???
    • Caveat: SetSharedObjectProperty might probably be asynchronous, when used from another object (CS pls confirm). Tests are necessary.

Tips

  • Obj variables should only contain data you are intending to persist to disk, especially since reading from an ObjVar immediately after setting it will not always return the new value.
  • GameObj can communicate between each other using SendMessage just like Modules.