|
Crossfire Server, Trunk
|
#include "global.h"#include <assert.h>#include <ctype.h>#include <stdlib.h>#include <string.h>#include "sproto.h"
Include dependency graph for pets.c:Go to the source code of this file.
Functions | |
| static object * | choose_cult_monster (object *pl, const object *god, int summon_level) |
| static object * | fix_summon_pet (archetype *at, object *op, int dir) |
| static object * | get_real_owner (object *ob) |
| static void | mark_inventory_as_no_drop (object *ob) |
| void | pets_attempt_follow (object *for_owner, int force) |
| void | pets_control_golem (object *op, int dir) |
| void | pets_follow_owner (object *ob, object *owner) |
| object * | pets_get_enemy (object *pet, rv_vector *rv) |
| void | pets_move (object *ob) |
| void | pets_move_golem (object *op) |
| int | pets_should_arena_attack (object *pet, object *owner, object *target) |
| int | pets_summon_golem (object *op, object *caster, int dir, object *spob) |
| int | pets_summon_object (object *op, object *caster, object *spell_ob, int dir, const char *stringarg) |
| void | pets_terminate_all (object *owner) |
Those functions deal with pets.
Definition in file pets.c.
Returns a monster (chosen at random) that this particular player (and his god) find acceptable. This checks level, races allowed by god, etc to determine what is acceptable.
| pl | player summoning. |
| god | god the player worships. |
| summon_level | summoning level. |
Definition at line 819 of file pets.c.
References buf, draw_ext_info_format(), MAX_BUF, MSG_TYPE_SPELL, MSG_TYPE_SPELL_FAILURE, obj::name, NDI_UNIQUE, obj::race, races_get_random_monster(), rndm(), and safe_strncpy.
Referenced by pets_summon_object().
Here is the call graph for this function:
Here is the caller graph for this function:This makes multisquare/single square monsters proper for map insertion.
| at | archetype to prepare. |
| op | caster of the spell |
| dir | direction the monster should be placed in. |
Definition at line 434 of file pets.c.
References add_friendly_object(), arch_to_object(), AT_DRAIN, AT_GHOSTHIT, AT_PHYSICAL, CLEAR_FLAG, create_treasure(), FLAG_CHANGING, FLAG_FRIENDLY, FLAG_GENERATOR, FLAG_MONSTER, FLAG_SPLITTING, FLAG_STAND_STILL, freearr_x, freearr_y, GOLEM, GT_STARTEQUIP, llevError, LOG(), mark_inventory_as_no_drop(), monster_check_apply_all(), archt::more, MOVE_WALK, archt::name, object_get_owner(), object_set_enemy(), object_set_owner(), give::op, PETMOVE, PLAYER, QUERY_FLAG, SET_FLAG, and Ice::tmp.
Referenced by pets_summon_golem().
Here is the call graph for this function:
Here is the caller graph for this function:Recursively look through the owner property of objects until the real owner is found
| ob | item we're searching the owner of. |
Definition at line 1059 of file pets.c.
References guildjoin::ob, and object_get_owner().
Referenced by pets_should_arena_attack().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Mark all inventory items as FLAG_NO_DROP.
| ob | the object to modify. |
Definition at line 34 of file pets.c.
References FLAG_NO_DROP, FOR_INV_FINISH, FOR_INV_PREPARE, guildjoin::ob, SET_FLAG, and Ice::tmp.
Referenced by fix_summon_pet(), and pets_summon_object().
Here is the caller graph for this function:| void pets_attempt_follow | ( | object * | for_owner, |
| int | force | ||
| ) |
Check pets so they try to follow their master around the world.
| for_owner | if NULL, check all pets, else only pets for this owner. |
| force | if non zero, then forcibly move the pet close to its owner. If zero then only check pets if they are not on the same map, as computed by on_same_map(), as their owner. |
Definition at line 249 of file pets.c.
References FABS, FLAG_FRIENDLY, FLAG_REMOVED, dragon_attune::force, free_objectlink(), get_friends_of(), guildoracle::list, llevMonster, LOG(), MIN_ACTIVE_SPEED, object_free_drop_inventory(), object_get_owner(), on_same_map(), pets_follow_owner(), PLAYER, QUERY_FLAG, and remove_friendly_object().
Referenced by enter_map(), swap_map(), teleport(), and transfer_ob().
Here is the call graph for this function:
Here is the caller graph for this function:| void pets_control_golem | ( | object * | op, |
| int | dir | ||
| ) |
Makes the golem go in specified direction. This is a really stupid function when you get down and look at it. Keep it here for the time being - makes life easier if we ever decide to do more interesting thing with controlled golems.
| op | golem. |
| dir | desired direction. |
Definition at line 630 of file pets.c.
References give::op.
Referenced by animate_weapon(), and fire().
Here is the caller graph for this function:A pet is trying to follow its owner.
| ob | pet trying to follow. Will be object_remove()'d if can't follow. |
| owner | owner of ob. |
Definition at line 284 of file pets.c.
References draw_ext_info(), FLAG_REMOVED, freearr_x, freearr_y, mapdef::in_memory, llevError, llevMonster, LOG(), obj::map, MAP_IN_MEMORY, MSG_TYPE_SPELL, MSG_TYPE_SPELL_PET, NDI_UNIQUE, guildjoin::ob, object_find_free_spot(), object_insert_in_map_at(), object_remove(), PLAYER, QUERY_FLAG, SIZEOFFREE, obj::type, obj::x, and obj::y.
Referenced by monster_move(), pets_attempt_follow(), and pets_move().
Here is the call graph for this function:
Here is the caller graph for this function:Given that 'pet' is a friendly object, this function returns a monster the pet should attack, NULL if nothing appropriate is found. it basically looks for nasty things around the owner of the pet to attack. This is now tilemap aware.
| pet | who is seeking an enemy. | |
| [out] | rv | will contain the path to the enemy. |
Definition at line 54 of file pets.c.
References obj::attack_movement, obj::attacked_by, obj::attacked_by_count, CLEAR_FLAG, obj::contr, obj::count, FLAG_ALIVE, FLAG_CONFUSED, FLAG_FRIENDLY, FLAG_UNAGGRESSIVE, FOR_MAP_FINISH, FOR_MAP_PREPARE, freearr_x, freearr_y, get_map_flags(), get_rangevector(), get_search_arr(), HEAD, obj::map, monster_can_detect_enemy(), monster_can_see_enemy(), monster_check_enemy(), monster_find_nearest_enemy(), object_get_owner(), object_set_enemy(), on_same_map(), P_IS_ALIVE, P_OUT_OF_MAP, pet_defend, pet_sad, pl::petmode, PETMOVE, pets_should_arena_attack(), PLAYER, QUERY_FLAG, remove_friendly_object(), SIZEOFFREE, Ice::tmp, obj::type, diamondslots::x, obj::x, diamondslots::y, and obj::y.
Referenced by monster_find_enemy().
Here is the call graph for this function:
Here is the caller graph for this function:| void pets_move | ( | object * | ob | ) |
Handles a pet's movement.
| ob | pet to move. |
Definition at line 317 of file pets.c.
References absdir(), obj::contr, rv_vector::direction, draw_ext_info(), obj::enemy, FLAG_ALIVE, FLAG_FRIENDLY, FLAG_UNAGGRESSIVE, FOR_MAP_FINISH, FOR_MAP_PREPARE, freearr_x, freearr_y, get_map_flags(), get_map_from_coord(), GET_MAP_MOVE_BLOCK, get_random_dir(), get_rangevector(), HEAD, llevMonster, LOG(), m, obj::map, obj::more, move_ob(), MSG_SUBTYPE_NONE, MSG_TYPE_MISC, NDI_UNIQUE, guildjoin::ob, guildbuy::ob2, OB_TYPE_MOVE_BLOCK, object_free_drop_inventory(), object_get_owner(), object_remove(), object_set_enemy(), object_was_destroyed, on_same_map(), P_OUT_OF_MAP, pet_sad, pl::petmode, pets_follow_owner(), PLAYER, QUERY_FLAG, RANDOM, remove_friendly_object(), CFweardisguise::tag, obj::type, nlohmann::detail::void(), obj::x, and obj::y.
Referenced by monster_move_no_enemy().
Here is the call graph for this function:
Here is the caller graph for this function:| void pets_move_golem | ( | object * | op | ) |
Handles a golem's movement.
Updated this to allow more than the golem 'head' to attack.
| op | golem to be moved. |
Definition at line 519 of file pets.c.
References attack_ob(), obj::contr, DIRX, DIRY, draw_ext_info(), draw_ext_info_format(), FLAG_ALIVE, FLAG_MONSTER, FOR_MAP_FINISH, FOR_MAP_PREPARE, get_map_flags(), pl::golem_count, llevDebug, LOG(), m, move_ob(), MSG_TYPE_SPELL, MSG_TYPE_SPELL_PET, NDI_UNIQUE, object_free_drop_inventory(), object_get_owner(), object_remove(), object_update(), object_was_destroyed, give::op, P_OUT_OF_MAP, QUERY_FLAG, range_golem, pl::ranges, remove_friendly_object(), CFweardisguise::tag, Ice::tmp, UP_OBJ_FACE, reputation::victim, diamondslots::x, and diamondslots::y.
Referenced by legacy_ob_process().
Here is the call graph for this function:
Here is the caller graph for this function:Determines if checks so pets don't attack players or other pets should be overruled by the arena petmode.
| pet | pet considered. |
| owner | pet's owner. |
| target | potential pet target. |
| 0 | pet shouldn't attack target. |
| 1 | target is a suitable victim for the pet. |
Definition at line 1086 of file pets.c.
References obj::contr, get_real_owner(), llevError, LOG(), op_on_battleground(), pl::party, pet_arena, pl::petmode, PLAYER, and obj::type.
Referenced by monster_check_enemy(), and pets_get_enemy().
Here is the call graph for this function:
Here is the caller graph for this function:Summons a monster.
| op | who is summoning. |
| caster | object casting the spell. |
| dir | direction to place the monster. |
| spob | spell object casting. At this stage, all spob is really used for is to adjust some values in the monster. |
| 0 | failed to summon something. |
| 1 | summoned correctly something. |
Definition at line 651 of file pets.c.
References add_friendly_object(), add_string(), AT_PHYSICAL, obj::attacktype, buf, caster_level(), archt::clone, liv::dam, determine_god(), determine_holy_arch(), draw_ext_info(), draw_ext_info_format(), obj::duration, FABS, find_god(), fix_summon_pet(), FLAG_FRIENDLY, FLAG_MONSTER, FREE_AND_CLEAR_STR, free_string(), freearr_x, freearr_y, GOLEM, llevError, LOG(), MAX, MAX_BUF, liv::maxgrace, MIN, obj::more, MSG_TYPE_SPELL, MSG_TYPE_SPELL_FAILURE, MSG_TYPE_SPELL_PET, obj::name, NDI_UNIQUE, ob_blocked(), object_find_free_spot(), object_free_drop_inventory(), object_get_owner(), object_insert_in_map_at(), object_remove(), object_set_owner(), give::op, obj::other_arch, PETMOVE, PLAYER, QUERY_FLAG, obj::race, range_golem, obj::resist, SET_FLAG, set_spell_skill(), SIZEOFFREE1, obj::slaying, liv::sp, SP_level_dam_adjust(), SP_level_duration_adjust(), SP_level_range_adjust(), SP_level_wc_adjust(), obj::stats, and Ice::tmp.
Referenced by cast_spell().
Here is the call graph for this function:
Here is the caller graph for this function:| int pets_summon_object | ( | object * | op, |
| object * | caster, | ||
| object * | spell_ob, | ||
| int | dir, | ||
| const char * | stringarg | ||
| ) |
General purpose summoning function.
| op | who is summoning. |
| caster | what object did cast the summoning spell. |
| spell_ob | actual spell object for summoning. |
| dir | direction to summon in. |
| stringarg | additional parameters. |
| 0 | nothing was summoned. |
| 1 | something was summoned. |
Definition at line 872 of file pets.c.
References absdir(), add_friendly_object(), obj::arch, arch_to_object(), obj::attack_movement, caster_level(), choose_cult_monster(), CLEAR_FLAG, archt::clone, create_treasure(), liv::dam, determine_god(), die_roll(), draw_ext_info(), draw_ext_info_format(), find_god(), FLAG_FRIENDLY, FLAG_MONSTER, FLAG_SLEEP, freearr_x, freearr_y, freedir, GT_STARTEQUIP, treasurestruct::item, treasureliststruct::items, obj::level, llevError, LOG(), mark_inventory_as_no_drop(), MIN_ACTIVE_SPEED, mon, monster_check_apply_all(), obj::more, archt::more, MSG_TYPE_SPELL, MSG_TYPE_SPELL_FAILURE, treasureliststruct::name, obj::name, archt::name, NDI_UNIQUE, treasurestruct::next, treasurestruct::nrof, ob_blocked(), object_find_free_spot(), object_get_owner(), object_insert_in_map_at(), object_set_enemy(), object_set_owner(), give::op, obj::other_arch, PLAYER, PREFER_HIGH, QUERY_FLAG, obj::race, RANDOM, random_roll(), obj::randomitems, SET_FLAG, set_spell_skill(), SIZEOFFREE, SP_level_dam_adjust(), obj::stats, Ice::tmp, diamondslots::x, and diamondslots::y.
Referenced by cast_spell().
Here is the call graph for this function:
Here is the caller graph for this function:| void pets_terminate_all | ( | object * | owner | ) |
Removes all pets someone owns.
| owner | player we wish to remove all pets of. |
Definition at line 225 of file pets.c.
References FLAG_REMOVED, free_objectlink(), get_friends_of(), oblnk::next, guildjoin::ob, object_free_drop_inventory(), object_remove(), QUERY_FLAG, and remove_friendly_object().
Referenced by apply_savebed(), command_kill_pets(), key_confirm_quit(), leave(), and save_player().
Here is the call graph for this function:
Here is the caller graph for this function: