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: artefacts.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.                                                *
 *                                                                                  *
 ************************************************************************************/

/************************************************************************************
 *   Artefacts. Ideas by: Aseroth, BGII SoA, Aladon                                 *
 *    Code by: Aseroth                                                              *
 ************************************************************************************/
       
/*
  TODO: artefact table
  func in handle_death
  func to merge artefacts
*/
#ifndef _ARTEFACTS_H_
#define _ARTEFACTS_H_

#include <stdlib.h>
#include <stdio.h>
#include "typedef.h"
#include "merc.h"

#define MAX_ARTEFACT_PARTS 5   // i don't wanna mess with mem_management

typedef struct artefact_part_t            artefact_part_t;
typedef struct artefact_t                 artefact_t;
typedef struct artefact_check_result_s    artefact_check_result;

struct artefact_part_t
{
    int  vnum;
	int  part_type;        
    bool neccessary;
    int  chance_reduct;
};


struct artefact_t
{
    int   vnum;
    bool  appearable;
    int   char_level;     // minimum level of char 
    int   mob_level;      // minimum level of mob
    int   chance;         // chance of artefact appearance is 1/chance
	varr  artefact_parts;
    int   part_of;
    int   forger;
    int   info_fee;
    int   create_fee;
};


artefact_t *      artefact_new    (void);
void              artefact_free   (artefact_t*);


extern varr artefacts;

enum 
{                           
    CAN_CREATE,
    CAN_CREATE_CHANCE_FAILURE,
    CANNOT_CREATE_PARTS_MISSING,
    CANNOT_CREATE_PART_INVALID,
};

typedef int artefact_merge_result;

struct artefact_check_result_s
{
    artefact_merge_result major;
    int                   minor;
};

#define ARTEFACT(arn)          ((artefact_t*) VARR_GET(&artefacts, arn))
#define artefact_lookup(mrn)   ((artefact_t*) varr_get(&artefacts, arn))

#define artefact_parts_lookup(artefact, num) \
    ((artefact_part_t*) varr_bsearch(&artefact->artefact_parts, &num, cmpint))

/*
bool            part_in_array              (int count, ARTEFACT_DATA** array, int part_vnum);
bool            is_part_of                 (int vnum, ARTEFACT_DATA* artefact);
int             check_artefact_appearance  (CHAR_DATA* killer, CHAR_DATA* victim,ARTEFACT_DATA* a_list);

artefact_check_result check_artefact(int count, ARTEFACT_DATA** artefacts, ARTEFACT_DATA* a_list);
*/


#endif