A function to cancel a single specific event, I used Ripley's change_duration as the model
I also added an "interrupt_events" function which I call in "command_interpreter", so you can have events interrupted or canceled just like how you become un-hidden if you hit enter or do anything else.
Code:
void event_cancel_specific(struct char_data *ch, event_id iId)
{
struct event * pEvent;
struct mud_event_data * pMudEvent = NULL;
bool found = FALSE;
if (ch->events == NULL)
return;
if (ch->events->iSize == 0)
return;
clear_simple_list();
while ((pEvent = (struct event *) simple_list(ch->events)) != NULL) {
if (!pEvent->isMudEvent)
continue;
pMudEvent = (struct mud_event_data * ) pEvent->event_obj;
if (pMudEvent->iId == iId) {
found = TRUE;
break;
}
}
if (found)
event_cancel(pEvent);
return;
}
Code:
void interrupt_events(struct char_data *ch)
{
/* Cancel events that require player to wait before completion..
* Replace 'eREPAIR' with your own events
*/
event_cancel_specific(ch, eREPAIR);
}