/* ************************************************************************
*  file: org.h, organizational structures                 Part of Copper3 *
*  Usage: Declarations of central data structures                         *
*  Version for Copper III                                                 *
************************************************************************* */

#ifndef ORG_H
#define ORG_H

#include <sys/types.h>

/* For period type */

#define PERIOD_MANA     1       /* Value is minimum mana, calc as normal */
#define PERIOD_DAILY    2       /* Value is number of uses per day       */
#define PERIOD_NONE     3       /* Unlimited skill - ignore value        */
#define PERIOD_USEMOVES 4       /* Value is taken from moves per use     */
/*(could be used for those beings with global shouts)*/
#define PERIOD_PERMOVE  5       /* Value is taken from moves each move   */
/*(could be used for levitating, flying, swimming)*/

struct org_ability_spec
{
    sh_int min_level;
    int skill_num;
    sh_int pract_cost;
    int period;
    sh_int period_type;
    struct org_ability_spec *next;
};

#define REQ_STAT    1
#define REQ_ALIGN   2
#define REQ_ORG     3
#define REQ_ITEM?

struct org_req
{
    int type;
    int which;
    int value;
};

struct org_figure_spec
{
    char *title;
    int level;
    int flags;
    struct org_ability_spec *abilities;
    struct org_figure_spec *next;
};

/* basic org types */

#define ORG_HOMETOWN      0
#define ORG_PROFESSION    1
#define ORG_RELIGION      2
#define ORG_SOCIETY       3

#define ORG_OTHER         8
#define ORG_ADMIN         9        /* These guys can do anything */

#define ORG_ID_ADMIN      1        /* A single hardcoded org id */

/* org flags */
#define ORGF_LEVELS       1        /* Does this org have levels? */
#define ORGF_AUTOJOIN     2        /* Can people admit themselves? */

struct org_type
{
    int org_id;
    char *name;                    /* What's it called?            */
    char *namelist;                /* list of keywords for it      */
    unsigned long org_flags;
    sh_int org_type;                 /* What basic use does it have? */
    struct org_ability_spec *skills;
    struct org_figure_spec *members;
    struct org_type *next;
};


/* ======================================================================== */



struct org_figure
{
    int char_id;
    int org_id;
    int figure_id;
    int term;
    struct org_figure *next;
};

/* ***********************************************************************
*  file element for figure file. BEWARE: Changing it will ruin the file  *
*********************************************************************** */

struct org_figure_u
{
    int char_id;
    int org_id;
    int figure_id;
    int term;
};

#endif /* !defined(ORG_H) */