Age | Commit message (Collapse) | Author | Files | Lines |
|
This way the scripts can add or replace existing member functions, which
can be useful. As demonstration chr_money and chr_money_change are now
added as Entity.money and Entity.change_money.
Also fixed the banker to use ask_number instead of ask_integer (I had
decided to rename this and apparently forgot the banker).
Mantis-issue: 503
Reviewed-by: Ablu
|
|
Some functions were skipped for now because they may need a new name
or change of behavior. Changes:
chr_warp entity:warp
chr_get_inventory entity:inventory
chr_inv_change entity:inv_change
chr_inv_count entity:inv_count
chr_get_equipment entity:equipment
chr_equip_slot entity:equip_slot
chr_equip_item entity:equip_item
chr_unequip_slot entity:unequip_slot
chr_unequip_item entity:unequip_item
chr_get_level entity:level
chr_get_exp entity:xp
chr_give_exp entity:give_xp
chr_get_rights entity:rights
chr_set_hair_style entity:set_hair_style
chr_get_hair_style entity:hair_style
chr_set_hair_color entity:set_hair_color
chr_get_hair_color entity:hair_color
chr_get_kill_count entity:kill_count
chr_give_special entity:give_special
chr_has_special entity:has_special
chr_take_special entity:take_special
chr_set_special_recharge_speed entity:set_special_recharge_speed
chr_get_special_recharge_speed entity:special_recharge_speed
chr_set_special_mana entity:set_special_mana
chr_get_special_mana entity:special_mana
chr_kick entity:kick
exp_for_level xp_for_level
monster_get_id entity:monster_id
monster_change_anger entity:change_anger
monster_drop_anger entity:drop_anger
monster_get_angerlist entity:angerlist
being_apply_status entity:apply_status
being_remove_status entity:remove_status
being_has_status entity:has_status
being_set_status_time entity:set_status_time
being_get_status_time entity:status_time
being_get_gender entity:gender
being_set_gender entity:set_gender
being_type entity:type
being_walk entity:walk
being_say entity:say
being_damage entity:damage
being_heal entity:heal
being_get_name entity:name
being_get_action entity:action
being_set_action entity:set_action
being_get_direction entity:direction
being_set_direction entity:set_direction
being_apply_attribute_modifier entity:apply_attribute_modifier
being_remove_attribute_modifier entity:remove_attribute_modifier
being_set_base_attribute entity:set_base_attribute
being_get_modified_attribute entity:modified_attribute
being_get_base_attribute entity:base_attribute
being_set_walkmask entity:set_walkmask
being_get_walkmask entity:walkmask
being_get_mapid entity:mapid
chat_message entity:message
being_register entity:register
chr_shake_screen entity:shake_screen
chr_create_text_particle entity:show_text_particle
- entity:position
posX entity:x
posY entity:y
monster_get_name monsterclass:name
item_get_name itemclass:name
|
|
npc_message -> say
npc_choice -> ask
npc_ask_integer -> ask_number
npc_ask_string -> ask_string
npc_trade -> trade
|
|
These functions can only be used in the context of a character talking
to an NPC, so these parameters can be deduced from that context rather
than passing them explicitly all the time.
Simplifies NPC scripting.
|
|
Only moved a single script function to a member for now, will do others
in a separate commit.
|
|
They are now required via the main.lua.
Also made Harmony giving you the plague in order to allow testing.
|
|
Accidently only reordered the order in the definition but not in the calls
|
|
This introduces two callbacks:
- on_update_derived_attribute -> Called to recalculate other derived
attributes.
- on_recalculate_base_attribute -> Called to recalculate a base attribute
(only called for characters. However the
function passed as callback can be useful
for recalculating the derived attributes
as well)
Monsters no longer block recalculation of attributes except HP and Speed.
I saw no sense to keep this.
Fixed constant value in libmana-constants.lua
Dropped bool type of the recalculation functions. It would be difficult to
keep it while pushing all to the script engine and it was unused anyway.
All in all this adds a LOT more flexibillity to projects since they can now
adapt all attributes in the way they want.
|
|
New binds:
- Damage:
- id
- skill
- base
- delta
- cth
- element
- type
- truestrike
- range
- Attack:
- priority
- cooldown
- warmup
- global_cooldown
- damage
- on_attack
- MonsterClass:
- attacks
- ItemClass:
- attacks
|
|
- Made the current charge being saved.
- Added script binds:
- chr_set_special_recharge_speed
- chr_get_special_recharge_speed
- chr_set_special_mana
- chr_get_special_mana
- get_special_info
- Added special info lua class. Functions:
- name
- needed_mana
- rechargeable
- on_use
- on_recharged
- category
Further the engine no longer sets charge to 0 after using of specials
this allows more flexbilillity (like failing specials).
Changes on the xml database:
- recharge renamed to rechargeable (needed by client and server)
- needed - the needed mana to trigger a special (server only)
- rechargespeed - the defailt recharge speed in mana per tick (server only)
- target - the type of target (either being or point) (server and client)
I also made the lua engine pushing nil instead of a 0 light userdata when
the pointer was 0.
Database update needed.
Change is tested.
Mana-Mantis: #167, #156
Reviewed-by: bjorn.
|
|
|
|
Scripts mostly execute the Mana script API, and it seems like just
unnecessary verbosity to refer to the 'mana' table all the time. This table
no longer exists now.
Reviewed-by: Erik Schilling
|
|
When creating an NPC, you now provide its optional talk and update functions
directly rather than them being stored in a table on the Lua side and then
called in response to a global callback.
Also fixed an issue with a missing gender parameter to the delayed NPC
creation callback used by NPCs defined on the map (found by Erik while
reviewing this patch).
Reviewed-by: Erik Schilling
|
|
Reviewed-by: Erik Schilling
|
|
Rather than wrapping NPC functions up in coroutines in the Lua side, they
are now managed on the C++ side as "script threads", which are essentially
the same thing.
The main purpose is that the server can now know whether any of these long
running script interactions are still active, which will probably be useful
when adding the ability to reload scripts.
Reviewed-by: Erik Schilling
|
|
We have to be careful with introducing globals now that there is only a
single Lua state, so we shouldn't use globals unnecessarily. Any variable
should be declared 'local' unless there is a reason to make it global.
For additional safety we can also think about disallowing the use of globals
entirely. This also helps to catch typos in scripts.
Reviewed-by: Erik Schilling
|
|
Previously, global function names were defined in the respective XML
definitions of items, monsters and status effects. This was reasonable when
they all had the same state, but now they're sharing the single global
Lua state.
Now the Lua API provides access to the ItemClass, MonsterClass and
StatusEffect instances, on which callbacks for both standard and custom
events can be explicitly set.
Reviewed-by: Erik Schilling
|
|
Reviewed-by: bjorn.
|
|
This includes the quest reply, post reply, death notification and
remove notification.
Also, Script::Ref was changed from a typedef to a small class,
automating initialization and making the check for validness clearer.
Reviewed-by: Erik Schilling
|
|
Rather than relying on the availability of global functions with certain
predefined names, the Lua script now calls API functions to set which
function should be called on these global events.
This mechanism should make it easier to avoid name collisions in the global
namespace, which is important now that there is only a single script state.
For these global events this was not likely to become a problem, but this
solution can also be used for callbacks on specific item or monster types,
or even allow setting callbacks on certain instances.
Reviewed-by: Erik Schilling
Reviewed-by: Yohann Ferreira
|
|
Mostly removed bulky copyright headers and fixed indentation and line length.
Reviewed-by: Yohann Ferreira
Reviewed-by: Erik Schilling
|
|
No more Lua state for each status effect, monster, item effect or map. All
scripts are loaded into the same state. This should be more efficient overall
and make it easier to implement dynamic reloading of the scripts in the
future.
Now, this introduces the problem of name collisions between different Lua
scripts. For now this is solved by using more specific function names, like
'tick_plague' and 'tick_jump' rather than just 'tick'. The plan is however
to get rid of these globals, and register these callbacks from the script,
so that they can be local functions without the danger of colliding with
other scripts.
Reviewed-by: Erik Schilling
Reviewed-by: Yohann Ferreira
|
|
It's easier to just talk about world data and to modify it as a whole.
If there is really a need to separate it, a project can still choose to do
that (and in whatever suitable way). There is no need to enforce this
separation or to do it in our example.
Reviewed-by: Erik Schilling
|