This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
cfpython:cfpython [2020/03/04 21:22] meta-aeon [Check] |
cfpython:cfpython [2024/05/20 16:15] (current) leaf Merge in changes from the wiki-data cfpython page |
||
---|---|---|---|
Line 19: | Line 19: | ||
**Important note:** the API, and other parts, are valid for code's ''trunk''. ''branch'' contains hopefully all the changes too, but there may be differences. Also, links to SVN are to trunk. | **Important note:** the API, and other parts, are valid for code's ''trunk''. ''branch'' contains hopefully all the changes too, but there may be differences. Also, links to SVN are to trunk. | ||
+ | As from September, 14th, 2021, a ''.pyi'' file is available in ''maps/python/pyi''. It lists all available functions and variables, though functions aren't documented, so no parameters or description. | ||
====== General information ====== | ====== General information ====== | ||
- | The plugin has access to all built-in functions of Python, and its regular libraries. Python version being used depends on the platform the server was built, but should be 2.3 or higher. FIXME {is that always true?} | + | The plugin has access to all built-in functions of Python, and its regular libraries. Python version being used depends on the platform the server was built, but must be 3 or higher. FIXME {is that always true?} |
Using a library not part of Python's default distribution is discouraged as this introduces new dependencies. | Using a library not part of Python's default distribution is discouraged as this introduces new dependencies. | ||
Line 39: | Line 40: | ||
===== How do I hook a script to an object? ===== | ===== How do I hook a script to an object? ===== | ||
- | Python plugin is a [[:server plugin]], thus you need to insert in this object one of the //event_xxx// archetype (see ''[[http://crossfire.svn.sourceforge.net/viewvc/crossfire/arch/trunk/system/|/arch/system]]'' directory). The fields to fill are: | + | Python plugin is a [[server plugin]], thus you need to insert in this object one of the //event_xxx// archetype (see ''[[https://sourceforge.net/p/crossfire/crossfire-arch/ci/master/tree/system|/arch/system]]'' directory). The fields to fill are: |
* **title**: should be //Python// to call the Python plugin. | * **title**: should be //Python// to call the Python plugin. | ||
* **slaying**: contains the path to the Python script to execute. Root refers to the map directory. | * **slaying**: contains the path to the Python script to execute. Root refers to the map directory. | ||
Line 140: | Line 141: | ||
The following constant types exist: | The following constant types exist: | ||
- | * ''AttackType'': AT_xxx constants, as defined in ''[[http://crossfire.svn.sourceforge.net/viewvc/crossfire/server/trunk/include/attack.h?view=markup|include/attack.h]]'' | + | * ''AttackType'': AT_xxx constants, as defined in ''[[https://sourceforge.net/p/crossfire/crossfire-server/ci/master/tree/include/attack.h|include/attack.h]]'' |
- | * ''AttackTypeNumber'': ATNR_xxx constants, as defined in ''[[http://crossfire.svn.sourceforge.net/viewvc/crossfire/server/trunk/include/attack.h?view=markup|include/attack.h]]'' | + | * ''AttackTypeNumber'': ATNR_xxx constants, as defined in ''[[https://sourceforge.net/p/crossfire/crossfire-server/ci/master/tree/attack.h|include/attack.h]]'' |
- | * ''CostFlag'': F_xxx constants, as defined in ''[[http://crossfire.svn.sourceforge.net/viewvc/crossfire/server/trunk/include/define.h?view=markup|include/define.h]]'' (without the F_ prefix) | + | * ''CostFlag'': F_xxx constants, as defined in ''[[https://sourceforge.net/p/crossfire/crossfire-server/ci/master/tree/include/define.h|include/define.h]]'' (without the F_ prefix) |
* ''Direction'': contains NORTH, NORTHEAST, ..., NORTHWEST | * ''Direction'': contains NORTH, NORTHEAST, ..., NORTHWEST | ||
- | * ''EventType'': EVENT_xxx constants, as defined in ''[[http://crossfire.svn.sourceforge.net/viewvc/crossfire/server/trunk/include/plugin.h?view=markup|include/plugin.h]]'' | + | * ''EventType'': EVENT_xxx constants, as defined in ''[[https://sourceforge.net/p/crossfire/crossfire-server/ci/master/tree/include/plugin.h|include/plugin.h]]'' |
- | * ''MessageFlag'': NDI_xxx constants, as defined in ''[[http://crossfire.svn.sourceforge.net/viewvc/crossfire/server/trunk/include/newclient.h?view=markup|include/newclient.h]]'' | + | * ''MessageFlag'': NDI_xxx constants, as defined in ''[[https://sourceforge.net/p/crossfire/crossfire-server/ci/master/tree/include/newclient.h|include/newclient.h]]'' |
- | * ''Move'': movement types, as defined in ''[[http://crossfire.svn.sourceforge.net/viewvc/crossfire/server/trunk/include/define.h?view=markup|include/define.h]]'' | + | * ''Move'': movement types, as defined in ''[[https://sourceforge.net/p/crossfire/crossfire-server/ci/master/tree/include/define.h|include/define.h]]'' |
- | * ''Type'': object type, as defined in ''[[http://crossfire.svn.sourceforge.net/viewvc/crossfire/server/trunk/include/define.h?view=markup|include/define.h]]'' | + | * ''Type'': object type, as defined in ''[[https://sourceforge.net/p/crossfire/crossfire-server/ci/master/tree/include/define.h|include/define.h]]'' |
- | * ''ReplyType'': the rt_xxx constants, reply type, as defined in ''[[http://crossfire.svn.sourceforge.net/viewvc/crossfire/server/trunk/include/define.h?view=markup|include/dialog.h]]'' | + | * ''ReplyType'': the rt_xxx constants, reply type, as defined in ''[[https://sourceforge.net/p/crossfire/crossfire-server/ci/master/tree/include/define.h|include/dialog.h]]'' |
- | * ''AttackMovement'': the various DISTATT, PETMOVE and other constants in the "MONSTER_MOVEMENT" group as defined in [[http://crossfire.svn.sourceforge.net/viewvc/crossfire/server/trunk/include/define.h?view=markup|include/define.h]] | + | * ''AttackMovement'': the various DISTATT, PETMOVE and other constants in the "MONSTER_MOVEMENT" group as defined in [[https://sourceforge.net/p/crossfire/crossfire-server/ci/master/tree/include/define.h|include/define.h]] |
Line 195: | Line 196: | ||
Sets the value the plugin will return to the server when the script exits. Value and effect depend on the event being handled. | Sets the value the plugin will return to the server when the script exits. Value and effect depend on the event being handled. | ||
+ | |||
+ | For "apply" events, ''Crossfire.SetReturnValue(0)'' will cause both the script to run and the item to be applied. ''Crossfire.SetReturnValue(1)'' will instead cause only the script to run - the apply to the item will be intercepted. For example, if a script is attached to a carrot, then ''0'' will run the script and eat the carrot, and ''1'' will run the script without eating the carrot. | ||
==== PluginVersion ==== | ==== PluginVersion ==== | ||
Returns an integer representing the Python plugin version. | Returns an integer representing the Python plugin version. | ||
Line 379: | Line 382: | ||
==== CostStringFromValue ==== | ==== CostStringFromValue ==== | ||
+ | (trunk only) | ||
+ | |||
Parameters: | Parameters: | ||
* ''amount'', long integer | * ''amount'', long integer | ||
Line 416: | Line 421: | ||
Properties in **bold** are read-write, others are read-only. Most properties are mapped to fields of the ''object'' structure. ''Boolean'' values are mapped to the various flags. | Properties in **bold** are read-write, others are read-only. Most properties are mapped to fields of the ''object'' structure. ''Boolean'' values are mapped to the various flags. | ||
- | * **Name**: ''String'' containing the object's name | + | * **Name**: ''String'' containing the object's name, adjusted for the number of objects. Settings this property changes both the singular and plural names |
- | * **NamePl**: ''String'' containing the object's plural name | + | * **NamePl**: ''String'' containing the object's plural name. Changing this property only changes the item's plural name |
+ | * NameSingular: ''String'' containing the object's singular name | ||
* **Title**: ''String'' | * **Title**: ''String'' | ||
* **Race**: ''String'' | * **Race**: ''String'' | ||
Line 477: | Line 483: | ||
* Identified: ''Boolean'' | * Identified: ''Boolean'' | ||
* **Alive**: ''Boolean'' | * **Alive**: ''Boolean'' | ||
- | * DungeonMaster: ''Boolean'' | + | * **DungeonMaster**: ''Boolean'', writable on ''master'' |
* WasDungeonMaster: ''Boolean'' | * WasDungeonMaster: ''Boolean'' | ||
* **Applied**: ''Boolean'' | * **Applied**: ''Boolean'' | ||
Line 598: | Line 604: | ||
Arguments: | Arguments: | ||
- | * ''Crossfire.Object'' representing the spell to case | + | * ''Crossfire.Object'' representing the spell to cast |
* ''Crossfire.Direction'', direction in which the object should cast | * ''Crossfire.Direction'', direction in which the object should cast | ||
* ''String'', optional arguments to the spell (for food creation, ...) | * ''String'', optional arguments to the spell (for food creation, ...) | ||
Line 612: | Line 618: | ||
==== CastAbility ==== | ==== CastAbility ==== | ||
- | Equivalent of ''Cast''. | + | Obsolete, will be removed, use ''Cast''. |
==== ChangeAbil ==== | ==== ChangeAbil ==== | ||
Line 813: | Line 819: | ||
==== Remove ==== | ==== Remove ==== | ||
- | Destroys current object, which then becomes invalid. | + | Destroys current object, which then becomes invalid. If the object is on a map, its inventory is dropped to the ground (except no drop or god given items), else everything is destroyed. |
==== Reposition ==== | ==== Reposition ==== | ||
Line 914: | Line 920: | ||
Arguments: | Arguments: | ||
- | * ''String'', name of object to create | + | * ''String'', arch name of object to create |
* ''Tuple'', containing an ''x'' ''Integer'' and a ''y'' ''Integer'', as coordinates | * ''Tuple'', containing an ''x'' ''Integer'' and a ''y'' ''Integer'', as coordinates | ||
Line 981: | Line 987: | ||
* **MarkedItem**: ''Crossfire.Object'', item the player has marked. | * **MarkedItem**: ''Crossfire.Object'', item the player has marked. | ||
* **Party**: ''Crossfire.Party'', party in which the player is. Note that changing it bypasses a potential party's password. | * **Party**: ''Crossfire.Party'', party in which the player is. Note that changing it bypasses a potential party's password. | ||
+ | * **Transport**: ''Crossfire.Object'' read-only field for the transport object that the player is currently controlling or aboard | ||
==== CanPay ==== | ==== CanPay ==== | ||
Line 1079: | Line 1086: | ||
* Longname: ''String'' | * Longname: ''String'' | ||
* Message: ''String'' | * Message: ''String'' | ||
- | * Next: ''Crossfire.Region'' | + | * <del>Next: ''Crossfire.Region''</del> deprecated, will be ''None'' on master branch |
* JailX, JailY: ''Integer'', coordinates of the jail for this region (trunk only) | * JailX, JailY: ''Integer'', coordinates of the jail for this region (trunk only) | ||
* JailPath: ''String'', path of the jail for this region (trunk only) | * JailPath: ''String'', path of the jail for this region (trunk only) |