Saga
Saga
Mensagens Nível 1
Mensagens Nível 1
Mensagens : 32
Reputação : 0
Desde : 26/08/2017
Sex 15 Dez 2017, 22:50
alguém sabe como faz uma condição pra quando o personagem virar 180 graus?
por exemplo, está indo pra frente (andando com o W) daí virar pro lado oposto (Segurar o S) e ativar alguma task.
Nex
Nex
Scripter CLEO - Intermediário
Scripter CLEO - Intermediário
Mensagens : 1240
Reputação : 99
Desde : 04/03/2013
Idade : 20
Sex 15 Dez 2017, 23:14
Salva o ângulo do player, entra em um loop e fica checando se o ângulo dele é maior ou igual que o ângulo que você salvou antes + 180.0, ou se é menor ou igual que o ângulo que você salvou antes - 180.0
Claro que, você precisa fazer um cálculo pra não comparar com ângulo < 0.0 ou ângulo > 360.0 (fora da range de ângulo)

Então fica mais ou menos assim (pseudocode):

Código:
angle = get player angle

angle_min = angle - 180.0
angle_max = angle + 180.0

if angle_min < 0.0
then
  angle_min += 360.0
end

if angle_max > 360.0
then
  angle_max -= 360.0
end

while true
  angle = get player angle
  if angle >= angle_max
  then
    // rotacionou + 180.0 graus
  end

  if angle <= angle_min
  then
    // rotacionou - 180.0 graus
  end
end
Saga
Saga
Mensagens Nível 1
Mensagens Nível 1
Mensagens : 32
Reputação : 0
Desde : 26/08/2017
Sab 16 Dez 2017, 00:23
Nex' escreveu:Salva o ângulo do player, entra em um loop e fica checando se o ângulo dele é maior ou igual que o ângulo que você salvou antes + 180.0, ou se é menor ou igual que o ângulo que você salvou antes - 180.0
Claro que, você precisa fazer um cálculo pra não comparar com ângulo < 0.0 ou ângulo > 360.0 (fora da range de ângulo)

Então fica mais ou menos assim (pseudocode):

Código:
angle = get player angle

angle_min = angle - 180.0
angle_max = angle + 180.0

if angle_min < 0.0
then
  angle_min += 360.0
end

if angle_max > 360.0
then
  angle_max -= 360.0
end

while true
  angle = get player angle
  if angle >= angle_max
  then
    // rotacionou + 180.0 graus
  end

  if angle <= angle_min
  then
    // rotacionou - 180.0 graus
  end
end

Eu fiz isso aqui:
Código:
SCRIPT_START
{
    NOP
    main_label:



    LVAR_INT cj
    LVAR_FLOAT angle
    LVAR_FLOAT angle_min
    LVAR_FLOAT angle_max

    GET_PLAYER_CHAR 0 cj

    GET_CHAR_HEADING cj angle

    angle_min = angle - 180.0
    angle_max = angle + 180.0

    IF angle_min < 0.0
    angle += 360.0
    ENDIF

    IF angle_max > 360.0
    angle_max -= 360.0
    ENDIF

    LVAR_FLOAT angle2

    GET_CHAR_HEADING cj angle2

    GET_CHAR_HEADING cj angle2
    WHILE angle=angle2
    IF angle >= angle_max
    PRINT_STRING_NOW "VIROU" 1
    ENDIF
    ENDWHILE
    NOP

    IF angle <= angle_min
    PRINT_STRING_NOW "VIROU" 1
    ENDIF

    WAIT 0

    GOTO main_label
}
SCRIPT_END
so que deu um freeze foda
Nex
Nex
Scripter CLEO - Intermediário
Scripter CLEO - Intermediário
Mensagens : 1240
Reputação : 99
Desde : 04/03/2013
Idade : 20
Sab 16 Dez 2017, 01:30
Porque cê esqueceu do WAIT 0. De qualquer jeito o que falei ali não iria funcionar

Código:
SCRIPT_START
{
    NOP
    LVAR_INT cj
    LVAR_FLOAT angle
    LVAR_FLOAT angle_min
    LVAR_FLOAT angle_max

    GET_PLAYER_CHAR 0 cj

    main_label:
    WAIT 0

    IF NOT IS_PLAYER_PLAYING 0
      GOTO main_label
    ENDIF
    GET_CHAR_HEADING cj angle

    angle_min = angle - 180.0
    angle_max = angle + 180.0

    IF angle_min < 0.0
        angle_min += 360.0
    ENDIF

    IF angle_max > 360.0
        angle_max -= 360.0
    ENDIF

    angle_min -= 1.0
    angle_max += 1.0

    main_loop:
      WAIT 0
      GET_CHAR_HEADING cj angle
      IF angle <= angle_max
      AND angle >= angle_min
        PRINT_STRING_NOW "virou" 1000
        goto main_label
      ENDIF
    goto main_loop

    GOTO main_label
}
SCRIPT_END

testei aqui a funcionou
Saga
Saga
Mensagens Nível 1
Mensagens Nível 1
Mensagens : 32
Reputação : 0
Desde : 26/08/2017
Sab 16 Dez 2017, 18:52
eu só queria que fosse no momento em que o player estivesse virando, ao invés de virar e depois fazer a ação.
eu estou fazendo um mod de realizar uma animação ao virar 180 graus, que nem no GTA IV, e em diversos outros jogos
Um Geek
Um Geek
Scripter CLEO - Intermediário
Scripter CLEO - Intermediário
Título : Carinha que mora logo ali
Mensagens : 761
Reputação : 160
Desde : 07/03/2017
Localização : BH - MG
Link : https://gta-geek.blogspot.com.br/
https://gta-geek.blogspot.com.br/
Sab 16 Dez 2017, 19:53
talvez seja melhor então pegar o quando aperta o botão de esquerda e direita.

______________________________

.::
Os mods que crio serão colocados no meu workshop link
Conteúdo patrocinado
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum