O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Pedido para que possa criar um tutorial

Iniciado por Nathanx, 22/10/2013 às 16:29

Preciso que alguem me ajude em uma questão para que eu possa concluir meu Evento, com certeza darei + ouro e creditos para aquele que conseguir com exatidão me ajudar em minha questão...
Ate rimou!!!

* Preciso saber como fazer com que o personagem principal fique imovel quando teclar um evento, apenas sem poder se mecher, mais podendo tecla no evento dinovo por estar encostado...

so não quero que ele se mova, mais que ele possa teclar dinovu para voltar a andar. *

alguem pode me ajudar? :ded:

Espera aí que eu viajei legal. Você quer que o personagem fique imóvel mas também que possa andar? Por acaso você quer fazer algo tipo apertar tecla pra direita e ele desvia de um objeto?

Viva a lenda!



É algo mais tipo ele aperta em um evento, o personagem fica imovel, mais que ainda seja capaz de apertar o mesmo evento para voltar a andar...

tipo um liga e desliga...


isso pq ele apertando o evento ele liga algo então ele deve ficar imovel, mas quero que a qualquer momento ele possa apertar dinovu para desligar o evento fazendo assim ele voltar a andar.


* é que no meu evento, até consigo fazer ele ligar o evento, mais o problema é que o jogador fica inivisivel mais não imovel, então corre o risco da pessoa que estiver jogando perder o personagem andando sem querer e sem conseguir voltar para o evento que desliga o efeito.

+ por isso preciso do personagem imovel, mais capaz de pressionar o evento ainda. *





* qualquer coisa posto um video de como meu evento ficou, e com o problema que ele estar. *

Seria melhor você fazer uma demo com esse sistema e então enviar para analisarmos melhor, ou então disponibilizar umas screens. Porque não entendi, você quer que ele INTERAJA com um evento ou APERTE UMA TECLA que liga/desligar esse vento?

Viva a lenda!



22/10/2013 às 17:54 #4 Última edição: 22/10/2013 às 17:57 por K.A.O.S
 Abra o menu de script e procure pelo Game_Player na lista. Ao encontrar, vá para a linha 296 e encontre isso:
  def move_by_input
    return if !movable? || $game_map.interpreter.running?
    move_straight(Input.dir4) if Input.dir4 > 0
  end


Você irá adicionar um if $game_switches[X] como forma de verificar se uma determinada switch(X) esta ativa, veja:

  def move_by_input
 if $game_switches[50]
   return if !movable? || $game_map.interpreter.running?
   move_straight(Input.dir4) if Input.dir4 > 0
 end
end


Na linha 319(provavelmente será 321 agora) terá um comando chamado move_by_input, você deverá colocar ela dentro de outra if utilizando a switch usada anteriormente, ficará assim:

if $game_switches[50]  
move_by_input  
end


O que fizemos? Toda vez que a switch 50 estiver ativa, o jogador poderá andar. Caso contrário, o jogador não poderá se mover porem ainda sim conseguirá acessar menus, interagir com NPCs e etc.

Aqui esta o script ja modificado, basta copiar e colar na parte Game_Player:

Spoiler
#==============================================================================
# ** Game_Player
#------------------------------------------------------------------------------
#  Esta classe gerencia o jogador. 
# A instância desta classe é referenciada por $game_player.
#==============================================================================

class Game_Player < Game_Character
  #--------------------------------------------------------------------------
  # * Variáveis públicas
  #--------------------------------------------------------------------------
  attr_reader   :followers                # Seguidores (membros do grupo)
  #--------------------------------------------------------------------------
  # * Inicialização do objeto
  #--------------------------------------------------------------------------
  def initialize
    super
    @vehicle_type = :walk           # Tipo de veículo em uso
    @vehicle_getting_on = false     # Flag de entrada do veículo
    @vehicle_getting_off = false    # Flag de saída do veículo
    @followers = Game_Followers.new(self)
    @transparent = $data_system.opt_transparent
    clear_transfer_info
  end
  #--------------------------------------------------------------------------
  # * Limpeza das informações de transferência
  #--------------------------------------------------------------------------
  def clear_transfer_info
    @transferring = false           # Flag de transferência
    @new_map_id = 0                 # ID do novo mapa
    @new_x = 0                      # Nova coordenada X
    @new_y = 0                      # Nova coordenada Y
    @new_direction = 0              # Nova direção
  end
  #--------------------------------------------------------------------------
  # * Renovação
  #--------------------------------------------------------------------------
  def refresh
    @character_name = actor ? actor.character_name : ""
    @character_index = actor ? actor.character_index : 0
    @followers.refresh
  end
  #--------------------------------------------------------------------------
  # * Aquisição das informações do personagem
  #--------------------------------------------------------------------------
  def actor
    $game_party.battle_members[0]
  end
  #--------------------------------------------------------------------------
  # * Definição de parada
  #--------------------------------------------------------------------------
  def stopping?
    return false if @vehicle_getting_on || @vehicle_getting_off
    return super
  end
  #--------------------------------------------------------------------------
  # * Reservar localização de transferência 
  #     map_id : ID do mapa
  #     x      : coordenada X
  #     y      : coordenada Y
  #     d      : direção após transferência(2,4,6,8)
  #--------------------------------------------------------------------------
  def reserve_transfer(map_id, x, y, d = 2)
    @transferring = true
    @new_map_id = map_id
    @new_x = x
    @new_y = y
    @new_direction = d
  end
  #--------------------------------------------------------------------------
  # * Definição de transferência
  #--------------------------------------------------------------------------
  def transfer?
    @transferring
  end
  #--------------------------------------------------------------------------
  # * Execução da transferência
  #--------------------------------------------------------------------------
  def perform_transfer
    if transfer?
      set_direction(@new_direction)
      if @new_map_id != $game_map.map_id
        $game_map.setup(@new_map_id)
        $game_map.autoplay
      end
      moveto(@new_x, @new_y)
      clear_transfer_info
    end
  end
  #--------------------------------------------------------------------------
  # * Definição de passagem no mapa
  #     x : coordenada X
  #     y : coordenada Y
  #     d : direção (2,4,6,8)
  #--------------------------------------------------------------------------
  def map_passable?(x, y, d)
    case @vehicle_type
    when :boat
      $game_map.boat_passable?(x, y)
    when :ship
      $game_map.ship_passable?(x, y)
    when :airship
      true
    else
      super
    end
  end
  #--------------------------------------------------------------------------
  # * Aquisição do veículo em uso atualmente
  #--------------------------------------------------------------------------
  def vehicle
    $game_map.vehicle(@vehicle_type)
  end
  #--------------------------------------------------------------------------
  # * Definição de uso do barco
  #--------------------------------------------------------------------------
  def in_boat?
    @vehicle_type == :boat
  end
  #--------------------------------------------------------------------------
  # * Definição de uso do navio
  #--------------------------------------------------------------------------
  def in_ship?
    @vehicle_type == :ship
  end
  #--------------------------------------------------------------------------
  # * Definição de uso da aeronave
  #--------------------------------------------------------------------------
  def in_airship?
    @vehicle_type == :airship
  end
  #--------------------------------------------------------------------------
  # * Definição de caminhada normal
  #--------------------------------------------------------------------------
  def normal_walk?
    @vehicle_type == :walk && !@move_route_forcing
  end
  #--------------------------------------------------------------------------
  # * Definição de corrida
  #--------------------------------------------------------------------------
  def dash?
    return false if @move_route_forcing
    return false if $game_map.disable_dash?
    return false if vehicle
    return Input.press?(:A)
  end
  #--------------------------------------------------------------------------
  # * Definição de estado de atravessar durante debug
  #--------------------------------------------------------------------------
  def debug_through?
    $TEST && Input.press?(:CTRL)
  end
  #--------------------------------------------------------------------------
  # * Detecção de colisão (incluindo seguidores)
  #     x : coordenada X
  #     y : coordenada Y
  #--------------------------------------------------------------------------
  def collide?(x, y)
    !@through && (pos?(x, y) || followers.collide?(x, y))
  end
  #--------------------------------------------------------------------------
  # * Coordenada X do centro da tela
  #--------------------------------------------------------------------------
  def center_x
    (Graphics.width / 32 - 1) / 2.0
  end
  #--------------------------------------------------------------------------
  # * Coordenada Y do centro da tela
  #--------------------------------------------------------------------------
  def center_y
    (Graphics.height / 32 - 1) / 2.0
  end
  #--------------------------------------------------------------------------
  # * Define a posição do mapa como centro da tela
  #     x : coordenada X
  #     y : coordenada Y
  #--------------------------------------------------------------------------
  def center(x, y)
    $game_map.set_display_pos(x - center_x, y - center_y)
  end
  #--------------------------------------------------------------------------
  # * Mover para posição específica
  #     x : coordenada X
  #     y : coordenada Y
  #--------------------------------------------------------------------------
  def moveto(x, y)
    super
    center(x, y)
    make_encounter_count
    vehicle.refresh if vehicle
    @followers.synchronize(x, y, direction)
  end
  #--------------------------------------------------------------------------
  # * Aumentar número de passos
  #--------------------------------------------------------------------------
  def increase_steps
    super
    $game_party.increase_steps if normal_walk?
  end
  #--------------------------------------------------------------------------
  # * Criação do contador de encontros
  #--------------------------------------------------------------------------
  def make_encounter_count
    n = $game_map.encounter_step
    @encounter_count = rand(n) + rand(n) + 1
  end
  #--------------------------------------------------------------------------
  # * Criação de uma ID de grupo do encontro inimigo
  #--------------------------------------------------------------------------
  def make_encounter_troop_id
    encounter_list = []
    weight_sum = 0
    $game_map.encounter_list.each do |encounter|
      next unless encounter_ok?(encounter)
      encounter_list.push(encounter)
      weight_sum += encounter.weight
    end
    if weight_sum > 0
      value = rand(weight_sum)
      encounter_list.each do |encounter|
        value -= encounter.weight
        return encounter.troop_id if value < 0
      end
    end
    return 0
  end
  #--------------------------------------------------------------------------
  # * Definição de possibilidade de econtro
  #     econuter : informações de encontro
  #--------------------------------------------------------------------------
  def encounter_ok?(encounter)
    return true if encounter.region_set.empty?
    return true if encounter.region_set.include?(region_id)
    return false
  end
  #--------------------------------------------------------------------------
  # * Execução do encontro
  #--------------------------------------------------------------------------
  def encounter
    return false if $game_map.interpreter.running?
    return false if $game_system.encounter_disabled
    return false if @encounter_count > 0
    make_encounter_count
    troop_id = make_encounter_troop_id
    return false unless $data_troops[troop_id]
    BattleManager.setup(troop_id)
    BattleManager.on_encounter
    return true
  end
  #--------------------------------------------------------------------------
  # * Inicialização dos eventos do mapa
  #     x        : coordenada X
  #     y        : coordenada Y
  #     triggers : desencadeadores
  #     normal   : mesa prioridade que [personagens normais]
  #--------------------------------------------------------------------------
  def start_map_event(x, y, triggers, normal)
    $game_map.events_xy(x, y).each do |event|
      if event.trigger_in?(triggers) && event.normal_priority? == normal
        event.start
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Inicialização de evento (pressionar tecla)
  #     triggers : desencadeadores
  #--------------------------------------------------------------------------
  def check_event_trigger_here(triggers)
    start_map_event(@x, @y, triggers, false)
  end
  #--------------------------------------------------------------------------
  # * Inicialização de evento (ao tocar o evento)
  #     triggers : desencadeadores
  #--------------------------------------------------------------------------
  def check_event_trigger_there(triggers)
    x2 = $game_map.round_x_with_direction(@x, @direction)
    y2 = $game_map.round_y_with_direction(@y, @direction)
    start_map_event(x2, y2, triggers, true)
    return if $game_map.any_event_starting?
    return unless $game_map.counter?(x2, y2)
    x3 = $game_map.round_x_with_direction(x2, @direction)
    y3 = $game_map.round_y_with_direction(y2, @direction)
    start_map_event(x3, y3, triggers, true)
  end
  #--------------------------------------------------------------------------
  # * Inicialização de evento (ao tocar herói)
  #     x : coordenada X
  #     y : coordenada Y
  #--------------------------------------------------------------------------
  def check_event_trigger_touch(x, y)
    start_map_event(x, y, [1,2], true)
  end
  #--------------------------------------------------------------------------
  # * Processamento de movimento através de pressionar tecla
  #--------------------------------------------------------------------------
  def move_by_input
   if $game_switches[50]
   return if !movable? || $game_map.interpreter.running?
   move_straight(Input.dir4) if Input.dir4 > 0
 end
end
  #--------------------------------------------------------------------------
  # * Definição de mobilidade
  #--------------------------------------------------------------------------
  def movable?
    return false if moving?
    return false if @move_route_forcing || @followers.gathering?
    return false if @vehicle_getting_on || @vehicle_getting_off
    return false if $game_message.busy? || $game_message.visible
    return false if vehicle && !vehicle.movable?
    return true
  end
  #--------------------------------------------------------------------------
  # * Atualização da tela
  #--------------------------------------------------------------------------
  def update
    last_real_x = @real_x
    last_real_y = @real_y
    last_moving = moving?
    if $game_switches[50]
    move_by_input
    end
    super
    update_scroll(last_real_x, last_real_y)
    update_vehicle
    update_nonmoving(last_moving) unless moving?
    @followers.update
  end
  #--------------------------------------------------------------------------
  # * Atualização da rolagem
  #     last_real_x : ultima coordenada X real
  #     last_real_y : ultima coordenada Y real
  #--------------------------------------------------------------------------
  def update_scroll(last_real_x, last_real_y)
    ax1 = $game_map.adjust_x(last_real_x)
    ay1 = $game_map.adjust_y(last_real_y)
    ax2 = $game_map.adjust_x(@real_x)
    ay2 = $game_map.adjust_y(@real_y)
    $game_map.scroll_down (ay2 - ay1) if ay2 > ay1 && ay2 > center_y
    $game_map.scroll_left (ax1 - ax2) if ax2 < ax1 && ax2 < center_x
    $game_map.scroll_right(ax2 - ax1) if ax2 > ax1 && ax2 > center_x
    $game_map.scroll_up   (ay1 - ay2) if ay2 < ay1 && ay2 < center_y
  end
  #--------------------------------------------------------------------------
  # * Atualização do veículo
  #--------------------------------------------------------------------------
  def update_vehicle
    return if @followers.gathering?
    return unless vehicle
    if @vehicle_getting_on
      update_vehicle_get_on
    elsif @vehicle_getting_off
      update_vehicle_get_off
    else
      vehicle.sync_with_player
    end
  end
  #--------------------------------------------------------------------------
  # * Atualizção da entrada no veículo
  #--------------------------------------------------------------------------
  def update_vehicle_get_on
    if !@followers.gathering? && !moving?
      @direction = vehicle.direction
      @move_speed = vehicle.speed
      @vehicle_getting_on = false
      @transparent = true
      @through = true if in_airship?
      vehicle.get_on
    end
  end
  #--------------------------------------------------------------------------
  # * Atualização da saida do veículo
  #--------------------------------------------------------------------------
  def update_vehicle_get_off
    if !@followers.gathering? && vehicle.altitude == 0
      @vehicle_getting_off = false
      @vehicle_type = :walk
      @transparent = false
    end
  end
  #--------------------------------------------------------------------------
  # * Processamento se não está se movendo
  #     last_moving : flag de movimento
  #--------------------------------------------------------------------------
  def update_nonmoving(last_moving)
    return if $game_map.interpreter.running?
    if last_moving
      $game_party.on_player_walk
      return if check_touch_event
    end
    if movable? && Input.trigger?(:C)
      return if get_on_off_vehicle
      return if check_action_event
    end
    update_encounter if last_moving
  end
  #--------------------------------------------------------------------------
  # * Atualização dos encontros
  #--------------------------------------------------------------------------
  def update_encounter
    return if $TEST && Input.press?(:CTRL)
    return if $game_party.encounter_none?
    return if in_airship?
    return if @move_route_forcing
    @encounter_count -= encounter_progress_value
  end
  #--------------------------------------------------------------------------
  # * Aquisição do valor de progressão de encontro
  #--------------------------------------------------------------------------
  def encounter_progress_value
    value = $game_map.bush?(@x, @y) ? 2 : 1
    value *= 0.5 if $game_party.encounter_half?
    value *= 0.5 if in_ship?
    value
  end
  #--------------------------------------------------------------------------
  # * Definição de inicio de evento ao tocar herói
  #--------------------------------------------------------------------------
  def check_touch_event
    return false if in_airship?
    check_event_trigger_here([1,2])
    $game_map.setup_starting_event
  end
  #--------------------------------------------------------------------------
  # * Definição de inicio de evento ao pressionar tecla
  #--------------------------------------------------------------------------
  def check_action_event
    return false if in_airship?
    check_event_trigger_here([0])
    return true if $game_map.setup_starting_event
    check_event_trigger_there([0,1,2])
    $game_map.setup_starting_event
  end
  #--------------------------------------------------------------------------
  # * Definição de saída e entrada em veículos
  #--------------------------------------------------------------------------
  def get_on_off_vehicle
    if vehicle
      get_off_vehicle
    else
      get_on_vehicle
    end
  end
  #--------------------------------------------------------------------------
  # * Entrada em veículos
  #    Necessário estar fora de um veículo para processar
  #--------------------------------------------------------------------------
  def get_on_vehicle
    front_x = $game_map.round_x_with_direction(@x, @direction)
    front_y = $game_map.round_y_with_direction(@y, @direction)
    @vehicle_type = :boat    if $game_map.boat.pos?(front_x, front_y)
    @vehicle_type = :ship    if $game_map.ship.pos?(front_x, front_y)
    @vehicle_type = :airship if $game_map.airship.pos?(@x, @y)
    if vehicle
      @vehicle_getting_on = true
      force_move_forward unless in_airship?
      @followers.gather
    end
    @vehicle_getting_on
  end
  #--------------------------------------------------------------------------
  # * Saída de veículos
  #    Necessário estar dentro de um veículo para processar
  #--------------------------------------------------------------------------
  def get_off_vehicle
    if vehicle.land_ok?(@x, @y, @direction)
      set_direction(2) if in_airship?
      @followers.synchronize(@x, @y, @direction)
      vehicle.get_off
      unless in_airship?
        force_move_forward
        @transparent = false
      end
      @vehicle_getting_off = true
      @move_speed = 4
      @through = false
      make_encounter_count
      @followers.gather
    end
    @vehicle_getting_off
  end
  #--------------------------------------------------------------------------
  # * Forçar passo a frente
  #--------------------------------------------------------------------------
  def force_move_forward
    @through = true
    move_forward
    @through = false
  end
  #--------------------------------------------------------------------------
  # * Definição de terreno de danos
  #--------------------------------------------------------------------------
  def on_damage_floor?
    $game_map.damage_floor?(@x, @y) && !in_airship?
  end
  #--------------------------------------------------------------------------
  # * Movimento em linha reta em
  #     d       : direção (2,4,6,8)
  #     turn_ok : permissão para mudar de direção
  #--------------------------------------------------------------------------
  def move_straight(d, turn_ok = true)
    @followers.move if passable?(@x, @y, d)
    super
  end
  #--------------------------------------------------------------------------
  # * Movimento na diagonal
  #     horz : direção horizontal (4 or 6)
  #     vert : direção vertical   (2 or 8)
  #--------------------------------------------------------------------------
  def move_diagonal(horz, vert)
    @followers.move if diagonal_passable?(@x, @y, horz, vert)
    super
  end
end
[close]
Clique nas imagens p/ visualizar as aulas



22/10/2013 às 18:05 #5 Última edição: 22/10/2013 às 18:07 por Nathanx
Obrigado Kaos pela ideia, mais ainda não é oque quero, eu não quero que o personagem ande, mais possa interagir com o evento.

Acho que talvez eu esteja fazendo de forma errada e complicada a minha ideia:

* Meu evento é de esconderijo, tipo ele chega perto de um bau aberto e ao interagir com ele  o bau fecha e o personagem desaparece dando uma impressão de que o personagem esta dentro *

* Na verdade o personagem ainda esta de frente com o baú, so que com Transparencia e Atravessar Ligados, *

* Então vem o problema, o personagem continua tendo seus movimentos, podendo causar que o jogador acabe se movimentando e se perdendo com personagem invisivel *


* Isso por que a ideia é que o personagem fique preso de frente com o bau para que o jogador tenha que interagir dinovu com o evento, abrindo o bau e fazendo desligar Atravessar e Transparencia. dando impressão que o personagem saiu do baú ou de qualquer outro lugar *


Spoiler
CitarVincentVII disse: Seria melhor você fazer uma demo com esse sistema e então enviar para analisarmos melhor, ou então disponibilizar umas screens. Porque não entendi, você quer que ele INTERAJA com um evento ou APERTE UMA TECLA que liga/desligar esse vento?
[close]

É que estou em outro lugar agora so podendo digitar, então mais tarde posto umas screens e talvez tambem uma demo


* talvez ocorra o caso de alguem encontrar uma forma melhor de fazer isso que estou tentando. *  :wow:

 Você ao menos testou o script? XD Eu consigo totalmente fazer isso que tu explicou com ele. Não vejo onde esta o problema.
Clique nas imagens p/ visualizar as aulas



Citação de: K.A.O.S online 22/10/2013 às 18:08
Você ao menos testou o script? XD Eu consigo totalmente fazer isso que tu explicou com ele. Não vejo onde esta o problema.

Desculpe nem tentei quando li que você dizia que o personagem poderia andar, nem pensei em testar mais como você disse que funcionaria, vou tentar, logo mais volto e se conseguir darei o ouro e darei referencia a você, se não pedirei ajuda a você no que eu não conseguir entender ok?? :XD:...

Na verdade o evento vai além disso que informei, mais meu unico problema foi esse!!

vlw.

 Aqui uma demo pra te facilitar, fiz rapidinho pra ver se era o que tu queria:

A partir dai é só customizar... Digamos que você queira que um monstro não lhe encontre, basta ativar uma switch enquanto estiver escondido.

https://mega.co.nz/#!NoRnnQwY!HftoeAVVutkT0kMW0HAIbAX0W5w6vMUkY0BKy5fc3Y0

Clique nas imagens p/ visualizar as aulas



Acho que não tem necessidade de usar scripts, pois isso é resolvido facilmente por eventos. Basta ele criar um evento em Início Automático que deve ser iniciado quando ele interagir com o esconderijo. Depois é só criar uma condição para o evento parar o evento quando determinada teclada seja pressionada.

Eu até faria uma demo, mas estou estudando. Talvez mas tarde!

Viva a lenda!



 Eu também não acho necessário, mas depois que usei este método vi que é muito mais simples e deixa o código mais 'limpo'.  :XD: Fora que pode se estender a outras funcionalidades dependendo da necessidade do desenvolvedor.
Clique nas imagens p/ visualizar as aulas



24/10/2013 às 17:27 #11 Última edição: 24/10/2013 às 18:00 por Nathanx
Oi pessoal, conseguir fazer funcionar da forma que o vincent informou usando apenas eventos e dando uma condição. 
e baixei hoje tambem sua demo Kaos e seu script por que quero testar as duas formas, e de qualquer forma pode me ser bem util.

não baixei antes por que ao dia estou no trabalho.

vlw + ouro pros dois...  :ok:


----------------------------------------------------------------------

Spoiler
O sistema que estou desenvolvendo por eventos, tem que ser algo tipo clock tower do snes alguem ja jogou?

Spoiler
[close]

no momento a personagem esta escondida debaixo da cama...

um jogo de survival terror onde você não pode matar seu inimigo, sua unica forma de sobrevivencia é correr e se esconder, chances muito minimas de um confronto direto e sobreviver.

Existem outras versoes da continuação do jogo em ps1 e ps2.

------------------------------------------------------------------------------------

Bom então é isso pessoal. já sabem mais ou menos oque pretendo fazer =]
Obs: não é nenhuma versão de clock tower para rpg.
[close]