/***************************************************************************
* OBLIVION 1.2 is copyright by Wes Wagner August, 1996 *
* by using this code you have agreed to the terms of the Oblivion License*
**************************************************************************/
/******************************************************************************
* Oblivion 1.0 Alpha Code written by Wes Wagner *
******************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/time.h>
#include <time.h>
#include "merc.h"
void do_noble(CHAR_DATA *ch, char * argument)
{
char arg1[MAX_INPUT_LENGTH];
CHAR_DATA *victim;
argument = one_argument( argument, arg1 );
if ( arg1[0] == '\0')
{
send_to_char( "Syntax: noble <char>\n\r",ch);
return;
}
if ( ( victim = get_char_world( ch, arg1 ) ) == NULL )
{
send_to_char( "They aren't playing.\n\r", ch );
return;
}
if(victim->level>91)
victim->pcdata->diplomacy=50;
else
victim->pcdata->diplomacy=10;
send_to_char("They are now a noble.\n\r",ch);
send_to_char("You are now a noble.\n\r",victim);
return;
}
void do_moothelp(CHAR_DATA *ch, char * argument)
{
send_to_char("Anything after the | is optional aruguments.\n\r",ch);
send_to_char("moot <character> reward <amount>\n\r",ch);
send_to_char("moot <character> induct\n\r",ch);
send_to_char("moot <character> outcast\n\r",ch);
send_to_char("moot <character> change <alliance|tendency> <+|->\n\r",ch);
return ;
}
void do_moot(CHAR_DATA *ch, char * argument)
{
char arg1[MAX_INPUT_LENGTH],arg2[MAX_INPUT_LENGTH],arg3[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
CHAR_DATA *victim;
int cost=0;
int scope=0;
int type=0;
if(IS_NPC(ch))
return ;
if(ch->pcdata->diplomacy<1)
{
send_to_char("You are not a noble.\n\r",ch);
return ;
}
if(moot->moot_type!=0)
{
send_to_char("A moot is already in progress.\n\r", ch);
return ;
}
argument = one_argument( argument, arg1 );
if(arg1[0]=='\0')
{
do_moothelp(ch,"auto");
return ;
}
if ( ( victim = get_char_world( ch, arg1 ) ) == NULL )
{
send_to_char( "They aren't here.\n\r", ch );
return;
}
if(ch==victim)
{
send_to_char("You cannot call moots on your on behalf.\n\r",ch);
return ;
}
argument = one_argument( argument, arg2 );
if ( !str_cmp( arg2, "reward" ) )
{
argument = one_argument( argument, arg3 );
if(is_number(arg3))
scope=atoi(arg3);
else
{
do_moothelp(ch,"auto");
return ;
}
cost=cost+abs(scope);
type=1;
}
if ( !str_cmp( arg2, "induct" ) )
{
if(victim->pcdata->diplomacy)
{
send_to_char("They are already a noble.\n\r",ch);
return ;
}
cost=2000;
type=2;
}
if ( !str_cmp( arg2, "outcast" ) )
{
if(victim->pcdata->diplomacy==0)
{
send_to_char("They are not a noble.\n\r",ch);
return ;
}
cost=4000;
type=3;
}
if(type==0)
{
send_to_char("That is not a valid moot type.\n\r",ch);
return ;
}
if(ch->pcdata->dip_points<cost)
{
send_to_char("You have not enough diplomacy points to call a moot.\n\r",ch);
return ;
}
switch(type)
{
default: break;
case 1: sprintf(buf,"A moot has been called on your behalf for %+d.\n\r", scope);
send_to_char(buf,victim); break;
case 2: send_to_char("The nobles are attempting to recruit you!!!\n\r",victim);
break;
case 3: send_to_char("Your fellow nobles are trying to outcast you!\n\r",victim);
break;
}
ch->pcdata->dip_points-=cost;
moot->called_by=ch;
moot->moot_victim=victim;
moot->moot_type=type;
moot->scope=scope;
moot->votes_for=0;
moot->votes_against=0;
moot->pulse=PULSE_MOOT;
broadcast_moot();
return ;
}
void resolve_moot(void)
{
bool passed=FALSE;
char buf[MAX_STRING_LENGTH];
DESCRIPTOR_DATA * d;
if(moot->moot_type==1)
{
if(moot->votes_for>moot->votes_against)
{
passed=TRUE;
gain_exp(moot->moot_victim, moot->scope);
}
sprintf(buf, "A moot which %s was called against %s for %d exp.\n\r",
passed ? "passed" : "failed",
moot->moot_victim->name,
moot->scope);
}
if(moot->moot_type==2)
{
if(100*moot->votes_for/((moot->votes_for+moot->votes_against)+1)>70)
{
passed=TRUE;
moot->moot_victim->pcdata->diplomacy=10;
moot->called_by->pcdata->diplomacy+=2;
}
sprintf(buf, "A moot to induct a new noble has %s.\n\r",
passed ? "suceeded" : "failed");
}
if(moot->moot_type==3)
{
if(100*moot->votes_for/((moot->votes_for+moot->votes_against)+1)>80 &&
moot->votes_for>5000)
{
passed=TRUE;
moot->moot_victim->pcdata->diplomacy=0;
moot->called_by->pcdata->diplomacy+=5;
}
else
{
moot->called_by->pcdata->diplomacy=
moot->called_by->pcdata->diplomacy/2-1;
}
sprintf(buf, "A moot to outcast a noble has %s.\n\r",
passed ? "suceeded" : "failed");
if(moot->called_by->pcdata->diplomacy<0)
moot->called_by->pcdata->diplomacy=0;
}
for ( d = descriptor_list; d; d = d->next )
{
if ( d->connected == CON_PLAYING )
{
send_to_char( buf, d->character );
if(!IS_NPC(d->character))
if(d->character->pcdata->diplomacy)
{
if( (d->character->pcdata->in_favor==1 && passed) ||
(d->character->pcdata->in_favor==-1 && !passed))
{
if(number_range(1,100)<(d->character->pcdata->votes_cast*50/((
moot->votes_for+moot->votes_against)+1))
&&number_range(1,20)<d->character->pcdata->votes_cast)
d->character->pcdata->diplomacy++;
if(d->character->pcdata->diplomacy>50)
d->character->pcdata->diplomacy=50;
}
else
{
if(number_range(1,100)<(d->character->pcdata->votes_cast*100/((
moot->votes_for+moot->votes_against)+1)))
d->character->pcdata->diplomacy--;
}
d->character->pcdata->in_favor=0;
d->character->pcdata->votes_cast=0;
}
}
}
moot->called_by=NULL;
moot->moot_victim=NULL;
moot->moot_type=0;
moot->scope=0;
moot->votes_for=0;
moot->votes_against=0;
return ;
}
void do_vote(CHAR_DATA *ch, char * argument)
{
char arg1[MAX_INPUT_LENGTH],arg2[MAX_INPUT_LENGTH];
int votes;
argument = one_argument(argument, arg1);
argument = one_argument(argument, arg2);
if(IS_NPC(ch))
return;
if(moot->moot_type==0)
{
send_to_char("There is no moot in progress.\n\r",ch);
return ;
}
if(arg1[0]=='\0' || !is_number(arg2) ||
!(!str_cmp( arg1, "favor" ) || !str_cmp( arg1, "oppose" )))
{
send_to_char("Syntax: vote favor <votes>\n\rSyntax: vote oppose <votes>\n\r",ch);
return ;
}
votes=atoi(arg2);
if(votes>ch->pcdata->dip_points)
{
send_to_char("You don't have that many votes.\n\r",ch);
return;
}
if(votes<=0)
{
send_to_char("Ho ho ho.\n\r",ch);
return ;
}
if(ch->pcdata->votes_cast)
{
send_to_char("You already voted.\n\r",ch);
return;
}
if(!str_cmp( arg1, "favor" ))
{
ch->pcdata->in_favor=1;
ch->pcdata->dip_points-=votes;
ch->pcdata->votes_cast=votes;
moot->votes_for+=votes;
}
else
{
ch->pcdata->in_favor=-1;
ch->pcdata->dip_points-=votes;
ch->pcdata->votes_cast=votes;
moot->votes_against+=votes;
}
send_to_char("Your votes have been cast\n\r",ch);
return ;
}
void do_dinfo(CHAR_DATA *ch, char * argument)
{
char buf[MAX_STRING_LENGTH];
if(IS_NPC(ch))
return;
sprintf(buf,"Diplomacy:%d Votes:%d\n\r",
ch->pcdata->diplomacy,
ch->pcdata->dip_points);
send_to_char(buf,ch);
return ;
}