dawn/notes/
dawn/src/
dawn/src/docs/
/**************************************************************************/
// duel.h - duel combat system header - Kal, Dec 99
/***************************************************************************
 * The Dawn of Time v1.69r (c)1997-2004 Michael Garratt                    *
 * >> A number of people have contributed to the Dawn codebase, with the   *
 *    majority of code written by Michael Garratt - www.dawnoftime.org     *
 * >> To use this source code, you must fully comply with the dawn license *
 *    in licenses.txt... In particular, you may not remove this copyright  *
 *    notice.                                                              *
 **************************************************************************/
#ifndef DUEL_H
#define DUEL_H

#include "include.h"

enum duel_state{
	DS_CHALLENGED_BY,// person being asked to duel
	DS_WAITING_FOR_REPLY,	// person asking
	DS_ABOUT_TO_START,
	DS_BYPASSINGDUEL,	// used to allow people to attack without needing to duel first
	DS_DUELING,
	DS_CANT_ATTACK,	
	DS_SAFE_FROM_BUT_CAN_ATTACK,
	DS_REMOVE  // easy way to handle all removal from the linked list
};

// duel flags, not in dawn.h so adding a new flag doesn't require a 
// complete recompile
#define DUEL_TODEATH		(A)
#define DUEL_NO_LOGOUT		(B)

struct duel_node
{
	char_data	* victim;	// the other person involved in the dueling process
	long		flags;		// duel flags
	time_t		till;		// when the duel will last till
	duel_state	state;
	duel_node	*next;
};

void duel_protect_victim(char_data *victim); // sets everyones duel on this character to protected

class duel_data
{
public:
	// state questions
	bool is_known(char_data *victim); // true if they are known - find_char() knows about them
	bool has_been_challenged_by(char_data *victim); 
	bool is_waiting_for_reply(char_data *victim); 
	bool is_about_to_start(char_data *victim); 
	bool is_active(char_data *victim); 
	bool is_dueling(char_data* ch, char_data *victim); 
	bool is_bypassingduel(char_data *victim); 

	void logout(char_data *ch, char_data *victim);  // when someone logs out

	void accept_duel(char_data *ch, char *argument); 
	void decline_duel(char_data *ch, char *argument); 
	void display_pkinfo(char_data *ch); 
										
	duel_data();	// constructor
	~duel_data();	// destructor

	void update_duels(char_data *ch); // updates the duels on the current character
	void update_challenge(char_data *victim, duel_state to_state); // adds a new node if required
	duel_node	*find_char(char_data *victim); // if the char is in the list of nodes, it is returned
private:
	duel_node	*first; 
	duel_node	*node; // workhorse node - used for all the loops etc
};

#endif
/**************************************************************************/