Chat game factory

Últimos temas
» Go home axel, you're drunk
por Japo/Zero Miér Sep 04, 2013 6:42 pm

» Regreso de KNIGHT :3
por Japo/Zero Mar Jul 30, 2013 9:52 pm

» [ACE] Unir mapas / Mapa continuo
por Ronal_02 Sáb Jun 08, 2013 3:22 pm

» el señor de los sueños (en desarrollo)
por davidaikago Sáb Mar 16, 2013 1:28 pm

» Top 10: peliculas mas esperadas en este 2013
por lorena-torres0887 Dom Mar 10, 2013 6:35 pm

» El Fin De La Eternidad -DLC Reminiscencia-Resubido por la nuevas politica de mediafire
por the-end-of-eternity Jue Feb 28, 2013 2:19 pm

» Neoland Capitulo C Ver Online sin descarga+Dibujo
por the-end-of-eternity Vie Feb 08, 2013 8:46 am

» bruno marx y las puertas sagradas [historia]
por davidaikago Jue Dic 27, 2012 6:53 am

» [ACE] Dudas
por Mike Jue Dic 13, 2012 4:51 pm

» top chica de acción en un juego
por davidaikago Jue Dic 13, 2012 3:35 pm

» ayuda del foro para mi juego
por monito486 Mar Dic 11, 2012 11:37 am

» [Juego Terminado] - The School's Survivors
por BrijidoTzL Sáb Dic 08, 2012 5:46 pm

» [RPG Maker VX] ¿Cómo modifico la imagen de fondo del menú?
por davidaikago Sáb Dic 08, 2012 12:58 pm

» Sistema de logros y combate [Para RPG Maker VX]
por EXENDERVES Vie Dic 07, 2012 9:10 pm

» Regreso definitivo
por Axel Jue Dic 06, 2012 10:41 pm


Imageshack

Afiliados

Dudas del XP

 :: Ayudas :: Ayuda/dudas

Ver el tema anterior Ver el tema siguiente Ir abajo

Dudas del XP

Mensaje por Japo/Zero el Jue Feb 23, 2012 12:49 am

Alguien que me pueda ayudar con esto me haria feliz.

¿Porque, si tengo un personaje de 50 de Ataque defenza y esas otras cosas en sus parametros, y hago un enemigo digamos 10 puntos de todo menos que el personaje. NUNCA logro quitarle vida? y porque los enemigos me son mortales (me hacen quitan MUCHISIMO PV) si nisiquiera me superan en las cantidades?

Espero que me puedan ayudar con estas dudas.

Salu2




¡Apoya mi juego o moriras por Snus Nu D:!
Yo apoyo:
Spoiler:

Japo/Zero
Super Moderdor
Super Moderdor

Talento : Enginer
Mensajes : 762
Engranes : 345
Reputación : 182
Fecha de inscripción : 30/05/2011
Edad : 16
Localización : En mi casa o.o

Ver perfil de usuario

Volver arriba Ir abajo

Re: Dudas del XP

Mensaje por orochii el Jue Feb 23, 2012 10:04 am

El RPG Maker XP tiene un grave problema con sus fórmulas de daño. Si no tienes armas, mueres =D, tan simple como eso.
Y eso es porque el personaje no tiene forma de tener Ataque, Defensa Física ni Defensa Mágica de otra forma más que con armas/armaduras (MAL Entracerebro :C).
Con 0 de ataque, un personaje hará SIEMPRE 0 de daño. Las skills si pueden hacer daño, a menos que tengan daño basado en ataque xDD.

En fin, yo he hecho varias fórmulas distintas para el XP. Acá está la que uso en undefined (está hecha, por si acaso, para daños bajos y casi que con poca variación).
Código:
class Game_Battler
def attack_effect(attacker)
    # Vaciar en Flag de ataque critico
    self.critical = false
    # Juicio del primer golpe
    hit_result = (rand(100) < attacker.hit)
    # Caso de Hit
    if hit_result == true
      # Calculo de daños basicos
      #atk = [attacker.atk - self.pdef / 2, 0].max
      atk = 2.0 * attacker.str
      guard = self.agi / attacker.dex
      atk = [atk - guard, 0].max
      base_damage = (((atk / self.agi)+2)*1000 + rand(100))/1000
      base_damage *= attacker.str
      defense = [attacker.dex/self.agi, 1].max
      self.damage = base_damage*defense / 5
      # Correccion de atributo
      self.damage *= elements_correct(attacker.element_set)
      self.damage /= 100
      # Cuando el marco del daño es positivo
      if self.damage > 0
        # Correccion de ataque critico
        if rand(100) < 4 * attacker.dex / self.agi
          self.damage *= 2
          self.critical = true
        end
        # Correccion de Defensa
        if self.guarding?
          self.damage /= 2
        end
      end
      # Distribucion
      if self.damage.abs > 0
        amp = [self.damage.abs * 15 / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      # Juicio del segundo Hit
      eva = 8 * self.agi / attacker.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
    end
    # Caso de Hit
    if hit_result == true
      # Lanzamiento de estado se shock
      remove_states_shock
      # Daños sustraidos del PV
      asd = self.damage
      self.damage = asd.to_i
      self.hp -= self.damage
      # Cambios de estado
      @state_changed = false
      states_plus(attacker.plus_state_set)
      states_minus(attacker.minus_state_set)
    # Al haber un error
    else
      # Al intentar dañar, opciones de ataque fallido
      self.damage = "Fallo!"
      # Vaciar Flag de ataque critico
      self.critical = false
    end
    # Fin del metodo
    return true
  end
end
Lo pones sobre Main, y lo pruebas a ver qué tal.
Sino puedes buscar esa parte que dice def attack_effect(attacker) y hacer pruebas cambiando la fórmula :P.

Y... bueno eso, salutt,
Orochii Zouveleki

PD.: También uno puede hacerse una fórmula parecida a la del VX. Es cuestión de cambiar una o dos líneas xP.

orochii
cientifico
cientifico

Talento : Grafista
Mensajes : 401
Engranes : 1498
Reputación : 24
Fecha de inscripción : 04/06/2011
Edad : 25
Localización : Puertas del infierno

Ver perfil de usuario

Volver arriba Ir abajo

Re: Dudas del XP

Mensaje por Japo/Zero el Jue Feb 23, 2012 3:05 pm

Ok gracias por la ayuda orochii, Tendre que quitarme las ganas de hacer un juego XP xD.

Salu2




¡Apoya mi juego o moriras por Snus Nu D:!
Yo apoyo:
Spoiler:

Japo/Zero
Super Moderdor
Super Moderdor

Talento : Enginer
Mensajes : 762
Engranes : 345
Reputación : 182
Fecha de inscripción : 30/05/2011
Edad : 16
Localización : En mi casa o.o

Ver perfil de usuario

Volver arriba Ir abajo

Re: Dudas del XP

Mensaje por DarkantH el Jue Feb 23, 2012 6:18 pm

En ese sentido el Xp es bastante real, una persona, por más fuerte que sea puede morir enfrentandose contra un debilucho con un arma xD

DarkantH
ingeniero
ingeniero

Talento : Maper
Mensajes : 256
Engranes : 563
Reputación : 16
Fecha de inscripción : 02/07/2011
Edad : 20
Localización : Chile, la casa blanca xD

Ver perfil de usuario

Volver arriba Ir abajo

Re: Dudas del XP

Mensaje por orochii el Vie Feb 24, 2012 12:21 am

Japo/Zero escribió:Ok gracias por la ayuda orochii, Tendre que quitarme las ganas de hacer un juego XP xD.

Salu2
D:! ¿Poero porqué? ='D. Mira, si quieres fórmula tipo RMVX, puede hacerse y bastante fácil. Sólo habrá que tratar a alguno de los atributos como defensa eso sí, y hacer algunos cambios al "Scene_Equip", pero no es tanto =DDD.
Código:
class Game_Battler
  def attack_effect(attacker)
    # Vaciar en Flag de ataque critico
    self.critical = false
    # Juicio del primer golpe
    hit_result = (rand(100) < attacker.hit)
    # Caso de Hit
    if hit_result == true
      # Calculo de daños basicos
      #atk = [attacker.atk - self.pdef / 2, 0].max
      self.damage = [attacker.str * 4 - self.dex * 2, 0].max
      # Correccion de atributo
      self.damage *= elements_correct(attacker.element_set)
      self.damage /= 100
      # Cuando el marco del daño es positivo
      if self.damage > 0
        # Correccion de ataque critico
        if rand(100) < 4 * attacker.dex / self.agi
          self.damage *= 2
          self.critical = true
        end
        # Correccion de Defensa
        if self.guarding?
          self.damage /= 2
        end
      end
      # Distribucion
      if self.damage.abs > 0
        amp = [self.damage.abs * 15 / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      # Juicio del segundo Hit
      eva = 8 * self.agi / attacker.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
    end
    # Caso de Hit
    if hit_result == true
      # Lanzamiento de estado se shock
      remove_states_shock
      # Daños sustraidos del PV
      asd = self.damage
      self.damage = asd.to_i
      self.hp -= self.damage
      # Cambios de estado
      @state_changed = false
      states_plus(attacker.plus_state_set)
      states_minus(attacker.minus_state_set)
    # Al haber un error
    else
      # Al intentar dañar, opciones de ataque fallido
      self.damage = "Fallo!"
      # Vaciar Flag de ataque critico
      self.critical = false
    end
    # Fin del metodo
    return true
  end

  def skill_effect(user, skill)
    # Clear critical flag
    self.critical = false
    # If skill scope is for ally with 1 or more HP, and your own HP = 0,
    # or skill scope is for ally with 0, and your own HP = 1 or more
    if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
      ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
      # End Method
      return false
    end
    # Clear effective flag
    effective = false
    # Set effective flag if common ID is effective
    effective |= skill.common_event_id > 0
    # First hit detection
    hit = skill.hit
    if skill.atk_f > 0
      hit *= user.hit / 100
    end
    hit_result = (rand(100) < hit)
    # Set effective flag if skill is uncertain
    effective |= hit < 100
    # If hit occurs
    if hit_result == true
      # Calculate power
      power = skill.power
      if power > 0
        #"Ataque"
        power += user.str * 4 * skill.str_f / 100
        power += user.int * 2 * skill.int_f / 100
        #Defensas
        power -= self.int * skill.pdef_f / 100
        power -= self.dex * 2 * skill.mdef_f / 100
        power = [power, 0].max
      elsif power < 0
        power -= user.str * 4 * skill.str_f / 100
        power -= user.int * 2 * skill.int_f / 100
      end
      # Calculate rate
      rate = 20
      rate += (user.dex * skill.dex_f / 100)
      rate += (user.agi * skill.agi_f / 100)
      # Calculate basic damage
      self.damage = power * rate / 20
      # Element correction
      self.damage *= elements_correct(skill.element_set)
      self.damage /= 100
      # If damage value is strictly positive
      if self.damage > 0
        # Guard correction
        if self.guarding?
          self.damage /= 2
        end
      end
      # Dispersion
      if skill.variance > 0 and self.damage.abs > 0
        amp = [self.damage.abs * skill.variance / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      # Second hit detection
      eva = 8 * self.agi / user.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
      # Set effective flag if skill is uncertain
      effective |= hit < 100
    end
    # If hit occurs
    if hit_result == true
      # If physical attack has power other than 0
      if skill.power != 0 and skill.atk_f > 0
        # State Removed by Shock
        remove_states_shock
        # Set to effective flag
        effective = true
      end
      # Substract damage from HP
      last_hp = self.hp
      self.hp -= self.damage
      effective |= self.hp != last_hp
      # State change
      @state_changed = false
      effective |= states_plus(skill.plus_state_set)
      effective |= states_minus(skill.minus_state_set)
      # If power is 0
      if skill.power == 0
        # Set damage to an empty string
        self.damage = ""
        # If state is unchanged
        unless @state_changed
          # Set damage to "Miss"
          self.damage = "Miss"
        end
      end
    # If miss occurs
    else
      # Set damage to "Miss"
      self.damage = "Miss"
    end
    # If not in battle
    unless $game_temp.in_battle
      # Set damage to nil
      self.damage = nil
    end
    # End Method
    return effective
  end

end

class Window_EquipLeft < Window_Base
  def refresh
    self.contents.clear
    draw_actor_name(@actor, 4, 0)
    #draw_actor_level(@actor, 4, 32)
    draw_actor_parameter(@actor, 4, 32, 3)
    draw_actor_parameter(@actor, 4, 64, 4)
    draw_actor_parameter(@actor, 4, 96, 5)
    draw_actor_parameter(@actor, 4, 128, 6)
    if @new_atk != nil
      self.contents.font.color = system_color
      self.contents.draw_text(160, 32, 40, 32, "->", 1)
      self.contents.font.color = normal_color
      self.contents.draw_text(200, 32, 36, 32, @new_atk.to_s, 2)
    end
    if @new_pdef != nil
      self.contents.font.color = system_color
      self.contents.draw_text(160, 64, 40, 32, "->", 1)
      self.contents.font.color = normal_color
      self.contents.draw_text(200, 64, 36, 32, @new_pdef.to_s, 2)
    end
    if @new_mdef != nil
      self.contents.font.color = system_color
      self.contents.draw_text(160, 96, 40, 32, "->", 1)
      self.contents.font.color = normal_color
      self.contents.draw_text(200, 96, 36, 32, @new_mdef.to_s, 2)
    end
    if @new_mdef != nil
      self.contents.font.color = system_color
      self.contents.draw_text(160, 128, 40, 32, "->", 1)
      self.contents.font.color = normal_color
      self.contents.draw_text(200, 128, 36, 32, @new_x.to_s, 2)
    end
  end
  #--------------------------------------------------------------------------
  # * Set parameters after changing equipment
  #    new_atk  : attack power after changing equipment
  #    new_pdef : physical defense after changing equipment
  #    new_mdef : magic defense after changing equipment
  #--------------------------------------------------------------------------
  def set_new_parameters(new_atk, new_pdef, new_mdef, new_x)
    if @new_atk != new_atk or @new_pdef != new_pdef or @new_mdef != new_mdef
      @new_atk = new_atk
      @new_pdef = new_pdef
      @new_mdef = new_mdef
      @new_x = new_x
      refresh
    end
  end
end

class Scene_Equip
  def refresh
    # Set item window to visible
    @item_window1.visible = (@right_window.index == 0)
    @item_window2.visible = (@right_window.index == 1)
    @item_window3.visible = (@right_window.index == 2)
    @item_window4.visible = (@right_window.index == 3)
    @item_window5.visible = (@right_window.index == 4)
    # Get currently equipped item
    item1 = @right_window.item
    # Set current item window to @item_window
    case @right_window.index
    when 0
      @item_window = @item_window1
    when 1
      @item_window = @item_window2
    when 2
      @item_window = @item_window3
    when 3
      @item_window = @item_window4
    when 4
      @item_window = @item_window5
    end
    # If right window is active
    if @right_window.active
      # Erase parameters for after equipment change
      @left_window.set_new_parameters(nil, nil, nil,nil)
    end
    # If item window is active
    if @item_window.active
      # Get currently selected item
      item2 = @item_window.item
      # Change equipment
      last_hp = @actor.hp
      last_sp = @actor.sp
      @actor.equip(@right_window.index, item2 == nil ? 0 : item2.id)
      # Get parameters for after equipment change
      new_atk = @actor.str
      new_pdef = @actor.dex
      new_mdef = @actor.int
      new_x = @actor.agi
      # Return equipment
      @actor.equip(@right_window.index, item1 == nil ? 0 : item1.id)
      @actor.hp = last_hp
      @actor.sp = last_sp
      # Draw in left window
      @left_window.set_new_parameters(new_atk, new_pdef, new_mdef,new_x)
    end
  end
end

class Window_ShopStatus < Window_Base
  def refresh
    self.contents.clear
    if @item == nil
      return
    end
    case @item
    when RPG::Item
      number = $game_party.item_number(@item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(@item.id)
    when RPG::Armor
      number = $game_party.armor_number(@item.id)
    end
    self.contents.font.color = system_color
    self.contents.draw_text(4, 0, 200, 32, "number in possession")
    self.contents.font.color = normal_color
    self.contents.draw_text(204, 0, 32, 32, number.to_s, 2)
    if @item.is_a?(RPG::Item)
      return
    end
    # Equipment adding information
    for i in 0...$game_party.actors.size
      # Get actor
      actor = $game_party.actors[i]
      # If equippable, then set to normal text color. If not, set to
      # invalid text color.
      if actor.equippable?(@item)
        self.contents.font.color = normal_color
      else
        self.contents.font.color = disabled_color
      end
      # Draw actor's name
      self.contents.draw_text(4, 64 + 64 * i, 120, 32, actor.name)
      # Get current equipment
      if @item.is_a?(RPG::Weapon)
        item1 = $data_weapons[actor.weapon_id]
      elsif @item.kind == 0
        item1 = $data_armors[actor.armor1_id]
      elsif @item.kind == 1
        item1 = $data_armors[actor.armor2_id]
      elsif @item.kind == 2
        item1 = $data_armors[actor.armor3_id]
      else
        item1 = $data_armors[actor.armor4_id]
      end
      # If equippable
      if actor.equippable?(@item)
        # If weapon
        if @item.is_a?(RPG::Weapon)
          atk1 = item1 != nil ? item1.str : 0
          atk2 = @item != nil ? @item.str : 0
          change = atk2 - atk1
        end
        # If armor
        if @item.is_a?(RPG::Armor)
          pdef1 = item1 != nil ? item1.dex : 0
          mdef1 = item1 != nil ? item1.agi : 0
          pdef2 = @item != nil ? @item.dex : 0
          mdef2 = @item != nil ? @item.agi : 0
          change = pdef2 - pdef1 + mdef2 - mdef1
        end
        # Draw parameter change values
        self.contents.draw_text(124, 64 + 64 * i, 112, 32,
          sprintf("%+d", change), 2)
      end
      # Draw item
      if item1 != nil
        x = 4
        y = 64 + 64 * i + 32
        bitmap = RPG::Cache.icon(item1.icon_name)
        opacity = self.contents.font.color == normal_color ? 255 : 128
        self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
        self.contents.draw_text(x + 28, y, 212, 32, item1.name)
      end
    end
  end
end

class Window_Base < Window
  def draw_actor_parameter(actor, x, y, type)
    case type
    when 0
      return
    when 1
      return
    when 2
      return
    when 3
      parameter_name = $data_system.words.str
      parameter_value = actor.str
    when 4
      parameter_name = $data_system.words.dex
      parameter_value = actor.dex
    when 5
      parameter_name = $data_system.words.agi
      parameter_value = actor.agi
    when 6
      parameter_name = $data_system.words.int
      parameter_value = actor.int
    end
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 120, 32, parameter_name)
    self.contents.font.color = normal_color
    self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s, 2)
  end
end
Es inmenso el código, lastimosamente es cuando uno puede decir que en el VX las cosas están... mejor programadas, o mejor acomodadas xD.
Pero ese código entonces incluye los cambios necesarios para que no aparezca en nada, ninguna parte, los términos "ataque", "defensa física" y "defensa mágica". Y bueno en general con ese script los skills funcionan un poco de forma "peculiar" ='D...
-"Fuerza F" y "Magia F" funcionan igual que el "Influencia Fuerza" e "Influencia Mente" respectivamente.
-"Destreza F" y "Agilidad F" todavía funcionan como "multiplicadores" para el daño (para determinar cuánto afectan dichos estados en el daño final).
-"Ataque F" no sirve para nada =D.
-"Def Física F" y "Def Mágica F" determinan el efecto de las defensas enemigas (su destreza e inteligencia respectivamente) en el daño. Poniendo cero en ambas, por ejemplo, simularía el efecto de la casilla "Ignorar defensa".

En fin, si lo usas pues bien, sino al menos fue entretenido hacer la cosa x'D (de hecho me gustó cómo quedó xDDD, probándolo en el XP xDD).

Salut,
Orochii Zouveleki

orochii
cientifico
cientifico

Talento : Grafista
Mensajes : 401
Engranes : 1498
Reputación : 24
Fecha de inscripción : 04/06/2011
Edad : 25
Localización : Puertas del infierno

Ver perfil de usuario

Volver arriba Ir abajo

Re: Dudas del XP

Mensaje por Contenido patrocinado Hoy a las 8:14 pm


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 :: Ayudas :: Ayuda/dudas

 
Permisos de este foro:
No puedes responder a temas en este foro.