Crossfire Server, Trunk
|
#include "global.h"
#include <assert.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include "sproto.h"
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().
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().
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().
|
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().
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().
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().
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().
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().
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().
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().
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().
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().
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().
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().