jptrrs / SpeakUp

A conversation mod for RimWorld
4 stars 23 forks source link

Eureka! Um CTD feliz! #12

Closed sergiodinapoli closed 3 years ago

sergiodinapoli commented 3 years ago

Nunca fiquei tao feliz com um CTD :-D. Por sorte, e com certa cabeça, consegui reproduzir o problema. Enfim encurtando o papo, observe aqui:

  • cooking_offer(INITIATOR_cooking_level<6)->
  • cooking_offer(INITIATOR_cooking_level>=6)->I'll try and cook something better for you.
  • Na minha cabeça: cooking level ou ta acima ou ta abaixo de 6. Assim fazendo, garanto que sempre haja uma via de fuga. Até quando o azar te joga no colo um pawn que... nao tem algum skill! Pois foi proibido por background! O classico "disabled".

    E ai crasha (acho!). Pois quando tenta medir o cooking level acha coisa nenhuma e fica em loop. E' isso? Procede, como possibilidade?

    De toda forma, se toda checagem de nivel pode gerar um CTD, pergunto: seria possivel codificar o fato de skill==disabled como se skill==0? Ai ja mata.

    jptrrs commented 3 years ago

    Acha? Não tem como testar pra ter certeza não?

    Em seg, 24 de mai de 2021 21:38, sergiodinapoli @.***> escreveu:

    Nunca fiquei tao feliz com um CTD :-D. Por sorte, e com certa cabeça, consegui reproduzir o problema. Enfim encurtando o papo, observe aqui:

    • cooking_offer(INITIATOR_cooking_level<6)->
    • cooking_offer(INITIATOR_cooking_level>=6)->I'll try and cook something better for you.

    Na minha cabeça: cooking level ou ta acima ou ta abaixo de 6. Assim fazendo, garanto que sempre haja uma via de fuga. Até quando o azar te joga no colo um pawn que... nao tem algum skill! Pois foi proibido por background! O classico "disabled".

    E ai crasha (acho!). Pois quando tenta medir o cooking level acha coisa nenhuma e fica em loop. E' isso? Procede, como possibilidade?

    De toda forma, se toda checagem de nivel pode gerar um CTD, pergunto: seria possivel codificar o fato de skill==disabled como se skill==0? Ai ja mata.

    — You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/jptrrs/SpeakUp/issues/12, or unsubscribe https://github.com/notifications/unsubscribe-auth/ALHBNPQSX6KDTZ3EEDARCKDTPLWQDANCNFSM45OGPHFQ .

    sergiodinapoli commented 3 years ago

    Ontem testei. Reproduzi o CTD certeiramente. Bastava forçar a interactionDef "AteMeal" de modo que a cooking fosse testada. Pontualmente, crashava. Escrevi "acho" apenas pois continuo me achando iniciante. Mas iniciante ou nao, é o que o tenho. Portanto, nada de "acho".

    Você pode confirmar que o C# não gerencia o caso duma skill não ser um INT e sim a string "Disabled"?

    Tentei até "fuçar" no C# mas me perdi e não achei nada de útil.

    jptrrs commented 3 years ago

    Reproduzi o CTD certeiramente. Bastava forçar a interactionDef "AteMeal" de modo que a cooking fosse testada. Pontualmente, crashava.

    Então como eu reproduzo?

    Você pode confirmar que o C# não gerencia o caso duma skill não ser um INT e sim a string "Disabled"?

    Não tem jeito disso acontecer. O level de uma skill, que é o que a gente puxa, é sempre um INT.

    On Tue, May 25, 2021 at 12:15 PM sergiodinapoli @.***> wrote:

    Ontem testei. Reproduzi o CTD certeiramente. Bastava forçar a interactionDef "AteMeal" de modo que a cooking fosse testada. Pontualmente, crashava. Escrevi "acho" apenas pois continuo me achando iniciante. Mas iniciante ou nao, é o que o tenho. Portanto, nada de "acho".

    Você pode confirmar que o C# não gerencia o caso duma skill não ser um INT e sim a string "Disabled"?

    Tentei até "fuçar" no C# mas me perdi e não achei nada de útil.

    — You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/jptrrs/SpeakUp/issues/12#issuecomment-847956394, or unsubscribe https://github.com/notifications/unsubscribe-auth/ALHBNPQDMJFZVHZXBEM6MELTPO5K5ANCNFSM45OGPHFQ .

    jptrrs commented 3 years ago

    <li>cooking_offer(INITIATOR_cooking_level&lt;6)-></li>

    Por que não tem nada depois de -> ?

    sergiodinapoli commented 3 years ago

    Então como eu reproduzo? ==> ative AteMeal ==> OBS: fiquei testando aqui e o AteMeal gera crash e pronto; mesmo quando cooking è definido. Vou investigar essa interactiondef especificamente

    2) Por que não tem nada depois de -> ? ==> pois se (INITIATOR_cooking_level<6), isto é o cara nao sabe cozinhar comida boa, ele nao vai acrescentar nada no texto; viceversa, ele vai oferecer para cozinhar comida melhor no futuro

    Antes de implementar essa de "wildcard" vazia, testei (estava com medo de dar pau), e nunca deu problema.

    Vou analisar o XML e te retorno.

    sergiodinapoli commented 3 years ago

    OK. Vivendo e aprendendo. Na linha 199 do Interactions.xml

  • recipient_corpse(INITIATOR_thoughtDefName==AteAwfulMeal,priority=1)-That's disgusting and gross, [RECIPIENT_nameDef]! I hope I won't ever come to that!
  • Observe que antes do "That's" so tem "-"... ma precisa ser "->".

    Por causa disso, o jogo crashava. PQP - sim o erro é meu, mas... precisa causar um CTD? Mamma mia :-) . Como erro de digitação é sempre pronto a acontecer, teria como o C# detectar esse tipo de erro e informar, ao invés de causar CTD tao doido que nem fica no player.log?

    A coisa divertida é que descobri tudo isso apenas na cagada total. Partindo de uma hipotese 100% errada, descobri e consertei o erro.

    Ah e tb aprendi que quando tento provar uma coisa, tipo "é culpa do tal negocio" preciso tb testar simulando quando o negocio nao esta'. No nosso caso, fui tao feliz em ter achado o CTD que nao pensei em testar o mesmo caso, porém com um cooking_level definido. Vivendo e aprendendo.

    jptrrs commented 3 years ago

    Uai, fechou e abriu? rsrs Vou aproveitar para comentar que eu só precisei perguntar como reproduzir o problema! Vamos ver se, no futuro, a gente pode partir já desse ponto para não perder tempo. Então: só é um issue quando pode ser reproduzido, combinado?

    PQP - sim o erro é meu, mas... precisa causar um CTD? Mamma mia :-) . Como erro de digitação é sempre pronto a acontecer, teria como o C# detectar esse tipo de erro e informar, ao invés de causar CTD tao doido que nem fica no player.log?

    Não tem nada de doido no erro, e já tinha acontecido antes. Não lembra do "<"? Eu inclusive te alertei que qualquer caractere errado no XML dá em erro fatal e o jogo não avisa o que tá acontecendo. Não tem como o código detectar porque é algo que acontece na leitura do XML. Para detectar, tem que ler, se na leitura já dá erro não tem nem como reagir.