void SectorManager::MakeTimedCall(TimeNode *this_node)
{
    TimeNode node;
    memcpy(&node, this_node, sizeof(TimeNode));
    RemoveTimedCall(this_node);

	int ShutdownTimes[] = { 15, 10, 5 };

	Player *p = g_PlayerMgr->GetPlayer(node.player_id);

    if ((node.player_id != NODE_NO_LONGER_NEEDED) &&
        ((node.player_id == SECTOR_SERVER_CONNECTIONLESS_NODE) || p) )
	{
		switch(node.func)
		{
		case B_WARP_BROADCAST:
            p->StartWarp();
			break;
		case B_DESTROY_RESOURCE:
			m_ObjectMgr->DestroyObject(node.obj, 0, node.i1);
			break;
		case B_WARP_RESET:
			p->FinalWarpReset();
			break;
		case B_WARP_TERMINATE:
            p->TerminateWarp();
			break;
		case B_MINE_RESOURCE://(time_to_drain, obj, stack_val, slot);
            p->PullOreFromResource(node.obj, node.i1, node.i2, node.i3, node.i4);
			break;
		case B_COLLECT_RESOURCE:
            p->TakeOreOnboard(node.obj, node.i3);
			break;
		case B_MOB_DAMAGE:
			node.obj->DamageMOB(node.i1, node.i2, node.a, node.i3);
			break;
        case B_SHIP_DAMAGE:
            p->ShipDamage(node.i1, node.a, (short)node.i2);
            break;
		case B_RECHARGE_REACTOR:
			RechargeReactor(p);
			break;
        case B_RECHARGE_SHIELD:
            RechargeShield(p);
            break;
		case B_FORCE_LOGOUT:
			ForceLogout(p);
			break;
		case B_BUFF_TIMEOUT:
			BuffTimeout(p);
			break;
        case B_CAMERA_CONTROL:
            p->SendCameraControl(node.i1, node.i2);
            break;
        case B_MANUFACTURE_ACTION:
            p->ManufactureTimedReturn(node.i1);
            break;
        case B_ITEM_INSTALL:
            p->m_Equip[node.i1].FinishInstall();
            break;
        case B_ITEM_COOLDOWN:
            p->m_Equip[node.i1].CoolDown();
            break;
        case B_TEST_MESSAGE:
            p->SendVaMessage("Test Message time: %d [%d]",node.event_time, node.i1);
            break;
		case B_ABILITY_REMOVE:
			p->AbilityRemove(node.i1);
			break;
		case B_PLAYER_BUFFS:
			p->m_Buffs.Update(node.i1);
			break;
		case B_SHOOT_AMMO:
			p->m_Equip[node.i1].ShootAmmo(node.i2);
			break;
		case B_SERVER_SHUTDOWN:
			char Msg[60];
			sprintf(Msg, "Server shutdown in %d seconds!", ShutdownTimes[m_ShutDownMark]);
			g_ServerMgr->m_PlayerMgr.GlobalAdminMessage(Msg);
			AddTimedCall(0, B_SERVER_SHUTDOWN, ShutdownTimes[m_ShutDownMark] * 1000, NULL);
			m_ShutDownMark++;
			if (m_ShutDownMark > 2)
			{
				// Shutdown the server
				g_ServerShutdown = true;
			}
		}
	}
}