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: clan.h,v 1.666 2004/09/20 10:49:47 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.                                                *
 *                                                                                  *
 ************************************************************************************/



#ifndef _CLAN_H_
#define _CLAN_H_

/*----------------------------------------------------------------------
 * clan stuff (clan.c)
 */

#include "stock.h"


#define CLAN_NONE    0

/* Clan status */
#define CLAN_LEADER     2
#define CLAN_SECOND     1
#define CLAN_COMMONER   0
#define CLAN_NEWBIE     3
#define CLAN_VETERAN    4
#define CLAN_ELITE      5

/* Clan politics */
#define DIP_ALLY        4
#define DIP_MISTRUST    3
#define DIP_WAR         2
#define DIP_PEACE       1
#define DIP_NEUTRAL     0

#define ALLIANCE_RESTRICT 0
#define ALLIANCE_ALLOW    1


// clan member structure for clanlist command
struct clan_member
{
    struct clan_member * next ;

    const char * name       ;
    const char * last_login ;
    int    rank       ;
    int    level      ;
    int    alignment  ;
    int    ethos      ;
};

typedef struct clan_stat_data CLAN_STAT_DATA;

struct clan_stat_data
{
    // quests
    int quest_requested;
    int quest_completed;

    // global quests
    int gq_join;
    int gq_completed;

    // wars
    int wars_join;
    int wars_win;

    // kills
    int mobs_killed;
    int pc_killed_by_mobs;
    int PK_count;
    int PK_on_CR;
    int PK_clan_defence;
    int death_clan_defence;
    int PK_clan_attack;     // number of kills where raiding
    int death_clan_attack;  // number of deaths when raiding enemy clans

    // clanbank
    int dep_gold;
    int dep_qp;
    int dep_bp;
    int dep_gem;
    int dep_rgem;
    int dep_bgem;
    int dep_mgem;
    int dep_ygem;
    int dep_ggem;
    int dep_wgem;

    int with_gold;
    int with_qp;
    int with_bp;
    int with_gem;
    int with_rgem;
    int with_bgem;
    int with_mgem;
    int with_ygem;
    int with_ggem;
    int with_wgem;

    char * best_explorer_name;
    int best_explored_count;

    char * best_gq_win_name;
    int best_gq_win_count;

    char * best_quest_win_name;
    int best_quest_win_count;
};

/*
 * Clan structure
 */
struct clan_t
{
    const char *name;                    /* clan name */
    const char *file_name;               /* file name */

    int         recall_vnum;             /* recall room vnum */
    const char *msg_prays;               /* what to print in clanrecall */
    const char *msg_vanishes;

    varr        skills;                  /* clan skills */

    flag64_t    flags;                   /* clan flags */

    long        item_time;               /* time without clan item */

    int         obj_vnum;                /* unused (for a while) */
    int         mark_vnum;               /* vnum clan mark */
    int         altar_vnum;
    int         altar_trophy_vnum;
    OBJ_DATA *  altar_ptr;
    OBJ_DATA *  altar_trp;
    OBJ_DATA *  obj_ptr;
    int         bank_questp;
    int         bank_gold;
    int         bank_bonus;
    int         bank_gems;
    int         bank_rgems;
    int         bank_bgems;
    int         bank_ggems;
    int         bank_mgems;
    int         bank_wgems;
    int         bank_ygems;
    int         item_at;
    int         diplomacy[MAX_CLANS];
    int         clan_align;               // for diplomacy. do't allow good + evil clans ally

    int         max_clan_members;
    int         cur_clan_members;
    int         min_clan_level;
    flag64_t    allow_alliance;
    struct      clan_member * member_list;

    int         standard_areaguard_vnum;
    int         veteran_areaguard_vnum;
    int         elite_areaguard_vnum;
    int         areacontrol_rating;        // don't know yet rooms/totalrooms * tick
                                           // or areas*ticks or somthing else...
    int         energy;
    flag64_t    conq_flags;
    CHAR_DATA * advisor;
    CHAR_DATA * spy;
    CHAR_DATA * transporter;
    int         conquered_areas;
    int         area_energy_this_tick;
    int         earned_energy_this_tick;
    CLAN_STAT_DATA history;
    STOCK_DATA  clan_stock;
};

/* clan flags */
#define CLAN_HIDDEN (A)         /* clan will not appear in who */
#define CLAN_RULERS (B)         /* clan which keeping law */
#define CLAN_HATE_MAGIC (C)     /* clan which not use magic */
#define CLAN_LOVE_MAGIC (D)     /* clan which use magic */
#define CLAN_CAN_SEE    (E)     /* clan which buy visibility */
#define CLAN_CHANGED    (Z)

clan_t     *clan_new                    (void);
void        clan_free                   (clan_t*);
int         cln_lookup                  (const char* name);
const char *clan_name                   (int cn);
void        check_clan_item             (clan_t*);
OBJ_DATA   *get_clan_altar              (clan_t *clan);
OBJ_DATA   *get_clan_item               (clan_t *clan);
bool        is_clan_item_in_altar       (clan_t *clan);
bool        is_clan_item_at_enemy       (clan_t *clan);
void        check_clans                 (void);
clan_t     *is_clan_item                (OBJ_DATA *obj);
bool        is_clan_item_ok             (CHAR_DATA *ch);
clan_t     *is_clan_altar               (OBJ_DATA *obj);
int         get_clan_max_percent        (CHAR_DATA *ch, int sn, int skill);

extern varr clans;

#define CLAN(cn)            ((clan_t*) VARR_GET(&clans, cn))
#define clan_lookup(cn)     ((clan_t*) varr_get(&clans, cn))
#define IS_CLAN_SKILL(sk)   (IS_SET(sk->group, GROUP_CLAN))

struct clan_skill_t
{
    int sn;         /* skill number. leave this field first  */
                    /* in order sn_vlookup to work properly  */
    int level;      /* level at which skill become available */
    int percent;    /* initial percent           */
};

#define clan_skill_lookup(clan, sn) \
    ((clan_skill_t*) varr_bsearch(&clan->skills, &sn, cmpint))


typedef struct clanbank_cmds       CLANBANK_CMD;

DECLARE_DO_FUN(clanbank_help       );
//DECLARE_DO_FUN(clanbank_deposit    );
//DECLARE_DO_FUN(clanbank_transaction);
//DECLARE_DO_FUN(clanbank_withdraw   );
//DECLARE_DO_FUN(clanbank_balance    );

struct clanbank_cmds
{
    char        *name          ; // command name
    DO_FUN*      fun           ; // command function
    int          clan_level    ;
};

#endif