summaryrefslogtreecommitdiff
path: root/src/scripting
AgeCommit message (Collapse)AuthorFilesLines
2011-04-27Added a simple crafting systemPhilipp Sehmisch4-0/+63
A client can craft something using the @craft command. The command needs a list of item names and amounts. The gameserver checks if the character has these items in the inventory and then passes the list together with the character handle to the lua script function on_craft in the script file scripts/crafting.lua. This function can then be used to evaluate if the list is a valid crafting combination and when this is the case take or give items. Implemented two example crafting scripts there, one which enforces exact item order and amount and one which doesn't. Both are disabled per default and one needs to be enabled by uncommenting a line. Also gave the player group permission to use the @craft command in permissions.xml and added two new items (wood and iron) required for the example crafting combination. Resolves: #333 Reviewed-by: bcs86, Bertram
2011-03-18Improved error handling in chr_shake_screen Lua functionThorbjørn Lindeijer1-22/+10
It's better to use luaL_checkint than manually checking and printing out an error, since using the helper function makes a more informative error message. Also, scripts errors need to be raised before constructing objects, since due to the way Lua does error handling the destructors of the objects will not be called. Also fixed an issue with the 4th parameter, which was first cast to integer and then multiplied by 10000. Now the multiplication happens before the casting to integer. Reviewed-by: Crush
2011-03-17Micro-optimizations related to std::stringThorbjørn Lindeijer2-3/+3
* Rely on the fact that a std::string is empty by default * Use std::string::empty() rather than comparing to "" * Construct with std::string() rather than from "" Reviewed-by: Bertram
2011-03-14Script binding for the new screen shake effect.Philipp Sehmisch1-0/+45
The new lua function mana.chr_shake_screen can cause a screen shake for a single client with variable x-intensity, y-intensity, decay and duration. I also added an example script which causes tremors for nearby characters with intensity and direction relative to a specific point. The function is not referenced on the example map because it is quite distracting.
2011-03-12Removed a bunch of silly documentationThorbjørn Lindeijer2-9/+0
A C++ developer should be able to recognize a constructor and a destructor by just looking at it, so let's stop writing down the obvious. :)
2011-03-09Renamed GameState::insertSafe() to inserOrDelete.Yohann Ferreira1-1/+1
This reflects much more what the function does IMHO. Trivial.
2011-03-09Made the monster creation delayed, to avoid crashing.Yohann Ferreira1-5/+1
Creation of monsters shouldn't be done during game state update. So we delay their insertion after the update to avoid a crash in debug builds and weird stuff happening in release builds. Reviewed-by: Thorbjorn.
2011-03-06Small fixes coming from my comment on issue #77.Yohann Ferreira1-4/+4
Trivial.
2011-03-04Implemented persistent world and map variablesPhilipp Sehmisch1-1/+91
The gameserver now receive a copy of all world state variables when they are accepted by the accountserver and receive a copy of all map state variables of a map when they register it successfully. Implemented LUA script bindings for getting and setting these variables. When such a variable is set, the accountserver is notified about this change. Changes to world state variables are then propagated to all gameservers by the accountserver. Be aware that when a gameserver is updating a map, there is no check if it is actually responsible for said map. But I consider this not a security flaw, because authenticated game servers are considered to be trustworthy in a lot of other situations, too. Also renamed "quest" to "character variable" in the sourcecode. Reviewed-by: Bertram
2011-02-20Fixed enabling/disabling npcs by enqueuing the insertion.Yohann Ferreira1-2/+1
This permits to handle such operation after the object locking, thus avoiding to fail on the assertion: assert(!dbgLockObjects); when inserting a npc. Reviewed-by: Ablu.
2011-02-11Fix basic money handling using the ATTR_GP attribute.Yohann Ferreira1-4/+18
Reviewed-by: Freeyorp.
2011-02-11Added lua attributes getters/setters thanks to Freeyorp.Yohann Ferreira1-68/+155
2011-02-08Implemented LUA binding to get the gender of a characterPhilipp Sehmisch1-0/+17
The function is named mana.chr_get_gender. It returns 0 for male and 1 for female. libmana-constants.lua defines the variables GENDER_MALE and GENDER_FEMALE with these values. Also made the banker NPC refer to the gender of the player character. Reviewed-by: Jaxad0127
2011-01-30Revert "Fixed the money handling."Jared Adams1-25/+4
This reverts commit b2209cbe93aa12dcd4e4e3b9a7cd8b13ed5713e9. Money should be handled through attributes, not magic numbers.
2011-01-31Fixed the money handling.Yohann Ferreira1-4/+25
- At character's attributes recalculation when necessary. - In the lua scripting functions.
2011-01-09Fix being direction discrepancies by syncing the BeingDirection.Yohann Ferreira1-1/+1
The server was actually using the bitmask enum while the the client still sent another one, creating discrepancies. A second problem is that the being direction was not properly initialized and not updated while it was moving. Reviewed-by: Jaxad.
2011-01-03Cleaned up and document a bit more the speed conversion functions.Yohann Ferreira1-1/+1
Trivial fix.
2010-12-29Moved parts needing to be in sync with the client in protocol.h.Yohann Ferreira1-1/+1
Trivial fix.
2010-12-08Fix return codes for many lua functionsFreeyorp1-6/+6
Reviewed-by: Bertram
2010-12-08Minor cleanup in a number of script functionsFreeyorp1-30/+6
Reviewed-by: Bertram
2010-12-08Fix many compiler warnings.Freeyorp1-2/+2
Reviewed-by: Bertram
2010-11-14Renamed .hpp files into .h for consistency.Yohann Ferreira7-41/+41
Also added an header to the autoattack.{h,cpp} files. Big but trivial fix.
2010-11-03Renamed write{Byte,Short,Long} to writeInt{8,16,32}Thorbjørn Lindeijer1-9/+9
Mainly for consistency with the client, and the general consensus was that these numbered versions were clearer.
2010-08-29Merge branch 'testing'Freeyorp1-62/+21
Conflicts: src/account-server/storage.cpp src/game-server/being.cpp src/game-server/being.hpp src/game-server/character.cpp src/game-server/character.hpp src/game-server/gamehandler.cpp src/game-server/inventory.cpp src/scripting/lua.cpp src/sql/mysql/createTables.sql src/sql/sqlite/createTables.sql
2010-08-22Some coding style tweaksThorbjørn Lindeijer1-6/+12
2010-08-22Pass a script name to Lua for proper reporting of error locationsThorbjørn Lindeijer4-9/+12
Now the Lua file name shows up in the error message and stack traceback, or the map file and object name in case of a script embedded in a map file.
2010-08-22Rename some stuff to conform to naming conventionsThorbjørn Lindeijer4-26/+25
2010-08-22Print out a backtrace when a Lua error is raisedThorbjørn Lindeijer2-20/+26
The backtrace is printed by using debug.traceback as error handler when calling Lua functions. At the moment it still looks pretty ugly since Lua is not aware of the file names of the scripts (to be fixed). Reviewed-by: Jared Adams
2010-08-22Print out the actual error message in case of a syntax errorThorbjørn Lindeijer1-3/+7
Should help to locate the problem. Reviewed-by: Jared Adams
2010-08-21Perform more detailed argument checking in Lua functionsThorbjørn Lindeijer1-154/+101
Based on helper functions in the auxiliary library. Reviewed-by: Yohann Ferreira
2010-07-30Merge branch 'master' of gitorious.org:mana/manaservYohann Ferreira1-5/+11
Conflicts: src/game-server/itemmanager.cpp
2010-07-23Added a simple sanity check to avoid a gameserver crash at login.Yohann Ferreira1-5/+11
No review asked.
2010-07-10New attribute system and major changes to many low-level areas.Freeyorp1-58/+21
Attribute system: Structure is no longer completely hardcoded. Attributes and structure is defined by new xml file (defaulting to stats.xml) Structure defines non-base modifications to an attribute, to be used by modifiers from items, effects, etc. Calculating the base value for core attributes is still done in C++ (and for such fundamental elements the only reason I can think of to do it any other way is perhaps being able to quickly change scripts without a compile could be useful for testing, but such things are a low priority anyway) Item structure: Modifiers are now through triggers rather than single events. This also removes hardcoded types - an item could be both able to be equipped and be able to be activated. Item activation no longer consumes by default, this must be specified by the property <consumes /> inside the trigger. Currently only attribute modifications, autoattacks, and consumes are defined as effects, but stubs for others do exist. Autoattacks are currently non-functional, and this should be rectified with some urgency. Auto Attacks: AutoAttacks are now separate entities, though not fully complete, nor fully integrated with all beings yet. Integration with the Character class is urgent, integration with other Being children less so. When fully integrated this will allow for multiple autoattacks, through equipping multiple items with this as an equip effect or even through other means if needed. Equipment structure: As ItemClass types are no longer hardcoded, so too are equip types. An item have multiple ways to be equipped across multiple equipment slots with any number in each slot. Character maximums are global but configurable. Miscellaneous: Speed, money, and weight are now attributes. Some managers have been changed into classes such that their associated classes can have them as friends, to avoid (ab)use of public accessors. The serialise procedure should also be set as a friend of Character (both in the account- and game- server) as well; having public accessors returning iterators is simply ridiculous. Some start for such cleanups have been made, but this is not the primary focus here. Significant work will need to be done before this is resolved completely, but the start is there. BuySell::registerPlayerItems() has been completely disabled temporarily. The previous function iterated through equipment, yet in the context I think it is intended to fill items? I have been unable to update this function to fit the modifications made to the Inventory/Equipment/Possessions, as I am unsure what exactly what it should be doing. ItemClass::mSpriteId was previously unused, so had been removed, but I notice that it was used when transmitting equipment to nearby clients. Experimentation showed that this value was never set to anything other than 0, and so has been left out of the ItemManager rewrite. I am not entirely sure what is happening here, but it should be worth looking into at a later time, as I am not sure how equipment appearences would be sent otherwise.
2010-07-09Added LUA script bindings for manipulating the specials available to a ↵Philipp Sehmisch5-1/+122
character. Added script call for getting the cost of a special (recharge only for now) Deleting specials works server-sided but the client isn't informed about it properly. Specials without recharge cost don't appear for the player. Both of these features require an additional netcode message. Reviewed-by: Freeyorp
2010-05-30Copied basic Lua libs back from tmwserv-data and added dummy dataThorbjørn Lindeijer1-2/+1
The dummy data is currently mostly empty data though, so still nothing to see as far as the example content is concerned. Reviewed-by: Bertram
2010-05-29Only skip the UTF-8 BOM for Lua scriptsThorbjørn Lindeijer2-4/+13
libxml2 should be able to handle files with a BOM fine. Reviewed-by: Bertram
2010-05-28Modified the npc_trade() lua function to permit selling the whole player ↵Yohann Ferreira3-14/+89
inventory. It permits to open a sell box with every items in the player inventory as requested by Striker. Also added different return value support to both the buy selling functions, and made fixes where relevant. The test.lua script will be upgraded to show examples in a next commit. What's left to be done is to fix the inventory handling for both selling functions. (Sigh...) Concerns: Manasource mantis: #78, #101. Reviewed-by: Jaxad0127
2010-05-21Added a package loader that goes through the resource managerThorbjørn Lindeijer1-0/+25
Fixes issues with finding Lua scripts after changing the way client and server data paths are set up. Lua scripts can now use 'require' with paths relative from the serverDataPath to include other Lua scripts. Reviewed-by: Jared Adams
2010-05-20Removed unused parameter from being_get_speed Lua functionThorbjørn Lindeijer1-4/+4
Also updated the link to the documentation and fixed the documentation for being_set_speed.
2010-05-16Changed and split up the default location for loading dataThorbjørn Lindeijer1-4/+4
Instead of loading data from a 'data' directory in the current working directory, the server now uses clientDataPath and serverDataPath as specified in the configuration. This removes the need to set up symbolic links in order to merge these two types of data. The default values point to example/clientdata and example/serverdata, where a minimal example world can be developed to make setting up an initial server quick and easy. The XML::Document convenience class was copied over from the client. Also, the ResourceManager is now shared between both servers, since the account client is reading items.xml. Reviewed-by: Jared Adams
2010-04-25Added a Byte Order Mask (BOM) filter to the ResourceManager.Bertram1-1/+2
Reviewed by: Jaxad0127
2010-04-11Implemented handler for on_chr_death and put the loading of the global ↵Philipp Sehmisch3-2/+19
script into a method of class LuaScript Reviewed-by: Jared Adams <Jaxad0127@gmail.com>
2010-04-11Implemented global event function call to on_chr_deathPhilipp Sehmisch2-0/+22
Reviewed-by: Jared Adams <Jaxad0127@gmail.com>
2010-04-11Added global lua event script (only on_being_death_accept for now)Philipp Sehmisch2-0/+3
Reviewed-by: Jared Adams <Jaxad0127@gmail.com>
2010-03-13Add methods to get and set being speedJonathan Kolberg1-1/+35
Signed-off-by: Thorbjørn Lindeijer <thorbjorn@lindeijer.nl>
2010-02-25Added script bindings for healing characters and other beings.Philipp Sehmisch1-0/+34
Reviewed-by: Jared Adams <jaxad0127@gmail.com>
2010-02-07Update Copyright date for Manaserv.Bertram7-7/+7
2010-01-17Added some missing headers, and added some missing files to Makefile.amChuck Miller1-0/+2
2010-01-16Prevented segmentation fault when calling the lua set_quest_var function ↵Philipp Sehmisch1-1/+6
with an illegal character handle.
2010-01-08Added script binding for checking the kill count for each monster so that ↵Philipp Sehmisch1-0/+29
uninventive server admins can implement their boring kill-ten-rats quests.