static void cdsurvival_TimeIncrease (void* _, void* __, CDServer* server) { CDList* worlds = (CDList*) CD_DynamicGet(server, "World.list"); CD_LIST_FOREACH(worlds, it) { SVWorld* world = (SVWorld*) CD_ListIteratorValue(it); uint16_t current = SV_WorldGetTime(world); if (current >= 0 && current <= 11999) { SV_WorldSetTime(world, current += world->config.cache.rate.day); } else if (current >= 12000 && current <= 13799) { SV_WorldSetTime(world, current += world->config.cache.rate.sunset); } else if (current >= 13800 && current <= 22199) { SV_WorldSetTime(world, current += world->config.cache.rate.night); } else if (current >= 22200 && current <= 23999) { SV_WorldSetTime(world, current += world->config.cache.rate.sunrise); } if (current >= 24000) { SV_WorldSetTime(world, current - 24000); } }
CDList* CD_CloneList (CDList* self) { CDList* cloned = CD_CreateList(); assert(self); CD_LIST_FOREACH(self, it) { CD_ListPush(cloned, CD_ListIteratorValue(it)); }
bool cd_EventAfterDispatch (CDServer* self, const char* eventName, bool interrupted, ...) { CDList* callbacks = (CDList*) CD_HashGet(self->event.callbacks, "Event.dispatch:after"); bool result = true; va_list ap; va_start(ap, interrupted); CD_LIST_FOREACH(callbacks, it) { if (!CD_ListIteratorValue(it)) { continue; } if (!((CDEventCallback*) CD_ListIteratorValue(it))->function(self, eventName, interrupted, ap)) { result = CD_ListStopIterating(callbacks, false); break; } } va_end(ap); return result; }
static bool cdadmin_PlayerLogout (CDServer* server, CDPlayer* player, bool status) { CD_ListDeleteIf(_tickets, (CDPointer) player, (CDListCompareCallback) cdadmin_CompareTicket); if (cdadmin_AuthLevelIsEnough(player, CDLevelModerator)) { CD_LIST_FOREACH(_tickets, it) { CDATicket* ticket = (CDATicket*) CD_ListIteratorValue(it); if (ticket->assignee == player) { ticket->status = CDTicketOpen; ticket->assignee = NULL; } } }
CD_LIST_FOREACH(parameters, it) { CD_free((char*) CD_ListIteratorValue(it)); }