Crossfire Server, Trunk
|
#include "global.h"
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include "living.h"
#include "skills.h"
#include "spells.h"
#include "sproto.h"
#include "tod.h"
Go to the source code of this file.
Functions | |
static int | adjust_sign_msg (object *pl, short x, short y, object *tmp) |
static int | apply_builder_floor (object *pl, object *new_floor, short x, short y) |
static int | apply_builder_item (object *pl, object *new_item, short x, short y) |
void | apply_builder_remove (object *pl, int dir) |
static int | apply_builder_wall (object *pl, object *new_wall, short x, short y) |
static int | apply_builder_window (object *pl, object *new_wall_win, short x, short y) |
void | apply_map_builder (object *pl, int dir) |
static int | can_build_over (struct mapdef *map, object *new_item, short x, short y) |
static int | find_or_create_connection_for_map (object *pl, short x, short y, object *rune) |
static int | find_unused_connected_value (struct mapdef *map) |
static void | fix_walls (struct mapdef *map, int x, int y) |
static object * | get_connection_rune (object *pl, short x, short y) |
static object * | get_msg_book (object *pl, short x, short y) |
static object * | get_wall (struct mapdef *map, int x, int y) |
static void | remove_marking_runes (struct mapdef *map, short x, short y) |
This file handles all ingame construction functions: builders, destroyers, building materials.
Basically, those enable a player to alter in real-time a map.
Definition in file build_map.c.
Make the built object inherit the msg of books that are used with it. For objects already invisible (i.e. magic mouths & ears), also make it it inherit the face and the name with "talking " prepended.
The book is removed during the operation.
pl | player building. |
x | |
y | building coordinates. |
tmp | object that is being built. |
Definition at line 184 of file build_map.c.
References add_string(), buf, obj::custom_name, draw_ext_info(), obj::face, free_string(), get_msg_book(), MAX_BUF, obj::msg, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, obj::name, obj::name_pl, NDI_UNIQUE, object_free_drop_inventory(), object_remove(), object_set_msg(), Ice::tmp, diamondslots::x, and diamondslots::y.
Referenced by apply_builder_item().
Floor building function.
Floors can be built:
pl | player building. |
new_floor | new floor object |
x | |
y | where to build. |
Definition at line 506 of file build_map.c.
References obj::arch, arch_to_object(), draw_ext_info(), fix_walls(), FLAG_IS_BUILDABLE, FLAG_IS_FLOOR, FLAG_UNIQUE, FLOOR, FOR_MAP_FINISH, FOR_MAP_PREPARE, freearr_x, freearr_y, GET_MAP_OB, INS_BELOW_ORIGINATOR, INS_ON_TOP, MAX_BUF, diamondslots::message, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, NDI_UNIQUE, object_free_drop_inventory(), object_insert_in_map_at(), object_remove(), OUT_OF_REAL_MAP, QUERY_FLAG, SET_FLAG, Ice::tmp, obj::type, WALL, diamondslots::x, and diamondslots::y.
Referenced by apply_map_builder().
Generic item builder.
Item must be put on a square with a floor, you can have something under.
Type of inserted item is tested for specific cases (doors & such).
Item is inserted above the floor.
Note that it is the responsability of the caller to check whether the space is buildable or not.
pl | player building. |
new_item | new item being built |
x | |
y | where to build. |
Definition at line 796 of file build_map.c.
References add_button_link(), adjust_sign_msg(), obj::arch, BUTTON, CF_HANDLE, push::connected, DETECTOR, DOOR, draw_ext_info(), draw_ext_info_format(), find_or_create_connection_for_map(), FLAG_IS_FLOOR, FLAG_NO_PICK, FLOOR, FOR_OB_AND_ABOVE_FINISH, FOR_OB_AND_ABOVE_PREPARE, GATE, get_connection_rune(), GET_MAP_OB, INS_ABOVE_FLOOR_ONLY, MAGIC_EAR, MAX_BUF, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, give::name, archt::name, NDI_UNIQUE, object_free_drop_inventory(), object_insert_in_map_at(), object_remove(), PEDESTAL, QUERY_FLAG, query_name(), SET_FLAG, SIGN, TIMED_GATE, obj::type, diamondslots::x, and diamondslots::y.
Referenced by apply_map_builder().
void apply_builder_remove | ( | object * | pl, |
int | dir | ||
) |
Item remover.
Removes first buildable item, either under or above the floor
pl | player removing an item. |
dir | direction the player is trying to remove. |
Definition at line 889 of file build_map.c.
References BUTTON, CF_HANDLE, DETECTOR, DOOR, draw_ext_info(), draw_ext_info_format(), FLAG_IS_FLOOR, FLAG_IS_LINKED, FLOOR, freearr_x, freearr_y, GATE, GET_MAP_OB, say::item, llevError, LOG(), MAGIC_EAR, MAX_BUF, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, give::name, NDI_UNIQUE, object_free_drop_inventory(), object_remove(), PEDESTAL, QUERY_FLAG, query_name(), remove_button_link(), SIGN, TIMED_GATE, WALL, diamondslots::x, and diamondslots::y.
Referenced by apply_map_builder().
Wall building function
Walls can be built:
pl | player building. |
new_wall | new wall object |
x | |
y | where to build. |
Definition at line 626 of file build_map.c.
References obj::arch, draw_ext_info(), fix_walls(), get_wall(), INS_ABOVE_FLOOR_ONLY, MAX_BUF, diamondslots::message, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, archt::name, NDI_UNIQUE, object_free_drop_inventory(), object_insert_in_map_at(), object_remove(), OUT_OF_REAL_MAP, remove_marking_runes(), obj::type, WALL, diamondslots::x, and diamondslots::y.
Referenced by apply_map_builder().
Window building function
Windows can be built only on top of existing vertical or horizontal walls (*wall_2_1_1 or *wall_2_1_2).
pl | player building. |
new_wall_win | new windowed wall object |
x | |
y | where to build. |
Definition at line 706 of file build_map.c.
References obj::arch, arch_to_object(), draw_ext_info(), find_archetype(), obj::flags, get_wall(), INS_ABOVE_FLOOR_ONLY, MAX_BUF, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, archt::name, NDI_UNIQUE, object_free_drop_inventory(), object_insert_in_map_at(), object_remove(), obj::type, WALL, diamondslots::x, and diamondslots::y.
Referenced by apply_map_builder().
void apply_map_builder | ( | object * | pl, |
int | dir | ||
) |
Global building function
This is the general map building function. Called when the player 'fires' a builder or remover object.
pl | player building or removing. |
dir | building direction. |
Definition at line 959 of file build_map.c.
References apply_builder_floor(), apply_builder_item(), apply_builder_remove(), apply_builder_wall(), apply_builder_window(), create-tower::builder, can_build_over(), draw_ext_info(), find_archetype(), find_marked_object(), FLAG_IS_BUILDABLE, FLAG_UNPAID, FOR_OB_AND_ABOVE_FINISH, FOR_OB_AND_ABOVE_PREPARE, freearr_x, freearr_y, GET_MAP_OB, IS_PLAYER(), llevError, LOG(), MAP_HEIGHT, MAP_WIDTH, MATERIAL, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, NDI_UNIQUE, object_create_arch(), object_decrease_nrof_by_one, QUERY_FLAG, range_builder, pl::ranges, SET_FLAG, SIGN, obj::slaying, ST_BD_BUILD, ST_BD_REMOVE, ST_MAT_FLOOR, ST_MAT_ITEM, ST_MAT_WALL, ST_MAT_WINDOW, obj::subtype, Ice::tmp, obj::type, diamondslots::x, and diamondslots::y.
Referenced by fire().
Check if objects on a square interfere with building.
map | map we're building on. |
new_item | item the player is trying to build, must not be NULL. |
x | |
y | coordinates where to build. |
Definition at line 48 of file build_map.c.
References obj::arch, BOOK, BUTTON, CF_HANDLE, archt::clone, DETECTOR, DOOR, FLAG_IS_BUILDABLE, FOR_MAP_FINISH, FOR_MAP_PREPARE, GATE, HEAD, MAGIC_EAR, disinfect::map, obj::more, guildjoin::ob, PEDESTAL, QUERY_FLAG, SIGN, Ice::tmp, obj::type, diamondslots::x, obj::x, diamondslots::y, and obj::y.
Referenced by apply_map_builder().
|
static |
Helper function for door/button/connected item building.
Will search the specified spot for a marking rune. If not found, returns -1 Else, searches a force in op's inventory matching the map's name and the rune's text. If found, returns the connection value associated else searches a new connection value, and adds the force to the player.
pl | player building. |
x | |
y | coordinates where to build. |
rune | rune used to indicate the connection value. If NULL, building is searched for one. |
Definition at line 271 of file build_map.c.
References add_string(), push::connected, create_archetype(), draw_ext_info(), find_unused_connected_value(), FOR_INV_FINISH, FOR_INV_PREPARE, dragon_attune::force, FORCE, FORCE_NAME, get_connection_rune(), obj::msg, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, NDI_UNIQUE, object_insert_in_ob(), object_set_msg(), object_update_speed(), Ice::tmp, diamondslots::x, and diamondslots::y.
Referenced by apply_builder_item().
|
static |
Returns an unused value for 'connected'.
Tries 1000 random values, then returns -1.
map | map for which to find a value |
Definition at line 233 of file build_map.c.
References push::connected, disinfect::map, oblinkpt::next, and oblinkpt::value.
Referenced by find_or_create_connection_for_map().
|
static |
Fixes walls around specified spot
Basically it ensures the correct wall is put where needed.
map | |
x | |
y | position to fix. |
Definition at line 335 of file build_map.c.
References obj::arch, arch_to_object(), obj::flags, get_wall(), INS_ABOVE_FLOOR_ONLY, disinfect::map, MAP_HEIGHT, MAP_WIDTH, MAX_BUF, archt::name, object_free_drop_inventory(), object_insert_in_map_at(), object_remove(), try_find_archetype(), obj::type, WALL, diamondslots::x, and diamondslots::y.
Referenced by apply_builder_floor(), and apply_builder_wall().
Returns the marking rune on the square, for purposes of building connections.
pl | player trying to build. |
x | |
y | coordinates to search. |
Definition at line 103 of file build_map.c.
References FOR_MAP_FINISH, FOR_MAP_PREPARE, SIGN, diamondslots::x, and diamondslots::y.
Referenced by apply_builder_item(), and find_or_create_connection_for_map().
Returns the book/scroll on the current square, for purposes of building
pl | player trying to build. |
x | |
y | coordinates to search. |
Definition at line 122 of file build_map.c.
References BOOK, FOR_MAP_FINISH, FOR_MAP_PREPARE, diamondslots::x, and diamondslots::y.
Referenced by adjust_sign_msg().
Returns first item of type WALL.
map | |
x | |
y | where to search. |
Definition at line 142 of file build_map.c.
References FOR_MAP_FINISH, FOR_MAP_PREPARE, disinfect::map, WALL, diamondslots::x, and diamondslots::y.
Referenced by apply_builder_wall(), apply_builder_window(), and fix_walls().
|
static |
Erases all marking runes at specified location (before building a wall)
map | |
x | |
y | coordinates to erase runes at. |
Definition at line 158 of file build_map.c.
References FOR_MAP_FINISH, FOR_MAP_PREPARE, disinfect::map, object_free_drop_inventory(), object_remove(), SIGN, diamondslots::x, and diamondslots::y.
Referenced by apply_builder_wall().