StendhalScripting/Lua: Difference between revisions

Jump to navigation Jump to search
Content deleted Content added
imported>AntumDeluge
Misc: typecasting
imported>AntumDeluge
add categories
 
(6 intermediate revisions by the same user not shown)
Line 50: Line 50:
-- table variable
-- table variable
local var4 = {}
local var4 = {}
</pre>

=== Strings ===

==== String Concatenation ====

String concatenation is simple, much like Java uses a plus operator (<code>+</code>) to join strings, Lua uses two periods (<code>..</code>).

Example:
<pre>
-- create a string variable
local var = "Hello"

-- append another string
var = var .. " world!"

print(var) -- prints "Hello world!"
</pre>
</pre>


Line 261: Line 278:
=== Add Zone Music ===
=== Add Zone Music ===


Music can be added to zones with the <code>setZoneMusic</code> global function. It supports the following arguments:
Music can be added to zones with the <code>game:setMusic</code> function. It supports the following arguments:
* ''filename:'' Basename of the OGG audio file to use stored in {{StendhalFile|master|data/music|data/music}}.
* <span style="color:darkgreen; font-style:italic;>filename:</span> Basename of the OGG audio file to use stored in {{StendhalFile|master|data/music|data/music}}.
* <span style="color:darkgreen; font-style:italic;>args:</span> A table of key=value integers.
* ''volume:'' (optional) Volume level.
* Valid keys:
* ''x:'' (optional) The horizontal point for the source of the music.
** <span style="color:darkblue; font-style:italic;">volume:</span> Volume level (default: 100).
* ''y:'' (optional) The vertical point for the source of the music.
** <span style="color:darkblue; font-style:italic;">x:</span> The horizontal point for the source of the music (default: 1).
* ''radius:'' (optional) The radial range at which the music can be heard.
** <span style="color:darkblue; font-style:italic;">y:</span> The vertical point for the source of the music (default: 1).
** <span style="color:darkblue; font-style:italic;">radius:</span> The radial range at which the music can be heard (default: 10000).


Example:
Example:
<pre>
<pre>
if game:setZone("0_semos_plains_n") then
if game:setZone("0_semos_plains_n") then
setZoneMusic("pleasant_creek_loop", 85)
game:setMusic("pleasant_creek_loop", {volume=85, radius=100})
end
end
</pre>
</pre>
Line 318: Line 337:
}
}


npc:setPath(nodes)
-- Use helper object to create NPC path
entities:setPath(npc, nodes)


-- Dialogue
-- Dialogue
Line 347: Line 365:
This simply adds a response to saying "hello" & sets the NPC to attend to the player (equivalent of <code>frank:addGreeting("Hello")</code>).
This simply adds a response to saying "hello" & sets the NPC to attend to the player (equivalent of <code>frank:addGreeting("Hello")</code>).


For more complicated behavior, we need to use some helper methods. If we want to check a condition we use the <code>newCondition</code> global function:
For more complicated behavior, we need to use some helper methods. If we want to check a condition we use the <code>conditions:create</code> method. The first parameter is the string name of the ChatCondition we want to instantiate. The second parameter is a table that contains the values that should be passed to the ChatCondition constructor.

Example:
<pre>
<pre>
frank:add(ConversationStates.IDLE,
frank:add(ConversationStates.IDLE,
ConversationPhrases.GREETING_MESSAGES,
ConversationPhrases.GREETING_MESSAGES,
newCondition("PlayerHasItemWithHimCondition", "money"),
conditions:create("PlayerHasItemWithHimCondition", {"money"}),
ConversationStates.ATTENDING,
ConversationStates.ATTENDING,
"Hello.",
"Hello.",
Line 359: Line 379:
In this scenario, the NPC will only respond if the player is carrying <item>money</item>.
In this scenario, the NPC will only respond if the player is carrying <item>money</item>.


A NotCondition instance can be created with the <code>newNotCondition</code> global function or using the <code>conditions.not</code> method:
A NotCondition instance can be created with the <code>actions:notCondition</code> method:


Example usage:
Example usage:
<pre>
<pre>
local condition = conditions.notCondition(conditions:create("PlayerHasItemWithHimCondition", {"money"})
-- using newNotCondition
local condition = newNotCondition("PlayerHasItemWithHimCondition", "money")

-- using conditions.not
local condition = conditions.not(newCondition("PlayerHasItemWithHimCondition", "money")
</pre>
</pre>


To add a ChatAction, we use the <code>newAction</code> global function:
To add a ChatAction, we use the <code>actions:create</code> method. Its usage is identical to <code>conditions:create</code>.

Example:
<pre>
<pre>
frank:add(ConversationStates.IDLE,
frank:add(ConversationStates.IDLE,
ConversationPhrases.GREETING_MESSAGES,
ConversationPhrases.GREETING_MESSAGES,
newCondition("PlayerHasItemWithHimCondition", "money"),
conditions:create("PlayerHasItemWithHimCondition", {"money"}),
ConversationStates.ATTENDING,
ConversationStates.ATTENDING,
"Hello.",
"Hello.",
newAction("NPCEmoteAction", "looks greedily at your pouch of money.", false))
actions:create("NPCEmoteAction", {"looks greedily at your pouch of money.", false}))
</pre>
</pre>


Line 385: Line 403:
ConversationPhrases.GREETING_MESSAGES,
ConversationPhrases.GREETING_MESSAGES,
{
{
newCondition("PlayerHasItemWithHimCondition", "money"),
conditions:create("PlayerHasItemWithHimCondition", {"money"}),
newNotCondition(newCondition("NakedCondition")),
conditions:notCondition(conditions:create("NakedCondition")),
},
},
ConversationStates.ATTENDING,
ConversationStates.ATTENDING,
nil,
nil,
{
{
newAction("SayTextAction", "Hello."),
actions:create("SayTextAction", {"Hello."}),
newAction("NPCEmoteAction", "looks greedily at your pouch of money.", false),
actions:create("NPCEmoteAction", {"looks greedily at your pouch of money.", false}),
})
})
</pre>
</pre>
Line 401: Line 419:
<pre>
<pre>
local conditions = {
local conditions = {
newCondition("PlayerHasItemWithHimCondition", "money"),
conditions:create("PlayerHasItemWithHimCondition", {"money"}),
{
{
newNotCondition(newCondition("NakedCondition")),
conditions:notCondition(conditions:create("NakedCondition")),
},
},
}
}
Line 413: Line 431:
nil,
nil,
{
{
newAction("SayTextAction", "Hello."),
actions:create("SayTextAction", {"Hello."}),
newAction("NPCEmoteAction", "looks greedily at your pouch of money.", false),
actions:create("NPCEmoteAction", {"looks greedily at your pouch of money.", false}),
})
})

</pre>
</pre>


Line 511: Line 528:
bestiary:setOwner("Ted")
bestiary:setOwner("Ted")
</pre>
</pre>

= See Also =

* [[StendhalScripting/LuaAPI|Lua API]]


[[Category:Stendhal]]
[[Category:Documentation]]
[[Category:API]]
[[Category:Scripting]]
[[Category:Lua]]