Пример #1
0
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);
		}
	}
Пример #2
0
CDList*
CD_CloneList (CDList* self)
{
    CDList* cloned = CD_CreateList();

    assert(self);

    CD_LIST_FOREACH(self, it) {
        CD_ListPush(cloned, CD_ListIteratorValue(it));
    }
Пример #3
0
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;
}
Пример #4
0
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;
			}
		}
	}
Пример #5
0
	CD_LIST_FOREACH(parameters, it) {
		CD_free((char*) CD_ListIteratorValue(it));
	}