;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL

Topo

Assassin's Creed Valhalla: como descobrir quem traiu Souma

Suoma é uma das vikings que precisa de ajuda em Assassin"s Creed Valhalla - Reprodução/START
Suoma é uma das vikings que precisa de ajuda em Assassin's Creed Valhalla Imagem: Reprodução/START

Gabriel Magalhães

Do GameHall

13/03/2021 04h00

Identificar quem traiu Souma na quest "Fedor da Traição" é um dos primeiros desafios em Assassin's Creed Valhalla. Você deve descobrir quem é o lobo em pele de cordeiro, e para isso terá que investigar três pessoas de confiança da viking: Birna, Galinn e Lif.

Atenção, pois daqui pra frente haverá spoilers do jogo, então leia por sua conta e risco!

AC Valhalla 1 - Gabriel Magalhães/GameHall - Gabriel Magalhães/GameHall
Um dos três é o traidor
Imagem: Gabriel Magalhães/GameHall

É de extrema importância acusar a pessoa correta, porque apontar para o traidor errado vai trazer consequências graves e um final ruim para todo o arco.

Como encontrar o traidor

Primeiramente você deve realizar as missões específicas na companhia de cada um dos suspeitos. É importante seguir este o para conhecer os nórdicos um pouco melhor e também ganhar mais XP para Eivor.

Antes de iniciar a missão de cada um, aproveite para conversar com eles e entender as possíveis motivações de traição que eles possam ter.

Logo depois, retorne para a casa comunitária de Souma e vasculhe a agem secreta que ela te apresentou anteriormente. Desça as escadas, siga pelo túnel e interaja com o "X" pintado na pedra com tinta amarela.

AC Valhalla 2 - Gabriel Magalhães/GameHall - Gabriel Magalhães/GameHall
Assassin's Creed: Valhalla
Imagem: Gabriel Magalhães/GameHall

Em seguida, dirija-se para o campo aberto e siga o rastro de tinta amarela deixado pelo caminho. Utilize a visão especial para facilitar a busca. Na margem do rio você encontrará outra pista, isto é, um barco pintado com a mesma tinta.

Navegue pelo rio até encontrar terra firme com outro barco encalhado. Tome cuidado, pois nesta região você enfrentará alguns bandidos. O barco em questão tem duas novas pistas, uma nota escrita por Galinn e tinta amarela no casco do barco, detalhe diferente dos demais de sua frota.

Se você olhar em volta perceberá que está no local onde encontrou Galinn pela primeira vez, cercado por lobos. Agora você já sabe que quem traiu Souma foi Galinn. Reúna-se com a jarlskona na casa comunitária e a informe que já tem ciência de quem cometeu o crime.

Visto que muitos jogadores são apressados, vai aqui uma dica: você não precisa conduzir a investigação para acusar Galinn, caso queira pular esta parte, basta ir até Souma logo após cumprir as missões específicas de Birna, Galinn e Lif e dizer "na lata" que Galinn é o traidor.

Não se preocupe, pois o traidor não muda de acordo com suas escolhas do game, ele sempre será o mesmo personagem.

SIGA O START NAS REDES SOCIAIS

Twitter: https://twitter.com/start_uol
Instagram: https://www.instagram.com/start_uol/
Facebook: https://www.facebook.com/startuol/
TikTok: https://www.tiktok.com/@start_uol/
Twitch: https://www.twitch.tv/start_uol