summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2012-04-04Enhanced special supportErik Schilling26-199/+988
- 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.
2012-03-30Fixed Lua error reporting for NPC scriptsThorbjørn Lindeijer1-3/+4
This was due to a naming conflict between the 'debug' function I had recently introduced and the 'debug' library provided by Lua. This caused problems when trying to use debug.traceback for printing a backtrace of the error. There's multiple ways to avoid the naming conflict. I opted for writing the related helper functions in all-caps. Also added an ERROR log function now. As Erik pointed out, there is no conflict anymore with Lua's 'error' function with the new naming style. Reviewed-by: Erik Schilling
2012-03-26Some general cleanups and merged Being::perform() into update()Thorbjørn Lindeijer9-129/+117
The main change here is to remove the separate calling of 'perform' on all beings, and rather rely on the beings to do whatever they were doing in that function when the virtual 'update' function is called. Reviewed-by: Yohann Ferreira
2012-03-21Fixed restoring of persistent floor itemsThorbjørn Lindeijer1-1/+1
Only 1/4th of the floor items were being restored after a reboot of the game server. Reviewed-by: jurkan
2012-03-20Fixed finding characters by nameThorbjørn Lindeijer1-1/+1
This was broken in ba66fbeda8ef9afb6c33eba66d109bac85ebf628 where we forgot to make sure to invert the condition when moving it into the function. Reviewed-by: Erik Schilling
2012-03-17Made skill related function capable of taking the skill name as parameterErik Schilling5-9/+43
Reviewed-by: bjorn.
2012-03-17Added map update function, moved schedules there to keep map contextErik Schilling5-44/+81
Reviewed-by: bjorn.
2012-03-16Use the guild ID when setting guild member rightsThorbjørn Lindeijer1-4/+4
While the plan is to allow only one guild per player, the database currently doesn't enforce this. The expected behavior of this API is that it changes the rights only for the specified guild, but the query was changing the rights of the player in all his guilds. Reviewed-by: Erik Schilling
2012-03-16Fixed remaining compiler warningsThorbjørn Lindeijer6-11/+11
These were unused parameters and one return type with an ignored 'const' qualifier. Reviewed-by: Yohann Ferreira
2012-03-16Fixed Inventory::unequipItem functionThorbjørn Lindeijer1-1/+1
Due to a misplaced semicolon, it always returned false after the first instance. This function is only used by the script function chr_unequip_item. Reviewed-by: Yohann Ferreira
2012-03-16Fixed fastRemoveOne when the element isn't foundThorbjørn Lindeijer1-1/+1
For a non-empty vectors that did not contain the element to remove, the loop would go on forever because a size_t can't become smaller than 0. Fixed by simply iterating forwards.
2012-03-16Fixed the version in the createTables.sql scriptsThorbjørn Lindeijer3-6/+5
Forgot this in 1afbfb7e5fb5c133924ed8d376c6064575fc1c36. Reviewed-by: Bertram, Ablu.
2012-03-15Fixed createTables scriptsErik Schilling2-6/+6
2012-03-14Updated enet to 1.3.3Thorbjørn Lindeijer3-2/+10
The bugfix is not likely to affect us, but better to be up to date anyway.
2012-03-14Added chr_kick() lua bindErik Schilling1-2/+16
Another step towards scriptable @commands. Reviewed-by: bjorn.
2012-03-14Added being_get_mapid lua bindErik Schilling1-2/+18
Another step for being able to make @commands scriptable Reviewed-by: bjorn.
2012-03-14Added get_character_by_name lua bindErik Schilling5-48/+43
Step to be able to handle chatcommands by scripts. Reviewed-by: bjorn.
2012-03-13Fixed problems with map-bound world state variablesThorbjørn Lindeijer10-64/+134
Due to a wrong primary key, which covered only the state name, it was impossible to use the same state name on different maps. This has now been fixed. Another problem was that the map variables were being included in the global variables, because the related database query did not filter on the map_id column properly. While fixing that, the map_id column now allows explicitly marking a state variable as global (with the value 0) or system variables (with the value -1). System variables are currently not accessible from scripts, but that could be changed later. Reviewed-by: Yohann Ferreira Reviewed-by: Erik Schilling
2012-03-13SQLite: Fixed SqLiteDataProvider::processSql handling of multiple rowsThorbjørn Lindeijer1-5/+7
When a prepared SQL statement would have returned multiple rows, this function would try to set the column header names multiple times which throws the AlreadySetException. Currently it doesn't seem that any prepared statements are meant to return multiple rows. Reviewed-by: Yohann Ferreira
2012-03-13Added some convenience wrappers to libmana.luaThorbjørn Lindeijer1-0/+25
Global functions 'warn', 'info', 'debug' as shortcuts to the respective 'log' call, which also support passing multiple parameters at the same time, which will be separated by spaces. Global tables 'map' and 'world' which provide convenient read/write access to map and world state variables. Reviewed-by: Yohann Ferreira
2012-03-13Fixed initial sending of global world variables to the game serverThorbjørn Lindeijer1-1/+2
The AGMSG_REGISTER_RESPONSE message should be sent _after_ adding the global world state variables to it rather than before. Reviewed-by: Yohann Ferreira
2012-03-13Added script bind to set walkmask for beingsErik Schilling9-28/+63
TODO: Inform client about this change. Reviewed-by: bjorn.
2012-03-11Removed "mana." from script function documentationThorbjørn Lindeijer1-102/+99
Forgot to do this in the previous commit.
2012-03-11Converted two Lua scripts from DOS to UNIX line endingsThorbjørn Lindeijer2-132/+132
2012-03-11Register Lua script API functions into the global namespaceThorbjørn Lindeijer19-224/+225
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
2012-03-11Removed the create_npc wrapper and the last two NPC callbacksThorbjørn Lindeijer13-119/+165
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
2012-03-11Removed deprecated NPC helper functionsThorbjørn Lindeijer9-77/+68
Reviewed-by: Erik Schilling
2012-03-11Added callbacks for map/worldvar changesErik Schilling7-3/+148
Reviewed-by: bjorn.
2012-03-10Moved the managing of NPC script coroutines into C++Thorbjørn Lindeijer17-480/+455
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
2012-03-10Removed space before ;Erik Schilling1-1/+1
Reviewed-by: PjotrOrial.
2012-03-07Fixed compileThorbjørn Lindeijer1-1/+1
This was meant to be amended to the previous commit...
2012-03-07Added a function that returns the current map or raises an errorThorbjørn Lindeijer5-136/+80
The new function 'checkCurrentMap' will raise an error when no current map has been set, eliminating the need to do custom error handling all over the place. This also fixes several functions that would otherwise have simply crashed when there was no current map. Also cleaned up some "empty string parameter" checks. Reviewed-by: Erik Schilling
2012-03-07Updated Doxyfile to Doxygen 1.7.4Thorbjørn Lindeijer1-45/+79
2012-03-05Added @effect commandErik Schilling2-0/+49
Usage: @effect <id> @effect <id> <char> @effect <id> <x> <y> Reviewed-by: Bertram.
2012-03-05Added lua function for getting pvp status of mapErik Schilling3-2/+19
mana.map_get_pvp() now returns one of the constants in libmana-constants.lua Reviewed-by: Bertram.
2012-03-05Added possibility to make a being attack an other beingErik Schilling4-35/+61
This allows the script to let the character perform a scripted attack but the character still gets xp and killed monsters give drops. You can now call: mana.being_damage(target, dmg, dmg_delta, accurancy, type, element, source, skill) While on it I also added checks to the being_damage function. Reviewed-by: bjorn, Bertram.
2012-03-05Improved Lua API argument checkingThorbjørn Lindeijer3-580/+194
It's a bit embarrassing the way this has gotten out of hand. The error checking was inconsistent, and in some cases wrong. A host of new helper functions, starting with 'check' rather than 'get', perform error handling on function arguments (they will not return when encountering an error). Reviewed-by: Erik Schilling
2012-03-04SQLite: Added a timeout for trying to acquire a database lockThorbjørn Lindeijer1-0/+4
Without a timeout, trying to write to a locked database fails immediately. Now it will only fail when it can't retrieve a write lock within a second. Still, we need to go through all the SQLite code some time, since there is a lot of error handling missing. We also need to make sure that errors are handled correctly on the higher level. Reviewed-by: Yohann Ferreira
2012-03-03Removed the last direct call to global script functionThorbjørn Lindeijer6-39/+30
The ScriptAction of the TriggerArea (which can be created by mana.trigger_create) was still using a named global function for its callback. Now it also uses a reference to a script function. Since it was the last occurrence of a call to a global script function, I've also removed the Script::prepare(std::string) overload. Reviewed-by: Erik Schilling Mantis-issue: 299
2012-03-03Improved handling of item and monster class parametersThorbjørn Lindeijer3-163/+108
Item and monster classes could already be identified by either their id or their name. Now the explicit values returned by 'get_item_class' and 'get_monster_class' can also be used as parameter. In addition the above two getters learned to understand all three types of parameter as well, rather than only supporting a name. Reviewed-by: Erik Schilling
2012-03-03Made some global Lua variables localThorbjørn Lindeijer3-93/+93
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
2012-03-03Use callbacks for items, monsters and status effectsThorbjørn Lindeijer20-136/+263
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
2012-03-03Added further missing callbacksErik Schilling12-20/+238
Reviewed-by: bjorn.
2012-03-02Converted functions called by LuaScript to callbacksThorbjørn Lindeijer11-80/+139
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
2012-03-02Use callbacks for handling character death and respawnThorbjørn Lindeijer10-33/+125
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
2012-03-02Simplified some of the Lua backendThorbjørn Lindeijer2-70/+30
Mainly introduced a helper function for getting to the Script instance for the current Lua state. Reviewed-by: Erik Schilling Reviewed-by: Yohann Ferreira
2012-03-02A bunch of cleanups to example Lua scriptsThorbjørn Lindeijer10-181/+126
Mostly removed bulky copyright headers and fixed indentation and line length. Reviewed-by: Yohann Ferreira Reviewed-by: Erik Schilling
2012-03-02Merged all the different Lua states into oneThorbjørn Lindeijer28-277/+271
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
2012-02-28Fixed bug with erasing the last status effectThorbjørn Lindeijer1-3/+9
It's not nice to use ++ on an iterator that may be std::map::end(), in my case this caused it to hang indefinitely. Reviewed-by: Yohann Ferreira
2012-02-28Removed unnessecary second check for same conditionErik Schilling1-65/+62
Reviewed-by: Bertram.