zim/area/
zim/bin/
zim/clans/plists/
zim/corefiles/
zim/doc/muddy/
zim/gods/
zim/log/
zim/player/
zim/skill_tree/
zim/tmp/
/*-
 * Copyright (c) 2005 Zsuzsu <little_zsuzsu@hotmail.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * $Id: waffects.h 1019 2007-02-15 00:52:41Z zsuzsu $
 */

/*
 * This file handles the World State.
 * Effects that are world-wide, and other persistant effects and
 * items that are supposed to survive reboot.
 */

#ifndef _WAFFECTS_H_
#define _WAFFECTS_H_

/*
 * affects applied to the whole realm
 */
typedef struct world_affect_data	WORLD_AFFECT_DATA;

struct world_affect_data
{
	WORLD_AFFECT_DATA*	next;
	CHAR_DATA *		player;		/* so mob death can invalidate*/
	const char *		player_name;
	int			level;		/* use for who can repeal the affect */
	int			type;		/* kind of affect */
	int			modifier;
	int			duration;	/* how long in ticks */
	int			interval;	/* ticks between affect active*/
	int			timer;		/* ticks left/between*/
	int			chance;		/* chance it affects you */
	int			min_level;	/* min level affected by it */
	int			max_level;
	int			visible_level;	/* min level that can see the affect*/
	int			start_hour;	/* schedule a start time 24h */
	int			repeat;		/* number of times to repeat */
	bool			active;
	flag32_t		notify;		/* notify players when on/off*/
	AREA_DATA *		area;		/* the area affected, null is world */
};

/* global variables */
extern          WORLD_AFFECT_DATA *	world_affect_list;
extern		flag_t			waff_types[];
extern		flag_t			waff_mortal_on[];
extern		flag_t			waff_mortal_off[];

/*
 *  WAFF global affects
 *   
 */
#define WAFF_NONE		0
#define WAFF_ARENA              1	/*put the world in arena mode*/
#define WAFF_PEACE              2	/*one global peace room*/
#define WAFF_EXP		3	/*exp multiplier*/
#define WAFF_QP			4	/*base quest point multiplier*/
#define WAFF_GOLD		5	/*dropped money multipler*/
#define WAFF_PVP_DAMAGE		6	/*damage players do to each other*/
#define WAFF_PVM_DAMAGE		7	/*damage players do to mobs*/
#define WAFF_AUCTION		8	/*turn auction on (1) or off (-1)*/
#define WAFF_INFLATION		9	/*adjust prices by X amount */
#define WAFF_FFA		10	/*no PK range over level 10 */
#define WAFF_PK_RANGE		11	/* increase/decrease PK range */

#define WAFF_NOTIFY_NONE	0	/*don't notify morts*/
#define WAFF_NOTIFY_ON		(A)	/*notify when affect goes active*/
#define WAFF_NOTIFY_OFF		(B)	/*notify when deactivate affect*/

#define WAFF_REPEAT_PERM	-1
#define WAFF_REPEAT_NONE	0

/* functions */
bool			is_affected_area	(int sn, AREA_DATA *area);
bool			is_affected_world	(int sn);
bool			is_waffected		(CHAR_DATA *ch, int sn);
WORLD_AFFECT_DATA *	ch_waffected		(CHAR_DATA *ch, int sn);
WORLD_AFFECT_DATA *	affect_find_area	(int sn, AREA_DATA *area);
WORLD_AFFECT_DATA *	affect_find_world	(int sn);
void			affect_to_area 		(WORLD_AFFECT_DATA *paf);
void			affect_to_world		(WORLD_AFFECT_DATA *paf);
void			affect_remove_area 	(WORLD_AFFECT_DATA *paf);
void			affect_remove_world	(WORLD_AFFECT_DATA *paf);
void			affect_strip_world	(int sn);
void			affect_strip_area	(int sn, AREA_DATA *area);
void			affect_join_world	(WORLD_AFFECT_DATA *paf);

/* persistance */
void			do_save_waffs		(CHAR_DATA *ch, 
						const char *argument);
int			load_waffs		(void);
bool 			save_waffs		(void);

/* update.c */
void			world_affect_update	(void);
/* free/delete */
WORLD_AFFECT_DATA *	waff_new		(void);
WORLD_AFFECT_DATA *	waff_dup		(const WORLD_AFFECT_DATA *paf);
void			waff_free		(WORLD_AFFECT_DATA *paf);

#endif