jptrrs / SpeakUp

A conversation mod for RimWorld
4 stars 23 forks source link

Metralhada de respostas #9

Closed sergiodinapoli closed 3 years ago

sergiodinapoli commented 3 years ago

Chitchat inicial: This place is a dream come true. I'm so happy to be here!

Resposta prevista: That's exactly what I think, [RECIPIENT_nameDef]!

Esta resposta correta é dada sim --- mas é repetida mais 6 vezes!

No meio delas, há a resposta "I hope I won't have to go outside." . Esta resposta é para um chitchat (It's raining) feito quase uma hora antes (!!!), envolvendo sempre a mesma dupla de pawns.

A metralhada é sempre entre eles, um ping-pong duradouro de respostas. Cada resposta tinha que ser uma unica reaçao a um singulo chitchat, mas aqui temos 1 chitchat que gera esse barraco todo. No meio da micareta também há mais duas respostas ao chitchat "It's raining", so que de outro tipo: "Luckily we're inside, all set and cozy.". Bem estranho. De novo, era pra ter "It's raining" e depois disso uma unica resposta, mas nao... teve varias e além disso, espalhadas no tempo.

Pelo que entendi o 3° pawn nao tem nada a ver com essa loucura :).

Analisando o dialogo (observe que ele é logado em ordem invertida), até esse ponto: That's exactly what I think, Steroid! This place is a dream come true. I'm so happy to be here! I hope I won't have to go outside. It's raining.

Tudo funciona como previsto. "That's exactly what I think, [RECIPIENT_nameDef]!" é o que se esperava.

Mas logo apos isso, temos um inesperado "Same here, Gerador!", que de fato é a "resposta fantasma" ao chitchat anterior "I had my last meal in an extremely impressive dining room. I could stay there forever." - chitchat cuja resposta ja tinha sido dada normalmente, antes. Esse "fantasma" é uma repetiçao indevida, nao solicitada.

Parece que um chitchat pode gerar mais respostas - uma certeira e algumas "fantasma", que sao jogadas para ticks futuros random.

Essa é a minha analise de Sherlock Holmes bebezinho.

Anexo:

Toda vez que cito "chitchat", pode conferir e achar facilmente no Patches.xml Toda vez que cito "resposta", pode conferir e achar facilmente no Interactions.xml

Especificamente, a linha logo antes do caos, a "That's exactly what I think" faz parte da interactionDef chamada "ReactToThought_NeedBeauty_gorgeous".

Vamos ver se fui suficientemente informativo :-)

PS. se vc usar o savegame, vai ver que despausando vai rolar uma micareta metralhosa bem confusa naquela sala de ouro kkk ; tudo vai se acalmar bem depois, apenas.

image dialog simple.txt f12.txt bugsave.zip

sergiodinapoli commented 3 years ago

Infelizmente a metralhada infernal voltou. Mesmo save, mas mais pra frente no test. O F12 nem consegui te passar desta vez pois mesmo sem verbose, ficou 41mb. Neste ponto, colocar grammar resolution deixava o jogo lentissimo. Tentei recolher mais detalhes, mas é isso. A foto nem precisa, é a mesma coisa da foto anterior, so que com outros dialogos que estao no megabug.txt anexo. Detalhe que a metralhada é de respostas, nunca de chitchats.

Outra coisa talvez peculiar: tudo começou... ... quando um pawn perguntou "Ow nossa rec room é foda né?" e o outro era pra responder "é sim, mermao!" mas... ao invés disso, respondeu "qual rec room? temos uma?".

Essa troca usa essas linhas:

No Patches.xml (chitchat):

  • thought_joyroom(INITIATOR_thoughtLabel==extremely impressive rec room)->I think our rec room is extremely impressive!
  • No Interactions.xml:

  • r_logentry(INITIATOR_opinion>=0)->[good_opinion]
  • good_opinion(INITIATOR_thoughtDefName==JoyActivityInImpressiveRecRoom,priority=1)->[rec_room]
  • ai tem as opçoes de rec_room (que nao listo, mas entre elas tem a resposta que era pra ter). E depois vem:

  • good_opinion->What rec room, [RECIPIENT_nameDef]? [comment]
  • Pelo que eu acho que programei, era pra logo ir na priority=1, pois o pawn tinha aquele thought JoyActivityInImpressiveRecRoom. Mas parece que priority foi ignorado e caiu direto pra linha default.

    E depois deste imprevisto, a metralhada satanica apareceu. Nao sei se é coincidencia... mas enfim é isso. Que pena que a metralhada satanica voltou :-( ...

    megabugsave.zip dialog simple megabug.txt

    jptrrs commented 3 years ago

    Vamos ver se fui suficientemente informativo :-)

    Sim! Especialmente com o savegame, já que isso me permitiu encontrar rapidamente o mesmo erro e submetê-lo a testes. Mas, apesar de ter feito algumas tentativas, ainda não consegui entender o que causa as repetições. E sendo algo que acontece aleatoriamente, é realmente difícil rastrear o que tá acontecendo com as nossas ferramentas atuais. Então eu fiz o seguinte: https://github.com/jptrrs/SpeakUp/releases/tag/v0.4.2

    Espero que isso ajude a jogar uma luz. Bora continuar testando...

    sergiodinapoli commented 3 years ago

    Sim, foi excelente você roubar uma minha ideia para gerar outra ideia kkk Ideia muito boa por sinal. Hoje provavelmente vou poder testar pouco e tal, mas amanha vou ter bem mais tempo. Para testar localmente aqui, eu preciso baixar so o DLL ou também outras coisas?

    sergiodinapoli commented 3 years ago

    Coloquei apenas o DLL e lancei o jogo. Logo na 1° interação rolou o bug - olha que doido. Há a interação devida normal e 3 segundos depois rola a micareta, com muitas respostas indevidas.

    Fui ver a ferramenta nova q vc incluiu e achei lindo, vc clica e sabe das coisas. Mas - talvez porque acabo de acordar? - nao consegui puxar detalhes uteis. Especificamente, nao consegui puxar a resposta tal a que se refere.

    Ai pensei: blz, mando o savegame. Espero ter feito a coisa certa :-)

    bugsave0.zip

    jptrrs commented 3 years ago

    É, mas aí eu abro e aí? Nada acontece. Serviu pra nada. Você viu o que escrevi da última vez?

    Roubei sua idéia e coloquei o relatório de validação das linhas restrito a quando vc clica na linha desejada no painel de log do pawn. Assim, dá para deixar o "Verbose Logging" ligado para abrir espaço para... Uma mensagem de diagnóstico a cada resposta....Com isso, quando a metralhadora acontecer, vamos saber quem exatamente está falando com quem e de onde saiu aquela frase.

    Preciso do resultado dessa ação, ou seja, o log. Como sempre.

    sergiodinapoli commented 3 years ago

    Pera, então se você abre o savegame, todo o log até aquele momento (o log Social) não vai junto? :-o Achava que sim! Como da outra vez você falou "Sim! Especialmente com o savegame, já que isso me permitiu encontrar rapidamente o mesmo erro e submetê-lo a testes." imaginei que isso incluia também o log.

    Bom entao futuramente vou sempre mandar o log, log mirado - usando sua nova ferramenta "clique-e-logue". Quando é bom mandar savegame? Sempre? apenas às vezes?

    jptrrs commented 3 years ago

    Vai sim, mas o que eu vou fazer com esse log? Não tem nada de novo nele.

    Bom entao futuramente vou sempre mandar o log, log mirado - usando sua nova ferramenta "clique-e-logue".

    Em que momento eu pedi para você mandar isso?

    Quando é bom mandar savegame? Sempre? apenas às vezes?

    É preciso que vc mande o que for relevante para o caso em questão. Não tem ecapatória, Sérgio, vc vai ter que parar pra pensar no assunto! rsrsrsrsrs

    sergiodinapoli commented 3 years ago

    Estou bastante confuso. E me sinto um fracasso. Não consigo me orientar. E como não tenho costume de ficar perdido, o caos na cabeça explode ainda mais.

    Vou tentar fazer do meu melhor, mas acho que no momento consigo contribuir pouquíssimo à luta ao bugzaum.

    Bugzaum que alias por mim bastaria resolver ele para já ir pro Early Access e começar a festa (que tanto gostaria de começar) de interagir com o planeta. Sim, poderia escrever mais XML ainda , mas já estou numa fase de cansaço/tédio disso e bem a fim de lançar o mod pra ver no que dá.

    jptrrs commented 3 years ago

    Cara, é muito simples. Leia de novo:

    Vamos ver se fui suficientemente informativo :-)

    Sim! Especialmente com o savegame, já que isso me permitiu encontrar rapidamente o mesmo erro e submetê-lo a testes. Mas, apesar de ter feito algumas tentativas, ainda não consegui entender o que causa as repetições. E sendo algo que acontece aleatoriamente, é realmente difícil rastrear o que tá acontecendo com as nossas ferramentas atuais. Então eu fiz o seguinte: https://github.com/jptrrs/SpeakUp/releases/tag/v0.4.2

    • Roubei sua idéia e coloquei o relatório de validação das linhas restrito a quando vc clica na linha desejada no painel de log do pawn. Assim, dá para deixar o "Verbose Logging" ligado para abrir espaço para...

    • Uma mensagem de diagnóstico a cada resposta. Exemplo: [SpeakUp] Steroid continues the conversation with Gerador, reply #1 (need - beauty - react to gorgeous). Com isso, quando a metralhadora acontecer, vamos saber quem exatamente está falando com quem e de onde saiu aquela frase.

    Espero que isso ajude a jogar uma luz. Bora continuar testando...

    sergiodinapoli commented 3 years ago

    Va bene! :-)

    jptrrs commented 3 years ago

    Joguei algumas horaas ontem com o SketchUp e a repetição não aconteceu nenhuma vez, acredita?

    sergiodinapoli commented 3 years ago

    SketchUp! Esse nome è perfeito para outro MOD onde os pawns desenham coisas random kkk (eu to brincando, mas quem sabe... ;-) ).

    Bom, o que posso dizer? Lei de Murphy. Eu estou focando muito no XML mesmo pra testar depois. Na vdd (off-topic) nao estou sendo muito produtivo recentemente, por motivos pessoais. Mas já estou nos trilhos de novo. Mesmo porque - repito - estou bem doido pra logo lançar o mod e abrir as danças.

    Por favor continue testando - uma hora vai surgir, e vai surgir com tudo. Os velhos savegames nao ajudam?

    jptrrs commented 3 years ago

    Aff.. SketchUp é um programa que eu uso.... Será que foi o auto-corretor do computador ou o dos meus dedos? rsrsrsr Assim, não coloquei os savegames para rodar por várias horas enquanto esperava o bug acontecer não.. esperei no máximo uns 3 minutos... mas talvez seja uma alternativa.... Mas siga testando com o Verbose Logging para ver se a gente pega.

    sergiodinapoli commented 3 years ago

    Sim, vou ir testando tb. Certamente 2 pessoas testando acelera bem a coisa. " testando com o Verbose Logging" --> usando sua nova funçao diagnostica?

    jptrrs commented 3 years ago

    " testando com o Verbose Logging" --> usando sua nova funçao diagnostica?

    Sim, mas não tem que fazer nada, só deixar o Verbose Logging e observar o log. Como eu disse:

    Roubei sua idéia e coloquei o relatório de validação das linhas restrito a quando vc clica na linha desejada no painel de log do pawn. Assim, dá para deixar o "Verbose Logging" ligado para abrir espaço para... Uma mensagem de diagnóstico a cada resposta....Com isso, quando a metralhadora acontecer, vamos saber quem exatamente está falando com quem e de onde saiu aquela frase.

    sergiodinapoli commented 3 years ago

    f12-alexis.txt log-alexis.txt Aqui tem Kesa que reclama que a area de jantar nao é la grandes coisas. E a Alexis que responde. So que, ela responde 2 vezes à mesma conversa. No log aparece: 2 [SpeakUp] Alexis continues the conversation with Kesa, reply #1 (ate without table).

    Como houve 2 respostas, imaginaria que houvesse 2 dessas linhas. Porém, nao. Tem uma apenas. Porém, notei que o numero que inicia a linha do log é "2" enquanto as demais tem "1".

    O que significa isso? Nunca prestei atençao a esse numero. Mas aqui a situaço bugada é essa: 1 chitchat seguido por varias respostas (nesse caso 2), quando o normal era ter 1 resposta apenas.

    Anexei os logs. Como sempre - espero ter feito certo :-)

    PS: despausei o jogo e teve muuuuuitas respostas, metralhadinha, mas sem loop infinito. Seguem os logs atualizados com a metralhadinha. log2-alexis.txt f12-2-alexis.txt

    jptrrs commented 3 years ago

    O "2" significa que ocorreram duas linhas identicas. E isso é um progresso, porque agora sabemos que as duas falas tem origem na mesma conversa e não em duas conversas paralelas. Os logs estão ok. Vou analisar assim que puder.

    jptrrs commented 3 years ago

    Estou vendo os seus logs aqui para tentar bolar uma solução... mas putz, ainda tá cheio de "FAILED validating constraints for r_logentry"!!! Essa é a mensagem que agora só aparece se você abrir manualmente o log social e clicar nas linhas. Ou seja: eu fiz o negócio de clicar para limpar o log de erros e ficar mais fácil de ver a mensagem nova e vc vai lá e lota o log de mensagens inúteis tudo de novo!!! Muito frustrante!!

    sergiodinapoli commented 3 years ago

    :-o

    Uma dúvida: quando você diz "e vc vai lá e lota o log de mensagens inúteis tudo de novo!!!"

    esse "vc" sou eu mesmo? eu que errei? ou é um "vc" impessoal (tipo: erro do sistema que você montou)? Obviamente se eu fiz algo errado foi sem querer viu :-) - jamais gostaria propositalmente de criar frustração proce.

    Tem algo que eu possa fazer para melhorar o quadro?

    Tudo que eu fiz foi: 1) aguardar o bug rolar 2) clicar no log social, apenas nos lugares certos (nao spammei nada manualmente) 3) salvar e enviar o log proce

    jptrrs commented 3 years ago

    clicar no log social, apenas nos lugares certos (nao spammei nada manualmente)

    Mas por quê isso?! Eu não falei:

    Sim, mas não tem que fazer nada, só deixar o Verbose Logging e observar o log.

    E antes

    coloquei o relatório de validação das linhas restrito a quando vc clica na linha desejada no painel de log do pawn. Assim, dá para deixar o "Verbose Logging" ligado para abrir espaço para...

    É como se tivéssemos uma pizzaria que a cozinha está toda bagunçada e a pizza tá saindo errada. Aí eu te falo, "Sérgio, eu limpei a mesa e coloquei todas as cebolas no armário, assim dá pra usar o espaço para trabalhar melhor a massa". E daí vem o resultado: uma pizza com cebola!! kkkkkk

    sergiodinapoli commented 3 years ago

    Eh entao sou burro mesmo. Por favor me trate igual burro. :-D

    Ainda bem que vc colocou "kkkkkkkk" no fim pois estava bem preocupado que voce tivesse ficado puto - algo que jamais gostaria.

    Bom entao, esclarecendo - para o futuro: 1) abro o jogo (com verbose ligado) 2) aguardo o bug aparecer 3) faço absolutamente NADA a nao ser 4) salvar e enviar o log do jeito que esta'

    é isso?

    OBS: amei a metafora da pizzaria kkk

    jptrrs commented 3 years ago

    Hehehe, vou ter que apelar para o seu orgulho italiano então e descrever as coisas em termos de comida italiana feita do jeito errado!!! E mais uma metáfora: estou falando alto e gesticulando, não quer dizer que estou puto contigo. Se estivesse, não estaria nem tentando resolver o problema. Para o futuro: não faça nada no modo automático. Saia do automático e leia as mensagens de erro e o que elas querem dizer. Não vai ter fórmula. O log é sempre útil, mas não adianta encher de cebola. Para ESSE ERRO, estamos procurando a mensagem de diagnótico da resposta: [SpeakUp] Steroid continues the conversation with Gerador, reply #1 (need - beauty - react to gorgeous). Mas ela tá aqui nos seus logs, perdida no meio de uma montanha de cebola, mas tá aqui. Já pegamos o erro "no flagra" por assim dizer. Estou tentando bolar uma solução.

    jptrrs commented 3 years ago

    Ok, eis uma tentativa de atacar o problema. Vou tentar explicar o que eu fiz, por favor, leia com atenção para você poder entender e me ajudar a avaliar o resultado! O mod tem basicamente dois processos em paralelo:

    1. Quando uma interação acontece, preparar uma resposta e agendá-la (o GrammarResolver.TryResolveRecursive do jogo ativa o nosso DialogManager.Ensue).
    2. Disparar as respostas agendadas quando for a hora (o _PawnInteractionsTracker.InteractionsTrackerTick ativa o nosso DialogManager.FireStatement).

    O problema pode estar em qualquer um dos dois (e, espero, apenas neles). Minha hipótese é que respostas duplicadas acontecem quando duas falas idênticas são agendadas por engano. Para descobrir o motivo, eu preparei duas mensagens de erro (daqueles vermelhos, que assustam e não precisam que o verbose logging esteja ligado - ou seja, pode desligar!). Dependendo de qual erro acontece primeiro, vamos saber melhor o que o desencadeia a situação. Os erros possíveis em cada processo são:

    1. "[SpeakUp] FULANO tried to repeat a reply for INTDEF while talking to SICRANO. FULANO is participating in X current talks".
    2. "[SpeakUp] More that one statement scheduled for FULANO at the same time!

    No caso do número 1, se ele acontecer, a fala duplicada nem vai ser agendada, o que resolveria temporariamente o problema. Mas em ambos os casos vai aparecer uma mensagem grande e gorda de erro. É de propósito, para a gente ficar sabendo o que rolou. Uma vez identificada a raiz do problema eu posso tirar esses erros. Agora, continuamos escravos do acontecimento aleatório, então vai ser preciso continuar testando. Fique de olho no game log para pegar essas mensagens quando elas aparecerem! Quando acontecer, me manda o log como vc tem feito (mas sem colocar cebolas!). Vlw!

    jptrrs commented 3 years ago

    A propósito, use essa versão: https://github.com/jptrrs/SpeakUp/releases/tag/v0.4.3

    sergiodinapoli commented 3 years ago

    erro vermelho.txt erro vermelho f12.txt

    Esses logs ajudam? Nao fiz nada, assim que rolou, pausei e salvei os logs :-)

    sergiodinapoli commented 3 years ago

    erro vermelho 00.txt E misteriosamente consegui fazer o f12 online: https://gist.github.com/6b8d26255e8bf88541756c1fe33ce1e1

    Espero que esses logs tb ajudem.

    PS: logo em seguida teve mais. Aqui o link atualizado: https://gist.github.com/dcc10816ef337357e84f00075f28ad80

    jptrrs commented 3 years ago

    Ok, valeu demais. No log da semana passada eu já tinha percebido um padrão e esse confirmou: temos "conversas" paralelas. Acho que sei o que acontece, então modifiquei algo no Ensue. Veja se essa última versão resolve o problema: https://github.com/jptrrs/SpeakUp/releases/tag/v0.5

    sergiodinapoli commented 3 years ago

    Ja deu um problema infelizmente ([SpeakUp] More than one statement scheduled for Nummy at the same time!). Aqui: buglog.txt https://gist.github.com/96c3f0692e02fcdfc0a0804983dc4369

    jptrrs commented 3 years ago

    Mas apareceu alguma fala repetida?

    sergiodinapoli commented 3 years ago

    Aparecer, nao apareceu. Mas o erro vermelho apareceu. Inclusive esta' aparecendo mais e mais vezes, vou em breve te mandar o log atualizado.

    sergiodinapoli commented 3 years ago

    buglog.txt Aqui o atualizado. Tudo ocorreu em minutos um do outro. https://gist.github.com/6ced4836eacb078ff447e7113642abe6

    jptrrs commented 3 years ago

    Uai, o problema é só a nossa mensagem de diagnóstico? Não por isso, aqui ela está desativada: https://github.com/jptrrs/SpeakUp/releases/tag/v0.5.1

    sergiodinapoli commented 3 years ago

    Nao entendi uma coisa. Voce pretende consertar o bug impedindo ele de acontecer e silenciando o grito doloroso do bug vermelho? :-) Se for isso, pode ser. Mas me preocupa: "silenciar" o bug nao vai criar problemas de overhead depois? Nao sei do assunto, mas se essa tentativa de repetir dialogo cria estresse de calculo, ai é perigoso. Se a "tentativa de bug" em si nao custa nada (em termos de peso de calculo), ai sim - silenciar o bug equivale a mata-lo kkk

    jptrrs commented 3 years ago

    Nao entendi uma coisa. Voce pretende consertar o bug impedindo ele de acontecer e silenciando o grito doloroso do bug vermelho? :-)

    Nossa, que drama!!!! kkkkkk Eu pretendo já ter consertado o problema. Mas vem cá...qual era o problema mesmo? As falas repetirem? Ou o erro vermelho? Lembra do que eu escrevi sobre a mensagem de erro!

    Mas em ambos os casos vai aparecer uma mensagem grande e gorda de erro. É de propósito, para a gente ficar sabendo o que rolou. Uma vez identificada a raiz do problema eu posso tirar esses erros.

    Se falas repetidas voltarem a acontecer, aí sim dá pra falar que o conserto não deu certo.

    sergiodinapoli commented 3 years ago

    kkk o drama era proposital Vamos ver se entendi: você montou um jeito do "evento ruim" ser detectado e impedido, antes que aconteça. Certo?

    Por que a pergunta: Minha preocupação é que a gente não percebe o bug acontecendo, mas por baixo dos panos o código consome recursos e crie estresse. Enfim, não gostaria que o SpeakUp ficasse naquela lista de mod ineficientes e pesados da qual te falei.

    jptrrs commented 3 years ago

    kkk o drama era proposital Vamos ver se entendi: você montou um jeito do "evento ruim" ser detectado e impedido, antes que aconteça. Certo?

    Exatamente.

    Por que a pergunta: Minha preocupação é que a gente não percebe o bug acontecendo, mas por baixo dos panos o código consome recursos e crie estresse. Enfim, não gostaria que o SpeakUp ficasse naquela lista de mod ineficientes e pesados da qual te falei.

    Você sempre pode acompanhar a performance de qquer coisa com o Performance Analyzer. Se quiser, você pode testar as versões anteriores, com bug, e comparar com essa última. Spoiler: o bug não faz nem cócegas!

    Agora não confunda a mensagem de erro com o erro!

    Uma mensagem qualquer é feita assim: Log.Message("Texto qualquer.")

    Um aviso, amarelo, assim: Log.Warning("Texto qualquer")

    Um aviso de erro, vermelho, assim: Log.Error("Texto qualquer")

    Então você, que já domina programação, não está autorizado a roer as unhas só por causa da cor do texto que aparecer na sua tela, viu?! Até porque é INEVITÁVEL que erros aconteçam! A maioria só depois que você lançar o bagulho e as pessoas tentarem rodar ele com uma pequena seleção dos mais de 10.000 mods que existem para RimWorld. Se você imagina que não vai acontecer, melhor tirar o cavalo da chuva! O único jeito de não ter estresse com isso é não fazer mods.

    sergiodinapoli commented 3 years ago

    Entendi. Estou fazendo um teste maior agora e até o momento correu tudo certo. Se continuar assim, podemos lançar o mod e "deliver to God".