/***************************************************************************
* Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik Stærfeldt, Tom Madsen, and Katja Nyboe. *
* *
* Merc Diku Mud improvements copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* *
* ROM 2.4 is copyright 1993-1995 Russ Taylor *
* ROM has been brought to you by the ROM consortium *
* Russ Taylor (rtaylor@pacinfo.com) *
* Gabrielle Taylor (gtaylor@pacinfo.com) *
* Brian Moore (rom@rom.efn.org) *
* ROT 2.0 is copyright 1996-1999 by Russ Walsh *
* DRM 1.0a is copyright 2000-2002 by Joshua Chance Blackwell *
* SD 2.0 is copyright 2004-2006 by Patrick Mylund Nielsen *
***************************************************************************/
#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "h/mud.h"
#include "h/events.h"
bool happyhouron;
HOLIDAY_DATA *get_holiday(short month, short day);
void auto_tag(void);
bool eventexp = FALSE;
// extern bool doubleexp;
/*
* CHANCE function. I use this everywhere in my code, very handy :>
*/
bool echance(int num)
{
if(number_range(1, 100) <= num)
return TRUE;
else
return FALSE;
}
bool bigchance(int num)
{
if(number_range(1, 1500) * 2 <= num)
return TRUE;
else
return FALSE;
}
WOLLA(dailyevents)
{
HOLIDAY_DATA *holiday;
short day;
day = time_info.day + 1;
/*
* Basic events that have their own chance check
*/
holiday = get_holiday(time_info.month, day - 1);
/*
if( holiday != NULL && !doubleexp )
{
do_dexp( NULL, "" );
starteventdoubleexp = current_time;
}
else if ( !doubleexp && !eventexp )
{
event_doubleexp( );
event_happyhour( );
}
*/
if(holiday != NULL)
{
event_happyhour();
}
/*
* Random pill and angel/demon token spreading
*/
random_spread();
/*
* Auto Freezetag Game
*/
if(bigchance(5))
auto_tag();
if(echance(1))
happymoment();
/*
* City-wide plauge
*/
/*
if( bigchance( 1 ) )
event_plauge( );
*/
}
WOLLA(event_doubleexp)
{
if((!eventexp) && (echance(5)))
{
eventexp = TRUE;
echo_to_all(AT_RED, "[&WEvent&R] &CIt is time for Double Experience! Get killing!\r\n", ECHOTAR_ALL);
}
else if((eventexp) && (echance(8)))
{
eventexp = FALSE;
echo_to_all(AT_RED, "[&WEvent&R] &CDouble Experience is over.\r\n", ECHOTAR_ALL);
}
}
WOLLA(event_happyhour)
{
if((!happyhouron) && (echance(3)))
{
happyhouron;
echo_to_all(AT_RED, "[&WEvent&R] &CIt is time for HAPPY HOUR! Everyone join a group!\r\n", ECHOTAR_ALL);
return;
}
else if((happyhouron) && (echance(3)))
{
!happyhouron;
echo_to_all(AT_RED, "[&WEvent&R] &CHAPPY HOUR is over.\r\n", ECHOTAR_ALL);
return;
}
}
WOLLA(happymoment)
{
int sn = gsn_boost;
AFFECT_DATA af;
CHAR_DATA *ch;
DESCRIPTOR_DATA *d;
long happymomentbonus;
for(d = first_descriptor; d; d = d->next)
{
if(d->connected == CON_PLAYING && (ch = (d->original ? d->original : d->character)) != NULL)
{
if(!IS_NPC(ch) && !xIS_SET(ch->act, PLR_AFK))
{
send_to_char("&YThe STAFF of &RClassic 6Dragons&Y thank you for your patronage!\r\n\r\n", ch);
if((ch->level < LEVEL_AVATAR))
{
if(echance(70))
{
happymomentbonus = number_range(10, 10000);
gain_exp(ch, happymomentbonus);
printf_to_char(ch, "&WFree Exp!!! &r(&R%ld&r)\r\n", happymomentbonus);
}
else
send_to_char("&WSorry, you didn't get any exp this time.\r\n", ch);
}
if(xIS_SET(ch->act, PLR_RP) && echance(60))
{
ch_printf(ch, "&WYour glory has increased by 5 for your Role play participation!&D\r\n");
ch->quest_curr += 5;
}
if(echance(60) && !xIS_SET(ch->act, PLR_RP))
{
happymomentbonus = number_range(1, 300);
GET_MONEY(ch, CURR_SILVER) += happymomentbonus;
printf_to_char(ch, "&WYour silver amount increases by &r(&R%ld&r)&w!!\r\n", happymomentbonus);
}
else
send_to_char("&WSorry, you didn't get any silver this time.\r\n", ch);
if (echance(30))
{
if(ch->hit < ch->max_hit)
ch->hit = ch->max_hit;
if(ch->move < ch->max_move)
ch->move = ch->max_move;
af.type = sn;
af.level = ch->level;
af.duration = 100;
af.location = APPLY_AFFECT;
af.modifier = 0;
af.bitvector = meb(AFF_SANCTUARY);
affect_to_char(ch, &af);
af.level = ch->level;
af.type = sn;
af.duration = 100;
af.location = APPLY_DAMROLL;
af.modifier = 5;
af.bitvector = meb(AFF_BOOST);
affect_to_char(ch, &af);
af.level = ch->level;
af.type = sn;
af.duration = 100;
af.location = APPLY_HITROLL;
af.modifier = 5;
af.bitvector = meb(AFF_BOOST);
affect_to_char(ch, &af);
send_to_char("&YThe STAFF of &RClassic 6Dragons&Y have granted you a minor boost!&D\r\n", d->character);
}
else
{
if(ch->hit < ch->max_hit)
ch->hit = ch->max_hit;
if(ch->move < ch->max_move)
ch->move = ch->max_move;
send_to_char("&YThe STAFF of &RClassic 6Dragons&Y have restored you!&D\r\n", d->character);
}
}
}
}
}
WOLLA(random_spread)
{
OBJ_DATA *pill = NULL;
ROOM_INDEX_DATA *room = NULL;
AREA_DATA *pArea = NULL;
int tried = 0;
if(bigchance(40))
{
for(;;)
{
if(++tried == 10000)
{
room = NULL;
pArea = NULL;
break;
}
if(!(room = get_room_index(number_range(100, 41000))))
continue;
pArea = room->area;
if(!IS_SET(pArea->flags, AFLAG_UNOTSEE))
break;
}
if(room)
{
if((pill = create_object(get_obj_index(OBJ_VNUM_QUEST_PILL), 0)))
{
pill->timer = 340;
obj_to_room(pill, room);
}
}
room = NULL;
pArea = NULL;
tried = 0;
if(bigchance(1) && (time_info.hour == 2))
{
for(;;)
{
if(++tried == 10000)
{
room = NULL;
pArea = NULL;
break;
}
if(!(room = get_room_index(number_range(100, 41000))))
continue;
pArea = room->area;
if(!IS_SET(pArea->flags, AFLAG_UNOTSEE))
break;
}
}
if(room)
{
if((pill = create_object(get_obj_index(OBJ_VNUM_DEMON_TOKEN_FOUND), 0)))
obj_to_room(pill, room);
}
}
room = NULL;
pArea = NULL;
tried = 0;
if(bigchance(1) && (time_info.hour == 6))
{
for(;;)
{
if(++tried == 10000)
{
room = NULL;
pArea = NULL;
break;
}
if(!(room = get_room_index(number_range(100, 41000))))
continue;
pArea = room->area;
if(!IS_SET(pArea->flags, AFLAG_UNOTSEE))
break;
}
if(room)
{
if((pill = create_object(get_obj_index(OBJ_VNUM_ANGEL_TOKEN_FOUND), 0)))
obj_to_room(pill, room);
}
}
}