33 #define EXISTCHECK(ob) { \ 34 if (!ob || !ob->obj || (object_was_destroyed(ob->obj, ob->obj->count))) { \ 35 PyErr_SetString(PyExc_ReferenceError, "Crossfire object no longer exists"); \ 44 #define TYPEEXISTCHECK(ob) { \ 45 if (!ob || !PyObject_TypeCheck((PyObject*)ob, &Crossfire_ObjectType) || !ob->obj || (object_was_destroyed(ob->obj, ob->obj->count))) { \ 46 PyErr_SetString(PyExc_ReferenceError, "Not a Crossfire object or Crossfire object no longer exists"); \ 50 #define EXISTCHECK_INT(ob) { \ 51 if (!ob || !ob->obj || (object_was_destroyed(ob->obj, ob->obj->count))) { \ 52 PyErr_SetString(PyExc_ReferenceError, "Crossfire object no longer exists"); \ 85 PyErr_SetString(PyExc_TypeError,
"Cannot delete the Title attribute");
89 PyErr_SetString(PyExc_TypeError,
"The Title attribute must be a string");
92 if (!PyArg_Parse(value,
"s", &val))
116 if (value == Py_None)
130 if (!PyArg_ParseTuple(args,
"s|i", &message, &color))
139 const char *knowledge;
142 if (!PyArg_ParseTuple(args,
"s", &knowledge))
149 const char *knowledge;
152 if (!PyArg_ParseTuple(args,
"s", &knowledge))
197 if (!PyArg_Parse(value,
"s", &location))
214 if (!PyArg_Parse(value,
"i", &x))
231 if (!PyArg_Parse(value,
"i", &y))
243 if (!PyArg_ParseTuple(args,
"si", &code, &state))
260 if (!PyArg_ParseTuple(args,
"s", &code))
267 return Py_BuildValue(
"i", state);
276 if (!PyArg_ParseTuple(args,
"si", &code, &state))
293 if (!PyArg_ParseTuple(args,
"s", &code))
300 return Py_BuildValue(
"i", completed);
467 PyErr_SetString(PyExc_TypeError,
"Cannot delete the attribute");
471 PyErr_SetString(PyExc_TypeError,
"The attribute must be a string");
474 if (!PyArg_Parse(value,
"s", &val))
485 if (!PyArg_Parse(value,
"i", &val))
496 if (!PyArg_Parse(value,
"f", &val))
507 if (!PyArg_Parse(value,
"i", &val))
520 PyErr_SetString(PyExc_TypeError,
"Cannot delete the Name attribute");
524 PyErr_SetString(PyExc_TypeError,
"The Name attribute must be a string");
527 if (!PyArg_Parse(value,
"s", &val))
541 PyErr_SetString(PyExc_TypeError,
"Cannot delete the NamePl attribute");
545 PyErr_SetString(PyExc_TypeError,
"The NamePl attribute must be a string");
548 if (!PyArg_Parse(value,
"s", &val))
560 if (!PyArg_Parse(value,
"i", &val))
584 if (!PyArg_Parse(value,
"i", &val))
588 PyErr_SetString(PyExc_TypeError,
"Invalid quantity");
601 if (!PyArg_Parse(value,
"s", &face))
605 PyErr_SetString(PyExc_TypeError,
"Unknown face.");
616 if (!PyArg_Parse(value,
"s", &anim))
620 PyErr_SetString(PyExc_TypeError,
"Unknown animation.");
632 if (!PyArg_Parse(value,
"l", &val))
666 if (!PyArg_Parse(value,
"L", &val))
678 if (!PyArg_Parse(value,
"B", &move))
689 if (!PyArg_Parse(value,
"B", &move))
700 if (!PyArg_Parse(value,
"B", &move))
711 if (!PyArg_Parse(value,
"B", &move))
722 if (!PyArg_Parse(value,
"B", &move))
733 if (!PyArg_Parse(value,
"B", &move))
785 if (!PyArg_ParseTuple(args,
"i", &clone_type))
788 if (clone_type != 0 && clone_type != 1)
790 PyErr_SetString(PyExc_ValueError,
"Clone type must be 0 (object_create_clone) or 1 (object_copy).");
798 PyErr_SetString(PyExc_RuntimeError,
"Clone failed.");
812 if (!PyArg_ParseTuple(args,
"i", &count))
819 PyErr_SetString(PyExc_ValueError, err);
857 return Py_BuildValue(
"i", val);
869 victim = pcause->
obj;
888 return Py_BuildValue(
"i", result);
892 char *message,
buf[2048];
895 if (!PyArg_ParseTuple(args,
"s", &message))
906 PyErr_SetString(PyExc_ValueError,
"too many NPCs");
910 if (strlen(message) >=
sizeof(buf) - 1)
911 cf_log(
llevError,
"warning, too long message in npcSay, will be truncated");
913 snprintf(buf,
sizeof(buf),
"%s says: %s", who->
obj->
name, message);
927 if (!PyArg_ParseTuple(args,
"ii", &x, &y))
947 if (!PyArg_ParseTuple(args,
"i", &resist))
950 return Py_BuildValue(
"l", 0);
959 if (!PyArg_ParseTuple(args,
"ii", &resist, &value))
1013 if (!PyArg_ParseTuple(args,
"s", &spellname))
1043 if (!PyArg_ParseTuple(args,
"L", &to_pay))
1048 return Py_BuildValue(
"i", val);
1061 return Py_BuildValue(
"i", val);
1069 if (!PyArg_ParseTuple(args,
"s", &keyname))
1074 return Py_BuildValue(
"s", val ? val :
"");
1083 if (!PyArg_ParseTuple(args,
"sz|i", &keyname, &value, &add_key))
1094 if (!PyArg_ParseTuple(args,
"li", &delay, &mode))
1105 if (!PyArg_ParseTuple(args,
"s", &whatstr))
1128 if (!PyArg_ParseTuple(args,
"s", &whatstr))
1139 if (!PyArg_ParseTuple(args,
"ii", &x, &y))
1150 if (!PyArg_ParseTuple(args,
"s", &txt))
1191 const char *skill = NULL;
1194 if (!PyArg_ParseTuple(args,
"L|si", &exp, &skill, &arg))
1211 if (!PyArg_ParseTuple(args,
"i", &dir))
1220 if (!PyArg_ParseTuple(args,
"ii", &x, &y))
1228 const char *message = NULL;
1241 op2 = activator->
obj;
1249 if (!PyArg_ParseTuple(args,
"i", &level))
1265 return (left->
obj < right->
obj ? -1 : (left->
obj == right->
obj ? 0 : 1));
1274 Py_INCREF(Py_NotImplemented);
1275 return Py_NotImplemented;
1279 if (result == -1 && PyErr_Occurred())
1284 result = (result == 0);
1287 result = (result != 0);
1290 result = (result <= 0);
1293 result = (result >= 0);
1296 result = (result == -1);
1299 result = (result == 1);
1302 return PyBool_FromLong(result);
1445 { NULL, NULL, NULL, NULL, NULL }
1488 { NULL, NULL, 0, NULL }
1504 return (PyObject *)
self;
1515 Py_TYPE(
self)->tp_free(obj);
1530 return (PyObject *)
self;
1541 Py_TYPE(
self)->tp_free(obj);
1561 PyObject_HashNotImplemented,
1562 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
1563 "Crossfire objects",
1581 { NULL, NULL, NULL, NULL, NULL }
1594 { NULL, NULL, 0, NULL }
1629 if (plwrap != NULL) {
1633 pyobj = (PyObject *)plwrap;
1636 if (wrapper != NULL) {
1637 wrapper->
obj = what;
1640 pyobj = (PyObject *)wrapper;
#define CFAPI_OBJECT_PROP_STR
#define CFAPI_OBJECT_PROP_MAP
static PyObject * Crossfire_Object_Cast(Crossfire_Object *who, PyObject *args)
int cf_object_set_nrof(object *, int nrof)
#define CFAPI_PLAYER_PROP_TRANSPORT
CF_PYTHON_NUMBER_METHODS(Object, Crossfire_Object_Long)
static PyObject * Object_GetIntProperty(Crossfire_Object *whoptr, void *closure)
static PyObject * Crossfire_Object_Apply(Crossfire_Object *who, PyObject *args)
static PyObject * Object_GetMoveAllow(Crossfire_Object *whoptr, void *closure)
#define FLAG_SEE_IN_DARK
if set ob not effected by darkness
long cf_object_get_long_property(object *op, long propcode)
#define CFAPI_OBJECT_PROP_MATERIAL
void cf_object_free_drop_inventory(object *ob)
Wrapper for object_free_drop_inventory().
#define CFAPI_OBJECT_PROP_ANIMATION
#define FLAG_DAMNED
The object is very cursed.
#define FLAG_UNPAID
Object hasn't been paid for yet.
int npc_msg_count
How many NPCs reacted to the text being said.
static int Object_SetPickable(Crossfire_Object *whoptr, PyObject *value, void *closure)
#define CFAPI_OBJECT_PROP_SP
PyObject_HEAD object * obj
static PyObject * Object_GetObjectProperty(Crossfire_Object *whoptr, void *closure)
static PyObject * Crossfire_Object_Arrest(Crossfire_Object *who, PyObject *args)
#define CFAPI_OBJECT_PROP_NAME
static PyObject * Object_GetOtherArchetype(Crossfire_Object *whoptr, void *closure)
static PyObject * Player_GetTitle(Crossfire_Object *whoptr, void *closure)
#define CFAPI_OBJECT_PROP_OB_BELOW
int cf_player_knowledge_has(object *op, const char *knowledge)
Wrapper for knowledge_player_has().
static void Crossfire_Player_dealloc(PyObject *obj)
object * cf_object_change_map(object *op, mapstruct *m, object *originator, int flag, int x, int y)
Wrapper for object_insert_in_map_at().
static PyObject * Crossfire_Object_LearnSpell(Crossfire_Object *who, PyObject *args)
#define CFAPI_OBJECT_PROP_RACE
static int Object_SetMoveType(Crossfire_Object *whoptr, PyObject *value, void *closure)
#define FLAG_SLEEP
NPC is sleeping.
static int Player_SetBedX(Crossfire_Player *whoptr, PyObject *value, void *closure)
void cf_spring_trap(object *trap, object *victim)
Wrapper for spring_trap().
static PyObject * Player_QuestSetState(Crossfire_Player *whoptr, PyObject *args)
#define FLAG_HITBACK
Object will hit back when hit.
#define CFAPI_OBJECT_PROP_WEIGHT
#define CFAPI_OBJECT_PROP_ARCHETYPE
#define CFAPI_OBJECT_PROP_ATTACK_TYPE
void cf_free_string(sstring str)
Wrapper for free_string().
#define FLAG_USE_SCROLL
(Monster) can read scroll
static int Object_SetMoveAllow(Crossfire_Object *whoptr, PyObject *value, void *closure)
#define CFAPI_OBJECT_PROP_FACE
static PyObject * Player_GetParty(Crossfire_Player *whoptr, void *closure)
static int Object_SetFloatProperty(Crossfire_Object *whoptr, PyObject *value, void *closure)
const char * cf_object_get_key(object *op, const char *keyname)
Gets value for specified key, equivalent of object_get_value().
static PyObject * Object_GetPickable(Crossfire_Object *whoptr, void *closure)
#define CFAPI_OBJECT_PROP_GOD
static PyObject * Crossfire_Object_ForgetSpell(Crossfire_Object *who, PyObject *args)
PyObject_HEAD partylist * party
#define CFAPI_OBJECT_PROP_DIRECTION
#define FLAG_USE_ARMOUR
(Monster) can wear armour/shield/helmet
static PyObject * Object_GetExists(Crossfire_Object *whoptr, void *closure)
#define FLAG_STAND_STILL
NPC will not (ever) move.
void cf_object_set_flag(object *ob, int flag, int value)
static std::vector< std::string > split(const std::string &field, const std::string &by)
int cf_object_set_animation(object *op, const char *animation)
Set the object's animation.
static PyObject * Crossfire_Object_Remove(Crossfire_Object *who, PyObject *args)
#define CFAPI_OBJECT_PROP_MAXGP
static PyObject * Object_GetNamePl(Crossfire_Object *whoptr, void *closure)
PyObject * Crossfire_Map_wrap(mapstruct *what)
#define FLAG_FRIENDLY
Will help players.
#define FLAG_IS_FLOOR
Can't see what's underneath this object.
static int Player_SetParty(Crossfire_Player *whoptr, PyObject *value, void *closure)
PyTypeObject Crossfire_MapType
static PyObject * Crossfire_Object_ActivateRune(Crossfire_Object *who, PyObject *args)
static int Crossfire_Object_InternalCompare(Crossfire_Object *left, Crossfire_Object *right)
object * cf_object_insert_in_ob(object *op, object *where)
Wrapper for object_insert_in_ob().
partylist * cf_player_get_party(object *op)
#define CFAPI_OBJECT_PROP_SUBTYPE
void cf_object_set_resistance(object *op, int rtype, int16_t value)
int16_t cf_object_get_resistance(object *op, int rtype)
#define CFAPI_OBJECT_PROP_CONTAINER
static PyObject * Player_GetObjectProperty(Crossfire_Player *whoptr, void *closure)
#define CFAPI_OBJECT_PROP_INVENTORY
static PyObject * Object_GetMoney(Crossfire_Object *whoptr, void *closure)
static int Object_SetNamePl(Crossfire_Object *whoptr, PyObject *value, void *closure)
static PyObject * Player_GetIntProperty(Crossfire_Player *whoptr, void *closure)
#define FLAG_BLIND
If set, object cannot see (visually)
static PyObject * Crossfire_Object_Say(Crossfire_Object *who, PyObject *args)
#define CFAPI_OBJECT_PROP_NAME_PLURAL
static int Object_SetAnim(Crossfire_Object *whoptr, PyObject *value, void *closure)
static PyObject * Crossfire_Object_ReadKey(Crossfire_Object *who, PyObject *args)
PyObject * Crossfire_Archetype_wrap(archetype *what)
int cf_object_pay_item(object *op, object *pl)
Wrapper for pay_for_item().
#define FLAG_CONFUSED
Will also be unable to cast spells.
#define FLAG_STEALTH
Will wake monsters with less range.
static PyObject * Object_GetArchetype(Crossfire_Object *whoptr, void *closure)
unsigned char MoveType
Typdef here to define type large enough to hold bitmask of all movement types.
#define FLAG_RANDOM_MOVE
NPC will move randomly.
#define CFAPI_OBJECT_PROP_OWNER
#define FLAG_USE_WEAPON
(Monster) can wield weapons
#define CFAPI_OBJECT_PROP_MOVE_ON
static PyObject * Player_QuestWasCompleted(Crossfire_Player *whoptr, PyObject *args)
#define CFAPI_OBJECT_PROP_MESSAGE
static int Object_SetName(Crossfire_Object *whoptr, PyObject *value, void *closure)
#define CFAPI_OBJECT_PROP_EXP_MULTIPLIER
static PyObject * Crossfire_Object_SetResist(Crossfire_Object *who, PyObject *args)
void cf_fix_object(object *op)
Wrapper for fix_object().
int cf_object_remove_depletion(object *op, int level)
Wrapper for remove_depletion().
PyObject * Crossfire_Object_wrap(object *what)
Python initialized.
#define object_was_destroyed(op, old_tag)
Checks if an object still exists.
int cf_player_arrest(object *who)
Wrapper for player_arrest().
static PyObject * Crossfire_Object_RichCompare(Crossfire_Object *left, Crossfire_Object *right, int op)
static PyObject * Crossfire_Object_CreateInside(Crossfire_Object *who, PyObject *args)
int cf_object_set_face(object *op, const char *face)
Set the object's face.
static PyObject * Object_GetSStringProperty(Crossfire_Object *whoptr, void *closure)
static PyObject * Object_GetExp(Crossfire_Object *whoptr, void *closure)
object * cf_player_get_marked_item(object *op)
char * cf_object_get_string_property(object *op, int propcode, char *buf, int size)
PyTypeObject Crossfire_PlayerType
void cf_player_knowledge_give(object *op, const char *knowledge)
Wrapper for knowledge_give();.
sstring cf_add_string(const char *str)
Wrapper for add_string().
#define CFAPI_OBJECT_PROP_SLAYING
int cf_object_get_int_property(object *op, int propcode)
int64_t cf_object_perm_exp(object *op)
Wrapper for PERM_EXP macro.
static PyObject * Crossfire_Object_CreateTimer(Crossfire_Object *who, PyObject *args)
#define FLAG_USE_RING
(Monster) can use rings, boots, gauntlets, etc
static PyObject * Player_KnowledgeKnown(Crossfire_Player *who, PyObject *args)
static PyObject * Object_GetMoveType(Crossfire_Object *whoptr, void *closure)
static void add_object_assoc(object *key, PyObject *value)
#define CFAPI_OBJECT_PROP_OTHER_ARCH
#define CFAPI_OBJECT_PROP_LAST_SP
#define FLAG_REMOVED
Object is not in any map or invenory.
#define CFAPI_OBJECT_PROP_LAST_GRACE
int cf_object_transfer(object *op, int x, int y, int randomly, object *originator)
Wrapper for transfer_ob().
void cf_object_forget_spell(object *op, object *sp)
Wrapper for do_forget_spell(), except takes an object, not a string.
#define CFAPI_OBJECT_PROP_COUNT
#define FLAG_CAN_ROLL
Object can be rolled.
static int Object_SetMoveOff(Crossfire_Object *whoptr, PyObject *value, void *closure)
#define FLAG_KNOWN_MAGICAL
The object is known to be magical.
void cf_log(LogLevel logLevel, const char *format,...)
Wrapper for LOG().
float cf_object_get_float_property(object *op, int propcode)
void cf_object_learn_spell(object *op, object *spell, int special_prayer)
Wrapper for do_learn_spell().
#define FLAG_IS_USED_UP
When (–food<0) the object will exit.
#define MOVE_ALL
Mask of all movement types.
int cf_object_check_trigger(object *op, object *cause)
Wrapper for check_trigger().
void cf_quest_start(object *pl, sstring quest_code, int state)
Wrapper for quest_start().
#define FLAG_SEE_INVISIBLE
Will see invisible player.
sstring cf_object_get_sstring_property(object *op, int propcode)
void cf_log_plain(LogLevel logLevel, const char *message)
Wrapper for LOG() that uses directly a buffer, without format.
static PyObject * Object_GetMoveOff(Crossfire_Object *whoptr, void *closure)
#define FLAG_UNDEAD
Monster is undead.
void cf_object_say(object *op, const char *msg)
#define CFAPI_PLAYER_PROP_BED_X
void cf_quest_set_player_state(object *pl, sstring quest_code, int state)
Wrapper for quest_set_player_state();.
static PyObject * Crossfire_Object_QueryName(Crossfire_Object *who, PyObject *args)
MoveType cf_object_get_movetype_property(object *op, int propcode)
void cf_player_set_marked_item(object *op, object *ob)
static PyObject * Object_GetMaterial(Crossfire_Object *whoptr, void *closure)
int cf_player_can_pay(object *op)
Wrapper for can_pay().
PyObject_HEAD object * obj
#define CFAPI_OBJECT_PROP_FACING
#define TYPEEXISTCHECK(ob)
This is meant to be used for parameters where you don't know if the type of the object is correct...
static PyObject * Player_GetBedX(Crossfire_Player *whoptr, void *closure)
static void free_object_assoc(object *key)
PyObject * Crossfire_Party_wrap(partylist *what)
static PyObject * Crossfire_Object_CheckInventory(Crossfire_Object *who, PyObject *args)
int cf_timer_create(object *ob, long delay, int mode)
Creates a timer, equivalent of calling cftimer_create().
#define FLAG_ALIVE
Object can fight (or be fought)
#define CFAPI_OBJECT_PROP_ENVIRONMENT
#define FLAG_REFL_SPELL
Spells (some) will reflect from object.
#define CFAPI_OBJECT_PROP_GP
#define CFAPI_OBJECT_PROP_CHA
static PyObject * Crossfire_Object_Fix(Crossfire_Object *who, PyObject *args)
#define CFAPI_PLAYER_PROP_COUNT
#define CFAPI_OBJECT_PROP_MOVE_SLOW_PENALTY
static PyObject * Crossfire_Object_GetResist(Crossfire_Object *who, PyObject *args)
static int Object_SetFace(Crossfire_Object *whoptr, PyObject *value, void *closure)
#define CFAPI_OBJECT_PROP_INT
static PyObject * Crossfire_Object_AddExp(Crossfire_Object *who, PyObject *args)
void cf_object_set_int_property(object *op, int propcode, int value)
static int Player_SetBedY(Crossfire_Player *whoptr, PyObject *value, void *closure)
#define EXISTCHECK_INT(ob)
#define FLAG_CAN_USE_SKILL
The monster can use skills.
#define CFAPI_OBJECT_PROP_LEVEL
object * cf_object_clone(object *op, int clonetype)
Clone an object.
#define CFAPI_PLAYER_PROP_BED_MAP
#define FLAG_UNAGGRESSIVE
Monster doesn't attack players.
#define CFAPI_OBJECT_PROP_MOVE_ALLOW
Information on one title.
#define FLAG_USE_RANGE
(Monster) can apply and use range items
static int Object_SetStringProperty(Crossfire_Object *whoptr, PyObject *value, void *closure)
Setters.
void cf_object_set_float_property(object *op, int propcode, float value)
static PyObject * Object_GetMoveSlow(Crossfire_Object *whoptr, void *closure)
static int Object_SetOwner(Crossfire_Object *whoptr, PyObject *value, void *closure)
int cf_object_user_event(object *op, object *activator, object *third, const char *message, int fix)
#define CFAPI_OBJECT_PROP_RAW_NAME
#define FLAG_NO_SAVE
If set (through plugins), the object is not saved on maps.
double cf_object_get_double_property(object *op, int propcode)
#define FLAG_IDENTIFIED
Item is identifiable (e.g.
static PyObject * Crossfire_Object_Teleport(Crossfire_Object *who, PyObject *args)
#define CFAPI_OBJECT_PROP_FP
#define FLAG_BLOCKSVIEW
Object blocks view.
sstring cf_query_name_pl(object *ob)
static PyObject * Object_GetMoveOn(Crossfire_Object *whoptr, void *closure)
static PyObject * Object_GetName(Crossfire_Object *whoptr, void *closure)
void cf_player_message(object *op, const char *txt, int flags)
#define CFAPI_OBJECT_PROP_LAST_EAT
static PyObject * Object_GetFloatProperty(Crossfire_Object *whoptr, void *closure)
#define CFAPI_OBJECT_PROP_MOVE_OFF
#define CFAPI_OBJECT_PROP_WEIGHT_LIMIT
object * cf_object_insert_object(object *op, object *container)
static PyObject * Crossfire_Object_RemoveDepletion(Crossfire_Object *who, PyObject *args)
#define CFAPI_OBJECT_PROP_CURRENT_WEAPON
static PyObject * Crossfire_Object_InsertInto(Crossfire_Object *who, PyObject *args)
static PyObject * Crossfire_Object_Event(Crossfire_Object *who, PyObject *args)
PyObject_HEAD mapstruct * map
#define CFAPI_OBJECT_PROP_X
static PyMethodDef PlayerMethods[]
static PyObject * Object_GetMap(Crossfire_Object *whoptr, void *closure)
#define FLAG_SCARED
Monster is scared (mb player in future)
static int Object_SetMoveSlow(Crossfire_Object *whoptr, PyObject *value, void *closure)
#define CFAPI_OBJECT_PROP_ENEMY
int cf_object_query_money(const object *op)
Wrapper for query_money().
#define FLAG_ONLY_ATTACK
NPC will evaporate if there is no enemy.
#define FLAG_XRAYS
X-ray vision.
static int Object_SetIntProperty(Crossfire_Object *whoptr, PyObject *value, void *closure)
int64_t cf_object_get_int64_property(object *op, int propcode)
static int Player_SetBedMap(Crossfire_Player *whoptr, PyObject *value, void *closure)
object * cf_object_present_archname_inside(object *op, char *whatstr)
Kinda wrapper for arch_present_in_ob().
#define FLAG_WIZ
Object has special privilegies.
#define CFAPI_OBJECT_PROP_ITEM_POWER
#define FLAG_BEEN_APPLIED
Object was ever applied, for identification purposes.
static PyObject * Player_QuestGetState(Crossfire_Player *whoptr, PyObject *args)
object * cf_object_find_by_arch_name(const object *who, const char *name)
Wrapper for object_find_by_arch_name().
static PyObject * Crossfire_Object_GetOutOfMap(Crossfire_Object *who, PyObject *args)
PyTypeObject Crossfire_PartyType
static PyObject * Crossfire_Object_ChangeAbil(Crossfire_Object *who, PyObject *args)
static PyObject * Crossfire_Object_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
#define FLAG_CAST_SPELL
(Monster) can learn and cast spells
static PyObject * Player_GiveKnowledge(Crossfire_Player *who, PyObject *args)
static PyObject * Crossfire_Object_Reposition(Crossfire_Object *who, PyObject *args)
void cf_object_set_movetype_property(object *op, int propcode, MoveType value)
#define CFAPI_OBJECT_PROP_EXP
mapstruct * cf_object_get_map_property(object *op, int propcode)
void cf_object_remove(object *op)
Wrapper for object_remove().
#define FLAG_RUN_AWAY
Object runs away from nearest player \ but can still attack at a distance.
#define FLAG_IS_THROWN
Object is designed to be thrown.
static PyMethodDef ObjectMethods[]
static PyObject * Player_QuestStart(Crossfire_Player *whoptr, PyObject *args)
static PyObject * Crossfire_Object_Move(Crossfire_Object *who, PyObject *args)
#define CFAPI_OBJECT_PROP_TOTAL_EXP
static int Object_SetMoveOn(Crossfire_Object *whoptr, PyObject *value, void *closure)
int cf_object_apply(object *op, object *author, int flags)
Wrapper for apply_manual().
static const flag_definition flags[]
Flag mapping.
int cf_quest_was_completed(object *pl, sstring quest_code)
Wrapper for quest_was_completed().
#define FLAG_KNOWN_CURSED
The object is known to be cursed.
void cf_player_set_party(object *op, partylist *party)
object * cf_object_get_object_property(object *op, int propcode)
#define FLAG_CURSED
The object is cursed.
#define CFAPI_OBJECT_PROP_DAM
#define CFAPI_OBJECT_PROP_MOVE_TYPE
#define CFAPI_OBJECT_PROP_SKILL
static PyObject * Object_GetMoveBlock(Crossfire_Object *whoptr, void *closure)
#define CFAPI_OBJECT_PROP_AC
#define FLAG_ANIMATE
The object looks at archetype for faces.
int cf_object_pay_amount(object *pl, uint64_t to_pay)
Wrapper for pay_for_amount().
#define FLAG_NO_DAMAGE
monster can't be damaged
#define FLAG_GENERATOR
Will generate type ob->stats.food.
char * cf_player_get_title(object *op, char *title, int size)
static event_registration m
static PyObject * Object_GetTotalExp(Crossfire_Object *whoptr, void *closure)
int cf_object_get_flag(object *ob, int flag)
void cf_object_set_int64_property(object *op, int propcode, int64_t value)
#define MAX_NPC
How many NPCs maximum will reply to the player.
#define CFAPI_OBJECT_PROP_SPEED_LEFT
static PyObject * Object_GetValue(Crossfire_Object *whoptr, void *closure)
static PyObject * Crossfire_Player_CanPay(Crossfire_Player *who, PyObject *args)
int cf_object_move(object *op, int dir, object *originator)
static PyObject * Object_GetFlagProperty(Crossfire_Object *whoptr, void *closure)
sstring name
The name of the object, obviously...
sstring cf_player_get_ip(object *op)
#define CFAPI_OBJECT_PROP_HP
static PyObject * Crossfire_Object_Drop(Crossfire_Object *who, PyObject *args)
#define CFAPI_OBJECT_PROP_TITLE
static PyObject * Crossfire_Object_MoveTo(Crossfire_Object *who, PyObject *args)
static PyObject * Crossfire_Object_KnowSpell(Crossfire_Object *who, PyObject *args)
#define CFAPI_PLAYER_PROP_BED_Y
static PyObject * Crossfire_Object_PayAmount(Crossfire_Object *who, PyObject *args)
#define CFAPI_OBJECT_PROP_SPEED
#define CFAPI_OBJECT_PROP_FRIENDLY
static PyObject * Player_GetMarkedItem(Crossfire_Player *whoptr, void *closure)
uint8_t type
PLAYER, BULLET, etc.
void cf_object_change_exp(object *op, int64_t exp, const char *skill_name, int flag)
Wrapper for change_exp().
static int Player_SetMarkedItem(Crossfire_Player *whoptr, PyObject *value, void *closure)
int cf_object_pickup(object *op, object *what)
#define CFAPI_OBJECT_PROP_ANIM_SPEED
#define FLAG_SPLITTING
Object splits into stats.food other objs.
void cf_object_drop(object *op, object *author)
#define CFAPI_OBJECT_PROP_LUCK
static std::map< object *, PyObject * > object_assoc_table
#define FLAG_APPLIED
Object is ready for use by living.
static int Object_SetQuantity(Crossfire_Object *whoptr, PyObject *value, void *closure)
#define CFAPI_OBJECT_PROP_ARCH_NAME
static PyObject * Crossfire_Object_Clone(Crossfire_Object *who, PyObject *args)
#define FLAG_LIFESAVE
Saves a players' life once, then destr.
#define CFAPI_OBJECT_PROP_DEX
#define CFAPI_OBJECT_PROP_ATTACK_MOVEMENT
static PyObject * Crossfire_Object_Split(Crossfire_Object *who, PyObject *args)
#define FLAG_MAKE_INVIS
(Item) gives invisibility when applied
#define CFAPI_OBJECT_PROP_CON
#define FLAG_STARTEQUIP
Object was given to player at start.
PyTypeObject Crossfire_ObjectType
static int Player_SetTitle(Crossfire_Object *whoptr, PyObject *value, void *closure)
#define CFAPI_OBJECT_PROP_NROF
void cf_player_set_title(object *op, const char *title)
#define CFAPI_OBJECT_PROP_MAXSP
#define FLAG_MONSTER
Will attack players.
static PyObject * Crossfire_Object_PermExp(Crossfire_Object *who, PyObject *args)
CF_PYTHON_OBJECT(Object, Crossfire_Object_dealloc, &ObjectConvert, PyObject_HashNotImplemented, Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, "Crossfire objects",(richcmpfunc) Crossfire_Object_RichCompare, ObjectMethods, Object_getseters, NULL, Crossfire_Object_new)
static PyObject * Crossfire_Object_CastAbility(Crossfire_Object *who, PyObject *args)
int cf_quest_get_player_state(object *pl, sstring quest_code)
Wrapper for quest_get_player_state().
#define NDI_UNIQUE
Print immediately, don't buffer.
static int Object_SetMap(Crossfire_Object *whoptr, PyObject *value, void *closure)
object * cf_object_check_for_spell(object *op, const char *name)
Wrapper for check_spell_known().
static PyObject * Player_GetBedMap(Crossfire_Player *whoptr, void *closure)
static int Object_SetEnemy(Crossfire_Object *whoptr, PyObject *value, void *closure)
#define CFAPI_OBJECT_PROP_INVISIBLE
sstring npc_msgs[MAX_NPC]
What the NPCs will say.
int cf_object_teleport(object *ob, mapstruct *map, int x, int y)
#define CFAPI_OBJECT_PROP_TYPE
#define CFAPI_OBJECT_PROP_POW
static PyObject * Object_GetExpMul(Crossfire_Object *whoptr, void *closure)
static int Object_SetFlagProperty(Crossfire_Object *whoptr, PyObject *value, void *closure)
static PyObject * Player_GetBedY(Crossfire_Player *whoptr, void *closure)
#define FLAG_WAS_WIZ
Player was once a wiz.
#define CFAPI_OBJECT_PROP_GLOW_RADIUS
archetype * cf_object_get_archetype_property(object *op, int propcode)
static PyObject * Crossfire_Object_Long(PyObject *obj)
static int Object_SetValue(Crossfire_Object *whoptr, PyObject *value, void *closure)
CFPContext * current_context
static int Object_SetExp(Crossfire_Object *whoptr, PyObject *value, void *closure)
void cf_object_set_string_property(object *op, int propcode, const char *value)
#define CFAPI_OBJECT_PROP_WC
void cf_object_set_long_property(object *op, int propcode, long value)
static PyGetSetDef Object_getseters[]
#define CFAPI_OBJECT_PROP_MOVE_SLOW
#define CFAPI_OBJECT_PROP_MATERIAL_NAME
static PyObject * Crossfire_Object_Take(Crossfire_Object *who, PyObject *args)
#define CF_IS_PYSTR(cfpy_obj)
#define CFAPI_OBJECT_PROP_MAXHP
static PyObject * Crossfire_Object_WriteKey(Crossfire_Object *who, PyObject *args)
int cf_object_out_of_map(object *op, int x, int y)
tag_t count
Unique object number for this object.
#define FLAG_UNIQUE
Item is really unique (UNIQUE_ITEMS)
static PyObject * find_assoc_pyobject(object *key)
#define FLAG_NO_PICK
Object can't be picked up.
int cf_object_change_abil(object *op, object *tmp)
Wrapper for change_abil().
#define CFAPI_OBJECT_PROP_VALUE
static PyObject * Crossfire_Player_Message(Crossfire_Player *who, PyObject *args)
#define FLAG_REFL_MISSILE
Arrows will reflect from object.
#define CFAPI_OBJECT_PROP_WIS
#define CFAPI_OBJECT_PROP_DURATION
#define CFAPI_OBJECT_PROP_OB_ABOVE
object * cf_create_object_by_name(const char *name)
Wrapper for create_archetype() and create_archetype_by_object_name().
char * cf_query_name(object *ob, char *name, int size)
int cf_object_move_to(object *op, int x, int y)
Wrapper for move_to().
static PyObject * Crossfire_Object_Pay(Crossfire_Object *who, PyObject *args)
#define CFAPI_OBJECT_PROP_Y
#define FLAG_USE_BOW
(Monster) can apply and fire bows
static int Object_SetMoveBlock(Crossfire_Object *whoptr, PyObject *value, void *closure)
int cf_object_cast_spell(object *op, object *caster, int dir, object *spell_ob, char *stringarg)
Wrapper for cast_spell().
static PyObject * Crossfire_Player_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
static PyObject * Crossfire_Object_CheckArchInventory(Crossfire_Object *who, PyObject *args)
static PyObject * Player_GetIP(Crossfire_Player *whoptr, void *closure)
static PyObject * Crossfire_Object_CheckTrigger(Crossfire_Object *who, PyObject *args)
#define CFAPI_OBJECT_PROP_MOVE_BLOCK
static void Crossfire_Object_dealloc(PyObject *obj)
void cf_object_set_object_property(object *op, int propcode, object *value)
object * cf_object_split(object *orig_ob, uint32_t nr, char *err, size_t size)
Wrapper for object_split().
int cf_object_set_key(object *op, const char *keyname, const char *value, int add_key)
Sets a value for specified key, equivalent to object_set_value().
#define FLAG_IS_TURNABLE
Object can change face with direction.
static PyGetSetDef Player_getseters[]