muddy/
muddy/CVS/
muddy/area/
muddy/area/CVS/
muddy/clans/CVS/
muddy/classes/CVS/
muddy/doc/
muddy/doc/CVS/
muddy/etc/CVS/
muddy/etc/i3/
muddy/etc/i3/CVS/
muddy/imc/CVS/
muddy/lang/CVS/
muddy/licenses/CVS/
muddy/msgdb/CVS/
muddy/new/CVS/
muddy/notes/
muddy/player/
muddy/races/CVS/
muddy/religions/CVS/
muddy/src/CVS/
muddy/src/comm/CVS/
muddy/src/db/CVS/
muddy/src/intermud/
muddy/src/intermud/CVS/
muddy/src/irc/CVS/
muddy/src/olc/CVS/
/* $Id: gquest.h,v 1.666 2004/09/20 10:49:48 shrike Exp $ */

/************************************************************************************
 *    Copyright 2004 Astrum Metaphora consortium                                    *
 *                                                                                  *
 *    Licensed under the Apache License, Version 2.0 (the "License");               *
 *    you may not use this file except in compliance with the License.              *
 *    You may obtain a copy of the License at                                       *
 *                                                                                  *
 *    http://www.apache.org/licenses/LICENSE-2.0                                    *
 *                                                                                  *
 *    Unless required by applicable law or agreed to in writing, software           *
 *    distributed under the License is distributed on an "AS IS" BASIS,             *
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.      *
 *    See the License for the specific language governing permissions and           *
 *    limitations under the License.                                                *
 *                                                                                  *
 ************************************************************************************/

/* Part of this code is based on WoM's (World of Merlin) code */

#ifndef __SRC_GQUEST_H
#define __SRC_GQUEST_H

#include "typedef.h"

typedef struct gq_questdata GQ_QUESTDATA ;
typedef struct gq_questplr  GQ_QUESTPLR  ;
typedef struct gq_master    GQ_MASTER    ;
typedef struct gq_cmd       GQ_CMD       ;

// ----------------------------------------------------------------------
// GQ data for single quest
// ----------------------------------------------------------------------
struct gq_questdata
{
    GQ_QUESTDATA* next         ; // next in chain

    int*          mobs         ; // mobile vnums
    int*          rooms        ; // room mobile was last seen
    int*          count        ; // count for each mobile

    int           level_min    ; // minimal level for participant
    int           level_max    ; // maximal level for participant
    int           ticks_left   ; // ticks left for the quest
    int           ticks_total  ; // total time for the quest
    int           ticks_start  ; // ticks to start the quest
    int           mob_count    ; // mobiles count (size of arrays)
    int           mob_total    ; // mobiles total
    int           plr_count    ; // number of players
    int           type         ; // quest type (0 - room, 1 - area)

    GQ_QUESTPLR*  plr          ; // list of players
} ;

// ----------------------------------------------------------------------
// GQ data for single quest participant
// ----------------------------------------------------------------------
struct gq_questplr
{
    GQ_QUESTPLR*  next         ; // next in chain
    GQ_QUESTDATA* quest        ; // ptr to the quest data
    char*         name         ; // name of the player
    int           killed_total ; // number of total killed mobiles
    int*          killed_count ; // count killed
    int           complete     ; // ticks to complete
} ;

// ----------------------------------------------------------------------
// master structure to track GQ information
// ----------------------------------------------------------------------
struct gq_master
{
    GQ_QUESTDATA* quests       ; // currently active quest
    int           enable       ; // enable/disable indicator
    int           ticks_next   ; // ticks to the next autoquest
} ;

// ----------------------------------------------------------------------
// command table
// ----------------------------------------------------------------------
struct gq_cmd
{
    char*        name         ; // command name
    int          flags        ; // command flags
    int          min_pos      ; // minimal position to use
    DO_FUN*      fun          ; // command function
} ;

#define GQCMD_IMMONLY       (A) // immortals only
#define GQCMD_RUNONLY       (B) // participants only

// ----------------------------------------------------------------------
// functions
// ----------------------------------------------------------------------
GQ_QUESTDATA* gq_generate   (int, int, int) ;
GQ_QUESTPLR*  gq_newplayer  (GQ_QUESTDATA*, CHAR_DATA*) ;
void          gq_freequest  (GQ_QUESTDATA*) ;
void          gq_freeplr    (GQ_QUESTPLR*)  ;
void          gq_showinfo   (GQ_QUESTDATA*, const char*, ...) ;
GQ_QUESTPLR*  gq_findplr    (CHAR_DATA*)    ;
GQ_QUESTDATA* gq_findquest  (CHAR_DATA*)    ;
CHAR_DATA*    gq_findchar   (const char*)   ;
bool          is_gquest_mob (CHAR_DATA*)    ;
void          gq_mobdeath   (CHAR_DATA*, CHAR_DATA*) ;
void          gq_update     () ;
void          gq_givebonus  (CHAR_DATA*, bool) ;
int           gq_count      ();

DECLARE_DO_FUN (do_gquest)   ;
DECLARE_DO_FUN (gq_join)     ;
DECLARE_DO_FUN (gq_cancel)   ;
DECLARE_DO_FUN (gq_list)     ;
DECLARE_DO_FUN (gq_info)     ;
DECLARE_DO_FUN (gq_progress) ;
DECLARE_DO_FUN (gq_complete) ;
DECLARE_DO_FUN (gq_talk)     ;
DECLARE_DO_FUN (gq_status)   ;
DECLARE_DO_FUN (gq_start)    ;
DECLARE_DO_FUN (gq_stop)     ;
DECLARE_DO_FUN (gq_enable)   ;
DECLARE_DO_FUN (gq_disable)  ;

#endif