/* 
 * Kompania Krogulca
 *
 * Copyright(C):    Khazzar (jedrekz@pascom.pl)
 * Data:            26.08.2003
 * 
 */

#include "def.h"
inherit "std/room";

#include <macros.h>
#include <stdproperties.h>
#include <filter_funs.h>

mapping members = ([]);

void
create_room()
{
    set_short("ENGINE.o");
    set_long("ENGINE.o dla Kompanii Krogulca.\n");

    setuid();
    seteuid(getuid());
    restore_object(ENGINE);
}

void
load()
{
    setuid();
    seteuid(getuid());
    restore_object(ENGINE);
}

void
save()
{
    setuid();
    seteuid(getuid());
    save_object(ENGINE);
}

int
add_member( object player, string przyjmujacy )
{
    int result;
    mixed table = ({0,0,"","","",0});

    setuid();
    seteuid(getuid());
    result = SHADOW->shadow_me(player,GUILD_TYPE, GUILD_STYLE, GUILD_NAME);

    notify_fail("Wystapil blad. Problem z shadowem Kompanii Krogulca.\n");
    if (!result) return 0;

    player->add_cmdsoul(SOUL);
    player->update_hooks();
    player->update_cmdsoul_list();

    table[RANGA]       = REKRUT;
    table[WIEK]        = player->query_age();
    table[NAZWISKO]    = "";
    table[FUNKCJA]     = "";
    table[PRZYJMUJACY] = przyjmujacy;
    
    members[player->QRN]=table;
    save();
    
    return 1;        
}

int
remove_member( object player )
{
    members=m_delete(members,player->QRN);
    save();

    return 1;
}

int
query_member( object player )
{
    return members[player->QRN];
}

int
query_data( object player, int selector )
{
    return members[player->QRN][selector];
}

int
set_data( object player, int selector, string text )
{
    if (selector == NAZWISKO || selector == FUNKCJA)
    {
        if (!text) text = "";
        members[player->QRN][selector] = text;
        save();
        return 1;
    }
    return 0;
}

int
promote( object player, int ranga )
{
    if (!query_member(player)) return 0;
    if (ranga >= REKRUT && ranga <= KAPITAN)
    {
        members[player->QRN][RANGA] = ranga;
        save();
        return 1;
    }
    if (members[player->QRN][RANGA] < KAPITAN)
    {
        members[player->QRN][RANGA] = members[player->QRN][RANGA] + 1;
        save();
        return 1;
    }
    return 0;
}

int
demote( object player, int ranga )
{
    if (!query_member(player)) return 0;
    if (ranga >= REKRUT && ranga <= KAPITAN)
    {
        members[player->QRN][RANGA] = ranga;
        save();
        return 1;
    }
    if (members[player->QRN][RANGA] > REKRUT)
    {
        members[player->QRN][RANGA] = members[player->QRN][RANGA] - 1;
        save();
        return 1;
    }
    return 0;
}

int
join( object player, int oddzial )
{
    if (!query_member(player)) return 0;
 
    members[player->QRN][ODDZIAL] = oddzial;
    save();
    return 1;
}

mapping
get_members()
{
    return members;
}
