/* $Id: olc_liquid.c,v 1.666 2004/09/20 10:50:30 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. *
* *
************************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "merc.h"
#include "olc.h"
#include "db/liquid.h"
#define EDIT_LIQUID(ch, liquid) (liquid = (liquid_t*) ch->desc->pEdit)
DECLARE_OLC_FUN(liquided_create );
DECLARE_OLC_FUN(liquided_edit );
DECLARE_OLC_FUN(liquided_touch );
DECLARE_OLC_FUN(liquided_show );
DECLARE_OLC_FUN(liquided_list );
DECLARE_OLC_FUN(liquided_name );
DECLARE_OLC_FUN(liquided_color );
DECLARE_OLC_FUN(liquided_flag );
DECLARE_OLC_FUN(liquided_proof );
DECLARE_OLC_FUN(liquided_full );
DECLARE_OLC_FUN(liquided_thirst );
DECLARE_OLC_FUN(liquided_food );
DECLARE_OLC_FUN(liquided_ssize );
olc_cmd_t olc_cmds_liquid[] =
{
{ "create", liquided_create, 5 },
{ "edit", liquided_edit, 5 },
{ "touch", olced_dummy, 5 },
{ "show", liquided_show, 0 },
{ "list", liquided_list, 0 },
{ "name", liquided_name, 5 },
{ "color", liquided_color, 5 },
{ "flag", liquided_flag, 5, liquid_flags },
{ "proof", liquided_proof, 5 },
{ "full", liquided_full, 5 },
{ "thirst", liquided_thirst, 5 },
{ "food", liquided_food, 5 },
{ "ssize", liquided_ssize, 5 },
{ "commands", show_commands, 0 },
{ NULL}
};
OLC_FUN(liquided_create)
{
int liq;
liquid_t *liquid;
char arg[MAX_STRING_LENGTH];
if (!char_security(ch,"SECURITY_OLC_LIQUID"))
{
char_puts("LiquidEd: Insufficient security for editing liquids.\n", ch);
return FALSE;
}
first_arg(argument, arg, sizeof(arg), FALSE);
if (arg[0] == '\0')
{
do_help(ch, "'OLC CREATE'");
return FALSE;
}
if (is_number(arg))
{
char_printf(ch, "LiquidEd: Argument must be name.\n");
return FALSE;
}
if ((liq = liquid_lookup(arg) >= 0))
{
char_printf(ch, "LiquidEd: %s: already exists.\n", LIQUID(liq)->name);
return FALSE;
}
liquid = liquid_new();
liquid->name = str_dup(arg);
ch->desc->pEdit = (void *)liquid;
OLCED(ch) = olced_lookup(ED_LIQUID);
char_puts("LiquidEd: liquid created.\n",ch);
return FALSE;
}
OLC_FUN(liquided_edit)
{
int liq;
char arg[MAX_STRING_LENGTH];
if (!char_security(ch,"SECURITY_OLC_LIQUID"))
{
char_puts("LiquidEd: Insufficient security.\n", ch);
return FALSE;
}
one_argument(argument, arg, sizeof(arg));
if (arg[0] == '\0')
{
do_help(ch, "'OLC EDIT'");
return FALSE;
}
liq = -1;
if (is_number(arg))
{
if (atoi(arg) < 0 || atoi(arg) >= liquids.nused)
{
char_printf(ch, "LiquidEd: %s: No such liquid.\n", arg);
return FALSE;
}
else
ch->desc->pEdit = LIQUID(atoi(arg));
}
else
{
if ((liq = liquid_lookup(arg)) < 0)
{
char_printf(ch, "LiquidEd: %s: No such liquid.\n", argument);
return FALSE;
}
else
ch->desc->pEdit = LIQUID(liq);
}
OLCED(ch) = olced_lookup(ED_LIQUID);
return FALSE;
}
OLC_FUN(liquided_list)
{
int i;
for (i = 0; i < liquids.nused; i++)
char_printf(ch, "[%3d] %-15s\n", i, LIQUID(i)->name);
return FALSE;
}
OLC_FUN(liquided_name)
{
liquid_t *liquid;
EDIT_LIQUID(ch, liquid);
return olced_str(ch, argument, cmd, &liquid->name);
}
OLC_FUN(liquided_color)
{
liquid_t *liquid;
EDIT_LIQUID(ch, liquid);
return olced_str(ch, argument, cmd, &liquid->color);
}
// TODO: color need check for valid????
OLC_FUN(liquided_proof)
{
liquid_t *liquid;
EDIT_LIQUID(ch, liquid);
return olced_number(ch, argument, cmd, &liquid->proof);
}
OLC_FUN(liquided_full)
{
liquid_t *liquid;
EDIT_LIQUID(ch, liquid);
return olced_number(ch, argument, cmd, &liquid->full);
}
OLC_FUN(liquided_food)
{
liquid_t *liquid;
EDIT_LIQUID(ch, liquid);
return olced_number(ch, argument, cmd, &liquid->food);
}
OLC_FUN(liquided_thirst)
{
liquid_t *liquid;
EDIT_LIQUID(ch, liquid);
return olced_number(ch, argument, cmd, &liquid->thirst);
}
OLC_FUN(liquided_ssize)
{
liquid_t *liquid;
EDIT_LIQUID(ch, liquid);
return olced_number(ch, argument, cmd, &liquid->ssize);
}
OLC_FUN(liquided_flag)
{
liquid_t *liquid;
EDIT_LIQUID(ch, liquid);
return olced_flag64(ch, argument, cmd, &liquid->flag);
}
OLC_FUN(liquided_show)
{
char arg[MAX_STRING_LENGTH];
BUFFER *output;
liquid_t *liquid;
one_argument(argument, arg, sizeof(arg));
if (arg[0] == '\0')
{
if (IS_EDIT(ch, ED_LIQUID))
EDIT_LIQUID(ch, liquid);
else
{
do_help(ch, "'OLC ASHOW'");
return FALSE;
}
}
else
{
if (is_number(arg))
{
if (atoi(arg) < 0 || atoi(arg) > liquids.nused)
{
char_printf(ch, "LiquidEd: %s: No such liquid.\n", arg);
return FALSE;
}
else
liquid = LIQUID(atoi(arg));
}
else
{
if (liquid_lookup(arg) < 0)
{
char_printf(ch, "LiquidEd: Not such liquid %s.\n", arg);
return FALSE;
}
else
liquid = LIQUID(liquid_lookup(arg));
}
}
output = buf_new(-1);
buf_printf(output, "Name: [%s]\n", liquid->name);
buf_printf(output, "Color: [%s]\n", liquid->color);
buf_printf(output, "Proof: [%d]\n", liquid->proof);
buf_printf(output, "Full: [%d]\n", liquid->full);
buf_printf(output, "Thirst: [%d]\n", liquid->thirst);
buf_printf(output, "Food: [%d]\n", liquid->food);
buf_printf(output, "Ssize: [%d]\n", liquid->ssize);
buf_printf(output, "Flags: [%s]\n\n", flag_string(liquid_flags, liquid->flag));
page_to_char(buf_string(output), ch);
buf_free(output);
return FALSE;
}